akm-cli 0.9.0-rc.8 → 0.9.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/CHANGELOG.md +1063 -44
- package/README.md +51 -25
- package/SECURITY.md +14 -1
- package/STABILITY.md +497 -0
- package/dist/akm +148 -35
- package/dist/{akm-migrate-storage → akm-migrate} +6 -9
- package/dist/assets/hints/cli-hints-full.md +223 -95
- package/dist/assets/hints/cli-hints-short.md +85 -22
- package/dist/assets/improve-strategies/default.json +1 -1
- package/dist/assets/improve-strategies/reflect-distill.json +1 -1
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/stash-skeleton/README.md +6 -5
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +20 -9
- package/dist/assets/tasks/core/extract.yml +1 -1
- package/dist/assets/tasks/core/version-check.yml +1 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
- package/dist/assets/templates/html/health.html +1 -3
- package/dist/assets/workflows/workflow-template.md +32 -15
- package/dist/cli/invocation.js +40 -15
- package/dist/cli/parse-args.js +0 -22
- package/dist/cli/retired-commands.js +121 -0
- package/dist/cli/shared.js +154 -22
- package/dist/cli/unknown-flags.js +236 -0
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +696 -258
- package/dist/commands/agent/agent-dispatch.js +14 -3
- package/dist/commands/agent/contribute-cli.js +73 -88
- package/dist/commands/completions.js +79 -22
- package/dist/commands/config-cli.js +17 -150
- package/dist/commands/env/env-cli.js +59 -143
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +36 -66
- package/dist/commands/env/secret.js +24 -57
- package/dist/commands/feedback-cli.js +141 -87
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +3 -4
- package/dist/commands/health/checks.js +85 -23
- package/dist/commands/health/html-report.js +7 -10
- package/dist/commands/health/improve-metrics.js +25 -83
- package/dist/commands/health/md-report.js +5 -9
- package/dist/commands/health/metrics.js +62 -20
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +4 -5
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +3 -48
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/commands/health/types-improve.js +7 -0
- package/dist/commands/health.js +99 -28
- package/dist/commands/improve/anti-collapse.js +2 -2
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +41 -40
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +140 -1000
- package/dist/commands/improve/distill/promote-memory.js +12 -12
- package/dist/commands/improve/distill/quality-gate.js +6 -6
- package/dist/commands/improve/distill.js +58 -69
- package/dist/commands/improve/eligibility.js +105 -57
- package/dist/commands/improve/extract-cli.js +14 -133
- package/dist/commands/improve/improve-cli.js +98 -114
- package/dist/commands/improve/improve-result-file.js +1 -28
- package/dist/commands/improve/improve-strategies.js +8 -5
- package/dist/commands/improve/improve.js +128 -91
- package/dist/commands/improve/loop-stages.js +182 -20
- package/dist/commands/improve/memory/derived-ref.js +45 -43
- package/dist/commands/improve/memory/memory-belief.js +1 -1
- package/dist/commands/improve/memory/memory-contradiction-detect.js +4 -12
- package/dist/commands/improve/memory/memory-improve.js +6 -5
- package/dist/commands/improve/outcome-loop.js +22 -65
- package/dist/commands/improve/preparation.js +114 -123
- package/dist/commands/improve/proactive-maintenance.js +2 -5
- package/dist/commands/improve/reflect.js +56 -160
- package/dist/commands/improve/salience.js +11 -122
- package/dist/commands/improve/source-identity.js +10 -38
- package/dist/commands/lint/base-linter.js +20 -124
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +249 -43
- package/dist/commands/{events.js → log.js} +33 -38
- package/dist/commands/migrate-cli.js +92 -12
- package/dist/commands/migration-tool.js +46 -0
- package/dist/commands/observability-cli.js +70 -209
- package/dist/commands/proposal/drain.js +101 -29
- package/dist/commands/proposal/proposal-cli.js +76 -48
- package/dist/commands/proposal/proposal.js +54 -18
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +23 -15
- package/dist/commands/proposal/repository.js +701 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +2 -8
- package/dist/commands/proposal/validators/proposal-validators.js +55 -7
- package/dist/commands/proposal/validators/proposals.js +4 -7
- package/dist/commands/read/curate.js +34 -53
- package/dist/commands/read/knowledge.js +150 -95
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +42 -15
- package/dist/commands/read/search-cli.js +180 -78
- package/dist/commands/read/search.js +58 -43
- package/dist/commands/read/show.js +197 -141
- package/dist/commands/registry-cli.js +12 -51
- package/dist/commands/remember.js +14 -57
- package/dist/commands/sources/add-cli.js +100 -31
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +7 -2
- package/dist/commands/sources/info.js +18 -5
- package/dist/commands/sources/init.js +12 -12
- package/dist/commands/sources/installed-stashes.js +382 -98
- package/dist/commands/sources/schema-repair.js +3 -2
- package/dist/commands/sources/self-update.js +131 -38
- package/dist/commands/sources/source-add.js +72 -17
- package/dist/commands/sources/source-clone.js +129 -45
- package/dist/commands/sources/source-manage.js +43 -23
- package/dist/commands/sources/sources-cli.js +57 -208
- package/dist/commands/sources/stash-cli.js +46 -53
- package/dist/commands/tasks/tasks-cli.js +91 -97
- package/dist/commands/tasks/tasks.js +276 -421
- package/dist/commands/workflow-cli.js +175 -450
- package/dist/core/adapter/adapters/akm-adapter.js +47 -28
- package/dist/core/adapter/adapters/akm-lint.js +42 -27
- package/dist/core/adapter/adapters/akm-metadata.js +15 -44
- package/dist/core/adapter/adapters/akm-task-adapter.js +15 -13
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +55 -71
- package/dist/core/adapter/adapters/dotenv-adapter.js +1 -1
- package/dist/core/adapter/adapters/generic-files-adapter.js +2 -0
- package/dist/core/adapter/adapters/index.js +6 -6
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +14 -8
- package/dist/core/adapter/adapters/okf-adapter.js +187 -19
- package/dist/core/adapter/adapters/shared.js +3 -19
- package/dist/core/adapter/adapters/tool-dir-shared.js +8 -3
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +1 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +6 -4
- package/dist/core/adapter/validate-context.js +214 -0
- package/dist/core/asset/akm-markdown.js +63 -0
- package/dist/core/asset/asset-placement.js +20 -6
- package/dist/core/asset/asset-ref.js +11 -9
- package/dist/core/asset/frontmatter-lint.js +30 -0
- package/dist/core/asset/frontmatter.js +37 -9
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +89 -18
- package/dist/core/asset/stash-meta.js +1 -1
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +152 -38
- package/dist/core/config/config-io.js +12 -1
- package/dist/core/config/config-schema.js +35 -8
- package/dist/core/config/config-sources.js +55 -11
- package/dist/core/config/config-walker.js +25 -9
- package/dist/core/config/config.js +9 -48
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +5 -1
- package/dist/core/config/schema/experimental.js +30 -0
- package/dist/core/config/schema/improve-processes.js +0 -6
- package/dist/core/config/schema/improve.js +21 -3
- package/dist/core/config/schema/index-config.js +8 -15
- package/dist/core/config/schema/output.js +4 -1
- package/dist/core/config/schema/setup.js +9 -18
- package/dist/core/config/schema/sources-bundles.js +49 -33
- package/dist/core/config/schema/workflow.js +3 -3
- package/dist/core/env-secret-ref.js +76 -46
- package/dist/core/errors.js +18 -12
- package/dist/core/events.js +46 -128
- package/dist/core/file-change.js +6 -5
- package/dist/core/fs-txn.js +83 -7
- package/dist/core/git-message.js +2 -2
- package/dist/core/improve-result.js +1 -100
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +2 -1
- package/dist/core/migration-operation.js +16 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/parse.js +4 -1
- package/dist/core/paths.js +17 -20
- package/dist/core/recognition-util.js +12 -14
- package/dist/core/redaction.js +34 -0
- package/dist/core/standards/resolve-standards-context.js +2 -14
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +2 -2
- package/dist/core/state/migrations.js +41 -18
- package/dist/core/state-db.js +5 -14
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +6 -4
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/type-presentation.js +3 -3
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +771 -95
- package/dist/indexer/bundle-identity-guard.js +3 -2
- package/dist/indexer/db/graph-db.js +0 -24
- package/dist/indexer/ensure-index.js +1 -0
- package/dist/indexer/graph/graph-boost.js +9 -34
- package/dist/indexer/graph/graph-extraction.js +8 -5
- package/dist/indexer/index-writer-lock.js +53 -17
- package/dist/indexer/index-written-assets.js +16 -22
- package/dist/indexer/indexer.js +497 -239
- package/dist/indexer/installations.js +14 -96
- package/dist/indexer/passes/dir-staleness.js +16 -9
- package/dist/indexer/passes/memory-inference.js +11 -9
- package/dist/indexer/passes/metadata.js +113 -47
- package/dist/indexer/scan/doc-to-entry.js +38 -1
- package/dist/indexer/scan/drain-dir.js +13 -23
- package/dist/indexer/search/db-search.js +99 -54
- package/dist/indexer/search/fts-query.js +47 -24
- package/dist/indexer/search/ranking-contributors.js +42 -20
- package/dist/indexer/search/ranking.js +18 -99
- package/dist/indexer/search/search-fields.js +7 -2
- package/dist/indexer/search/search-source.js +82 -93
- package/dist/indexer/usage/usage-events.js +0 -89
- package/dist/indexer/walk/file-context.js +2 -1
- package/dist/indexer/walk/matchers.js +30 -43
- package/dist/indexer/walk/path-resolver.js +7 -2
- package/dist/indexer/walk/walker.js +38 -12
- package/dist/integrations/agent/builders.js +0 -6
- package/dist/integrations/agent/config.js +2 -2
- package/dist/integrations/agent/detect.js +49 -19
- package/dist/integrations/agent/engine-fallback.js +76 -0
- package/dist/integrations/agent/profiles.js +14 -0
- package/dist/integrations/agent/prompts.js +12 -8
- package/dist/integrations/agent/runner-dispatch.js +4 -2
- package/dist/integrations/agent/runner.js +0 -1
- package/dist/integrations/agent/spawn.js +5 -6
- package/dist/integrations/github.js +1 -1
- package/dist/integrations/harnesses/aider/agent-builder.js +6 -4
- package/dist/integrations/harnesses/amazonq/agent-builder.js +7 -4
- package/dist/integrations/harnesses/claude/session-log.js +0 -10
- package/dist/integrations/harnesses/codex/agent-builder.js +5 -2
- package/dist/integrations/harnesses/copilot/agent-builder.js +5 -3
- package/dist/integrations/harnesses/gemini/agent-builder.js +5 -3
- package/dist/integrations/harnesses/index.js +3 -7
- package/dist/integrations/harnesses/opencode/agent-builder.js +21 -2
- package/dist/integrations/harnesses/opencode/session-log.js +0 -15
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +13 -4
- package/dist/integrations/harnesses/openhands/agent-builder.js +9 -6
- package/dist/integrations/harnesses/pi/agent-builder.js +6 -4
- package/dist/integrations/lockfile.js +101 -6
- package/dist/integrations/session-logs/index.js +3 -28
- package/dist/llm/client.js +136 -100
- package/dist/llm/embedders/remote.js +13 -5
- package/dist/llm/feature-gate.js +4 -12
- package/dist/llm/graph-extract.js +5 -11
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +5 -7
- package/dist/llm/structured-call.js +1 -1
- package/dist/llm/usage-persist.js +26 -5
- package/dist/llm/usage-telemetry.js +25 -2
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +259 -0
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +14 -36
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +56 -83
- package/dist/output/shapes/migrate.js +8 -0
- package/dist/output/shapes/passthrough.js +7 -41
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes.js +2 -9
- package/dist/output/text/{init.js → bundle-create.js} +3 -1
- package/dist/output/text/bundle-show.js +7 -0
- package/dist/output/text/command-format.js +164 -96
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/health-format.js +103 -0
- package/dist/output/text/health.js +7 -0
- package/dist/output/text/helpers.js +10 -8
- package/dist/output/text/lint-format.js +43 -0
- package/dist/output/text/{save.js → lint.js} +2 -2
- package/dist/output/text/migrate.js +88 -0
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +44 -72
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/show-directives.js +15 -7
- package/dist/output/text/status-list.js +32 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +24 -203
- package/dist/output/text/workflow.js +1 -7
- package/dist/output/text.js +16 -17
- package/dist/registry/factory.js +4 -6
- package/dist/registry/origin-resolve.js +16 -27
- package/dist/registry/providers/skills-sh.js +3 -3
- package/dist/registry/providers/static-index.js +13 -23
- package/dist/registry/resolve.js +42 -7
- package/dist/registry/semver.js +34 -84
- package/dist/runtime.js +2 -23
- package/dist/scripts/akm-migrate-node.js +60290 -0
- package/dist/scripts/akm-migrate.js +59628 -0
- package/dist/setup/detect.js +42 -15
- package/dist/setup/registry-stash-loader.js +2 -2
- package/dist/setup/setup.js +236 -136
- package/dist/setup/steps/connection.js +7 -9
- package/dist/setup/steps/platforms.js +9 -9
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +12 -13
- package/dist/setup/steps/stashdir.js +2 -3
- package/dist/setup/steps/tasks.js +237 -120
- package/dist/sources/freshness.js +1 -1
- package/dist/sources/provider-factory.js +11 -17
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +278 -34
- package/dist/sources/providers/git-provider.js +25 -23
- package/dist/sources/providers/git-stash.js +395 -106
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +7 -4
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +6 -1
- package/dist/sources/resolve.js +6 -5
- package/dist/sources/snapshot-fetchers/bluesky.js +146 -0
- package/dist/sources/snapshot-fetchers/content-extract.js +566 -0
- package/dist/sources/snapshot-fetchers/fetcher-util.js +41 -0
- package/dist/sources/snapshot-fetchers/github.js +100 -0
- package/dist/sources/snapshot-fetchers/host-guard.js +291 -0
- package/dist/sources/snapshot-fetchers/registry.js +17 -1
- package/dist/sources/snapshot-fetchers/robots.js +348 -0
- package/dist/sources/snapshot-fetchers/rss.js +282 -0
- package/dist/sources/snapshot-fetchers/secret-seam.js +42 -0
- package/dist/sources/snapshot-fetchers/website-ingest.js +566 -268
- package/dist/sources/snapshot-fetchers/x.js +910 -0
- package/dist/storage/database.js +7 -0
- package/dist/storage/engines/sqlite-migrations.js +23 -111
- package/dist/storage/managed-db.js +2 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +27 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -12
- package/dist/storage/repositories/index-connection.js +17 -6
- package/dist/storage/repositories/index-entries-repository.js +151 -240
- package/dist/storage/repositories/index-entry-mapper.js +15 -11
- package/dist/storage/repositories/index-fts-repository.js +5 -2
- package/dist/storage/repositories/index-llm-cache-repository.js +0 -1
- package/dist/storage/repositories/index-meta-repository.js +2 -3
- package/dist/storage/repositories/index-schema.js +10 -25
- package/dist/storage/repositories/index-utility-repository.js +15 -28
- package/dist/storage/repositories/index-vec-repository.js +6 -1
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +296 -59
- package/dist/storage/repositories/registry-cache.js +19 -0
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +15 -13
- package/dist/storage/repositories/workflow-runs-repository.js +52 -40
- package/dist/tasks/backends/cron.js +105 -15
- package/dist/tasks/backends/index.js +1 -1
- package/dist/tasks/backends/launchd.js +85 -38
- package/dist/tasks/backends/schtasks.js +135 -15
- package/dist/tasks/embedded.js +56 -40
- package/dist/tasks/parser.js +7 -157
- package/dist/tasks/resolve-akm-bin.js +137 -59
- package/dist/tasks/runner.js +79 -42
- package/dist/tasks/scheduler-invocation.js +220 -10
- package/dist/tasks/schema.js +24 -1
- package/dist/tasks/task-id.js +1 -3
- package/dist/tasks/validator.js +20 -6
- package/dist/workflows/authoring/authoring.js +94 -143
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/exec/frozen-judge.js +28 -2
- package/dist/workflows/exec/native-executor.js +77 -57
- package/dist/workflows/exec/param-secrets.js +9 -9
- package/dist/workflows/exec/run-workflow.js +133 -79
- package/dist/workflows/exec/step-work.js +219 -346
- package/dist/{migrate-storage-node.mjs → workflows/exec/unit-dispatch.js} +1 -5
- package/dist/workflows/ir/compile.js +141 -270
- package/dist/workflows/ir/freeze.js +40 -30
- package/dist/workflows/ir/params.js +135 -11
- package/dist/workflows/ir/plan-hash.js +1 -1
- package/dist/workflows/ir/schema.js +25 -26
- package/dist/workflows/parser.js +872 -307
- package/dist/workflows/program/expressions.js +20 -208
- package/dist/workflows/program/schema.js +7 -10
- package/dist/workflows/renderer.js +95 -68
- package/dist/workflows/resource-limits.js +2 -0
- package/dist/workflows/runtime/checkin.js +3 -3
- package/dist/workflows/runtime/plan-classifier.js +16 -75
- package/dist/workflows/runtime/runs.js +186 -127
- package/dist/workflows/runtime/unit-checkin.js +1 -1
- package/dist/workflows/runtime/unit-phases.js +2 -2
- package/dist/workflows/runtime/workflow-asset-loader.js +232 -83
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +30 -36
- package/dist/workflows/validator.js +21 -62
- package/docs/README.md +68 -0
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.7.0.md +11 -11
- package/docs/migration/release-notes/0.9.0.md +208 -27
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +564 -208
- package/docs/migration/v0.9.0-troubleshooting.md +561 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/cli.md +2253 -0
- package/docs/reference/configuration.md +358 -0
- package/docs/reference/data-and-telemetry.md +105 -42
- package/docs/reference/workflows.md +647 -0
- package/package.json +22 -11
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +81 -128
- package/schemas/akm-workflow.json +74 -73
- package/dist/assets/tasks/core/backup.yml +0 -5
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/cli/config-migrate.js +0 -1806
- package/dist/cli/config-validate.js +0 -41
- package/dist/commands/backup-cli.js +0 -56
- package/dist/commands/bundle/bundle-cli.js +0 -68
- package/dist/commands/bundle/bundle.js +0 -219
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -489
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/mv-cli.js +0 -1221
- package/dist/commands/sources/history.js +0 -201
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/core/migration-backup.js +0 -1234
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -95
- package/dist/llm/memory-infer-impl.js +0 -138
- package/dist/migrate/legacy/config-source-migration.js +0 -223
- package/dist/migrate/legacy/content-migration.js +0 -305
- package/dist/migrate/legacy/legacy-layout.js +0 -779
- package/dist/migrate/legacy/legacy-paths.js +0 -25
- package/dist/migrate/legacy/legacy-stash-json.js +0 -72
- package/dist/migrate/legacy/proposal-fs-import.js +0 -168
- package/dist/migrate/legacy/task-target-ref-migration.js +0 -272
- package/dist/migrate/legacy/three-db-cutover.js +0 -841
- package/dist/migrate/legacy/workflow-migrations-bodies.js +0 -52
- package/dist/migrate/legacy/workflow-migrations-frozen.js +0 -21
- package/dist/migrate/legacy-ref-grammar.js +0 -214
- package/dist/output/shapes/distill.js +0 -14
- package/dist/output/shapes/history.js +0 -11
- package/dist/output/text/distill.js +0 -6
- package/dist/output/text/enable-disable.js +0 -8
- package/dist/output/text/history.js +0 -6
- package/dist/registry/build-index.js +0 -382
- package/dist/schemas/akm-config.json +0 -4704
- package/dist/schemas/akm-task.json +0 -87
- package/dist/schemas/akm-workflow.json +0 -372
- package/dist/scripts/migrate-storage.js +0 -3816
- package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
- package/dist/workflows/cli.js +0 -53
- package/dist/workflows/exec/brief.js +0 -481
- package/dist/workflows/exec/report.js +0 -1460
- package/dist/workflows/exec/watch.js +0 -116
- package/dist/workflows/program/parser.js +0 -813
- package/dist/workflows/program/project.js +0 -104
|
@@ -86,6 +86,7 @@ export function warnOnBundleRenameDrift(config = loadConfig()) {
|
|
|
86
86
|
`Configured bundle(s) with no indexed content: ${configuredMissingFromIndex.map((id) => `"${id}"`).join(", ")}; ` +
|
|
87
87
|
`indexed content under unconfigured bundle id(s): ${indexedNotConfigured.map((id) => `"${id}"`).join(", ")}. ` +
|
|
88
88
|
"This is the signature of a hand-renamed bundle id (spec §11.5). AKM will NOT silently re-mint fresh state " +
|
|
89
|
-
"under the new id.
|
|
90
|
-
"
|
|
89
|
+
"under the new id. There is no rekey command in 0.9.0: either restore the previous bundle id in config.json " +
|
|
90
|
+
"to reattach the existing rows, or keep the new id and run `akm index --full` to re-mint under it, accepting " +
|
|
91
|
+
"that learned state (utility, salience, outcomes, usage history) keyed to the old id is left behind.");
|
|
91
92
|
}
|
|
@@ -215,13 +215,6 @@ export function drainExtractionQueue(db, stashRoot, limit) {
|
|
|
215
215
|
return [];
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
|
-
/**
|
|
219
|
-
* Scoped loader — only the graph_meta row for a stash. Used by callers that
|
|
220
|
-
* only need summary numbers (e.g. `akm graph summary`).
|
|
221
|
-
*/
|
|
222
|
-
export function loadGraphMetaOnly(stashPath, db) {
|
|
223
|
-
return loadStoredGraphMeta(stashPath, db);
|
|
224
|
-
}
|
|
225
218
|
/**
|
|
226
219
|
* Scoped loader — graph_files rows without entities/relations. Used for
|
|
227
220
|
* orphan detection and entity overview commands.
|
|
@@ -256,23 +249,6 @@ export function loadGraphFilesOnly(stashPath, db) {
|
|
|
256
249
|
return [];
|
|
257
250
|
}
|
|
258
251
|
}
|
|
259
|
-
/**
|
|
260
|
-
* Scoped loader — entities for a single file, keyed on the #624-P1 composite
|
|
261
|
-
* (stash_root, file_path, body_hash). Used by per-asset show/curate lookups.
|
|
262
|
-
*/
|
|
263
|
-
export function loadGraphEntitiesByPath(db, stashRoot, filePath, bodyHash) {
|
|
264
|
-
try {
|
|
265
|
-
const rows = db
|
|
266
|
-
.prepare(`SELECT entity FROM graph_file_entities
|
|
267
|
-
WHERE stash_root = ? AND file_path = ? AND body_hash = ?
|
|
268
|
-
ORDER BY entity_order`)
|
|
269
|
-
.all(stashRoot, filePath, bodyHash);
|
|
270
|
-
return rows.map((r) => r.entity);
|
|
271
|
-
}
|
|
272
|
-
catch {
|
|
273
|
-
return [];
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
252
|
export function loadStoredGraphMeta(stashPath, db) {
|
|
277
253
|
try {
|
|
278
254
|
return withReadableGraphDb(db, (readDb) => {
|
|
@@ -185,6 +185,7 @@ async function runInlineReindex(stashDir, options = {}) {
|
|
|
185
185
|
const { akmIndex } = await import("./indexer.js");
|
|
186
186
|
await akmIndex({
|
|
187
187
|
stashDir,
|
|
188
|
+
implicit: true,
|
|
188
189
|
...(options.signal ? { signal: options.signal } : {}),
|
|
189
190
|
...(options.hydrateSources === false ? { hydrateSources: false } : {}),
|
|
190
191
|
});
|
|
@@ -249,12 +249,9 @@ export function collectGraphRelatedHit(context, filePath) {
|
|
|
249
249
|
* NOT entries.id — so candidates are identified by file_path (the unique index
|
|
250
250
|
* idx_graph_files_path guarantees one graph_files row per path).
|
|
251
251
|
*
|
|
252
|
-
* The returned `ref` field carries the
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
* `entry_key`. Callers should fall back to formatting `path` when `ref` is
|
|
256
|
-
* undefined (graph row with no matching entries row, or a NULL-provenance
|
|
257
|
-
* write-back straggler healed on the next full index).
|
|
252
|
+
* The returned `ref` field carries the canonical indexed `concept_id`, never a
|
|
253
|
+
* value re-derived from presentation fields or `entry_key`. It is undefined
|
|
254
|
+
* when the graph row has no matching entry with current indexed provenance.
|
|
258
255
|
*/
|
|
259
256
|
export function listRelatedPathsForFile(stashRoot, filePath, limit = 5, db) {
|
|
260
257
|
if (!db) {
|
|
@@ -345,25 +342,17 @@ export function listRelatedPathsForFile(stashRoot, filePath, limit = 5, db) {
|
|
|
345
342
|
relationCountByPath.set(row.file_path, (relationCountByPath.get(row.file_path) ?? 0) + 1);
|
|
346
343
|
}
|
|
347
344
|
}
|
|
348
|
-
//
|
|
349
|
-
//
|
|
350
|
-
// tail — the exact spelling displayRef emits for a default-bundle item. This
|
|
351
|
-
// related list is always scoped to ONE stash root (every row shares a bundle),
|
|
352
|
-
// so the user-facing ref is that short conceptId. Resolve by (concept_id /
|
|
353
|
-
// item_ref, file_path) DIRECTLY — no entry_key→`type:name` string surgery.
|
|
354
|
-
// A NULL-provenance write-back straggler (item_ref/concept_id still NULL)
|
|
355
|
-
// simply carries no ref; the caller falls back to the path and the next full
|
|
356
|
-
// index heals the row.
|
|
345
|
+
// This related list is scoped to one source root, so the user-facing ref is
|
|
346
|
+
// the indexed bundle-less conceptId.
|
|
357
347
|
const refByPath = new Map();
|
|
358
348
|
try {
|
|
359
349
|
const entryRows = db
|
|
360
|
-
.prepare(`SELECT file_path, concept_id
|
|
361
|
-
WHERE file_path IN (${placeholders}) AND stash_dir =
|
|
350
|
+
.prepare(`SELECT file_path, concept_id FROM entries
|
|
351
|
+
WHERE file_path IN (${placeholders}) AND stash_dir = ?
|
|
352
|
+
AND item_ref IS NOT NULL AND concept_id IS NOT NULL`)
|
|
362
353
|
.all(...candidatePaths, stashRoot);
|
|
363
354
|
for (const row of entryRows) {
|
|
364
|
-
|
|
365
|
-
if (ref)
|
|
366
|
-
refByPath.set(row.file_path, ref);
|
|
355
|
+
refByPath.set(row.file_path, row.concept_id);
|
|
367
356
|
}
|
|
368
357
|
}
|
|
369
358
|
catch {
|
|
@@ -382,20 +371,6 @@ export function listRelatedPathsForFile(stashRoot, filePath, limit = 5, db) {
|
|
|
382
371
|
};
|
|
383
372
|
});
|
|
384
373
|
}
|
|
385
|
-
/**
|
|
386
|
-
* The bundle-less conceptId tail of a canonical `item_ref`
|
|
387
|
-
* (`<bundle>//<conceptId>`), or `null` when the ref is absent. The graph-related
|
|
388
|
-
* ref is scoped to a single stash root, so the short conceptId is the
|
|
389
|
-
* user-facing spelling (matching displayRef's default-bundle output). The reader
|
|
390
|
-
* prefers the stored `concept_id` column; this derives the same value from
|
|
391
|
-
* `item_ref` when only that column is populated.
|
|
392
|
-
*/
|
|
393
|
-
function conceptIdFromItemRef(itemRef) {
|
|
394
|
-
if (!itemRef)
|
|
395
|
-
return null;
|
|
396
|
-
const boundary = itemRef.indexOf("//");
|
|
397
|
-
return boundary >= 0 ? itemRef.slice(boundary + 2) : itemRef;
|
|
398
|
-
}
|
|
399
374
|
/**
|
|
400
375
|
* Load and normalize graph data from SQLite once, then reuse it across all
|
|
401
376
|
* per-entry boost lookups in the current query.
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* configured LLM to extract entities and relations from each one, and
|
|
9
9
|
* persists the result to stash-local SQLite graph tables keyed by stash root.
|
|
10
10
|
* The artifact is consumed by the search
|
|
11
|
-
* pipeline (see `src/indexer/graph-boost.ts`) as a single boost component
|
|
11
|
+
* pipeline (see `src/indexer/graph/graph-boost.ts`) as a single boost component
|
|
12
12
|
* inside the existing FTS5+boosts loop — there is NO second SearchHit
|
|
13
13
|
* scorer and no parallel ranking track.
|
|
14
14
|
*
|
|
@@ -31,8 +31,11 @@
|
|
|
31
31
|
* - LLM access is exclusively via `resolveIndexPassLLM("graph", config)`.
|
|
32
32
|
* - The graph rows are an indexer artifact, NOT a user-visible
|
|
33
33
|
* asset. It does not have an asset ref, does not appear in search
|
|
34
|
-
* hits, and is not addressable via `akm show`.
|
|
35
|
-
*
|
|
34
|
+
* hits, and is not addressable via `akm show`. The persisted artifact
|
|
35
|
+
* lives in indexer-owned SQLite tables (`replaceStoredGraph` /
|
|
36
|
+
* `loadStoredGraphSnapshot` in `../db/graph-db.ts`), NOT as a file on
|
|
37
|
+
* disk (R-065 #3 — this comment previously described a retired
|
|
38
|
+
* `fs.writeFile`-based storage layout) — `writeAssetToSource` is
|
|
36
39
|
* reserved for asset writes (CLAUDE.md / spec §10 step 5).
|
|
37
40
|
*/
|
|
38
41
|
import fs from "node:fs";
|
|
@@ -470,8 +473,8 @@ export async function runGraphExtractionPass(ctx) {
|
|
|
470
473
|
reportProgress(candidate.absPath, result);
|
|
471
474
|
return result;
|
|
472
475
|
},
|
|
473
|
-
//
|
|
474
|
-
//
|
|
476
|
+
// Caller-set connection concurrency or 1: `resolveLlmEngineUse` does
|
|
477
|
+
// not forward `engines.<name>.concurrency`, so config cannot raise this.
|
|
475
478
|
llmConfig.concurrency ?? 1);
|
|
476
479
|
}
|
|
477
480
|
else {
|
|
@@ -41,6 +41,24 @@ function createLease(lockPath, ownership) {
|
|
|
41
41
|
},
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
+
function tryAcquireIndexWriterLease(lockPath, purpose) {
|
|
45
|
+
while (true) {
|
|
46
|
+
const releaseBarrier = tryAcquireMaintenanceBarrier();
|
|
47
|
+
if (!releaseBarrier)
|
|
48
|
+
return undefined;
|
|
49
|
+
try {
|
|
50
|
+
const ownership = tryAcquireLockSync(lockPath, buildPayload(purpose));
|
|
51
|
+
if (ownership)
|
|
52
|
+
return createLease(lockPath, ownership);
|
|
53
|
+
const probe = probeLock(lockPath, { staleAfterMs: INDEX_WRITER_LOCK_STALE_AFTER_MS });
|
|
54
|
+
if (probe.state !== "stale" || !reclaimStaleLock(lockPath, probe))
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
releaseBarrier();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
44
62
|
export async function acquireIndexWriterLease(options) {
|
|
45
63
|
const mode = options.mode ?? "wait";
|
|
46
64
|
const lockPath = getIndexWriterLockPath();
|
|
@@ -50,23 +68,10 @@ export async function acquireIndexWriterLease(options) {
|
|
|
50
68
|
let lastWaitNoticeMs = 0;
|
|
51
69
|
while (true) {
|
|
52
70
|
throwIfAborted(options.signal);
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (ownership) {
|
|
58
|
-
options.onAcquired?.({ waitedMs: Date.now() - startedAt });
|
|
59
|
-
return createLease(lockPath, ownership);
|
|
60
|
-
}
|
|
61
|
-
const probe = probeLock(lockPath, { staleAfterMs: INDEX_WRITER_LOCK_STALE_AFTER_MS });
|
|
62
|
-
if (probe.state === "stale") {
|
|
63
|
-
if (reclaimStaleLock(lockPath, probe))
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
releaseBarrier();
|
|
69
|
-
}
|
|
71
|
+
const lease = tryAcquireIndexWriterLease(lockPath, options.purpose);
|
|
72
|
+
if (lease) {
|
|
73
|
+
options.onAcquired?.({ waitedMs: Date.now() - startedAt });
|
|
74
|
+
return lease;
|
|
70
75
|
}
|
|
71
76
|
if (mode === "try")
|
|
72
77
|
return undefined;
|
|
@@ -109,6 +114,37 @@ export async function withIndexWriterLease(options, run) {
|
|
|
109
114
|
export function withAssetMutationLease(purpose, run) {
|
|
110
115
|
return withIndexWriterLease({ purpose }, run);
|
|
111
116
|
}
|
|
117
|
+
/** Synchronous asset-write boundary over the same interprocess lease. */
|
|
118
|
+
export function withAssetMutationLeaseSync(purpose, run) {
|
|
119
|
+
const lockPath = getIndexWriterLockPath();
|
|
120
|
+
const inherited = leaseContext.getStore();
|
|
121
|
+
if (inherited?.has(lockPath))
|
|
122
|
+
return run();
|
|
123
|
+
const context = inherited ?? new Set();
|
|
124
|
+
const execute = () => {
|
|
125
|
+
const startedAt = Date.now();
|
|
126
|
+
fs.mkdirSync(path.dirname(lockPath), { recursive: true });
|
|
127
|
+
let lease;
|
|
128
|
+
while (!lease) {
|
|
129
|
+
lease = tryAcquireIndexWriterLease(lockPath, purpose);
|
|
130
|
+
if (!lease) {
|
|
131
|
+
if (Date.now() - startedAt >= DEFAULT_INDEX_WRITER_MAX_WAIT_MS) {
|
|
132
|
+
throw new Error(`timed out waiting for index writer lease for ${purpose}`);
|
|
133
|
+
}
|
|
134
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, INDEX_WRITER_WAIT_MS);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
context.add(lockPath);
|
|
138
|
+
try {
|
|
139
|
+
return run();
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
context.delete(lockPath);
|
|
143
|
+
lease.release();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
return inherited ? execute() : leaseContext.run(context, execute);
|
|
147
|
+
}
|
|
112
148
|
export function probeIndexWriterLease() {
|
|
113
149
|
return probeLock(getIndexWriterLockPath(), { staleAfterMs: INDEX_WRITER_LOCK_STALE_AFTER_MS });
|
|
114
150
|
}
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
import fs from "node:fs";
|
|
23
23
|
import path from "node:path";
|
|
24
24
|
import { akmAdapter } from "../core/adapter/adapters/akm-adapter.js";
|
|
25
|
-
import { recoverTxnsForRoot } from "../core/fs-txn.js";
|
|
26
25
|
import { getDbPath } from "../core/paths.js";
|
|
27
26
|
import { warnVerbose } from "../core/warn.js";
|
|
28
27
|
import { closeDatabase, openExistingDatabase } from "../storage/repositories/index-connection.js";
|
|
@@ -57,17 +56,12 @@ export const WRITE_PATH_INDEX_BUSY_TIMEOUT_MS = 5_000;
|
|
|
57
56
|
export async function indexWrittenAssets(stashDir, filePaths, options = {}) {
|
|
58
57
|
try {
|
|
59
58
|
return await withIndexWriterLease({ purpose: "index-written-assets" }, async () => {
|
|
60
|
-
if (options.recoverMoves !== false) {
|
|
61
|
-
// Unified fs-txn engine (WI-6.3): finish/roll back interrupted mv
|
|
62
|
-
// transactions before the targeted write-path refresh reads the tree.
|
|
63
|
-
await recoverTxnsForRoot(stashDir, (journal) => journal.kind === "mv");
|
|
64
|
-
}
|
|
65
59
|
const dbPath = getDbPath();
|
|
66
60
|
if (!fs.existsSync(dbPath))
|
|
67
61
|
return true;
|
|
68
|
-
// The full walk never descends into dot-directories (
|
|
69
|
-
//
|
|
70
|
-
//
|
|
62
|
+
// The full walk never descends into dot-directories (for example `.meta/`)
|
|
63
|
+
// — mirror that dot-segment skip here so this fast path indexes exactly
|
|
64
|
+
// what a full run would. Sensitive/
|
|
71
65
|
// infra abstention is the adapter's job now (see the `akmAdapter` note
|
|
72
66
|
// below), not a path pre-filter.
|
|
73
67
|
const files = filePaths.filter((f) => {
|
|
@@ -80,12 +74,11 @@ export async function indexWrittenAssets(stashDir, filePaths, options = {}) {
|
|
|
80
74
|
// short. One drain call per file keeps the entry↔path pairing exact and
|
|
81
75
|
// reuses the full-index recognize engine (F4a M-core-2 item 5): broken
|
|
82
76
|
// workflows drop, valid workflow docs are cached for the side-table upsert.
|
|
83
|
-
const component = deriveInstallations([
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
};
|
|
77
|
+
const component = deriveInstallations([
|
|
78
|
+
{ path: stashDir, writable: true, ...(options.bundleId ? { registryId: options.bundleId } : {}) },
|
|
79
|
+
])[0]?.components[0];
|
|
80
|
+
if (!component)
|
|
81
|
+
throw new Error(`Could not derive bundle provenance for ${stashDir}`);
|
|
89
82
|
const pairs = [];
|
|
90
83
|
const unindexable = new Set();
|
|
91
84
|
for (const file of files) {
|
|
@@ -96,17 +89,18 @@ export async function indexWrittenAssets(stashDir, filePaths, options = {}) {
|
|
|
96
89
|
const ctx = buildFileContext(stashDir, file);
|
|
97
90
|
// Hardcoded `akmAdapter` on purpose (owner ruling 2026-07-21): this
|
|
98
91
|
// write-path fast path only ever runs for assets a first-class akm
|
|
99
|
-
// mutation command
|
|
100
|
-
//
|
|
101
|
-
//
|
|
92
|
+
// mutation command just wrote into a managed akm source, so the akm
|
|
93
|
+
// adapter is always the right recognizer here — no per-component
|
|
94
|
+
// dispatch needed.
|
|
102
95
|
const drained = drainDirDocuments(akmAdapter, component, [ctx]);
|
|
103
96
|
const entry = drained.entries[0];
|
|
104
97
|
// Workflows also carry a workflow_documents side-table upsert — handled
|
|
105
98
|
// below, mirroring the full walk — since `akm mv` rewrites citer files
|
|
106
99
|
// that can be workflows. A broken workflow drains to zero entries (like
|
|
107
100
|
// the old skip-with-warning) and is treated as unindexable.
|
|
108
|
-
|
|
109
|
-
|
|
101
|
+
const conceptId = drained.conceptIdByFile.get(ctx.absPath);
|
|
102
|
+
if (entry && conceptId)
|
|
103
|
+
pairs.push({ file, entry, conceptId, contentHash: drained.hashByFile.get(ctx.absPath) });
|
|
110
104
|
else
|
|
111
105
|
unindexable.add(file);
|
|
112
106
|
}
|
|
@@ -119,7 +113,7 @@ export async function indexWrittenAssets(stashDir, filePaths, options = {}) {
|
|
|
119
113
|
const rows = db.prepare("SELECT id FROM entries WHERE file_path = ?").all(file);
|
|
120
114
|
deleteEntriesByIds(db, rows.map((row) => row.id));
|
|
121
115
|
}
|
|
122
|
-
for (const { file, entry, contentHash } of pairs) {
|
|
116
|
+
for (const { file, entry, conceptId, contentHash } of pairs) {
|
|
123
117
|
const entryKey = `${stashDir}:${entry.type}:${entry.name}`;
|
|
124
118
|
let entryWithSize = entry;
|
|
125
119
|
try {
|
|
@@ -131,7 +125,7 @@ export async function indexWrittenAssets(stashDir, filePaths, options = {}) {
|
|
|
131
125
|
// Real provenance (F4a M-core-2 item 5): populate item_ref/content_hash
|
|
132
126
|
// via the SAME derivation the full-index writer uses, so a write-path
|
|
133
127
|
// row is never a NULL-item_ref straggler.
|
|
134
|
-
const provenance = deriveEntryProvenance({ bundleId: component.id, componentId: component.id, adapterId: component.adapter }, entry.type, entry.name);
|
|
128
|
+
const provenance = deriveEntryProvenance({ bundleId: component.id, componentId: component.id, adapterId: component.adapter }, entry.type, entry.name, conceptId);
|
|
135
129
|
const entryId = upsertEntry(db, entryKey, path.dirname(file), file, stashDir, entryWithSize, buildSearchText(entry), provenance, contentHash);
|
|
136
130
|
if (entry.type === "workflow") {
|
|
137
131
|
// Same contract as the full walk (indexer.ts): the renderer cached
|