akm-cli 0.10.261012-beta → 0.10.261014-beta
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 +710 -3
- package/README.md +15 -0
- package/SECURITY.md +11 -10
- package/STABILITY.md +47 -51
- package/dist/assets/hints/cli-hints-full.md +21 -19
- package/dist/assets/hints/cli-hints-short.md +3 -4
- package/dist/assets/opencode/akm-plugin.js +177 -0
- package/dist/assets/stash-skeleton/README.md +1 -1
- package/dist/assets/tasks/core/improve.yml +1 -1
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
- package/dist/assets/ui/config.js +27 -10
- package/dist/assets/workflows/workflow-template.md +2 -2
- package/dist/cli/clack.js +3 -1
- package/dist/cli/selection.js +33 -0
- package/dist/cli/shared.js +14 -1
- package/dist/cli/unknown-flags.js +6 -37
- package/dist/cli.js +69 -48
- package/dist/commands/agent/agent-dispatch.js +17 -25
- package/dist/commands/agent/contribute-cli.js +9 -8
- package/dist/commands/command/command-cli.js +4 -8
- package/dist/commands/command/command-execution.js +25 -39
- package/dist/commands/command/execution-source-loader.js +10 -14
- package/dist/commands/completions.js +1 -1
- package/dist/commands/config-cli.js +14 -5
- package/dist/commands/env/child-env.js +12 -14
- package/dist/commands/env/env-binding.js +47 -58
- package/dist/commands/env/env-cli.js +22 -24
- package/dist/commands/env/env.js +10 -58
- package/dist/commands/env/secret-cli.js +11 -29
- package/dist/commands/env/secret.js +3 -10
- package/dist/commands/health/checks.js +10 -849
- package/dist/commands/health/connections-and-harnesses-check.js +109 -0
- package/dist/commands/health/egress.js +3 -3
- package/dist/commands/health/html-report.js +9 -10
- package/dist/commands/health/plugin-staleness.js +18 -11
- package/dist/commands/health/report-view-model.js +16 -12
- package/dist/commands/health/scheduler-binary.js +1 -1
- package/dist/commands/health/semantic-search-check.js +85 -0
- package/dist/commands/health/type-directory-check.js +0 -3
- package/dist/commands/health.js +30 -42
- package/dist/commands/improve/consolidate/pair-pass.js +10 -25
- package/dist/commands/improve/consolidate.js +10 -15
- package/dist/commands/improve/distill.js +5 -17
- package/dist/commands/improve/eligibility.js +1 -3
- package/dist/commands/improve/execution.js +37 -40
- package/dist/commands/improve/extract-cli.js +6 -11
- package/dist/commands/improve/extract-prompt.js +2 -2
- package/dist/commands/improve/extract.js +67 -97
- package/dist/commands/improve/improve-cli.js +22 -128
- package/dist/commands/improve/improve-report.js +1 -1
- package/dist/commands/improve/improve-strategies.js +25 -108
- package/dist/commands/improve/improve.js +10 -14
- package/dist/commands/improve/loop-stages.js +3 -0
- package/dist/commands/improve/memory/memory-improve.js +1 -1
- package/dist/commands/improve/preparation.js +8 -13
- package/dist/commands/improve/reflect.js +203 -332
- package/dist/commands/improve/retrieval-scope.js +1 -1
- package/dist/commands/improve/session-asset.js +3 -2
- package/dist/commands/improve/stage.js +87 -115
- package/dist/commands/lint/base-linter.js +3 -3
- package/dist/commands/lint/env-key-rules.js +7 -6
- package/dist/commands/lint/index.js +3 -3
- package/dist/commands/models-cli.js +103 -63
- package/dist/commands/proposal/drain.js +26 -39
- package/dist/commands/proposal/proposal-cli.js +14 -18
- package/dist/commands/proposal/propose-cli.js +4 -2
- package/dist/commands/proposal/propose.js +37 -64
- package/dist/commands/proposal/repository.js +17 -17
- package/dist/commands/proposal/validators/proposal-validators.js +3 -6
- package/dist/commands/read/curate.js +10 -6
- package/dist/commands/read/registry-search.js +2 -48
- package/dist/commands/read/search-cli.js +1 -8
- package/dist/commands/read/search.js +5 -6
- package/dist/commands/read/show.js +6 -29
- package/dist/commands/remember.js +25 -40
- package/dist/commands/sources/add-cli.js +8 -63
- package/dist/commands/sources/bundle-cli.js +8 -9
- package/dist/commands/sources/bundle-config-ops.js +2 -2
- package/dist/commands/sources/info.js +12 -1
- package/dist/commands/sources/init.js +1 -1
- package/dist/commands/sources/installed-stashes.js +119 -63
- package/dist/commands/sources/migration-help.js +1 -1
- package/dist/commands/sources/plugin-upgrade.js +8 -15
- package/dist/commands/sources/schema-repair.js +4 -10
- package/dist/commands/sources/source-add.js +2 -2
- package/dist/commands/sources/source-clone.js +31 -7
- package/dist/commands/sources/source-manage.js +4 -4
- package/dist/commands/targets.js +175 -0
- package/dist/commands/tasks/explain.js +104 -69
- package/dist/commands/tasks/tasks-cli.js +9 -11
- package/dist/commands/tasks/tasks.js +75 -97
- package/dist/commands/ui/api.js +11 -3
- package/dist/commands/ui/redact.js +5 -31
- package/dist/commands/ui/workspace-actions.js +1 -1
- package/dist/commands/workflow/plan.js +48 -9
- package/dist/commands/workflow-cli.js +40 -45
- package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
- package/dist/core/adapter/adapters/akm-adapter.js +36 -41
- package/dist/core/adapter/adapters/akm-lint.js +10 -12
- package/dist/core/adapter/adapters/akm-metadata.js +2 -2
- package/dist/core/adapter/adapters/akm-task-adapter.js +8 -9
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +5 -5
- package/dist/core/adapter/adapters/claude-adapter.js +1 -1
- package/dist/core/adapter/adapters/dotenv-adapter.js +7 -6
- package/dist/core/adapter/adapters/generic-files-adapter.js +5 -5
- package/dist/core/adapter/adapters/index.js +3 -4
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +12 -14
- package/dist/core/adapter/adapters/okf-adapter.js +8 -10
- package/dist/core/adapter/adapters/opencode-adapter.js +1 -1
- package/dist/core/adapter/adapters/shared.js +3 -3
- package/dist/core/adapter/adapters/tool-dir-shared.js +7 -25
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +3 -3
- package/dist/core/adapter/detect-adapter.js +1 -1
- package/dist/core/adapter/execution-source.js +13 -35
- package/dist/core/adapter/registry.js +1 -1
- package/dist/core/adapter/validate-context.js +2 -4
- package/dist/core/asset/asset-placement.js +1 -1
- package/dist/core/asset/asset-ref.js +3 -3
- package/dist/core/asset/resolve-ref.js +5 -0
- package/dist/core/bundle-rename.js +12 -4
- package/dist/core/closest-match.js +37 -0
- package/dist/core/common.js +37 -57
- package/dist/core/config/config-io.js +26 -18
- package/dist/core/config/config-schema.js +19 -106
- package/dist/core/config/config-sources.js +3 -3
- package/dist/core/config/config-types.js +4 -4
- package/dist/core/config/config-walker.js +50 -77
- package/dist/core/config/config.js +438 -109
- package/dist/core/config/convert-engine-references.js +114 -0
- package/dist/core/config/convert-engines-shared.js +40 -0
- package/dist/core/config/convert-engines.js +300 -0
- package/dist/core/config/convert-models-overlay.js +137 -0
- package/dist/core/config/credentials.js +304 -0
- package/dist/core/config/engine-semantics.js +3 -3
- package/dist/core/config/migrate-keys.js +222 -0
- package/dist/core/config/model-aliases.js +37 -0
- package/dist/core/config/models-file.js +34 -0
- package/dist/core/config/retired-engines.js +53 -0
- package/dist/core/config/schema/connections.js +41 -0
- package/dist/core/config/schema/embedding.js +2 -2
- package/dist/core/config/schema/harnesses.js +41 -0
- package/dist/core/config/schema/improve-processes.js +9 -28
- package/dist/core/config/schema/improve.js +36 -1
- package/dist/core/config/schema/index-config.js +18 -20
- package/dist/core/config/schema/primitives.js +42 -17
- package/dist/core/config/schema/search.js +6 -11
- package/dist/core/config/schema/sources-bundles.js +9 -9
- package/dist/core/config/schema/workflow.js +2 -6
- package/dist/core/config/unusable-entries.js +66 -0
- package/dist/core/content-safety.js +3 -6
- package/dist/core/endpoint-url.js +47 -0
- package/dist/core/env-secret-ref.js +84 -73
- package/dist/core/errors.js +10 -16
- package/dist/core/extra-params.js +3 -3
- package/dist/core/improve-result.js +8 -9
- package/dist/core/json-schema.js +1 -1
- package/dist/core/lesson-lint.js +1 -1
- package/dist/core/llm-inference.js +80 -0
- package/dist/core/parse.js +2 -2
- package/dist/core/paths.js +33 -10
- package/dist/core/recognition-util.js +8 -10
- package/dist/core/redaction.js +94 -55
- package/dist/core/ref-token.js +82 -0
- package/dist/core/secret-value.js +14 -0
- package/dist/core/state/migrations.js +17 -22
- package/dist/core/structured.js +2 -68
- package/dist/core/subprocess.js +63 -22
- package/dist/core/type-presentation.js +10 -14
- package/dist/core/write-source.js +20 -4
- package/dist/execution/input-contract.js +3 -6
- package/dist/execution/notices.js +49 -0
- package/dist/execution/resolved-request.js +24 -40
- package/dist/execution/source.js +21 -45
- package/dist/execution/target-ref.js +2 -2
- package/dist/indexer/bundle-identity-guard.js +6 -5
- package/dist/indexer/ensure-index.js +1 -1
- package/dist/indexer/index-writer-lock.js +1 -1
- package/dist/indexer/indexer.js +46 -42
- package/dist/indexer/installations.js +12 -22
- package/dist/indexer/lookup/adapter-concept-owner.js +40 -14
- package/dist/indexer/materialize-embeddings.js +20 -16
- package/dist/indexer/passes/memory-inference.js +21 -50
- package/dist/indexer/passes/metadata.js +5 -5
- package/dist/indexer/scan/doc-to-entry.js +1 -1
- package/dist/indexer/scan/drain-dir.js +9 -11
- package/dist/indexer/search/db-search.js +9 -7
- package/dist/indexer/search/search-source.js +42 -22
- package/dist/indexer/usage/usage-events.js +2 -3
- package/dist/indexer/walk/index-context.js +2 -1
- package/dist/indexer/walk/matchers.js +3 -11
- package/dist/indexer/walk/path-resolver.js +13 -68
- package/dist/indexer/walk/walker.js +32 -26
- package/dist/integrations/agent/akm-read-tools.js +81 -0
- package/dist/integrations/agent/config.js +1 -1
- package/dist/integrations/agent/detect.js +32 -36
- package/dist/integrations/agent/execution.js +130 -428
- package/dist/integrations/agent/index.js +1 -1
- package/dist/integrations/agent/profiles.js +24 -28
- package/dist/integrations/agent/prompts.js +17 -30
- package/dist/integrations/agent/request-lowering.js +67 -101
- package/dist/integrations/agent/resolution.js +332 -0
- package/dist/integrations/agent/runner-dispatch.js +156 -181
- package/dist/integrations/agent/runner.js +20 -70
- package/dist/integrations/agent/runtime-port.js +4 -0
- package/dist/integrations/agent/runtime.js +10 -0
- package/dist/integrations/agent/spawn.js +65 -190
- package/dist/integrations/harnesses/aider/index.js +19 -39
- package/dist/integrations/harnesses/amazonq/index.js +17 -32
- package/dist/integrations/harnesses/claude/index.js +59 -28
- package/dist/integrations/harnesses/claude/session-log.js +7 -5
- package/dist/integrations/harnesses/codex/index.js +19 -31
- package/dist/integrations/harnesses/copilot/index.js +17 -35
- package/dist/integrations/harnesses/gemini/index.js +18 -34
- package/dist/integrations/harnesses/harness.js +36 -0
- package/dist/integrations/harnesses/index.js +20 -51
- package/dist/integrations/harnesses/opencode/agent-builder.js +132 -100
- package/dist/integrations/harnesses/opencode/index.js +11 -33
- package/dist/integrations/harnesses/opencode/roots.js +50 -0
- package/dist/integrations/harnesses/opencode/runtime/binary.js +206 -0
- package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
- package/dist/integrations/harnesses/opencode/runtime/index.js +177 -0
- package/dist/integrations/harnesses/opencode/runtime/tar.js +107 -0
- package/dist/integrations/harnesses/opencode/session-log-v1.js +15 -7
- package/dist/integrations/harnesses/opencode/session-log-v2.js +72 -48
- package/dist/integrations/harnesses/opencode/session-log.js +58 -137
- package/dist/integrations/harnesses/opencode/version.js +34 -53
- package/dist/integrations/harnesses/openhands/index.js +13 -37
- package/dist/integrations/harnesses/pi/index.js +21 -32
- package/dist/integrations/lockfile.js +1 -1
- package/dist/integrations/session-logs/index.js +11 -31
- package/dist/llm/client.js +93 -111
- package/dist/llm/embedder.js +19 -34
- package/dist/llm/embedders/connection.js +31 -0
- package/dist/llm/embedders/local-model-files.js +56 -0
- package/dist/llm/embedders/local.js +146 -115
- package/dist/llm/embedders/remote.js +26 -23
- package/dist/llm/embedders/types.js +1 -1
- package/dist/llm/index-passes.js +33 -39
- package/dist/llm/memory-infer.js +67 -77
- package/dist/llm/model-list.js +35 -0
- package/dist/llm/rerank-client.js +8 -14
- package/dist/llm/structured-call.js +45 -99
- package/dist/llm/structured.js +60 -0
- package/dist/output/renderers.js +2 -8
- package/dist/output/shapes/helpers.js +18 -44
- package/dist/output/shapes/passthrough.js +1 -0
- package/dist/output/shapes.js +1 -7
- package/dist/output/text/command-format.js +41 -39
- package/dist/output/text/health-format.js +8 -2
- package/dist/output/text/helpers.js +1 -1
- package/dist/output/text/migrate.js +12 -0
- package/dist/output/text/models.js +3 -2
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/show-directives.js +16 -28
- package/dist/output/text/show-format.js +0 -2
- package/dist/output/text/targets-table.js +70 -0
- package/dist/output/text/workflow-format.js +44 -15
- package/dist/output/text.js +1 -1
- package/dist/registry/providers/skills-sh.js +1 -28
- package/dist/registry/providers/static-index.js +1 -71
- package/dist/runtime.js +6 -2
- package/dist/scripts/akm-migrate-node.js +47095 -44905
- package/dist/scripts/akm-migrate.js +46946 -44755
- package/dist/setup/detect.js +28 -273
- package/dist/setup/endpoint.js +36 -0
- package/dist/setup/semantic-assets.js +13 -19
- package/dist/setup/setup-flags.js +77 -0
- package/dist/setup/setup-plan.js +144 -0
- package/dist/setup/setup.js +134 -358
- package/dist/setup/steps/connection-shared.js +49 -101
- package/dist/setup/steps/connection.js +121 -524
- package/dist/setup/steps/embeddings.js +151 -0
- package/dist/setup/steps/harnesses.js +118 -0
- package/dist/setup/steps/platforms.js +2 -81
- package/dist/setup/steps/tasks.js +1 -2
- package/dist/setup/steps.js +10 -0
- package/dist/setup/summary.js +67 -0
- package/dist/sources/freshness.js +16 -21
- package/dist/sources/providers/git-provider.js +2 -9
- package/dist/sources/providers/provider-utils.js +13 -5
- package/dist/sources/resolve.js +12 -16
- package/dist/sources/snapshot-fetchers/robots.js +11 -12
- package/dist/sources/snapshot-fetchers/secret-seam.js +2 -4
- package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
- package/dist/sources/snapshot-fetchers/x.js +1 -1
- package/dist/standalone/onnxruntime-library.js +52 -0
- package/dist/storage/repositories/improve-ledger-repository.js +1 -1
- package/dist/storage/repositories/improve-runs-repository.js +0 -13
- package/dist/storage/repositories/index-entries-repository.js +2 -2
- package/dist/storage/repositories/proposals-repository.js +2 -2
- package/dist/storage/repositories/task-history-repository.js +2 -2
- package/dist/storage/repositories/workflow-runs-repository.js +44 -129
- package/dist/storage/sqlite-read-snapshot.js +33 -29
- package/dist/tasks/embedded.js +1 -1
- package/dist/tasks/log-redaction.js +7 -119
- package/dist/tasks/prepare/prepare-support.js +8 -7
- package/dist/tasks/prepare/prepare.js +8 -9
- package/dist/tasks/prepare/script-capture.js +9 -25
- package/dist/tasks/run/attempt-lifecycle.js +17 -35
- package/dist/tasks/run/load-task.js +54 -27
- package/dist/tasks/run/run-command-task.js +15 -10
- package/dist/tasks/run/run-native-task.js +8 -21
- package/dist/tasks/run/run-task.js +5 -8
- package/dist/tasks/run/run-workflow-task.js +14 -21
- package/dist/tasks/run/task-history.js +9 -17
- package/dist/tasks/run/task-log.js +1 -5
- package/dist/tasks/scheduler-invocation.js +13 -18
- package/dist/tasks/scheduler-sync.js +0 -1
- package/dist/tasks/source/bounded-document.js +31 -117
- package/dist/tasks/source/parse-task-source.js +0 -1
- package/dist/tasks/source/project-v4.js +5 -3
- package/dist/tasks/source/task-input-diagnostics.js +3 -4
- package/dist/tasks/source/task-source-v4.js +48 -72
- package/dist/tasks/source-v3.js +2 -5
- package/dist/tasks/task-run-reserved-flags.js +1 -2
- package/dist/workflows/authoring/authoring.js +2 -7
- package/dist/workflows/compile.js +1 -15
- package/dist/workflows/concurrency-policy.js +4 -4
- package/dist/workflows/exec/child-workflow.js +1 -4
- package/dist/workflows/exec/dispatch-redaction.js +35 -86
- package/dist/workflows/exec/environment.js +13 -77
- package/dist/workflows/exec/exec-unit.js +14 -55
- package/dist/workflows/exec/frozen-judge.js +26 -28
- package/dist/workflows/exec/native-executor.js +126 -71
- package/dist/workflows/exec/run-workflow.js +38 -42
- package/dist/workflows/exec/step-work.js +13 -17
- package/dist/workflows/exec/unit-dispatch.js +7 -21
- package/dist/workflows/freeze/environment.js +14 -119
- package/dist/workflows/freeze/freeze.js +14 -33
- package/dist/workflows/freeze/step-values.js +6 -13
- package/dist/workflows/freeze/targets/child-workflow.js +3 -5
- package/dist/workflows/freeze/targets/command.js +9 -15
- package/dist/workflows/freeze/targets/shell.js +0 -3
- package/dist/workflows/freeze/task-bindings.js +0 -1
- package/dist/workflows/parser.js +50 -59
- package/dist/workflows/plan.js +8 -2
- package/dist/workflows/renderer.js +83 -9
- package/dist/workflows/resource-limits.js +2 -2
- package/dist/workflows/runtime/run-plan.js +38 -23
- package/dist/workflows/runtime/runs.js +55 -93
- package/dist/workflows/runtime/workflow-asset-loader.js +55 -86
- package/dist/workflows/source-files.js +7 -19
- package/docs/README.md +10 -16
- package/docs/architecture/README.md +2 -37
- package/docs/architecture/adapters.md +2 -2
- package/docs/architecture/akm-core-principles.md +256 -118
- package/docs/architecture/architecture.md +283 -99
- package/docs/architecture/improvement.md +8 -2
- package/docs/architecture/internals/classification.md +1 -3
- package/docs/architecture/internals/fresh-host-rebuild-runbook.md +7 -6
- package/docs/architecture/internals/health-advisories.md +35 -74
- package/docs/architecture/internals/improve-workflow.md +27 -26
- package/docs/architecture/internals/indexing.md +3 -3
- package/docs/architecture/internals/storage-locations.md +48 -15
- package/docs/architecture/persisted-data-compat.md +10 -6
- package/docs/architecture/specs/okf-support.md +9 -11
- package/docs/architecture/specs/ref.md +7 -9
- package/docs/architecture/testing/testing-workflow.md +172 -52
- package/docs/architecture/workflow-engine.md +51 -34
- package/docs/guides/README.md +0 -1
- package/docs/guides/author-bundles.md +15 -20
- package/docs/guides/author-workflows.md +93 -71
- package/docs/guides/bundles.md +20 -16
- package/docs/guides/discover-and-load.md +1 -1
- package/docs/guides/getting-started.md +49 -3
- package/docs/guides/improve-the-library.md +10 -4
- package/docs/guides/recipes/headless-install.md +11 -16
- package/docs/guides/run-workflows.md +29 -20
- package/docs/guides/scheduling.md +2 -2
- package/docs/guides/use-with-any-agent.md +20 -22
- package/docs/integration/bundling-akm.md +19 -9
- package/docs/maintainers/README.md +2 -6
- package/docs/maintainers/release-checklist.md +73 -126
- package/docs/migration/README.md +10 -3
- package/docs/migration/release-notes/0.10.0.md +81 -16
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +1 -1
- package/docs/migration/release-notes/0.9.0.md +1 -1
- package/docs/migration/release-notes/README.md +1 -1
- package/docs/migration/v0.9-to-v0.10.md +300 -60
- package/docs/migration/v0.9.1-to-v0.9.2.md +6 -5
- package/docs/posts/config-v2-lessons-16.md +1 -1
- package/docs/posts/llm-mode-reflect-13.md +1 -1
- package/docs/posts/release-0.6.0.md +11 -11
- package/docs/posts/release-0.8.0.md +4 -4
- package/docs/posts/workflows-vaults-09.md +1 -1
- package/docs/reference/README.md +1 -1
- package/docs/reference/asset-types.md +2 -2
- package/docs/reference/cli.md +477 -388
- package/docs/reference/configuration.md +569 -550
- package/docs/reference/data-and-telemetry.md +9 -6
- package/docs/reference/env-and-secrets.md +72 -15
- package/docs/reference/refs.md +3 -20
- package/docs/reference/registry.md +12 -38
- package/docs/reference/supported-formats.md +1 -1
- package/docs/reference/tasks.md +22 -11
- package/docs/reference/ui-api.md +14 -9
- package/docs/reference/workflow-schema.md +199 -154
- package/docs/reference/workflows.md +4 -6
- package/package.json +9 -11
- package/schemas/akm-config.json +1696 -2922
- package/schemas/akm-task.json +4 -4
- package/schemas/akm-workflow.json +36 -9
- package/ROADMAP.md +0 -112
- package/dist/assets/models.json +0 -35
- package/dist/commands/health/engine-usage.js +0 -45
- package/dist/commands/sources/dangerous-env-audit.js +0 -134
- package/dist/core/activation-policy.js +0 -67
- package/dist/core/config/schema/engines.js +0 -160
- package/dist/core/config/schema/execution.js +0 -23
- package/dist/core/spawn-env.js +0 -268
- package/dist/execution/directory-identity.js +0 -78
- package/dist/integrations/agent/builder-shared.js +0 -33
- package/dist/integrations/agent/builders.js +0 -43
- package/dist/integrations/agent/engine-fallback.js +0 -59
- package/dist/integrations/agent/engine-resolution.js +0 -333
- package/dist/integrations/agent/model-map.js +0 -475
- package/dist/integrations/harnesses/aider/agent-builder.js +0 -107
- package/dist/integrations/harnesses/aider/result-extractor.js +0 -53
- package/dist/integrations/harnesses/amazonq/agent-builder.js +0 -138
- package/dist/integrations/harnesses/amazonq/result-extractor.js +0 -48
- package/dist/integrations/harnesses/claude/agent-builder.js +0 -106
- package/dist/integrations/harnesses/claude/config-import.js +0 -67
- package/dist/integrations/harnesses/claude/result-extractor.js +0 -67
- package/dist/integrations/harnesses/codex/agent-builder.js +0 -150
- package/dist/integrations/harnesses/codex/result-extractor.js +0 -110
- package/dist/integrations/harnesses/copilot/agent-builder.js +0 -117
- package/dist/integrations/harnesses/copilot/result-extractor.js +0 -178
- package/dist/integrations/harnesses/gemini/agent-builder.js +0 -114
- package/dist/integrations/harnesses/gemini/result-extractor.js +0 -149
- package/dist/integrations/harnesses/opencode/config-import.js +0 -149
- package/dist/integrations/harnesses/opencode/model-config.js +0 -33
- package/dist/integrations/harnesses/opencode/model-work-agent.js +0 -115
- package/dist/integrations/harnesses/opencode/session-log-types.js +0 -12
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -44
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -1052
- package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +0 -199
- package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +0 -254
- package/dist/integrations/harnesses/opencode-sdk/wire.js +0 -66
- package/dist/integrations/harnesses/openhands/agent-builder.js +0 -120
- package/dist/integrations/harnesses/openhands/result-extractor.js +0 -135
- package/dist/integrations/harnesses/pi/agent-builder.js +0 -89
- package/dist/integrations/harnesses/pi/result-extractor.js +0 -168
- package/dist/integrations/harnesses/shared.js +0 -18
- package/dist/integrations/harnesses/types.js +0 -55
- package/dist/llm/feature-gate.js +0 -115
- package/dist/output/shapes/models-list.js +0 -16
- package/dist/output/shapes/registry-search.js +0 -10
- package/dist/setup/detected-engines.js +0 -136
- package/dist/setup/engine-config.js +0 -97
- package/dist/setup/harness-config-import.js +0 -47
- package/dist/setup/providers.js +0 -14
- package/dist/setup/steps/semantic.js +0 -39
- package/dist/workflows/authoring/scope-key.js +0 -79
- package/dist/workflows/exec/lowering-notices.js +0 -23
- package/dist/workflows/source-semantics.js +0 -110
- package/docs/architecture/0.10-process-rules.md +0 -832
- package/docs/architecture/akm-architecture-decision-history.md +0 -2055
- package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +0 -550
- package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +0 -72
- package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +0 -142
- package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +0 -189
- package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +0 -97
- package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +0 -108
- package/docs/architecture/decisions/0006-task-source-version-routing.md +0 -124
- package/docs/architecture/decisions/0007-workflow-composition-bounds.md +0 -83
- package/docs/architecture/decisions/0008-task-binding-normalization.md +0 -88
- package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +0 -80
- package/docs/architecture/decisions/0010-driver-protocol-cut.md +0 -36
- package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +0 -125
- package/docs/architecture/decisions/README.md +0 -62
- package/docs/architecture/internals/functional-contract-patterns.md +0 -340
- package/docs/architecture/internals/registry-network-boundary.md +0 -57
- package/docs/architecture/internals/search.md +0 -248
- package/docs/architecture/reviews/env-secret-access.md +0 -319
- package/docs/architecture/runtime-boundary-design.md +0 -153
- package/docs/architecture/specs/0.9.0-close-out-plan.md +0 -361
- package/docs/architecture/specs/0.9.0-decisions.md +0 -532
- package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +0 -745
- package/docs/architecture/specs/0.9.0-open-items-register.md +0 -135
- package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +0 -740
- package/docs/architecture/specs/0.9.0-release-surface-review.md +0 -636
- package/docs/architecture/specs/agent-command-engine-model-design.md +0 -513
- package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +0 -501
- package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +0 -291
- package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +0 -2059
- package/docs/architecture/specs/di-seams-plan.md +0 -539
- package/docs/architecture/specs/driver-protocol-keep-or-cut.md +0 -275
- package/docs/architecture/specs/fact-asset-type.md +0 -142
- package/docs/architecture/specs/improve-collapse-churn-detector-design.md +0 -634
- package/docs/architecture/specs/reviews/task-workflow-unification/README.md +0 -72
- package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +0 -152
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +0 -352
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +0 -300
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +0 -402
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +0 -758
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +0 -645
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +0 -602
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +0 -27
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +0 -27
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +0 -74
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +0 -15
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +0 -132
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +0 -147
- package/docs/architecture/specs/stash-conventions-code-spec.md +0 -275
- package/docs/architecture/specs/stash-organization-conventions.md +0 -377
- package/docs/architecture/specs/task-workflow-format-unification.md +0 -721
- package/docs/architecture/specs/workflow-engine-buy-vs-build.md +0 -231
- package/docs/architecture/specs/workflow-format-unification.md +0 -432
- package/docs/architecture/testing/manual-testing-checklist.md +0 -3411
- package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
- package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1720
- package/docs/guides/claude-code-vs-akm-workflows.md +0 -29
- package/docs/guides/knowledge-management.md +0 -18
- package/docs/maintainers/curate-workmap.md +0 -335
- package/docs/migration/v0.5-to-v0.6.md +0 -759
- package/docs/migration/v0.7-to-v0.8.md +0 -1378
- package/docs/plans/0.9.2-agent-command-workflow-plan.md +0 -423
|
@@ -1,67 +1,32 @@
|
|
|
1
1
|
# Architecture Index
|
|
2
2
|
|
|
3
|
-
How akm is built: system overview, normative specs,
|
|
4
|
-
subsystem internals.
|
|
3
|
+
How akm is built: system overview, normative specs, and subsystem internals.
|
|
5
4
|
|
|
6
5
|
- [Architecture](architecture.md) -- How akm's bundles, cache, index, and registries fit together
|
|
7
|
-
- [Core Principles](akm-core-principles.md) --
|
|
6
|
+
- [Core Principles](akm-core-principles.md) -- How the code, tests and docs in this repo are built: the engineering rules and what enforces each
|
|
8
7
|
- [Adapters](adapters.md) -- The `BundleAdapter` contract: what a bundle's files *are*, how they're indexed, linted, and written
|
|
9
8
|
- [Architecture: The Workflow Engine](workflow-engine.md) -- How a workflow compiles to a frozen plan, persists run/unit state, dispatches work, and resumes without replaying completed steps
|
|
10
9
|
- [Architecture: The Improvement Loop](improvement.md) -- Purpose and boundary of the improvement loop
|
|
11
|
-
- [Runtime Boundary Design](runtime-boundary-design.md) -- Isolating `bun:sqlite`/`Bun.*` from the core
|
|
12
|
-
- [Architecture Decision History](akm-architecture-decision-history.md) -- ADR-style record of the major architecture rulings
|
|
13
10
|
|
|
14
11
|
## Specs (`specs/`)
|
|
15
12
|
|
|
16
13
|
Normative specifications and binding conventions.
|
|
17
14
|
|
|
18
15
|
- [OKF format support](specs/okf-support.md) -- OKF is a first-class format supported through the built-in `okf` adapter
|
|
19
|
-
- [0.9.0 surface decisions](specs/0.9.0-decisions.md) -- The decision record (D1-D12) behind the 0.9.0 breaking changes
|
|
20
|
-
- [Bundle & Adapter Spec (0.9.0)](specs/akm-0.9.0-bundle-adapter-spec.md) -- Normative spec for bundles, adapters, and bundle recognition
|
|
21
|
-
- [Ref Grammar Decision (0.9.0)](specs/akm-0.9.0-ref-grammar-decision.md) -- The `[bundle//]conceptId` ref grammar
|
|
22
16
|
- [Ref Format](specs/ref.md) -- Wire format for asset references
|
|
23
|
-
- [Format-Neutral Bundle Workspace Spec](specs/akm-format-neutral-bundle-workspace-spec.md) -- The format-neutral workspace model
|
|
24
|
-
- [Agent, Command, Engine, and Model Resolution](specs/agent-command-engine-model-design.md) -- Approved target semantics for native agent/command bundles, configuration cascading, model maps, and dispatch
|
|
25
|
-
- [0.9.2 Agent/Command/Task/Workflow Implementation Plan](../plans/0.9.2-agent-command-workflow-plan.md) -- Sequenced work packages, [GitHub milestone tracker](https://github.com/itlackey/akm/issues/801), migration rules, support boundaries, and release evidence for the coherent execution MVP
|
|
26
|
-
- [Fact Asset Type](specs/fact-asset-type.md) -- The `fact` asset type
|
|
27
|
-
- [Bundle Conventions Code Spec](specs/stash-conventions-code-spec.md) -- Code-level bundle conventions
|
|
28
|
-
- [Bundle Organization Conventions](specs/stash-organization-conventions.md) -- How a bundle is laid out
|
|
29
|
-
- [DI Seams Plan](specs/di-seams-plan.md) -- Dependency-injection seams used by the test suite
|
|
30
|
-
- [Improve Collapse/Churn Detector](specs/improve-collapse-churn-detector-design.md) -- Longitudinal collapse/churn detection design (§6.3 is the operator runbook referenced by `akm health`)
|
|
31
|
-
|
|
32
|
-
Historical review registers (0.9.0 release-review audit trail, kept for provenance, not normative going forward):
|
|
33
|
-
|
|
34
|
-
- [0.9.0 Docs–Code Drift Register](specs/0.9.0-docs-code-drift-register.md) -- Ruled record of places documentation and code disagreed, and open-intent questions (Q-01..Q-19)
|
|
35
|
-
- [0.9.0 Public API Issue Backlog](specs/0.9.0-public-api-issue-backlog.md) -- Implementation-only findings from the CLI surface review
|
|
36
|
-
- [0.9.0 Release Surface Review](specs/0.9.0-release-surface-review.md) -- Reconciled action list from the end-to-end user-facing surface sweep
|
|
37
17
|
|
|
38
18
|
## Internals (`internals/`)
|
|
39
19
|
|
|
40
20
|
Current-truth subsystem references.
|
|
41
21
|
|
|
42
22
|
- [Storage Locations](internals/storage-locations.md) -- Authoritative inventory of every on-disk read/write path
|
|
43
|
-
- [Search](internals/search.md) -- Hybrid search architecture and scoring
|
|
44
23
|
- [Indexing](internals/indexing.md) -- How the search index is built
|
|
45
24
|
- [Classification](internals/classification.md) -- Matcher and renderer behavior
|
|
46
25
|
- [Improve Workflow](internals/improve-workflow.md) -- `akm improve` command surface and pipeline reference
|
|
47
26
|
- [Health Advisories](internals/health-advisories.md) -- `akm health` advisory-to-action map for operators
|
|
48
|
-
- [Registry Network Boundary](internals/registry-network-boundary.md) -- Outbound registry request inventory, destination policy, redirects, and DNS guarantees
|
|
49
|
-
- [Functional Contract Patterns](internals/functional-contract-patterns.md) -- Quick reference for contributor pipelines and small process contracts
|
|
50
27
|
- [Fresh-Host Rebuild Runbook](internals/fresh-host-rebuild-runbook.md) -- Rebuild an akm install on a new machine
|
|
51
28
|
- [Persisted-Data Compatibility Contract](persisted-data-compat.md) -- What a reader owes data an earlier release wrote, per persisted format
|
|
52
29
|
|
|
53
|
-
## Reviews (`reviews/`)
|
|
54
|
-
|
|
55
|
-
Point-in-time architecture reviews of a specific subsystem question.
|
|
56
|
-
|
|
57
|
-
- [Runtime secret resolution for in-process source fetchers](reviews/env-secret-access.md) -- Why secret reads are injected as a `SecretResolver` capability instead of imported inside the fetcher subgraph
|
|
58
|
-
|
|
59
|
-
## Comparisons (`comparisons/`)
|
|
60
|
-
|
|
61
|
-
- [Workflow architecture: Claude Code workflows vs. akm workflows](comparisons/claude-code-vs-akm-workflows-full.md) -- Full technical comparison of the Claude Code `Workflow` tool and akm workflows; see [the short vendor-neutral guide](../guides/claude-code-vs-akm-workflows.md) for the decision-level version
|
|
62
|
-
|
|
63
30
|
## Testing (`testing/`)
|
|
64
31
|
|
|
65
32
|
- [Testing Workflow](testing/testing-workflow.md) -- End-to-end, Docker, deployment, and upgrade validation, plus the coverage gap guide
|
|
66
|
-
- [Manual Testing Checklist](testing/manual-testing-checklist.md) -- Pre-release manual QA checklist
|
|
67
|
-
- [OKF v0.2 Conformance Re-Evaluation Runbook](testing/okf-v0.2-conformance-runbook.md) -- Acceptance procedure to re-run after changing adapters, indexing, refs, writes, or lint behavior
|
|
@@ -11,8 +11,8 @@ For read-only native tool bundles, recognition is runtime translation, not
|
|
|
11
11
|
conversion: the adapter projects native files into AKM's index/runtime shapes
|
|
12
12
|
while the source file remains authoritative. AKM does not synchronize native
|
|
13
13
|
formats, maintain translated canonical copies, or write agent/command assets
|
|
14
|
-
back through the Claude/OpenCode adapters.
|
|
15
|
-
[
|
|
14
|
+
back through the Claude/OpenCode adapters. Execution of agent and command
|
|
15
|
+
assets is described in [Architecture: Connections and Harnesses](architecture.md#connections-and-harnesses).
|
|
16
16
|
|
|
17
17
|
> **Stability note.** The adapter set, bundle-recognition rules, and the
|
|
18
18
|
> `bundles` config shape are still evolving — see [STABILITY.md](../../STABILITY.md).
|
|
@@ -1,126 +1,264 @@
|
|
|
1
1
|
# akm Core Principles
|
|
2
2
|
|
|
3
|
-
akm is
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
runs durable workflows, locally and without tying the library to one
|
|
8
|
-
assistant.
|
|
3
|
+
How akm is built. These are the rules the code, the tests and the
|
|
4
|
+
documentation in this repository follow. What akm does for a user is
|
|
5
|
+
described in [Architecture](architecture.md), whose "Invariants" section
|
|
6
|
+
lists the behaviors every command keeps.
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
Each principle states the rule, why it exists, and what enforces it. A rule
|
|
9
|
+
with nothing enforcing it is held by review, and says so.
|
|
12
10
|
|
|
13
|
-
##
|
|
11
|
+
## Precedence
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
workflows, env files, secrets, and wiki pages.
|
|
19
|
-
|
|
20
|
-
Core flow:
|
|
21
|
-
|
|
22
|
-
```text
|
|
23
|
-
connect -> index -> curate -> show -> use/run -> feedback -> proposal
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Not every task uses every stage.
|
|
13
|
+
When two principles pull against each other: a user's data comes first,
|
|
14
|
+
then honesty (code and documentation that do what they say), then
|
|
15
|
+
simplicity, then convenience.
|
|
27
16
|
|
|
28
17
|
## Principles
|
|
29
18
|
|
|
30
|
-
### 1.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
###
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
19
|
+
### 1. Delete before you add
|
|
20
|
+
|
|
21
|
+
The default answer to a new guard, cap, version gate, option, mode or layer
|
|
22
|
+
is no. A guard, cap, version gate, or fencing check survives only if it
|
|
23
|
+
passes **all three** tests:
|
|
24
|
+
|
|
25
|
+
1. **It has demonstrably helped a real user.** Check the local evidence before defending it — the `events` table in `state.db`, task logs, issue history. A guard that has never fired in production is a candidate for deletion, not preservation.
|
|
26
|
+
2. **Its failure mode costs less than the hazard it prevents.** A cap whose trip makes the CLI unusable is worse than the slowness it was guarding against.
|
|
27
|
+
3. **The operation is not already gated behind a deliberate human command.** Anything a person explicitly typed does not get a second machine-level gate. The operator is not racing themselves.
|
|
28
|
+
|
|
29
|
+
"This hazard is conceivable" is not a justification — that always answers yes,
|
|
30
|
+
and it is how this codebase accumulated footguns. When in doubt, delete.
|
|
31
|
+
|
|
32
|
+
Preference order when something must change: **remove the limit** > degrade
|
|
33
|
+
with a warning > abort. Aborting is the last resort, not the default.
|
|
34
|
+
|
|
35
|
+
What this does not apply to: machinery that prevents **data loss or
|
|
36
|
+
corruption** passes test 2 on its own merits and stays: backups, atomic
|
|
37
|
+
writes, write-path validation that keeps malformed data out of the database,
|
|
38
|
+
and path-containment checks that stop writes outside the bundle. The target is
|
|
39
|
+
machinery that makes the tool refuse to do its job.
|
|
40
|
+
|
|
41
|
+
The same rule applies to code that is not a guard: build what the current
|
|
42
|
+
design needs and nothing for a future one (YAGNI). No speculative option,
|
|
43
|
+
abstraction, extension point or "flexibility" goes in until a real caller
|
|
44
|
+
needs it, and a mechanism nothing calls any more comes out.
|
|
45
|
+
|
|
46
|
+
Why: every footgun this codebase has removed was a guard added because a
|
|
47
|
+
hazard was conceivable; the limits made the tool refuse to do its job
|
|
48
|
+
more often than they protected anyone.
|
|
49
|
+
|
|
50
|
+
Worked examples, which are the precedent:
|
|
51
|
+
|
|
52
|
+
- **#857** — single-ref lookup walked the entire bundle tree, capped at 16,384 files, and aborted when tripped. Zero useful firings in months of local event history; its only production behavior was making the CLI unusable on a large bundle. Walk and cap deleted, replaced with closed-form candidate enumeration. Net −13 lines of source, every collision guarantee intact.
|
|
53
|
+
- **`extra-params` (#815/#816)** — hard-rejected legacy keys. Degraded to warn-and-auto-lift; only genuinely conflicting keys still reject. This is the template for a guard that had to stay but had the wrong failure mode.
|
|
54
|
+
- **`guarded-source` 1MiB cap** — kept once on the argument that the bytes are hashed, so a truncated read would be silently wrong. That argument rejects *truncation*; it never justified a *cap*. Correct answer was no truncation and no cap.
|
|
55
|
+
- **Migrator TOCTOU fencing** — inode/device/ctime identity checks defending a window inside a human-typed `akm migrate apply` that already holds a cross-process lock and writes backups. A multi-tenant-daemon threat model applied to a single-user CLI.
|
|
56
|
+
|
|
57
|
+
Enforced by: review.
|
|
58
|
+
|
|
59
|
+
### 2. One place per policy
|
|
60
|
+
|
|
61
|
+
A rule lives in exactly one module and everything else calls it. Write
|
|
62
|
+
destinations branch on source kind only in `src/core/write-source.ts`.
|
|
63
|
+
Fan-out widths are decided once in `src/workflows/concurrency-policy.ts`.
|
|
64
|
+
A call's timeout is resolved once in `src/integrations/agent/resolution.ts`,
|
|
65
|
+
and no other layer adds one.
|
|
66
|
+
A child process's environment is built in `childProcessEnv`
|
|
67
|
+
(`src/core/paths.ts`): akm's own, with the directories this akm resolved set
|
|
68
|
+
over it.
|
|
69
|
+
Every agent harness registers once in `HARNESS_REGISTRY`
|
|
70
|
+
(`src/integrations/harnesses/index.ts`) and core imports the registry, not
|
|
71
|
+
a harness. Runtime-specific APIs (`bun:sqlite`, `Bun.*`) are reached only
|
|
72
|
+
through `src/storage/database.ts` and `src/runtime.ts`.
|
|
73
|
+
|
|
74
|
+
Why: a policy copied into three places drifts into three policies, and
|
|
75
|
+
the drift is invisible until a user hits the one that differs.
|
|
76
|
+
|
|
77
|
+
Enforced by: `tests/harnesses-registry.test.ts` for the registry;
|
|
78
|
+
`scripts/lint-secret-resolver-boundary.ts` for secret reads;
|
|
79
|
+
`tests/contracts/module-boundaries.test.ts` for the module table;
|
|
80
|
+
`tests/contracts/runtime-port-boundary.test.ts` for akm's own runtime, which
|
|
81
|
+
lowering and dispatch reach only through the `AgentRuntime` port
|
|
82
|
+
(`src/integrations/agent/runtime-port.ts`), composed in
|
|
83
|
+
`src/integrations/agent/runtime.ts`. The write chokepoint and the
|
|
84
|
+
no-direct-harness-imports rule are held by review; the OpenCode plugin upgrade
|
|
85
|
+
and staleness checks still import the OpenCode folder's installation helpers
|
|
86
|
+
directly, which is open work.
|
|
87
|
+
|
|
88
|
+
### 3. One current shape per format, one converter
|
|
89
|
+
|
|
90
|
+
Each stored format has one current shape in code and one converter from older
|
|
91
|
+
shapes. A reader uses the converter and keeps no tolerance of its own. A user's
|
|
92
|
+
file (`config.json`, a task source, bundle content) is rewritten only by
|
|
93
|
+
`akm migrate apply`, with a backup, running that same converter; akm's own
|
|
94
|
+
stores (`state.db`, `index.db`) migrate forward when opened, with a backup
|
|
95
|
+
before any destructive step. Reads reach back to the 0.9.15 floor: above it a
|
|
96
|
+
reader converts in memory, warns once and names `akm migrate apply`; below it,
|
|
97
|
+
and for an older task source (the one named exception), the command stops and
|
|
98
|
+
names the migrator. What happens to data from a newer release differs by
|
|
99
|
+
format (a newer index layout or frozen plan is refused with "upgrade akm";
|
|
100
|
+
`state.db` and `config.json` warn and continue, and `akm health` reports the
|
|
101
|
+
config skew), so [Persisted-Data Compatibility](persisted-data-compat.md)
|
|
102
|
+
states the rule per format. Readers that still carry their own conversion, such
|
|
103
|
+
as the frozen-plan decoder, are listed there and move to the converter as they
|
|
104
|
+
are touched.
|
|
105
|
+
|
|
106
|
+
Why: tolerance scattered through readers is a shim nobody can delete. A
|
|
107
|
+
converter that the readers and the migrator share is written once, tested once
|
|
108
|
+
and leaves one shape behind.
|
|
109
|
+
|
|
110
|
+
Enforced by: `tests/integration/upgrade-rehearsal/`, which installs the
|
|
111
|
+
previous release, builds real state and runs the current build against it, and
|
|
112
|
+
`tests/integration/previous-release-corpus.test.ts`, which pins each older
|
|
113
|
+
shape as refused or converted. The compat page lists each format with its test;
|
|
114
|
+
a change to a format adds its old shape to the rehearsal.
|
|
115
|
+
|
|
116
|
+
### 4. Sane defaults, flexible overrides
|
|
117
|
+
|
|
118
|
+
Every default works out of the box for the common case, which for anything
|
|
119
|
+
touching a model means a slow local model on a single-threaded server: no
|
|
120
|
+
`max_tokens` sent unless asked, one timeout, concurrency one against a
|
|
121
|
+
loopback endpoint. Every default is overridable where it applies, per
|
|
122
|
+
connection or harness under `connections.<name>.*` and `harnesses.<name>.*`, per workflow step, per command flag, and
|
|
123
|
+
the override is honored as given. The tool never second-guesses a value
|
|
124
|
+
the user set; the one place it still does, clamping a workflow fan-out width
|
|
125
|
+
above 64, is debt rather than policy.
|
|
126
|
+
|
|
127
|
+
Why: defaults that need tuning before the first useful result lose the
|
|
128
|
+
user; overrides that are ignored or capped behind the user's back lose
|
|
129
|
+
their trust.
|
|
130
|
+
|
|
131
|
+
Enforced by: `tests/workflows/concurrency-defaults.test.ts` and
|
|
132
|
+
`tests/resolution.test.ts`; the rest is review.
|
|
133
|
+
|
|
134
|
+
### 5. If it matters, a test or lint checks it
|
|
135
|
+
|
|
136
|
+
Any rule we want to hold is pinned: output shapes and exit codes, the ref
|
|
137
|
+
grammar, the module table, the execution transport contract, that every command and
|
|
138
|
+
flag named in a doc exists, that shipped assets carry no dead refs. The pin
|
|
139
|
+
is a test under `tests/contracts/`, a unit test, or a script in the `lint`
|
|
140
|
+
chain. A rule nobody pinned is a preference, and may change without
|
|
141
|
+
ceremony.
|
|
142
|
+
|
|
143
|
+
Why: the documentation drifted from the code for months because the pages
|
|
144
|
+
said "normative" and nothing checked.
|
|
145
|
+
|
|
146
|
+
Enforced by: `bun run lint` (`scripts/lint-doc-examples.ts`,
|
|
147
|
+
`scripts/lint-shipped-assets.ts`, `scripts/lint-secret-resolver-boundary.ts`),
|
|
148
|
+
`tests/contracts/`, `tests/output-shapes-unit.test.ts`.
|
|
149
|
+
|
|
150
|
+
### 6. The suite is green by default and sandboxed through the environment
|
|
151
|
+
|
|
152
|
+
`test:unit` and `test:integration` report zero failures at all times. A
|
|
153
|
+
red run is a real break, never noise to route around; a test that must be
|
|
154
|
+
disabled is disabled explicitly with a linked issue.
|
|
155
|
+
|
|
156
|
+
No test reads or writes a developer's real files: the runner scripts and the
|
|
157
|
+
preload point everything a test can resolve from the environment at a
|
|
158
|
+
sandbox, and a test that leaks fails.
|
|
159
|
+
[Testing Workflow](testing/testing-workflow.md) states the two targets, where
|
|
160
|
+
a test belongs, how the sandbox works and what it cannot cover.
|
|
161
|
+
|
|
162
|
+
Why: a suite that is "usually green" is a suite nobody trusts, and a test
|
|
163
|
+
that reads a developer's real config passes on one machine and fails on
|
|
164
|
+
the next.
|
|
165
|
+
|
|
166
|
+
Enforced by: `tests/_preload.ts` (the sandbox and the tripwire),
|
|
167
|
+
`scripts/test-unit.sh` and `scripts/test-integration.sh` (the split and the
|
|
168
|
+
per-shard `HOME`), `TEST_ISOLATION_MISSING` in `src/core/paths.ts`. Reads
|
|
169
|
+
through `os.homedir()` outside the runner scripts are held by review.
|
|
170
|
+
|
|
171
|
+
### 7. Prose lives in files; comments say why
|
|
172
|
+
|
|
173
|
+
Multi-line markdown, XML or prose belongs in a standalone file next to the
|
|
174
|
+
module that uses it, imported as text
|
|
175
|
+
(`import x from "./x.md" with { type: "text" }`) and filled with
|
|
176
|
+
`{{PLACEHOLDER}}` tokens through `.replace` or `.replaceAll` at call time.
|
|
177
|
+
`src/tasks/backends/schtasks.ts` (which imports
|
|
178
|
+
`src/assets/backends/schtasks-template.xml`), `src/output/cli-hints.ts` and
|
|
179
|
+
`scripts/copy-assets.ts` are the established pattern.
|
|
180
|
+
|
|
181
|
+
A code comment explains a constraint or a decision the code cannot show; it
|
|
182
|
+
does not cite plans, specs, review rounds or history, and it does not restate
|
|
183
|
+
the line beneath it.
|
|
184
|
+
|
|
185
|
+
Why: templates inside template literals cannot be edited without touching
|
|
186
|
+
source, and a comment that points at a document nobody can find is noise
|
|
187
|
+
that looks like information.
|
|
188
|
+
|
|
189
|
+
Enforced by: review.
|
|
190
|
+
|
|
191
|
+
### 8. Documentation describes the product that exists
|
|
192
|
+
|
|
193
|
+
One current-truth document per subsystem; no second one is forked. Plans,
|
|
194
|
+
decision records, review registers and future-work promises do not live
|
|
195
|
+
under `docs/`. Code is cited by file and symbol, not line number. A
|
|
196
|
+
document claims no guarantee the code does not enforce, and names no
|
|
197
|
+
command, flag or file that does not exist. When code and documentation
|
|
198
|
+
disagree, one of them is fixed in the same change.
|
|
199
|
+
|
|
200
|
+
Why: a user who reads a stale page loses more time than if the page had
|
|
201
|
+
not existed, and a "normative" document the code ignores teaches
|
|
202
|
+
contributors that documents do not matter.
|
|
203
|
+
|
|
204
|
+
Enforced by: `scripts/lint-doc-examples.ts`, which reads the fenced examples
|
|
205
|
+
in `docs/`, `src/assets/hints/`, `README.md`, `AGENTS.md` and `STABILITY.md`
|
|
206
|
+
and checks that every command and flag in them exists (the migration documents
|
|
207
|
+
of earlier releases, named in `HISTORICAL_MIGRATION_DOCS`, are exempt; the
|
|
208
|
+
current migration guide and release note are read), and the npm pack check in
|
|
209
|
+
`tests/integration/install/npm-pack-contents.test.ts` (no dead link ships).
|
|
210
|
+
Whether a statement is true of the product is held by review.
|
|
211
|
+
|
|
212
|
+
### 9. CLI-first, Bun-first
|
|
213
|
+
|
|
214
|
+
This package is a command-line tool. `src/cli.ts` dispatches and commands
|
|
215
|
+
live under `src/commands/`. The one programmatic entry point is `akm-cli/api`
|
|
216
|
+
(`src/api.ts`, which exports only `curate`), so the akm plugins can recall
|
|
217
|
+
in-process; the `exports` map in `package.json` lists only `./api`,
|
|
218
|
+
`./package.json` and `./dist/*`, and there are no barrel exports. Bun is the
|
|
219
|
+
preferred runtime and the toolchain. Node 22 is the floor (`engines.node`):
|
|
220
|
+
the npm package bootstraps through Node, and its launcher falls back to Node
|
|
221
|
+
when no usable Bun is on `PATH`. Anything that would become another API for
|
|
222
|
+
other programs is a separate decision, not an incidental export.
|
|
223
|
+
|
|
224
|
+
Why: an accidental API is a compatibility promise nobody agreed to make.
|
|
225
|
+
|
|
226
|
+
Enforced by: `tests/contracts/api-surface.test.ts` (the export list),
|
|
227
|
+
`tests/integration/install/package-exports.test.ts` (the `exports` map),
|
|
228
|
+
`package.json` (`engines.node` and the `preinstall` check), and the
|
|
229
|
+
`node-smoke` job in `.github/workflows/ci.yml` (Node 22 and 24).
|
|
230
|
+
|
|
231
|
+
### 10. Agent harnesses are thin, replaceable internals
|
|
232
|
+
|
|
233
|
+
akm is simple, lightweight tooling for agents and automated processes. A
|
|
234
|
+
harness such as OpenCode (pi or another later) is an internal detail akm
|
|
235
|
+
uses to enable agentic work. It sits behind one thin seam, is not woven into
|
|
236
|
+
akm core, and can be replaced without touching the rest of akm. What akm adds
|
|
237
|
+
to a harness run, for agent work and for model work, is stated once in
|
|
238
|
+
[Configuration](../reference/configuration.md#how-akm-runs-a-harness).
|
|
239
|
+
|
|
240
|
+
Why: heavy machinery and tight coupling are the opposite of akm's goals.
|
|
241
|
+
|
|
242
|
+
Enforced by: review. The seam is `HARNESS_REGISTRY` (principle 2); akm's own
|
|
243
|
+
runtime sits behind the `AgentRuntime` port (pinned by
|
|
244
|
+
`tests/contracts/runtime-port-boundary.test.ts`), and only the OpenCode plugin
|
|
245
|
+
checks still bypass the seam.
|
|
246
|
+
|
|
247
|
+
### 11. Simple is not sloppy
|
|
248
|
+
|
|
249
|
+
Principle 1 removes machinery that is not justified; it does not lower the
|
|
250
|
+
standard of what remains. Code is kept simple with SOLID structure, not
|
|
251
|
+
instead of it: a module has one responsibility and one reason to change;
|
|
252
|
+
behaviour is extended by adding a case in its one place (principle 2), not
|
|
253
|
+
by editing every caller; a caller depends on the narrow interface it uses,
|
|
254
|
+
not on the internals behind it; types say what a value is. Shrinking a diff
|
|
255
|
+
by merging unrelated concerns, dropping the error handling the design calls
|
|
256
|
+
for, or flattening clear structure into one long function is not
|
|
257
|
+
simplification and is reverted in review.
|
|
258
|
+
|
|
259
|
+
Why: the layers this codebase has removed were added without need, but the
|
|
260
|
+
remedy for over-engineering is a small clean design, not a monolith. Both
|
|
261
|
+
cost the next reader.
|
|
262
|
+
|
|
263
|
+
Enforced by: review; `tests/contracts/module-boundaries.test.ts` for the
|
|
264
|
+
module seams it pins.
|