akm-cli 0.9.16 → 0.9.17-alpha.10
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/CHANGELOG.md +2101 -0
- package/STABILITY.md +11 -10
- package/dist/akm +124 -193
- package/dist/akm-migrate +38 -19
- package/dist/assets/hints/cli-hints-full.md +6 -7
- package/dist/assets/improve-strategies/catchup.json +0 -3
- package/dist/assets/improve-strategies/consolidate.json +0 -1
- package/dist/assets/improve-strategies/default.json +1 -2
- package/dist/assets/improve-strategies/proactive-maintenance.json +1 -2
- package/dist/assets/improve-strategies/quick.json +1 -2
- package/dist/assets/improve-strategies/reflect-distill.json +1 -2
- package/dist/assets/improve-strategies/thorough.json +0 -3
- package/dist/assets/prompts/consolidate-pair.md +20 -0
- package/dist/assets/prompts/consolidate-system.md +4 -11
- package/dist/assets/prompts/retrieval-relevance-judge.md +6 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +20 -20
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -2
- package/dist/assets/templates/html/health.html +3 -5
- package/dist/cli/retired-commands.js +1 -1
- package/dist/cli/shared.js +6 -2
- package/dist/cli/unknown-flags.js +24 -1
- package/dist/cli.js +68 -10
- package/dist/commands/agent/agent-dispatch.js +1 -1
- package/dist/commands/command/command-execution.js +24 -62
- package/dist/commands/feedback-cli.js +0 -1
- package/dist/commands/health/accept-rate.js +6 -0
- package/dist/commands/health/archive-usage.js +92 -0
- package/dist/commands/health/checks.js +83 -74
- package/dist/commands/health/config-skew.js +38 -0
- package/dist/commands/health/data-dir-usage.js +25 -13
- package/dist/commands/health/egress.js +54 -0
- package/dist/commands/health/html-report.js +1 -42
- package/dist/commands/health/improve-metrics.js +136 -591
- package/dist/commands/health/md-report.js +1 -6
- package/dist/commands/health/plugin-staleness.js +53 -3
- package/dist/commands/health/renderers.js +12 -4
- package/dist/commands/health/report-view-model.js +14 -120
- package/dist/commands/health/types-improve.js +4 -19
- package/dist/commands/health/windows.js +64 -74
- package/dist/commands/health.js +145 -143
- package/dist/commands/improve/consolidate/chunking.js +26 -117
- package/dist/commands/improve/consolidate/continuity-check.js +137 -0
- package/dist/commands/improve/consolidate/pair-pass.js +791 -0
- package/dist/commands/improve/consolidate/sanitize.js +54 -149
- package/dist/commands/improve/consolidate.js +589 -1127
- package/dist/commands/improve/content-hash.js +16 -24
- package/dist/commands/improve/distill/content-repair.js +18 -100
- package/dist/commands/improve/distill-guards.js +20 -81
- package/dist/commands/improve/distill-promotion-policy.js +23 -243
- package/dist/commands/improve/distill.js +608 -1041
- package/dist/commands/improve/eligibility.js +126 -390
- package/dist/commands/improve/execution.js +8 -10
- package/dist/commands/improve/extract-prompt.js +1 -2
- package/dist/commands/improve/extract.js +487 -1046
- package/dist/commands/improve/feedback-valence.js +0 -25
- package/dist/commands/improve/improve-cli.js +75 -169
- package/dist/commands/improve/improve-result-file.js +10 -66
- package/dist/commands/improve/improve-strategies.js +52 -4
- package/dist/commands/improve/improve-usage-report.js +18 -64
- package/dist/commands/improve/improve.js +480 -1074
- package/dist/commands/improve/ledger.js +119 -0
- package/dist/commands/improve/locks.js +2 -8
- package/dist/commands/improve/loop-stages.js +415 -1073
- package/dist/commands/improve/memory/derived-ref.js +12 -77
- package/dist/commands/improve/memory/memory-belief.js +16 -118
- package/dist/commands/improve/memory/memory-improve.js +266 -14
- package/dist/commands/improve/outcome-loop.js +28 -156
- package/dist/commands/improve/planner.js +5 -15
- package/dist/commands/improve/preparation.js +779 -2319
- package/dist/commands/improve/proactive-maintenance.js +34 -101
- package/dist/commands/improve/reflect-noise.js +104 -280
- package/dist/commands/improve/reflect.js +642 -1353
- package/dist/commands/improve/retrieval-gate.js +127 -0
- package/dist/commands/improve/retrieval-scope.js +92 -0
- package/dist/commands/improve/salience.js +41 -240
- package/dist/commands/improve/session-asset.js +19 -100
- package/dist/commands/improve/stage.js +322 -0
- package/dist/commands/lint/base-linter.js +37 -15
- package/dist/commands/proposal/drain.js +261 -578
- package/dist/commands/proposal/proposal-cli.js +19 -20
- package/dist/commands/proposal/proposal-types.js +31 -24
- package/dist/commands/proposal/proposal.js +38 -8
- package/dist/commands/proposal/propose.js +134 -160
- package/dist/commands/proposal/repository.js +1097 -1394
- package/dist/commands/proposal/validators/proposal-quality-validators.js +71 -174
- package/dist/commands/proposal/validators/proposal-validators.js +1 -1
- package/dist/commands/proposal/validators/proposals.js +22 -89
- package/dist/commands/read/curate.js +105 -462
- package/dist/commands/read/knowledge.js +3 -2
- package/dist/commands/read/search-cli.js +16 -33
- package/dist/commands/read/search.js +17 -23
- package/dist/commands/read/show.js +57 -108
- package/dist/commands/sources/bundle-cli.js +25 -2
- package/dist/commands/sources/bundle-config-ops.js +4 -0
- package/dist/commands/sources/dangerous-env-audit.js +1 -2
- package/dist/commands/sources/info.js +127 -29
- package/dist/commands/sources/installed-stashes.js +197 -746
- package/dist/commands/sources/schema-repair.js +98 -129
- package/dist/commands/sources/source-add.js +62 -12
- package/dist/commands/sources/source-manage.js +9 -2
- package/dist/commands/sources/stash-cli.js +24 -4
- package/dist/commands/tasks/explain.js +10 -13
- package/dist/commands/tasks/tasks-cli.js +12 -13
- package/dist/commands/tasks/tasks.js +350 -936
- package/dist/commands/tasks/validate.js +26 -24
- package/dist/commands/workflow/plan.js +22 -29
- package/dist/commands/workflow-cli.js +4 -4
- package/dist/core/adapter/adapters/akm-adapter.js +2 -1
- package/dist/core/adapter/adapters/akm-lint.js +2 -3
- package/dist/core/adapter/adapters/akm-metadata.js +42 -12
- package/dist/core/adapter/adapters/akm-task-adapter.js +29 -8
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +1 -1
- package/dist/core/adapter/execution-source.js +17 -29
- package/dist/core/asset/asset-placement.js +4 -13
- package/dist/core/asset/frontmatter.js +106 -1
- package/dist/core/asset/resolve-ref.js +1 -1
- package/dist/core/bundle-id.js +42 -5
- package/dist/core/bundle-rename.js +285 -0
- package/dist/core/config/config-io.js +1 -2
- package/dist/core/config/config-schema.js +9 -34
- package/dist/core/config/config-walker.js +1 -1
- package/dist/core/config/config.js +184 -111
- package/dist/core/config/engine-semantics.js +0 -2
- package/dist/core/config/legacy-source-shape-shim.js +38 -9
- package/dist/core/config/schema/embedding.js +20 -5
- package/dist/core/config/schema/engines.js +5 -0
- package/dist/core/config/schema/execution.js +1 -1
- package/dist/core/config/schema/experimental.js +1 -1
- package/dist/core/config/schema/improve-processes.js +54 -125
- package/dist/core/config/schema/improve.js +4 -42
- package/dist/core/config/schema/index-config.js +9 -48
- package/dist/core/config/schema/scheduler.js +12 -12
- package/dist/core/config/schema/search.js +6 -22
- package/dist/core/env-secret-ref.js +0 -1
- package/dist/core/errors.js +8 -9
- package/dist/core/file-change.js +13 -5
- package/dist/core/file-lock.js +76 -173
- package/dist/core/improve-result.js +35 -7
- package/dist/core/improve-types.js +0 -1
- package/dist/core/logs-db.js +2 -2
- package/dist/core/loopback.js +7 -12
- package/dist/core/non-task-input.js +20 -0
- package/dist/core/parse.js +13 -16
- package/dist/core/paths.js +0 -24
- package/dist/core/redaction.js +109 -2
- package/dist/core/run-lock.js +2 -5
- package/dist/core/spawn-env.js +1 -1
- package/dist/core/state/migrations.js +123 -61
- package/dist/core/state-db-scope.js +2 -4
- package/dist/core/state-db.js +126 -692
- package/dist/core/time.js +0 -20
- package/dist/core/type-presentation.js +1 -9
- package/dist/core/write-source.js +294 -1005
- package/dist/execution/input-contract.js +1 -1
- package/dist/execution/resolved-request.js +135 -689
- package/dist/execution/source.js +63 -257
- package/dist/execution/target-ref.js +1 -1
- package/dist/indexer/bundle-identity-guard.js +2 -2
- package/dist/indexer/db/llm-cache.js +2 -2
- package/dist/indexer/ensure-index.js +77 -73
- package/dist/indexer/index-rebuild-lock.js +3 -11
- package/dist/indexer/index-writer-lock.js +8 -17
- package/dist/indexer/index-written-assets.js +141 -154
- package/dist/indexer/indexer.js +400 -1124
- package/dist/indexer/links/declared-links.js +90 -0
- package/dist/indexer/materialize-embeddings.js +60 -397
- package/dist/indexer/passes/memory-inference.js +96 -90
- package/dist/indexer/passes/metadata.js +132 -219
- package/dist/indexer/read-preflight.js +0 -7
- package/dist/indexer/scan/doc-to-entry.js +2 -3
- package/dist/indexer/scan/drain-dir.js +1 -1
- package/dist/indexer/search/db-search.js +190 -590
- package/dist/indexer/search/fts-query.js +30 -41
- package/dist/indexer/search/ranking.js +28 -154
- package/dist/indexer/search/search-attribution.js +12 -32
- package/dist/indexer/search/search-fields.js +11 -15
- package/dist/indexer/search/search-hit-enrichers.js +54 -85
- package/dist/indexer/search/search-source.js +1 -4
- package/dist/indexer/usage/usage-events.js +36 -7
- package/dist/indexer/walk/walker.js +3 -4
- package/dist/integrations/agent/engine-fallback.js +23 -40
- package/dist/integrations/agent/engine-resolution.js +93 -183
- package/dist/integrations/agent/execution.js +507 -0
- package/dist/integrations/agent/model-map.js +28 -156
- package/dist/integrations/agent/request-lowering.js +66 -141
- package/dist/integrations/agent/runner-dispatch.js +143 -321
- package/dist/integrations/agent/runner.js +54 -14
- package/dist/integrations/lockfile.js +53 -101
- package/dist/llm/client.js +18 -6
- package/dist/llm/embedders/deterministic.js +2 -3
- package/dist/llm/embedders/profile.js +71 -0
- package/dist/llm/embedders/remote.js +11 -17
- package/dist/llm/feature-gate.js +0 -8
- package/dist/llm/index-passes.js +3 -5
- package/dist/llm/memory-infer.js +1 -2
- package/dist/llm/structured-call.js +5 -24
- package/dist/output/generic-render.js +23 -11
- package/dist/output/html-render.js +13 -10
- package/dist/output/render-registry.js +3 -32
- package/dist/output/shapes/helpers.js +25 -38
- package/dist/output/shapes/passthrough.js +1 -9
- package/dist/{indexer/graph/graph-types.js → output/text/bundle-rename.js} +4 -1
- package/dist/output/text/command-format.js +69 -31
- package/dist/output/text/helpers.js +1 -1
- package/dist/output/text/migrate.js +5 -14
- package/dist/output/text/proposal-format.js +48 -3
- package/dist/output/text/show-format.js +13 -17
- package/dist/output/text/workflow-format.js +0 -32
- package/dist/output/text.js +2 -0
- package/dist/registry/factory.js +4 -19
- package/dist/registry/network.js +66 -220
- package/dist/registry/providers/index.js +0 -2
- package/dist/registry/providers/skills-sh.js +3 -14
- package/dist/registry/providers/static-index.js +24 -26
- package/dist/registry/resolve.js +55 -131
- package/dist/scripts/akm-migrate-node.js +42948 -92369
- package/dist/scripts/akm-migrate.js +42935 -92354
- package/dist/setup/registry-stash-loader.js +4 -13
- package/dist/setup/semantic-assets.js +3 -44
- package/dist/setup/setup.js +1 -1
- package/dist/setup/steps/connection.js +5 -6
- package/dist/setup/steps/platforms.js +2 -2
- package/dist/setup/steps/tasks.js +25 -15
- package/dist/sources/provider-factory.js +17 -18
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +7 -1
- package/dist/sources/providers/git-provider.js +0 -3
- package/dist/sources/providers/git-stash.js +83 -21
- package/dist/sources/providers/npm.js +2 -4
- package/dist/sources/providers/provider-utils.js +5 -10
- package/dist/sources/providers/website.js +0 -2
- package/dist/sources/snapshot-fetchers/website-ingest.js +1 -1
- package/dist/sources/website-url.js +2 -2
- package/dist/storage/database.js +9 -35
- package/dist/storage/repositories/improve-ledger-repository.js +209 -0
- package/dist/storage/repositories/index-connection.js +39 -72
- package/dist/storage/repositories/index-entries-repository.js +131 -129
- package/dist/storage/repositories/index-entry-mapper.js +1 -2
- package/dist/storage/repositories/index-entry-schema.js +101 -268
- package/dist/storage/repositories/index-fts-repository.js +86 -256
- package/dist/storage/repositories/index-links-repository.js +143 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +7 -9
- package/dist/storage/repositories/index-meta-repository.js +6 -4
- package/dist/storage/repositories/index-schema.js +257 -325
- package/dist/storage/repositories/index-utility-repository.js +8 -29
- package/dist/storage/repositories/index-vec-repository.js +133 -414
- package/dist/storage/repositories/outcome-repository.js +2 -1
- package/dist/storage/repositories/proposals-repository.js +104 -1
- package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
- package/dist/storage/repositories/salience-repository.js +1 -19
- package/dist/storage/repositories/task-history-repository.js +26 -4
- package/dist/storage/repositories/workflow-runs-repository.js +53 -244
- package/dist/storage/sqlite-migrations.js +136 -0
- package/dist/storage/sqlite-pragmas.js +11 -9
- package/dist/storage/sqlite-transaction.js +170 -0
- package/dist/storage/state-db-integrity.js +130 -0
- package/dist/tasks/activation-config.js +134 -62
- package/dist/tasks/backends/cron.js +191 -302
- package/dist/tasks/backends/exec-utils.js +2 -5
- package/dist/tasks/backends/launchd.js +141 -748
- package/dist/tasks/backends/schtasks.js +119 -623
- package/dist/tasks/prepare/prepare-support.js +5 -15
- package/dist/tasks/prepare/prepare.js +0 -2
- package/dist/tasks/resolve-akm-bin.js +20 -79
- package/dist/tasks/run/attempt-lifecycle.js +0 -1
- package/dist/tasks/run/load-task.js +1 -1
- package/dist/tasks/scheduler-binding.js +20 -238
- package/dist/tasks/scheduler-invocation.js +136 -244
- package/dist/tasks/scheduler-lock.js +53 -0
- package/dist/tasks/scheduler-sync.js +368 -679
- package/dist/tasks/source/parse-task-source.js +55 -9
- package/dist/tasks/source/task-source-v3-frozen.js +3 -4
- package/dist/tasks/source/task-to-v4.js +464 -88
- package/dist/workflows/authoring/authoring.js +3 -12
- package/dist/workflows/compile.js +211 -0
- package/dist/workflows/concurrency-policy.js +13 -74
- package/dist/workflows/exec/child-invocation.js +3 -17
- package/dist/workflows/exec/child-workflow.js +32 -141
- package/dist/workflows/exec/dispatch-redaction.js +13 -53
- package/dist/workflows/exec/environment.js +98 -0
- package/dist/workflows/exec/exec-unit.js +33 -140
- package/dist/workflows/exec/frozen-judge.js +7 -59
- package/dist/workflows/exec/native-executor.js +82 -341
- package/dist/workflows/exec/param-secrets.js +29 -47
- package/dist/workflows/exec/run-workflow.js +154 -387
- package/dist/workflows/exec/scheduler.js +9 -36
- package/dist/workflows/exec/step-work.js +127 -430
- package/dist/workflows/exec/unit-dispatch.js +11 -63
- package/dist/workflows/exec/unit-writer.js +8 -52
- package/dist/workflows/exec/worktree.js +39 -273
- package/dist/workflows/freeze/child-output-references.js +4 -15
- package/dist/workflows/freeze/environment.js +99 -92
- package/dist/workflows/freeze/freeze.js +172 -0
- package/dist/workflows/freeze/step-values.js +19 -21
- package/dist/workflows/freeze/targets/child-workflow.js +23 -92
- package/dist/workflows/freeze/targets/command.js +10 -33
- package/dist/workflows/freeze/targets/script.js +5 -12
- package/dist/workflows/freeze/targets/shell.js +3 -6
- package/dist/workflows/freeze/targets/task.js +25 -80
- package/dist/workflows/freeze/task-bindings.js +20 -67
- package/dist/workflows/{source-ir/github-yaml.js → github-yaml.js} +88 -206
- package/dist/workflows/ir/params.js +6 -51
- package/dist/workflows/ir/plan-hash.js +2 -34
- package/dist/workflows/parser.js +140 -43
- package/dist/{commands/improve/consolidate/types.js → workflows/plan.js} +2 -1
- package/dist/workflows/renderer.js +36 -69
- package/dist/workflows/resource-limits.js +12 -120
- package/dist/workflows/runtime/agent-identity.js +8 -40
- package/dist/workflows/runtime/run-outputs.js +3 -6
- package/dist/workflows/runtime/run-plan.js +316 -0
- package/dist/workflows/runtime/runs.js +48 -200
- package/dist/workflows/runtime/workflow-asset-loader.js +24 -57
- package/dist/workflows/{source-ir/semantics.js → source-semantics.js} +16 -20
- package/dist/workflows/validate-summary.js +2 -7
- package/docs/integration/bundling-akm.md +49 -42
- package/docs/migration/README.md +1 -0
- package/docs/migration/release-notes/0.9.17.md +43 -0
- package/docs/migration/v0.9.1-to-v0.9.2.md +23 -7
- package/docs/reference/cli.md +232 -135
- package/docs/reference/configuration.md +71 -57
- package/docs/reference/data-and-telemetry.md +20 -21
- package/docs/reference/tasks.md +105 -39
- package/docs/reference/workflow-schema.md +14 -18
- package/docs/reference/workflows.md +6 -9
- package/package.json +1 -1
- package/schemas/akm-config.json +115 -738
- package/schemas/akm-workflow.json +1 -0
- package/dist/assets/improve-strategies/graph-refresh.json +0 -15
- package/dist/assets/prompts/contradiction-judge.md +0 -33
- package/dist/assets/prompts/graph-extract-system.md +0 -1
- package/dist/assets/prompts/graph-extract-user-prompt.md +0 -35
- package/dist/assets/prompts/metadata-enhance-system.md +0 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +0 -4
- package/dist/commands/health/advisories.js +0 -150
- package/dist/commands/health/metrics.js +0 -329
- package/dist/commands/health/surfaces.js +0 -102
- package/dist/commands/improve/anti-collapse.js +0 -83
- package/dist/commands/improve/collapse-detector.js +0 -432
- package/dist/commands/improve/consolidate/eligibility.js +0 -48
- package/dist/commands/improve/consolidate/merge.js +0 -149
- package/dist/commands/improve/distill/promote-memory.js +0 -291
- package/dist/commands/improve/distill/quality-gate.js +0 -337
- package/dist/commands/improve/eval-cases.js +0 -52
- package/dist/commands/improve/memory/memory-contradiction-detect.js +0 -291
- package/dist/commands/improve/proposal-envelope.js +0 -31
- package/dist/commands/improve/run-context.js +0 -123
- package/dist/commands/improve/shared.js +0 -31
- package/dist/commands/improve/source-identity.js +0 -28
- package/dist/commands/improve/triage.js +0 -96
- package/dist/commands/proposal/drain-policies.js +0 -151
- package/dist/commands/sources/update-transaction.js +0 -220
- package/dist/core/action-contributors.js +0 -28
- package/dist/core/config/config-version-shim.js +0 -101
- package/dist/core/fs-txn.js +0 -405
- package/dist/core/lexical-score.js +0 -25
- package/dist/core/maintenance-barrier.js +0 -167
- package/dist/execution/executable-identity.js +0 -105
- package/dist/execution/guarded-source.js +0 -427
- package/dist/indexer/db/graph-db.js +0 -444
- package/dist/indexer/graph/graph-boost.js +0 -427
- package/dist/indexer/graph/graph-dedup.js +0 -95
- package/dist/indexer/graph/graph-extraction.js +0 -1108
- package/dist/indexer/search/name-match.js +0 -35
- package/dist/indexer/search/ranking-contributors.js +0 -515
- package/dist/indexer/search/ranking-types.js +0 -4
- package/dist/indexer/walk/project-context.js +0 -192
- package/dist/integrations/agent/execution-cascade.js +0 -566
- package/dist/integrations/agent/execution-definitions.js +0 -202
- package/dist/integrations/agent/execution-lowering.js +0 -841
- package/dist/integrations/agent/execution-preparation.js +0 -98
- package/dist/integrations/agent/inline-execution.js +0 -74
- package/dist/llm/graph-extract.js +0 -728
- package/dist/llm/metadata-enhance.js +0 -96
- package/dist/registry/create-provider-registry.js +0 -29
- package/dist/registry/pinned-request-helper.js +0 -247
- package/dist/registry/pinned-transport.js +0 -717
- package/dist/sources/providers/index.js +0 -14
- package/dist/storage/engines/sqlite-migrations.js +0 -271
- package/dist/storage/repositories/canaries-repository.js +0 -107
- package/dist/storage/repositories/embedding-salvage-repository.js +0 -184
- package/dist/storage/repositories/registry-cache.js +0 -113
- package/dist/tasks/scheduler-sync-preview.js +0 -52
- package/dist/tasks/source/task-to-v3.js +0 -507
- package/dist/workflows/freeze/resolve-steps.js +0 -86
- package/dist/workflows/freeze/source-freeze.js +0 -64
- package/dist/workflows/ir/compile.js +0 -321
- package/dist/workflows/ir/environment-v4.js +0 -330
- package/dist/workflows/ir/freeze-v4.js +0 -153
- package/dist/workflows/ir/schema-v4.js +0 -745
- package/dist/workflows/ir/schema.js +0 -354
- package/dist/workflows/program/schema.js +0 -77
- package/dist/workflows/runtime/checkin.js +0 -57
- package/dist/workflows/runtime/plan-classifier.js +0 -196
- package/dist/workflows/runtime/unit-checkin.js +0 -45
- package/dist/workflows/runtime/unit-phases.js +0 -20
- package/dist/workflows/schema.js +0 -4
- package/dist/workflows/source-ir/compile.js +0 -200
- package/dist/workflows/source-ir/program.js +0 -50
- package/dist/workflows/source-ir/result.js +0 -26
- package/dist/workflows/source-ir/schema.js +0 -786
- package/dist/workflows/source-ir/triggers.js +0 -79
- package/dist/workflows/source-ir/uses.js +0 -40
- package/dist/workflows/validator.js +0 -60
|
@@ -2,17 +2,32 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* The
|
|
5
|
+
* The derived `entries` layout: DDL plus the layout marker.
|
|
6
6
|
*
|
|
7
|
-
* `
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* `index_meta.version` is a layout marker. An older layout is never refused:
|
|
8
|
+
* readers serve what is there, and the writable opener (`ensureSchema`,
|
|
9
|
+
* `index-schema.ts`) brings it up to date in place — added and dropped
|
|
10
|
+
* columns, retired tables dropped, a one-time full-text rebuild — without
|
|
11
|
+
* touching embeddings, utility scores, or the LLM enrichment cache (the one
|
|
12
|
+
* exception is the LLM entity graph, unconditionally dropped since its
|
|
13
|
+
* retirement in 0.9.17-alpha.9). A newer layout is refused, naming the
|
|
14
|
+
* upgrade.
|
|
12
15
|
*/
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
+
// 26: declared links (#935) live in `asset_links`, one row per link, owned by
|
|
17
|
+
// the entry that declares it. The writable opener derives them in place from
|
|
18
|
+
// each entry's stored `document_json` (`migrateToDeclaredLinks`,
|
|
19
|
+
// index-schema.ts); releases before 26 did not store them.
|
|
20
|
+
// 25: vectors live only in `embeddings`; the sqlite-vec mirror `entries_vec`
|
|
21
|
+
// is dropped (`dropVecMirror`, index-schema.ts), and so is the fragment FTS
|
|
22
|
+
// table `entry_fragments_fts`, which search no longer reads. `entries` keeps
|
|
23
|
+
// a hash of each entry's embedding input (`embed_hash`) instead of the text
|
|
24
|
+
// (`search_text`); the text is derived from `document_json` when embedding.
|
|
25
|
+
// 24: the FTS5 tables are contentless (`content=''`) — the indexed text lives
|
|
26
|
+
// once, in `entries` / `entry_fragments`, and FTS rows are keyed by rowid only.
|
|
27
|
+
// 23 and earlier stored a second copy of every indexed field in FTS5's own
|
|
28
|
+
// content shadow tables. `ensureFtsLayout` (index-schema.ts) rebuilds the FTS
|
|
29
|
+
// tables from the stored entries when it finds the older layout.
|
|
30
|
+
export const CANONICAL_INDEX_DB_VERSION = 26;
|
|
16
31
|
export const CANONICAL_ENTRY_SCHEMA_SQL = `
|
|
17
32
|
CREATE TABLE IF NOT EXISTS entries (
|
|
18
33
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
@@ -25,8 +40,8 @@ export const CANONICAL_ENTRY_SCHEMA_SQL = `
|
|
|
25
40
|
file_path TEXT NOT NULL,
|
|
26
41
|
content_hash TEXT,
|
|
27
42
|
document_json TEXT NOT NULL,
|
|
28
|
-
|
|
29
|
-
|
|
43
|
+
derived_from TEXT,
|
|
44
|
+
embed_hash TEXT
|
|
30
45
|
);
|
|
31
46
|
|
|
32
47
|
CREATE INDEX IF NOT EXISTS idx_entries_bundle ON entries(bundle_id);
|
|
@@ -34,279 +49,97 @@ export const CANONICAL_ENTRY_SCHEMA_SQL = `
|
|
|
34
49
|
CREATE INDEX IF NOT EXISTS idx_entries_file_path ON entries(file_path);
|
|
35
50
|
CREATE INDEX IF NOT EXISTS idx_entries_derived_from ON entries(derived_from);
|
|
36
51
|
|
|
37
|
-
-- Keep parent metadata and body fragments in separate FTS populations.
|
|
38
|
-
-- Combining them changes parent-document IDF and conjunction semantics.
|
|
39
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS entries_fts USING fts5(
|
|
40
|
-
entry_id UNINDEXED,
|
|
41
|
-
name,
|
|
42
|
-
description,
|
|
43
|
-
tags,
|
|
44
|
-
hints,
|
|
45
|
-
content,
|
|
46
|
-
tokenize='porter unicode61'
|
|
47
|
-
);
|
|
48
|
-
|
|
49
52
|
CREATE TABLE IF NOT EXISTS entry_fragments (
|
|
50
53
|
entry_id INTEGER PRIMARY KEY REFERENCES entries(id) ON DELETE CASCADE,
|
|
51
54
|
safe_markdown TEXT NOT NULL
|
|
52
55
|
);
|
|
53
56
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
-- Declared links (#935). dst_bundle NULL: the declaring entry's own bundle.
|
|
58
|
+
CREATE TABLE IF NOT EXISTS asset_links (
|
|
59
|
+
entry_id INTEGER NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
|
|
60
|
+
ord INTEGER NOT NULL,
|
|
61
|
+
kind TEXT NOT NULL,
|
|
62
|
+
raw TEXT NOT NULL,
|
|
63
|
+
dst_bundle TEXT,
|
|
64
|
+
dst_concept TEXT NOT NULL,
|
|
65
|
+
PRIMARY KEY (entry_id, ord)
|
|
66
|
+
) WITHOUT ROWID;
|
|
67
|
+
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_asset_links_dst ON asset_links(dst_concept);
|
|
61
69
|
`;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
name: "component_id",
|
|
89
|
-
type: "TEXT",
|
|
90
|
-
notNull: 1,
|
|
91
|
-
defaultValue: null,
|
|
92
|
-
primaryKeyPosition: 0,
|
|
93
|
-
hidden: 0,
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
cid: 4,
|
|
97
|
-
name: "concept_id",
|
|
98
|
-
type: "TEXT",
|
|
99
|
-
notNull: 1,
|
|
100
|
-
defaultValue: null,
|
|
101
|
-
primaryKeyPosition: 0,
|
|
102
|
-
hidden: 0,
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
cid: 5,
|
|
106
|
-
name: "adapter_id",
|
|
107
|
-
type: "TEXT",
|
|
108
|
-
notNull: 1,
|
|
109
|
-
defaultValue: null,
|
|
110
|
-
primaryKeyPosition: 0,
|
|
111
|
-
hidden: 0,
|
|
112
|
-
},
|
|
113
|
-
{ cid: 6, name: "type", type: "TEXT", notNull: 1, defaultValue: null, primaryKeyPosition: 0, hidden: 0 },
|
|
114
|
-
{
|
|
115
|
-
cid: 7,
|
|
116
|
-
name: "file_path",
|
|
117
|
-
type: "TEXT",
|
|
118
|
-
notNull: 1,
|
|
119
|
-
defaultValue: null,
|
|
120
|
-
primaryKeyPosition: 0,
|
|
121
|
-
hidden: 0,
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
cid: 8,
|
|
125
|
-
name: "content_hash",
|
|
126
|
-
type: "TEXT",
|
|
127
|
-
notNull: 0,
|
|
128
|
-
defaultValue: null,
|
|
129
|
-
primaryKeyPosition: 0,
|
|
130
|
-
hidden: 0,
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
cid: 9,
|
|
134
|
-
name: "document_json",
|
|
135
|
-
type: "TEXT",
|
|
136
|
-
notNull: 1,
|
|
137
|
-
defaultValue: null,
|
|
138
|
-
primaryKeyPosition: 0,
|
|
139
|
-
hidden: 0,
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
cid: 10,
|
|
143
|
-
name: "search_text",
|
|
144
|
-
type: "TEXT",
|
|
145
|
-
notNull: 1,
|
|
146
|
-
defaultValue: null,
|
|
147
|
-
primaryKeyPosition: 0,
|
|
148
|
-
hidden: 0,
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
cid: 11,
|
|
152
|
-
name: "derived_from",
|
|
153
|
-
type: "TEXT",
|
|
154
|
-
notNull: 0,
|
|
155
|
-
defaultValue: null,
|
|
156
|
-
primaryKeyPosition: 0,
|
|
157
|
-
hidden: 0,
|
|
158
|
-
},
|
|
159
|
-
],
|
|
160
|
-
indexes: [
|
|
161
|
-
{
|
|
162
|
-
name: "idx_entries_bundle",
|
|
163
|
-
unique: 0,
|
|
164
|
-
origin: "c",
|
|
165
|
-
partial: 0,
|
|
166
|
-
columns: [
|
|
167
|
-
{ sequence: 0, cid: 2, name: "bundle_id", descending: 0, collation: "BINARY", key: 1 },
|
|
168
|
-
{ sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
|
|
169
|
-
],
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
name: "idx_entries_derived_from",
|
|
173
|
-
unique: 0,
|
|
174
|
-
origin: "c",
|
|
175
|
-
partial: 0,
|
|
176
|
-
columns: [
|
|
177
|
-
{ sequence: 0, cid: 11, name: "derived_from", descending: 0, collation: "BINARY", key: 1 },
|
|
178
|
-
{ sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
|
|
179
|
-
],
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
name: "idx_entries_file_path",
|
|
183
|
-
unique: 0,
|
|
184
|
-
origin: "c",
|
|
185
|
-
partial: 0,
|
|
186
|
-
columns: [
|
|
187
|
-
{ sequence: 0, cid: 7, name: "file_path", descending: 0, collation: "BINARY", key: 1 },
|
|
188
|
-
{ sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
|
|
189
|
-
],
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
name: "idx_entries_type",
|
|
193
|
-
unique: 0,
|
|
194
|
-
origin: "c",
|
|
195
|
-
partial: 0,
|
|
196
|
-
columns: [
|
|
197
|
-
{ sequence: 0, cid: 6, name: "type", descending: 0, collation: "BINARY", key: 1 },
|
|
198
|
-
{ sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
|
|
199
|
-
],
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
name: "sqlite_autoindex_entries_1",
|
|
203
|
-
unique: 1,
|
|
204
|
-
origin: "u",
|
|
205
|
-
partial: 0,
|
|
206
|
-
columns: [
|
|
207
|
-
{ sequence: 0, cid: 1, name: "item_ref", descending: 0, collation: "BINARY", key: 1 },
|
|
208
|
-
{ sequence: 1, cid: -1, name: null, descending: 0, collation: "BINARY", key: 0 },
|
|
209
|
-
],
|
|
210
|
-
},
|
|
211
|
-
],
|
|
212
|
-
searchSurfaces: {
|
|
213
|
-
entriesFtsSql: "CREATE VIRTUAL TABLE entries_fts USING fts5( entry_id UNINDEXED, name, description, tags, hints, content, tokenize='porter unicode61' )",
|
|
214
|
-
fragmentSourceSql: "CREATE TABLE entry_fragments ( entry_id INTEGER PRIMARY KEY REFERENCES entries(id) ON DELETE CASCADE, safe_markdown TEXT NOT NULL )",
|
|
215
|
-
fragmentsFtsSql: "CREATE VIRTUAL TABLE entry_fragments_fts USING fts5( entry_id UNINDEXED, fragment_id UNINDEXED, fragment_ordinal UNINDEXED, content, tokenize='porter unicode61' )",
|
|
216
|
-
},
|
|
217
|
-
};
|
|
70
|
+
// The FTS table is contentless: FTS5 keeps only the inverted index, and a row
|
|
71
|
+
// is addressed by its rowid (`entries_fts.rowid = entries.id`, see
|
|
72
|
+
// index-fts-repository.ts). `contentless_delete=1` lets a row be deleted by
|
|
73
|
+
// rowid alone — an external-content table would instead need the exact text
|
|
74
|
+
// originally indexed, which is derived in JS from `document_json`
|
|
75
|
+
// (`buildSearchFields`) and would corrupt the index the first time that
|
|
76
|
+
// derivation changed. The UNINDEXED columns store nothing and read back NULL;
|
|
77
|
+
// they stay declared so the insert statements and the readers'
|
|
78
|
+
// `COALESCE(f.entry_id, f.rowid)` joins are valid against both this layout
|
|
79
|
+
// and the content-bearing one older releases wrote — which is also the
|
|
80
|
+
// layout written when the linked SQLite predates `contentless_delete` (3.43,
|
|
81
|
+
// e.g. the macOS 13 system library Bun links there).
|
|
82
|
+
const CONTENTLESS_OPTIONS = "content='', contentless_delete=1,";
|
|
83
|
+
export function entriesFtsDdl(contentless) {
|
|
84
|
+
return `
|
|
85
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS entries_fts USING fts5(
|
|
86
|
+
entry_id UNINDEXED, name, description, tags, hints, content,
|
|
87
|
+
${contentless ? CONTENTLESS_OPTIONS : ""} tokenize='porter unicode61'
|
|
88
|
+
);`;
|
|
89
|
+
}
|
|
90
|
+
/** Whether the linked SQLite's FTS5 supports `contentless_delete` (3.43.0+). */
|
|
91
|
+
export function supportsContentlessDelete(db) {
|
|
92
|
+
const version = db.prepare("SELECT sqlite_version() AS version").get().version;
|
|
93
|
+
const [major = 0, minor = 0] = version.split(".").map(Number);
|
|
94
|
+
return major > 3 || (major === 3 && minor >= 43);
|
|
95
|
+
}
|
|
218
96
|
function sqlString(value) {
|
|
219
97
|
return `'${value.replaceAll("'", "''")}'`;
|
|
220
98
|
}
|
|
221
|
-
function
|
|
222
|
-
if (value == null)
|
|
223
|
-
return null;
|
|
224
|
-
return value.replace(/\s+/g, " ").trim();
|
|
225
|
-
}
|
|
226
|
-
function readNamedTableSql(db, name) {
|
|
99
|
+
export function readTableSql(db, name) {
|
|
227
100
|
const row = db.prepare(`SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ${sqlString(name)}`).get();
|
|
228
|
-
return
|
|
229
|
-
}
|
|
230
|
-
export function readEntrySchemaFingerprint(db) {
|
|
231
|
-
const sqliteSequenceTable = db.prepare("SELECT 1 AS present FROM sqlite_master WHERE type = 'table' AND name = 'sqlite_sequence'").get() !=
|
|
232
|
-
null;
|
|
233
|
-
const maxId = Number(db.prepare("SELECT COALESCE(MAX(id), 0) AS maxId FROM entries").get().maxId);
|
|
234
|
-
const sequenceRow = sqliteSequenceTable
|
|
235
|
-
? db.prepare("SELECT seq FROM sqlite_sequence WHERE name = 'entries'").get()
|
|
236
|
-
: undefined;
|
|
237
|
-
const sqliteSequenceValid = sqliteSequenceTable &&
|
|
238
|
-
(maxId === 0 ? sequenceRow == null || Number(sequenceRow.seq) >= 0 : Number(sequenceRow?.seq) >= maxId);
|
|
239
|
-
const columns = db.prepare("PRAGMA table_xinfo(entries)").all().map((column) => ({
|
|
240
|
-
cid: Number(column.cid),
|
|
241
|
-
name: column.name,
|
|
242
|
-
type: column.type.trim().toUpperCase(),
|
|
243
|
-
notNull: Number(column.notnull),
|
|
244
|
-
defaultValue: column.dflt_value === null ? null : String(column.dflt_value),
|
|
245
|
-
primaryKeyPosition: Number(column.pk),
|
|
246
|
-
hidden: Number(column.hidden),
|
|
247
|
-
}));
|
|
248
|
-
const indexes = db.prepare("PRAGMA index_list(entries)").all()
|
|
249
|
-
.map((index) => ({
|
|
250
|
-
name: index.name,
|
|
251
|
-
unique: Number(index.unique),
|
|
252
|
-
origin: index.origin,
|
|
253
|
-
partial: Number(index.partial),
|
|
254
|
-
columns: db.prepare(`PRAGMA index_xinfo(${sqlString(index.name)})`).all()
|
|
255
|
-
.sort((left, right) => Number(left.seqno) - Number(right.seqno))
|
|
256
|
-
.map((column) => ({
|
|
257
|
-
sequence: Number(column.seqno),
|
|
258
|
-
cid: Number(column.cid),
|
|
259
|
-
name: column.name,
|
|
260
|
-
descending: Number(column.desc),
|
|
261
|
-
collation: column.coll,
|
|
262
|
-
key: Number(column.key),
|
|
263
|
-
})),
|
|
264
|
-
}))
|
|
265
|
-
.sort((left, right) => left.name.localeCompare(right.name));
|
|
266
|
-
return {
|
|
267
|
-
tableSql: readNamedTableSql(db, "entries"),
|
|
268
|
-
sqliteSequenceTable,
|
|
269
|
-
sqliteSequenceValid,
|
|
270
|
-
columns,
|
|
271
|
-
indexes,
|
|
272
|
-
searchSurfaces: {
|
|
273
|
-
entriesFtsSql: readNamedTableSql(db, "entries_fts"),
|
|
274
|
-
fragmentSourceSql: readNamedTableSql(db, "entry_fragments"),
|
|
275
|
-
fragmentsFtsSql: readNamedTableSql(db, "entry_fragments_fts"),
|
|
276
|
-
},
|
|
277
|
-
};
|
|
101
|
+
return row?.sql ?? null;
|
|
278
102
|
}
|
|
279
|
-
export function
|
|
280
|
-
|
|
281
|
-
return JSON.stringify(readEntrySchemaFingerprint(db)) === JSON.stringify(CANONICAL_ENTRY_SCHEMA_FINGERPRINT);
|
|
282
|
-
}
|
|
283
|
-
catch {
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
103
|
+
export function tableExists(db, name) {
|
|
104
|
+
return readTableSql(db, name) !== null;
|
|
286
105
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Columns this release's readers need in `entries` (layout 21+). The writable
|
|
108
|
+
* opener adds `embed_hash` to an older table, so it is not required here.
|
|
109
|
+
*/
|
|
110
|
+
const REQUIRED_ENTRY_COLUMNS = [
|
|
111
|
+
"id",
|
|
112
|
+
"item_ref",
|
|
113
|
+
"bundle_id",
|
|
114
|
+
"component_id",
|
|
115
|
+
"concept_id",
|
|
116
|
+
"adapter_id",
|
|
117
|
+
"type",
|
|
118
|
+
"file_path",
|
|
119
|
+
"content_hash",
|
|
120
|
+
"document_json",
|
|
121
|
+
"derived_from",
|
|
122
|
+
];
|
|
123
|
+
/** Required `entries` columns the table lacks; every column when there is no `entries` table. */
|
|
124
|
+
export function missingEntryColumns(db) {
|
|
125
|
+
const present = new Set(db.prepare("PRAGMA table_info(entries)").all().map((c) => c.name));
|
|
126
|
+
return REQUIRED_ENTRY_COLUMNS.filter((column) => !present.has(column));
|
|
304
127
|
}
|
|
305
|
-
|
|
128
|
+
/**
|
|
129
|
+
* Whether an index database has an `entries` table this release can read. A
|
|
130
|
+
* fresh or empty file has none; an index older than layout 21 has one keyed
|
|
131
|
+
* by columns this release no longer reads, and serves nothing until the next
|
|
132
|
+
* `akm index` recreates it.
|
|
133
|
+
*/
|
|
134
|
+
export function hasCurrentEntriesTable(db) {
|
|
306
135
|
try {
|
|
307
|
-
return
|
|
136
|
+
return missingEntryColumns(db).length === 0;
|
|
308
137
|
}
|
|
309
138
|
catch {
|
|
310
139
|
return false;
|
|
311
140
|
}
|
|
312
141
|
}
|
|
142
|
+
/** True when an FTS5 table's DDL declares the contentless layout this release writes. */
|
|
143
|
+
export function isContentlessFtsDdl(sql) {
|
|
144
|
+
return sql !== null && /content\s*=\s*''/.test(sql);
|
|
145
|
+
}
|