@tenphi/akno-core 0.1.0
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 +83 -0
- package/README.md +26 -0
- package/config/default.jsonc +548 -0
- package/dist/bench/answer-corpus.d.ts +48 -0
- package/dist/bench/answer-corpus.d.ts.map +1 -0
- package/dist/bench/answer-corpus.js +491 -0
- package/dist/bench/answer-corpus.js.map +1 -0
- package/dist/bench/answer.d.ts +156 -0
- package/dist/bench/answer.d.ts.map +1 -0
- package/dist/bench/answer.js +608 -0
- package/dist/bench/answer.js.map +1 -0
- package/dist/bench/auto-recall-answer-corpus.d.ts +21 -0
- package/dist/bench/auto-recall-answer-corpus.d.ts.map +1 -0
- package/dist/bench/auto-recall-answer-corpus.js +245 -0
- package/dist/bench/auto-recall-answer-corpus.js.map +1 -0
- package/dist/bench/auto-recall-answer.d.ts +198 -0
- package/dist/bench/auto-recall-answer.d.ts.map +1 -0
- package/dist/bench/auto-recall-answer.js +720 -0
- package/dist/bench/auto-recall-answer.js.map +1 -0
- package/dist/bench/auto-recall-corpus.d.ts +45 -0
- package/dist/bench/auto-recall-corpus.d.ts.map +1 -0
- package/dist/bench/auto-recall-corpus.js +221 -0
- package/dist/bench/auto-recall-corpus.js.map +1 -0
- package/dist/bench/auto-recall.d.ts +171 -0
- package/dist/bench/auto-recall.d.ts.map +1 -0
- package/dist/bench/auto-recall.js +651 -0
- package/dist/bench/auto-recall.js.map +1 -0
- package/dist/bench/entity-resolution.d.ts +37 -0
- package/dist/bench/entity-resolution.d.ts.map +1 -0
- package/dist/bench/entity-resolution.js +121 -0
- package/dist/bench/entity-resolution.js.map +1 -0
- package/dist/bench/graph.d.ts +57 -0
- package/dist/bench/graph.d.ts.map +1 -0
- package/dist/bench/graph.js +573 -0
- package/dist/bench/graph.js.map +1 -0
- package/dist/bench/llm-ranking-probe.d.ts +27 -0
- package/dist/bench/llm-ranking-probe.d.ts.map +1 -0
- package/dist/bench/llm-ranking-probe.js +105 -0
- package/dist/bench/llm-ranking-probe.js.map +1 -0
- package/dist/bench/merge-discovery-corpus.d.ts +26 -0
- package/dist/bench/merge-discovery-corpus.d.ts.map +1 -0
- package/dist/bench/merge-discovery-corpus.js +114 -0
- package/dist/bench/merge-discovery-corpus.js.map +1 -0
- package/dist/bench/merge-discovery-review.d.ts +81 -0
- package/dist/bench/merge-discovery-review.d.ts.map +1 -0
- package/dist/bench/merge-discovery-review.js +149 -0
- package/dist/bench/merge-discovery-review.js.map +1 -0
- package/dist/bench/merge-discovery.d.ts +122 -0
- package/dist/bench/merge-discovery.d.ts.map +1 -0
- package/dist/bench/merge-discovery.js +390 -0
- package/dist/bench/merge-discovery.js.map +1 -0
- package/dist/bench/mixed-retrieval.d.ts +35 -0
- package/dist/bench/mixed-retrieval.d.ts.map +1 -0
- package/dist/bench/mixed-retrieval.js +355 -0
- package/dist/bench/mixed-retrieval.js.map +1 -0
- package/dist/bench/ranking-corpus.d.ts +29 -0
- package/dist/bench/ranking-corpus.d.ts.map +1 -0
- package/dist/bench/ranking-corpus.js +514 -0
- package/dist/bench/ranking-corpus.js.map +1 -0
- package/dist/bench/ranking-end-to-end.d.ts +112 -0
- package/dist/bench/ranking-end-to-end.d.ts.map +1 -0
- package/dist/bench/ranking-end-to-end.js +479 -0
- package/dist/bench/ranking-end-to-end.js.map +1 -0
- package/dist/bench/ranking-latency.d.ts +71 -0
- package/dist/bench/ranking-latency.d.ts.map +1 -0
- package/dist/bench/ranking-latency.js +130 -0
- package/dist/bench/ranking-latency.js.map +1 -0
- package/dist/bench/ranking-matrix.d.ts +141 -0
- package/dist/bench/ranking-matrix.d.ts.map +1 -0
- package/dist/bench/ranking-matrix.js +526 -0
- package/dist/bench/ranking-matrix.js.map +1 -0
- package/dist/bench/ranking-review.d.ts +93 -0
- package/dist/bench/ranking-review.d.ts.map +1 -0
- package/dist/bench/ranking-review.js +249 -0
- package/dist/bench/ranking-review.js.map +1 -0
- package/dist/bench/ranking.d.ts +122 -0
- package/dist/bench/ranking.d.ts.map +1 -0
- package/dist/bench/ranking.js +547 -0
- package/dist/bench/ranking.js.map +1 -0
- package/dist/bench.d.ts +60 -0
- package/dist/bench.d.ts.map +1 -0
- package/dist/bench.js +167 -0
- package/dist/bench.js.map +1 -0
- package/dist/config/jsonc.d.ts +8 -0
- package/dist/config/jsonc.d.ts.map +1 -0
- package/dist/config/jsonc.js +85 -0
- package/dist/config/jsonc.js.map +1 -0
- package/dist/config/load.d.ts +43 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +608 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/paths.d.ts +10 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +38 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +698 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +394 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/write-rules.d.ts +41 -0
- package/dist/config/write-rules.d.ts.map +1 -0
- package/dist/config/write-rules.js +225 -0
- package/dist/config/write-rules.js.map +1 -0
- package/dist/config/write-setup.d.ts +42 -0
- package/dist/config/write-setup.d.ts.map +1 -0
- package/dist/config/write-setup.js +358 -0
- package/dist/config/write-setup.js.map +1 -0
- package/dist/context.d.ts +64 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +14 -0
- package/dist/context.js.map +1 -0
- package/dist/doctor.d.ts +115 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +388 -0
- package/dist/doctor.js.map +1 -0
- package/dist/index/chunk.d.ts +62 -0
- package/dist/index/chunk.d.ts.map +1 -0
- package/dist/index/chunk.js +307 -0
- package/dist/index/chunk.js.map +1 -0
- package/dist/index/defer.d.ts +32 -0
- package/dist/index/defer.d.ts.map +1 -0
- package/dist/index/defer.js +66 -0
- package/dist/index/defer.js.map +1 -0
- package/dist/index/derive.d.ts +99 -0
- package/dist/index/derive.d.ts.map +1 -0
- package/dist/index/derive.js +378 -0
- package/dist/index/derive.js.map +1 -0
- package/dist/index/entity-resolution.d.ts +68 -0
- package/dist/index/entity-resolution.d.ts.map +1 -0
- package/dist/index/entity-resolution.js +305 -0
- package/dist/index/entity-resolution.js.map +1 -0
- package/dist/index/graph.d.ts +46 -0
- package/dist/index/graph.d.ts.map +1 -0
- package/dist/index/graph.js +618 -0
- package/dist/index/graph.js.map +1 -0
- package/dist/index/indexer.d.ts +301 -0
- package/dist/index/indexer.d.ts.map +1 -0
- package/dist/index/indexer.js +1398 -0
- package/dist/index/indexer.js.map +1 -0
- package/dist/index/revision-barrier.d.ts +30 -0
- package/dist/index/revision-barrier.d.ts.map +1 -0
- package/dist/index/revision-barrier.js +140 -0
- package/dist/index/revision-barrier.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/adoption-eligibility.d.ts +4 -0
- package/dist/ingest/adoption-eligibility.d.ts.map +1 -0
- package/dist/ingest/adoption-eligibility.js +18 -0
- package/dist/ingest/adoption-eligibility.js.map +1 -0
- package/dist/ingest/availability.d.ts +15 -0
- package/dist/ingest/availability.d.ts.map +1 -0
- package/dist/ingest/availability.js +37 -0
- package/dist/ingest/availability.js.map +1 -0
- package/dist/ingest/extract.d.ts +58 -0
- package/dist/ingest/extract.d.ts.map +1 -0
- package/dist/ingest/extract.js +255 -0
- package/dist/ingest/extract.js.map +1 -0
- package/dist/ingest/fetch.d.ts +35 -0
- package/dist/ingest/fetch.d.ts.map +1 -0
- package/dist/ingest/fetch.js +142 -0
- package/dist/ingest/fetch.js.map +1 -0
- package/dist/ingest/inbox.d.ts +53 -0
- package/dist/ingest/inbox.d.ts.map +1 -0
- package/dist/ingest/inbox.js +110 -0
- package/dist/ingest/inbox.js.map +1 -0
- package/dist/ingest/name.d.ts +72 -0
- package/dist/ingest/name.d.ts.map +1 -0
- package/dist/ingest/name.js +208 -0
- package/dist/ingest/name.js.map +1 -0
- package/dist/ingest/parts.d.ts +78 -0
- package/dist/ingest/parts.d.ts.map +1 -0
- package/dist/ingest/parts.js +52 -0
- package/dist/ingest/parts.js.map +1 -0
- package/dist/ingest/rendition.d.ts +75 -0
- package/dist/ingest/rendition.d.ts.map +1 -0
- package/dist/ingest/rendition.js +92 -0
- package/dist/ingest/rendition.js.map +1 -0
- package/dist/ingest/store.d.ts +66 -0
- package/dist/ingest/store.d.ts.map +1 -0
- package/dist/ingest/store.js +92 -0
- package/dist/ingest/store.js.map +1 -0
- package/dist/kb/folders.d.ts +37 -0
- package/dist/kb/folders.d.ts.map +1 -0
- package/dist/kb/folders.js +133 -0
- package/dist/kb/folders.js.map +1 -0
- package/dist/kb/frontmatter.d.ts +91 -0
- package/dist/kb/frontmatter.d.ts.map +1 -0
- package/dist/kb/frontmatter.js +274 -0
- package/dist/kb/frontmatter.js.map +1 -0
- package/dist/kb/line-facts.d.ts +29 -0
- package/dist/kb/line-facts.d.ts.map +1 -0
- package/dist/kb/line-facts.js +23 -0
- package/dist/kb/line-facts.js.map +1 -0
- package/dist/kb/page.d.ts +92 -0
- package/dist/kb/page.d.ts.map +1 -0
- package/dist/kb/page.js +243 -0
- package/dist/kb/page.js.map +1 -0
- package/dist/kb/scan.d.ts +38 -0
- package/dist/kb/scan.d.ts.map +1 -0
- package/dist/kb/scan.js +109 -0
- package/dist/kb/scan.js.map +1 -0
- package/dist/kb/words.d.ts +30 -0
- package/dist/kb/words.d.ts.map +1 -0
- package/dist/kb/words.js +107 -0
- package/dist/kb/words.js.map +1 -0
- package/dist/maintenance/adopt.d.ts +65 -0
- package/dist/maintenance/adopt.d.ts.map +1 -0
- package/dist/maintenance/adopt.js +238 -0
- package/dist/maintenance/adopt.js.map +1 -0
- package/dist/maintenance/budget.d.ts +55 -0
- package/dist/maintenance/budget.d.ts.map +1 -0
- package/dist/maintenance/budget.js +61 -0
- package/dist/maintenance/budget.js.map +1 -0
- package/dist/maintenance/conflicts.d.ts +105 -0
- package/dist/maintenance/conflicts.d.ts.map +1 -0
- package/dist/maintenance/conflicts.js +368 -0
- package/dist/maintenance/conflicts.js.map +1 -0
- package/dist/maintenance/contradictions.d.ts +34 -0
- package/dist/maintenance/contradictions.d.ts.map +1 -0
- package/dist/maintenance/contradictions.js +199 -0
- package/dist/maintenance/contradictions.js.map +1 -0
- package/dist/maintenance/curate.d.ts +156 -0
- package/dist/maintenance/curate.d.ts.map +1 -0
- package/dist/maintenance/curate.js +2070 -0
- package/dist/maintenance/curate.js.map +1 -0
- package/dist/maintenance/dream.d.ts +139 -0
- package/dist/maintenance/dream.d.ts.map +1 -0
- package/dist/maintenance/dream.js +1632 -0
- package/dist/maintenance/dream.js.map +1 -0
- package/dist/maintenance/graph-candidates.d.ts +19 -0
- package/dist/maintenance/graph-candidates.d.ts.map +1 -0
- package/dist/maintenance/graph-candidates.js +120 -0
- package/dist/maintenance/graph-candidates.js.map +1 -0
- package/dist/maintenance/housekeeping.d.ts +81 -0
- package/dist/maintenance/housekeeping.d.ts.map +1 -0
- package/dist/maintenance/housekeeping.js +281 -0
- package/dist/maintenance/housekeeping.js.map +1 -0
- package/dist/maintenance/link-repairs.d.ts +58 -0
- package/dist/maintenance/link-repairs.d.ts.map +1 -0
- package/dist/maintenance/link-repairs.js +281 -0
- package/dist/maintenance/link-repairs.js.map +1 -0
- package/dist/maintenance/log.d.ts +41 -0
- package/dist/maintenance/log.d.ts.map +1 -0
- package/dist/maintenance/log.js +72 -0
- package/dist/maintenance/log.js.map +1 -0
- package/dist/maintenance/managed-item-routing.d.ts +48 -0
- package/dist/maintenance/managed-item-routing.d.ts.map +1 -0
- package/dist/maintenance/managed-item-routing.js +281 -0
- package/dist/maintenance/managed-item-routing.js.map +1 -0
- package/dist/maintenance/managed-item-sources.d.ts +38 -0
- package/dist/maintenance/managed-item-sources.d.ts.map +1 -0
- package/dist/maintenance/managed-item-sources.js +324 -0
- package/dist/maintenance/managed-item-sources.js.map +1 -0
- package/dist/maintenance/managed-items.d.ts +162 -0
- package/dist/maintenance/managed-items.d.ts.map +1 -0
- package/dist/maintenance/managed-items.js +1329 -0
- package/dist/maintenance/managed-items.js.map +1 -0
- package/dist/maintenance/merge-classifier.d.ts +19 -0
- package/dist/maintenance/merge-classifier.d.ts.map +1 -0
- package/dist/maintenance/merge-classifier.js +49 -0
- package/dist/maintenance/merge-classifier.js.map +1 -0
- package/dist/maintenance/model-telemetry.d.ts +45 -0
- package/dist/maintenance/model-telemetry.d.ts.map +1 -0
- package/dist/maintenance/model-telemetry.js +107 -0
- package/dist/maintenance/model-telemetry.js.map +1 -0
- package/dist/maintenance/observe.d.ts +72 -0
- package/dist/maintenance/observe.d.ts.map +1 -0
- package/dist/maintenance/observe.js +265 -0
- package/dist/maintenance/observe.js.map +1 -0
- package/dist/maintenance/path-policy.d.ts +83 -0
- package/dist/maintenance/path-policy.d.ts.map +1 -0
- package/dist/maintenance/path-policy.js +360 -0
- package/dist/maintenance/path-policy.js.map +1 -0
- package/dist/maintenance/plans.d.ts +366 -0
- package/dist/maintenance/plans.d.ts.map +1 -0
- package/dist/maintenance/plans.js +4060 -0
- package/dist/maintenance/plans.js.map +1 -0
- package/dist/maintenance/profile.d.ts +33 -0
- package/dist/maintenance/profile.d.ts.map +1 -0
- package/dist/maintenance/profile.js +99 -0
- package/dist/maintenance/profile.js.map +1 -0
- package/dist/maintenance/recovery.d.ts +38 -0
- package/dist/maintenance/recovery.d.ts.map +1 -0
- package/dist/maintenance/recovery.js +217 -0
- package/dist/maintenance/recovery.js.map +1 -0
- package/dist/maintenance/repair.d.ts +37 -0
- package/dist/maintenance/repair.d.ts.map +1 -0
- package/dist/maintenance/repair.js +183 -0
- package/dist/maintenance/repair.js.map +1 -0
- package/dist/maintenance/rule-drift.d.ts +104 -0
- package/dist/maintenance/rule-drift.d.ts.map +1 -0
- package/dist/maintenance/rule-drift.js +507 -0
- package/dist/maintenance/rule-drift.js.map +1 -0
- package/dist/maintenance/run-verification.d.ts +44 -0
- package/dist/maintenance/run-verification.d.ts.map +1 -0
- package/dist/maintenance/run-verification.js +253 -0
- package/dist/maintenance/run-verification.js.map +1 -0
- package/dist/maintenance/runs.d.ts +142 -0
- package/dist/maintenance/runs.d.ts.map +1 -0
- package/dist/maintenance/runs.js +439 -0
- package/dist/maintenance/runs.js.map +1 -0
- package/dist/maintenance/semantic-merge-discovery.d.ts +54 -0
- package/dist/maintenance/semantic-merge-discovery.d.ts.map +1 -0
- package/dist/maintenance/semantic-merge-discovery.js +308 -0
- package/dist/maintenance/semantic-merge-discovery.js.map +1 -0
- package/dist/maintenance/temporal.d.ts +44 -0
- package/dist/maintenance/temporal.d.ts.map +1 -0
- package/dist/maintenance/temporal.js +295 -0
- package/dist/maintenance/temporal.js.map +1 -0
- package/dist/models/client.d.ts +214 -0
- package/dist/models/client.d.ts.map +1 -0
- package/dist/models/client.js +904 -0
- package/dist/models/client.js.map +1 -0
- package/dist/models/provider-api.d.ts +28 -0
- package/dist/models/provider-api.d.ts.map +1 -0
- package/dist/models/provider-api.js +320 -0
- package/dist/models/provider-api.js.map +1 -0
- package/dist/open.d.ts +163 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +382 -0
- package/dist/open.js.map +1 -0
- package/dist/ops/adopt.d.ts +12 -0
- package/dist/ops/adopt.d.ts.map +1 -0
- package/dist/ops/adopt.js +138 -0
- package/dist/ops/adopt.js.map +1 -0
- package/dist/ops/answer.d.ts +29 -0
- package/dist/ops/answer.d.ts.map +1 -0
- package/dist/ops/answer.js +557 -0
- package/dist/ops/answer.js.map +1 -0
- package/dist/ops/context.d.ts +18 -0
- package/dist/ops/context.d.ts.map +1 -0
- package/dist/ops/context.js +713 -0
- package/dist/ops/context.js.map +1 -0
- package/dist/ops/folder.d.ts +23 -0
- package/dist/ops/folder.d.ts.map +1 -0
- package/dist/ops/folder.js +130 -0
- package/dist/ops/folder.js.map +1 -0
- package/dist/ops/forget.d.ts +14 -0
- package/dist/ops/forget.d.ts.map +1 -0
- package/dist/ops/forget.js +212 -0
- package/dist/ops/forget.js.map +1 -0
- package/dist/ops/graph.d.ts +10 -0
- package/dist/ops/graph.d.ts.map +1 -0
- package/dist/ops/graph.js +480 -0
- package/dist/ops/graph.js.map +1 -0
- package/dist/ops/ingest.d.ts +40 -0
- package/dist/ops/ingest.d.ts.map +1 -0
- package/dist/ops/ingest.js +434 -0
- package/dist/ops/ingest.js.map +1 -0
- package/dist/ops/list.d.ts +9 -0
- package/dist/ops/list.d.ts.map +1 -0
- package/dist/ops/list.js +217 -0
- package/dist/ops/list.js.map +1 -0
- package/dist/ops/move.d.ts +20 -0
- package/dist/ops/move.d.ts.map +1 -0
- package/dist/ops/move.js +173 -0
- package/dist/ops/move.js.map +1 -0
- package/dist/ops/read.d.ts +9 -0
- package/dist/ops/read.d.ts.map +1 -0
- package/dist/ops/read.js +271 -0
- package/dist/ops/read.js.map +1 -0
- package/dist/ops/recall.d.ts +13 -0
- package/dist/ops/recall.d.ts.map +1 -0
- package/dist/ops/recall.js +297 -0
- package/dist/ops/recall.js.map +1 -0
- package/dist/ops/remember.d.ts +34 -0
- package/dist/ops/remember.d.ts.map +1 -0
- package/dist/ops/remember.js +660 -0
- package/dist/ops/remember.js.map +1 -0
- package/dist/ops/timeline.d.ts +11 -0
- package/dist/ops/timeline.d.ts.map +1 -0
- package/dist/ops/timeline.js +111 -0
- package/dist/ops/timeline.js.map +1 -0
- package/dist/ops/undo.d.ts +9 -0
- package/dist/ops/undo.d.ts.map +1 -0
- package/dist/ops/undo.js +38 -0
- package/dist/ops/undo.js.map +1 -0
- package/dist/ops/write.d.ts +55 -0
- package/dist/ops/write.d.ts.map +1 -0
- package/dist/ops/write.js +463 -0
- package/dist/ops/write.js.map +1 -0
- package/dist/recall/assemble.d.ts +81 -0
- package/dist/recall/assemble.d.ts.map +1 -0
- package/dist/recall/assemble.js +603 -0
- package/dist/recall/assemble.js.map +1 -0
- package/dist/recall/expand.d.ts +55 -0
- package/dist/recall/expand.d.ts.map +1 -0
- package/dist/recall/expand.js +282 -0
- package/dist/recall/expand.js.map +1 -0
- package/dist/recall/graph-arm.d.ts +17 -0
- package/dist/recall/graph-arm.d.ts.map +1 -0
- package/dist/recall/graph-arm.js +227 -0
- package/dist/recall/graph-arm.js.map +1 -0
- package/dist/recall/llm-rerank.d.ts +55 -0
- package/dist/recall/llm-rerank.d.ts.map +1 -0
- package/dist/recall/llm-rerank.js +213 -0
- package/dist/recall/llm-rerank.js.map +1 -0
- package/dist/recall/reranker-calibration.d.ts +23 -0
- package/dist/recall/reranker-calibration.d.ts.map +1 -0
- package/dist/recall/reranker-calibration.js +161 -0
- package/dist/recall/reranker-calibration.js.map +1 -0
- package/dist/recall/search.d.ts +107 -0
- package/dist/recall/search.d.ts.map +1 -0
- package/dist/recall/search.js +530 -0
- package/dist/recall/search.js.map +1 -0
- package/dist/reserved.d.ts +39 -0
- package/dist/reserved.d.ts.map +1 -0
- package/dist/reserved.js +63 -0
- package/dist/reserved.js.map +1 -0
- package/dist/rules/compile.d.ts +27 -0
- package/dist/rules/compile.d.ts.map +1 -0
- package/dist/rules/compile.js +105 -0
- package/dist/rules/compile.js.map +1 -0
- package/dist/setup/model-free.d.ts +15 -0
- package/dist/setup/model-free.d.ts.map +1 -0
- package/dist/setup/model-free.js +26 -0
- package/dist/setup/model-free.js.map +1 -0
- package/dist/setup/openai.d.ts +46 -0
- package/dist/setup/openai.d.ts.map +1 -0
- package/dist/setup/openai.js +165 -0
- package/dist/setup/openai.js.map +1 -0
- package/dist/store/db.d.ts +61 -0
- package/dist/store/db.d.ts.map +1 -0
- package/dist/store/db.js +265 -0
- package/dist/store/db.js.map +1 -0
- package/dist/store/ids.d.ts +29 -0
- package/dist/store/ids.d.ts.map +1 -0
- package/dist/store/ids.js +0 -0
- package/dist/store/ids.js.map +1 -0
- package/dist/store/migrations.d.ts +54 -0
- package/dist/store/migrations.d.ts.map +1 -0
- package/dist/store/migrations.js +923 -0
- package/dist/store/migrations.js.map +1 -0
- package/dist/store/vectors.d.ts +34 -0
- package/dist/store/vectors.d.ts.map +1 -0
- package/dist/store/vectors.js +158 -0
- package/dist/store/vectors.js.map +1 -0
- package/dist/timeline/documents.d.ts +23 -0
- package/dist/timeline/documents.d.ts.map +1 -0
- package/dist/timeline/documents.js +262 -0
- package/dist/timeline/documents.js.map +1 -0
- package/dist/watch/watcher.d.ts +43 -0
- package/dist/watch/watcher.d.ts.map +1 -0
- package/dist/watch/watcher.js +143 -0
- package/dist/watch/watcher.js.map +1 -0
- package/dist/write/atomic.d.ts +34 -0
- package/dist/write/atomic.d.ts.map +1 -0
- package/dist/write/atomic.js +58 -0
- package/dist/write/atomic.js.map +1 -0
- package/dist/write/conflict.d.ts +43 -0
- package/dist/write/conflict.d.ts.map +1 -0
- package/dist/write/conflict.js +149 -0
- package/dist/write/conflict.js.map +1 -0
- package/dist/write/edit.d.ts +59 -0
- package/dist/write/edit.d.ts.map +1 -0
- package/dist/write/edit.js +231 -0
- package/dist/write/edit.js.map +1 -0
- package/dist/write/gate.d.ts +59 -0
- package/dist/write/gate.d.ts.map +1 -0
- package/dist/write/gate.js +99 -0
- package/dist/write/gate.js.map +1 -0
- package/dist/write/journal.d.ts +90 -0
- package/dist/write/journal.d.ts.map +1 -0
- package/dist/write/journal.js +187 -0
- package/dist/write/journal.js.map +1 -0
- package/dist/write/ledger.d.ts +28 -0
- package/dist/write/ledger.d.ts.map +1 -0
- package/dist/write/ledger.js +141 -0
- package/dist/write/ledger.js.map +1 -0
- package/dist/write/placement.d.ts +29 -0
- package/dist/write/placement.d.ts.map +1 -0
- package/dist/write/placement.js +140 -0
- package/dist/write/placement.js.map +1 -0
- package/dist/write/remember-fallback.d.ts +18 -0
- package/dist/write/remember-fallback.d.ts.map +1 -0
- package/dist/write/remember-fallback.js +48 -0
- package/dist/write/remember-fallback.js.map +1 -0
- package/dist/write/retain.d.ts +61 -0
- package/dist/write/retain.d.ts.map +1 -0
- package/dist/write/retain.js +272 -0
- package/dist/write/retain.js.map +1 -0
- package/package.json +50 -0
- package/swift/extract.swift +232 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/store/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
2
|
+
interface VectorHit {
|
|
3
|
+
chunkId: number;
|
|
4
|
+
/** Cosine similarity in 0..1, already converted from distance. */
|
|
5
|
+
score: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* **Ship brute force, no ANN index.** Below ~20,000 chunks an approximate
|
|
9
|
+
* index is strictly worse — it costs build time, recall accuracy and a second
|
|
10
|
+
* structure to keep in sync, to save single-digit milliseconds nobody will
|
|
11
|
+
* notice. `vec0` without an ANN index *is* exact brute force with SIMD, which is
|
|
12
|
+
* precisely what we want, so the decision costs nothing to implement.
|
|
13
|
+
*/
|
|
14
|
+
export interface VectorIndex {
|
|
15
|
+
readonly kind: 'vec0' | 'fallback';
|
|
16
|
+
readonly dimensions: number;
|
|
17
|
+
upsert(chunkId: number, embedding: Float32Array): void;
|
|
18
|
+
remove(chunkId: number): void;
|
|
19
|
+
removeForPage(pageId: string): void;
|
|
20
|
+
/** `restrictTo` is the candidate pre-filter: score only the
|
|
21
|
+
* FTS candidate set instead of every vector. Empty/undefined scans all. */
|
|
22
|
+
search(query: Float32Array, k: number, restrictTo?: Set<number>): VectorHit[];
|
|
23
|
+
count(): number;
|
|
24
|
+
clear(): void;
|
|
25
|
+
}
|
|
26
|
+
export declare function openVectorIndex(db: Database, dimensions: number, vecLoaded: boolean): VectorIndex;
|
|
27
|
+
/**
|
|
28
|
+
* Dimensions are recorded so a model swap triggers a re-index instead of
|
|
29
|
+
* silently corrupting the index. Returns true when the caller must
|
|
30
|
+
* re-embed everything.
|
|
31
|
+
*/
|
|
32
|
+
export declare function reconcileDimensions(db: Database, dimensions: number, vecLoaded: boolean): boolean;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=vectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vectors.d.ts","sourceRoot":"","sources":["../../src/store/vectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;gFAC4E;IAC5E,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IAC9E,KAAK,IAAI,MAAM,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;CACf;AA0JD,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,WAAW,CAOjG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAgBjG"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { VECTOR_FALLBACK_DDL, vectorTableDdl } from "./migrations.js";
|
|
2
|
+
function encodeVector(embedding) {
|
|
3
|
+
return Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
|
|
4
|
+
}
|
|
5
|
+
function decodeVector(buffer) {
|
|
6
|
+
// Copy rather than alias: better-sqlite3 buffers are not guaranteed to outlive
|
|
7
|
+
// the statement, and a dangling view is a very confusing bug.
|
|
8
|
+
const copy = Buffer.from(buffer);
|
|
9
|
+
return new Float32Array(copy.buffer, copy.byteOffset, copy.byteLength / 4);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* `vec0` rejects a bound JS number for an INTEGER PRIMARY KEY — better-sqlite3
|
|
13
|
+
* sends it as a double. BigInt is required, which is easy to forget and produces
|
|
14
|
+
* an error message that does not point at the cause.
|
|
15
|
+
*/
|
|
16
|
+
function key(chunkId) {
|
|
17
|
+
return BigInt(chunkId);
|
|
18
|
+
}
|
|
19
|
+
class Vec0Index {
|
|
20
|
+
kind = 'vec0';
|
|
21
|
+
#db;
|
|
22
|
+
dimensions;
|
|
23
|
+
constructor(db, dimensions) {
|
|
24
|
+
this.#db = db;
|
|
25
|
+
this.dimensions = dimensions;
|
|
26
|
+
}
|
|
27
|
+
upsert(chunkId, embedding) {
|
|
28
|
+
this.#db.prepare('DELETE FROM vec_chunks WHERE chunk_id = ?').run(key(chunkId));
|
|
29
|
+
this.#db
|
|
30
|
+
.prepare('INSERT INTO vec_chunks(chunk_id, embedding) VALUES (?, ?)')
|
|
31
|
+
.run(key(chunkId), encodeVector(embedding));
|
|
32
|
+
}
|
|
33
|
+
remove(chunkId) {
|
|
34
|
+
this.#db.prepare('DELETE FROM vec_chunks WHERE chunk_id = ?').run(key(chunkId));
|
|
35
|
+
}
|
|
36
|
+
removeForPage(pageId) {
|
|
37
|
+
const ids = this.#db.prepare('SELECT id FROM chunks WHERE page_id = ?').all(pageId);
|
|
38
|
+
const stmt = this.#db.prepare('DELETE FROM vec_chunks WHERE chunk_id = ?');
|
|
39
|
+
for (const { id } of ids)
|
|
40
|
+
stmt.run(key(id));
|
|
41
|
+
}
|
|
42
|
+
search(query, k, restrictTo) {
|
|
43
|
+
if (restrictTo && restrictTo.size === 0)
|
|
44
|
+
return [];
|
|
45
|
+
const blob = encodeVector(query);
|
|
46
|
+
// vec0's KNN clause does not compose with an arbitrary WHERE, so a
|
|
47
|
+
// pre-filtered search scores the candidate set directly instead.
|
|
48
|
+
if (restrictTo) {
|
|
49
|
+
const placeholders = [...restrictTo].map(() => '?').join(',');
|
|
50
|
+
const rows = this.#db
|
|
51
|
+
.prepare(`SELECT chunk_id, vec_distance_cosine(embedding, ?) AS distance
|
|
52
|
+
FROM vec_chunks WHERE chunk_id IN (${placeholders})
|
|
53
|
+
ORDER BY distance LIMIT ?`)
|
|
54
|
+
.all(blob, ...[...restrictTo].map(key), k);
|
|
55
|
+
return rows.map((r) => ({ chunkId: Number(r.chunk_id), score: 1 - r.distance }));
|
|
56
|
+
}
|
|
57
|
+
const rows = this.#db
|
|
58
|
+
.prepare(`SELECT chunk_id, distance FROM vec_chunks
|
|
59
|
+
WHERE embedding MATCH ? AND k = ? ORDER BY distance`)
|
|
60
|
+
.all(blob, k);
|
|
61
|
+
return rows.map((r) => ({ chunkId: Number(r.chunk_id), score: 1 - r.distance }));
|
|
62
|
+
}
|
|
63
|
+
count() {
|
|
64
|
+
const row = this.#db.prepare('SELECT count(*) AS c FROM vec_chunks').get();
|
|
65
|
+
return row.c;
|
|
66
|
+
}
|
|
67
|
+
clear() {
|
|
68
|
+
this.#db.exec('DELETE FROM vec_chunks');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Pure-SQLite fallback with cosine in JS, for a platform sqlite-vec cannot load. */
|
|
72
|
+
class FallbackIndex {
|
|
73
|
+
kind = 'fallback';
|
|
74
|
+
#db;
|
|
75
|
+
dimensions;
|
|
76
|
+
constructor(db, dimensions) {
|
|
77
|
+
this.#db = db;
|
|
78
|
+
this.dimensions = dimensions;
|
|
79
|
+
this.#db.exec(VECTOR_FALLBACK_DDL);
|
|
80
|
+
}
|
|
81
|
+
upsert(chunkId, embedding) {
|
|
82
|
+
let sumSquares = 0;
|
|
83
|
+
for (const value of embedding)
|
|
84
|
+
sumSquares += value * value;
|
|
85
|
+
this.#db
|
|
86
|
+
.prepare(`INSERT INTO vec_fallback(chunk_id, embedding, norm) VALUES (?, ?, ?)
|
|
87
|
+
ON CONFLICT(chunk_id) DO UPDATE SET embedding = excluded.embedding, norm = excluded.norm`)
|
|
88
|
+
.run(chunkId, encodeVector(embedding), Math.sqrt(sumSquares) || 1);
|
|
89
|
+
}
|
|
90
|
+
remove(chunkId) {
|
|
91
|
+
this.#db.prepare('DELETE FROM vec_fallback WHERE chunk_id = ?').run(chunkId);
|
|
92
|
+
}
|
|
93
|
+
removeForPage(pageId) {
|
|
94
|
+
this.#db
|
|
95
|
+
.prepare('DELETE FROM vec_fallback WHERE chunk_id IN (SELECT id FROM chunks WHERE page_id = ?)')
|
|
96
|
+
.run(pageId);
|
|
97
|
+
}
|
|
98
|
+
search(query, k, restrictTo) {
|
|
99
|
+
if (restrictTo && restrictTo.size === 0)
|
|
100
|
+
return [];
|
|
101
|
+
let queryNorm = 0;
|
|
102
|
+
for (const value of query)
|
|
103
|
+
queryNorm += value * value;
|
|
104
|
+
queryNorm = Math.sqrt(queryNorm) || 1;
|
|
105
|
+
const rows = this.#db.prepare('SELECT chunk_id, embedding, norm FROM vec_fallback').all();
|
|
106
|
+
const hits = [];
|
|
107
|
+
for (const row of rows) {
|
|
108
|
+
if (restrictTo && !restrictTo.has(row.chunk_id))
|
|
109
|
+
continue;
|
|
110
|
+
const vector = decodeVector(row.embedding);
|
|
111
|
+
if (vector.length !== query.length)
|
|
112
|
+
continue;
|
|
113
|
+
let dot = 0;
|
|
114
|
+
for (let i = 0; i < query.length; i++)
|
|
115
|
+
dot += query[i] * vector[i];
|
|
116
|
+
hits.push({ chunkId: row.chunk_id, score: dot / (queryNorm * row.norm) });
|
|
117
|
+
}
|
|
118
|
+
hits.sort((a, b) => b.score - a.score);
|
|
119
|
+
return hits.slice(0, k);
|
|
120
|
+
}
|
|
121
|
+
count() {
|
|
122
|
+
const row = this.#db.prepare('SELECT count(*) AS c FROM vec_fallback').get();
|
|
123
|
+
return row.c;
|
|
124
|
+
}
|
|
125
|
+
clear() {
|
|
126
|
+
this.#db.exec('DELETE FROM vec_fallback');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export function openVectorIndex(db, dimensions, vecLoaded) {
|
|
130
|
+
if (!vecLoaded)
|
|
131
|
+
return new FallbackIndex(db, dimensions);
|
|
132
|
+
const exists = db
|
|
133
|
+
.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'vec_chunks'")
|
|
134
|
+
.get();
|
|
135
|
+
if (!exists)
|
|
136
|
+
db.exec(vectorTableDdl(dimensions));
|
|
137
|
+
return new Vec0Index(db, dimensions);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Dimensions are recorded so a model swap triggers a re-index instead of
|
|
141
|
+
* silently corrupting the index. Returns true when the caller must
|
|
142
|
+
* re-embed everything.
|
|
143
|
+
*/
|
|
144
|
+
export function reconcileDimensions(db, dimensions, vecLoaded) {
|
|
145
|
+
const row = db.prepare("SELECT value FROM meta WHERE key = 'embedding_dimensions'").get();
|
|
146
|
+
const recorded = row ? Number(row.value) : null;
|
|
147
|
+
if (recorded === dimensions)
|
|
148
|
+
return false;
|
|
149
|
+
if (recorded !== null) {
|
|
150
|
+
if (vecLoaded)
|
|
151
|
+
db.exec('DROP TABLE IF EXISTS vec_chunks');
|
|
152
|
+
db.exec('DROP TABLE IF EXISTS vec_fallback');
|
|
153
|
+
db.exec('UPDATE chunks SET embedded = 0');
|
|
154
|
+
}
|
|
155
|
+
db.prepare("INSERT INTO meta(key, value) VALUES('embedding_dimensions', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(String(dimensions));
|
|
156
|
+
return recorded !== null;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=vectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vectors.js","sourceRoot":"","sources":["../../src/store/vectors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA4BtE,SAAS,YAAY,CAAC,SAAuB;IAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,+EAA+E;IAC/E,8DAA8D;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,SAAS,GAAG,CAAC,OAAe;IAC1B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,SAAS;IACJ,IAAI,GAAG,MAAe,CAAC;IACvB,GAAG,CAAW;IACd,UAAU,CAAS;IAE5B,YAAY,EAAY,EAAE,UAAkB;QAC1C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,SAAuB;QAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,GAAG;aACL,OAAO,CAAC,2DAA2D,CAAC;aACpE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqB,CAAC;QACxG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC3E,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,KAAmB,EAAE,CAAS,EAAE,UAAwB;QAC7D,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAEjC,mEAAmE;QACnE,iEAAiE;QACjE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG;iBAClB,OAAO,CACN;kDACwC,YAAY;sCACxB,CAC7B;iBACA,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAA6C,CAAC;YACzF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG;aAClB,OAAO,CACN;8DACsD,CACvD;aACA,GAAG,CAAC,IAAI,EAAE,CAAC,CAA6C,CAAC;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAmB,CAAC;QAC5F,OAAO,GAAG,CAAC,CAAC,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,qFAAqF;AACrF,MAAM,aAAa;IACR,IAAI,GAAG,UAAmB,CAAC;IAC3B,GAAG,CAAW;IACd,UAAU,CAAS;IAE5B,YAAY,EAAY,EAAE,UAAkB;QAC1C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,SAAuB;QAC7C,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,SAAS;YAAE,UAAU,IAAI,KAAK,GAAG,KAAK,CAAC;QAC3D,IAAI,CAAC,GAAG;aACL,OAAO,CACN;oGAC4F,CAC7F;aACA,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/E,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,IAAI,CAAC,GAAG;aACL,OAAO,CAAC,sFAAsF,CAAC;aAC/F,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,KAAmB,EAAE,CAAS,EAAE,UAAwB;QAC7D,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACnD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,KAAK;YAAE,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC;QACtD,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,EAIpF,CAAC;QAEJ,MAAM,IAAI,GAAgB,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAAE,SAAS;YAC7C,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAE,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAmB,CAAC;QAC9F,OAAO,GAAG,CAAC,CAAC,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,EAAY,EAAE,UAAkB,EAAE,SAAkB;IAClF,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,aAAa,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,6EAA6E,CAAC;SACtF,GAAG,EAAE,CAAC;IACT,IAAI,CAAC,MAAM;QAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,OAAO,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAY,EAAE,UAAkB,EAAE,SAAkB;IACtF,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,EACxD,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhD,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAE1C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,SAAS;YAAE,EAAE,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC1D,EAAE,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC7C,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC5C,CAAC;IACD,EAAE,CAAC,OAAO,CACR,sHAAsH,CACvH,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1B,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DocumentTimelineEvidence } from '@tenphi/akno-protocol';
|
|
2
|
+
import type { AknoContext } from '../context.ts';
|
|
3
|
+
export interface DocumentTimelineOptions {
|
|
4
|
+
since?: string;
|
|
5
|
+
until?: string;
|
|
6
|
+
match?: string;
|
|
7
|
+
subject?: string;
|
|
8
|
+
}
|
|
9
|
+
interface ExtractedDate {
|
|
10
|
+
date: string;
|
|
11
|
+
raw: string;
|
|
12
|
+
start: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Assemble dated orphan evidence without giving it event semantics. Extracted dates
|
|
16
|
+
* win; filesystem metadata is a visibly labelled fallback when the document states no
|
|
17
|
+
* date itself.
|
|
18
|
+
*/
|
|
19
|
+
export declare function documentTimelineEvidence(ctx: AknoContext, options: DocumentTimelineOptions): DocumentTimelineEvidence[];
|
|
20
|
+
/** Conservative, locale-independent dates suitable for evidence rather than inference. */
|
|
21
|
+
export declare function extractDocumentDates(text: string): ExtractedDate[];
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/timeline/documents.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA0BD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,uBAAuB,GAC/B,wBAAwB,EAAE,CAoC5B;AA6ND,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAsBlE"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { canSuggestDocumentAdoption } from "../ingest/adoption-eligibility.js";
|
|
3
|
+
import { documentAvailability } from "../ingest/availability.js";
|
|
4
|
+
import { sha256 } from "../store/ids.js";
|
|
5
|
+
const MAX_EXTRACTED_DATES_PER_DOCUMENT = 32;
|
|
6
|
+
/**
|
|
7
|
+
* Assemble dated orphan evidence without giving it event semantics. Extracted dates
|
|
8
|
+
* win; filesystem metadata is a visibly labelled fallback when the document states no
|
|
9
|
+
* date itself.
|
|
10
|
+
*/
|
|
11
|
+
export function documentTimelineEvidence(ctx, options) {
|
|
12
|
+
const rows = ctx.store.db
|
|
13
|
+
.prepare(`SELECT id, rel_path, mime, label, text, page_count, group_key, part, ocr,
|
|
14
|
+
extract_via, confidence, availability, missing_since,
|
|
15
|
+
file_created_at, file_modified_at
|
|
16
|
+
FROM documents
|
|
17
|
+
WHERE page_id IS NULL AND renders IS NULL
|
|
18
|
+
ORDER BY group_key, part`)
|
|
19
|
+
.all();
|
|
20
|
+
const groups = new Map();
|
|
21
|
+
for (const row of rows) {
|
|
22
|
+
const key = row.group_key ?? row.rel_path;
|
|
23
|
+
const current = groups.get(key);
|
|
24
|
+
if (current)
|
|
25
|
+
current.push(row);
|
|
26
|
+
else
|
|
27
|
+
groups.set(key, [row]);
|
|
28
|
+
}
|
|
29
|
+
const out = [];
|
|
30
|
+
for (const [groupKey, parts] of groups) {
|
|
31
|
+
const first = parts[0];
|
|
32
|
+
if (!matchesSubject(parts, groupKey, options.subject))
|
|
33
|
+
continue;
|
|
34
|
+
const availability = documentAvailability(ctx.store.db, parts);
|
|
35
|
+
const chunks = chunksFor(ctx, parts);
|
|
36
|
+
const dated = extractedEvidence(ctx, first, parts, chunks, availability, options);
|
|
37
|
+
if (hasExtractedDocumentDate(parts, chunks)) {
|
|
38
|
+
out.push(...dated.slice(0, MAX_EXTRACTED_DATES_PER_DOCUMENT));
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const metadata = metadataEvidence(ctx, first, parts, chunks, availability, options);
|
|
42
|
+
if (metadata)
|
|
43
|
+
out.push(metadata);
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
function extractedEvidence(ctx, first, parts, chunks, availability, options) {
|
|
48
|
+
const seen = new Set();
|
|
49
|
+
const out = [];
|
|
50
|
+
for (const chunk of chunks) {
|
|
51
|
+
const part = parts.find((candidate) => candidate.id === chunk.document_id) ?? first;
|
|
52
|
+
// A vision description is model-generated evidence about the source, not text
|
|
53
|
+
// extracted from it. Dates in it must not acquire stronger provenance here.
|
|
54
|
+
if (part.extract_via === 'vision')
|
|
55
|
+
continue;
|
|
56
|
+
for (const found of extractDocumentDates(chunk.text)) {
|
|
57
|
+
if (seen.has(found.date) || !withinRange(found.date, options))
|
|
58
|
+
continue;
|
|
59
|
+
const quote = quoteAround(chunk.text, found.start, ctx.config.recall.sourceQuoteLines);
|
|
60
|
+
if (!matchesText(options.match, first, quote))
|
|
61
|
+
continue;
|
|
62
|
+
seen.add(found.date);
|
|
63
|
+
out.push({
|
|
64
|
+
type: 'document_evidence',
|
|
65
|
+
id: evidenceId(first.id, found.date, 'extracted', `${chunk.document_id}:${found.raw}`),
|
|
66
|
+
date: found.date,
|
|
67
|
+
date_basis: 'extracted',
|
|
68
|
+
document_id: first.id,
|
|
69
|
+
path: first.rel_path,
|
|
70
|
+
label: first.label ?? path.basename(first.rel_path),
|
|
71
|
+
mime: first.mime,
|
|
72
|
+
...(chunk.doc_page !== null ? { matched_page: chunk.doc_page } : {}),
|
|
73
|
+
quote,
|
|
74
|
+
text_source: textSource(part),
|
|
75
|
+
availability,
|
|
76
|
+
...suggestedAction(ctx, first, parts, availability.status),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
function hasExtractedDocumentDate(parts, chunks) {
|
|
83
|
+
return chunks.some((chunk) => {
|
|
84
|
+
const part = parts.find((candidate) => candidate.id === chunk.document_id);
|
|
85
|
+
return part?.extract_via !== 'vision' && extractDocumentDates(chunk.text).length > 0;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function metadataEvidence(ctx, first, parts, chunks, availability, options) {
|
|
89
|
+
const created = parts
|
|
90
|
+
.map((part) => part.file_created_at)
|
|
91
|
+
.filter((value) => value !== null)
|
|
92
|
+
.sort()[0];
|
|
93
|
+
const modified = parts
|
|
94
|
+
.map((part) => part.file_modified_at)
|
|
95
|
+
.filter((value) => value !== null)
|
|
96
|
+
.sort()
|
|
97
|
+
.at(-1);
|
|
98
|
+
const createdDate = timestampDate(created);
|
|
99
|
+
const modifiedDate = timestampDate(modified);
|
|
100
|
+
const useCreated = createdDate !== null && (modifiedDate === null || createdDate === modifiedDate);
|
|
101
|
+
const date = useCreated ? createdDate : (modifiedDate ?? createdDate);
|
|
102
|
+
if (!date || !withinRange(date, options))
|
|
103
|
+
return null;
|
|
104
|
+
const haystack = chunks.map((chunk) => chunk.text).join('\n');
|
|
105
|
+
if (!matchesText(options.match, first, haystack))
|
|
106
|
+
return null;
|
|
107
|
+
const basis = useCreated ? 'file_created' : 'file_modified';
|
|
108
|
+
return {
|
|
109
|
+
type: 'document_evidence',
|
|
110
|
+
id: evidenceId(first.id, date, basis, first.rel_path),
|
|
111
|
+
date,
|
|
112
|
+
date_basis: basis,
|
|
113
|
+
document_id: first.id,
|
|
114
|
+
path: first.rel_path,
|
|
115
|
+
label: first.label ?? path.basename(first.rel_path),
|
|
116
|
+
mime: first.mime,
|
|
117
|
+
availability,
|
|
118
|
+
...suggestedAction(ctx, first, parts, availability.status),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function chunksFor(ctx, parts) {
|
|
122
|
+
const ids = parts.map((part) => part.id);
|
|
123
|
+
if (ids.length === 0)
|
|
124
|
+
return [];
|
|
125
|
+
return ctx.store.db
|
|
126
|
+
.prepare(`SELECT c.document_id, c.text, c.doc_page
|
|
127
|
+
FROM chunks c JOIN documents d ON d.id = c.document_id
|
|
128
|
+
WHERE c.document_id IN (${ids.map(() => '?').join(',')}) AND c.text != ''
|
|
129
|
+
ORDER BY d.part, c.ord`)
|
|
130
|
+
.all(...ids);
|
|
131
|
+
}
|
|
132
|
+
function suggestedAction(ctx, first, parts, status) {
|
|
133
|
+
if (status !== 'available' ||
|
|
134
|
+
!parts.some((part) => part.text !== null) ||
|
|
135
|
+
!canSuggestDocumentAdoption(ctx.config, first.rel_path)) {
|
|
136
|
+
return {};
|
|
137
|
+
}
|
|
138
|
+
return { suggested_actions: [{ op: 'adopt', args: { documentId: first.id } }] };
|
|
139
|
+
}
|
|
140
|
+
function textSource(row) {
|
|
141
|
+
const via = row.extract_via === 'plain' ||
|
|
142
|
+
row.extract_via === 'textutil' ||
|
|
143
|
+
row.extract_via === 'text-layer' ||
|
|
144
|
+
row.extract_via === 'ocr' ||
|
|
145
|
+
row.extract_via === 'vision' ||
|
|
146
|
+
row.extract_via === 'none'
|
|
147
|
+
? row.extract_via
|
|
148
|
+
: row.ocr === 1
|
|
149
|
+
? 'ocr'
|
|
150
|
+
: row.text === null
|
|
151
|
+
? 'none'
|
|
152
|
+
: 'plain';
|
|
153
|
+
return {
|
|
154
|
+
kind: via === 'vision'
|
|
155
|
+
? 'model_description'
|
|
156
|
+
: via === 'ocr'
|
|
157
|
+
? 'ocr_text'
|
|
158
|
+
: via === 'none'
|
|
159
|
+
? 'none'
|
|
160
|
+
: 'original_text',
|
|
161
|
+
via,
|
|
162
|
+
confidence: row.confidence,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
function matchesSubject(parts, groupKey, subject) {
|
|
166
|
+
if (!subject)
|
|
167
|
+
return true;
|
|
168
|
+
const normalized = subject.replaceAll('\\', '/');
|
|
169
|
+
return (normalized === groupKey ||
|
|
170
|
+
parts.some((part) => part.id === normalized ||
|
|
171
|
+
part.rel_path === normalized ||
|
|
172
|
+
path.posix.basename(part.rel_path) === normalized));
|
|
173
|
+
}
|
|
174
|
+
function matchesText(match, first, evidence) {
|
|
175
|
+
if (!match)
|
|
176
|
+
return true;
|
|
177
|
+
const wanted = match.toLowerCase();
|
|
178
|
+
return [first.rel_path, first.label ?? '', evidence].some((value) => value.toLowerCase().includes(wanted));
|
|
179
|
+
}
|
|
180
|
+
function withinRange(date, options) {
|
|
181
|
+
return (!options.since || date >= options.since) && (!options.until || date <= options.until);
|
|
182
|
+
}
|
|
183
|
+
function timestampDate(value) {
|
|
184
|
+
if (!value)
|
|
185
|
+
return null;
|
|
186
|
+
const candidate = value.slice(0, 10);
|
|
187
|
+
return /^\d{4}-\d{2}-\d{2}$/.test(candidate) && validDate(candidate) ? candidate : null;
|
|
188
|
+
}
|
|
189
|
+
function evidenceId(documentId, date, basis, address) {
|
|
190
|
+
return `dev_${sha256(`${documentId}\0${date}\0${basis}\0${address}`).slice(0, 12)}`;
|
|
191
|
+
}
|
|
192
|
+
function quoteAround(text, offset, maxLines) {
|
|
193
|
+
const lines = text.split('\n');
|
|
194
|
+
const line = text.slice(0, offset).split('\n').length - 1;
|
|
195
|
+
const before = Math.floor((Math.max(1, maxLines) - 1) / 2);
|
|
196
|
+
const from = Math.max(0, line - before);
|
|
197
|
+
return lines
|
|
198
|
+
.slice(from, from + Math.max(1, maxLines))
|
|
199
|
+
.filter((value) => value.trim().length > 0)
|
|
200
|
+
.join('\n');
|
|
201
|
+
}
|
|
202
|
+
const MONTHS = {
|
|
203
|
+
january: 1,
|
|
204
|
+
jan: 1,
|
|
205
|
+
february: 2,
|
|
206
|
+
feb: 2,
|
|
207
|
+
march: 3,
|
|
208
|
+
mar: 3,
|
|
209
|
+
april: 4,
|
|
210
|
+
apr: 4,
|
|
211
|
+
may: 5,
|
|
212
|
+
june: 6,
|
|
213
|
+
jun: 6,
|
|
214
|
+
july: 7,
|
|
215
|
+
jul: 7,
|
|
216
|
+
august: 8,
|
|
217
|
+
aug: 8,
|
|
218
|
+
september: 9,
|
|
219
|
+
sep: 9,
|
|
220
|
+
sept: 9,
|
|
221
|
+
october: 10,
|
|
222
|
+
oct: 10,
|
|
223
|
+
november: 11,
|
|
224
|
+
nov: 11,
|
|
225
|
+
december: 12,
|
|
226
|
+
dec: 12,
|
|
227
|
+
};
|
|
228
|
+
const MONTH_PATTERN = Object.keys(MONTHS)
|
|
229
|
+
.sort((a, b) => b.length - a.length)
|
|
230
|
+
.join('|');
|
|
231
|
+
/** Conservative, locale-independent dates suitable for evidence rather than inference. */
|
|
232
|
+
export function extractDocumentDates(text) {
|
|
233
|
+
const found = [];
|
|
234
|
+
for (const match of text.matchAll(/\b((?:19|20)\d{2})-(\d{2})-(\d{2})\b/g)) {
|
|
235
|
+
const date = normalizedDate(Number(match[1]), Number(match[2]), Number(match[3]));
|
|
236
|
+
if (date)
|
|
237
|
+
found.push({ date, raw: match[0], start: match.index });
|
|
238
|
+
}
|
|
239
|
+
const dayFirst = new RegExp(`\\b(\\d{1,2})\\s+(${MONTH_PATTERN})\\s+((?:19|20)\\d{2})\\b`, 'gi');
|
|
240
|
+
for (const match of text.matchAll(dayFirst)) {
|
|
241
|
+
const date = normalizedDate(Number(match[3]), MONTHS[match[2].toLowerCase()], Number(match[1]));
|
|
242
|
+
if (date)
|
|
243
|
+
found.push({ date, raw: match[0], start: match.index });
|
|
244
|
+
}
|
|
245
|
+
const monthFirst = new RegExp(`\\b(${MONTH_PATTERN})\\s+(\\d{1,2})(?:st|nd|rd|th)?,?\\s+((?:19|20)\\d{2})\\b`, 'gi');
|
|
246
|
+
for (const match of text.matchAll(monthFirst)) {
|
|
247
|
+
const date = normalizedDate(Number(match[3]), MONTHS[match[1].toLowerCase()], Number(match[2]));
|
|
248
|
+
if (date)
|
|
249
|
+
found.push({ date, raw: match[0], start: match.index });
|
|
250
|
+
}
|
|
251
|
+
return found.sort((a, b) => a.start - b.start);
|
|
252
|
+
}
|
|
253
|
+
function normalizedDate(year, month, day) {
|
|
254
|
+
const date = `${String(year).padStart(4, '0')}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
|
|
255
|
+
return validDate(date) ? date : null;
|
|
256
|
+
}
|
|
257
|
+
function validDate(value) {
|
|
258
|
+
const [year, month, day] = value.split('-').map(Number);
|
|
259
|
+
const date = new Date(Date.UTC(year, month - 1, day));
|
|
260
|
+
return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/timeline/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { AknoConfig } from '../config/schema.ts';
|
|
2
|
+
import type { Indexer, IndexReport } from '../index/indexer.ts';
|
|
3
|
+
export interface WatcherEvents {
|
|
4
|
+
onIndexed?: (report: IndexReport, changed: string[]) => void;
|
|
5
|
+
/**
|
|
6
|
+
* Files that appeared or changed, after they have been indexed. The inbox hangs off this: a dropped file has to be *acted on*, not merely noticed.
|
|
7
|
+
*/
|
|
8
|
+
onArrival?: (changed: string[]) => Promise<void>;
|
|
9
|
+
onError?: (error: Error) => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* **FSEvents, not polling.** Node's recursive `fs.watch` uses FSEvents on
|
|
13
|
+
* macOS: native, cheap, and it reports renames as renames.
|
|
14
|
+
*
|
|
15
|
+
* But FSEvents coalesces under load and can drop events after a sleep/wake or a
|
|
16
|
+
* large sync, so a **periodic hash sweep is the backstop.** Watching alone is not
|
|
17
|
+
* a correctness guarantee; hashing is. At ~10ms for a typical knowledge base the
|
|
18
|
+
* sweep can run every few minutes and cost nothing.
|
|
19
|
+
*/
|
|
20
|
+
export declare class Watcher {
|
|
21
|
+
#private;
|
|
22
|
+
private watcher;
|
|
23
|
+
private sweepTimer;
|
|
24
|
+
private verifyTimer;
|
|
25
|
+
private debounceTimer;
|
|
26
|
+
private pending;
|
|
27
|
+
private running;
|
|
28
|
+
/** Set when a change arrived mid-index; guarantees one more pass after it. */
|
|
29
|
+
private dirty;
|
|
30
|
+
constructor(config: AknoConfig, indexer: Indexer, events?: WatcherEvents);
|
|
31
|
+
start(): void;
|
|
32
|
+
/**
|
|
33
|
+
* The service reconciles on wake — the gap where a laptop was closed is
|
|
34
|
+
* exactly when the folder gets edited on another device. A host that knows about
|
|
35
|
+
* sleep/wake calls this; the periodic sweep covers the case where nothing does.
|
|
36
|
+
*/
|
|
37
|
+
reconcileNow(): Promise<void>;
|
|
38
|
+
stop(): Promise<void>;
|
|
39
|
+
private shouldIgnore;
|
|
40
|
+
private schedule;
|
|
41
|
+
private flush;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/watch/watcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7D;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,qBAAa,OAAO;;IAClB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,8EAA8E;IAC9E,OAAO,CAAC,KAAK,CAAS;gBAMV,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB;IAM5E,KAAK,IAAI,IAAI;IA8Cb;;;;OAIG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,QAAQ;YAMF,KAAK;CAgCpB"}
|