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
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
AKM reads one user configuration file: `$XDG_CONFIG_HOME/akm/config.json`
|
|
4
|
+
(normally `~/.config/akm/config.json` on Linux and macOS, or
|
|
5
|
+
`%APPDATA%\akm\config.json` on Windows). Set `AKM_CONFIG_DIR` to override the
|
|
6
|
+
directory. Project `.akm/config.json` files are not merged.
|
|
7
|
+
|
|
8
|
+
## Version 0.9
|
|
9
|
+
|
|
10
|
+
A present configuration file must set `configVersion` to exactly `"0.9.0"`.
|
|
11
|
+
Missing, older, newer, numeric, and malformed versions are rejected by ordinary
|
|
12
|
+
commands without rewriting the file. `akm migrate status` reports config and
|
|
13
|
+
database state independently; it exits nonzero when migration is blocked.
|
|
14
|
+
`akm migrate apply` installs an operator-prepared 0.9 config and applies pending
|
|
15
|
+
database migrations, but it never guesses profile-to-engine mappings. See [the
|
|
16
|
+
migration guide](../migration/v0.8-to-v0.9.md) before editing an existing
|
|
17
|
+
installation.
|
|
18
|
+
|
|
19
|
+
Canonical config and durable database access fail closed while a restore or
|
|
20
|
+
migration-apply operation is incomplete. Use `akm migrate status` to inspect it
|
|
21
|
+
and `akm migrate apply` to retry; do not delete migration control files manually.
|
|
22
|
+
|
|
23
|
+
AKM 0.8 does not provide these migration commands. To cross from 0.8 to 0.9,
|
|
24
|
+
prepare the target and an independent filesystem backup first, install or stage
|
|
25
|
+
the 0.9 binary manually, then invoke that new binary with `migrate apply
|
|
26
|
+
--config`. Do not use `upgrade --migration-config` from 0.8; that installed 0.8
|
|
27
|
+
code cannot enforce safeguards introduced by 0.9.
|
|
28
|
+
|
|
29
|
+
```jsonc
|
|
30
|
+
{
|
|
31
|
+
"configVersion": "0.9.0",
|
|
32
|
+
"$schema": "https://itlackey.github.io/akm/schemas/akm-config.json",
|
|
33
|
+
"engines": {
|
|
34
|
+
"fast": {
|
|
35
|
+
"kind": "llm",
|
|
36
|
+
"endpoint": "http://localhost:11434/v1/chat/completions",
|
|
37
|
+
"model": "qwen3",
|
|
38
|
+
"apiKey": "${LOCAL_LLM_API_KEY}"
|
|
39
|
+
},
|
|
40
|
+
"reviewer": {
|
|
41
|
+
"kind": "agent",
|
|
42
|
+
"platform": "opencode",
|
|
43
|
+
"model": "anthropic/claude-sonnet-4-6"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"defaults": {
|
|
47
|
+
"engine": "reviewer",
|
|
48
|
+
"llmEngine": "fast",
|
|
49
|
+
"improveStrategy": "default"
|
|
50
|
+
},
|
|
51
|
+
"workflow": {
|
|
52
|
+
"maxConcurrency": 8,
|
|
53
|
+
"judgeEngine": "reviewer"
|
|
54
|
+
},
|
|
55
|
+
"improve": {
|
|
56
|
+
"strategies": {
|
|
57
|
+
"nightly": {
|
|
58
|
+
"engine": "fast",
|
|
59
|
+
"processes": {
|
|
60
|
+
"reflect": {},
|
|
61
|
+
"memoryInference": { "model": "qwen3-small", "llm": { "temperature": 0.1 } }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Engines
|
|
70
|
+
|
|
71
|
+
`engines` is the only public execution map. An engine name is lowercase
|
|
72
|
+
kebab-case, at most 63 characters, and cannot start with `akm-`.
|
|
73
|
+
|
|
74
|
+
| Kind | Required fields | Use |
|
|
75
|
+
| --- | --- | --- |
|
|
76
|
+
| `llm` | `endpoint`, `model` | OpenAI-compatible chat completions |
|
|
77
|
+
| `agent` | `platform` | A registered dispatch-capable harness |
|
|
78
|
+
|
|
79
|
+
LLM endpoints must be complete `http://` or `https://` chat-completions URLs
|
|
80
|
+
ending in `/chat/completions`, without userinfo, query, or fragment. API keys
|
|
81
|
+
are symbolic only: `$VAR` or `${VAR}`. AKM resolves them only at dispatch.
|
|
82
|
+
|
|
83
|
+
An agent engine may set `bin`, `args`, `workspace`, `model`, `timeoutMs`, and
|
|
84
|
+
`modelAliases`. Only `platform: "opencode-sdk"` may set `llmEngine`; it names
|
|
85
|
+
the LLM engine used as that SDK engine's fallback connection.
|
|
86
|
+
|
|
87
|
+
`platform: "opencode-sdk"` needs the **`opencode` binary** on PATH (or a `bin`
|
|
88
|
+
pointing at it). akm bundles `@opencode-ai/sdk`, but that package is an HTTP
|
|
89
|
+
client with no dependencies — it spawns `opencode serve` and talks to it — so
|
|
90
|
+
the npm dependency alone does not make the platform usable. Install the binary
|
|
91
|
+
with `npm i -g opencode-ai` or opencode's own installer.
|
|
92
|
+
|
|
93
|
+
Config-root `modelAliases` resolve by exact engine/platform column first, then
|
|
94
|
+
the shared `llm` column for direct and fallback LLM engines, then `"*"`. The
|
|
95
|
+
resolved exact model is used consistently by direct dispatch, SDK fallback,
|
|
96
|
+
health evidence, and frozen workflow plans.
|
|
97
|
+
|
|
98
|
+
`defaults.engine` names an LLM or agent engine. `defaults.llmEngine` must name
|
|
99
|
+
an LLM engine. There is no first-engine fallback: an unset `defaults.engine`
|
|
100
|
+
never resolves to some arbitrary entry in `engines`. It resolves instead to a
|
|
101
|
+
synthesized, config-free `opencode-sdk` engine when the `opencode` binary is on
|
|
102
|
+
PATH — announced once per run, and preempted by any `opencode-sdk` engine you
|
|
103
|
+
configure yourself. Naming an engine that is not configured is always an error
|
|
104
|
+
and is never rescued by that fallback.
|
|
105
|
+
|
|
106
|
+
Index passes select engines through `index.defaults.engine` or
|
|
107
|
+
`index.<pass>.engine`. Per-pass `model`, `timeoutMs`, and `llm` fields are
|
|
108
|
+
invocation overrides; `enabled: false` disables that pass. Connection fields
|
|
109
|
+
such as `endpoint`, `provider`, and `apiKey` belong only on named engines.
|
|
110
|
+
|
|
111
|
+
`workflow.maxConcurrency` is the native workflow engine ceiling. An explicit
|
|
112
|
+
value is clamped to `1..64`. When absent, AKM derives the cap once from the CPU
|
|
113
|
+
count (`min(16, max(1, cores - 2))`) and freezes it into the run plan, so resume
|
|
114
|
+
does not change policy on a different host or after config edits.
|
|
115
|
+
|
|
116
|
+
`workflow.judgeEngine` names the LLM or agent engine used to verify every
|
|
117
|
+
non-empty workflow `### gate` rubric. It is required when a workflow declares
|
|
118
|
+
completion criteria and is frozen into each new run, so later config edits do
|
|
119
|
+
not change an in-flight run's verifier. Missing, failed, or malformed verifier
|
|
120
|
+
results reject the gate; criteria are never silently bypassed.
|
|
121
|
+
|
|
122
|
+
## Strategies
|
|
123
|
+
|
|
124
|
+
Improve presets live under `improve.strategies`; invoke one with
|
|
125
|
+
`akm improve --strategy <name>`. The selection order is `--strategy`,
|
|
126
|
+
`defaults.improveStrategy`, then built-in `default`. A strategy and each process
|
|
127
|
+
can select `engine`, `model`, `timeoutMs`, and LLM request overrides:
|
|
128
|
+
|
|
129
|
+
```jsonc
|
|
130
|
+
{
|
|
131
|
+
"improve": {
|
|
132
|
+
"strategies": {
|
|
133
|
+
"nightly": {
|
|
134
|
+
"engine": "fast",
|
|
135
|
+
"processes": {
|
|
136
|
+
"reflect": { "llm": { "temperature": 0.2 } },
|
|
137
|
+
"graphExtraction": { "model": "qwen3-small" }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
LLM-only improve processes require an LLM engine; an explicit invalid or
|
|
146
|
+
incompatible engine never falls back to another engine. Built-in strategies
|
|
147
|
+
are complete presets. User-defined strategies inherit omitted fields from the
|
|
148
|
+
built-in `default` strategy before applying their own overrides.
|
|
149
|
+
|
|
150
|
+
The shipped `default` and `frequent` strategies keep improve-stage session
|
|
151
|
+
extraction off. `proactiveMaintenance` is off in `default` and
|
|
152
|
+
`reflect-distill`; run `akm improve --strategy proactive-maintenance` to use the
|
|
153
|
+
dedicated opt-in preset. Because strategies inherit from `default`, a preset
|
|
154
|
+
that omits either process also inherits the off value. User strategy overrides
|
|
155
|
+
are applied last, so an explicit `enabled: true` still opts the selected
|
|
156
|
+
strategy in.
|
|
157
|
+
|
|
158
|
+
These improve-stage defaults do not gate explicit standalone extraction through
|
|
159
|
+
`akm proposal extract --type <harness>` or `akm proposal extract --auto`. The interactive
|
|
160
|
+
scheduled-task step also continues to offer the bundled `core/extract` template
|
|
161
|
+
as an unselected opt-in; it is not installed merely because the template is
|
|
162
|
+
bundled.
|
|
163
|
+
|
|
164
|
+
## Indexing
|
|
165
|
+
|
|
166
|
+
`index.indexBodyOpening` defaults to `false`. When enabled, AKM captures the
|
|
167
|
+
first prose paragraph of each Markdown asset body, capped at 280 characters,
|
|
168
|
+
into the lowest-weight search content and embedding text. Secret and env files
|
|
169
|
+
are never read for this field, and session-kind memories are excluded.
|
|
170
|
+
|
|
171
|
+
Changing this option changes indexed text. Run `akm index --full` after
|
|
172
|
+
toggling it so all entries and embeddings are rebuilt consistently. If the
|
|
173
|
+
setting differs from the state used to build the current index, AKM warns until
|
|
174
|
+
that full rebuild completes.
|
|
175
|
+
|
|
176
|
+
## Semantic search
|
|
177
|
+
|
|
178
|
+
`semanticSearchMode` (top-level, `"off" | "auto"`, default `"off"`) gates
|
|
179
|
+
embedding-based search. `"auto"` lets AKM set up embeddings (which downloads
|
|
180
|
+
a local model unless you point `embedding` at a remote provider) and falls
|
|
181
|
+
back to keyword-only FTS if the embedding runtime is unavailable; `"off"`
|
|
182
|
+
disables semantic search outright and search is always keyword-only FTS.
|
|
183
|
+
The default is `"off"` so a bare or headless install (`akm bundle create`, `--yes`,
|
|
184
|
+
`--config`) never silently downloads the local embedding model on first
|
|
185
|
+
index.
|
|
186
|
+
The interactive `akm setup` wizard pre-selects semantic search **on**
|
|
187
|
+
regardless of this default, and warns that choosing it downloads the model
|
|
188
|
+
unless a remote `embedding` config is provided.
|
|
189
|
+
|
|
190
|
+
```jsonc
|
|
191
|
+
{ "semanticSearchMode": "off" }
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
`embedding` configures the connection used for semantic search and
|
|
195
|
+
`akm improve`'s memory-inference/consolidate passes when they call an
|
|
196
|
+
embedding model: `provider`, `endpoint`, `model`, `apiKey` (symbolic
|
|
197
|
+
reference, same rules as engine `apiKey`), `dimension`, `localModel`,
|
|
198
|
+
`maxTokens`, `batchSize`, `chunkSize`, `contextLength`, and
|
|
199
|
+
`ollamaOptions.num_ctx`.
|
|
200
|
+
|
|
201
|
+
## Search tuning
|
|
202
|
+
|
|
203
|
+
`search` tunes ranking, not behavior an ordinary user needs to touch:
|
|
204
|
+
|
|
205
|
+
| Key | Purpose |
|
|
206
|
+
| --- | --- |
|
|
207
|
+
| `search.minScore` | Drop results below this score |
|
|
208
|
+
| `search.defaultExcludeTypes` | Asset types excluded from results by default |
|
|
209
|
+
|
|
210
|
+
### Graph boost search tuning
|
|
211
|
+
|
|
212
|
+
| Key | Purpose |
|
|
213
|
+
| --- | --- |
|
|
214
|
+
| `search.graphBoost.*` | Entity-graph relevance boost: `directBoostPerEntity`/`directBoostCap` (directly related entities), `hopBoostPerEntity`/`hopBoostCap` (multi-hop, capped at `maxHops` ≤ 3), `confidenceMode` (`off`\|`blend`\|`multiply`, default `blend`), `confidenceWeight` (0–1, default `0.2`) |
|
|
215
|
+
|
|
216
|
+
## Feedback
|
|
217
|
+
|
|
218
|
+
`feedback` shapes the `akm feedback` taxonomy:
|
|
219
|
+
|
|
220
|
+
| Key | Purpose |
|
|
221
|
+
| --- | --- |
|
|
222
|
+
| `feedback.requireReason` | Whether `akm feedback --negative` without `--reason`/`--failure-mode` is a hard error. **Defaults to `true`** when unset — set `false` to downgrade the check to a warning instead |
|
|
223
|
+
| `feedback.allowedFailureModes` | Restrict `--failure-mode` values accepted by `akm feedback`. Curated set (also the default when unset): `incorrect`, `outdated`, `dangerous`, `incomplete`, `redundant` |
|
|
224
|
+
|
|
225
|
+
## Bundles and write target
|
|
226
|
+
|
|
227
|
+
`bundles` (replacing the retired `stashDir`/`sources[]`/`installed[]` trio)
|
|
228
|
+
and `defaultBundle` are the 0.9 source configuration shape — see
|
|
229
|
+
[Concepts](https://github.com/itlackey/akm/blob/main/docs/guides/concepts.md) and the [CLI reference](cli.md) for the
|
|
230
|
+
full bundle model (`path`, `git`, `website`, `npm`, `writable`, `registryId`,
|
|
231
|
+
`components`). `defaultBundle` must name a key in `bundles` when set.
|
|
232
|
+
|
|
233
|
+
### defaultWriteTarget
|
|
234
|
+
|
|
235
|
+
`defaultWriteTarget` names the bundle that write commands (`akm remember`,
|
|
236
|
+
`akm env`/`secret create`, `akm improve`, etc.) fall back to when no
|
|
237
|
+
explicit destination flag is given and the command isn't already scoped to a
|
|
238
|
+
specific source. It must name a configured bundle; setting it with no
|
|
239
|
+
`bundles` configured, or naming an unconfigured bundle, is rejected at
|
|
240
|
+
`config set` (or config load) time. The full write-target resolution order
|
|
241
|
+
is the command's destination flag (`--bundle` on `remember`/`clone`/
|
|
242
|
+
`improve`, `--target` on `env`/`secret create`) -> `defaultWriteTarget` ->
|
|
243
|
+
working bundle (`defaultBundle`) -> `ConfigError`.
|
|
244
|
+
|
|
245
|
+
### Memory scope
|
|
246
|
+
|
|
247
|
+
`akm remember`'s scope flags (`--user`, `--agent`, `--run`, `--channel`)
|
|
248
|
+
write four canonical top-level frontmatter keys on the memory file:
|
|
249
|
+
`scope_user`, `scope_agent`, `scope_run`, `scope_channel` (one key per
|
|
250
|
+
non-empty scope value; string values). This is not a config-file setting —
|
|
251
|
+
it is documented here because it is the multi-tenant/multi-agent contract
|
|
252
|
+
that `akm search --filter` and `akm show --filter` read back:
|
|
253
|
+
`--filter user=<id>` / `--filter agent=<id>` / `--filter run=<id>` /
|
|
254
|
+
`--filter channel=<name>` (repeatable) narrow results/resolution to assets
|
|
255
|
+
whose frontmatter scope matches, without changing ranking. A memory with
|
|
256
|
+
only scope flags and no tags is valid — the tag-required check is
|
|
257
|
+
independent of scope. `--scope` was removed in 0.9.0 with no alias; use
|
|
258
|
+
`--filter`.
|
|
259
|
+
|
|
260
|
+
`archiveRetentionDays` (default `90` when unset) controls how long a pending
|
|
261
|
+
proposal is kept before `akm improve`'s maintenance pass archives it (status
|
|
262
|
+
`rejected`, reason `"expired: no action within retention window"`) — `akm
|
|
263
|
+
proposal` itself has no archive/expire verb. Setting it to `0` or less
|
|
264
|
+
disables expiry entirely.
|
|
265
|
+
|
|
266
|
+
## Registries
|
|
267
|
+
|
|
268
|
+
`registries` (top-level array, distinct from `bundles`) lists remote package
|
|
269
|
+
registries `akm registry`/`akm bundle add` can search and install from.
|
|
270
|
+
Each entry is `{ url, name?, enabled?, provider?, options? }`; `provider`
|
|
271
|
+
defaults to `"static-index"`. See [Registries](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md) for the full
|
|
272
|
+
field reference and provider list.
|
|
273
|
+
|
|
274
|
+
## Output defaults
|
|
275
|
+
|
|
276
|
+
`output.format` (one of `json`\|`yaml`\|`text`\|`jsonl`\|`md`\|`html`,
|
|
277
|
+
default `json`) and `output.detail` (`brief`\|`normal`\|`full`, default
|
|
278
|
+
`brief`) set the CLI's default `--format`/`--detail` when the flags are
|
|
279
|
+
omitted. Per-command flags always override these.
|
|
280
|
+
|
|
281
|
+
## Setup-derived recommendations
|
|
282
|
+
|
|
283
|
+
`setup` is reserved for configuration derived by `akm setup`. It currently
|
|
284
|
+
holds no keys — the `setup.taskSchedules` sub-key was removed in 0.9.0 after
|
|
285
|
+
nothing in the setup flow or the tasks subsystem was found to read or write
|
|
286
|
+
it. Scheduling lives in the tasks subsystem (`akm task`).
|
|
287
|
+
|
|
288
|
+
## Experimental opt-ins
|
|
289
|
+
|
|
290
|
+
`experimental` holds explicit opt-ins for behavior outside the 0.9
|
|
291
|
+
stability contract (see [STABILITY.md](../../STABILITY.md) for full
|
|
292
|
+
classification). Every key defaults to **off**; an absent `experimental`
|
|
293
|
+
section, an absent key, and an explicit `false` all read identically as off.
|
|
294
|
+
|
|
295
|
+
```jsonc
|
|
296
|
+
{
|
|
297
|
+
"experimental": {
|
|
298
|
+
"improveAutonomy": false
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
- **`experimental.improveAutonomy`** — gates only the autonomous
|
|
304
|
+
`memoryInference`, `triagePromote`, and `memoryCleanup` lanes. `akm improve`
|
|
305
|
+
itself always runs; this only gates mutations without a human in the loop.
|
|
306
|
+
Consolidation is not gated: it remains advisory and emits reviewable
|
|
307
|
+
proposals. `sync.push` is deliberately **not** gated by this key.
|
|
308
|
+
|
|
309
|
+
## Managing Config
|
|
310
|
+
|
|
311
|
+
```sh
|
|
312
|
+
akm config list
|
|
313
|
+
akm config get engines.fast
|
|
314
|
+
akm config set engines.fast '{"kind":"llm","endpoint":"http://localhost:11434/v1/chat/completions","model":"qwen3"}'
|
|
315
|
+
akm config set engines.fast.apiKey '$LOCAL_LLM_API_KEY'
|
|
316
|
+
akm config unset engines.old
|
|
317
|
+
akm migrate status
|
|
318
|
+
akm migrate status --config ./prepared-0.9.json
|
|
319
|
+
akm migrate apply --config ./prepared-0.9.json --dry-run
|
|
320
|
+
akm migrate apply --config ./prepared-0.9.json
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Object values passed to `config set` deep-merge with their current value.
|
|
324
|
+
Arrays replace, `null` is only valid for nullable fields, and `config unset` is
|
|
325
|
+
the only deletion operation. `configVersion` cannot be set or unset with the
|
|
326
|
+
generic walker.
|
|
327
|
+
|
|
328
|
+
## Environment
|
|
329
|
+
|
|
330
|
+
| Variable | Purpose |
|
|
331
|
+
| --- | --- |
|
|
332
|
+
| `AKM_CONFIG_DIR` | Override the user config directory (or set `XDG_CONFIG_HOME`) |
|
|
333
|
+
| `AKM_ENGINE_<NAME>_API_KEY` | Fallback credential for LLM engine `<name>` |
|
|
334
|
+
| `AKM_LLM_API_KEY` | Fallback only for the selected `defaults.llmEngine` |
|
|
335
|
+
| `AKM_EMBED_API_KEY` | Embedding credential |
|
|
336
|
+
| `AKM_BUNDLE_DIR` | Override the stash directory |
|
|
337
|
+
| `AKM_DATA_DIR` | Override the data directory — durable `index.db`/`workflow.db`/`state.db`, `akm.lock`, config backups (or set `XDG_DATA_HOME`) |
|
|
338
|
+
| `AKM_CACHE_DIR` | Override the cache directory — regenerable caches (or set `XDG_CACHE_HOME`) |
|
|
339
|
+
| `AKM_STATE_DIR` | Override the state directory — task-scheduler invocation state (or set `XDG_STATE_HOME`) |
|
|
340
|
+
| `AKM_SQLITE_JOURNAL_MODE` | SQLite journal mode: `WAL` (default), `DELETE`, or `TRUNCATE` |
|
|
341
|
+
| `AKM_VERBOSE` | Truthy value enables the same diagnostics as `--verbose` |
|
|
342
|
+
| `AKM_DEBUG` | `1` prints a stack trace on unexpected internal errors |
|
|
343
|
+
|
|
344
|
+
For an engine named `fast`, its fallback variable is
|
|
345
|
+
`AKM_ENGINE_FAST_API_KEY`. An explicit `apiKey` symbolic reference is
|
|
346
|
+
authoritative and does not fall through to another variable.
|
|
347
|
+
|
|
348
|
+
Use `AKM_SQLITE_JOURNAL_MODE=DELETE` or `TRUNCATE` when WAL is unavailable,
|
|
349
|
+
such as on some NFS/SMB mounts. With the default `WAL` setting, AKM detects a
|
|
350
|
+
network filesystem for the data directory and falls back to `DELETE`.
|
|
351
|
+
|
|
352
|
+
## Retired Configuration
|
|
353
|
+
|
|
354
|
+
`profiles`, `llm`, `agent`, `features`, `stashes`, `defaults.llm`,
|
|
355
|
+
`defaults.agent`, and `defaults.improve` are rejected in 0.9. Recreate the
|
|
356
|
+
configuration using `engines`, `defaults.engine`, `defaults.llmEngine`, and
|
|
357
|
+
`improve.strategies`; AKM deliberately does not infer or rename ambiguous
|
|
358
|
+
profile identities.
|
|
@@ -16,6 +16,7 @@ AKM adds no network destinations of its own. The requests it *does* make all go
|
|
|
16
16
|
2. **Registry metadata and stash packages** from sources you explicitly configure (GitHub, npm, git remotes, websites) — those hosts receive the fetch/clone/crawl requests, and website sources receive requests for the pages you crawl.
|
|
17
17
|
3. **`akm upgrade`** — fetches the latest release from GitHub releases (GitHub sees the request).
|
|
18
18
|
4. **`akm setup`** — a single DNS lookup for `github.com` to decide whether to skip network-dependent steps (Ollama detection, remote embedding probes) when offline. No HTTP request is made by this probe; if it succeeds, akm proceeds with the network-dependent steps you already configured.
|
|
19
|
+
5. **`akm improve` dead-link checks** — a full-scope improve run (the default for a bare `akm improve`) sends best-effort `HEAD` requests (following redirects, with a short timeout and a hard cap on URL count) to URLs found in the bodies of the knowledge assets it is improving, to flag dead links. The hosts of those URLs see a `HEAD` request; no asset content is sent. Keep URLs you don't want probed out of knowledge-asset bodies, or run improve with an explicit narrower scope.
|
|
19
20
|
|
|
20
21
|
In every case the receiving endpoint is one you configured or invoked; the data leaving your machine is the data you directed AKM to send there.
|
|
21
22
|
|
|
@@ -29,7 +30,7 @@ AKM writes to these locations on your machine. All paths follow [XDG Base Direct
|
|
|
29
30
|
|
|
30
31
|
| Path | Contents | Safe to delete? |
|
|
31
32
|
|---|---|---|
|
|
32
|
-
| `config.json` | Your AKM configuration: engines, strategies, stash
|
|
33
|
+
| `config.json` | Your AKM configuration: engines, improve strategies, bundles (stash sources), and experimental opt-ins — see [Configuration](configuration.md) | **No** — deleting resets all settings |
|
|
33
34
|
|
|
34
35
|
Override: set `AKM_CONFIG_DIR` or `XDG_CONFIG_HOME`.
|
|
35
36
|
|
|
@@ -39,6 +40,7 @@ Override: set `AKM_CONFIG_DIR` or `XDG_CONFIG_HOME`.
|
|
|
39
40
|
|---|---|---|
|
|
40
41
|
| `index.db` | Search index for all your stash assets (FTS5 + metadata) | Yes — rebuilds via `akm index --full` |
|
|
41
42
|
| `state.db` | Events, local usage telemetry, proposals, task history, improve run results, and workflow run state/history (the former `workflow.db` was folded in during the 0.9.0 cutover) | **No** — deletes event/usage logs, proposal queue, improve history, and workflow run history |
|
|
43
|
+
| `logs.db` | Structured, high-volume task/run log lines (`{ts, task_id, run_id, stream, level, line}`), joined to `state.db`'s `task_history` rows by `task_id@started_at`. Kept separate from `state.db` because log lines are append-only and freely purgeable, unlike durable state | Yes — log lines are regenerable per run; deleting loses historical run output only |
|
|
42
44
|
| `akm.lock` | Inter-process write lock | Yes — recreated automatically |
|
|
43
45
|
| `akm.lock.lck` | Lock write sentinel | Yes — recreated automatically |
|
|
44
46
|
|
|
@@ -52,7 +54,7 @@ Everything in the cache is regenerable. It is safe to delete the entire cache di
|
|
|
52
54
|
|---|---|---|
|
|
53
55
|
| `config-backups/config-<timestamp>.json` | Pre-save config snapshots (5 retained; owner-only permissions — file `0600`, dir `0700`, since 08-F4) | Yes |
|
|
54
56
|
| `config-backups/config.latest.json` | Latest backup alias (owner-only `0600`) | Yes |
|
|
55
|
-
| `registry/` | Downloaded registry tarballs (stash packages from npm, GitHub, etc.) | Yes — re-downloaded on next `akm add` or `akm update` |
|
|
57
|
+
| `registry/` | Downloaded registry tarballs (stash packages from npm, GitHub, etc.) | Yes — re-downloaded on next `akm bundle add` or `akm bundle update` |
|
|
56
58
|
| `registry-index/` | Legacy per-URL JSON cache (v0.7 artifact) | Yes — fully replaced by `index.db` in 0.8.0 |
|
|
57
59
|
| `semantic-status.json` | Semantic index build status marker | Yes |
|
|
58
60
|
| `bin/` | Downloaded AKM binary cache (used by `akm upgrade`) | Yes |
|
|
@@ -65,10 +67,10 @@ Override: set `AKM_CACHE_DIR` or `XDG_CACHE_HOME`.
|
|
|
65
67
|
|
|
66
68
|
| Path | Contents | Safe to delete? |
|
|
67
69
|
|---|---|---|
|
|
68
|
-
| `<stash>/` | All your asset files: agents, skills, commands, knowledge, workflows, memories, env files, secrets,
|
|
70
|
+
| `<stash>/` | All your asset files: agents, skills, commands, knowledge, instructions, workflows, scripts, memories, env files, secrets, lessons, tasks, sessions, facts, plus any bundle-adapter-owned content (e.g. `llm-wiki` bundle roots — not an AKM `PLACEMENT_SPECS` type) | **No** — this is YOUR data |
|
|
69
71
|
| `<stash>/.akm/` | Hidden AKM metadata (v0.7 proposals, legacy runs) | Caution — check for pending proposals first |
|
|
70
72
|
|
|
71
|
-
Override: set `
|
|
73
|
+
Override: set `AKM_BUNDLE_DIR`, or configure `bundles`/`defaultBundle` in `config.json` (the top-level `stashDir` key from 0.8 is retired and rejected in 0.9 — see [Configuration](configuration.md#bundles-and-write-target)).
|
|
72
74
|
|
|
73
75
|
---
|
|
74
76
|
|
|
@@ -92,54 +94,118 @@ An append-only log of every mutating action you perform with AKM. Events are sto
|
|
|
92
94
|
- API keys or secrets (config is not stored in events)
|
|
93
95
|
- Personal information
|
|
94
96
|
|
|
95
|
-
**Retention:** Events older than 90 days are purged automatically when `akm improve` runs its maintenance pass.
|
|
97
|
+
**Retention:** Events older than 90 days are purged automatically when `akm improve` runs its maintenance pass. The window is `improve.eventRetentionDays` (default `90`; set `0` to disable), enforced by `purgeOldEvents()`.
|
|
96
98
|
|
|
97
|
-
**Full event type list
|
|
99
|
+
**Full event type list.** `EventType` (`src/core/events.ts`) is an open
|
|
100
|
+
string union — new types can be added without a schema bump — so this is
|
|
101
|
+
the set of types the code actually emits at HEAD (verified against every
|
|
102
|
+
`appendEvent(...)` call site, 2026-07-27), grouped by area:
|
|
103
|
+
|
|
104
|
+
*Asset lifecycle*
|
|
98
105
|
|
|
99
106
|
| Event type | When emitted | Key metadata fields |
|
|
100
107
|
|---|---|---|
|
|
101
|
-
| `add` | `akm add <source>` | `ref`, `provider` |
|
|
102
|
-
| `remove` | `akm remove <source>` | `ref` |
|
|
103
|
-
| `update` | `akm update [source]` | `ref` |
|
|
108
|
+
| `add` | `akm bundle add <source>` | `ref`, `provider` |
|
|
109
|
+
| `remove` | `akm bundle remove <source>` | `ref` |
|
|
110
|
+
| `update` | `akm bundle update [source]` | `ref` |
|
|
104
111
|
| `remember` | `akm remember <text>` | `ref` |
|
|
105
112
|
| `import` | `akm import <file>` | `ref` |
|
|
106
|
-
| `
|
|
107
|
-
|
|
113
|
+
| `rekey` | `scripts/rekey-asset-ref.ts` moved at least one row onto a renamed asset's new ref — nothing is emitted on a no-op re-run | `ref` (the new ref); metadata `{from, to, changed}` (row counts only) |
|
|
114
|
+
|
|
115
|
+
*Search, retrieval, sync*
|
|
116
|
+
|
|
117
|
+
| Event type | When emitted | Key metadata fields |
|
|
118
|
+
|---|---|---|
|
|
108
119
|
| `search` | `akm search <query>` | `query`, `source`, `signal` |
|
|
109
120
|
| `curate` | `akm curate <prompt>` | `query`, `source` |
|
|
110
121
|
| `show` | `akm show <ref>` | `ref`, `type`, `name` |
|
|
111
122
|
| `select` | `akm show` after a search returning the same ref | `ref`, `entryId` |
|
|
123
|
+
| `feedback` | `akm feedback <ref>` | `signal` (positive/negative) |
|
|
124
|
+
| `sync` | `akm sync` (renamed from `save` in 0.9.0; historical rows keep `save`, and `akm log --type save`/`--type sync` are synonyms on read) | `ref` |
|
|
125
|
+
| `stash_synced` | `akm improve`'s internal auto-sync pass (the `sync.push` feature), **distinct from** the `akm sync` command above | `committed`, `pushed`, `skipped`, `reason` |
|
|
126
|
+
| `env_access` | `akm env run <name> -- <command>` (audit trail: key **names** only, values never recorded) | `ref`, `keys` |
|
|
127
|
+
| `secret_access` | `akm secret run <ref> <VAR> -- <command>` (audit trail: var **name** only, value never recorded) | `ref`, `var` |
|
|
128
|
+
|
|
129
|
+
*Proposals*
|
|
130
|
+
|
|
131
|
+
| Event type | When emitted | Key metadata fields |
|
|
132
|
+
|---|---|---|
|
|
112
133
|
| `promoted` | `akm proposal accept <id>` | `ref` |
|
|
113
134
|
| `rejected` | `akm proposal reject <id>` | `ref` |
|
|
135
|
+
| `proposal_reverted` | `akm proposal revert <id>` (undoes a previously-accepted proposal, restores prior content) | `ref` |
|
|
136
|
+
| `proposal_expired` | A pending proposal aged past the retention window and was auto-expired | `ref` |
|
|
137
|
+
| `proposal_expiration_pass` | Summary emitted once per `akm improve` maintenance run after per-proposal `proposal_expired` events | expiry counts |
|
|
138
|
+
| `proposal_orphan_purge` | Stale proposals whose target asset no longer exists on disk, pruned by improve maintenance | `checked`, `rejected` |
|
|
139
|
+
| `proposal_creation_rejected` | `createProposal()` validation failed before write | `ref`, `reason`, `source` |
|
|
140
|
+
| `triage_drained` | `akm proposal drain` run summary | `promoted`, `rejected`, `deferredByReason`, `skippedByCap`, `policy`, `applyMode` |
|
|
141
|
+
| `triage_deferred` | `akm proposal drain` left items unresolved after the (optional) judgment tier | `deferred`, `deferredByReason`, `reason` |
|
|
142
|
+
|
|
143
|
+
*`akm improve` pipeline*
|
|
144
|
+
|
|
145
|
+
| Event type | When emitted | Key metadata fields |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `improve_invoked` | Start of an `akm improve` run | `ref` (scope); `strategy`, `scope`, `dryRun`, `eligibleCount` |
|
|
148
|
+
| `improve_completed` | `akm improve` run finished | run stats |
|
|
149
|
+
| `improve_failed` | `akm improve` run errored | error |
|
|
150
|
+
| `improve_skipped` | Asset skipped by cooldown or budget | `ref`, `reason` |
|
|
151
|
+
| `improve_lock_recovered` | Stale improve lock cleared at startup | |
|
|
152
|
+
| `improve_review_needed` | `akm feedback` pushed a high-utility asset's utility below the review threshold — a review-needed escalation is recorded (not a proposal, so it can't accidentally overwrite the asset) | `ref`, `previousUtility`, `nextUtility` |
|
|
114
153
|
| `reflect_invoked` | Start of reflect phase in `akm improve` | `ref`, engine |
|
|
115
154
|
| `reflect_completed` | Reflect phase produced a proposal | `ref` |
|
|
116
155
|
| `improve_reflect_outcome` | Per-asset reflect result | `ref`, `ok`, `durationMs`, `reason` |
|
|
117
|
-
| `propose_invoked` | `akm
|
|
118
|
-
| `distill_invoked` | `akm distill` | |
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
121
|
-
| `
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
129
|
-
| `
|
|
130
|
-
| `
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
156
|
+
| `propose_invoked` | `akm proposal new` | `ref` |
|
|
157
|
+
| `distill_invoked` | Distill phase inside the `akm improve`/`akm proposal new` pipeline. **`akm distill` is not a CLI command** — there is no standalone verb by that name | `ref`, outcome |
|
|
158
|
+
| `consolidate_completed` | `akm improve`'s consolidate pass processed at least one memory | `ref` (`memories/_consolidation`) |
|
|
159
|
+
| `extract_invoked` | `akm proposal extract --type <harness>` / `--auto`, or improve-stage session extraction | `outcome`, `sessionId`, `harness` |
|
|
160
|
+
| `extract_triaged` | The pre-LLM extract triage gate evaluated at least one session | `evaluated`, `passed`, `triagedOut`, `sourceRun` (aggregated) |
|
|
161
|
+
| `schema_repair_invoked` | The schema-repair pass inside `akm improve` (`runSchemaRepairPass`) attempts to patch missing frontmatter on an asset that failed schema validation. **There is no `akm lint --repair` flag** — `lint` has `--fix`/`--auto-fix`, unrelated to this event | `ref`, outcome |
|
|
162
|
+
| `proactive_selected` | The proactive-maintenance selector runs (once per `akm improve` run) | `count`, `dueTotal`, `neverReflected` (aggregated) |
|
|
163
|
+
| `improve_replay_selected` | Bounded replay-budget selection ran | `count`, `budget`, `convergedSkipped`, `candidatePool` (aggregated) |
|
|
164
|
+
| `improve_salience_first_run` | First improve run with no pre-existing salience baseline to compare against | `candidateCount`, `note` |
|
|
165
|
+
| `improve_salience_rank_change` | Stash-wide rank-change report, from the second improve run onward | `stashSize`, `totalChanged`, `forgettingCandidates`, `topDrops` |
|
|
166
|
+
| `outcome_proxy_inverted` | Proxy-adequacy tripwire: `outcome_score` correlates *negatively* with accepted-change rate (corr < −0.3) | `correlation`, `n` |
|
|
167
|
+
| `outcome_proxy_dead` | Proxy-adequacy tripwire: `outcome_score` is statistically unrelated to accepted-change rate (\|corr\| < 0.1, n ≥ 500) | `correlation`, `n` |
|
|
168
|
+
| `collapse_detector_alert` | The collapse/churn detector trips an alert rule during an improve cycle | `kind` (collapse-recall\|collapse-entropy\|collapse-shrink\|churn\|merge-floor), `detail`, `metrics`, `canarySetId`, `runId` |
|
|
169
|
+
| `events_purged` | Old events deleted by improve maintenance (90-day default retention) | `purgedCount`, `retentionDays` |
|
|
170
|
+
| `improve_runs_purged` | Old `improve_runs` rows deleted by improve maintenance (same retention window as events) | `purgedCount`, `retentionDays` |
|
|
171
|
+
| `improve_cycle_metrics_purged` | Old `improve_cycle_metrics` rows (365-day retention) deleted by improve maintenance | `purgedCount`, `retentionDays` |
|
|
172
|
+
| `task_logs_purged` | Old scheduled-task log files purged by improve maintenance | |
|
|
173
|
+
|
|
174
|
+
*Workflows*
|
|
175
|
+
|
|
176
|
+
| Event type | When emitted | Key metadata fields |
|
|
177
|
+
|---|---|---|
|
|
178
|
+
| `workflow_started` | `akm workflow run <ref>` creates a run (including native workflow task execution) | `ref`, `runId` |
|
|
179
|
+
| `workflow_step_completed` | The run completion path records a genuine `completed` transition | `ref`, `runId`, `stepId`, `status` |
|
|
180
|
+
| `workflow_step_updated` | The run completion path records a non-`completed` transition (`failed`/`skipped`/`blocked`) | `ref`, `runId`, `stepId`, `status` |
|
|
181
|
+
| `workflow_finished` | A `run` transition makes the run terminal | `ref`, `runId` |
|
|
182
|
+
| `workflow_abandoned` | `akm workflow abandon` | `runId` only — never the workflow title |
|
|
183
|
+
| `workflow_unit_started` | A unit begins through `akm workflow run` | ids/status only — never unit instructions or results |
|
|
184
|
+
| `workflow_unit_finished` | A workflow unit terminates | ids/status/tokens only — never unit instructions or results |
|
|
185
|
+
|
|
186
|
+
*LLM usage and health*
|
|
187
|
+
|
|
188
|
+
| Event type | When emitted | Key metadata fields |
|
|
189
|
+
|---|---|---|
|
|
190
|
+
| `llm_usage` | Per-attempt LLM call usage telemetry (#576) | model provenance, terminal outcome, duration, optional token usage |
|
|
191
|
+
| `llm_usage_summary` | The owning LLM telemetry sink's terminal-record count marker | `expectedTerminalRecords` |
|
|
192
|
+
| `health_probe` | `akm health`'s state.db round-trip write/read probe. **Not durably retained**: the row is inserted then deleted within the same connection once the round trip is confirmed, so the net effect on the `events` table is always zero rows | n/a (ephemeral) |
|
|
133
193
|
|
|
134
194
|
### 2. Usage Events Table
|
|
135
195
|
|
|
136
|
-
`usage_events` is the local analytical record behind
|
|
137
|
-
|
|
196
|
+
`usage_events` is the local analytical record behind utility ranking,
|
|
197
|
+
retrieval-demand counts, GRR, and real-query eval generation (0.9.0: its CLI
|
|
198
|
+
read surface, `akm history`, was removed — the table itself and everything
|
|
199
|
+
below still applies). It stores
|
|
138
200
|
search/curate queries, per-entry search impressions, explicit show/curate
|
|
139
201
|
engagement, feedback signals, stable refs, and timestamps. It never leaves the
|
|
140
202
|
machine unless you explicitly copy the database or send derived content to a
|
|
141
203
|
configured endpoint.
|
|
142
204
|
|
|
205
|
+
Successful `search`, `curate`, and `show` commands record usage by default.
|
|
206
|
+
Pass `--no-track-usage` to any of those commands to leave local usage events
|
|
207
|
+
and ranking signals unchanged.
|
|
208
|
+
|
|
143
209
|
Every runtime writer stamps provenance as `user`, `improve`, `task`, `audit`, or
|
|
144
210
|
`unknown`. Direct interactive CLI traffic defaults to `user`; internal improve,
|
|
145
211
|
scheduled-task, and eval subprocesses preserve their stamp across nested
|
|
@@ -167,15 +233,15 @@ use `control: false` and may contain:
|
|
|
167
233
|
|
|
168
234
|
Attribution metadata contains fully-qualified refs and graph identifiers, never
|
|
169
235
|
asset bodies or provenance content. It is not added to `search`, `curate`, or
|
|
170
|
-
`show` result payloads
|
|
171
|
-
`akm history
|
|
236
|
+
`show` result payloads; there is no CLI surface that reads it back (0.9.0:
|
|
237
|
+
`akm history` was removed). The full index still applies its existing
|
|
172
238
|
higher-priority-wins `(type, entry.name)` dedup across sources: attribution
|
|
173
239
|
source-qualifies every indexed row but does not invent a lower-priority row for
|
|
174
240
|
an identity that production indexing omitted.
|
|
175
241
|
|
|
176
242
|
### 3. Proposals Table
|
|
177
243
|
|
|
178
|
-
The proposal queue: pending, accepted, and rejected improvement proposals for your stash assets. Generated by `akm improve`, `akm
|
|
244
|
+
The proposal queue: pending, accepted, and rejected improvement proposals for your stash assets. Generated by `akm improve`, `akm proposal new`, and related proposal-producing flows.
|
|
179
245
|
|
|
180
246
|
Contents:
|
|
181
247
|
- Proposal UUID (primary key)
|
|
@@ -187,7 +253,7 @@ Contents:
|
|
|
187
253
|
|
|
188
254
|
### 4. Task History Table
|
|
189
255
|
|
|
190
|
-
A record of scheduled task runs (from `akm
|
|
256
|
+
A record of scheduled task runs (from `akm task`):
|
|
191
257
|
- Task ID, status, start/end times
|
|
192
258
|
- Log file path (the log content stays in `$CACHE/tasks/logs/`)
|
|
193
259
|
|
|
@@ -199,16 +265,13 @@ A record of scheduled task runs (from `akm tasks`):
|
|
|
199
265
|
|
|
200
266
|
```sh
|
|
201
267
|
# List recent events
|
|
202
|
-
akm log
|
|
203
|
-
|
|
204
|
-
# Stream live events (tail)
|
|
205
|
-
akm log tail
|
|
268
|
+
akm log
|
|
206
269
|
|
|
207
270
|
# Filter by type
|
|
208
|
-
akm log
|
|
271
|
+
akm log --type search --limit 20
|
|
209
272
|
|
|
210
273
|
# Filter by asset ref
|
|
211
|
-
akm log
|
|
274
|
+
akm log --ref skills/code-review
|
|
212
275
|
```
|
|
213
276
|
|
|
214
277
|
### Inspect proposals
|
|
@@ -234,8 +297,8 @@ rm -rf ~/.cache/akm/registry/
|
|
|
234
297
|
rm -rf ~/.cache/akm/config-backups/
|
|
235
298
|
|
|
236
299
|
# Delete the events log from state.db (non-reversible)
|
|
237
|
-
# There is no akm CLI command to do this directly
|
|
238
|
-
# Use SQLite directly:
|
|
300
|
+
# There is no akm CLI command to do this directly (`akm log` only exposes
|
|
301
|
+
# `list`/`tail`, no delete/purge verb). Use SQLite directly:
|
|
239
302
|
sqlite3 ~/.local/share/akm/state.db "DELETE FROM events;"
|
|
240
303
|
|
|
241
304
|
# Delete all proposals
|
|
@@ -264,7 +327,7 @@ You can redirect any AKM directory to a custom path:
|
|
|
264
327
|
| `AKM_SQLITE_JOURNAL_MODE` | SQLite journal mode: `WAL` (default), `DELETE`, or `TRUNCATE`. Use `DELETE`/`TRUNCATE` on network filesystems (NFS/SMB) where WAL is impossible. When left at the `WAL` default, akm auto-detects a network FS for the data dir and falls back to `DELETE`. |
|
|
265
328
|
| `AKM_STATE_DIR` | State directory (`~/.local/state/akm/`) |
|
|
266
329
|
| `AKM_CACHE_DIR` | Cache directory (`~/.cache/akm/`) |
|
|
267
|
-
| `
|
|
330
|
+
| `AKM_BUNDLE_DIR` | Default stash directory (`~/akm/`) |
|
|
268
331
|
| `XDG_CONFIG_HOME` | XDG base — akm appends `/akm` |
|
|
269
332
|
| `XDG_DATA_HOME` | XDG base — akm appends `/akm` |
|
|
270
333
|
| `XDG_STATE_HOME` | XDG base — akm appends `/akm` |
|