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
package/dist/gc/lock.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { resolveWikiGraphStateRootPath } from "../common/wiki-graph-temp.js";
|
|
4
|
+
import { getNumber, getString } from "../document/database.js";
|
|
5
|
+
import { openSharedStateDatabase } from "../document/index.js";
|
|
6
|
+
import { isNodeError } from "../utils/node-error.js";
|
|
7
|
+
const GC_SCHEMA_SQL = `
|
|
8
|
+
CREATE TABLE IF NOT EXISTS gc_locks (
|
|
9
|
+
scope TEXT PRIMARY KEY,
|
|
10
|
+
owner_id TEXT NOT NULL,
|
|
11
|
+
owner_pid INTEGER NOT NULL,
|
|
12
|
+
heartbeat_at INTEGER NOT NULL,
|
|
13
|
+
created_at INTEGER NOT NULL
|
|
14
|
+
);
|
|
15
|
+
`;
|
|
16
|
+
const GC_LOCK_STALE_TIMEOUT_MS = 6e4;
|
|
17
|
+
const GC_HEARTBEAT_INTERVAL_MS = 2e4;
|
|
18
|
+
async function tryAcquireGcLock(scope = "global") {
|
|
19
|
+
const database = await openGcStateDatabase();
|
|
20
|
+
const ownerId = `${process.pid}-${randomUUID()}`;
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
let acquired = false;
|
|
23
|
+
try {
|
|
24
|
+
await database.transaction(async () => {
|
|
25
|
+
await cleanupStaleGcLocks(database);
|
|
26
|
+
await database.run(
|
|
27
|
+
`
|
|
28
|
+
INSERT OR IGNORE INTO gc_locks (
|
|
29
|
+
scope, owner_id, owner_pid, heartbeat_at, created_at
|
|
30
|
+
) VALUES (?, ?, ?, ?, ?)
|
|
31
|
+
`,
|
|
32
|
+
[scope, ownerId, process.pid, now, now]
|
|
33
|
+
);
|
|
34
|
+
acquired = await database.queryOne(
|
|
35
|
+
"SELECT owner_id FROM gc_locks WHERE scope = ?",
|
|
36
|
+
[scope],
|
|
37
|
+
(row) => getString(row, "owner_id")
|
|
38
|
+
) === ownerId;
|
|
39
|
+
});
|
|
40
|
+
} finally {
|
|
41
|
+
await database.close();
|
|
42
|
+
}
|
|
43
|
+
if (!acquired) {
|
|
44
|
+
return void 0;
|
|
45
|
+
}
|
|
46
|
+
const heartbeat = setInterval(() => {
|
|
47
|
+
void heartbeatGcLock(scope, ownerId).catch(() => void 0);
|
|
48
|
+
}, GC_HEARTBEAT_INTERVAL_MS);
|
|
49
|
+
return async () => {
|
|
50
|
+
clearInterval(heartbeat);
|
|
51
|
+
const releaseDatabase = await openGcStateDatabase();
|
|
52
|
+
try {
|
|
53
|
+
await releaseDatabase.run(
|
|
54
|
+
"DELETE FROM gc_locks WHERE scope = ? AND owner_id = ?",
|
|
55
|
+
[scope, ownerId]
|
|
56
|
+
);
|
|
57
|
+
} finally {
|
|
58
|
+
await releaseDatabase.close();
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function heartbeatGcLock(scope, ownerId) {
|
|
63
|
+
const database = await openGcStateDatabase();
|
|
64
|
+
try {
|
|
65
|
+
await database.run(
|
|
66
|
+
`
|
|
67
|
+
UPDATE gc_locks
|
|
68
|
+
SET heartbeat_at = ?, owner_pid = ?
|
|
69
|
+
WHERE scope = ? AND owner_id = ?
|
|
70
|
+
`,
|
|
71
|
+
[Date.now(), process.pid, scope, ownerId]
|
|
72
|
+
);
|
|
73
|
+
} finally {
|
|
74
|
+
await database.close();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function cleanupStaleGcLocks(database) {
|
|
78
|
+
const locks = await database.queryAll(
|
|
79
|
+
"SELECT * FROM gc_locks",
|
|
80
|
+
void 0,
|
|
81
|
+
mapGcLockWithScope
|
|
82
|
+
);
|
|
83
|
+
for (const { lock, scope } of locks.filter(
|
|
84
|
+
({ lock: lock2 }) => isStaleGcLock(lock2)
|
|
85
|
+
)) {
|
|
86
|
+
await database.run(
|
|
87
|
+
`
|
|
88
|
+
DELETE FROM gc_locks
|
|
89
|
+
WHERE scope = ?
|
|
90
|
+
AND owner_id = ?
|
|
91
|
+
AND heartbeat_at = ?
|
|
92
|
+
`,
|
|
93
|
+
[scope, lock.ownerId, lock.heartbeatAt]
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function isStaleGcLock(lock) {
|
|
98
|
+
if (Date.now() - lock.heartbeatAt < GC_LOCK_STALE_TIMEOUT_MS) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return !isProcessAlive(lock.ownerPid);
|
|
102
|
+
}
|
|
103
|
+
async function openGcStateDatabase() {
|
|
104
|
+
return await openSharedStateDatabase(
|
|
105
|
+
join(resolveWikiGraphStateRootPath(), "gc.sqlite"),
|
|
106
|
+
GC_SCHEMA_SQL
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
function mapGcLock(row) {
|
|
110
|
+
return {
|
|
111
|
+
createdAt: getNumber(row, "created_at"),
|
|
112
|
+
heartbeatAt: getNumber(row, "heartbeat_at"),
|
|
113
|
+
ownerId: getString(row, "owner_id"),
|
|
114
|
+
ownerPid: getNumber(row, "owner_pid")
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function mapGcLockWithScope(row) {
|
|
118
|
+
return {
|
|
119
|
+
lock: mapGcLock(row),
|
|
120
|
+
scope: getString(row, "scope")
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function isProcessAlive(pid) {
|
|
124
|
+
try {
|
|
125
|
+
process.kill(pid, 0);
|
|
126
|
+
return true;
|
|
127
|
+
} catch (error) {
|
|
128
|
+
if (isNodeError(error) && error.code === "ESRCH") {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export {
|
|
135
|
+
tryAcquireGcLock
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/gc/lock.ts"],"sourcesContent":["import { randomUUID } from \"crypto\";\nimport { join } from \"path\";\n\nimport { resolveWikiGraphStateRootPath } from \"../common/wiki-graph-temp.js\";\nimport { getNumber, getString, type SqlRow } from \"../document/database.js\";\nimport { openSharedStateDatabase } from \"../document/index.js\";\nimport type { Database } from \"../document/index.js\";\nimport { isNodeError } from \"../utils/node-error.js\";\n\nconst GC_SCHEMA_SQL = `\nCREATE TABLE IF NOT EXISTS gc_locks (\n scope TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n owner_pid INTEGER NOT NULL,\n heartbeat_at INTEGER NOT NULL,\n created_at INTEGER NOT NULL\n);\n`;\n\nconst GC_LOCK_STALE_TIMEOUT_MS = 60_000;\nconst GC_HEARTBEAT_INTERVAL_MS = 20_000;\n\ninterface GcLock {\n readonly createdAt: number;\n readonly heartbeatAt: number;\n readonly ownerId: string;\n readonly ownerPid: number;\n}\n\nexport async function tryAcquireGcLock(\n scope = \"global\",\n): Promise<(() => Promise<void>) | undefined> {\n const database = await openGcStateDatabase();\n const ownerId = `${process.pid}-${randomUUID()}`;\n const now = Date.now();\n let acquired = false;\n\n try {\n await database.transaction(async () => {\n await cleanupStaleGcLocks(database);\n await database.run(\n `\nINSERT OR IGNORE INTO gc_locks (\n scope, owner_id, owner_pid, heartbeat_at, created_at\n) VALUES (?, ?, ?, ?, ?)\n`,\n [scope, ownerId, process.pid, now, now],\n );\n acquired =\n (await database.queryOne(\n \"SELECT owner_id FROM gc_locks WHERE scope = ?\",\n [scope],\n (row) => getString(row, \"owner_id\"),\n )) === ownerId;\n });\n } finally {\n await database.close();\n }\n\n if (!acquired) {\n return undefined;\n }\n\n const heartbeat = setInterval(() => {\n void heartbeatGcLock(scope, ownerId).catch(() => undefined);\n }, GC_HEARTBEAT_INTERVAL_MS);\n\n return async () => {\n clearInterval(heartbeat);\n const releaseDatabase = await openGcStateDatabase();\n\n try {\n await releaseDatabase.run(\n \"DELETE FROM gc_locks WHERE scope = ? AND owner_id = ?\",\n [scope, ownerId],\n );\n } finally {\n await releaseDatabase.close();\n }\n };\n}\n\nasync function heartbeatGcLock(scope: string, ownerId: string): Promise<void> {\n const database = await openGcStateDatabase();\n\n try {\n await database.run(\n `\nUPDATE gc_locks\nSET heartbeat_at = ?, owner_pid = ?\nWHERE scope = ? AND owner_id = ?\n`,\n [Date.now(), process.pid, scope, ownerId],\n );\n } finally {\n await database.close();\n }\n}\n\nasync function cleanupStaleGcLocks(database: Database): Promise<void> {\n const locks = await database.queryAll(\n \"SELECT * FROM gc_locks\",\n undefined,\n mapGcLockWithScope,\n );\n\n for (const { lock, scope } of locks.filter(({ lock }) =>\n isStaleGcLock(lock),\n )) {\n await database.run(\n `\nDELETE FROM gc_locks\nWHERE scope = ?\n AND owner_id = ?\n AND heartbeat_at = ?\n`,\n [scope, lock.ownerId, lock.heartbeatAt],\n );\n }\n}\n\nfunction isStaleGcLock(lock: GcLock): boolean {\n if (Date.now() - lock.heartbeatAt < GC_LOCK_STALE_TIMEOUT_MS) {\n return false;\n }\n\n return !isProcessAlive(lock.ownerPid);\n}\n\nasync function openGcStateDatabase(): Promise<Database> {\n return await openSharedStateDatabase(\n join(resolveWikiGraphStateRootPath(), \"gc.sqlite\"),\n GC_SCHEMA_SQL,\n );\n}\n\nfunction mapGcLock(row: SqlRow): GcLock {\n return {\n createdAt: getNumber(row, \"created_at\"),\n heartbeatAt: getNumber(row, \"heartbeat_at\"),\n ownerId: getString(row, \"owner_id\"),\n ownerPid: getNumber(row, \"owner_pid\"),\n };\n}\n\nfunction mapGcLockWithScope(row: SqlRow): {\n readonly lock: GcLock;\n readonly scope: string;\n} {\n return {\n lock: mapGcLock(row),\n scope: getString(row, \"scope\"),\n };\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n if (isNodeError(error) && error.code === \"ESRCH\") {\n return false;\n }\n\n return true;\n }\n}\n"],"mappings":"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","names":["lock"]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { resolveWikiGraphStateRootPath } from "../common/wiki-graph-temp.js";
|
|
4
|
+
import { runSearchCacheGc } from "../archive/query/index.js";
|
|
5
|
+
import { runBuildQueueGc } from "../facade/index.js";
|
|
6
|
+
import { runWikgCoordinatorGc } from "../wikg/index.js";
|
|
7
|
+
import { runWikipageCacheGc } from "../wikipage/index.js";
|
|
8
|
+
import { formatError } from "../utils/node-error.js";
|
|
9
|
+
import { tryAcquireGcLock } from "./lock.js";
|
|
10
|
+
import { runTempDirectoryGc } from "./tmp-gc.js";
|
|
11
|
+
const GC_JOBS = [
|
|
12
|
+
{
|
|
13
|
+
name: "wikg-coordinator",
|
|
14
|
+
run: runWikgCoordinatorGc
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "search-cache",
|
|
18
|
+
run: runSearchCacheGc
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "wikipage-cache",
|
|
22
|
+
run: runWikipageCacheGc
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: "build-queue",
|
|
26
|
+
run: runBuildQueueGc
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: "tmp",
|
|
30
|
+
run: runTempDirectoryGc
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
const OPPORTUNISTIC_GC_INTERVAL_MS = 10 * 60 * 1e3;
|
|
34
|
+
async function tryRunWikiGraphGc(options = {}) {
|
|
35
|
+
const startedAt = Date.now();
|
|
36
|
+
const stateDirectoryPath = resolveWikiGraphStateRootPath();
|
|
37
|
+
const release = await tryAcquireGcLock();
|
|
38
|
+
if (release === void 0) {
|
|
39
|
+
return {
|
|
40
|
+
finishedAt: Date.now(),
|
|
41
|
+
freedBytes: 0,
|
|
42
|
+
jobs: [],
|
|
43
|
+
removed: 0,
|
|
44
|
+
scanned: 0,
|
|
45
|
+
skipped: true,
|
|
46
|
+
startedAt
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
if (options.opportunistic === true && !await shouldRunOpportunisticGc(stateDirectoryPath, startedAt)) {
|
|
51
|
+
return {
|
|
52
|
+
finishedAt: Date.now(),
|
|
53
|
+
freedBytes: 0,
|
|
54
|
+
jobs: [],
|
|
55
|
+
removed: 0,
|
|
56
|
+
scanned: 0,
|
|
57
|
+
skipped: true,
|
|
58
|
+
startedAt
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const context = {
|
|
62
|
+
dryRun: options.dryRun === true,
|
|
63
|
+
force: options.force === true,
|
|
64
|
+
now: startedAt,
|
|
65
|
+
stateDirectoryPath
|
|
66
|
+
};
|
|
67
|
+
const jobs = [];
|
|
68
|
+
for (const job of GC_JOBS) {
|
|
69
|
+
jobs.push(await runJob(job, context));
|
|
70
|
+
}
|
|
71
|
+
const report = {
|
|
72
|
+
finishedAt: Date.now(),
|
|
73
|
+
freedBytes: sum(jobs, "freedBytes"),
|
|
74
|
+
jobs,
|
|
75
|
+
removed: sum(jobs, "removed"),
|
|
76
|
+
scanned: sum(jobs, "scanned"),
|
|
77
|
+
skipped: false,
|
|
78
|
+
startedAt
|
|
79
|
+
};
|
|
80
|
+
await writeLastGcRunAt(stateDirectoryPath, report.finishedAt).catch(
|
|
81
|
+
() => void 0
|
|
82
|
+
);
|
|
83
|
+
return report;
|
|
84
|
+
} finally {
|
|
85
|
+
await release();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function runJob(job, context) {
|
|
89
|
+
try {
|
|
90
|
+
return {
|
|
91
|
+
name: job.name,
|
|
92
|
+
...await job.run(context)
|
|
93
|
+
};
|
|
94
|
+
} catch (error) {
|
|
95
|
+
return {
|
|
96
|
+
error: formatError(error),
|
|
97
|
+
freedBytes: 0,
|
|
98
|
+
name: job.name,
|
|
99
|
+
removed: 0,
|
|
100
|
+
scanned: 0
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function sum(jobs, key) {
|
|
105
|
+
return jobs.reduce((total, job) => {
|
|
106
|
+
const value = job[key];
|
|
107
|
+
return total + (typeof value === "number" ? value : 0);
|
|
108
|
+
}, 0);
|
|
109
|
+
}
|
|
110
|
+
async function shouldRunOpportunisticGc(stateDirectoryPath, now) {
|
|
111
|
+
const lastRunAt = Number(
|
|
112
|
+
(await readFile(createLastGcRunPath(stateDirectoryPath), "utf8").catch(
|
|
113
|
+
() => ""
|
|
114
|
+
)).trim()
|
|
115
|
+
);
|
|
116
|
+
return !Number.isFinite(lastRunAt) || now - lastRunAt >= OPPORTUNISTIC_GC_INTERVAL_MS;
|
|
117
|
+
}
|
|
118
|
+
async function writeLastGcRunAt(stateDirectoryPath, at) {
|
|
119
|
+
await mkdir(stateDirectoryPath, { recursive: true });
|
|
120
|
+
await writeFile(createLastGcRunPath(stateDirectoryPath), `${at}
|
|
121
|
+
`, "utf8");
|
|
122
|
+
}
|
|
123
|
+
function createLastGcRunPath(stateDirectoryPath) {
|
|
124
|
+
return join(stateDirectoryPath, "gc.last-run");
|
|
125
|
+
}
|
|
126
|
+
export {
|
|
127
|
+
tryRunWikiGraphGc
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/gc/runner.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"fs/promises\";\nimport { join } from \"path\";\n\nimport { resolveWikiGraphStateRootPath } from \"../common/wiki-graph-temp.js\";\nimport { runSearchCacheGc } from \"../archive/query/index.js\";\nimport { runBuildQueueGc } from \"../facade/index.js\";\nimport { runWikgCoordinatorGc } from \"../wikg/index.js\";\nimport { runWikipageCacheGc } from \"../wikipage/index.js\";\nimport { formatError } from \"../utils/node-error.js\";\n\nimport { tryAcquireGcLock } from \"./lock.js\";\nimport { runTempDirectoryGc } from \"./tmp-gc.js\";\nimport type { GcContext, GcJob, GcJobReport, GcRunReport } from \"./types.js\";\n\ninterface NamedGcJob {\n readonly name: string;\n readonly run: GcJob;\n}\n\nconst GC_JOBS: readonly NamedGcJob[] = [\n {\n name: \"wikg-coordinator\",\n run: runWikgCoordinatorGc,\n },\n {\n name: \"search-cache\",\n run: runSearchCacheGc,\n },\n {\n name: \"wikipage-cache\",\n run: runWikipageCacheGc,\n },\n {\n name: \"build-queue\",\n run: runBuildQueueGc,\n },\n {\n name: \"tmp\",\n run: runTempDirectoryGc,\n },\n];\nconst OPPORTUNISTIC_GC_INTERVAL_MS = 10 * 60 * 1000;\n\nexport async function tryRunWikiGraphGc(\n options: {\n readonly dryRun?: boolean;\n readonly force?: boolean;\n readonly opportunistic?: boolean;\n } = {},\n): Promise<GcRunReport> {\n const startedAt = Date.now();\n const stateDirectoryPath = resolveWikiGraphStateRootPath();\n const release = await tryAcquireGcLock();\n\n if (release === undefined) {\n return {\n finishedAt: Date.now(),\n freedBytes: 0,\n jobs: [],\n removed: 0,\n scanned: 0,\n skipped: true,\n startedAt,\n };\n }\n\n try {\n if (\n options.opportunistic === true &&\n !(await shouldRunOpportunisticGc(stateDirectoryPath, startedAt))\n ) {\n return {\n finishedAt: Date.now(),\n freedBytes: 0,\n jobs: [],\n removed: 0,\n scanned: 0,\n skipped: true,\n startedAt,\n };\n }\n\n const context: GcContext = {\n dryRun: options.dryRun === true,\n force: options.force === true,\n now: startedAt,\n stateDirectoryPath,\n };\n const jobs: GcJobReport[] = [];\n\n for (const job of GC_JOBS) {\n jobs.push(await runJob(job, context));\n }\n\n const report = {\n finishedAt: Date.now(),\n freedBytes: sum(jobs, \"freedBytes\"),\n jobs,\n removed: sum(jobs, \"removed\"),\n scanned: sum(jobs, \"scanned\"),\n skipped: false,\n startedAt,\n };\n\n await writeLastGcRunAt(stateDirectoryPath, report.finishedAt).catch(\n () => undefined,\n );\n return report;\n } finally {\n await release();\n }\n}\n\nasync function runJob(\n job: NamedGcJob,\n context: GcContext,\n): Promise<GcJobReport> {\n try {\n return {\n name: job.name,\n ...(await job.run(context)),\n };\n } catch (error) {\n return {\n error: formatError(error),\n freedBytes: 0,\n name: job.name,\n removed: 0,\n scanned: 0,\n };\n }\n}\n\nfunction sum(jobs: readonly GcJobReport[], key: keyof GcJobReport): number {\n return jobs.reduce((total, job) => {\n const value = job[key];\n\n return total + (typeof value === \"number\" ? value : 0);\n }, 0);\n}\n\nasync function shouldRunOpportunisticGc(\n stateDirectoryPath: string,\n now: number,\n): Promise<boolean> {\n const lastRunAt = Number(\n (\n await readFile(createLastGcRunPath(stateDirectoryPath), \"utf8\").catch(\n () => \"\",\n )\n ).trim(),\n );\n\n return (\n !Number.isFinite(lastRunAt) ||\n now - lastRunAt >= OPPORTUNISTIC_GC_INTERVAL_MS\n );\n}\n\nasync function writeLastGcRunAt(\n stateDirectoryPath: string,\n at: number,\n): Promise<void> {\n await mkdir(stateDirectoryPath, { recursive: true });\n await writeFile(createLastGcRunPath(stateDirectoryPath), `${at}\\n`, \"utf8\");\n}\n\nfunction createLastGcRunPath(stateDirectoryPath: string): string {\n return join(stateDirectoryPath, \"gc.last-run\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { readdir, rm, stat } from "fs/promises";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { resolveWikiGraphTempDirectoryPath } from "../common/wiki-graph-temp.js";
|
|
4
|
+
import { isNodeError } from "../utils/node-error.js";
|
|
5
|
+
import { readPathSize } from "./files.js";
|
|
6
|
+
const TEMP_DIRECTORY_TTL_MS = 60 * 60 * 1e3;
|
|
7
|
+
async function runTempDirectoryGc(context) {
|
|
8
|
+
const rootPath = resolveWikiGraphTempDirectoryPath();
|
|
9
|
+
let scanned = 0;
|
|
10
|
+
let removed = 0;
|
|
11
|
+
let freedBytes = 0;
|
|
12
|
+
for (const path of await listTempEntryPaths(rootPath)) {
|
|
13
|
+
scanned += 1;
|
|
14
|
+
const stats = await stat(path).catch((error) => {
|
|
15
|
+
if (isNodeError(error) && error.code === "ENOENT") {
|
|
16
|
+
return void 0;
|
|
17
|
+
}
|
|
18
|
+
throw error;
|
|
19
|
+
});
|
|
20
|
+
if (stats === void 0 || !context.force && context.now - stats.mtimeMs < TEMP_DIRECTORY_TTL_MS) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const bytes = await readPathSize(path);
|
|
24
|
+
if (!context.dryRun) {
|
|
25
|
+
await rm(path, { force: true, recursive: true });
|
|
26
|
+
}
|
|
27
|
+
removed += 1;
|
|
28
|
+
freedBytes += bytes;
|
|
29
|
+
}
|
|
30
|
+
return { freedBytes, removed, scanned };
|
|
31
|
+
}
|
|
32
|
+
async function listTempEntryPaths(rootPath) {
|
|
33
|
+
try {
|
|
34
|
+
const categories = await readdir(rootPath, { withFileTypes: true });
|
|
35
|
+
const paths = [];
|
|
36
|
+
for (const category of categories) {
|
|
37
|
+
if (!category.isDirectory()) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const categoryPath = join(rootPath, category.name);
|
|
41
|
+
const entries = await readdir(categoryPath, { withFileTypes: true });
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
paths.push(join(categoryPath, entry.name));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return paths;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (isNodeError(error) && error.code === "ENOENT") {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
runTempDirectoryGc
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=tmp-gc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/gc/tmp-gc.ts"],"sourcesContent":["import { readdir, rm, stat } from \"fs/promises\";\nimport { join } from \"path\";\n\nimport { resolveWikiGraphTempDirectoryPath } from \"../common/wiki-graph-temp.js\";\nimport { isNodeError } from \"../utils/node-error.js\";\n\nimport { readPathSize } from \"./files.js\";\nimport type { GcContext, GcJobResult } from \"./types.js\";\n\nconst TEMP_DIRECTORY_TTL_MS = 60 * 60 * 1000;\n\nexport async function runTempDirectoryGc(\n context: GcContext,\n): Promise<GcJobResult> {\n const rootPath = resolveWikiGraphTempDirectoryPath();\n let scanned = 0;\n let removed = 0;\n let freedBytes = 0;\n\n for (const path of await listTempEntryPaths(rootPath)) {\n scanned += 1;\n const stats = await stat(path).catch((error: unknown) => {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return undefined;\n }\n\n throw error;\n });\n\n if (\n stats === undefined ||\n (!context.force && context.now - stats.mtimeMs < TEMP_DIRECTORY_TTL_MS)\n ) {\n continue;\n }\n\n const bytes = await readPathSize(path);\n\n if (!context.dryRun) {\n await rm(path, { force: true, recursive: true });\n }\n removed += 1;\n freedBytes += bytes;\n }\n\n return { freedBytes, removed, scanned };\n}\n\nasync function listTempEntryPaths(rootPath: string): Promise<string[]> {\n try {\n const categories = await readdir(rootPath, { withFileTypes: true });\n const paths: string[] = [];\n\n for (const category of categories) {\n if (!category.isDirectory()) {\n continue;\n }\n\n const categoryPath = join(rootPath, category.name);\n const entries = await readdir(categoryPath, { withFileTypes: true });\n\n for (const entry of entries) {\n paths.push(join(categoryPath, entry.name));\n }\n }\n\n return paths;\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return [];\n }\n\n throw error;\n }\n}\n"],"mappings":"AAAA,SAAS,SAAS,IAAI,YAAY;AAClC,SAAS,YAAY;AAErB,SAAS,yCAAyC;AAClD,SAAS,mBAAmB;AAE5B,SAAS,oBAAoB;AAG7B,MAAM,wBAAwB,KAAK,KAAK;AAExC,eAAsB,mBACpB,SACsB;AACtB,QAAM,WAAW,kCAAkC;AACnD,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI,aAAa;AAEjB,aAAW,QAAQ,MAAM,mBAAmB,QAAQ,GAAG;AACrD,eAAW;AACX,UAAM,QAAQ,MAAM,KAAK,IAAI,EAAE,MAAM,CAAC,UAAmB;AACvD,UAAI,YAAY,KAAK,KAAK,MAAM,SAAS,UAAU;AACjD,eAAO;AAAA,MACT;AAEA,YAAM;AAAA,IACR,CAAC;AAED,QACE,UAAU,UACT,CAAC,QAAQ,SAAS,QAAQ,MAAM,MAAM,UAAU,uBACjD;AACA;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,aAAa,IAAI;AAErC,QAAI,CAAC,QAAQ,QAAQ;AACnB,YAAM,GAAG,MAAM,EAAE,OAAO,MAAM,WAAW,KAAK,CAAC;AAAA,IACjD;AACA,eAAW;AACX,kBAAc;AAAA,EAChB;AAEA,SAAO,EAAE,YAAY,SAAS,QAAQ;AACxC;AAEA,eAAe,mBAAmB,UAAqC;AACrE,MAAI;AACF,UAAM,aAAa,MAAM,QAAQ,UAAU,EAAE,eAAe,KAAK,CAAC;AAClE,UAAM,QAAkB,CAAC;AAEzB,eAAW,YAAY,YAAY;AACjC,UAAI,CAAC,SAAS,YAAY,GAAG;AAC3B;AAAA,MACF;AAEA,YAAM,eAAe,KAAK,UAAU,SAAS,IAAI;AACjD,YAAM,UAAU,MAAM,QAAQ,cAAc,EAAE,eAAe,KAAK,CAAC;AAEnE,iBAAW,SAAS,SAAS;AAC3B,cAAM,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC;AAAA,MAC3C;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,YAAY,KAAK,KAAK,MAAM,SAAS,UAAU;AACjD,aAAO,CAAC;AAAA,IACV;AAEA,UAAM;AAAA,EACR;AACF;","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface GcContext {
|
|
2
|
+
readonly force: boolean;
|
|
3
|
+
readonly now: number;
|
|
4
|
+
readonly stateDirectoryPath: string;
|
|
5
|
+
readonly dryRun: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface GcJobResult {
|
|
8
|
+
readonly scanned: number;
|
|
9
|
+
readonly removed: number;
|
|
10
|
+
readonly freedBytes: number;
|
|
11
|
+
}
|
|
12
|
+
interface GcJobReport extends GcJobResult {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly error?: string;
|
|
15
|
+
}
|
|
16
|
+
interface GcRunReport extends GcJobResult {
|
|
17
|
+
readonly jobs: readonly GcJobReport[];
|
|
18
|
+
readonly skipped: boolean;
|
|
19
|
+
readonly startedAt: number;
|
|
20
|
+
readonly finishedAt: number;
|
|
21
|
+
}
|
|
22
|
+
type GcJob = (context: GcContext) => Promise<GcJobResult>;
|
|
23
|
+
|
|
24
|
+
export type { GcContext, GcJob, GcJobReport, GcJobResult, GcRunReport };
|
package/dist/gc/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|