@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,238 @@
|
|
|
1
|
+
import fsp from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { effectiveRule } from "../rules/compile.js";
|
|
4
|
+
import { cleanSlug } from "../ingest/name.js";
|
|
5
|
+
import { provenanceLines } from "../ingest/store.js";
|
|
6
|
+
import { sha256 } from "../store/ids.js";
|
|
7
|
+
/**
|
|
8
|
+
* Seal exact page creations without touching the knowledge base.
|
|
9
|
+
*
|
|
10
|
+
* The document hashes become item inputs and the run-start manifest is retained as plan evidence.
|
|
11
|
+
* Apply rechecks both the source files and their orphaned index rows, so a page is never created
|
|
12
|
+
* from a stale summary or for a document somebody filed while the plan was waiting.
|
|
13
|
+
*/
|
|
14
|
+
export async function planOrphanAdoptions(ctx, options) {
|
|
15
|
+
const adopted = [];
|
|
16
|
+
const drafts = [];
|
|
17
|
+
for (const group of orphanGroups(ctx, options.documentId)) {
|
|
18
|
+
if (drafts.length >= options.limit)
|
|
19
|
+
break;
|
|
20
|
+
const first = group.parts[0];
|
|
21
|
+
const directory = path.posix.dirname(first.relPath.replaceAll('\\', '/'));
|
|
22
|
+
const stem = cleanSlug(path.posix.basename(first.relPath));
|
|
23
|
+
if (!stem) {
|
|
24
|
+
adopted.push({
|
|
25
|
+
slug: first.relPath,
|
|
26
|
+
files: group.parts.map((part) => part.relPath),
|
|
27
|
+
action: 'skipped',
|
|
28
|
+
reason: 'no usable page name could be made from the filename',
|
|
29
|
+
});
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const slug = directory === '.' ? stem : `${directory}/${stem}`;
|
|
33
|
+
// The rule governs the *page's* location, which is where it would live.
|
|
34
|
+
const rule = effectiveRule(slug, ctx.config.rules);
|
|
35
|
+
if (rule.ingest === 'file' || rule.ingest === 'ignore') {
|
|
36
|
+
adopted.push({
|
|
37
|
+
slug,
|
|
38
|
+
files: group.parts.map((part) => part.relPath),
|
|
39
|
+
action: 'skipped',
|
|
40
|
+
reason: `the rule for this folder says ingest: ${rule.ingest}`,
|
|
41
|
+
});
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const relPath = `${slug}.md`;
|
|
45
|
+
const absPath = path.join(ctx.config.aknoPath, relPath);
|
|
46
|
+
const taken = (await fsp.stat(absPath).catch(() => null)) !== null ||
|
|
47
|
+
ctx.store.db.prepare('SELECT 1 FROM pages WHERE slug = ?').get(slug) !== undefined;
|
|
48
|
+
const documents = group.parts.map((part) => ({
|
|
49
|
+
id: part.id,
|
|
50
|
+
relPath: part.relPath,
|
|
51
|
+
sha256: part.sha256,
|
|
52
|
+
metadataHash: sha256(JSON.stringify([part.summary, part.ocr, part.pageCount, part.extractVia, part.confidence])),
|
|
53
|
+
groupKey: group.groupKey,
|
|
54
|
+
}));
|
|
55
|
+
const inputHash = sha256(JSON.stringify({
|
|
56
|
+
documents: documents.map((document) => [
|
|
57
|
+
document.id,
|
|
58
|
+
document.relPath,
|
|
59
|
+
document.sha256,
|
|
60
|
+
document.metadataHash,
|
|
61
|
+
document.groupKey,
|
|
62
|
+
]),
|
|
63
|
+
}));
|
|
64
|
+
const draft = {
|
|
65
|
+
slug,
|
|
66
|
+
relPath,
|
|
67
|
+
inputHash,
|
|
68
|
+
after: composeDocumentPage(group),
|
|
69
|
+
...(taken
|
|
70
|
+
? {
|
|
71
|
+
blockedReason: 'a page already exists at that path — add the document embed to it or move that page before retrying',
|
|
72
|
+
}
|
|
73
|
+
: {}),
|
|
74
|
+
documents,
|
|
75
|
+
};
|
|
76
|
+
if (taken) {
|
|
77
|
+
// Sealing the collision makes it visible and resolvable without inventing a suffixed near-duplicate.
|
|
78
|
+
// The source remains orphaned and recallable; removing the collision lets this exact item be approved.
|
|
79
|
+
adopted.push({
|
|
80
|
+
slug,
|
|
81
|
+
files: group.parts.map((part) => part.relPath),
|
|
82
|
+
action: 'blocked',
|
|
83
|
+
reason: draft.blockedReason,
|
|
84
|
+
});
|
|
85
|
+
drafts.push(draft);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const rejectedBy = matchingRejectedItem(ctx, draft);
|
|
89
|
+
adopted.push({
|
|
90
|
+
slug,
|
|
91
|
+
files: group.parts.map((part) => part.relPath),
|
|
92
|
+
action: rejectedBy ? 'rejected' : 'planned',
|
|
93
|
+
...(rejectedBy ? { reason: `the unchanged filing page was previously rejected as ${rejectedBy}` } : {}),
|
|
94
|
+
});
|
|
95
|
+
if (!rejectedBy)
|
|
96
|
+
drafts.push(draft);
|
|
97
|
+
}
|
|
98
|
+
return { adopted, drafts };
|
|
99
|
+
}
|
|
100
|
+
/** A rejected exact item is a durable decision; do not ask again until its inputs change. */
|
|
101
|
+
function matchingRejectedItem(ctx, draft) {
|
|
102
|
+
const available = ctx.store.db
|
|
103
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'maintenance_items'")
|
|
104
|
+
.get();
|
|
105
|
+
if (!available)
|
|
106
|
+
return null;
|
|
107
|
+
const rows = ctx.store.db
|
|
108
|
+
.prepare(`SELECT id, operations FROM maintenance_items
|
|
109
|
+
WHERE kind = 'adopt' AND status = 'rejected' AND subject = ? AND input_hash = ?
|
|
110
|
+
ORDER BY rowid DESC`)
|
|
111
|
+
.all(draft.slug, draft.inputHash);
|
|
112
|
+
const afterHash = sha256(draft.after);
|
|
113
|
+
for (const row of rows) {
|
|
114
|
+
try {
|
|
115
|
+
const operations = JSON.parse(row.operations);
|
|
116
|
+
if (Array.isArray(operations) &&
|
|
117
|
+
operations.length === 1 &&
|
|
118
|
+
typeof operations[0] === 'object' &&
|
|
119
|
+
operations[0] !== null &&
|
|
120
|
+
'type' in operations[0] &&
|
|
121
|
+
operations[0].type === 'create' &&
|
|
122
|
+
'relPath' in operations[0] &&
|
|
123
|
+
operations[0].relPath === draft.relPath &&
|
|
124
|
+
'afterHash' in operations[0] &&
|
|
125
|
+
operations[0].afterHash === afterHash) {
|
|
126
|
+
return row.id;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// A malformed old private payload is not evidence of a rejection.
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Unowned documents with text, grouped so parts of one document get one page — the whole point
|
|
137
|
+
* of grouping parts at all, and the difference between one passport page and thirteen.
|
|
138
|
+
*
|
|
139
|
+
* Documents with no readable text are left out: a page whose body is a filename helps nobody,
|
|
140
|
+
* and `doctor` already reports them as unreadable.
|
|
141
|
+
*/
|
|
142
|
+
function orphanGroups(ctx, documentId) {
|
|
143
|
+
const selected = documentId
|
|
144
|
+
? ctx.store.db
|
|
145
|
+
.prepare('SELECT COALESCE(group_key, rel_path) AS group_key FROM documents WHERE id = ?')
|
|
146
|
+
.get(documentId)
|
|
147
|
+
: undefined;
|
|
148
|
+
if (documentId && !selected)
|
|
149
|
+
return [];
|
|
150
|
+
const rows = (selected
|
|
151
|
+
? ctx.store.db
|
|
152
|
+
.prepare(`SELECT id, rel_path, sha256, group_key, summary, ocr, page_count, extract_via, confidence
|
|
153
|
+
FROM documents
|
|
154
|
+
WHERE page_id IS NULL AND text IS NOT NULL AND availability = 'available'
|
|
155
|
+
AND NOT EXISTS (
|
|
156
|
+
SELECT 1 FROM documents peer
|
|
157
|
+
WHERE peer.renders IS NULL
|
|
158
|
+
AND COALESCE(peer.group_key, peer.rel_path) = COALESCE(documents.group_key, documents.rel_path)
|
|
159
|
+
AND peer.availability = 'missing'
|
|
160
|
+
)
|
|
161
|
+
AND COALESCE(group_key, rel_path) = ?
|
|
162
|
+
ORDER BY group_key, part`)
|
|
163
|
+
.all(selected.group_key)
|
|
164
|
+
: ctx.store.db
|
|
165
|
+
.prepare(`SELECT id, rel_path, sha256, group_key, summary, ocr, page_count, extract_via, confidence
|
|
166
|
+
FROM documents
|
|
167
|
+
WHERE page_id IS NULL AND text IS NOT NULL AND availability = 'available'
|
|
168
|
+
AND NOT EXISTS (
|
|
169
|
+
SELECT 1 FROM documents peer
|
|
170
|
+
WHERE peer.renders IS NULL
|
|
171
|
+
AND COALESCE(peer.group_key, peer.rel_path) = COALESCE(documents.group_key, documents.rel_path)
|
|
172
|
+
AND peer.availability = 'missing'
|
|
173
|
+
)
|
|
174
|
+
ORDER BY group_key, part`)
|
|
175
|
+
.all());
|
|
176
|
+
const groups = new Map();
|
|
177
|
+
for (const row of rows) {
|
|
178
|
+
const key = row.group_key ?? row.rel_path;
|
|
179
|
+
const part = {
|
|
180
|
+
id: row.id,
|
|
181
|
+
relPath: row.rel_path,
|
|
182
|
+
sha256: row.sha256,
|
|
183
|
+
summary: row.summary,
|
|
184
|
+
ocr: row.ocr,
|
|
185
|
+
pageCount: row.page_count,
|
|
186
|
+
extractVia: row.extract_via,
|
|
187
|
+
confidence: row.confidence,
|
|
188
|
+
};
|
|
189
|
+
const existing = groups.get(key);
|
|
190
|
+
if (existing)
|
|
191
|
+
existing.parts.push(part);
|
|
192
|
+
else
|
|
193
|
+
groups.set(key, { groupKey: key, parts: [part] });
|
|
194
|
+
}
|
|
195
|
+
return [...groups.values()];
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* The same shape `ingest` writes: what the document is, then a pointer to it. Nothing is
|
|
199
|
+
* inferred here that the document does not say about itself, and the file's own text stays
|
|
200
|
+
* indexed against the document rather than copied into the page.
|
|
201
|
+
*/
|
|
202
|
+
function composeDocumentPage(group) {
|
|
203
|
+
const first = group.parts[0];
|
|
204
|
+
const title = titleFrom(first.relPath);
|
|
205
|
+
const summary = group.parts.find((part) => part.summary)?.summary;
|
|
206
|
+
const embeds = group.parts
|
|
207
|
+
.map((part) => {
|
|
208
|
+
// `via` is read, never reconstructed from the `ocr` flag. The flag cannot express the
|
|
209
|
+
// one case this line exists for: an image a model *described* rather than read, which
|
|
210
|
+
// would otherwise be adopted into a page claiming OCR had found the words.
|
|
211
|
+
const provenance = provenanceLines({
|
|
212
|
+
text: '',
|
|
213
|
+
pageCount: part.pageCount,
|
|
214
|
+
ocr: part.ocr === 1,
|
|
215
|
+
confidence: part.confidence,
|
|
216
|
+
via: part.extractVia ?? 'none',
|
|
217
|
+
note: null,
|
|
218
|
+
});
|
|
219
|
+
const name = path.posix.basename(part.relPath.replaceAll('\\', '/'));
|
|
220
|
+
return provenance.length > 0 ? `![[${name}]]\n\n${provenance.join('\n')}` : `![[${name}]]`;
|
|
221
|
+
})
|
|
222
|
+
.join('\n\n');
|
|
223
|
+
return (`---\ntitle: ${title}\n---\n\n` +
|
|
224
|
+
`# ${title}\n\n` +
|
|
225
|
+
(summary ? `${summary}\n\n` : `A document stored here. Its text is indexed and searchable.\n\n`) +
|
|
226
|
+
`${embeds}\n`);
|
|
227
|
+
}
|
|
228
|
+
/** `Rental Agreement Aug 5 2031.pdf` → `Rental Agreement Aug 5 2031`, tidied but not invented. */
|
|
229
|
+
function titleFrom(relPath) {
|
|
230
|
+
const base = path.posix
|
|
231
|
+
.basename(relPath.replaceAll('\\', '/'))
|
|
232
|
+
.replace(/\.[A-Za-z0-9]{1,8}$/, '')
|
|
233
|
+
.replace(/[_-]+/g, ' ')
|
|
234
|
+
.replace(/\s+/g, ' ')
|
|
235
|
+
.trim();
|
|
236
|
+
return base.charAt(0).toUpperCase() + base.slice(1);
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=adopt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adopt.js","sourceRoot":"","sources":["../../src/maintenance/adopt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { MaintenanceLimits } from '../config/schema.ts';
|
|
2
|
+
export type MaintenanceBudgetDimension = 'max_items' | 'max_files_changed' | 'max_bytes_written' | 'max_high_risk_items';
|
|
3
|
+
export interface MaintenanceBudgetUsage {
|
|
4
|
+
items: number;
|
|
5
|
+
filesChanged: number;
|
|
6
|
+
bytesWritten: number;
|
|
7
|
+
highRiskItems: number;
|
|
8
|
+
}
|
|
9
|
+
export interface MaintenanceBudgetReceipt {
|
|
10
|
+
limits: MaintenanceLimits;
|
|
11
|
+
used: MaintenanceBudgetUsage;
|
|
12
|
+
deferredItems: number;
|
|
13
|
+
}
|
|
14
|
+
export interface MaintenanceBudgetTracker {
|
|
15
|
+
limits: MaintenanceLimits;
|
|
16
|
+
items: number;
|
|
17
|
+
files: Set<string>;
|
|
18
|
+
bytesWritten: number;
|
|
19
|
+
highRiskItems: number;
|
|
20
|
+
deferredItems: number;
|
|
21
|
+
}
|
|
22
|
+
export interface MaintenanceBudgetItem {
|
|
23
|
+
risk: 'low' | 'medium' | 'high';
|
|
24
|
+
operations: {
|
|
25
|
+
type: 'replace' | 'create' | 'delete' | 'move';
|
|
26
|
+
relPath: string;
|
|
27
|
+
toRelPath?: string;
|
|
28
|
+
after?: string;
|
|
29
|
+
}[];
|
|
30
|
+
/** Logical independently drafted transformations in one atomic item. Defaults to one. */
|
|
31
|
+
items?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface MaintenanceBudgetExceeded {
|
|
34
|
+
dimension: MaintenanceBudgetDimension;
|
|
35
|
+
used: number;
|
|
36
|
+
item: number;
|
|
37
|
+
limit: number;
|
|
38
|
+
}
|
|
39
|
+
export type MaintenanceBudgetDecision = {
|
|
40
|
+
allowed: true;
|
|
41
|
+
} | {
|
|
42
|
+
allowed: false;
|
|
43
|
+
exceeded: MaintenanceBudgetExceeded[];
|
|
44
|
+
};
|
|
45
|
+
export declare function createMaintenanceBudget(limits: MaintenanceLimits): MaintenanceBudgetTracker;
|
|
46
|
+
/**
|
|
47
|
+
* Reserve one complete item or none of it.
|
|
48
|
+
*
|
|
49
|
+
* Files are distinct paths over the invocation; bytes are the exact UTF-8 output bytes written by create and
|
|
50
|
+
* replace operations. Deletes consume a file slot but write no new bytes. A denied reservation mutates only
|
|
51
|
+
* the deferred count, so a later independent item may still fit.
|
|
52
|
+
*/
|
|
53
|
+
export declare function reserveMaintenanceBudget(tracker: MaintenanceBudgetTracker, item: MaintenanceBudgetItem): MaintenanceBudgetDecision;
|
|
54
|
+
export declare function maintenanceBudgetReceipt(tracker: MaintenanceBudgetTracker): MaintenanceBudgetReceipt;
|
|
55
|
+
//# sourceMappingURL=budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/maintenance/budget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,MAAM,0BAA0B,GACpC,WAAW,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChC,UAAU,EAAE;QACV,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;IACJ,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,0BAA0B,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,yBAAyB,GACnC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,yBAAyB,EAAE,CAAA;CAAE,CAAC;AAEhF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,CAS3F;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,wBAAwB,EACjC,IAAI,EAAE,qBAAqB,GAC1B,yBAAyB,CA8C3B;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,wBAAwB,GAAG,wBAAwB,CAWpG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export function createMaintenanceBudget(limits) {
|
|
2
|
+
return {
|
|
3
|
+
limits: { ...limits },
|
|
4
|
+
items: 0,
|
|
5
|
+
files: new Set(),
|
|
6
|
+
bytesWritten: 0,
|
|
7
|
+
highRiskItems: 0,
|
|
8
|
+
deferredItems: 0,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Reserve one complete item or none of it.
|
|
13
|
+
*
|
|
14
|
+
* Files are distinct paths over the invocation; bytes are the exact UTF-8 output bytes written by create and
|
|
15
|
+
* replace operations. Deletes consume a file slot but write no new bytes. A denied reservation mutates only
|
|
16
|
+
* the deferred count, so a later independent item may still fit.
|
|
17
|
+
*/
|
|
18
|
+
export function reserveMaintenanceBudget(tracker, item) {
|
|
19
|
+
const paths = new Set(item.operations.flatMap((operation) => operation.type === 'move' && operation.toRelPath
|
|
20
|
+
? [operation.relPath, operation.toRelPath]
|
|
21
|
+
: [operation.relPath]));
|
|
22
|
+
const additionalFiles = [...paths].filter((relPath) => !tracker.files.has(relPath));
|
|
23
|
+
const bytesWritten = item.operations.reduce((bytes, operation) => bytes +
|
|
24
|
+
(operation.type === 'delete' || operation.type === 'move'
|
|
25
|
+
? 0
|
|
26
|
+
: Buffer.byteLength(operation.after ?? '')), 0);
|
|
27
|
+
const items = Math.max(1, Math.floor(item.items ?? 1));
|
|
28
|
+
const highRiskItems = item.risk === 'high' ? items : 0;
|
|
29
|
+
const exceeded = [];
|
|
30
|
+
check(exceeded, 'max_items', tracker.items, items, tracker.limits.maxItems);
|
|
31
|
+
check(exceeded, 'max_files_changed', tracker.files.size, additionalFiles.length, tracker.limits.maxFilesChanged);
|
|
32
|
+
check(exceeded, 'max_bytes_written', tracker.bytesWritten, bytesWritten, tracker.limits.maxBytesWritten);
|
|
33
|
+
check(exceeded, 'max_high_risk_items', tracker.highRiskItems, highRiskItems, tracker.limits.maxHighRiskItems);
|
|
34
|
+
if (exceeded.length > 0) {
|
|
35
|
+
tracker.deferredItems += 1;
|
|
36
|
+
return { allowed: false, exceeded };
|
|
37
|
+
}
|
|
38
|
+
tracker.items += items;
|
|
39
|
+
for (const relPath of paths)
|
|
40
|
+
tracker.files.add(relPath);
|
|
41
|
+
tracker.bytesWritten += bytesWritten;
|
|
42
|
+
tracker.highRiskItems += highRiskItems;
|
|
43
|
+
return { allowed: true };
|
|
44
|
+
}
|
|
45
|
+
export function maintenanceBudgetReceipt(tracker) {
|
|
46
|
+
return {
|
|
47
|
+
limits: { ...tracker.limits },
|
|
48
|
+
used: {
|
|
49
|
+
items: tracker.items,
|
|
50
|
+
filesChanged: tracker.files.size,
|
|
51
|
+
bytesWritten: tracker.bytesWritten,
|
|
52
|
+
highRiskItems: tracker.highRiskItems,
|
|
53
|
+
},
|
|
54
|
+
deferredItems: tracker.deferredItems,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function check(exceeded, dimension, used, item, limit) {
|
|
58
|
+
if (used + item > limit)
|
|
59
|
+
exceeded.push({ dimension, used, item, limit });
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/maintenance/budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AknoContext } from '../context.ts';
|
|
3
|
+
import type { Store } from '../store/db.ts';
|
|
4
|
+
/**
|
|
5
|
+
* **Cheap inline, thorough offline.** This is the thorough half.
|
|
6
|
+
*
|
|
7
|
+
* Inline detection compares the incoming text against the target page's own lines. That is
|
|
8
|
+
* what makes it affordable on every write, and it is also exactly what it cannot see: two
|
|
9
|
+
* pages that each state a different value for the same thing, neither of them being written
|
|
10
|
+
* right now. Nobody is blocked by that, and nobody notices it either.
|
|
11
|
+
*
|
|
12
|
+
* So this pass joins **facts across the whole knowledge base** on subject and attribute —
|
|
13
|
+
* the two fields the deriver assigns — and reports pairs whose values disagree. It reports; it
|
|
14
|
+
* never writes. Reporting what inline checking missed is the whole job, and a maintenance
|
|
15
|
+
* process that silently rewrites claims is the one thing worse than a duplicate.
|
|
16
|
+
*
|
|
17
|
+
* Knowledge pages only: a source page is somebody else's words, and a contract
|
|
18
|
+
* disagreeing with a household's notes is not a contradiction in the household's memory.
|
|
19
|
+
*/
|
|
20
|
+
export interface ConflictClaim {
|
|
21
|
+
slug: string;
|
|
22
|
+
line: number;
|
|
23
|
+
value: string;
|
|
24
|
+
claim: string;
|
|
25
|
+
confidence: number;
|
|
26
|
+
/** When the fact was first seen, so "which is current" has something to go on. */
|
|
27
|
+
seen: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ConflictQualification {
|
|
30
|
+
/** The broad claim that may be narrowed. */
|
|
31
|
+
targetSlug: string;
|
|
32
|
+
targetLine: number;
|
|
33
|
+
/** A distinct claim that states both the target value and its exact scope. */
|
|
34
|
+
evidenceSlug: string;
|
|
35
|
+
evidenceLine: number;
|
|
36
|
+
/** Exact, short phrase copied from the evidence claim. */
|
|
37
|
+
scope: string;
|
|
38
|
+
}
|
|
39
|
+
export interface CrossPageConflict {
|
|
40
|
+
/** Stable for the exact indexed claims and prompt policy; changes when any claim changes. */
|
|
41
|
+
fingerprint: string;
|
|
42
|
+
subject: string;
|
|
43
|
+
attribute: string;
|
|
44
|
+
claims: ConflictClaim[];
|
|
45
|
+
/**
|
|
46
|
+
* A model's judgement, when one ran. `unverified` is honest and common: the pass reports
|
|
47
|
+
* structural candidates whether or not a model was available to judge them.
|
|
48
|
+
*/
|
|
49
|
+
verdict: 'not_a_conflict' | 'time_scoped' | 'superseded' | 'qualified' | 'unresolved' | 'unverified';
|
|
50
|
+
/** Which claim the model thinks is current, when it had an opinion. */
|
|
51
|
+
likelyCurrent?: string;
|
|
52
|
+
/** Evidence-backed narrowing instructions, present only for `qualified`. */
|
|
53
|
+
qualification?: ConflictQualification;
|
|
54
|
+
/** Content-safe classifier rationale. Never includes claim excerpts. */
|
|
55
|
+
reason?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Structural candidates: live facts from `full` pages, grouped by subject and attribute,
|
|
59
|
+
* where two pages carry values that disagree.
|
|
60
|
+
*
|
|
61
|
+
* No model call. That matters for the same reason it matters inline — the pass has to be
|
|
62
|
+
* runnable on a machine with no model at all, and a candidate list is useful on its own.
|
|
63
|
+
*/
|
|
64
|
+
export declare function findCrossPageConflicts(ctx: AknoContext, maxPairs: number): CrossPageConflict[];
|
|
65
|
+
/** The model-free candidate pass, shared with graph eligibility rebuilding. */
|
|
66
|
+
export declare function findCrossPageConflictsInStore(store: Store, maxPairs: number): CrossPageConflict[];
|
|
67
|
+
export declare const CONFLICT_PROMPT_VERSION = "typed-v2-qualified";
|
|
68
|
+
export declare const VERIFY_SCHEMA: z.ZodObject<{
|
|
69
|
+
outcome: z.ZodEnum<{
|
|
70
|
+
unresolved: "unresolved";
|
|
71
|
+
superseded: "superseded";
|
|
72
|
+
not_a_conflict: "not_a_conflict";
|
|
73
|
+
time_scoped: "time_scoped";
|
|
74
|
+
qualified: "qualified";
|
|
75
|
+
}>;
|
|
76
|
+
current: z.ZodNullable<z.ZodString>;
|
|
77
|
+
qualification: z.ZodNullable<z.ZodObject<{
|
|
78
|
+
target: z.ZodString;
|
|
79
|
+
evidence: z.ZodString;
|
|
80
|
+
scope: z.ZodString;
|
|
81
|
+
}, z.core.$strip>>;
|
|
82
|
+
reason: z.ZodString;
|
|
83
|
+
}, z.core.$strip>;
|
|
84
|
+
/**
|
|
85
|
+
* Asks the derive model whether each candidate really is a contradiction.
|
|
86
|
+
*
|
|
87
|
+
* This belongs here rather than inline, because correctness that requires a model call per
|
|
88
|
+
* write belongs in the background. A verdict of `unverified` is left on anything
|
|
89
|
+
* the model could not judge, because dropping those would turn "we did not check" into "we
|
|
90
|
+
* checked and it was fine".
|
|
91
|
+
*/
|
|
92
|
+
export declare function verifyConflicts(ctx: AknoContext, candidates: CrossPageConflict[]): Promise<{
|
|
93
|
+
conflicts: CrossPageConflict[];
|
|
94
|
+
warnings: string[];
|
|
95
|
+
}>;
|
|
96
|
+
/** Claims that must not support a new observation or principle in this run. */
|
|
97
|
+
export declare function ineligibleConflictClaims(conflicts: CrossPageConflict[]): Set<string>;
|
|
98
|
+
export type ConflictClaimIneligibility = 'conflict_unverified' | 'conflict_unresolved' | 'conflict_qualified' | 'conflict_superseded';
|
|
99
|
+
/** Typed reasons shared by inference and the evidence graph; callers never parse verdict prose. */
|
|
100
|
+
export declare function conflictClaimIneligibility(conflicts: CrossPageConflict[]): Map<string, ConflictClaimIneligibility>;
|
|
101
|
+
export declare function claimKey(slug: string, line: number): string;
|
|
102
|
+
/** A dated boundary that can be copied into retained history without inventing chronology. */
|
|
103
|
+
export declare function explicitCurrentBoundary(claim: string): string | null;
|
|
104
|
+
export declare function cachedConflictVerdict(store: Store, candidate: CrossPageConflict, modelId: string | null): CrossPageConflict | null;
|
|
105
|
+
//# sourceMappingURL=conflicts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/maintenance/conflicts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAI5C;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;;;OAGG;IACH,OAAO,EAAE,gBAAgB,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC;IACrG,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAE9F;AAED,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAyDjG;AAeD,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAgC5D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;iBAKxB,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,iBAAiB,EAAE,GAC9B,OAAO,CAAC;IAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8FjE;AAoBD,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAEpF;AAED,MAAM,MAAM,0BAA0B,GACpC,qBAAqB,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;AAE/F,mGAAmG;AACnG,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,iBAAiB,EAAE,GAC7B,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAkBzC;AA6DD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,8FAA8F;AAC9F,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAUD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,iBAAiB,GAAG,IAAI,CA4B1B"}
|