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.
- package/LICENSE +201 -0
- package/data/editor/clue_reviewer.jinja +410 -0
- package/data/editor/clue_reviewer_generator.jinja +428 -0
- package/data/editor/revision_feedback.jinja +5 -0
- package/data/editor/text_compressor.jinja +127 -0
- package/data/guaranteed/response_intent_classifier.jinja +8 -0
- package/data/help/commands/archive/next.jinja +29 -0
- package/data/help/commands/gc.jinja +38 -0
- package/data/help/commands/legacy/migrate.jinja +20 -0
- package/data/help/commands/legacy.jinja +19 -0
- package/data/help/commands/maintenance/chapter/add.jinja +41 -0
- package/data/help/commands/maintenance/chapter/list.jinja +33 -0
- package/data/help/commands/maintenance/chapter/move.jinja +36 -0
- package/data/help/commands/maintenance/chapter/remove.jinja +26 -0
- package/data/help/commands/maintenance/chapter/reset.jinja +29 -0
- package/data/help/commands/maintenance/chapter/set-source.jinja +34 -0
- package/data/help/commands/maintenance/chapter/set-summary.jinja +31 -0
- package/data/help/commands/maintenance/chapter/set-title.jinja +29 -0
- package/data/help/commands/maintenance/chapter/tree.jinja +58 -0
- package/data/help/commands/maintenance/chapter.jinja +59 -0
- package/data/help/commands/maintenance/cover.jinja +28 -0
- package/data/help/commands/maintenance/meta.jinja +55 -0
- package/data/help/commands/predicate.jinja +460 -0
- package/data/help/commands/root.jinja +83 -0
- package/data/help/commands/transform.jinja +34 -0
- package/data/help/commands/uri.jinja +274 -0
- package/data/help/topics/config.jinja +88 -0
- package/data/help/topics/format.jinja +72 -0
- package/data/help/topics/readiness.jinja +99 -0
- package/data/help/topics/recipe.jinja +151 -0
- package/data/help/topics/runtime.jinja +62 -0
- package/data/help/topics/uri.jinja +178 -0
- package/data/output/epub/cover.xhtml.jinja +13 -0
- package/data/output/epub/nav.xhtml.jinja +12 -0
- package/data/output/epub/package.opf.xml.jinja +39 -0
- package/data/output/epub/section.xhtml.jinja +12 -0
- package/data/topologization/book_coherence_extraction.jinja +223 -0
- package/data/topologization/chunk_extraction.jinja +233 -0
- package/data/topologization/evidence_choice.jinja +38 -0
- package/data/topologization/translate_chunks.jinja +138 -0
- package/data/topologization/user_focused_extraction.jinja +378 -0
- package/dist/archive/query/archive-view.d.ts +26 -0
- package/dist/archive/query/archive-view.js +4540 -0
- package/dist/archive/query/archive-view.js.map +1 -0
- package/dist/archive/query/continuation-cursor.d.ts +61 -0
- package/dist/archive/query/continuation-cursor.js +363 -0
- package/dist/archive/query/continuation-cursor.js.map +1 -0
- package/dist/archive/query/index.d.ts +29 -0
- package/dist/archive/query/index.js +63 -0
- package/dist/archive/query/index.js.map +1 -0
- package/dist/archive/query/lexical-search.d.ts +22 -0
- package/dist/archive/query/lexical-search.js +137 -0
- package/dist/archive/query/lexical-search.js.map +1 -0
- package/dist/archive/query/search-cache.d.ts +192 -0
- package/dist/archive/query/search-cache.js +1248 -0
- package/dist/archive/query/search-cache.js.map +1 -0
- package/dist/archive/search-index/index.d.ts +26 -0
- package/dist/archive/search-index/index.js +29 -0
- package/dist/archive/search-index/index.js.map +1 -0
- package/dist/archive/search-index/search-index.d.ts +26 -0
- package/dist/archive/search-index/search-index.js +555 -0
- package/dist/archive/search-index/search-index.js.map +1 -0
- package/dist/archive/search-index/search-tokenizer.d.ts +16 -0
- package/dist/archive/search-index/search-tokenizer.js +225 -0
- package/dist/archive/search-index/search-tokenizer.js.map +1 -0
- package/dist/common/cli-command.d.ts +4 -0
- package/dist/common/cli-command.js +7 -0
- package/dist/common/cli-command.js.map +1 -0
- package/dist/common/data-dir.d.ts +3 -0
- package/dist/common/data-dir.js +48 -0
- package/dist/common/data-dir.js.map +1 -0
- package/dist/common/language.d.ts +55 -0
- package/dist/common/language.js +208 -0
- package/dist/common/language.js.map +1 -0
- package/dist/common/llm-scope.d.ts +19 -0
- package/dist/common/llm-scope.js +31 -0
- package/dist/common/llm-scope.js.map +1 -0
- package/dist/common/logging.d.ts +22 -0
- package/dist/common/logging.js +141 -0
- package/dist/common/logging.js.map +1 -0
- package/dist/common/template.d.ts +8 -0
- package/dist/common/template.js +54 -0
- package/dist/common/template.js.map +1 -0
- package/dist/common/tinyld-language.d.ts +6 -0
- package/dist/common/tinyld-language.js +34 -0
- package/dist/common/tinyld-language.js.map +1 -0
- package/dist/common/wiki-graph-dir.d.ts +10 -0
- package/dist/common/wiki-graph-dir.js +41 -0
- package/dist/common/wiki-graph-dir.js.map +1 -0
- package/dist/common/wiki-graph-temp.d.ts +6 -0
- package/dist/common/wiki-graph-temp.js +21 -0
- package/dist/common/wiki-graph-temp.js.map +1 -0
- package/dist/common/wiki-graph-uri.d.ts +28 -0
- package/dist/common/wiki-graph-uri.js +171 -0
- package/dist/common/wiki-graph-uri.js.map +1 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.js +13 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/task-context.d.ts +41 -0
- package/dist/context/task-context.js +111 -0
- package/dist/context/task-context.js.map +1 -0
- package/dist/document/database.d.ts +30 -0
- package/dist/document/database.js +273 -0
- package/dist/document/database.js.map +1 -0
- package/dist/document/document.d.ts +153 -0
- package/dist/document/document.js +615 -0
- package/dist/document/document.js.map +1 -0
- package/dist/document/fragments.d.ts +63 -0
- package/dist/document/fragments.js +371 -0
- package/dist/document/fragments.js.map +1 -0
- package/dist/document/index.d.ts +13 -0
- package/dist/document/index.js +62 -0
- package/dist/document/index.js.map +1 -0
- package/dist/document/schema.d.ts +8 -0
- package/dist/document/schema.js +472 -0
- package/dist/document/schema.js.map +1 -0
- package/dist/document/shared-state-database.d.ts +9 -0
- package/dist/document/shared-state-database.js +193 -0
- package/dist/document/shared-state-database.js.map +1 -0
- package/dist/document/stores.d.ts +203 -0
- package/dist/document/stores.js +1678 -0
- package/dist/document/stores.js.map +1 -0
- package/dist/document/text-streams.d.ts +86 -0
- package/dist/document/text-streams.js +515 -0
- package/dist/document/text-streams.js.map +1 -0
- package/dist/document/types.d.ts +148 -0
- package/dist/document/types.js +69 -0
- package/dist/document/types.js.map +1 -0
- package/dist/editor/clue.d.ts +27 -0
- package/dist/editor/clue.js +158 -0
- package/dist/editor/clue.js.map +1 -0
- package/dist/editor/compressor.d.ts +18 -0
- package/dist/editor/compressor.js +68 -0
- package/dist/editor/compressor.js.map +1 -0
- package/dist/editor/editor.d.ts +39 -0
- package/dist/editor/editor.js +253 -0
- package/dist/editor/editor.js.map +1 -0
- package/dist/editor/feedback.d.ts +16 -0
- package/dist/editor/feedback.js +104 -0
- package/dist/editor/feedback.js.map +1 -0
- package/dist/editor/index.d.ts +17 -0
- package/dist/editor/index.js +5 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/language-review.d.ts +14 -0
- package/dist/editor/language-review.js +35 -0
- package/dist/editor/language-review.js.map +1 -0
- package/dist/editor/log.d.ts +37 -0
- package/dist/editor/log.js +202 -0
- package/dist/editor/log.js.map +1 -0
- package/dist/editor/markup.d.ts +20 -0
- package/dist/editor/markup.js +294 -0
- package/dist/editor/markup.js.map +1 -0
- package/dist/editor/prompt-templates.d.ts +6 -0
- package/dist/editor/prompt-templates.js +11 -0
- package/dist/editor/prompt-templates.js.map +1 -0
- package/dist/editor/response.d.ts +5 -0
- package/dist/editor/response.js +31 -0
- package/dist/editor/response.js.map +1 -0
- package/dist/editor/review.d.ts +34 -0
- package/dist/editor/review.js +189 -0
- package/dist/editor/review.js.map +1 -0
- package/dist/editor/types.d.ts +31 -0
- package/dist/editor/types.js +21 -0
- package/dist/editor/types.js.map +1 -0
- package/dist/evidence-selection/anchor-resolver.d.ts +43 -0
- package/dist/evidence-selection/anchor-resolver.js +783 -0
- package/dist/evidence-selection/anchor-resolver.js.map +1 -0
- package/dist/evidence-selection/anchor-types.d.ts +27 -0
- package/dist/evidence-selection/anchor-types.js +1 -0
- package/dist/evidence-selection/anchor-types.js.map +1 -0
- package/dist/evidence-selection/index.d.ts +8 -0
- package/dist/evidence-selection/index.js +32 -0
- package/dist/evidence-selection/index.js.map +1 -0
- package/dist/evidence-selection/prompt.d.ts +18 -0
- package/dist/evidence-selection/prompt.js +54 -0
- package/dist/evidence-selection/prompt.js.map +1 -0
- package/dist/evidence-selection/quote-score.d.ts +29 -0
- package/dist/evidence-selection/quote-score.js +331 -0
- package/dist/evidence-selection/quote-score.js.map +1 -0
- package/dist/evidence-selection/selection-resolver.d.ts +19 -0
- package/dist/evidence-selection/selection-resolver.js +303 -0
- package/dist/evidence-selection/selection-resolver.js.map +1 -0
- package/dist/evidence-selection/text.d.ts +4 -0
- package/dist/evidence-selection/text.js +66 -0
- package/dist/evidence-selection/text.js.map +1 -0
- package/dist/evidence-selection/types.d.ts +36 -0
- package/dist/evidence-selection/types.js +1 -0
- package/dist/evidence-selection/types.js.map +1 -0
- package/dist/facade/app.d.ts +75 -0
- package/dist/facade/app.js +141 -0
- package/dist/facade/app.js.map +1 -0
- package/dist/facade/build-queue.d.ts +181 -0
- package/dist/facade/build-queue.js +1442 -0
- package/dist/facade/build-queue.js.map +1 -0
- package/dist/facade/chapter-build.d.ts +60 -0
- package/dist/facade/chapter-build.js +1020 -0
- package/dist/facade/chapter-build.js.map +1 -0
- package/dist/facade/chapter.d.ts +168 -0
- package/dist/facade/chapter.js +944 -0
- package/dist/facade/chapter.js.map +1 -0
- package/dist/facade/digest.d.ts +55 -0
- package/dist/facade/digest.js +168 -0
- package/dist/facade/digest.js.map +1 -0
- package/dist/facade/graph.d.ts +60 -0
- package/dist/facade/graph.js +203 -0
- package/dist/facade/graph.js.map +1 -0
- package/dist/facade/import.d.ts +49 -0
- package/dist/facade/import.js +262 -0
- package/dist/facade/import.js.map +1 -0
- package/dist/facade/index.d.ts +39 -0
- package/dist/facade/index.js +171 -0
- package/dist/facade/index.js.map +1 -0
- package/dist/facade/knowledge-graph-build.d.ts +75 -0
- package/dist/facade/knowledge-graph-build.js +897 -0
- package/dist/facade/knowledge-graph-build.js.map +1 -0
- package/dist/facade/llm-sampling.d.ts +11 -0
- package/dist/facade/llm-sampling.js +58 -0
- package/dist/facade/llm-sampling.js.map +1 -0
- package/dist/facade/types.d.ts +8 -0
- package/dist/facade/types.js +1 -0
- package/dist/facade/types.js.map +1 -0
- package/dist/facade/wiki-graph-archive.d.ts +41 -0
- package/dist/facade/wiki-graph-archive.js +130 -0
- package/dist/facade/wiki-graph-archive.js.map +1 -0
- package/dist/gc/files.d.ts +15 -0
- package/dist/gc/files.js +141 -0
- package/dist/gc/files.js.map +1 -0
- package/dist/gc/index.d.ts +2 -0
- package/dist/gc/index.js +5 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/gc/lock.d.ts +3 -0
- package/dist/gc/lock.js +137 -0
- package/dist/gc/lock.js.map +1 -0
- package/dist/gc/runner.d.ts +9 -0
- package/dist/gc/runner.js +129 -0
- package/dist/gc/runner.js.map +1 -0
- package/dist/gc/tmp-gc.d.ts +5 -0
- package/dist/gc/tmp-gc.js +57 -0
- package/dist/gc/tmp-gc.js.map +1 -0
- package/dist/gc/types.d.ts +24 -0
- package/dist/gc/types.js +1 -0
- package/dist/gc/types.js.map +1 -0
- package/dist/gc.cjs +10041 -0
- package/dist/gc.cjs.map +1 -0
- package/dist/gc.d.cts +10 -0
- package/dist/gc.d.ts +2 -0
- package/dist/gc.js +5 -0
- package/dist/gc.js.map +1 -0
- package/dist/guaranteed/classifier.d.ts +10 -0
- package/dist/guaranteed/classifier.js +88 -0
- package/dist/guaranteed/classifier.js.map +1 -0
- package/dist/guaranteed/errors.d.ts +38 -0
- package/dist/guaranteed/errors.js +73 -0
- package/dist/guaranteed/errors.js.map +1 -0
- package/dist/guaranteed/index.d.ts +7 -0
- package/dist/guaranteed/index.js +21 -0
- package/dist/guaranteed/index.js.map +1 -0
- package/dist/guaranteed/request.d.ts +8 -0
- package/dist/guaranteed/request.js +206 -0
- package/dist/guaranteed/request.js.map +1 -0
- package/dist/guaranteed/response.d.ts +12 -0
- package/dist/guaranteed/response.js +98 -0
- package/dist/guaranteed/response.js.map +1 -0
- package/dist/guaranteed/types.d.ts +20 -0
- package/dist/guaranteed/types.js +1 -0
- package/dist/guaranteed/types.js.map +1 -0
- package/dist/index-B8NNnQ8P.d.ts +424 -0
- package/dist/index.cjs +34774 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2462 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.js +168 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy-sdpub/upgrade.d.ts +7 -0
- package/dist/legacy-sdpub/upgrade.js +795 -0
- package/dist/legacy-sdpub/upgrade.js.map +1 -0
- package/dist/llm/cache.d.ts +13 -0
- package/dist/llm/cache.js +35 -0
- package/dist/llm/cache.js.map +1 -0
- package/dist/llm/client.d.ts +26 -0
- package/dist/llm/client.js +572 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/context.d.ts +22 -0
- package/dist/llm/context.js +78 -0
- package/dist/llm/context.js.map +1 -0
- package/dist/llm/errors.d.ts +7 -0
- package/dist/llm/errors.js +12 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.js +17 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/request-log.d.ts +9 -0
- package/dist/llm/request-log.js +35 -0
- package/dist/llm/request-log.js.map +1 -0
- package/dist/llm/sampling.d.ts +11 -0
- package/dist/llm/sampling.js +67 -0
- package/dist/llm/sampling.js.map +1 -0
- package/dist/llm/types.d.ts +50 -0
- package/dist/llm/types.js +1 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/output/epub/archive.d.ts +9 -0
- package/dist/output/epub/archive.js +81 -0
- package/dist/output/epub/archive.js.map +1 -0
- package/dist/output/epub/book.d.ts +15 -0
- package/dist/output/epub/book.js +76 -0
- package/dist/output/epub/book.js.map +1 -0
- package/dist/output/epub/content.d.ts +9 -0
- package/dist/output/epub/content.js +35 -0
- package/dist/output/epub/content.js.map +1 -0
- package/dist/output/epub/index.d.ts +20 -0
- package/dist/output/epub/index.js +14 -0
- package/dist/output/epub/index.js.map +1 -0
- package/dist/output/epub/model.d.ts +24 -0
- package/dist/output/epub/model.js +1 -0
- package/dist/output/epub/model.js.map +1 -0
- package/dist/output/epub/navigation.d.ts +10 -0
- package/dist/output/epub/navigation.js +39 -0
- package/dist/output/epub/navigation.js.map +1 -0
- package/dist/output/epub/package.d.ts +17 -0
- package/dist/output/epub/package.js +29 -0
- package/dist/output/epub/package.js.map +1 -0
- package/dist/output/epub/shared.d.ts +4 -0
- package/dist/output/epub/shared.js +12 -0
- package/dist/output/epub/shared.js.map +1 -0
- package/dist/output/epub/templates.d.ts +35 -0
- package/dist/output/epub/templates.js +26 -0
- package/dist/output/epub/templates.js.map +1 -0
- package/dist/output/index.d.ts +14 -0
- package/dist/output/index.js +11 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/plain-text.d.ts +18 -0
- package/dist/output/plain-text.js +56 -0
- package/dist/output/plain-text.js.map +1 -0
- package/dist/progress/index.d.ts +3 -0
- package/dist/progress/index.js +14 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/reporter.d.ts +10 -0
- package/dist/progress/reporter.js +79 -0
- package/dist/progress/reporter.js.map +1 -0
- package/dist/progress/tracker.d.ts +37 -0
- package/dist/progress/tracker.js +119 -0
- package/dist/progress/tracker.js.map +1 -0
- package/dist/progress/types.d.ts +28 -0
- package/dist/progress/types.js +1 -0
- package/dist/progress/types.js.map +1 -0
- package/dist/reader/attention/attention.d.ts +39 -0
- package/dist/reader/attention/attention.js +123 -0
- package/dist/reader/attention/attention.js.map +1 -0
- package/dist/reader/attention/index.d.ts +9 -0
- package/dist/reader/attention/index.js +5 -0
- package/dist/reader/attention/index.js.map +1 -0
- package/dist/reader/attention/wave-reflection.d.ts +21 -0
- package/dist/reader/attention/wave-reflection.js +153 -0
- package/dist/reader/attention/wave-reflection.js.map +1 -0
- package/dist/reader/attention/working-memory.d.ts +28 -0
- package/dist/reader/attention/working-memory.js +62 -0
- package/dist/reader/attention/working-memory.js.map +1 -0
- package/dist/reader/chunk-batch/extract.d.ts +13 -0
- package/dist/reader/chunk-batch/extract.js +14 -0
- package/dist/reader/chunk-batch/extract.js.map +1 -0
- package/dist/reader/chunk-batch/extractor.d.ts +17 -0
- package/dist/reader/chunk-batch/extractor.js +337 -0
- package/dist/reader/chunk-batch/extractor.js.map +1 -0
- package/dist/reader/chunk-batch/fragment-projection.d.ts +34 -0
- package/dist/reader/chunk-batch/fragment-projection.js +94 -0
- package/dist/reader/chunk-batch/fragment-projection.js.map +1 -0
- package/dist/reader/chunk-batch/index.d.ts +12 -0
- package/dist/reader/chunk-batch/index.js +13 -0
- package/dist/reader/chunk-batch/index.js.map +1 -0
- package/dist/reader/chunk-batch/language.d.ts +9 -0
- package/dist/reader/chunk-batch/language.js +23 -0
- package/dist/reader/chunk-batch/language.js.map +1 -0
- package/dist/reader/chunk-batch/parser.d.ts +94 -0
- package/dist/reader/chunk-batch/parser.js +640 -0
- package/dist/reader/chunk-batch/parser.js.map +1 -0
- package/dist/reader/chunk-batch/prompt-templates.d.ts +6 -0
- package/dist/reader/chunk-batch/prompt-templates.js +11 -0
- package/dist/reader/chunk-batch/prompt-templates.js.map +1 -0
- package/dist/reader/chunk-batch/types.d.ts +85 -0
- package/dist/reader/chunk-batch/types.js +1 -0
- package/dist/reader/chunk-batch/types.js.map +1 -0
- package/dist/reader/index.d.ts +13 -0
- package/dist/reader/index.js +7 -0
- package/dist/reader/index.js.map +1 -0
- package/dist/reader/reader.d.ts +37 -0
- package/dist/reader/reader.js +82 -0
- package/dist/reader/reader.js.map +1 -0
- package/dist/reader/segment/index.d.ts +2 -0
- package/dist/reader/segment/index.js +5 -0
- package/dist/reader/segment/index.js.map +1 -0
- package/dist/reader/segment/intl-segmenter.d.ts +5 -0
- package/dist/reader/segment/intl-segmenter.js +102 -0
- package/dist/reader/segment/intl-segmenter.js.map +1 -0
- package/dist/reader/segment/segment.d.ts +5 -0
- package/dist/reader/segment/segment.js +9 -0
- package/dist/reader/segment/segment.js.map +1 -0
- package/dist/reader/segment/types.d.ts +14 -0
- package/dist/reader/segment/types.js +1 -0
- package/dist/reader/segment/types.js.map +1 -0
- package/dist/reader/types.d.ts +29 -0
- package/dist/reader/types.js +1 -0
- package/dist/reader/types.js.map +1 -0
- package/dist/serial.d.ts +89 -0
- package/dist/serial.js +476 -0
- package/dist/serial.js.map +1 -0
- package/dist/source/adapter.d.ts +15 -0
- package/dist/source/adapter.js +1 -0
- package/dist/source/adapter.js.map +1 -0
- package/dist/source/epub/archive.d.ts +27 -0
- package/dist/source/epub/archive.js +189 -0
- package/dist/source/epub/archive.js.map +1 -0
- package/dist/source/epub/content.d.ts +22 -0
- package/dist/source/epub/content.js +183 -0
- package/dist/source/epub/content.js.map +1 -0
- package/dist/source/epub/document.d.ts +55 -0
- package/dist/source/epub/document.js +179 -0
- package/dist/source/epub/document.js.map +1 -0
- package/dist/source/epub/index.d.ts +10 -0
- package/dist/source/epub/index.js +6 -0
- package/dist/source/epub/index.js.map +1 -0
- package/dist/source/epub/navigation.d.ts +16 -0
- package/dist/source/epub/navigation.js +215 -0
- package/dist/source/epub/navigation.js.map +1 -0
- package/dist/source/epub/package.d.ts +33 -0
- package/dist/source/epub/package.js +237 -0
- package/dist/source/epub/package.js.map +1 -0
- package/dist/source/epub/xml.d.ts +16 -0
- package/dist/source/epub/xml.js +111 -0
- package/dist/source/epub/xml.js.map +1 -0
- package/dist/source/index.d.ts +12 -0
- package/dist/source/index.js +32 -0
- package/dist/source/index.js.map +1 -0
- package/dist/source/meta.d.ts +30 -0
- package/dist/source/meta.js +22 -0
- package/dist/source/meta.js.map +1 -0
- package/dist/source/plain-text.d.ts +16 -0
- package/dist/source/plain-text.js +86 -0
- package/dist/source/plain-text.js.map +1 -0
- package/dist/source/toc.d.ts +16 -0
- package/dist/source/toc.js +17 -0
- package/dist/source/toc.js.map +1 -0
- package/dist/source/types.d.ts +16 -0
- package/dist/source/types.js +1 -0
- package/dist/source/types.js.map +1 -0
- package/dist/topology/grouping.d.ts +15 -0
- package/dist/topology/grouping.js +18 -0
- package/dist/topology/grouping.js.map +1 -0
- package/dist/topology/index.d.ts +21 -0
- package/dist/topology/index.js +5 -0
- package/dist/topology/index.js.map +1 -0
- package/dist/topology/resource-segmentation.d.ts +13 -0
- package/dist/topology/resource-segmentation.js +111 -0
- package/dist/topology/resource-segmentation.js.map +1 -0
- package/dist/topology/segment-incision.d.ts +18 -0
- package/dist/topology/segment-incision.js +197 -0
- package/dist/topology/segment-incision.js.map +1 -0
- package/dist/topology/snake-detector.d.ts +13 -0
- package/dist/topology/snake-detector.js +520 -0
- package/dist/topology/snake-detector.js.map +1 -0
- package/dist/topology/snake-graph-builder.d.ts +14 -0
- package/dist/topology/snake-graph-builder.js +76 -0
- package/dist/topology/snake-graph-builder.js.map +1 -0
- package/dist/topology/topology.d.ts +29 -0
- package/dist/topology/topology.js +348 -0
- package/dist/topology/topology.js.map +1 -0
- package/dist/topology/weights.d.ts +10 -0
- package/dist/topology/weights.js +84 -0
- package/dist/topology/weights.js.map +1 -0
- package/dist/types-FVIqiLC9.d.cts +24 -0
- package/dist/utils/async-semaphore.d.ts +7 -0
- package/dist/utils/async-semaphore.js +40 -0
- package/dist/utils/async-semaphore.js.map +1 -0
- package/dist/utils/enum.d.ts +5 -0
- package/dist/utils/enum.js +18 -0
- package/dist/utils/enum.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.js +132 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/node-error.d.ts +4 -0
- package/dist/utils/node-error.js +59 -0
- package/dist/utils/node-error.js.map +1 -0
- package/dist/wikg/archive-uri.d.ts +1 -0
- package/dist/wikg/archive-uri.js +37 -0
- package/dist/wikg/archive-uri.js.map +1 -0
- package/dist/wikg/archive.d.ts +28 -0
- package/dist/wikg/archive.js +496 -0
- package/dist/wikg/archive.js.map +1 -0
- package/dist/wikg/index.d.ts +31 -0
- package/dist/wikg/index.js +60 -0
- package/dist/wikg/index.js.map +1 -0
- package/dist/wikg/wikg-coordinator.d.ts +45 -0
- package/dist/wikg/wikg-coordinator.js +1687 -0
- package/dist/wikg/wikg-coordinator.js.map +1 -0
- package/dist/wikg/wiki-graph-archive-file.d.ts +42 -0
- package/dist/wikg/wiki-graph-archive-file.js +78 -0
- package/dist/wikg/wiki-graph-archive-file.js.map +1 -0
- package/dist/wikilink/index.d.ts +10 -0
- package/dist/wikilink/index.js +7 -0
- package/dist/wikilink/index.js.map +1 -0
- package/dist/wikilink/relation-discovery.d.ts +31 -0
- package/dist/wikilink/relation-discovery.js +477 -0
- package/dist/wikilink/relation-discovery.js.map +1 -0
- package/dist/wikilink/types.d.ts +23 -0
- package/dist/wikilink/types.js +1 -0
- package/dist/wikilink/types.js.map +1 -0
- package/dist/wikilink/window.d.ts +7 -0
- package/dist/wikilink/window.js +53 -0
- package/dist/wikilink/window.js.map +1 -0
- package/dist/wikimatch/enrichment.d.ts +10 -0
- package/dist/wikimatch/enrichment.js +55 -0
- package/dist/wikimatch/enrichment.js.map +1 -0
- package/dist/wikimatch/index.d.ts +16 -0
- package/dist/wikimatch/index.js +66 -0
- package/dist/wikimatch/index.js.map +1 -0
- package/dist/wikimatch/option-narrowing.d.ts +17 -0
- package/dist/wikimatch/option-narrowing.js +208 -0
- package/dist/wikimatch/option-narrowing.js.map +1 -0
- package/dist/wikimatch/options.d.ts +14 -0
- package/dist/wikimatch/options.js +155 -0
- package/dist/wikimatch/options.js.map +1 -0
- package/dist/wikimatch/policy-judge.d.ts +17 -0
- package/dist/wikimatch/policy-judge.js +430 -0
- package/dist/wikimatch/policy-judge.js.map +1 -0
- package/dist/wikimatch/range-suppression.d.ts +9 -0
- package/dist/wikimatch/range-suppression.js +27 -0
- package/dist/wikimatch/range-suppression.js.map +1 -0
- package/dist/wikimatch/surface-screening.d.ts +16 -0
- package/dist/wikimatch/surface-screening.js +168 -0
- package/dist/wikimatch/surface-screening.js.map +1 -0
- package/dist/wikimatch/surface-window.d.ts +6 -0
- package/dist/wikimatch/surface-window.js +44 -0
- package/dist/wikimatch/surface-window.js.map +1 -0
- package/dist/wikimatch/types.d.ts +151 -0
- package/dist/wikimatch/types.js +1 -0
- package/dist/wikimatch/types.js.map +1 -0
- package/dist/wikimatch/wikispine.d.ts +43 -0
- package/dist/wikimatch/wikispine.js +399 -0
- package/dist/wikimatch/wikispine.js.map +1 -0
- package/dist/wikimatch/window.d.ts +6 -0
- package/dist/wikimatch/window.js +83 -0
- package/dist/wikimatch/window.js.map +1 -0
- package/dist/wikimatch/words.d.ts +16 -0
- package/dist/wikimatch/words.js +66 -0
- package/dist/wikimatch/words.js.map +1 -0
- package/dist/wikipage/cache.d.ts +18 -0
- package/dist/wikipage/cache.js +404 -0
- package/dist/wikipage/cache.js.map +1 -0
- package/dist/wikipage/fetch-log.d.ts +17 -0
- package/dist/wikipage/fetch-log.js +143 -0
- package/dist/wikipage/fetch-log.js.map +1 -0
- package/dist/wikipage/index.d.ts +14 -0
- package/dist/wikipage/index.js +17 -0
- package/dist/wikipage/index.js.map +1 -0
- package/dist/wikipage/normalizer.d.ts +14 -0
- package/dist/wikipage/normalizer.js +147 -0
- package/dist/wikipage/normalizer.js.map +1 -0
- package/dist/wikipage/rate-limiter.d.ts +13 -0
- package/dist/wikipage/rate-limiter.js +84 -0
- package/dist/wikipage/rate-limiter.js.map +1 -0
- package/dist/wikipage/resolver.d.ts +26 -0
- package/dist/wikipage/resolver.js +325 -0
- package/dist/wikipage/resolver.js.map +1 -0
- package/dist/wikipage/types.d.ts +96 -0
- package/dist/wikipage/types.js +1 -0
- package/dist/wikipage/types.js.map +1 -0
- package/dist/wikipage/wikimedia-client.d.ts +48 -0
- package/dist/wikipage/wikimedia-client.js +397 -0
- package/dist/wikipage/wikimedia-client.js.map +1 -0
- package/dist/worker-BgQ0Xl8T.d.cts +181 -0
- package/dist/worker.cjs +5259 -0
- package/dist/worker.cjs.map +1 -0
- package/dist/worker.d.cts +2 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.js +5 -0
- package/dist/worker.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/legacy-sdpub/upgrade.ts"],"sourcesContent":["import { createWriteStream } from \"fs\";\nimport { mkdir, readdir, readFile, rm, writeFile } from \"fs/promises\";\nimport { dirname, join, posix, resolve, sep } from \"path\";\nimport { pipeline } from \"stream/promises\";\n\nimport { createWikiGraphTempDirectory } from \"../common/wiki-graph-temp.js\";\nimport {\n open as openZip,\n type Entry,\n type ZipFile as YauzlZipFile,\n} from \"yauzl\";\n\nimport { Database, type SqlBindValue } from \"../document/database.js\";\nimport { DirectoryDocument } from \"../document/document.js\";\nimport { writeWikgArchive } from \"../wikg/index.js\";\nimport { isNodeError } from \"../utils/node-error.js\";\n\nconst LEGACY_SDPUB_PATTERNS = [\n /^manifest\\.json$/u,\n /^database\\.db$/u,\n /^toc\\.json$/u,\n /^cover\\/(?:data\\.bin|info\\.json)$/u,\n /^summaries\\/serial-\\d+\\.txt$/u,\n /^fragments\\/serial-\\d+\\/fragment_\\d+\\.json$/u,\n] as const;\nconst LEGACY_FORMAT_VERSION = 1;\n\nexport interface LegacySdpubMigrationResult {\n readonly inputPath: string;\n readonly outputPath: string;\n}\n\nexport async function migrateLegacySdpubToWikg(\n inputPath: string,\n outputPath = defaultWikgOutputPath(inputPath),\n): Promise<LegacySdpubMigrationResult> {\n if (resolve(inputPath) === resolve(outputPath)) {\n throw new Error(\n \"Legacy migration output path must differ from input path.\",\n );\n }\n\n const workspacePath = await createWikiGraphTempDirectory(\"sdpub-upgrade\");\n\n try {\n await extractLegacySdpubArchive(inputPath, workspacePath);\n await migrateLegacyDatabase(join(workspacePath, \"database.db\"));\n await migrateLegacyTextStorage(workspacePath);\n await writeWikgArchive(workspacePath, outputPath);\n\n return { inputPath, outputPath };\n } finally {\n await rm(workspacePath, { force: true, recursive: true });\n }\n}\n\nfunction defaultWikgOutputPath(inputPath: string): string {\n if (inputPath.toLowerCase().endsWith(\".sdpub\")) {\n return `${inputPath.slice(0, -\".sdpub\".length)}.wikg`;\n }\n\n return `${inputPath}.wikg`;\n}\n\nasync function extractLegacySdpubArchive(\n inputPath: string,\n outputDirectoryPath: string,\n): Promise<void> {\n const zipFile = await openArchive(inputPath);\n\n try {\n const entries = await indexArchiveEntries(zipFile);\n\n await assertLegacySdpubArchive(zipFile, entries);\n for (const entry of entries) {\n const archivePath = normalizeArchivePath(entry.fileName);\n\n if (archivePath === \"\" || !isLegacySdpubPath(archivePath)) {\n continue;\n }\n\n const targetPath = resolve(outputDirectoryPath, archivePath);\n\n assertWithinDirectory(outputDirectoryPath, targetPath, archivePath);\n await mkdir(dirname(targetPath), { recursive: true });\n await pipeline(\n await openArchiveEntryStream(zipFile, entry),\n createWriteStream(targetPath),\n );\n }\n } finally {\n zipFile.close();\n }\n}\n\nasync function assertLegacySdpubArchive(\n zipFile: YauzlZipFile,\n entries: readonly Entry[],\n): Promise<void> {\n const paths = new Set(\n entries.map((entry) => normalizeArchivePath(entry.fileName)),\n );\n\n if (!paths.has(\"database.db\") || !paths.has(\"toc.json\")) {\n throw new Error(\"Unsupported legacy sdpub archive.\");\n }\n if (paths.has(\"manifest.json\")) {\n const manifestEntry = entries.find(\n (entry) => normalizeArchivePath(entry.fileName) === \"manifest.json\",\n );\n\n if (manifestEntry === undefined) {\n throw new Error(\"Unsupported legacy sdpub archive.\");\n }\n\n assertSupportedManifest(await readArchiveEntryText(zipFile, manifestEntry));\n }\n}\n\nfunction assertSupportedManifest(content: string): void {\n try {\n const parsed = JSON.parse(content) as { readonly formatVersion?: unknown };\n\n if (parsed.formatVersion === LEGACY_FORMAT_VERSION) {\n return;\n }\n } catch {\n throw new Error(\"Unsupported legacy sdpub archive.\");\n }\n\n throw new Error(\"Unsupported legacy sdpub archive.\");\n}\n\nasync function migrateLegacyDatabase(databasePath: string): Promise<void> {\n const database = await Database.open(databasePath);\n\n try {\n await migrateKnowledgeEdges(database);\n await migrateSerialDocumentOrder(database);\n } finally {\n await database.close();\n }\n}\n\nasync function migrateKnowledgeEdges(database: Database): Promise<void> {\n const tables = await listTableNames(database);\n\n if (tables.has(\"reading_edges\")) {\n return;\n }\n if (!tables.has(\"knowledge_edges\")) {\n return;\n }\n\n await database.run(`\n ALTER TABLE knowledge_edges\n RENAME TO reading_edges\n `);\n}\n\nasync function migrateSerialDocumentOrder(database: Database): Promise<void> {\n const columns = await listTableColumns(database, \"serials\");\n\n if (!columns.has(\"document_order\")) {\n await database.run(`\n ALTER TABLE serials\n ADD COLUMN document_order INTEGER NOT NULL DEFAULT 0\n `);\n }\n\n await database.run(`\n CREATE INDEX IF NOT EXISTS idx_serials_document_order\n ON serials(document_order, id)\n `);\n}\n\ninterface LegacyFragmentFile {\n readonly sentences: ReadonlyArray<{\n readonly text: string;\n readonly wordsCount: number;\n }>;\n readonly summary: string;\n}\n\ninterface LegacyFragmentRecord {\n readonly content: LegacyFragmentFile;\n readonly fragmentId: number;\n readonly path: string;\n readonly signature: string;\n}\n\ninterface SentenceIndexRemap {\n get(fragmentId: number, sentenceIndex: number): number | undefined;\n readonly serialId: number;\n}\n\nasync function migrateLegacyTextStorage(workspacePath: string): Promise<void> {\n const sourceSerials = await listLegacySourceSerials(workspacePath);\n const remaps = new Map<number, SentenceIndexRemap>();\n\n for (const serialId of sourceSerials) {\n const fragments = await readLegacySourceFragments(workspacePath, serialId);\n const plan = createDuplicateHalfCanonicalizationPlan(fragments);\n const canonicalFragments = plan?.canonicalFragments ?? fragments;\n const fragmentIdMap = plan?.fragmentIdMap ?? new Map<number, number>();\n const canonicalById = new Map(\n canonicalFragments.map((fragment) => [fragment.fragmentId, fragment]),\n );\n const sentenceMap = new Map<string, number>();\n const textParts: string[] = [];\n let globalSentenceIndex = 0;\n\n for (const fragment of canonicalFragments) {\n for (\n let localSentenceIndex = 0;\n localSentenceIndex < fragment.content.sentences.length;\n localSentenceIndex += 1\n ) {\n const sentence = fragment.content.sentences[localSentenceIndex];\n\n if (sentence === undefined) {\n continue;\n }\n\n sentenceMap.set(\n `${fragment.fragmentId}:${localSentenceIndex}`,\n globalSentenceIndex,\n );\n textParts.push(sentence.text);\n globalSentenceIndex += 1;\n }\n }\n\n for (const [oldFragmentId, canonicalFragmentId] of fragmentIdMap) {\n const canonicalFragment = canonicalById.get(canonicalFragmentId);\n\n if (canonicalFragment === undefined) {\n continue;\n }\n\n for (\n let localSentenceIndex = 0;\n localSentenceIndex < canonicalFragment.content.sentences.length;\n localSentenceIndex += 1\n ) {\n const mapped = sentenceMap.get(\n `${canonicalFragmentId}:${localSentenceIndex}`,\n );\n\n if (mapped !== undefined) {\n sentenceMap.set(`${oldFragmentId}:${localSentenceIndex}`, mapped);\n }\n }\n }\n\n remaps.set(serialId, {\n get: (fragmentId, sentenceIndex) =>\n sentenceMap.get(`${fragmentId}:${sentenceIndex}`),\n serialId,\n });\n\n const database = await Database.open(join(workspacePath, \"database.db\"));\n\n try {\n await writeLegacySourceTextStream(database, workspacePath, {\n fragments: canonicalFragments,\n serialId,\n text: textParts.join(\"\"),\n });\n } finally {\n await database.close();\n }\n }\n\n await migrateLegacySentenceReferences(workspacePath, remaps);\n await migrateLegacySummariesToTextStreams(workspacePath);\n await rm(join(workspacePath, \"fragments\"), { force: true, recursive: true });\n await rm(join(workspacePath, \"summaries\"), { force: true, recursive: true });\n}\n\nasync function migrateLegacySentenceReferences(\n workspacePath: string,\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n): Promise<void> {\n const database = await Database.open(join(workspacePath, \"database.db\"));\n\n try {\n const tableNames = await listTableNames(database);\n\n await database.transaction(async () => {\n if (tableNames.has(\"chunks\")) {\n await migrateLegacyChunks(database, remaps);\n }\n if (tableNames.has(\"chunk_sentences\")) {\n await migrateLegacyChunkSentences(database, remaps);\n }\n if (tableNames.has(\"mentions\")) {\n await migrateLegacyMentions(database, remaps);\n }\n if (tableNames.has(\"mention_link_evidence_sentences\")) {\n await migrateLegacyMentionLinkEvidenceSentences(database, remaps);\n }\n if (tableNames.has(\"fragment_groups\")) {\n await migrateLegacyFragmentGroups(database, remaps);\n }\n });\n } finally {\n await database.close();\n }\n}\n\nasync function writeLegacySourceTextStream(\n database: Database,\n workspacePath: string,\n input: {\n readonly fragments: readonly LegacyFragmentRecord[];\n readonly serialId: number;\n readonly text: string;\n },\n): Promise<void> {\n await database.run(`\n CREATE TABLE IF NOT EXISTS text_sentence_records (\n id INTEGER PRIMARY KEY,\n kind INTEGER NOT NULL,\n chapter_id INTEGER NOT NULL,\n sentence_index INTEGER NOT NULL,\n words_count INTEGER NOT NULL DEFAULT 0,\n byte_offset INTEGER NOT NULL DEFAULT 0,\n byte_length INTEGER NOT NULL DEFAULT 0,\n UNIQUE(kind, chapter_id, sentence_index)\n )\n `);\n await mkdir(join(workspacePath, \"texts\", \"source\"), { recursive: true });\n await writeFile(\n join(workspacePath, \"texts\", \"source\", `${input.serialId}.txt`),\n input.text,\n \"utf8\",\n );\n await database.run(\n `\n DELETE FROM text_sentence_records\n WHERE kind = 1 AND chapter_id = ?\n `,\n [input.serialId],\n );\n\n let byteOffset = 0;\n let sentenceIndex = 0;\n\n for (const fragment of input.fragments) {\n for (const sentence of fragment.content.sentences) {\n const byteLength = Buffer.byteLength(sentence.text, \"utf8\");\n\n await database.run(\n `\n INSERT OR REPLACE INTO text_sentence_records (\n kind,\n chapter_id,\n sentence_index,\n words_count,\n byte_offset,\n byte_length\n )\n VALUES (1, ?, ?, ?, ?, ?)\n `,\n [\n input.serialId,\n sentenceIndex,\n sentence.wordsCount,\n byteOffset,\n byteLength,\n ],\n );\n\n byteOffset += byteLength;\n sentenceIndex += 1;\n }\n }\n}\n\nasync function migrateLegacyChunks(\n database: Database,\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n): Promise<void> {\n const rows = await database.queryAll(\n `\n SELECT *\n FROM chunks\n ORDER BY id\n `,\n undefined,\n (row) => row,\n );\n\n await database.run(\"ALTER TABLE chunks RENAME TO legacy_chunks\");\n await database.run(`\n CREATE TABLE chunks (\n id INTEGER PRIMARY KEY,\n generation INTEGER NOT NULL,\n serial_id INTEGER NOT NULL,\n sentence_index INTEGER NOT NULL,\n label TEXT NOT NULL,\n content TEXT NOT NULL,\n retention TEXT,\n importance TEXT,\n wordsCount INTEGER NOT NULL DEFAULT 0,\n weight REAL NOT NULL DEFAULT 0.0\n )\n `);\n\n for (const row of rows) {\n const serialId = Number(row.serial_id);\n const sentenceIndex = remapSentenceIndex(\n remaps,\n serialId,\n Number(row.fragment_id),\n Number(row.sentence_index),\n );\n\n await database.run(\n `\n INSERT INTO chunks (\n id, generation, serial_id, sentence_index, label, content,\n retention, importance, wordsCount, weight\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `,\n [\n row.id ?? null,\n row.generation ?? 0,\n serialId,\n sentenceIndex,\n row.label ?? \"\",\n row.content ?? \"\",\n row.retention ?? null,\n row.importance ?? null,\n row.wordsCount ?? 0,\n row.weight ?? 0,\n ],\n );\n }\n\n await database.run(\"DROP TABLE legacy_chunks\");\n}\n\nasync function migrateLegacyChunkSentences(\n database: Database,\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n): Promise<void> {\n const rows = await database.queryAll(\n `\n SELECT chunk_id, serial_id, fragment_id, sentence_index\n FROM chunk_sentences\n `,\n undefined,\n (row) => row,\n );\n\n await database.run(\"DROP TABLE chunk_sentences\");\n await database.run(`\n CREATE TABLE chunk_sentences (\n chunk_id INTEGER NOT NULL,\n serial_id INTEGER NOT NULL,\n sentence_index INTEGER NOT NULL,\n FOREIGN KEY (chunk_id) REFERENCES chunks(id),\n PRIMARY KEY (chunk_id, serial_id, sentence_index)\n )\n `);\n\n for (const row of rows) {\n const serialId = Number(row.serial_id);\n\n await database.run(\n `\n INSERT OR IGNORE INTO chunk_sentences (\n chunk_id, serial_id, sentence_index\n )\n VALUES (?, ?, ?)\n `,\n [\n getRequiredSqlBindValue(row.chunk_id),\n serialId,\n remapSentenceIndex(\n remaps,\n serialId,\n Number(row.fragment_id),\n Number(row.sentence_index),\n ),\n ],\n );\n }\n}\n\nasync function migrateLegacyMentions(\n database: Database,\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n): Promise<void> {\n const rows = await database.queryAll(\n `\n SELECT *\n FROM mentions\n ORDER BY id\n `,\n undefined,\n (row) => row,\n );\n\n await database.run(\"ALTER TABLE mentions RENAME TO legacy_mentions\");\n await database.run(`\n CREATE TABLE mentions (\n id TEXT PRIMARY KEY,\n chapter_id INTEGER NOT NULL,\n sentence_index INTEGER,\n range_start INTEGER NOT NULL,\n range_end INTEGER NOT NULL,\n surface TEXT NOT NULL,\n qid TEXT NOT NULL,\n confidence REAL,\n note TEXT,\n FOREIGN KEY (chapter_id) REFERENCES serials(id)\n )\n `);\n\n for (const row of rows) {\n const chapterId = Number(row.chapter_id);\n const sentenceIndex =\n row.sentence_index === null || row.sentence_index === undefined\n ? null\n : remapSentenceIndex(\n remaps,\n chapterId,\n Number(row.fragment_id),\n Number(row.sentence_index),\n );\n\n await database.run(\n `\n INSERT OR REPLACE INTO mentions (\n id, chapter_id, sentence_index, range_start, range_end, surface,\n qid, confidence, note\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n `,\n [\n getRequiredSqlBindValue(row.id),\n chapterId,\n sentenceIndex,\n row.range_start ?? 0,\n row.range_end ?? 0,\n row.surface ?? \"\",\n row.qid ?? \"\",\n row.confidence ?? null,\n row.note ?? null,\n ],\n );\n }\n\n await database.run(\"DROP TABLE legacy_mentions\");\n}\n\nasync function migrateLegacyMentionLinkEvidenceSentences(\n database: Database,\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n): Promise<void> {\n const rows = await database.queryAll(\n `\n SELECT link_id, chapter_id, fragment_id, sentence_index\n FROM mention_link_evidence_sentences\n `,\n undefined,\n (row) => row,\n );\n\n await database.run(\"DROP TABLE mention_link_evidence_sentences\");\n await database.run(`\n CREATE TABLE mention_link_evidence_sentences (\n link_id TEXT NOT NULL,\n chapter_id INTEGER NOT NULL,\n sentence_index INTEGER NOT NULL,\n FOREIGN KEY (link_id) REFERENCES mention_links(id),\n PRIMARY KEY (link_id, chapter_id, sentence_index)\n )\n `);\n\n for (const row of rows) {\n const chapterId = Number(row.chapter_id);\n\n await database.run(\n `\n INSERT OR IGNORE INTO mention_link_evidence_sentences (\n link_id, chapter_id, sentence_index\n )\n VALUES (?, ?, ?)\n `,\n [\n getRequiredSqlBindValue(row.link_id),\n chapterId,\n remapSentenceIndex(\n remaps,\n chapterId,\n Number(row.fragment_id),\n Number(row.sentence_index),\n ),\n ],\n );\n }\n}\n\nasync function migrateLegacyFragmentGroups(\n database: Database,\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n): Promise<void> {\n const rows = await database.queryAll(\n `\n SELECT serial_id, group_id, fragment_id\n FROM fragment_groups\n ORDER BY serial_id, group_id, fragment_id\n `,\n undefined,\n (row) => row,\n );\n\n await database.run(\"DROP TABLE fragment_groups\");\n await database.run(`\n CREATE TABLE sentence_groups (\n serial_id INTEGER NOT NULL,\n group_id INTEGER NOT NULL,\n start_sentence_index INTEGER NOT NULL,\n end_sentence_index INTEGER NOT NULL,\n PRIMARY KEY (serial_id, group_id, start_sentence_index, end_sentence_index)\n )\n `);\n\n for (const row of rows) {\n const serialId = Number(row.serial_id);\n const startSentenceIndex = remapSentenceIndex(\n remaps,\n serialId,\n Number(row.fragment_id),\n 0,\n );\n const endSentenceIndex = findFragmentEndSentenceIndex(\n remaps,\n serialId,\n Number(row.fragment_id),\n );\n\n await database.run(\n `\n INSERT OR IGNORE INTO sentence_groups (\n serial_id, group_id, start_sentence_index, end_sentence_index\n )\n VALUES (?, ?, ?, ?)\n `,\n [\n serialId,\n getRequiredSqlBindValue(row.group_id),\n startSentenceIndex,\n endSentenceIndex,\n ],\n );\n }\n}\n\nfunction remapSentenceIndex(\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n serialId: number,\n fragmentId: number,\n sentenceIndex: number,\n): number {\n const remap = remaps.get(serialId);\n const mapped = remap?.get(fragmentId, sentenceIndex);\n\n if (mapped === undefined) {\n throw new Error(\n `Cannot remap legacy sentence ${serialId}:${fragmentId}:${sentenceIndex}.`,\n );\n }\n\n return mapped;\n}\n\nfunction findFragmentEndSentenceIndex(\n remaps: ReadonlyMap<number, SentenceIndexRemap>,\n serialId: number,\n fragmentId: number,\n): number {\n let sentenceIndex = 0;\n let last: number | undefined;\n\n while (true) {\n const mapped = remaps.get(serialId)?.get(fragmentId, sentenceIndex);\n\n if (mapped === undefined) {\n break;\n }\n\n last = mapped;\n sentenceIndex += 1;\n }\n\n return last ?? remapSentenceIndex(remaps, serialId, fragmentId, 0);\n}\n\nasync function migrateLegacySummariesToTextStreams(\n workspacePath: string,\n): Promise<void> {\n const summaries = await listLegacySummaries(workspacePath);\n const document = await DirectoryDocument.open(workspacePath);\n\n try {\n for (const summary of summaries) {\n await document.writeSummary(summary.serialId, summary.text);\n }\n } finally {\n await document.release();\n }\n}\n\nasync function listLegacySourceSerials(\n workspacePath: string,\n): Promise<readonly number[]> {\n const fragmentsDirectory = join(workspacePath, \"fragments\");\n\n try {\n const entries = await readdir(fragmentsDirectory, { withFileTypes: true });\n const serialIds: number[] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n\n const match = /^serial-(\\d+)$/u.exec(entry.name);\n\n if (match !== null) {\n serialIds.push(Number(match[1]));\n }\n }\n\n return serialIds.sort((left, right) => left - right);\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return [];\n }\n\n throw error;\n }\n}\n\nasync function readLegacySourceFragments(\n workspacePath: string,\n serialId: number,\n): Promise<readonly LegacyFragmentRecord[]> {\n const serialDirectory = join(\n workspacePath,\n \"fragments\",\n `serial-${serialId}`,\n );\n const entries = await readdir(serialDirectory, { withFileTypes: true });\n const records: LegacyFragmentRecord[] = [];\n\n for (const entry of entries) {\n if (!entry.isFile()) {\n continue;\n }\n\n const match = /^fragment_(\\d+)\\.json$/u.exec(entry.name);\n\n if (match === null) {\n continue;\n }\n\n const path = join(serialDirectory, entry.name);\n const content = parseLegacyFragmentFile(await readFile(path, \"utf8\"));\n\n records.push({\n content,\n fragmentId: Number(match[1]),\n path,\n signature: createLegacyFragmentSignature(content),\n });\n }\n\n return records.sort((left, right) => left.fragmentId - right.fragmentId);\n}\n\nfunction parseLegacyFragmentFile(content: string): LegacyFragmentFile {\n const parsed = JSON.parse(content) as unknown;\n\n if (typeof parsed !== \"object\" || parsed === null) {\n throw new TypeError(\"Legacy fragment file must contain sentences.\");\n }\n\n const rawFragment = parsed as Record<string, unknown>;\n\n if (!Array.isArray(rawFragment.sentences)) {\n throw new TypeError(\"Legacy fragment file must contain sentences.\");\n }\n\n const sentences = rawFragment.sentences.map((sentence) => {\n if (\n typeof sentence !== \"object\" ||\n sentence === null ||\n !(\"text\" in sentence) ||\n typeof (sentence as Record<string, unknown>).text !== \"string\"\n ) {\n throw new TypeError(\"Legacy fragment sentence must contain text.\");\n }\n\n const rawSentence = sentence as Record<string, unknown>;\n const text = rawSentence.text as string;\n const rawWordsCount = rawSentence.wordsCount;\n const wordsCount =\n typeof rawWordsCount === \"number\" ? rawWordsCount : countWords(text);\n\n return {\n text,\n wordsCount,\n };\n });\n const summary =\n typeof rawFragment.summary === \"string\" ? rawFragment.summary : \"\";\n\n return { sentences, summary };\n}\n\nfunction countWords(text: string): number {\n const trimmed = text.trim();\n\n return trimmed === \"\" ? 0 : trimmed.split(/\\s+/u).length;\n}\n\nfunction createLegacyFragmentSignature(fragment: LegacyFragmentFile): string {\n return JSON.stringify(fragment.sentences.map((sentence) => sentence.text));\n}\n\nfunction createDuplicateHalfCanonicalizationPlan(\n fragments: readonly LegacyFragmentRecord[],\n):\n | {\n readonly canonicalFragments: readonly LegacyFragmentRecord[];\n readonly fragmentIdMap: ReadonlyMap<number, number>;\n }\n | undefined {\n if (fragments.length < 2 || fragments.length % 2 !== 0) {\n return undefined;\n }\n\n const halfLength = fragments.length / 2;\n const leftHalf = fragments.slice(0, halfLength);\n const rightHalf = fragments.slice(halfLength);\n\n for (let index = 0; index < halfLength; index += 1) {\n if (leftHalf[index]?.signature !== rightHalf[index]?.signature) {\n return undefined;\n }\n }\n\n const preferRightHalf = rightHalf.some(\n (fragment) => fragment.content.summary.trim() !== \"\",\n );\n const sourceFragments = preferRightHalf ? rightHalf : leftHalf;\n const fragmentIdMap = new Map<number, number>();\n const canonicalFragments = sourceFragments.map((fragment, index) => {\n const leftFragment = leftHalf[index];\n const rightFragment = rightHalf[index];\n\n if (leftFragment !== undefined) {\n fragmentIdMap.set(leftFragment.fragmentId, index);\n }\n if (rightFragment !== undefined) {\n fragmentIdMap.set(rightFragment.fragmentId, index);\n }\n\n return {\n ...fragment,\n fragmentId: index,\n };\n });\n\n return { canonicalFragments, fragmentIdMap };\n}\n\nfunction getRequiredSqlBindValue(\n value: SqlBindValue | undefined,\n): SqlBindValue {\n if (value === undefined) {\n throw new TypeError(\"Expected a SQLite bind value.\");\n }\n\n return value;\n}\n\nasync function listLegacySummaries(\n workspacePath: string,\n): Promise<Array<{ readonly serialId: number; readonly text: string }>> {\n const summaryDirectory = join(workspacePath, \"summaries\");\n\n try {\n const entries = await readdir(summaryDirectory, { withFileTypes: true });\n const summaries: Array<{ serialId: number; text: string }> = [];\n\n for (const entry of entries) {\n if (!entry.isFile()) {\n continue;\n }\n\n const match = /^serial-(\\d+)\\.txt$/u.exec(entry.name);\n\n if (match === null) {\n continue;\n }\n\n summaries.push({\n serialId: Number(match[1]),\n text: await readFile(join(summaryDirectory, entry.name), \"utf8\"),\n });\n }\n\n return summaries.sort((left, right) => left.serialId - right.serialId);\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return [];\n }\n\n throw error;\n }\n}\n\nasync function listTableNames(\n database: Database,\n): Promise<ReadonlySet<string>> {\n const names = await database.queryAll(\n `\n SELECT name\n FROM sqlite_master\n WHERE type = 'table'\n `,\n undefined,\n (row) => String(row.name),\n );\n\n return new Set(names);\n}\n\nasync function listTableColumns(\n database: Database,\n tableName: string,\n): Promise<ReadonlySet<string>> {\n const columns = await database.queryAll(\n `PRAGMA table_info(${quoteSqlIdentifier(tableName)})`,\n undefined,\n (row) => String(row.name),\n );\n\n return new Set(columns);\n}\n\nfunction quoteSqlIdentifier(identifier: string): string {\n return `\"${identifier.replaceAll('\"', '\"\"')}\"`;\n}\n\nasync function indexArchiveEntries(\n zipFile: YauzlZipFile,\n): Promise<readonly Entry[]> {\n return await new Promise((resolve, reject) => {\n const entries: Entry[] = [];\n\n zipFile.on(\"entry\", (entry: Entry) => {\n if (entry.fileName.endsWith(\"/\")) {\n zipFile.readEntry();\n return;\n }\n\n entries.push(entry);\n zipFile.readEntry();\n });\n zipFile.once(\"end\", () => {\n resolve(entries);\n });\n zipFile.once(\"error\", (error: Error) => {\n reject(error);\n });\n\n zipFile.readEntry();\n });\n}\n\nfunction isLegacySdpubPath(archivePath: string): boolean {\n return LEGACY_SDPUB_PATTERNS.some((pattern) => pattern.test(archivePath));\n}\n\nfunction assertWithinDirectory(\n rootDirectoryPath: string,\n targetPath: string,\n archivePath: string,\n): void {\n const resolvedRootDirectoryPath = resolve(rootDirectoryPath);\n const rootPrefix = resolvedRootDirectoryPath.endsWith(sep)\n ? resolvedRootDirectoryPath\n : `${resolvedRootDirectoryPath}${sep}`;\n\n if (\n targetPath === resolvedRootDirectoryPath ||\n targetPath.startsWith(rootPrefix)\n ) {\n return;\n }\n\n throw new Error(`Invalid archive entry path: ${archivePath}`);\n}\n\nfunction normalizeArchivePath(path: string): string {\n const normalized = path.replaceAll(\"\\\\\", \"/\").trim();\n const withoutLeadingSlash = normalized.startsWith(\"/\")\n ? normalized.slice(1)\n : normalized;\n\n return posix\n .normalize(withoutLeadingSlash)\n .replace(/^(\\.\\/)+/u, \"\")\n .replace(/^\\/+/u, \"\");\n}\n\nasync function openArchive(path: string): Promise<YauzlZipFile> {\n return await new Promise((resolveOpen, rejectOpen) => {\n openZip(path, { autoClose: false, lazyEntries: true }, (error, zipFile) => {\n if (error !== null || zipFile === undefined) {\n rejectOpen(error ?? new Error(`Cannot open archive: ${path}`));\n return;\n }\n\n resolveOpen(zipFile);\n });\n });\n}\n\nasync function openArchiveEntryStream(\n zipFile: YauzlZipFile,\n entry: Entry,\n): Promise<NodeJS.ReadableStream> {\n return await new Promise((resolveStream, rejectStream) => {\n zipFile.openReadStream(entry, (error, stream) => {\n if (error !== null || stream === undefined) {\n rejectStream(\n error ?? new Error(`Cannot open archive entry: ${entry.fileName}`),\n );\n return;\n }\n\n resolveStream(stream);\n });\n });\n}\n\nasync function readArchiveEntryText(\n zipFile: YauzlZipFile,\n entry: Entry,\n): Promise<string> {\n const chunks: Buffer[] = [];\n const stream = await openArchiveEntryStream(zipFile, entry);\n\n await new Promise<void>((resolveRead, rejectRead) => {\n stream.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n });\n stream.once(\"end\", resolveRead);\n stream.once(\"error\", rejectRead);\n });\n\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n"],"mappings":"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","names":["resolve"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface PendingCacheEntry {
|
|
2
|
+
cacheKey: string;
|
|
3
|
+
response: string;
|
|
4
|
+
}
|
|
5
|
+
declare class LLMCache {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(cacheDirPath: string);
|
|
8
|
+
createEntry(cacheKey: string, response: string): PendingCacheEntry;
|
|
9
|
+
read(cacheKey: string): Promise<string | undefined>;
|
|
10
|
+
write(entry: PendingCacheEntry): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { LLMCache, type PendingCacheEntry };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { readFile, writeFile } from "fs/promises";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { isNodeError } from "../utils/node-error.js";
|
|
4
|
+
class LLMCache {
|
|
5
|
+
#cacheDirPath;
|
|
6
|
+
constructor(cacheDirPath) {
|
|
7
|
+
this.#cacheDirPath = cacheDirPath;
|
|
8
|
+
}
|
|
9
|
+
createEntry(cacheKey, response) {
|
|
10
|
+
return {
|
|
11
|
+
cacheKey,
|
|
12
|
+
response
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
async read(cacheKey) {
|
|
16
|
+
try {
|
|
17
|
+
return await readFile(this.#getFilePath(cacheKey), "utf8");
|
|
18
|
+
} catch (error) {
|
|
19
|
+
if (isNodeError(error) && error.code === "ENOENT") {
|
|
20
|
+
return void 0;
|
|
21
|
+
}
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async write(entry) {
|
|
26
|
+
await writeFile(this.#getFilePath(entry.cacheKey), entry.response, "utf8");
|
|
27
|
+
}
|
|
28
|
+
#getFilePath(cacheKey) {
|
|
29
|
+
return join(this.#cacheDirPath, `${cacheKey}.txt`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
LLMCache
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/llm/cache.ts"],"sourcesContent":["import { readFile, writeFile } from \"fs/promises\";\nimport { join } from \"path\";\n\nimport { isNodeError } from \"../utils/node-error.js\";\n\nexport interface PendingCacheEntry {\n cacheKey: string;\n response: string;\n}\n\nexport class LLMCache {\n readonly #cacheDirPath: string;\n\n public constructor(cacheDirPath: string) {\n this.#cacheDirPath = cacheDirPath;\n }\n\n public createEntry(cacheKey: string, response: string): PendingCacheEntry {\n return {\n cacheKey,\n response,\n };\n }\n\n public async read(cacheKey: string): Promise<string | undefined> {\n try {\n return await readFile(this.#getFilePath(cacheKey), \"utf8\");\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n }\n }\n\n public async write(entry: PendingCacheEntry): Promise<void> {\n await writeFile(this.#getFilePath(entry.cacheKey), entry.response, \"utf8\");\n }\n\n #getFilePath(cacheKey: string): string {\n return join(this.#cacheDirPath, `${cacheKey}.txt`);\n }\n}\n"],"mappings":"AAAA,SAAS,UAAU,iBAAiB;AACpC,SAAS,YAAY;AAErB,SAAS,mBAAmB;AAOrB,MAAM,SAAS;AAAA,EACX;AAAA,EAEF,YAAY,cAAsB;AACvC,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEO,YAAY,UAAkB,UAAqC;AACxE,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,KAAK,UAA+C;AAC/D,QAAI;AACF,aAAO,MAAM,SAAS,KAAK,aAAa,QAAQ,GAAG,MAAM;AAAA,IAC3D,SAAS,OAAO;AACd,UAAI,YAAY,KAAK,KAAK,MAAM,SAAS,UAAU;AACjD,eAAO;AAAA,MACT;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,MAAM,OAAyC;AAC1D,UAAM,UAAU,KAAK,aAAa,MAAM,QAAQ,GAAG,MAAM,UAAU,MAAM;AAAA,EAC3E;AAAA,EAEA,aAAa,UAA0B;AACrC,WAAO,KAAK,KAAK,eAAe,GAAG,QAAQ,MAAM;AAAA,EACnD;AACF;","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { LLMContext } from './context.js';
|
|
2
|
+
import { SamplingScopeConfig, TemperatureSetting, LLMOptions, LLMessage, LLMRequestOptions, LLMLazyRequestOperation } from './types.js';
|
|
3
|
+
import './cache.js';
|
|
4
|
+
import 'ai';
|
|
5
|
+
|
|
6
|
+
declare class LLM<S extends string> {
|
|
7
|
+
#private;
|
|
8
|
+
readonly config: Readonly<{
|
|
9
|
+
concurrent: number;
|
|
10
|
+
provider?: string;
|
|
11
|
+
modelId: string;
|
|
12
|
+
sampling?: SamplingScopeConfig<S>;
|
|
13
|
+
stream: boolean;
|
|
14
|
+
timeout: number;
|
|
15
|
+
temperature: TemperatureSetting;
|
|
16
|
+
topP: TemperatureSetting;
|
|
17
|
+
}>;
|
|
18
|
+
constructor(options: LLMOptions<S>);
|
|
19
|
+
context(): LLMContext<S>;
|
|
20
|
+
withContext<T>(operation: (context: LLMContext<S>) => Promise<T>): Promise<T>;
|
|
21
|
+
request(messages: readonly LLMessage[], options?: LLMRequestOptions<S>): Promise<string>;
|
|
22
|
+
request<T>(operation: LLMLazyRequestOperation<S, T>): Promise<T>;
|
|
23
|
+
loadSystemPrompt(templateName: string, templateContext?: Record<string, unknown>): string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { LLM };
|