akm-cli 0.9.17-alpha.3 → 0.9.17-alpha.5
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 +760 -0
- package/dist/akm +94 -196
- package/dist/cli/shared.js +6 -2
- package/dist/cli.js +22 -9
- 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 +2 -2
- package/dist/commands/health/checks.js +30 -75
- package/dist/commands/health/config-skew.js +38 -0
- package/dist/commands/health/egress.js +54 -0
- package/dist/commands/health/html-report.js +0 -38
- package/dist/commands/health/improve-metrics.js +123 -562
- 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 +11 -106
- package/dist/commands/health/types-improve.js +4 -19
- package/dist/commands/health/windows.js +64 -73
- package/dist/commands/health.js +122 -143
- package/dist/commands/improve/consolidate/chunking.js +25 -100
- package/dist/commands/improve/consolidate/sanitize.js +54 -149
- package/dist/commands/improve/consolidate.js +538 -1075
- 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 -1075
- package/dist/commands/improve/eligibility.js +126 -400
- package/dist/commands/improve/execution.js +3 -5
- package/dist/commands/improve/extract.js +487 -1046
- package/dist/commands/improve/feedback-valence.js +0 -25
- package/dist/commands/improve/improve-cli.js +29 -166
- package/dist/commands/improve/improve-result-file.js +10 -66
- package/dist/commands/improve/improve-strategies.js +12 -7
- package/dist/commands/improve/improve-usage-report.js +18 -64
- package/dist/commands/improve/improve.js +443 -1063
- package/dist/commands/improve/ledger.js +114 -0
- package/dist/commands/improve/locks.js +2 -8
- package/dist/commands/improve/loop-stages.js +459 -1172
- package/dist/commands/improve/memory/derived-ref.js +12 -77
- package/dist/commands/improve/memory/memory-belief.js +14 -118
- package/dist/commands/improve/memory/memory-improve.js +4 -3
- package/dist/commands/improve/outcome-loop.js +28 -156
- package/dist/commands/improve/planner.js +5 -10
- package/dist/commands/improve/preparation.js +851 -2339
- package/dist/commands/improve/proactive-maintenance.js +34 -101
- package/dist/commands/improve/reflect-noise.js +104 -280
- package/dist/commands/improve/reflect.js +621 -1367
- package/dist/commands/improve/salience.js +46 -232
- package/dist/commands/improve/session-asset.js +19 -100
- package/dist/commands/improve/stage.js +323 -0
- package/dist/commands/lint/base-linter.js +19 -5
- package/dist/commands/proposal/drain.js +251 -644
- package/dist/commands/proposal/proposal-cli.js +3 -18
- package/dist/commands/proposal/proposal-types.js +20 -41
- package/dist/commands/proposal/proposal.js +1 -2
- package/dist/commands/proposal/propose.js +134 -160
- package/dist/commands/proposal/repository.js +502 -1487
- 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 +13 -89
- package/dist/commands/read/curate.js +63 -413
- package/dist/commands/read/search-cli.js +16 -33
- package/dist/commands/read/search.js +17 -23
- package/dist/commands/read/show.js +2 -13
- 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 +2 -11
- 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 +1 -1
- package/dist/commands/tasks/explain.js +10 -13
- package/dist/commands/tasks/tasks-cli.js +9 -8
- package/dist/commands/tasks/tasks.js +326 -930
- package/dist/commands/tasks/validate.js +42 -21
- package/dist/commands/workflow/plan.js +22 -29
- package/dist/commands/workflow-cli.js +4 -4
- package/dist/core/adapter/adapters/akm-adapter.js +0 -1
- package/dist/core/adapter/adapters/akm-lint.js +2 -3
- package/dist/core/adapter/adapters/akm-metadata.js +11 -12
- 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/resolve-ref.js +1 -1
- package/dist/core/bundle-id.js +42 -5
- package/dist/core/bundle-rename.js +291 -0
- package/dist/core/config/config-io.js +1 -2
- package/dist/core/config/config-schema.js +1 -33
- package/dist/core/config/config-walker.js +1 -1
- package/dist/core/config/config.js +163 -68
- 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 +21 -95
- package/dist/core/config/schema/improve.js +4 -42
- 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-lock.js +76 -173
- package/dist/core/logs-db.js +2 -2
- package/dist/core/paths.js +0 -27
- 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 +108 -61
- package/dist/core/state-db-scope.js +2 -4
- package/dist/core/state-db.js +126 -692
- package/dist/core/type-presentation.js +1 -9
- package/dist/core/write-source.js +293 -1012
- 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/graph-db.js +106 -46
- package/dist/indexer/ensure-index.js +44 -85
- package/dist/indexer/graph/graph-extraction.js +340 -562
- package/dist/indexer/graph/graph-related.js +130 -0
- 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 +139 -151
- package/dist/indexer/indexer.js +524 -846
- package/dist/indexer/materialize-embeddings.js +60 -397
- package/dist/indexer/passes/memory-inference.js +81 -90
- package/dist/indexer/passes/metadata.js +132 -200
- package/dist/indexer/read-preflight.js +0 -7
- package/dist/indexer/scan/doc-to-entry.js +1 -3
- package/dist/indexer/scan/drain-dir.js +1 -1
- package/dist/indexer/search/db-search.js +181 -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 +2 -7
- 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/embedders/deterministic.js +2 -3
- package/dist/llm/embedders/profile.js +71 -0
- package/dist/llm/embedders/remote.js +10 -15
- package/dist/llm/graph-extract.js +3 -12
- package/dist/llm/index-passes.js +3 -5
- package/dist/llm/memory-infer.js +1 -2
- package/dist/llm/metadata-enhance.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 +2 -34
- package/dist/output/shapes/passthrough.js +1 -9
- package/dist/{indexer/search/ranking-types.js → output/text/bundle-rename.js} +4 -1
- package/dist/output/text/command-format.js +60 -23
- package/dist/output/text/helpers.js +1 -1
- package/dist/output/text/migrate.js +5 -14
- package/dist/output/text/proposal-format.js +1 -2
- 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 +43940 -93320
- package/dist/scripts/akm-migrate.js +43700 -93078
- 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/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 +0 -17
- 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 +168 -0
- package/dist/storage/repositories/index-connection.js +34 -70
- package/dist/storage/repositories/index-entries-repository.js +69 -111
- package/dist/storage/repositories/index-entry-mapper.js +1 -2
- package/dist/storage/repositories/index-entry-schema.js +83 -269
- package/dist/storage/repositories/index-fts-repository.js +86 -256
- package/dist/storage/repositories/index-llm-cache-repository.js +17 -0
- package/dist/storage/repositories/index-meta-repository.js +6 -4
- package/dist/storage/repositories/index-schema.js +192 -220
- 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 +35 -0
- package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
- 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 +34 -27
- package/dist/tasks/activation-config.js +134 -62
- package/dist/tasks/backends/cron.js +129 -277
- package/dist/tasks/backends/exec-utils.js +2 -5
- package/dist/tasks/backends/launchd.js +125 -745
- package/dist/tasks/backends/schtasks.js +101 -620
- 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/scheduler-binding.js +18 -238
- package/dist/tasks/scheduler-invocation.js +52 -52
- package/dist/tasks/scheduler-lock.js +53 -0
- package/dist/tasks/scheduler-sync.js +361 -751
- package/dist/tasks/source/parse-task-source.js +160 -10
- package/dist/tasks/source/task-source-v3-frozen.js +3 -4
- package/dist/tasks/source/task-to-v4.js +2 -2
- 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 +41 -0
- package/docs/migration/v0.9.1-to-v0.9.2.md +19 -7
- package/docs/reference/cli.md +182 -125
- package/docs/reference/configuration.md +49 -56
- package/docs/reference/data-and-telemetry.md +19 -20
- package/docs/reference/tasks.md +86 -38
- 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 +87 -406
- 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 -146
- package/dist/commands/improve/distill/promote-memory.js +0 -329
- package/dist/commands/improve/distill/quality-gate.js +0 -500
- 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 -21
- 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/config/retired-experimental-keys-shim.js +0 -62
- 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 -441
- package/dist/indexer/graph/graph-boost.js +0 -427
- package/dist/indexer/graph/graph-dedup.js +0 -95
- package/dist/indexer/search/name-match.js +0 -35
- package/dist/indexer/search/ranking-contributors.js +0 -515
- 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/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/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 -78
- 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
|
@@ -23,12 +23,13 @@ import fs from "node:fs";
|
|
|
23
23
|
import path from "node:path";
|
|
24
24
|
import { hashContent } from "../core/adapter/adapters/shared.js";
|
|
25
25
|
import { placementSpecList } from "../core/asset/asset-placement.js";
|
|
26
|
+
import { ConfigError } from "../core/errors.js";
|
|
26
27
|
import { classifyPathAccess } from "../core/path-access.js";
|
|
27
28
|
import { getDbPath } from "../core/paths.js";
|
|
28
29
|
import { warnVerbose } from "../core/warn.js";
|
|
29
30
|
import { assertIndexPathReadable, closeDatabase, openExistingDatabase } from "../storage/repositories/index-connection.js";
|
|
30
31
|
import { getEntryCount, getIndexedFileHashes, getIndexedFilePaths, } from "../storage/repositories/index-entries-repository.js";
|
|
31
|
-
import {
|
|
32
|
+
import { hasCurrentEntriesTable } from "../storage/repositories/index-entry-schema.js";
|
|
32
33
|
import { getMeta } from "../storage/repositories/index-meta-repository.js";
|
|
33
34
|
import { warnOnBundleRenameDrift } from "./bundle-identity-guard.js";
|
|
34
35
|
function getIndexableFiles(root, spec) {
|
|
@@ -134,49 +135,11 @@ function hasNewerIndexableFiles(stashDir, builtAt, indexedPaths, indexedHashes)
|
|
|
134
135
|
}
|
|
135
136
|
/**
|
|
136
137
|
* Check whether the local index is stale relative to the given stash directory.
|
|
137
|
-
* Returns `true` when the index is missing, empty,
|
|
138
|
-
* different primary stash dir.
|
|
138
|
+
* Returns `true` when the index is missing, empty, was built against a
|
|
139
|
+
* different primary stash dir, or an indexable file is newer than it.
|
|
139
140
|
*/
|
|
140
141
|
export function isIndexStale(stashDir) {
|
|
141
|
-
|
|
142
|
-
// Raises on an index we cannot READ rather than calling it stale — "stale"
|
|
143
|
-
// sends us into an inline reindex that will fail anyway, and whose failure is
|
|
144
|
-
// reported as the misleading "proceeding with existing index" (#791).
|
|
145
|
-
assertIndexPathReadable(dbPath);
|
|
146
|
-
if (classifyPathAccess(dbPath).access === "absent")
|
|
147
|
-
return true;
|
|
148
|
-
let db;
|
|
149
|
-
try {
|
|
150
|
-
db = openExistingDatabase(dbPath);
|
|
151
|
-
if (!isCanonicalIndexGeneration(db))
|
|
152
|
-
return true;
|
|
153
|
-
const entryCount = getEntryCount(db);
|
|
154
|
-
if (entryCount === 0)
|
|
155
|
-
return true;
|
|
156
|
-
const builtAt = getMeta(db, "builtAt");
|
|
157
|
-
if (hasNewerIndexableFiles(stashDir, builtAt, getIndexedFilePaths(db), getIndexedFileHashes(db)))
|
|
158
|
-
return true;
|
|
159
|
-
const storedStashDir = getMeta(db, "stashDir");
|
|
160
|
-
if (storedStashDir !== stashDir) {
|
|
161
|
-
// Check if the incoming stashDir appears in the stored stashDirs array
|
|
162
|
-
try {
|
|
163
|
-
const storedDirs = JSON.parse(getMeta(db, "stashDirs") ?? "[]");
|
|
164
|
-
if (!storedDirs.includes(stashDir))
|
|
165
|
-
return true;
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
return true;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return false;
|
|
172
|
-
}
|
|
173
|
-
catch {
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
finally {
|
|
177
|
-
if (db)
|
|
178
|
-
closeDatabase(db);
|
|
179
|
-
}
|
|
142
|
+
return !indexCanServeStash(stashDir, { requireFresh: true });
|
|
180
143
|
}
|
|
181
144
|
/**
|
|
182
145
|
* Whether the existing index can serve queries for `stashDir` *right now* —
|
|
@@ -186,20 +149,27 @@ export function isIndexStale(stashDir) {
|
|
|
186
149
|
* content-stale, so read paths serve it as-is. When it is false the existing
|
|
187
150
|
* index has nothing relevant to return (no DB, no `entries` table, zero rows,
|
|
188
151
|
* or built for a different stash), so those cases must rebuild inline.
|
|
152
|
+
* `requireFresh` also demands that no indexable file is newer than the index.
|
|
189
153
|
*/
|
|
190
|
-
function indexCanServeStash(stashDir) {
|
|
191
|
-
// Same rule as isIndexStale: unreadable is an error, not "cannot serve" (#791).
|
|
154
|
+
function indexCanServeStash(stashDir, options = {}) {
|
|
192
155
|
const dbPath = getDbPath();
|
|
156
|
+
// Raises on an index we cannot READ rather than calling it unusable — that
|
|
157
|
+
// sends us into an inline reindex that will fail anyway, and whose failure
|
|
158
|
+
// is reported as the misleading "proceeding with existing index" (#791).
|
|
193
159
|
assertIndexPathReadable(dbPath);
|
|
194
160
|
if (classifyPathAccess(dbPath).access === "absent")
|
|
195
161
|
return false;
|
|
196
162
|
let db;
|
|
197
163
|
try {
|
|
198
164
|
db = openExistingDatabase(dbPath);
|
|
199
|
-
if (!
|
|
165
|
+
if (!hasCurrentEntriesTable(db))
|
|
200
166
|
return false;
|
|
201
167
|
if (getEntryCount(db) === 0)
|
|
202
168
|
return false;
|
|
169
|
+
if (options.requireFresh &&
|
|
170
|
+
hasNewerIndexableFiles(stashDir, getMeta(db, "builtAt"), getIndexedFilePaths(db), getIndexedFileHashes(db))) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
203
173
|
const storedStashDir = getMeta(db, "stashDir");
|
|
204
174
|
if (storedStashDir === stashDir)
|
|
205
175
|
return true;
|
|
@@ -211,7 +181,10 @@ function indexCanServeStash(stashDir) {
|
|
|
211
181
|
return false;
|
|
212
182
|
}
|
|
213
183
|
}
|
|
214
|
-
catch {
|
|
184
|
+
catch (error) {
|
|
185
|
+
// A newer layout's refusal names the remedy; a rebuild would refuse too.
|
|
186
|
+
if (error instanceof ConfigError)
|
|
187
|
+
throw error;
|
|
215
188
|
// No `entries` table (or otherwise unreadable) — cannot serve.
|
|
216
189
|
return false;
|
|
217
190
|
}
|
|
@@ -220,28 +193,6 @@ function indexCanServeStash(stashDir) {
|
|
|
220
193
|
closeDatabase(db);
|
|
221
194
|
}
|
|
222
195
|
}
|
|
223
|
-
async function runInlineReindex(stashDir, options = {}) {
|
|
224
|
-
const { akmIndex } = await import("./indexer.js");
|
|
225
|
-
const startedMs = Date.now();
|
|
226
|
-
const response = await akmIndex({
|
|
227
|
-
stashDir,
|
|
228
|
-
implicit: true,
|
|
229
|
-
...(options.signal ? { signal: options.signal } : {}),
|
|
230
|
-
...(options.hydrateSources === false ? { hydrateSources: false } : {}),
|
|
231
|
-
});
|
|
232
|
-
// R6: the implicit reindex's cost was previously discarded entirely
|
|
233
|
-
// (`await akmIndex(...)` and nothing else), making a 27-minute blocking
|
|
234
|
-
// rebuild invisible to both the operator and the improve result. Fall back
|
|
235
|
-
// to a wall-clock measurement when the response carries no `timing` block.
|
|
236
|
-
const durationMs = response.timing?.totalMs ?? Date.now() - startedMs;
|
|
237
|
-
const timing = response.timing;
|
|
238
|
-
warnVerbose(`[ensure-index] implicit reindex completed in ${durationMs}ms` +
|
|
239
|
-
(timing
|
|
240
|
-
? ` (walk=${timing.walkMs}ms llm=${timing.llmMs}ms embed=${timing.embedMs}ms finalize=${timing.finalizeMs}ms)`
|
|
241
|
-
: ""));
|
|
242
|
-
options.onReindexTiming?.({ durationMs, timing });
|
|
243
|
-
return true;
|
|
244
|
-
}
|
|
245
196
|
/**
|
|
246
197
|
* Ensure the local index exists and can serve the caller.
|
|
247
198
|
*
|
|
@@ -262,24 +213,32 @@ export async function ensureIndex(stashDir, options = {}) {
|
|
|
262
213
|
// §11.5: warn (once) if the configured bundle ids drifted from the persisted
|
|
263
214
|
// index prefixes (hand-renamed bundle key) BEFORE any rebuild could re-mint.
|
|
264
215
|
warnOnBundleRenameDrift();
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
// materialization point — hydrate cache-backed sources as usual.
|
|
268
|
-
if (!isIndexStale(stashDir))
|
|
269
|
-
return false;
|
|
270
|
-
return runInlineReindex(stashDir, {
|
|
271
|
-
...(options.signal ? { signal: options.signal } : {}),
|
|
272
|
-
...(options.onReindexTiming ? { onReindexTiming: options.onReindexTiming } : {}),
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
// Background = the READ path (`show` auto-index): query time must never clone/
|
|
276
|
-
// pull/fetch (spec §14.3 / D11). Build from already-materialized content only;
|
|
277
|
-
// absent source caches are skipped with a warning, not fetched.
|
|
278
|
-
if (indexCanServeStash(stashDir))
|
|
216
|
+
const blocking = options.mode === "blocking";
|
|
217
|
+
if (indexCanServeStash(stashDir, { requireFresh: blocking }))
|
|
279
218
|
return false;
|
|
280
|
-
|
|
219
|
+
const { akmIndex } = await import("./indexer.js");
|
|
220
|
+
const startedMs = Date.now();
|
|
221
|
+
const response = await akmIndex({
|
|
222
|
+
stashDir,
|
|
223
|
+
implicit: true,
|
|
281
224
|
...(options.signal ? { signal: options.signal } : {}),
|
|
282
|
-
|
|
283
|
-
|
|
225
|
+
// Blocking callers (improve's planning preflight) are a sanctioned
|
|
226
|
+
// materialization point and hydrate cache-backed sources as usual. The
|
|
227
|
+
// background READ path (`show` auto-index) must never clone/pull/fetch at
|
|
228
|
+
// query time (spec §14.3 / D11): it builds from already-materialized
|
|
229
|
+
// content, and absent source caches are skipped with a warning.
|
|
230
|
+
...(blocking ? {} : { hydrateSources: false }),
|
|
284
231
|
});
|
|
232
|
+
// R6: the implicit reindex's cost was previously discarded entirely
|
|
233
|
+
// (`await akmIndex(...)` and nothing else), making a 27-minute blocking
|
|
234
|
+
// rebuild invisible to both the operator and the improve result. Fall back
|
|
235
|
+
// to a wall-clock measurement when the response carries no `timing` block.
|
|
236
|
+
const durationMs = response.timing?.totalMs ?? Date.now() - startedMs;
|
|
237
|
+
const timing = response.timing;
|
|
238
|
+
warnVerbose(`[ensure-index] implicit reindex completed in ${durationMs}ms` +
|
|
239
|
+
(timing
|
|
240
|
+
? ` (walk=${timing.walkMs}ms llm=${timing.llmMs}ms embed=${timing.embedMs}ms finalize=${timing.finalizeMs}ms)`
|
|
241
|
+
: ""));
|
|
242
|
+
options.onReindexTiming?.({ durationMs, timing });
|
|
243
|
+
return true;
|
|
285
244
|
}
|