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,202 @@
|
|
|
1
|
+
import { appendFile, writeFile } from "fs/promises";
|
|
2
|
+
import { allocateArtifactPath } from "../common/logging.js";
|
|
3
|
+
import { formatIssuesForLog } from "./feedback.js";
|
|
4
|
+
class CompressionLog {
|
|
5
|
+
#compressionRatio;
|
|
6
|
+
#groupId;
|
|
7
|
+
#logDirPath;
|
|
8
|
+
#maxIterations;
|
|
9
|
+
#serialId;
|
|
10
|
+
#filePath;
|
|
11
|
+
constructor(serialId, groupId, options) {
|
|
12
|
+
this.#compressionRatio = options.compressionRatio;
|
|
13
|
+
this.#groupId = groupId;
|
|
14
|
+
this.#logDirPath = options.logDirPath;
|
|
15
|
+
this.#maxIterations = options.maxIterations;
|
|
16
|
+
this.#serialId = serialId;
|
|
17
|
+
}
|
|
18
|
+
async appendCompressionResult(input) {
|
|
19
|
+
if (this.#filePath === void 0) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const parts = [];
|
|
23
|
+
if (input.thinkingText !== "") {
|
|
24
|
+
parts.push(
|
|
25
|
+
"Thinking:",
|
|
26
|
+
"-".repeat(80),
|
|
27
|
+
input.thinkingText,
|
|
28
|
+
"-".repeat(80),
|
|
29
|
+
""
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
parts.push(
|
|
33
|
+
`Compressed Text (${input.compressedText.length} characters):`,
|
|
34
|
+
"-".repeat(80),
|
|
35
|
+
input.compressedText,
|
|
36
|
+
"-".repeat(80),
|
|
37
|
+
"",
|
|
38
|
+
""
|
|
39
|
+
);
|
|
40
|
+
await appendFile(this.#filePath, `${parts.join("\n")}
|
|
41
|
+
`, "utf8");
|
|
42
|
+
}
|
|
43
|
+
async appendFinalSelection(bestVersion, originalLength) {
|
|
44
|
+
if (this.#filePath === void 0) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const parts = [
|
|
48
|
+
"",
|
|
49
|
+
"=".repeat(80),
|
|
50
|
+
"FINAL SELECTION",
|
|
51
|
+
"=".repeat(80),
|
|
52
|
+
"",
|
|
53
|
+
`Selected: Iteration ${bestVersion.iteration}/${this.#maxIterations}`,
|
|
54
|
+
`Score: ${bestVersion.score.toFixed(2)}`,
|
|
55
|
+
`Length: ${bestVersion.text.length} characters`,
|
|
56
|
+
`Compression ratio: ${(bestVersion.text.length / originalLength).toFixed(1)}%`,
|
|
57
|
+
"",
|
|
58
|
+
"=".repeat(80),
|
|
59
|
+
""
|
|
60
|
+
];
|
|
61
|
+
if (bestVersion.score > 0) {
|
|
62
|
+
parts.push(
|
|
63
|
+
"REMAINING UNRESOLVED ISSUES",
|
|
64
|
+
"=".repeat(80),
|
|
65
|
+
"",
|
|
66
|
+
formatIssuesForLog(bestVersion.reviews),
|
|
67
|
+
"=".repeat(80),
|
|
68
|
+
""
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
await appendFile(this.#filePath, `${parts.join("\n")}
|
|
72
|
+
`, "utf8");
|
|
73
|
+
}
|
|
74
|
+
async appendIterationHeader(iteration, revisionFeedback) {
|
|
75
|
+
if (this.#filePath === void 0) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const parts = [
|
|
79
|
+
"",
|
|
80
|
+
"=".repeat(80),
|
|
81
|
+
`ITERATION ${iteration}/${this.#maxIterations}`,
|
|
82
|
+
"=".repeat(80),
|
|
83
|
+
""
|
|
84
|
+
];
|
|
85
|
+
if (revisionFeedback !== void 0 && revisionFeedback.trim() !== "") {
|
|
86
|
+
parts.push(
|
|
87
|
+
"Revision Feedback:",
|
|
88
|
+
"-".repeat(80),
|
|
89
|
+
revisionFeedback,
|
|
90
|
+
"-".repeat(80),
|
|
91
|
+
""
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
await appendFile(this.#filePath, `${parts.join("\n")}
|
|
95
|
+
`, "utf8");
|
|
96
|
+
}
|
|
97
|
+
async appendLanguageMismatch(input) {
|
|
98
|
+
if (this.#filePath === void 0) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const issue = input.review.issues[0];
|
|
102
|
+
if (issue === void 0) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const parts = [
|
|
106
|
+
"",
|
|
107
|
+
"!".repeat(80),
|
|
108
|
+
"LANGUAGE MISMATCH DETECTED",
|
|
109
|
+
"!".repeat(80),
|
|
110
|
+
`Expected: ${input.targetLanguageCode} (${input.userLanguage ?? "unknown"})`,
|
|
111
|
+
`Detected: ${input.detectedLanguageCode}`,
|
|
112
|
+
`Issue: ${issue.problem}`,
|
|
113
|
+
`Suggestion: ${issue.suggestion}`,
|
|
114
|
+
"!".repeat(80),
|
|
115
|
+
""
|
|
116
|
+
];
|
|
117
|
+
await appendFile(this.#filePath, `${parts.join("\n")}
|
|
118
|
+
`, "utf8");
|
|
119
|
+
}
|
|
120
|
+
async initialize(clues) {
|
|
121
|
+
if (this.#logDirPath === void 0) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const timestamp = formatTimestamp(/* @__PURE__ */ new Date());
|
|
125
|
+
this.#filePath = allocateArtifactPath({
|
|
126
|
+
category: "editor",
|
|
127
|
+
logDirPath: this.#logDirPath,
|
|
128
|
+
prefix: `compression-serial-${this.#serialId}-group-${this.#groupId}`
|
|
129
|
+
});
|
|
130
|
+
if (this.#filePath === void 0) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
await writeFile(
|
|
134
|
+
this.#filePath,
|
|
135
|
+
[
|
|
136
|
+
"=== Text Compression Log ===",
|
|
137
|
+
`Serial: ${this.#serialId}, Group: ${this.#groupId}`,
|
|
138
|
+
`Started at: ${timestamp}`,
|
|
139
|
+
`Compression ratio target: ${Math.round(this.#compressionRatio * 100)}%`,
|
|
140
|
+
`Max iterations: ${this.#maxIterations}`,
|
|
141
|
+
"",
|
|
142
|
+
"",
|
|
143
|
+
formatChunkHierarchy(clues, this.#groupId, this.#serialId),
|
|
144
|
+
""
|
|
145
|
+
].join("\n"),
|
|
146
|
+
"utf8"
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function formatChunkHierarchy(clues, groupId, serialId) {
|
|
151
|
+
const parts = [
|
|
152
|
+
"=".repeat(80),
|
|
153
|
+
`CHUNK HIERARCHY - Serial ${serialId}, Group ${groupId}`,
|
|
154
|
+
"=".repeat(80),
|
|
155
|
+
""
|
|
156
|
+
];
|
|
157
|
+
for (let clueIndex = 0; clueIndex < clues.length; clueIndex += 1) {
|
|
158
|
+
const clue = clues[clueIndex];
|
|
159
|
+
if (clue === void 0) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
parts.push(
|
|
163
|
+
`Clue #${clueIndex + 1} (ID: ${clue.clueId})`,
|
|
164
|
+
`|- Weight: ${clue.weight.toFixed(4)}`,
|
|
165
|
+
`|- Label: ${clue.label}`,
|
|
166
|
+
`|- Source snakes: ${clue.sourceSnakeIds.join(", ")}`,
|
|
167
|
+
`|- Merged: ${clue.isMerged ? "yes" : "no"}`,
|
|
168
|
+
`\\- Chunks: ${clue.chunks.length}`,
|
|
169
|
+
""
|
|
170
|
+
);
|
|
171
|
+
for (let chunkIndex = 0; chunkIndex < clue.chunks.length; chunkIndex += 1) {
|
|
172
|
+
const chunk = clue.chunks[chunkIndex];
|
|
173
|
+
if (chunk === void 0) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const contentPreview = chunk.content.length > 60 ? `${chunk.content.slice(0, 60)}...` : chunk.content;
|
|
177
|
+
parts.push(
|
|
178
|
+
` - Chunk ${chunkIndex + 1}/${clue.chunks.length} (ID: ${chunk.id})`,
|
|
179
|
+
` Label: ${chunk.label}`,
|
|
180
|
+
` Retention: ${chunk.retention ?? "N/A"}`,
|
|
181
|
+
` Importance: ${chunk.importance ?? "N/A"}`,
|
|
182
|
+
` Content: ${contentPreview}`,
|
|
183
|
+
""
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
parts.push("=".repeat(80), "");
|
|
188
|
+
return parts.join("\n");
|
|
189
|
+
}
|
|
190
|
+
function formatTimestamp(date) {
|
|
191
|
+
const year = date.getFullYear();
|
|
192
|
+
const month = String(date.getMonth() + 1).padStart(2, "0");
|
|
193
|
+
const day = String(date.getDate()).padStart(2, "0");
|
|
194
|
+
const hours = String(date.getHours()).padStart(2, "0");
|
|
195
|
+
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
196
|
+
const seconds = String(date.getSeconds()).padStart(2, "0");
|
|
197
|
+
return `${year}-${month}-${day} ${hours}-${minutes}-${seconds}`;
|
|
198
|
+
}
|
|
199
|
+
export {
|
|
200
|
+
CompressionLog
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/editor/log.ts"],"sourcesContent":["import { appendFile, writeFile } from \"fs/promises\";\nimport { allocateArtifactPath } from \"../common/logging.js\";\n\nimport type { Language } from \"../common/language.js\";\nimport type { Clue } from \"./clue.js\";\nimport { formatIssuesForLog } from \"./feedback.js\";\nimport type { CompressionVersion, ReviewResult } from \"./types.js\";\n\nexport class CompressionLog {\n readonly #compressionRatio: number;\n readonly #groupId: number;\n readonly #logDirPath: string | undefined;\n readonly #maxIterations: number;\n readonly #serialId: number;\n #filePath: string | undefined;\n\n public constructor(\n serialId: number,\n groupId: number,\n options: {\n readonly compressionRatio: number;\n readonly logDirPath?: string;\n readonly maxIterations: number;\n },\n ) {\n this.#compressionRatio = options.compressionRatio;\n this.#groupId = groupId;\n this.#logDirPath = options.logDirPath;\n this.#maxIterations = options.maxIterations;\n this.#serialId = serialId;\n }\n\n public async appendCompressionResult(input: {\n compressedText: string;\n thinkingText: string;\n }): Promise<void> {\n if (this.#filePath === undefined) {\n return;\n }\n\n const parts: string[] = [];\n\n if (input.thinkingText !== \"\") {\n parts.push(\n \"Thinking:\",\n \"-\".repeat(80),\n input.thinkingText,\n \"-\".repeat(80),\n \"\",\n );\n }\n\n parts.push(\n `Compressed Text (${input.compressedText.length} characters):`,\n \"-\".repeat(80),\n input.compressedText,\n \"-\".repeat(80),\n \"\",\n \"\",\n );\n\n await appendFile(this.#filePath, `${parts.join(\"\\n\")}\\n`, \"utf8\");\n }\n\n public async appendFinalSelection(\n bestVersion: CompressionVersion,\n originalLength: number,\n ): Promise<void> {\n if (this.#filePath === undefined) {\n return;\n }\n\n const parts = [\n \"\",\n \"=\".repeat(80),\n \"FINAL SELECTION\",\n \"=\".repeat(80),\n \"\",\n `Selected: Iteration ${bestVersion.iteration}/${this.#maxIterations}`,\n `Score: ${bestVersion.score.toFixed(2)}`,\n `Length: ${bestVersion.text.length} characters`,\n `Compression ratio: ${(bestVersion.text.length / originalLength).toFixed(1)}%`,\n \"\",\n \"=\".repeat(80),\n \"\",\n ];\n\n if (bestVersion.score > 0) {\n parts.push(\n \"REMAINING UNRESOLVED ISSUES\",\n \"=\".repeat(80),\n \"\",\n formatIssuesForLog(bestVersion.reviews),\n \"=\".repeat(80),\n \"\",\n );\n }\n\n await appendFile(this.#filePath, `${parts.join(\"\\n\")}\\n`, \"utf8\");\n }\n\n public async appendIterationHeader(\n iteration: number,\n revisionFeedback: string | undefined,\n ): Promise<void> {\n if (this.#filePath === undefined) {\n return;\n }\n\n const parts = [\n \"\",\n \"=\".repeat(80),\n `ITERATION ${iteration}/${this.#maxIterations}`,\n \"=\".repeat(80),\n \"\",\n ];\n\n if (revisionFeedback !== undefined && revisionFeedback.trim() !== \"\") {\n parts.push(\n \"Revision Feedback:\",\n \"-\".repeat(80),\n revisionFeedback,\n \"-\".repeat(80),\n \"\",\n );\n }\n\n await appendFile(this.#filePath, `${parts.join(\"\\n\")}\\n`, \"utf8\");\n }\n\n public async appendLanguageMismatch(input: {\n detectedLanguageCode: string;\n review: ReviewResult;\n targetLanguageCode: string;\n userLanguage: Language | undefined;\n }): Promise<void> {\n if (this.#filePath === undefined) {\n return;\n }\n\n const issue = input.review.issues[0];\n\n if (issue === undefined) {\n return;\n }\n\n const parts = [\n \"\",\n \"!\".repeat(80),\n \"LANGUAGE MISMATCH DETECTED\",\n \"!\".repeat(80),\n `Expected: ${input.targetLanguageCode} (${input.userLanguage ?? \"unknown\"})`,\n `Detected: ${input.detectedLanguageCode}`,\n `Issue: ${issue.problem}`,\n `Suggestion: ${issue.suggestion}`,\n \"!\".repeat(80),\n \"\",\n ];\n\n await appendFile(this.#filePath, `${parts.join(\"\\n\")}\\n`, \"utf8\");\n }\n\n public async initialize(clues: readonly Clue[]): Promise<void> {\n if (this.#logDirPath === undefined) {\n return;\n }\n\n const timestamp = formatTimestamp(new Date());\n\n this.#filePath = allocateArtifactPath({\n category: \"editor\",\n logDirPath: this.#logDirPath,\n prefix: `compression-serial-${this.#serialId}-group-${this.#groupId}`,\n });\n\n if (this.#filePath === undefined) {\n return;\n }\n\n await writeFile(\n this.#filePath,\n [\n \"=== Text Compression Log ===\",\n `Serial: ${this.#serialId}, Group: ${this.#groupId}`,\n `Started at: ${timestamp}`,\n `Compression ratio target: ${Math.round(this.#compressionRatio * 100)}%`,\n `Max iterations: ${this.#maxIterations}`,\n \"\",\n \"\",\n formatChunkHierarchy(clues, this.#groupId, this.#serialId),\n \"\",\n ].join(\"\\n\"),\n \"utf8\",\n );\n }\n}\n\nfunction formatChunkHierarchy(\n clues: readonly Clue[],\n groupId: number,\n serialId: number,\n): string {\n const parts = [\n \"=\".repeat(80),\n `CHUNK HIERARCHY - Serial ${serialId}, Group ${groupId}`,\n \"=\".repeat(80),\n \"\",\n ];\n\n for (let clueIndex = 0; clueIndex < clues.length; clueIndex += 1) {\n const clue = clues[clueIndex];\n\n if (clue === undefined) {\n continue;\n }\n\n parts.push(\n `Clue #${clueIndex + 1} (ID: ${clue.clueId})`,\n `|- Weight: ${clue.weight.toFixed(4)}`,\n `|- Label: ${clue.label}`,\n `|- Source snakes: ${clue.sourceSnakeIds.join(\", \")}`,\n `|- Merged: ${clue.isMerged ? \"yes\" : \"no\"}`,\n `\\\\- Chunks: ${clue.chunks.length}`,\n \"\",\n );\n\n for (let chunkIndex = 0; chunkIndex < clue.chunks.length; chunkIndex += 1) {\n const chunk = clue.chunks[chunkIndex];\n\n if (chunk === undefined) {\n continue;\n }\n\n const contentPreview =\n chunk.content.length > 60\n ? `${chunk.content.slice(0, 60)}...`\n : chunk.content;\n\n parts.push(\n ` - Chunk ${chunkIndex + 1}/${clue.chunks.length} (ID: ${chunk.id})`,\n ` Label: ${chunk.label}`,\n ` Retention: ${chunk.retention ?? \"N/A\"}`,\n ` Importance: ${chunk.importance ?? \"N/A\"}`,\n ` Content: ${contentPreview}`,\n \"\",\n );\n }\n }\n\n parts.push(\"=\".repeat(80), \"\");\n\n return parts.join(\"\\n\");\n}\n\nfunction formatTimestamp(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return `${year}-${month}-${day} ${hours}-${minutes}-${seconds}`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReadonlySerialTextStream } from '../document/text-streams.js';
|
|
2
|
+
import { ChunkRecord } from '../document/types.js';
|
|
3
|
+
import '../document/database.js';
|
|
4
|
+
import 'sqlite3';
|
|
5
|
+
|
|
6
|
+
declare function formatClueAsBook(input: {
|
|
7
|
+
chunks: readonly ChunkRecord[];
|
|
8
|
+
serialFragments: ReadonlySerialTextStream;
|
|
9
|
+
fullMarkup?: boolean;
|
|
10
|
+
wrapHighRetention?: boolean;
|
|
11
|
+
}): Promise<string>;
|
|
12
|
+
declare function formatChunksAsBook(input: {
|
|
13
|
+
chunks: readonly ChunkRecord[];
|
|
14
|
+
segmentStartIndexes: readonly number[];
|
|
15
|
+
serialFragments: ReadonlySerialTextStream;
|
|
16
|
+
fullMarkup?: boolean;
|
|
17
|
+
wrapHighRetention?: boolean;
|
|
18
|
+
}): Promise<string>;
|
|
19
|
+
|
|
20
|
+
export { formatChunksAsBook, formatClueAsBook };
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChunkRetention
|
|
3
|
+
} from "../document/index.js";
|
|
4
|
+
async function formatClueAsBook(input) {
|
|
5
|
+
return await formatChunksAsBook({
|
|
6
|
+
chunks: input.chunks,
|
|
7
|
+
segmentStartIndexes: await listSegmentStartIndexesCoveringChunks(
|
|
8
|
+
input.chunks,
|
|
9
|
+
input.serialFragments
|
|
10
|
+
),
|
|
11
|
+
serialFragments: input.serialFragments,
|
|
12
|
+
...input.fullMarkup === void 0 ? {} : {
|
|
13
|
+
fullMarkup: input.fullMarkup
|
|
14
|
+
},
|
|
15
|
+
...input.wrapHighRetention === void 0 ? {} : {
|
|
16
|
+
wrapHighRetention: input.wrapHighRetention
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async function formatChunksAsBook(input) {
|
|
21
|
+
if (input.segmentStartIndexes.length === 0) {
|
|
22
|
+
return "";
|
|
23
|
+
}
|
|
24
|
+
const chunkCoverage = createChunkCoverage(input.chunks);
|
|
25
|
+
const segmentStartIndexes = [...input.segmentStartIndexes].sort(
|
|
26
|
+
compareNumber
|
|
27
|
+
);
|
|
28
|
+
const allSegmentStartIndexes = [
|
|
29
|
+
...await input.serialFragments.listFragmentIds()
|
|
30
|
+
].sort(compareNumber);
|
|
31
|
+
const fragments = await loadFragments(
|
|
32
|
+
listRequiredSegmentStartIndexes(
|
|
33
|
+
segmentStartIndexes,
|
|
34
|
+
allSegmentStartIndexes
|
|
35
|
+
),
|
|
36
|
+
input.serialFragments
|
|
37
|
+
);
|
|
38
|
+
const resultParts = [];
|
|
39
|
+
for (let index = 0; index < segmentStartIndexes.length; index += 1) {
|
|
40
|
+
const startSentenceIndex = segmentStartIndexes[index];
|
|
41
|
+
if (startSentenceIndex === void 0) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const fragment = fragments[String(startSentenceIndex)];
|
|
45
|
+
if (fragment === void 0) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (index > 0) {
|
|
49
|
+
const previousStartSentenceIndex = segmentStartIndexes[index - 1];
|
|
50
|
+
if (previousStartSentenceIndex !== void 0 && startSentenceIndex > previousStartSentenceIndex) {
|
|
51
|
+
const skippedSummary = collectSkippedSummary({
|
|
52
|
+
fragments,
|
|
53
|
+
skippedStartIndexes: listSkippedSegmentStartIndexes(
|
|
54
|
+
allSegmentStartIndexes,
|
|
55
|
+
previousStartSentenceIndex,
|
|
56
|
+
startSentenceIndex
|
|
57
|
+
)
|
|
58
|
+
});
|
|
59
|
+
if (skippedSummary !== "") {
|
|
60
|
+
resultParts.push(skippedSummary);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
resultParts.push(
|
|
65
|
+
buildFragmentMarkup({
|
|
66
|
+
chunkCoverage,
|
|
67
|
+
fragment,
|
|
68
|
+
fullMarkup: input.fullMarkup ?? false,
|
|
69
|
+
wrapHighRetention: input.wrapHighRetention ?? false
|
|
70
|
+
})
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
return resultParts.join("\n\n");
|
|
74
|
+
}
|
|
75
|
+
function buildFragmentMarkup(input) {
|
|
76
|
+
const sentenceRanges = [];
|
|
77
|
+
const { fragment } = input;
|
|
78
|
+
let sentenceIndex = 0;
|
|
79
|
+
while (sentenceIndex < fragment.sentences.length) {
|
|
80
|
+
const sentence = fragment.sentences[sentenceIndex];
|
|
81
|
+
if (sentence === void 0) {
|
|
82
|
+
sentenceIndex += 1;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const sentenceId = createSentenceKey(
|
|
86
|
+
fragment.serialId,
|
|
87
|
+
fragment.fragmentId + sentenceIndex
|
|
88
|
+
);
|
|
89
|
+
const coveredChunks = input.chunkCoverage[sentenceId];
|
|
90
|
+
if (coveredChunks === void 0) {
|
|
91
|
+
sentenceRanges.push({
|
|
92
|
+
endIndex: sentenceIndex + 1,
|
|
93
|
+
startIndex: sentenceIndex
|
|
94
|
+
});
|
|
95
|
+
sentenceIndex += 1;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const chunkAttributes = mergeChunkAttributes(coveredChunks);
|
|
99
|
+
let endIndex = sentenceIndex + 1;
|
|
100
|
+
while (endIndex < fragment.sentences.length) {
|
|
101
|
+
const nextSentenceId = createSentenceKey(
|
|
102
|
+
fragment.serialId,
|
|
103
|
+
fragment.fragmentId + endIndex
|
|
104
|
+
);
|
|
105
|
+
const nextCoveredChunks = input.chunkCoverage[nextSentenceId];
|
|
106
|
+
if (nextCoveredChunks === void 0) {
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
const nextAttributes = mergeChunkAttributes(nextCoveredChunks);
|
|
110
|
+
if (nextAttributes.label !== chunkAttributes.label) {
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
endIndex += 1;
|
|
114
|
+
}
|
|
115
|
+
sentenceRanges.push({
|
|
116
|
+
chunkAttributes,
|
|
117
|
+
endIndex,
|
|
118
|
+
startIndex: sentenceIndex
|
|
119
|
+
});
|
|
120
|
+
sentenceIndex = endIndex;
|
|
121
|
+
}
|
|
122
|
+
const parts = sentenceRanges.map(
|
|
123
|
+
(range) => renderSentenceRange({
|
|
124
|
+
fragment,
|
|
125
|
+
fullMarkup: input.fullMarkup,
|
|
126
|
+
range,
|
|
127
|
+
wrapHighRetention: input.wrapHighRetention
|
|
128
|
+
})
|
|
129
|
+
);
|
|
130
|
+
return parts.join(" ");
|
|
131
|
+
}
|
|
132
|
+
function collectSkippedSummary(input) {
|
|
133
|
+
const summaries = [];
|
|
134
|
+
for (const startSentenceIndex of input.skippedStartIndexes) {
|
|
135
|
+
const summary = input.fragments[String(startSentenceIndex)]?.summary?.trim() ?? "";
|
|
136
|
+
if (summary !== "") {
|
|
137
|
+
summaries.push(summary);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return summaries.join(" ");
|
|
141
|
+
}
|
|
142
|
+
function createChunkCoverage(chunks) {
|
|
143
|
+
const coverage = /* @__PURE__ */ Object.create(null);
|
|
144
|
+
for (const chunk of chunks) {
|
|
145
|
+
for (const sentenceId of chunk.sentenceIds) {
|
|
146
|
+
const coverageKey = createSentenceKey(...sentenceId);
|
|
147
|
+
const coveredChunks = coverage[coverageKey];
|
|
148
|
+
coverage[coverageKey] = coveredChunks === void 0 ? [chunk] : [...coveredChunks, chunk];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return coverage;
|
|
152
|
+
}
|
|
153
|
+
function createSentenceKey(serialId, sentenceIndex) {
|
|
154
|
+
return `${serialId}:${sentenceIndex}`;
|
|
155
|
+
}
|
|
156
|
+
function listRequiredSegmentStartIndexes(selectedStartIndexes, allStartIndexes) {
|
|
157
|
+
const required = new Set(selectedStartIndexes);
|
|
158
|
+
for (let index = 1; index < selectedStartIndexes.length; index += 1) {
|
|
159
|
+
const previousStartIndex = selectedStartIndexes[index - 1];
|
|
160
|
+
const nextStartIndex = selectedStartIndexes[index];
|
|
161
|
+
if (previousStartIndex === void 0 || nextStartIndex === void 0) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
for (const skippedStartIndex of listSkippedSegmentStartIndexes(
|
|
165
|
+
allStartIndexes,
|
|
166
|
+
previousStartIndex,
|
|
167
|
+
nextStartIndex
|
|
168
|
+
)) {
|
|
169
|
+
required.add(skippedStartIndex);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return [...required].sort(compareNumber);
|
|
173
|
+
}
|
|
174
|
+
function listSkippedSegmentStartIndexes(allStartIndexes, previousStartIndex, nextStartIndex) {
|
|
175
|
+
return allStartIndexes.filter(
|
|
176
|
+
(startIndex) => startIndex > previousStartIndex && startIndex < nextStartIndex
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
async function listSegmentStartIndexesCoveringChunks(chunks, serialFragments) {
|
|
180
|
+
const allSegmentStartIndexes = [
|
|
181
|
+
...await serialFragments.listFragmentIds()
|
|
182
|
+
].sort(compareNumber);
|
|
183
|
+
const startIndexRecord = /* @__PURE__ */ Object.create(null);
|
|
184
|
+
const startIndexes = [];
|
|
185
|
+
for (const chunk of chunks) {
|
|
186
|
+
for (const sentenceId of chunk.sentenceIds) {
|
|
187
|
+
const startSentenceIndex = findContainingSegmentStartIndex(
|
|
188
|
+
allSegmentStartIndexes,
|
|
189
|
+
sentenceId[1]
|
|
190
|
+
);
|
|
191
|
+
if (startSentenceIndex === void 0) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
const startIndexKey = String(startSentenceIndex);
|
|
195
|
+
if (startIndexRecord[startIndexKey] === true) {
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
startIndexRecord[startIndexKey] = true;
|
|
199
|
+
startIndexes.push(startSentenceIndex);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
startIndexes.sort(compareNumber);
|
|
203
|
+
return startIndexes;
|
|
204
|
+
}
|
|
205
|
+
function findContainingSegmentStartIndex(segmentStartIndexes, sentenceIndex) {
|
|
206
|
+
let containingStartIndex;
|
|
207
|
+
for (const startIndex of segmentStartIndexes) {
|
|
208
|
+
if (startIndex > sentenceIndex) {
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
containingStartIndex = startIndex;
|
|
212
|
+
}
|
|
213
|
+
return containingStartIndex;
|
|
214
|
+
}
|
|
215
|
+
async function loadFragments(startSentenceIndexes, serialFragments) {
|
|
216
|
+
const fragments = /* @__PURE__ */ Object.create(null);
|
|
217
|
+
await Promise.all(
|
|
218
|
+
startSentenceIndexes.map(async (startSentenceIndex) => {
|
|
219
|
+
fragments[String(startSentenceIndex)] = await serialFragments.getFragment(startSentenceIndex);
|
|
220
|
+
})
|
|
221
|
+
);
|
|
222
|
+
return fragments;
|
|
223
|
+
}
|
|
224
|
+
function compareNumber(left, right) {
|
|
225
|
+
return left - right;
|
|
226
|
+
}
|
|
227
|
+
function mergeChunkAttributes(chunksAtPosition) {
|
|
228
|
+
const retentionOrder = createMetadataOrder({
|
|
229
|
+
detailed: 3,
|
|
230
|
+
focused: 2,
|
|
231
|
+
relevant: 1,
|
|
232
|
+
verbatim: 4
|
|
233
|
+
});
|
|
234
|
+
const importanceOrder = createMetadataOrder({
|
|
235
|
+
critical: 3,
|
|
236
|
+
helpful: 1,
|
|
237
|
+
important: 2
|
|
238
|
+
});
|
|
239
|
+
let bestRetentionChunk = chunksAtPosition[0];
|
|
240
|
+
let bestImportanceChunk = chunksAtPosition[0];
|
|
241
|
+
for (const chunk of chunksAtPosition) {
|
|
242
|
+
if (getMetadataRank(chunk.retention, retentionOrder) > getMetadataRank(bestRetentionChunk?.retention, retentionOrder)) {
|
|
243
|
+
bestRetentionChunk = chunk;
|
|
244
|
+
}
|
|
245
|
+
if (getMetadataRank(chunk.importance, importanceOrder) > getMetadataRank(bestImportanceChunk?.importance, importanceOrder)) {
|
|
246
|
+
bestImportanceChunk = chunk;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const bestChunk = getMetadataRank(bestRetentionChunk?.retention, retentionOrder) >= getMetadataRank(bestImportanceChunk?.importance, importanceOrder) ? bestRetentionChunk : bestImportanceChunk;
|
|
250
|
+
return {
|
|
251
|
+
label: bestChunk?.label ?? "",
|
|
252
|
+
...bestImportanceChunk?.importance === void 0 ? {} : {
|
|
253
|
+
importance: bestImportanceChunk.importance
|
|
254
|
+
},
|
|
255
|
+
...bestRetentionChunk?.retention === void 0 ? {} : {
|
|
256
|
+
retention: bestRetentionChunk.retention
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function createMetadataOrder(values) {
|
|
261
|
+
return Object.freeze(values);
|
|
262
|
+
}
|
|
263
|
+
function getMetadataRank(value, order) {
|
|
264
|
+
if (value === void 0) {
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
return order[value] ?? 0;
|
|
268
|
+
}
|
|
269
|
+
function renderSentenceRange(input) {
|
|
270
|
+
const textSegment = input.fragment.sentences.slice(input.range.startIndex, input.range.endIndex).map((sentence) => sentence.text).join(" ");
|
|
271
|
+
const chunkAttributes = input.range.chunkAttributes;
|
|
272
|
+
if (chunkAttributes === void 0) {
|
|
273
|
+
return textSegment;
|
|
274
|
+
}
|
|
275
|
+
if (input.fullMarkup) {
|
|
276
|
+
const attributes = [`label="${chunkAttributes.label}"`];
|
|
277
|
+
if (chunkAttributes.retention !== void 0) {
|
|
278
|
+
attributes.push(`retention="${chunkAttributes.retention}"`);
|
|
279
|
+
}
|
|
280
|
+
if (chunkAttributes.importance !== void 0) {
|
|
281
|
+
attributes.push(`importance="${chunkAttributes.importance}"`);
|
|
282
|
+
}
|
|
283
|
+
return `<chunk ${attributes.join(" ")}>${textSegment}</chunk>`;
|
|
284
|
+
}
|
|
285
|
+
if (input.wrapHighRetention && (chunkAttributes.retention === ChunkRetention.Verbatim || chunkAttributes.retention === ChunkRetention.Detailed)) {
|
|
286
|
+
return `<chunk retention="${chunkAttributes.retention}">${textSegment}</chunk>`;
|
|
287
|
+
}
|
|
288
|
+
return textSegment;
|
|
289
|
+
}
|
|
290
|
+
export {
|
|
291
|
+
formatChunksAsBook,
|
|
292
|
+
formatClueAsBook
|
|
293
|
+
};
|
|
294
|
+
//# sourceMappingURL=markup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/editor/markup.ts"],"sourcesContent":["import {\n ChunkRetention,\n type ChunkImportance,\n type ChunkRecord,\n type FragmentRecord,\n type ReadonlySerialFragments,\n} from \"../document/index.js\";\nexport async function formatClueAsBook(input: {\n chunks: readonly ChunkRecord[];\n serialFragments: ReadonlySerialFragments;\n fullMarkup?: boolean;\n wrapHighRetention?: boolean;\n}): Promise<string> {\n return await formatChunksAsBook({\n chunks: input.chunks,\n segmentStartIndexes: await listSegmentStartIndexesCoveringChunks(\n input.chunks,\n input.serialFragments,\n ),\n serialFragments: input.serialFragments,\n ...(input.fullMarkup === undefined\n ? {}\n : {\n fullMarkup: input.fullMarkup,\n }),\n ...(input.wrapHighRetention === undefined\n ? {}\n : {\n wrapHighRetention: input.wrapHighRetention,\n }),\n });\n}\n\nexport async function formatChunksAsBook(input: {\n chunks: readonly ChunkRecord[];\n segmentStartIndexes: readonly number[];\n serialFragments: ReadonlySerialFragments;\n fullMarkup?: boolean;\n wrapHighRetention?: boolean;\n}): Promise<string> {\n if (input.segmentStartIndexes.length === 0) {\n return \"\";\n }\n\n const chunkCoverage = createChunkCoverage(input.chunks);\n const segmentStartIndexes = [...input.segmentStartIndexes].sort(\n compareNumber,\n );\n const allSegmentStartIndexes = [\n ...(await input.serialFragments.listFragmentIds()),\n ].sort(compareNumber);\n const fragments = await loadFragments(\n listRequiredSegmentStartIndexes(\n segmentStartIndexes,\n allSegmentStartIndexes,\n ),\n input.serialFragments,\n );\n const resultParts: string[] = [];\n\n for (let index = 0; index < segmentStartIndexes.length; index += 1) {\n const startSentenceIndex = segmentStartIndexes[index];\n\n if (startSentenceIndex === undefined) {\n continue;\n }\n\n const fragment = fragments[String(startSentenceIndex)];\n\n if (fragment === undefined) {\n continue;\n }\n\n if (index > 0) {\n const previousStartSentenceIndex = segmentStartIndexes[index - 1];\n\n if (\n previousStartSentenceIndex !== undefined &&\n startSentenceIndex > previousStartSentenceIndex\n ) {\n const skippedSummary = collectSkippedSummary({\n fragments,\n skippedStartIndexes: listSkippedSegmentStartIndexes(\n allSegmentStartIndexes,\n previousStartSentenceIndex,\n startSentenceIndex,\n ),\n });\n\n if (skippedSummary !== \"\") {\n resultParts.push(skippedSummary);\n }\n }\n }\n\n resultParts.push(\n buildFragmentMarkup({\n chunkCoverage,\n fragment,\n fullMarkup: input.fullMarkup ?? false,\n wrapHighRetention: input.wrapHighRetention ?? false,\n }),\n );\n }\n\n return resultParts.join(\"\\n\\n\");\n}\n\nfunction buildFragmentMarkup(input: {\n chunkCoverage: Record<string, readonly ChunkRecord[] | undefined>;\n fragment: FragmentRecord;\n fullMarkup: boolean;\n wrapHighRetention: boolean;\n}): string {\n const sentenceRanges: Array<{\n readonly endIndex: number;\n readonly startIndex: number;\n readonly chunkAttributes?: ChunkAttributes;\n }> = [];\n const { fragment } = input;\n let sentenceIndex = 0;\n\n while (sentenceIndex < fragment.sentences.length) {\n const sentence = fragment.sentences[sentenceIndex];\n\n if (sentence === undefined) {\n sentenceIndex += 1;\n continue;\n }\n\n const sentenceId = createSentenceKey(\n fragment.serialId,\n fragment.fragmentId + sentenceIndex,\n );\n const coveredChunks = input.chunkCoverage[sentenceId];\n\n if (coveredChunks === undefined) {\n sentenceRanges.push({\n endIndex: sentenceIndex + 1,\n startIndex: sentenceIndex,\n });\n sentenceIndex += 1;\n continue;\n }\n\n const chunkAttributes = mergeChunkAttributes(coveredChunks);\n let endIndex = sentenceIndex + 1;\n\n while (endIndex < fragment.sentences.length) {\n const nextSentenceId = createSentenceKey(\n fragment.serialId,\n fragment.fragmentId + endIndex,\n );\n const nextCoveredChunks = input.chunkCoverage[nextSentenceId];\n\n if (nextCoveredChunks === undefined) {\n break;\n }\n\n const nextAttributes = mergeChunkAttributes(nextCoveredChunks);\n\n if (nextAttributes.label !== chunkAttributes.label) {\n break;\n }\n\n endIndex += 1;\n }\n\n sentenceRanges.push({\n chunkAttributes,\n endIndex,\n startIndex: sentenceIndex,\n });\n sentenceIndex = endIndex;\n }\n\n const parts = sentenceRanges.map((range) =>\n renderSentenceRange({\n fragment,\n fullMarkup: input.fullMarkup,\n range,\n wrapHighRetention: input.wrapHighRetention,\n }),\n );\n\n return parts.join(\" \");\n}\n\nfunction collectSkippedSummary(input: {\n fragments: Record<string, FragmentRecord | undefined>;\n skippedStartIndexes: readonly number[];\n}): string {\n const summaries: string[] = [];\n\n for (const startSentenceIndex of input.skippedStartIndexes) {\n const summary =\n input.fragments[String(startSentenceIndex)]?.summary?.trim() ?? \"\";\n\n if (summary !== \"\") {\n summaries.push(summary);\n }\n }\n\n return summaries.join(\" \");\n}\n\nfunction createChunkCoverage(\n chunks: readonly ChunkRecord[],\n): Record<string, readonly ChunkRecord[] | undefined> {\n const coverage = Object.create(null) as Record<\n string,\n readonly ChunkRecord[] | undefined\n >;\n\n for (const chunk of chunks) {\n for (const sentenceId of chunk.sentenceIds) {\n const coverageKey = createSentenceKey(...sentenceId);\n const coveredChunks = coverage[coverageKey];\n\n coverage[coverageKey] =\n coveredChunks === undefined ? [chunk] : [...coveredChunks, chunk];\n }\n }\n\n return coverage;\n}\n\nfunction createSentenceKey(serialId: number, sentenceIndex: number): string {\n return `${serialId}:${sentenceIndex}`;\n}\n\nfunction listRequiredSegmentStartIndexes(\n selectedStartIndexes: readonly number[],\n allStartIndexes: readonly number[],\n): number[] {\n const required = new Set(selectedStartIndexes);\n\n for (let index = 1; index < selectedStartIndexes.length; index += 1) {\n const previousStartIndex = selectedStartIndexes[index - 1];\n const nextStartIndex = selectedStartIndexes[index];\n\n if (previousStartIndex === undefined || nextStartIndex === undefined) {\n continue;\n }\n\n for (const skippedStartIndex of listSkippedSegmentStartIndexes(\n allStartIndexes,\n previousStartIndex,\n nextStartIndex,\n )) {\n required.add(skippedStartIndex);\n }\n }\n\n return [...required].sort(compareNumber);\n}\n\nfunction listSkippedSegmentStartIndexes(\n allStartIndexes: readonly number[],\n previousStartIndex: number,\n nextStartIndex: number,\n): number[] {\n return allStartIndexes.filter(\n (startIndex) =>\n startIndex > previousStartIndex && startIndex < nextStartIndex,\n );\n}\n\nasync function listSegmentStartIndexesCoveringChunks(\n chunks: readonly ChunkRecord[],\n serialFragments: ReadonlySerialFragments,\n): Promise<number[]> {\n const allSegmentStartIndexes = [\n ...(await serialFragments.listFragmentIds()),\n ].sort(compareNumber);\n const startIndexRecord = Object.create(null) as Record<string, true>;\n const startIndexes: number[] = [];\n\n for (const chunk of chunks) {\n for (const sentenceId of chunk.sentenceIds) {\n const startSentenceIndex = findContainingSegmentStartIndex(\n allSegmentStartIndexes,\n sentenceId[1],\n );\n\n if (startSentenceIndex === undefined) {\n continue;\n }\n\n const startIndexKey = String(startSentenceIndex);\n\n if (startIndexRecord[startIndexKey] === true) {\n continue;\n }\n\n startIndexRecord[startIndexKey] = true;\n startIndexes.push(startSentenceIndex);\n }\n }\n\n startIndexes.sort(compareNumber);\n\n return startIndexes;\n}\n\nfunction findContainingSegmentStartIndex(\n segmentStartIndexes: readonly number[],\n sentenceIndex: number,\n): number | undefined {\n let containingStartIndex: number | undefined;\n\n for (const startIndex of segmentStartIndexes) {\n if (startIndex > sentenceIndex) {\n break;\n }\n\n containingStartIndex = startIndex;\n }\n\n return containingStartIndex;\n}\n\nasync function loadFragments(\n startSentenceIndexes: readonly number[],\n serialFragments: ReadonlySerialFragments,\n): Promise<Record<string, FragmentRecord | undefined>> {\n const fragments = Object.create(null) as Record<\n string,\n FragmentRecord | undefined\n >;\n\n await Promise.all(\n startSentenceIndexes.map(async (startSentenceIndex) => {\n fragments[String(startSentenceIndex)] =\n await serialFragments.getFragment(startSentenceIndex);\n }),\n );\n\n return fragments;\n}\n\nfunction compareNumber(left: number, right: number): number {\n return left - right;\n}\n\ninterface ChunkAttributes {\n readonly importance?: ChunkImportance;\n readonly label: string;\n readonly retention?: ChunkRetention;\n}\n\nfunction mergeChunkAttributes(\n chunksAtPosition: readonly ChunkRecord[],\n): ChunkAttributes {\n const retentionOrder = createMetadataOrder({\n detailed: 3,\n focused: 2,\n relevant: 1,\n verbatim: 4,\n });\n const importanceOrder = createMetadataOrder({\n critical: 3,\n helpful: 1,\n important: 2,\n });\n let bestRetentionChunk = chunksAtPosition[0];\n let bestImportanceChunk = chunksAtPosition[0];\n\n for (const chunk of chunksAtPosition) {\n if (\n getMetadataRank(chunk.retention, retentionOrder) >\n getMetadataRank(bestRetentionChunk?.retention, retentionOrder)\n ) {\n bestRetentionChunk = chunk;\n }\n\n if (\n getMetadataRank(chunk.importance, importanceOrder) >\n getMetadataRank(bestImportanceChunk?.importance, importanceOrder)\n ) {\n bestImportanceChunk = chunk;\n }\n }\n\n const bestChunk =\n getMetadataRank(bestRetentionChunk?.retention, retentionOrder) >=\n getMetadataRank(bestImportanceChunk?.importance, importanceOrder)\n ? bestRetentionChunk\n : bestImportanceChunk;\n\n return {\n label: bestChunk?.label ?? \"\",\n ...(bestImportanceChunk?.importance === undefined\n ? {}\n : {\n importance: bestImportanceChunk.importance,\n }),\n ...(bestRetentionChunk?.retention === undefined\n ? {}\n : {\n retention: bestRetentionChunk.retention,\n }),\n };\n}\n\nfunction createMetadataOrder<TValue extends string>(\n values: Record<TValue, number>,\n): Readonly<Record<TValue, number>> {\n return Object.freeze(values);\n}\n\nfunction getMetadataRank<TValue extends string>(\n value: TValue | undefined,\n order: Readonly<Record<TValue, number>>,\n): number {\n if (value === undefined) {\n return 0;\n }\n\n return order[value] ?? 0;\n}\n\nfunction renderSentenceRange(input: {\n fragment: FragmentRecord;\n fullMarkup: boolean;\n range: {\n readonly endIndex: number;\n readonly startIndex: number;\n readonly chunkAttributes?: ChunkAttributes;\n };\n wrapHighRetention: boolean;\n}): string {\n const textSegment = input.fragment.sentences\n .slice(input.range.startIndex, input.range.endIndex)\n .map((sentence) => sentence.text)\n .join(\" \");\n const chunkAttributes = input.range.chunkAttributes;\n\n if (chunkAttributes === undefined) {\n return textSegment;\n }\n\n if (input.fullMarkup) {\n const attributes = [`label=\"${chunkAttributes.label}\"`];\n\n if (chunkAttributes.retention !== undefined) {\n attributes.push(`retention=\"${chunkAttributes.retention}\"`);\n }\n\n if (chunkAttributes.importance !== undefined) {\n attributes.push(`importance=\"${chunkAttributes.importance}\"`);\n }\n\n return `<chunk ${attributes.join(\" \")}>${textSegment}</chunk>`;\n }\n\n if (\n input.wrapHighRetention &&\n (chunkAttributes.retention === ChunkRetention.Verbatim ||\n chunkAttributes.retention === ChunkRetention.Detailed)\n ) {\n return `<chunk retention=\"${chunkAttributes.retention}\">${textSegment}</chunk>`;\n }\n\n return textSegment;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare const CLUE_REVIEWER_PROMPT_TEMPLATE = "editor/clue_reviewer";
|
|
2
|
+
declare const CLUE_REVIEWER_GENERATOR_PROMPT_TEMPLATE = "editor/clue_reviewer_generator";
|
|
3
|
+
declare const REVISION_FEEDBACK_PROMPT_TEMPLATE = "editor/revision_feedback";
|
|
4
|
+
declare const TEXT_COMPRESSOR_PROMPT_TEMPLATE = "editor/text_compressor";
|
|
5
|
+
|
|
6
|
+
export { CLUE_REVIEWER_GENERATOR_PROMPT_TEMPLATE, CLUE_REVIEWER_PROMPT_TEMPLATE, REVISION_FEEDBACK_PROMPT_TEMPLATE, TEXT_COMPRESSOR_PROMPT_TEMPLATE };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const CLUE_REVIEWER_PROMPT_TEMPLATE = "editor/clue_reviewer";
|
|
2
|
+
const CLUE_REVIEWER_GENERATOR_PROMPT_TEMPLATE = "editor/clue_reviewer_generator";
|
|
3
|
+
const REVISION_FEEDBACK_PROMPT_TEMPLATE = "editor/revision_feedback";
|
|
4
|
+
const TEXT_COMPRESSOR_PROMPT_TEMPLATE = "editor/text_compressor";
|
|
5
|
+
export {
|
|
6
|
+
CLUE_REVIEWER_GENERATOR_PROMPT_TEMPLATE,
|
|
7
|
+
CLUE_REVIEWER_PROMPT_TEMPLATE,
|
|
8
|
+
REVISION_FEEDBACK_PROMPT_TEMPLATE,
|
|
9
|
+
TEXT_COMPRESSOR_PROMPT_TEMPLATE
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=prompt-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/editor/prompt-templates.ts"],"sourcesContent":["export const CLUE_REVIEWER_PROMPT_TEMPLATE = \"editor/clue_reviewer\";\nexport const CLUE_REVIEWER_GENERATOR_PROMPT_TEMPLATE =\n \"editor/clue_reviewer_generator\";\nexport const REVISION_FEEDBACK_PROMPT_TEMPLATE = \"editor/revision_feedback\";\nexport const TEXT_COMPRESSOR_PROMPT_TEMPLATE = \"editor/text_compressor\";\n"],"mappings":"AAAO,MAAM,gCAAgC;AACtC,MAAM,0CACX;AACK,MAAM,oCAAoC;AAC1C,MAAM,kCAAkC;","names":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
function cleanChunkTags(text) {
|
|
2
|
+
return text.replace(/<chunk(?:\s+[^>]*)?>/g, "").replace(/<\/chunk>/g, "");
|
|
3
|
+
}
|
|
4
|
+
function extractCompressedText(fullResponse) {
|
|
5
|
+
const matchedCompressedSection = fullResponse.match(
|
|
6
|
+
/##\s*(?:Compressed\s+Text|压缩文本)\s*\n+(.*?)(?:\n+---|\*\*CRITICAL\*\*|$)/is
|
|
7
|
+
);
|
|
8
|
+
if (matchedCompressedSection?.[1] !== void 0) {
|
|
9
|
+
return unwrapMarkdownCodeFence(matchedCompressedSection[1].trim());
|
|
10
|
+
}
|
|
11
|
+
return unwrapMarkdownCodeFence(fullResponse.trim());
|
|
12
|
+
}
|
|
13
|
+
function extractThinkingText(fullResponse) {
|
|
14
|
+
const matchedCompressedSection = fullResponse.match(
|
|
15
|
+
/##\s*(?:Compressed\s+Text|压缩文本)\s*/i
|
|
16
|
+
);
|
|
17
|
+
if (matchedCompressedSection?.index === void 0) {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
return fullResponse.slice(0, matchedCompressedSection.index).trim();
|
|
21
|
+
}
|
|
22
|
+
function unwrapMarkdownCodeFence(text) {
|
|
23
|
+
const matchedFence = text.match(/^```(?:\w+)?\s*\n([\s\S]*?)\n```$/);
|
|
24
|
+
return matchedFence?.[1]?.trim() ?? text;
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
cleanChunkTags,
|
|
28
|
+
extractCompressedText,
|
|
29
|
+
extractThinkingText
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/editor/response.ts"],"sourcesContent":["export function cleanChunkTags(text: string): string {\n return text.replace(/<chunk(?:\\s+[^>]*)?>/g, \"\").replace(/<\\/chunk>/g, \"\");\n}\n\nexport function extractCompressedText(fullResponse: string): string {\n const matchedCompressedSection = fullResponse.match(\n /##\\s*(?:Compressed\\s+Text|压缩文本)\\s*\\n+(.*?)(?:\\n+---|\\*\\*CRITICAL\\*\\*|$)/is,\n );\n\n if (matchedCompressedSection?.[1] !== undefined) {\n return unwrapMarkdownCodeFence(matchedCompressedSection[1].trim());\n }\n\n return unwrapMarkdownCodeFence(fullResponse.trim());\n}\n\nexport function extractThinkingText(fullResponse: string): string {\n const matchedCompressedSection = fullResponse.match(\n /##\\s*(?:Compressed\\s+Text|压缩文本)\\s*/i,\n );\n\n if (matchedCompressedSection?.index === undefined) {\n return \"\";\n }\n\n return fullResponse.slice(0, matchedCompressedSection.index).trim();\n}\n\nfunction unwrapMarkdownCodeFence(text: string): string {\n const matchedFence = text.match(/^```(?:\\w+)?\\s*\\n([\\s\\S]*?)\\n```$/);\n\n return matchedFence?.[1]?.trim() ?? text;\n}\n"],"mappings":"AAAO,SAAS,eAAe,MAAsB;AACnD,SAAO,KAAK,QAAQ,yBAAyB,EAAE,EAAE,QAAQ,cAAc,EAAE;AAC3E;AAEO,SAAS,sBAAsB,cAA8B;AAClE,QAAM,2BAA2B,aAAa;AAAA,IAC5C;AAAA,EACF;AAEA,MAAI,2BAA2B,CAAC,MAAM,QAAW;AAC/C,WAAO,wBAAwB,yBAAyB,CAAC,EAAE,KAAK,CAAC;AAAA,EACnE;AAEA,SAAO,wBAAwB,aAAa,KAAK,CAAC;AACpD;AAEO,SAAS,oBAAoB,cAA8B;AAChE,QAAM,2BAA2B,aAAa;AAAA,IAC5C;AAAA,EACF;AAEA,MAAI,0BAA0B,UAAU,QAAW;AACjD,WAAO;AAAA,EACT;AAEA,SAAO,aAAa,MAAM,GAAG,yBAAyB,KAAK,EAAE,KAAK;AACpE;AAEA,SAAS,wBAAwB,MAAsB;AACrD,QAAM,eAAe,KAAK,MAAM,mCAAmC;AAEnE,SAAO,eAAe,CAAC,GAAG,KAAK,KAAK;AACtC;","names":[]}
|