@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
package/dist/bench.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { performance } from 'node:perf_hooks';
|
|
2
|
+
import { runMixedRetrievalBench } from "./bench/mixed-retrieval.js";
|
|
3
|
+
export async function runBench(akno, options = {}) {
|
|
4
|
+
const health = await akno.doctor({ probeModels: false });
|
|
5
|
+
const iterations = options.iterations !== undefined && Number.isFinite(options.iterations) && options.iterations > 0
|
|
6
|
+
? Math.floor(options.iterations)
|
|
7
|
+
: 12;
|
|
8
|
+
const notes = [];
|
|
9
|
+
const queries = [
|
|
10
|
+
'car insurance renewal',
|
|
11
|
+
'when does the lease end?',
|
|
12
|
+
'passport expiry',
|
|
13
|
+
'anything about the apartment?',
|
|
14
|
+
];
|
|
15
|
+
let queryIndex = 0;
|
|
16
|
+
const nextQuery = () => queries[queryIndex++ % queries.length];
|
|
17
|
+
const emptyIndex = () => (health.counts.chunks === 0 ? 'index is empty' : null);
|
|
18
|
+
const cases = [
|
|
19
|
+
{
|
|
20
|
+
// A cold open plus the first query — but with the model stack out
|
|
21
|
+
// of the path, because this budget is about the database and the assembly.
|
|
22
|
+
name: 'first query, index path only',
|
|
23
|
+
budgetMs: 50,
|
|
24
|
+
iterations: Math.min(iterations, 6),
|
|
25
|
+
run: () => (options.lexical ?? akno).recall({ query: nextQuery(), mode: 'lookup', budget: 4000 }),
|
|
26
|
+
skip: () => options.lexical
|
|
27
|
+
? emptyIndex()
|
|
28
|
+
: 'needs a models-off handle — pass `lexical` to measure the index path alone',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'recall, lexical only',
|
|
32
|
+
budgetMs: 20,
|
|
33
|
+
iterations,
|
|
34
|
+
run: () => (options.lexical ?? akno).recall({ query: nextQuery(), mode: 'lookup', budget: 4000, limit: 5 }),
|
|
35
|
+
skip: () => options.lexical
|
|
36
|
+
? emptyIndex()
|
|
37
|
+
: 'needs a models-off handle; a configured model makes this not lexical',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'point lookup by slug',
|
|
41
|
+
budgetMs: 10,
|
|
42
|
+
iterations,
|
|
43
|
+
run: async () => {
|
|
44
|
+
const listed = await akno.list({ kind: 'pages', limit: 1 });
|
|
45
|
+
const slug = listed.pages?.[0]?.slug;
|
|
46
|
+
return slug ? akno.read({ slug }) : null;
|
|
47
|
+
},
|
|
48
|
+
skip: () => (health.counts.pages === 0 ? 'index is empty' : null),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'timeline, 6 month window',
|
|
52
|
+
budgetMs: 20,
|
|
53
|
+
iterations,
|
|
54
|
+
run: () => akno.timeline({ since: '2026-01', limit: 100 }),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
// The stat sweep with no model work: the claim that a restart is not a re-index. Needs the write handle, and says so when it does not have one.
|
|
58
|
+
name: 'restart -> serving again, nothing changed',
|
|
59
|
+
budgetMs: 50,
|
|
60
|
+
iterations: Math.min(iterations, 5),
|
|
61
|
+
run: () => options.writable.index({ structuralOnly: true }),
|
|
62
|
+
// Guessing between "someone else has the lock" and "you did not ask for it" sends
|
|
63
|
+
// the reader looking for a process that may not exist. The handle knows which it is.
|
|
64
|
+
skip: () => {
|
|
65
|
+
if (!options.writable)
|
|
66
|
+
return 'not measured without a writable handle — rerun with `--write`';
|
|
67
|
+
if (options.writable.writable)
|
|
68
|
+
return null;
|
|
69
|
+
return options.writable.lockHeldBy !== null
|
|
70
|
+
? `pid ${options.writable.lockHeldBy} holds the write handle`
|
|
71
|
+
: 'the write handle could not be taken — check the permissions on the state directory';
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
// ── Reported, not asserted: these include a model round trip ──────────────
|
|
75
|
+
{
|
|
76
|
+
name: 'recall, hybrid + rerank (includes model time)',
|
|
77
|
+
budgetMs: null,
|
|
78
|
+
iterations: Math.min(iterations, 6),
|
|
79
|
+
modelPath: true,
|
|
80
|
+
run: () => akno.recall({ query: nextQuery(), mode: 'question', budget: 8000 }),
|
|
81
|
+
skip: () => (health.counts.chunksEmbedded === 0 ? 'no embeddings in the index' : null),
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
const results = [];
|
|
85
|
+
for (const benchCase of cases) {
|
|
86
|
+
const skipped = benchCase.skip?.() ?? null;
|
|
87
|
+
if (skipped) {
|
|
88
|
+
results.push({
|
|
89
|
+
name: benchCase.name,
|
|
90
|
+
budgetMs: benchCase.budgetMs,
|
|
91
|
+
p50Ms: 0,
|
|
92
|
+
p95Ms: 0,
|
|
93
|
+
samples: 0,
|
|
94
|
+
// A skipped case is not a pass and not a failure. It is a gap, and the
|
|
95
|
+
// caller is told which one.
|
|
96
|
+
passed: true,
|
|
97
|
+
skipped,
|
|
98
|
+
...(benchCase.modelPath ? { modelPath: true } : {}),
|
|
99
|
+
});
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const samples = [];
|
|
103
|
+
let failures = 0;
|
|
104
|
+
// One untimed warm-up: the first call pays for statement preparation, and a
|
|
105
|
+
// budget that includes it measures SQLite's compiler, not the query.
|
|
106
|
+
await benchCase.run().catch(() => failures++);
|
|
107
|
+
for (let i = 0; i < benchCase.iterations; i++) {
|
|
108
|
+
const started = performance.now();
|
|
109
|
+
// A case whose op throws every time must not report a fast, green row.
|
|
110
|
+
await benchCase.run().catch(() => failures++);
|
|
111
|
+
samples.push(performance.now() - started);
|
|
112
|
+
}
|
|
113
|
+
if (failures > benchCase.iterations / 2) {
|
|
114
|
+
results.push({
|
|
115
|
+
name: benchCase.name,
|
|
116
|
+
budgetMs: benchCase.budgetMs,
|
|
117
|
+
p50Ms: 0,
|
|
118
|
+
p95Ms: 0,
|
|
119
|
+
samples: 0,
|
|
120
|
+
passed: false,
|
|
121
|
+
skipped: `the operation failed ${failures} times — the timing would be meaningless`,
|
|
122
|
+
...(benchCase.modelPath ? { modelPath: true } : {}),
|
|
123
|
+
});
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
samples.sort((a, b) => a - b);
|
|
127
|
+
const p50 = percentile(samples, 0.5);
|
|
128
|
+
results.push({
|
|
129
|
+
name: benchCase.name,
|
|
130
|
+
budgetMs: benchCase.budgetMs,
|
|
131
|
+
p50Ms: round(p50),
|
|
132
|
+
p95Ms: round(percentile(samples, 0.95)),
|
|
133
|
+
samples: samples.length,
|
|
134
|
+
passed: benchCase.budgetMs === null || p50 <= benchCase.budgetMs,
|
|
135
|
+
...(benchCase.modelPath ? { modelPath: true } : {}),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const modelPath = results.find((result) => result.modelPath && result.samples > 0);
|
|
139
|
+
const indexPath = results.find((result) => result.name === 'recall, lexical only' && result.samples > 0);
|
|
140
|
+
if (modelPath && indexPath) {
|
|
141
|
+
notes.push(`the model stack accounts for about ${round(modelPath.p50Ms - indexPath.p50Ms)}ms of the ` +
|
|
142
|
+
`${modelPath.p50Ms}ms hybrid path — which is why it is reported and not budgeted`);
|
|
143
|
+
}
|
|
144
|
+
for (const skippedCase of results.filter((result) => result.skipped)) {
|
|
145
|
+
notes.push(`${skippedCase.name}: ${skippedCase.skipped}`);
|
|
146
|
+
}
|
|
147
|
+
const retrieval = await runMixedRetrievalBench({ iterations });
|
|
148
|
+
return {
|
|
149
|
+
results,
|
|
150
|
+
retrieval,
|
|
151
|
+
// Asserted index budgets and fixed-corpus quality decide the verdict. A slow
|
|
152
|
+
// configured model is still only reported, because it is not this code.
|
|
153
|
+
passed: results.every((result) => result.budgetMs === null || result.passed) && retrieval.passed,
|
|
154
|
+
pages: health.counts.pages,
|
|
155
|
+
chunks: health.counts.chunks,
|
|
156
|
+
notes,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function percentile(sorted, fraction) {
|
|
160
|
+
if (sorted.length === 0)
|
|
161
|
+
return 0;
|
|
162
|
+
return sorted[Math.min(sorted.length - 1, Math.floor(sorted.length * fraction))];
|
|
163
|
+
}
|
|
164
|
+
function round(value) {
|
|
165
|
+
return Math.round(value * 100) / 100;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench.js","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function parseJsonc<T = unknown>(content: string, label?: string): T;
|
|
2
|
+
/**
|
|
3
|
+
* Returns null when the file is absent, and throws when it exists but is
|
|
4
|
+
* malformed. A config file that silently reverts to defaults because of a
|
|
5
|
+
* missing brace is a very expensive kind of quiet.
|
|
6
|
+
*/
|
|
7
|
+
export declare function readJsoncFile<T = unknown>(filePath: string): T | null;
|
|
8
|
+
//# sourceMappingURL=jsonc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonc.d.ts","sourceRoot":"","sources":["../../src/config/jsonc.ts"],"names":[],"mappings":"AA8DA,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CASrE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal JSONC reader: strips `//` and block comments, then JSON.parse.
|
|
4
|
+
* Comments matter here — the committed default config is documentation as much
|
|
5
|
+
* as configuration, and a format that cannot hold a comment forces that
|
|
6
|
+
* explanation somewhere the reader will not be looking.
|
|
7
|
+
*/
|
|
8
|
+
function stripJsonComments(input) {
|
|
9
|
+
let out = '';
|
|
10
|
+
let i = 0;
|
|
11
|
+
const len = input.length;
|
|
12
|
+
while (i < len) {
|
|
13
|
+
const ch = input[i];
|
|
14
|
+
const next = input[i + 1];
|
|
15
|
+
if (ch === '"') {
|
|
16
|
+
out += ch;
|
|
17
|
+
i++;
|
|
18
|
+
while (i < len) {
|
|
19
|
+
const c = input[i];
|
|
20
|
+
out += c;
|
|
21
|
+
if (c === '\\' && i + 1 < len) {
|
|
22
|
+
out += input[i + 1];
|
|
23
|
+
i += 2;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (c === '"') {
|
|
27
|
+
i++;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
i++;
|
|
31
|
+
}
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (ch === '/' && next === '/') {
|
|
35
|
+
i += 2;
|
|
36
|
+
while (i < len && input[i] !== '\n')
|
|
37
|
+
i++;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (ch === '/' && next === '*') {
|
|
41
|
+
i += 2;
|
|
42
|
+
while (i < len - 1 && !(input[i] === '*' && input[i + 1] === '/'))
|
|
43
|
+
i++;
|
|
44
|
+
i += 2;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
out += ch;
|
|
48
|
+
i++;
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/** Trailing commas are legal in JSONC and a constant nuisance in a hand-edited file. */
|
|
53
|
+
function stripTrailingCommas(input) {
|
|
54
|
+
return input.replace(/,(\s*[}\]])/g, '$1');
|
|
55
|
+
}
|
|
56
|
+
export function parseJsonc(content, label = '<string>') {
|
|
57
|
+
try {
|
|
58
|
+
return JSON.parse(stripTrailingCommas(stripJsonComments(content)));
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
throw new Error(`${label} is not valid JSON/JSONC: ${err instanceof Error ? err.message : String(err)}`, {
|
|
62
|
+
// The original carries the offset of the offending character, which is the
|
|
63
|
+
// only part of a JSON syntax error worth having.
|
|
64
|
+
cause: err,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns null when the file is absent, and throws when it exists but is
|
|
70
|
+
* malformed. A config file that silently reverts to defaults because of a
|
|
71
|
+
* missing brace is a very expensive kind of quiet.
|
|
72
|
+
*/
|
|
73
|
+
export function readJsoncFile(filePath) {
|
|
74
|
+
let content;
|
|
75
|
+
try {
|
|
76
|
+
content = fs.readFileSync(filePath, 'utf8');
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
if (err.code === 'ENOENT')
|
|
80
|
+
return null;
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
return parseJsonc(content, filePath);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=jsonc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../../src/config/jsonc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ConfigDoc, type AknoConfig } from './schema.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The rules file that travels with the notes. Named here rather than inline because
|
|
4
|
+
* the indexer has to know to skip it: it lives *inside* the knowledge base but is Akno's
|
|
5
|
+
* own configuration, and indexing it files the taxonomy as a memory object.
|
|
6
|
+
*/
|
|
7
|
+
export declare const KB_RULES_FILE = "akno.jsonc";
|
|
8
|
+
/** Keep every whole-tree reader on the indexer's exact configured file scope. */
|
|
9
|
+
export declare function indexScanIgnore(configured: readonly string[]): string[];
|
|
10
|
+
export interface LoadOptions {
|
|
11
|
+
/** Wins over every file, for `open({ aknoPath })` and `--akno-path`. */
|
|
12
|
+
aknoPath?: string;
|
|
13
|
+
stateDir?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Skip `config/local.jsonc` and `~/.akno/config.json`, leaving committed
|
|
16
|
+
* defaults plus env. Also settable with `AKNO_ISOLATED=1`, which is how CI
|
|
17
|
+
* keeps a developer's local overlay out of a test run.
|
|
18
|
+
*/
|
|
19
|
+
isolated?: boolean;
|
|
20
|
+
/** Extra overlay applied last, above env. Used by tests and one-shot CLI flags. */
|
|
21
|
+
overrides?: ConfigDoc;
|
|
22
|
+
env?: NodeJS.ProcessEnv;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Config is assembled from four layers, lowest precedence first — which is also what the
|
|
26
|
+
* repo's gitignore strategy is built around:
|
|
27
|
+
*
|
|
28
|
+
* 1. `config/default.jsonc` committed, machine-independent, every key
|
|
29
|
+
* 2. `~/.akno/config.json` the installed machine's own config
|
|
30
|
+
* 3. `config/local.jsonc` gitignored dev overlay for this checkout
|
|
31
|
+
* 4. `AKNO_*` environment for containers and CI
|
|
32
|
+
*
|
|
33
|
+
* Secrets are the one thing no config layer holds. A config file names the variable that carries a
|
|
34
|
+
* credential, never the credential, so it stays safe to read, diff and paste. The variables
|
|
35
|
+
* themselves come from the environment, or from a gitignored `.env` beside the config — loaded
|
|
36
|
+
* here rather than by a launcher, because a service started by launchd inherits almost nothing and
|
|
37
|
+
* "put it in .env" has to be true for the person who read that in `.env.example`.
|
|
38
|
+
*
|
|
39
|
+
* Rules are a fifth, narrower layer: `<akno_path>/akno.jsonc` wins over all
|
|
40
|
+
* of the above for `folders`, so rules can travel with the notes.
|
|
41
|
+
*/
|
|
42
|
+
export declare function loadConfig(options?: LoadOptions): AknoConfig;
|
|
43
|
+
//# sourceMappingURL=load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,SAAS,EAET,KAAK,UAAU,EAOhB,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,eAAO,MAAM,aAAa,eAAe,CAAC;AAG1C,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvE;AAED,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,WAAgB,GAAG,UAAU,CAqEhE"}
|