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,55 @@
1
+ import { WikipageResolver } from "../wikipage/index.js";
2
+ async function enrichWikimatchCandidates(candidates, options = {}) {
3
+ if (candidates.length === 0) {
4
+ return [];
5
+ }
6
+ const resolver = await WikipageResolver.open({
7
+ ...options.resolverOptions ?? {},
8
+ ...options.progress === void 0 ? {} : { progress: options.progress }
9
+ });
10
+ try {
11
+ return applyQidResolutions(
12
+ candidates,
13
+ await resolver.resolveQids(listQids(candidates))
14
+ );
15
+ } finally {
16
+ await resolver.close();
17
+ }
18
+ }
19
+ function applyQidResolutions(candidates, resolutions) {
20
+ const resolutionsByQid = new Map(
21
+ resolutions.map((resolution) => [resolution.qid, resolution])
22
+ );
23
+ return candidates.map((candidate) => ({
24
+ ...candidate,
25
+ qidOptions: candidate.qidOptions.map(
26
+ (option) => enrichQidOption(option, resolutionsByQid.get(option.qid))
27
+ )
28
+ }));
29
+ }
30
+ function enrichQidOption(option, resolution) {
31
+ if (resolution === void 0) {
32
+ return option;
33
+ }
34
+ return {
35
+ ...option,
36
+ ...resolution.description === void 0 ? {} : { description: resolution.description },
37
+ ...resolution.disambiguation === void 0 ? {} : { disambiguation: resolution.disambiguation },
38
+ isDisambiguation: resolution.isDisambiguation,
39
+ ...resolution.label === void 0 ? {} : { label: resolution.label }
40
+ };
41
+ }
42
+ function listQids(candidates) {
43
+ return [
44
+ ...new Set(
45
+ candidates.flatMap(
46
+ (candidate) => candidate.qidOptions.map((option) => option.qid)
47
+ )
48
+ )
49
+ ];
50
+ }
51
+ export {
52
+ applyQidResolutions,
53
+ enrichWikimatchCandidates
54
+ };
55
+ //# sourceMappingURL=enrichment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wikimatch/enrichment.ts"],"sourcesContent":["import { WikipageResolver } from \"../wikipage/index.js\";\n\nimport type {\n QidResolution,\n WikipageResolverOptions,\n WikipageResolveProgressReporter,\n} from \"../wikipage/index.js\";\nimport type { WikimatchCandidate, WikimatchQidOption } from \"./types.js\";\n\nexport async function enrichWikimatchCandidates(\n candidates: readonly WikimatchCandidate[],\n options: {\n readonly progress?: WikipageResolveProgressReporter;\n readonly resolverOptions?: Omit<WikipageResolverOptions, \"progress\">;\n } = {},\n): Promise<readonly WikimatchCandidate[]> {\n if (candidates.length === 0) {\n return [];\n }\n\n const resolver = await WikipageResolver.open({\n ...(options.resolverOptions ?? {}),\n ...(options.progress === undefined ? {} : { progress: options.progress }),\n });\n\n try {\n return applyQidResolutions(\n candidates,\n await resolver.resolveQids(listQids(candidates)),\n );\n } finally {\n await resolver.close();\n }\n}\n\nexport function applyQidResolutions(\n candidates: readonly WikimatchCandidate[],\n resolutions: readonly QidResolution[],\n): readonly WikimatchCandidate[] {\n const resolutionsByQid = new Map(\n resolutions.map((resolution) => [resolution.qid, resolution]),\n );\n\n return candidates.map((candidate) => ({\n ...candidate,\n qidOptions: candidate.qidOptions.map((option) =>\n enrichQidOption(option, resolutionsByQid.get(option.qid)),\n ),\n }));\n}\n\nfunction enrichQidOption(\n option: WikimatchQidOption,\n resolution: QidResolution | undefined,\n): WikimatchQidOption {\n if (resolution === undefined) {\n return option;\n }\n\n return {\n ...option,\n ...(resolution.description === undefined\n ? {}\n : { description: resolution.description }),\n ...(resolution.disambiguation === undefined\n ? {}\n : { disambiguation: resolution.disambiguation }),\n isDisambiguation: resolution.isDisambiguation,\n ...(resolution.label === undefined ? {} : { label: resolution.label }),\n };\n}\n\nfunction listQids(\n candidates: readonly WikimatchCandidate[],\n): readonly string[] {\n return [\n ...new Set(\n candidates.flatMap((candidate) =>\n candidate.qidOptions.map((option) => option.qid),\n ),\n ),\n ];\n}\n"],"mappings":"AAAA,SAAS,wBAAwB;AASjC,eAAsB,0BACpB,YACA,UAGI,CAAC,GACmC;AACxC,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,WAAW,MAAM,iBAAiB,KAAK;AAAA,IAC3C,GAAI,QAAQ,mBAAmB,CAAC;AAAA,IAChC,GAAI,QAAQ,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,QAAQ,SAAS;AAAA,EACzE,CAAC;AAED,MAAI;AACF,WAAO;AAAA,MACL;AAAA,MACA,MAAM,SAAS,YAAY,SAAS,UAAU,CAAC;AAAA,IACjD;AAAA,EACF,UAAE;AACA,UAAM,SAAS,MAAM;AAAA,EACvB;AACF;AAEO,SAAS,oBACd,YACA,aAC+B;AAC/B,QAAM,mBAAmB,IAAI;AAAA,IAC3B,YAAY,IAAI,CAAC,eAAe,CAAC,WAAW,KAAK,UAAU,CAAC;AAAA,EAC9D;AAEA,SAAO,WAAW,IAAI,CAAC,eAAe;AAAA,IACpC,GAAG;AAAA,IACH,YAAY,UAAU,WAAW;AAAA,MAAI,CAAC,WACpC,gBAAgB,QAAQ,iBAAiB,IAAI,OAAO,GAAG,CAAC;AAAA,IAC1D;AAAA,EACF,EAAE;AACJ;AAEA,SAAS,gBACP,QACA,YACoB;AACpB,MAAI,eAAe,QAAW;AAC5B,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,WAAW,gBAAgB,SAC3B,CAAC,IACD,EAAE,aAAa,WAAW,YAAY;AAAA,IAC1C,GAAI,WAAW,mBAAmB,SAC9B,CAAC,IACD,EAAE,gBAAgB,WAAW,eAAe;AAAA,IAChD,kBAAkB,WAAW;AAAA,IAC7B,GAAI,WAAW,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,WAAW,MAAM;AAAA,EACtE;AACF;AAEA,SAAS,SACP,YACmB;AACnB,SAAO;AAAA,IACL,GAAG,IAAI;AAAA,MACL,WAAW;AAAA,QAAQ,CAAC,cAClB,UAAU,WAAW,IAAI,CAAC,WAAW,OAAO,GAAG;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,16 @@
1
+ export { JudgeWikimatchPolicyOptions, formatCandidateForPrompt, judgeWikimatchPolicy, parsePolicyResponse, validatePolicyResponse } from './policy-judge.js';
2
+ export { NarrowWikimatchCandidateOptionsOptions, narrowWikimatchCandidateOptions, parseNarrowingResponse, validateNarrowingResponse } from './option-narrowing.js';
3
+ export { countWikimatchCandidateOptions, countWikimatchQidOption, filterCandidateQidOptions, listCandidateSelectableQids, sliceCandidateByOptionBudget, splitCandidateByOptionBudget } from './options.js';
4
+ export { applyQidResolutions, enrichWikimatchCandidates } from './enrichment.js';
5
+ export { JudgeWikimatchSurfaceProtectionOptions, judgeWikimatchSurfaceProtection, parseSurfaceProtectionResponse, validateSurfaceProtectionResponse } from './surface-screening.js';
6
+ export { buildWikimatchSurfaceProtectionInput } from './surface-window.js';
7
+ export { suppressContainedRanges } from './range-suppression.js';
8
+ export { DEFAULT_WIKISPINE_FETCH_ENDPOINT, MatchWikispineSentenceCandidatesOptions, TestWikispineRuntimeOptions, WikispineProvider, WikispineRuntimeTestResult, matchWikispineSentenceCandidates, testWikispineRuntime } from './wikispine.js';
9
+ export { buildWikimatchWindows } from './window.js';
10
+ export { expandRangeByWords, listWordBoundaries } from './words.js';
11
+ export { BuildWikimatchSurfaceProtectionInputOptions, BuildWikimatchWindowsOptions, NarrowWikimatchCandidateOptionsInput, WikimatchAcceptedMention, WikimatchCandidate, WikimatchCandidateOptionNarrowingFallback, WikimatchCandidateOptionNarrowingItemOutput, WikimatchCandidateOptionNarrowingResponse, WikimatchCandidateOptionNarrowingResult, WikimatchConflictGroup, WikimatchPolicyContinuation, WikimatchPolicyDecision, WikimatchPolicyDecisionOutput, WikimatchPolicyFallback, WikimatchPolicyJudgeInput, WikimatchPolicyJudgeResult, WikimatchPolicyResponse, WikimatchPolicyUpdate, WikimatchProtectedSurface, WikimatchQidOption, WikimatchSentence, WikimatchSurface, WikimatchSurfaceProtectionBuildResult, WikimatchSurfaceProtectionFallback, WikimatchSurfaceProtectionInput, WikimatchSurfaceProtectionResponse, WikimatchSurfaceProtectionResult, WikimatchTextRange, WikimatchWindow } from './types.js';
12
+ import '../guaranteed/types.js';
13
+ import '../llm/types.js';
14
+ import 'ai';
15
+ import 'zod';
16
+ import '../wikipage/types.js';
@@ -0,0 +1,66 @@
1
+ import {
2
+ judgeWikimatchPolicy,
3
+ formatCandidateForPrompt,
4
+ parsePolicyResponse,
5
+ validatePolicyResponse
6
+ } from "./policy-judge.js";
7
+ import {
8
+ narrowWikimatchCandidateOptions,
9
+ parseNarrowingResponse,
10
+ validateNarrowingResponse
11
+ } from "./option-narrowing.js";
12
+ import {
13
+ countWikimatchCandidateOptions,
14
+ countWikimatchQidOption,
15
+ filterCandidateQidOptions,
16
+ listCandidateSelectableQids,
17
+ sliceCandidateByOptionBudget,
18
+ splitCandidateByOptionBudget
19
+ } from "./options.js";
20
+ import {
21
+ applyQidResolutions,
22
+ enrichWikimatchCandidates
23
+ } from "./enrichment.js";
24
+ import {
25
+ judgeWikimatchSurfaceProtection,
26
+ parseSurfaceProtectionResponse,
27
+ validateSurfaceProtectionResponse
28
+ } from "./surface-screening.js";
29
+ import { buildWikimatchSurfaceProtectionInput } from "./surface-window.js";
30
+ import { suppressContainedRanges } from "./range-suppression.js";
31
+ import {
32
+ DEFAULT_WIKISPINE_FETCH_ENDPOINT,
33
+ matchWikispineSentenceCandidates,
34
+ testWikispineRuntime
35
+ } from "./wikispine.js";
36
+ import { buildWikimatchWindows } from "./window.js";
37
+ import { expandRangeByWords, listWordBoundaries } from "./words.js";
38
+ export {
39
+ DEFAULT_WIKISPINE_FETCH_ENDPOINT,
40
+ applyQidResolutions,
41
+ buildWikimatchSurfaceProtectionInput,
42
+ buildWikimatchWindows,
43
+ countWikimatchCandidateOptions,
44
+ countWikimatchQidOption,
45
+ enrichWikimatchCandidates,
46
+ expandRangeByWords,
47
+ filterCandidateQidOptions,
48
+ formatCandidateForPrompt,
49
+ judgeWikimatchPolicy,
50
+ judgeWikimatchSurfaceProtection,
51
+ listCandidateSelectableQids,
52
+ listWordBoundaries,
53
+ matchWikispineSentenceCandidates,
54
+ narrowWikimatchCandidateOptions,
55
+ parseNarrowingResponse,
56
+ parsePolicyResponse,
57
+ parseSurfaceProtectionResponse,
58
+ sliceCandidateByOptionBudget,
59
+ splitCandidateByOptionBudget,
60
+ suppressContainedRanges,
61
+ testWikispineRuntime,
62
+ validateNarrowingResponse,
63
+ validatePolicyResponse,
64
+ validateSurfaceProtectionResponse
65
+ };
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wikimatch/index.ts"],"sourcesContent":["export {\n judgeWikimatchPolicy,\n formatCandidateForPrompt,\n parsePolicyResponse,\n validatePolicyResponse,\n type JudgeWikimatchPolicyOptions,\n} from \"./policy-judge.js\";\nexport {\n narrowWikimatchCandidateOptions,\n parseNarrowingResponse,\n validateNarrowingResponse,\n type NarrowWikimatchCandidateOptionsOptions,\n} from \"./option-narrowing.js\";\nexport {\n countWikimatchCandidateOptions,\n countWikimatchQidOption,\n filterCandidateQidOptions,\n listCandidateSelectableQids,\n sliceCandidateByOptionBudget,\n splitCandidateByOptionBudget,\n} from \"./options.js\";\nexport {\n applyQidResolutions,\n enrichWikimatchCandidates,\n} from \"./enrichment.js\";\nexport {\n judgeWikimatchSurfaceProtection,\n parseSurfaceProtectionResponse,\n validateSurfaceProtectionResponse,\n type JudgeWikimatchSurfaceProtectionOptions,\n} from \"./surface-screening.js\";\nexport { buildWikimatchSurfaceProtectionInput } from \"./surface-window.js\";\nexport { suppressContainedRanges } from \"./range-suppression.js\";\nexport {\n DEFAULT_WIKISPINE_FETCH_ENDPOINT,\n matchWikispineSentenceCandidates,\n type MatchWikispineSentenceCandidatesOptions,\n testWikispineRuntime,\n type TestWikispineRuntimeOptions,\n type WikispineProvider,\n type WikispineRuntimeTestResult,\n} from \"./wikispine.js\";\nexport { buildWikimatchWindows } from \"./window.js\";\nexport { expandRangeByWords, listWordBoundaries } from \"./words.js\";\nexport type {\n BuildWikimatchWindowsOptions,\n BuildWikimatchSurfaceProtectionInputOptions,\n WikimatchAcceptedMention,\n WikimatchCandidate,\n WikimatchCandidateOptionNarrowingFallback,\n WikimatchCandidateOptionNarrowingItemOutput,\n WikimatchCandidateOptionNarrowingResponse,\n WikimatchCandidateOptionNarrowingResult,\n WikimatchConflictGroup,\n NarrowWikimatchCandidateOptionsInput,\n WikimatchPolicyDecision,\n WikimatchPolicyContinuation,\n WikimatchPolicyDecisionOutput,\n WikimatchPolicyFallback,\n WikimatchPolicyJudgeInput,\n WikimatchPolicyJudgeResult,\n WikimatchPolicyResponse,\n WikimatchPolicyUpdate,\n WikimatchQidOption,\n WikimatchSentence,\n WikimatchProtectedSurface,\n WikimatchSurface,\n WikimatchSurfaceProtectionBuildResult,\n WikimatchSurfaceProtectionFallback,\n WikimatchSurfaceProtectionInput,\n WikimatchSurfaceProtectionResponse,\n WikimatchSurfaceProtectionResult,\n WikimatchTextRange,\n WikimatchWindow,\n} from \"./types.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,4CAA4C;AACrD,SAAS,+BAA+B;AACxC;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,OAIK;AACP,SAAS,6BAA6B;AACtC,SAAS,oBAAoB,0BAA0B;","names":[]}
@@ -0,0 +1,17 @@
1
+ import { GuaranteedRequest } from '../guaranteed/types.js';
2
+ import { NarrowWikimatchCandidateOptionsInput, WikimatchCandidateOptionNarrowingResult, WikimatchCandidate, WikimatchCandidateOptionNarrowingResponse } from './types.js';
3
+ import '../llm/types.js';
4
+ import 'ai';
5
+ import 'zod';
6
+ import '../wikipage/types.js';
7
+
8
+ interface NarrowWikimatchCandidateOptionsOptions extends NarrowWikimatchCandidateOptionsInput {
9
+ readonly maxRetries?: number;
10
+ readonly optionBudget: number;
11
+ readonly request: GuaranteedRequest;
12
+ }
13
+ declare function narrowWikimatchCandidateOptions(options: NarrowWikimatchCandidateOptionsOptions): Promise<WikimatchCandidateOptionNarrowingResult>;
14
+ declare function parseNarrowingResponse(candidate: WikimatchCandidate, response: WikimatchCandidateOptionNarrowingResponse): WikimatchCandidateOptionNarrowingResult;
15
+ declare function validateNarrowingResponse(candidate: WikimatchCandidate, response: WikimatchCandidateOptionNarrowingResponse): readonly string[];
16
+
17
+ export { type NarrowWikimatchCandidateOptionsOptions, narrowWikimatchCandidateOptions, parseNarrowingResponse, validateNarrowingResponse };
@@ -0,0 +1,208 @@
1
+ import { z } from "zod";
2
+ import {
3
+ ParsedJsonError,
4
+ RESPONSE_INTENT_CLASSIFIER_PROMPT_TEMPLATE,
5
+ requestGuaranteedJson
6
+ } from "../guaranteed/index.js";
7
+ import {
8
+ filterCandidateQidOptions,
9
+ listCandidateSelectableQids,
10
+ splitCandidateByOptionBudget
11
+ } from "./options.js";
12
+ import { formatCandidateForPrompt } from "./policy-judge.js";
13
+ const narrowingItemSchema = z.object({
14
+ decision: z.enum(["keep", "reject"]),
15
+ qid: z.string().regex(/^Q[1-9][0-9]*$/)
16
+ }).strict();
17
+ const narrowingResponseSchema = z.object({
18
+ qids: z.array(narrowingItemSchema)
19
+ }).strict();
20
+ async function narrowWikimatchCandidateOptions(options) {
21
+ const keptQids = /* @__PURE__ */ new Set();
22
+ const issues = [];
23
+ for (const chunk of splitCandidateByOptionBudget(
24
+ options.candidate,
25
+ options.optionBudget
26
+ )) {
27
+ const result = await requestNarrowedChunk({
28
+ ...options,
29
+ candidate: chunk
30
+ });
31
+ if (result.fallback !== void 0) {
32
+ issues.push(...result.fallback.issues);
33
+ continue;
34
+ }
35
+ for (const qid of listCandidateSelectableQids(result.candidate)) {
36
+ keptQids.add(qid);
37
+ }
38
+ }
39
+ if (issues.length > 0) {
40
+ return {
41
+ candidate: {
42
+ ...options.candidate,
43
+ qidOptions: []
44
+ },
45
+ fallback: {
46
+ issues,
47
+ reason: "guaranteed_json_failed"
48
+ }
49
+ };
50
+ }
51
+ return {
52
+ candidate: filterCandidateQidOptions(options.candidate, keptQids)
53
+ };
54
+ }
55
+ async function requestNarrowedChunk(options) {
56
+ try {
57
+ return await requestGuaranteedJson({
58
+ messages: buildNarrowingMessages(options),
59
+ parse: (response) => parseNarrowingResponse(
60
+ options.candidate,
61
+ normalizeNarrowingResponse(response)
62
+ ),
63
+ request: options.request,
64
+ responseIntentClassifierPrompt: RESPONSE_INTENT_CLASSIFIER_PROMPT_TEMPLATE,
65
+ schema: narrowingResponseSchema,
66
+ ...options.maxRetries === void 0 ? {} : { maxRetries: options.maxRetries }
67
+ });
68
+ } catch (error) {
69
+ return {
70
+ candidate: {
71
+ ...options.candidate,
72
+ qidOptions: []
73
+ },
74
+ fallback: {
75
+ issues: [formatFallbackIssue(error)],
76
+ reason: "guaranteed_json_failed"
77
+ }
78
+ };
79
+ }
80
+ }
81
+ function normalizeNarrowingResponse(response) {
82
+ return {
83
+ qids: response.qids.map((item) => ({
84
+ decision: item.decision,
85
+ qid: item.qid
86
+ }))
87
+ };
88
+ }
89
+ function parseNarrowingResponse(candidate, response) {
90
+ const issues = validateNarrowingResponse(candidate, response);
91
+ if (issues.length > 0) {
92
+ throw new ParsedJsonError(issues);
93
+ }
94
+ return {
95
+ candidate: filterCandidateQidOptions(
96
+ candidate,
97
+ new Set(
98
+ response.qids.filter((item) => item.decision === "keep").map((item) => item.qid)
99
+ )
100
+ )
101
+ };
102
+ }
103
+ function validateNarrowingResponse(candidate, response) {
104
+ const issues = [];
105
+ const allowedQids = new Set(listCandidateSelectableQids(candidate));
106
+ const seenQids = /* @__PURE__ */ new Set();
107
+ for (const item of response.qids) {
108
+ if (!allowedQids.has(item.qid)) {
109
+ issues.push(
110
+ `Unknown qid "${item.qid}" for candidate ${candidate.id}. Use exactly these QIDs: ${[
111
+ ...allowedQids
112
+ ].join(", ")}.`
113
+ );
114
+ continue;
115
+ }
116
+ if (seenQids.has(item.qid)) {
117
+ issues.push(`Duplicate narrowing result for qid ${item.qid}.`);
118
+ continue;
119
+ }
120
+ seenQids.add(item.qid);
121
+ }
122
+ for (const qid of allowedQids) {
123
+ if (!seenQids.has(qid)) {
124
+ issues.push(
125
+ `Missing narrowing result for qid ${qid}. Return exactly one keep/reject decision for every input QID.`
126
+ );
127
+ }
128
+ }
129
+ return issues;
130
+ }
131
+ function buildNarrowingMessages(input) {
132
+ return [
133
+ {
134
+ role: "system",
135
+ content: formatNarrowingSystemPrompt(input)
136
+ },
137
+ {
138
+ role: "user",
139
+ content: formatNarrowingPrompt(input)
140
+ }
141
+ ];
142
+ }
143
+ function formatNarrowingSystemPrompt(input) {
144
+ return [
145
+ "You narrow an oversized Wikidata candidate option list before final mention grounding.",
146
+ "",
147
+ "Recall policy:",
148
+ input.policyPrompt,
149
+ "",
150
+ "Rules:",
151
+ "- Return JSON only.",
152
+ "- Return exactly one keep/reject decision for every input QID.",
153
+ "- Keep any QID that could plausibly ground this surface in the current context.",
154
+ "- Reject QIDs that are clearly unrelated to the surface and context.",
155
+ "- Be conservative when uncertain; keep plausible meanings so the final grounding request can decide.",
156
+ "- Do not invent QIDs."
157
+ ].join("\n");
158
+ }
159
+ function formatNarrowingPrompt(input) {
160
+ return [
161
+ "Context:",
162
+ input.text,
163
+ "",
164
+ "Oversized candidate:",
165
+ JSON.stringify(
166
+ formatCandidateForPrompt(input.candidate, {
167
+ candidateIds: [input.candidate.id],
168
+ id: "g1",
169
+ range: input.candidate.range
170
+ }),
171
+ null,
172
+ 2
173
+ ),
174
+ "",
175
+ "Return this JSON shape:",
176
+ JSON.stringify(
177
+ {
178
+ qids: [
179
+ {
180
+ decision: "keep | reject",
181
+ qid: "QID from the input"
182
+ }
183
+ ]
184
+ },
185
+ null,
186
+ 2
187
+ )
188
+ ].join("\n");
189
+ }
190
+ function formatFallbackIssue(error) {
191
+ if (error instanceof ParsedJsonError) {
192
+ return error.issues.join("\n");
193
+ }
194
+ if (error instanceof Error) {
195
+ const issues = error.issues;
196
+ if (Array.isArray(issues) && issues.every((issue) => typeof issue === "string")) {
197
+ return issues.join("\n");
198
+ }
199
+ return error.message;
200
+ }
201
+ return String(error);
202
+ }
203
+ export {
204
+ narrowWikimatchCandidateOptions,
205
+ parseNarrowingResponse,
206
+ validateNarrowingResponse
207
+ };
208
+ //# sourceMappingURL=option-narrowing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wikimatch/option-narrowing.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n ParsedJsonError,\n RESPONSE_INTENT_CLASSIFIER_PROMPT_TEMPLATE,\n requestGuaranteedJson,\n type GuaranteedRequest,\n} from \"../guaranteed/index.js\";\nimport type { LLMessage } from \"../llm/index.js\";\n\nimport {\n filterCandidateQidOptions,\n listCandidateSelectableQids,\n splitCandidateByOptionBudget,\n} from \"./options.js\";\nimport { formatCandidateForPrompt } from \"./policy-judge.js\";\nimport type {\n NarrowWikimatchCandidateOptionsInput,\n WikimatchCandidate,\n WikimatchCandidateOptionNarrowingResponse,\n WikimatchCandidateOptionNarrowingResult,\n} from \"./types.js\";\n\nconst narrowingItemSchema = z\n .object({\n decision: z.enum([\"keep\", \"reject\"]),\n qid: z.string().regex(/^Q[1-9][0-9]*$/),\n })\n .strict();\n\nconst narrowingResponseSchema = z\n .object({\n qids: z.array(narrowingItemSchema),\n })\n .strict();\n\nexport interface NarrowWikimatchCandidateOptionsOptions extends NarrowWikimatchCandidateOptionsInput {\n readonly maxRetries?: number;\n readonly optionBudget: number;\n readonly request: GuaranteedRequest;\n}\n\nexport async function narrowWikimatchCandidateOptions(\n options: NarrowWikimatchCandidateOptionsOptions,\n): Promise<WikimatchCandidateOptionNarrowingResult> {\n const keptQids = new Set<string>();\n const issues: string[] = [];\n\n for (const chunk of splitCandidateByOptionBudget(\n options.candidate,\n options.optionBudget,\n )) {\n const result = await requestNarrowedChunk({\n ...options,\n candidate: chunk,\n });\n\n if (result.fallback !== undefined) {\n issues.push(...result.fallback.issues);\n continue;\n }\n\n for (const qid of listCandidateSelectableQids(result.candidate)) {\n keptQids.add(qid);\n }\n }\n\n if (issues.length > 0) {\n return {\n candidate: {\n ...options.candidate,\n qidOptions: [],\n },\n fallback: {\n issues,\n reason: \"guaranteed_json_failed\",\n },\n };\n }\n\n return {\n candidate: filterCandidateQidOptions(options.candidate, keptQids),\n };\n}\n\nasync function requestNarrowedChunk(\n options: NarrowWikimatchCandidateOptionsOptions,\n): Promise<WikimatchCandidateOptionNarrowingResult> {\n try {\n return await requestGuaranteedJson({\n messages: buildNarrowingMessages(options),\n parse: (response) =>\n parseNarrowingResponse(\n options.candidate,\n normalizeNarrowingResponse(response),\n ),\n request: options.request,\n responseIntentClassifierPrompt:\n RESPONSE_INTENT_CLASSIFIER_PROMPT_TEMPLATE,\n schema: narrowingResponseSchema,\n ...(options.maxRetries === undefined\n ? {}\n : { maxRetries: options.maxRetries }),\n });\n } catch (error) {\n return {\n candidate: {\n ...options.candidate,\n qidOptions: [],\n },\n fallback: {\n issues: [formatFallbackIssue(error)],\n reason: \"guaranteed_json_failed\",\n },\n };\n }\n}\n\nfunction normalizeNarrowingResponse(\n response: z.infer<typeof narrowingResponseSchema>,\n): WikimatchCandidateOptionNarrowingResponse {\n return {\n qids: response.qids.map((item) => ({\n decision: item.decision,\n qid: item.qid,\n })),\n };\n}\n\nexport function parseNarrowingResponse(\n candidate: WikimatchCandidate,\n response: WikimatchCandidateOptionNarrowingResponse,\n): WikimatchCandidateOptionNarrowingResult {\n const issues = validateNarrowingResponse(candidate, response);\n\n if (issues.length > 0) {\n throw new ParsedJsonError(issues);\n }\n\n return {\n candidate: filterCandidateQidOptions(\n candidate,\n new Set(\n response.qids\n .filter((item) => item.decision === \"keep\")\n .map((item) => item.qid),\n ),\n ),\n };\n}\n\nexport function validateNarrowingResponse(\n candidate: WikimatchCandidate,\n response: WikimatchCandidateOptionNarrowingResponse,\n): readonly string[] {\n const issues: string[] = [];\n const allowedQids = new Set(listCandidateSelectableQids(candidate));\n const seenQids = new Set<string>();\n\n for (const item of response.qids) {\n if (!allowedQids.has(item.qid)) {\n issues.push(\n `Unknown qid \"${item.qid}\" for candidate ${candidate.id}. Use exactly these QIDs: ${[\n ...allowedQids,\n ].join(\", \")}.`,\n );\n continue;\n }\n if (seenQids.has(item.qid)) {\n issues.push(`Duplicate narrowing result for qid ${item.qid}.`);\n continue;\n }\n\n seenQids.add(item.qid);\n }\n\n for (const qid of allowedQids) {\n if (!seenQids.has(qid)) {\n issues.push(\n `Missing narrowing result for qid ${qid}. Return exactly one keep/reject decision for every input QID.`,\n );\n }\n }\n\n return issues;\n}\n\nfunction buildNarrowingMessages(\n input: NarrowWikimatchCandidateOptionsInput,\n): LLMessage[] {\n return [\n {\n role: \"system\",\n content: formatNarrowingSystemPrompt(input),\n },\n {\n role: \"user\",\n content: formatNarrowingPrompt(input),\n },\n ];\n}\n\nfunction formatNarrowingSystemPrompt(\n input: NarrowWikimatchCandidateOptionsInput,\n): string {\n return [\n \"You narrow an oversized Wikidata candidate option list before final mention grounding.\",\n \"\",\n \"Recall policy:\",\n input.policyPrompt,\n \"\",\n \"Rules:\",\n \"- Return JSON only.\",\n \"- Return exactly one keep/reject decision for every input QID.\",\n \"- Keep any QID that could plausibly ground this surface in the current context.\",\n \"- Reject QIDs that are clearly unrelated to the surface and context.\",\n \"- Be conservative when uncertain; keep plausible meanings so the final grounding request can decide.\",\n \"- Do not invent QIDs.\",\n ].join(\"\\n\");\n}\n\nfunction formatNarrowingPrompt(\n input: NarrowWikimatchCandidateOptionsInput,\n): string {\n return [\n \"Context:\",\n input.text,\n \"\",\n \"Oversized candidate:\",\n JSON.stringify(\n formatCandidateForPrompt(input.candidate, {\n candidateIds: [input.candidate.id],\n id: \"g1\",\n range: input.candidate.range,\n }),\n null,\n 2,\n ),\n \"\",\n \"Return this JSON shape:\",\n JSON.stringify(\n {\n qids: [\n {\n decision: \"keep | reject\",\n qid: \"QID from the input\",\n },\n ],\n },\n null,\n 2,\n ),\n ].join(\"\\n\");\n}\n\nfunction formatFallbackIssue(error: unknown): string {\n if (error instanceof ParsedJsonError) {\n return error.issues.join(\"\\n\");\n }\n if (error instanceof Error) {\n const issues = (error as { readonly issues?: unknown }).issues;\n\n if (\n Array.isArray(issues) &&\n issues.every((issue) => typeof issue === \"string\")\n ) {\n return issues.join(\"\\n\");\n }\n\n return error.message;\n }\n\n return String(error);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,14 @@
1
+ import { WikimatchCandidate, WikimatchQidOption } from './types.js';
2
+ import '../wikipage/types.js';
3
+
4
+ declare function countWikimatchCandidateOptions(candidate: WikimatchCandidate): number;
5
+ declare function countWikimatchQidOption(option: WikimatchQidOption): number;
6
+ declare function listCandidateSelectableQids(candidate: WikimatchCandidate): readonly string[];
7
+ declare function filterCandidateQidOptions(candidate: WikimatchCandidate, allowedQids: ReadonlySet<string>): WikimatchCandidate;
8
+ declare function splitCandidateByOptionBudget(candidate: WikimatchCandidate, optionBudget: number): readonly WikimatchCandidate[];
9
+ declare function sliceCandidateByOptionBudget(candidate: WikimatchCandidate, optionBudget: number, offset: number): {
10
+ readonly candidate: WikimatchCandidate;
11
+ readonly nextOffset?: number;
12
+ };
13
+
14
+ export { countWikimatchCandidateOptions, countWikimatchQidOption, filterCandidateQidOptions, listCandidateSelectableQids, sliceCandidateByOptionBudget, splitCandidateByOptionBudget };
@@ -0,0 +1,155 @@
1
+ function countWikimatchCandidateOptions(candidate) {
2
+ return candidate.qidOptions.reduce(
3
+ (total, option) => total + countWikimatchQidOption(option),
4
+ 0
5
+ );
6
+ }
7
+ function countWikimatchQidOption(option) {
8
+ if (option.disambiguation === void 0) {
9
+ return 1;
10
+ }
11
+ return listSelectableQids(option).length;
12
+ }
13
+ function listCandidateSelectableQids(candidate) {
14
+ return [
15
+ ...new Set(
16
+ candidate.qidOptions.flatMap((option) => listSelectableQids(option))
17
+ )
18
+ ];
19
+ }
20
+ function filterCandidateQidOptions(candidate, allowedQids) {
21
+ return {
22
+ ...candidate,
23
+ qidOptions: candidate.qidOptions.flatMap((option) => {
24
+ const filtered = filterQidOption(option, allowedQids);
25
+ return filtered === void 0 ? [] : [filtered];
26
+ })
27
+ };
28
+ }
29
+ function splitCandidateByOptionBudget(candidate, optionBudget) {
30
+ if (!Number.isFinite(optionBudget) || optionBudget <= 0) {
31
+ throw new Error("Wikimatch option budget must be positive.");
32
+ }
33
+ const chunks = [];
34
+ let pendingOptions = [];
35
+ let pendingCost = 0;
36
+ for (const option of candidate.qidOptions) {
37
+ const optionChunks = splitQidOptionByBudget(option, optionBudget);
38
+ for (const optionChunk of optionChunks) {
39
+ const cost = countWikimatchQidOption(optionChunk);
40
+ if (pendingOptions.length > 0 && pendingCost + cost > optionBudget) {
41
+ chunks.push({
42
+ ...candidate,
43
+ qidOptions: pendingOptions
44
+ });
45
+ pendingOptions = [];
46
+ pendingCost = 0;
47
+ }
48
+ pendingOptions.push(optionChunk);
49
+ pendingCost += cost;
50
+ }
51
+ }
52
+ if (pendingOptions.length > 0) {
53
+ chunks.push({
54
+ ...candidate,
55
+ qidOptions: pendingOptions
56
+ });
57
+ }
58
+ return chunks;
59
+ }
60
+ function sliceCandidateByOptionBudget(candidate, optionBudget, offset) {
61
+ if (!Number.isFinite(optionBudget) || optionBudget <= 0) {
62
+ throw new Error("Wikimatch option budget must be positive.");
63
+ }
64
+ if (!Number.isInteger(offset) || offset < 0) {
65
+ throw new Error("Wikimatch option offset must be a non-negative integer.");
66
+ }
67
+ const selectedQids = listCandidateSelectableQids(candidate).slice(
68
+ offset,
69
+ offset + optionBudget
70
+ );
71
+ const filtered = filterCandidateQidOptions(candidate, new Set(selectedQids));
72
+ const nextOffset = offset + selectedQids.length < listCandidateSelectableQids(candidate).length ? offset + selectedQids.length : void 0;
73
+ return {
74
+ candidate: {
75
+ ...filtered,
76
+ ...nextOffset === void 0 ? {} : { hasMoreOptions: true }
77
+ },
78
+ ...nextOffset === void 0 ? {} : { nextOffset }
79
+ };
80
+ }
81
+ function splitQidOptionByBudget(option, optionBudget) {
82
+ if (option.disambiguation === void 0) {
83
+ return [option];
84
+ }
85
+ const selectableQids = listSelectableQids(option);
86
+ if (selectableQids.length <= optionBudget) {
87
+ return [option];
88
+ }
89
+ const chunks = [];
90
+ for (let index = 0; index < selectableQids.length; index += optionBudget) {
91
+ const qids = new Set(selectableQids.slice(index, index + optionBudget));
92
+ const filtered = filterQidOption(option, qids);
93
+ if (filtered !== void 0) {
94
+ chunks.push(filtered);
95
+ }
96
+ }
97
+ return chunks;
98
+ }
99
+ function filterQidOption(option, allowedQids) {
100
+ if (option.disambiguation === void 0) {
101
+ return allowedQids.has(option.qid) ? option : void 0;
102
+ }
103
+ const linkedQids = option.disambiguation.linkedQids.filter(
104
+ (item) => allowedQids.has(item.qid)
105
+ );
106
+ const profile = filterDisambiguationProfile(
107
+ option.disambiguation.profile,
108
+ allowedQids
109
+ );
110
+ const hasProfileMeanings = (profile?.meanings.length ?? 0) > 0;
111
+ if (linkedQids.length === 0 && !hasProfileMeanings) {
112
+ return void 0;
113
+ }
114
+ return {
115
+ ...option,
116
+ disambiguation: {
117
+ ...option.disambiguation,
118
+ linkedQids,
119
+ ...profile === void 0 ? {} : { profile }
120
+ }
121
+ };
122
+ }
123
+ function filterDisambiguationProfile(profile, allowedQids) {
124
+ if (profile === void 0) {
125
+ return void 0;
126
+ }
127
+ return {
128
+ ...profile,
129
+ meanings: profile.meanings.filter(
130
+ (meaning) => allowedQids.has(meaning.qid)
131
+ )
132
+ };
133
+ }
134
+ function listSelectableQids(option) {
135
+ if (option.disambiguation === void 0) {
136
+ return [option.qid];
137
+ }
138
+ return [
139
+ .../* @__PURE__ */ new Set([
140
+ ...option.disambiguation.profile?.meanings.map(
141
+ (meaning) => meaning.qid
142
+ ) ?? [],
143
+ ...option.disambiguation.linkedQids.map((item) => item.qid)
144
+ ])
145
+ ];
146
+ }
147
+ export {
148
+ countWikimatchCandidateOptions,
149
+ countWikimatchQidOption,
150
+ filterCandidateQidOptions,
151
+ listCandidateSelectableQids,
152
+ sliceCandidateByOptionBudget,
153
+ splitCandidateByOptionBudget
154
+ };
155
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/wikimatch/options.ts"],"sourcesContent":["import type { DisambiguationProfile } from \"../wikipage/index.js\";\n\nimport type { WikimatchCandidate, WikimatchQidOption } from \"./types.js\";\n\nexport function countWikimatchCandidateOptions(\n candidate: WikimatchCandidate,\n): number {\n return candidate.qidOptions.reduce(\n (total, option) => total + countWikimatchQidOption(option),\n 0,\n );\n}\n\nexport function countWikimatchQidOption(option: WikimatchQidOption): number {\n if (option.disambiguation === undefined) {\n return 1;\n }\n\n return listSelectableQids(option).length;\n}\n\nexport function listCandidateSelectableQids(\n candidate: WikimatchCandidate,\n): readonly string[] {\n return [\n ...new Set(\n candidate.qidOptions.flatMap((option) => listSelectableQids(option)),\n ),\n ];\n}\n\nexport function filterCandidateQidOptions(\n candidate: WikimatchCandidate,\n allowedQids: ReadonlySet<string>,\n): WikimatchCandidate {\n return {\n ...candidate,\n qidOptions: candidate.qidOptions.flatMap((option) => {\n const filtered = filterQidOption(option, allowedQids);\n\n return filtered === undefined ? [] : [filtered];\n }),\n };\n}\n\nexport function splitCandidateByOptionBudget(\n candidate: WikimatchCandidate,\n optionBudget: number,\n): readonly WikimatchCandidate[] {\n if (!Number.isFinite(optionBudget) || optionBudget <= 0) {\n throw new Error(\"Wikimatch option budget must be positive.\");\n }\n\n const chunks: WikimatchCandidate[] = [];\n let pendingOptions: WikimatchQidOption[] = [];\n let pendingCost = 0;\n\n for (const option of candidate.qidOptions) {\n const optionChunks = splitQidOptionByBudget(option, optionBudget);\n\n for (const optionChunk of optionChunks) {\n const cost = countWikimatchQidOption(optionChunk);\n\n if (pendingOptions.length > 0 && pendingCost + cost > optionBudget) {\n chunks.push({\n ...candidate,\n qidOptions: pendingOptions,\n });\n pendingOptions = [];\n pendingCost = 0;\n }\n\n pendingOptions.push(optionChunk);\n pendingCost += cost;\n }\n }\n\n if (pendingOptions.length > 0) {\n chunks.push({\n ...candidate,\n qidOptions: pendingOptions,\n });\n }\n\n return chunks;\n}\n\nexport function sliceCandidateByOptionBudget(\n candidate: WikimatchCandidate,\n optionBudget: number,\n offset: number,\n): {\n readonly candidate: WikimatchCandidate;\n readonly nextOffset?: number;\n} {\n if (!Number.isFinite(optionBudget) || optionBudget <= 0) {\n throw new Error(\"Wikimatch option budget must be positive.\");\n }\n if (!Number.isInteger(offset) || offset < 0) {\n throw new Error(\"Wikimatch option offset must be a non-negative integer.\");\n }\n\n const selectedQids = listCandidateSelectableQids(candidate).slice(\n offset,\n offset + optionBudget,\n );\n const filtered = filterCandidateQidOptions(candidate, new Set(selectedQids));\n const nextOffset =\n offset + selectedQids.length < listCandidateSelectableQids(candidate).length\n ? offset + selectedQids.length\n : undefined;\n\n return {\n candidate: {\n ...filtered,\n ...(nextOffset === undefined ? {} : { hasMoreOptions: true }),\n },\n ...(nextOffset === undefined ? {} : { nextOffset }),\n };\n}\n\nfunction splitQidOptionByBudget(\n option: WikimatchQidOption,\n optionBudget: number,\n): readonly WikimatchQidOption[] {\n if (option.disambiguation === undefined) {\n return [option];\n }\n\n const selectableQids = listSelectableQids(option);\n\n if (selectableQids.length <= optionBudget) {\n return [option];\n }\n\n const chunks: WikimatchQidOption[] = [];\n\n for (let index = 0; index < selectableQids.length; index += optionBudget) {\n const qids = new Set(selectableQids.slice(index, index + optionBudget));\n const filtered = filterQidOption(option, qids);\n\n if (filtered !== undefined) {\n chunks.push(filtered);\n }\n }\n\n return chunks;\n}\n\nfunction filterQidOption(\n option: WikimatchQidOption,\n allowedQids: ReadonlySet<string>,\n): WikimatchQidOption | undefined {\n if (option.disambiguation === undefined) {\n return allowedQids.has(option.qid) ? option : undefined;\n }\n\n const linkedQids = option.disambiguation.linkedQids.filter((item) =>\n allowedQids.has(item.qid),\n );\n const profile = filterDisambiguationProfile(\n option.disambiguation.profile,\n allowedQids,\n );\n const hasProfileMeanings = (profile?.meanings.length ?? 0) > 0;\n\n if (linkedQids.length === 0 && !hasProfileMeanings) {\n return undefined;\n }\n\n return {\n ...option,\n disambiguation: {\n ...option.disambiguation,\n linkedQids,\n ...(profile === undefined ? {} : { profile }),\n },\n };\n}\n\nfunction filterDisambiguationProfile(\n profile: DisambiguationProfile | undefined,\n allowedQids: ReadonlySet<string>,\n): DisambiguationProfile | undefined {\n if (profile === undefined) {\n return undefined;\n }\n\n return {\n ...profile,\n meanings: profile.meanings.filter((meaning) =>\n allowedQids.has(meaning.qid),\n ),\n };\n}\n\nfunction listSelectableQids(option: WikimatchQidOption): readonly string[] {\n if (option.disambiguation === undefined) {\n return [option.qid];\n }\n\n return [\n ...new Set([\n ...(option.disambiguation.profile?.meanings.map(\n (meaning) => meaning.qid,\n ) ?? []),\n ...option.disambiguation.linkedQids.map((item) => item.qid),\n ]),\n ];\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,17 @@
1
+ import { GuaranteedRequest } from '../guaranteed/types.js';
2
+ import { WikimatchPolicyJudgeInput, WikimatchCandidate, WikimatchConflictGroup, WikimatchPolicyJudgeResult, WikimatchPolicyResponse } from './types.js';
3
+ import '../llm/types.js';
4
+ import 'ai';
5
+ import 'zod';
6
+ import '../wikipage/types.js';
7
+
8
+ interface JudgeWikimatchPolicyOptions extends WikimatchPolicyJudgeInput {
9
+ readonly maxRetries?: number;
10
+ readonly request: GuaranteedRequest;
11
+ }
12
+ declare function judgeWikimatchPolicy(options: JudgeWikimatchPolicyOptions): Promise<WikimatchPolicyJudgeResult>;
13
+ declare function parsePolicyResponse(candidates: readonly WikimatchCandidate[], response: WikimatchPolicyResponse, groups?: readonly WikimatchConflictGroup[]): WikimatchPolicyJudgeResult;
14
+ declare function validatePolicyResponse(candidates: readonly WikimatchCandidate[], response: WikimatchPolicyResponse, groups?: readonly WikimatchConflictGroup[]): readonly string[];
15
+ declare function formatCandidateForPrompt(candidate: WikimatchCandidate, _group?: WikimatchConflictGroup): object;
16
+
17
+ export { type JudgeWikimatchPolicyOptions, formatCandidateForPrompt, judgeWikimatchPolicy, parsePolicyResponse, validatePolicyResponse };