akm-cli 0.10.261013-beta → 0.10.261015-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 +539 -3
- package/README.md +14 -0
- package/SECURITY.md +12 -11
- package/STABILITY.md +45 -49
- package/dist/assets/hints/cli-hints-full.md +15 -12
- 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/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-cli.js +2 -2
- package/dist/commands/env/secret-cli.js +2 -2
- 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/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 -15
- package/dist/commands/improve/eligibility.js +1 -1
- 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/index.js +2 -2
- 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 +2 -2
- 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 +2 -4
- package/dist/commands/remember.js +25 -40
- 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 +2 -2
- 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 -8
- package/dist/commands/sources/source-add.js +2 -2
- package/dist/commands/sources/source-manage.js +4 -4
- package/dist/commands/targets.js +175 -0
- package/dist/commands/tasks/explain.js +103 -68
- package/dist/commands/tasks/tasks-cli.js +9 -11
- package/dist/commands/tasks/tasks.js +37 -41
- package/dist/commands/ui/api.js +11 -3
- package/dist/commands/ui/redact.js +1 -27
- package/dist/commands/ui/workspace-actions.js +1 -1
- package/dist/commands/workflow/plan.js +1 -1
- package/dist/commands/workflow-cli.js +3 -4
- package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
- package/dist/core/adapter/adapters/akm-adapter.js +33 -38
- package/dist/core/adapter/adapters/akm-lint.js +7 -8
- package/dist/core/adapter/adapters/akm-task-adapter.js +3 -3
- 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 +3 -3
- 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/closest-match.js +37 -0
- package/dist/core/common.js +33 -5
- 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 +385 -93
- 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 +41 -22
- package/dist/core/config/schema/search.js +6 -11
- package/dist/core/config/schema/sources-bundles.js +7 -7
- 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/errors.js +9 -15
- 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/npm-package.js +89 -0
- package/dist/core/parse.js +2 -2
- package/dist/core/paths.js +32 -4
- package/dist/core/recognition-util.js +8 -10
- package/dist/core/redaction.js +78 -52
- 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/tar.js +116 -0
- package/dist/core/type-presentation.js +10 -14
- 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 +19 -6
- package/dist/indexer/installations.js +11 -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 +6 -8
- package/dist/indexer/search/db-search.js +9 -7
- package/dist/indexer/search/search-source.js +40 -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/walker.js +14 -4
- 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 +154 -178
- package/dist/integrations/agent/runner.js +20 -72
- 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 +139 -0
- package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
- package/dist/integrations/harnesses/opencode/runtime/index.js +181 -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 +111 -115
- package/dist/llm/embedders/onnx-runtime.js +121 -0
- package/dist/llm/embedders/remote.js +26 -24
- 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 -7
- package/dist/output/shapes/helpers.js +18 -42
- package/dist/output/shapes/passthrough.js +1 -0
- package/dist/output/shapes.js +1 -7
- package/dist/output/text/command-format.js +29 -37
- 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-format.js +0 -2
- package/dist/output/text/targets-table.js +70 -0
- package/dist/output/text/workflow-format.js +7 -8
- 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 +5197 -4193
- package/dist/scripts/akm-migrate.js +5197 -4193
- package/dist/setup/detect.js +28 -273
- package/dist/setup/endpoint.js +36 -0
- package/dist/setup/semantic-assets.js +18 -21
- package/dist/setup/setup-flags.js +77 -0
- package/dist/setup/setup-plan.js +144 -0
- package/dist/setup/setup.js +184 -354
- package/dist/setup/steps/connection-shared.js +49 -101
- package/dist/setup/steps/connection.js +121 -524
- package/dist/setup/steps/embeddings.js +168 -0
- package/dist/setup/steps/harnesses.js +118 -0
- package/dist/setup/steps/platforms.js +2 -81
- 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 +1 -5
- package/dist/sources/snapshot-fetchers/robots.js +11 -12
- package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
- package/dist/storage/database.js +17 -57
- 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/workflow-runs-repository.js +8 -15
- package/dist/storage/sqlite-read-snapshot.js +33 -29
- package/dist/tasks/log-redaction.js +7 -119
- package/dist/tasks/prepare/prepare-support.js +5 -5
- package/dist/tasks/prepare/prepare.js +5 -5
- package/dist/tasks/prepare/script-capture.js +3 -5
- package/dist/tasks/run/attempt-lifecycle.js +17 -35
- package/dist/tasks/run/load-task.js +8 -13
- package/dist/tasks/run/run-command-task.js +15 -10
- package/dist/tasks/run/run-native-task.js +8 -13
- package/dist/tasks/run/run-task.js +5 -8
- package/dist/tasks/run/run-workflow-task.js +12 -19
- 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/source/bounded-document.js +31 -76
- 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 +47 -68
- 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/concurrency-policy.js +4 -4
- package/dist/workflows/exec/child-workflow.js +0 -2
- package/dist/workflows/exec/dispatch-redaction.js +14 -83
- package/dist/workflows/exec/environment.js +2 -3
- package/dist/workflows/exec/exec-unit.js +10 -59
- package/dist/workflows/exec/frozen-judge.js +10 -26
- package/dist/workflows/exec/native-executor.js +56 -45
- package/dist/workflows/exec/run-workflow.js +7 -24
- package/dist/workflows/exec/step-work.js +9 -14
- package/dist/workflows/exec/unit-dispatch.js +6 -13
- package/dist/workflows/freeze/freeze.js +14 -32
- package/dist/workflows/freeze/step-values.js +5 -11
- package/dist/workflows/freeze/targets/command.js +3 -6
- package/dist/workflows/freeze/task-bindings.js +0 -1
- package/dist/workflows/parser.js +44 -34
- package/dist/workflows/plan.js +3 -1
- package/dist/workflows/renderer.js +6 -5
- package/dist/workflows/resource-limits.js +2 -2
- package/dist/workflows/runtime/run-plan.js +2 -1
- package/dist/workflows/runtime/runs.js +14 -9
- 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 +257 -118
- package/docs/architecture/architecture.md +282 -98
- 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 +46 -12
- package/docs/architecture/persisted-data-compat.md +9 -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 +173 -42
- package/docs/architecture/workflow-engine.md +17 -14
- package/docs/guides/README.md +0 -1
- package/docs/guides/author-bundles.md +1 -3
- package/docs/guides/author-workflows.md +61 -73
- package/docs/guides/bundles.md +4 -5
- package/docs/guides/discover-and-load.md +1 -1
- package/docs/guides/getting-started.md +51 -3
- package/docs/guides/improve-the-library.md +10 -4
- package/docs/guides/recipes/headless-install.md +21 -21
- package/docs/guides/run-workflows.md +6 -9
- 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 +0 -3
- 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 +312 -59
- 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 +367 -279
- package/docs/reference/configuration.md +591 -557
- package/docs/reference/data-and-telemetry.md +8 -5
- package/docs/reference/env-and-secrets.md +11 -5
- package/docs/reference/refs.md +3 -20
- package/docs/reference/registry.md +6 -27
- package/docs/reference/supported-formats.md +1 -1
- package/docs/reference/tasks.md +11 -8
- package/docs/reference/ui-api.md +11 -6
- package/docs/reference/workflow-schema.md +106 -134
- package/docs/reference/workflows.md +4 -6
- package/package.json +9 -14
- package/schemas/akm-config.json +1696 -2922
- package/schemas/akm-task.json +2 -0
- 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/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/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 -335
- 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/exec/lowering-notices.js +0 -23
- 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 -544
- 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 -187
- 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 -3379
- package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
- package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1702
- 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
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,541 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.10.261015] - 2026-10-27
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- `akm setup` downloads what the configuration it saves needs (#1254). Choosing the
|
|
14
|
+
built-in embedder (`--embedding local`, or the wizard's choice) downloads ONNX
|
|
15
|
+
Runtime 1.24.3 for this platform once from the npm registry (about 86 MB,
|
|
16
|
+
checked against the registry's sha512 integrity before anything is extracted)
|
|
17
|
+
into `<cache dir>/onnxruntime/<version>-<platform>-<arch>/`, and the model
|
|
18
|
+
(about 127 MB), then loads both. The wizard asks first, as before; `--yes`
|
|
19
|
+
and `--from` do it once the config is saved and report `semanticAssets`
|
|
20
|
+
(`ready`, `blocked: <reason>`, or `skipped`). `--no-probe` now means nothing
|
|
21
|
+
is contacted or downloaded; the first `akm index` downloads what setup did
|
|
22
|
+
not, which is also how an install upgraded from an earlier release gets the
|
|
23
|
+
runtime: its next `akm index` downloads it once. The vectors are unchanged,
|
|
24
|
+
so no re-index is needed.
|
|
25
|
+
- Local embeddings are offered on Linux x64 (glibc) and Apple-silicon
|
|
26
|
+
macOS (#1256). Every other platform uses keyword search or an embedding endpoint:
|
|
27
|
+
setup offers only those, with one sentence saying why, `--embedding local`
|
|
28
|
+
warns and saves keyword search, `--from` keeps the file's values, the index
|
|
29
|
+
reports semantic search unavailable for the platform, and `akm health` warns
|
|
30
|
+
with the setup arguments for keyword search or an endpoint.
|
|
31
|
+
- When agent work runs on akm's own runtime, the setup wizard offers to download
|
|
32
|
+
its OpenCode binary now rather than on the first agent run. `--yes` and
|
|
33
|
+
`--from` leave it to the first run.
|
|
34
|
+
- The npm package installs with no install script anywhere in its tree (#1255), so it
|
|
35
|
+
works as installed where npm runs none (npm 12 blocks dependency scripts by
|
|
36
|
+
default). On Node, the SQLite driver is `better-sqlite3` 13.0.3, which ships
|
|
37
|
+
prebuilt N-API bindings for Linux (glibc and musl) and macOS on x64 and arm64
|
|
38
|
+
and for Windows on x64 and arm64: a Node upgrade no longer needs
|
|
39
|
+
`npm rebuild`. 32-bit ARM Linux has no SQLite binding on Node.
|
|
40
|
+
- Standalone binaries carry no native code and are up to 36 MB smaller (Linux
|
|
41
|
+
x64: 123.6 MB to 88.0 MB). A `noexec` temp directory no longer affects
|
|
42
|
+
semantic search (#1257); akm's cache directory must still allow executing files.
|
|
43
|
+
|
|
44
|
+
### Removed
|
|
45
|
+
|
|
46
|
+
- The `onnxruntime-node` dependency, and with it the install script that
|
|
47
|
+
downloaded about 317 MB of CUDA providers on every Linux x64 `npm install`
|
|
48
|
+
(akm uses the CPU only; #1254). akm loads that package's binding from its cache
|
|
49
|
+
instead.
|
|
50
|
+
- The `preinstall` Node.js version check (#1255). Both launchers and the CLI still
|
|
51
|
+
refuse Node.js older than 22 when akm starts, and npm warns from
|
|
52
|
+
`engines.node` at install.
|
|
53
|
+
|
|
54
|
+
## [0.10.261014] - 2026-10-27
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- Connections and harnesses replace engines (#1244). `config.json` names
|
|
59
|
+
`connections`, the OpenAI-compatible endpoints akm reaches models through
|
|
60
|
+
(`endpoint`, `apiKey`, `models`, `contextLength`, `timeoutMs`, `concurrency`;
|
|
61
|
+
every other key on a connection or a model entry is a request field in the
|
|
62
|
+
endpoint's own spelling, sent as written), and `harnesses`, the agent programs
|
|
63
|
+
you already have (`platform`, `bin`, `args`, `workspace`, `agent`,
|
|
64
|
+
`timeoutMs`, `models`). There is no `defaults` block: the entry named
|
|
65
|
+
`default`, or the only entry, is the default connection or harness. Anywhere a
|
|
66
|
+
connection or harness can be named (config, a flag, an asset's `connection:`
|
|
67
|
+
or `harness:`) and none is, the default is used; a name that is not
|
|
68
|
+
configured is an error (exit 78) that names it, lists the configured ones and
|
|
69
|
+
the nearest, and is never replaced by the default. With neither
|
|
70
|
+
configured, model features and agent work are off, each command that needs one
|
|
71
|
+
says so and points at `akm setup`, and everything that needs no model keeps
|
|
72
|
+
working.
|
|
73
|
+
- `improve.strategy` replaces `defaults.improveStrategy`. `improve.processes.
|
|
74
|
+
<process>` and `improve.qualityGate` say where each process and the quality
|
|
75
|
+
gates run (`connection` or `harness`, `model`, `llm`, `timeoutMs`),
|
|
76
|
+
`improve.connection` and `improve.harness` where all of `akm improve`'s model
|
|
77
|
+
work runs, and `index` takes `connection`, `model`, `llm` and `timeoutMs`. A
|
|
78
|
+
strategy says which processes run, never where.
|
|
79
|
+
- `embedding` with a `model` and no `endpoint` is served by the default
|
|
80
|
+
connection: its endpoint and its key. With no connection, the built-in local
|
|
81
|
+
embedder runs, with one warning.
|
|
82
|
+
- A connection or harness its own schema rejects (no endpoint, an endpoint that
|
|
83
|
+
is not a URL, a harness akm cannot run) is ignored with one warning naming
|
|
84
|
+
it, instead of stopping every command; the rest of the file loads.
|
|
85
|
+
- Aliases and `akm models`. A connection's `models` maps an alias (`fast`,
|
|
86
|
+
`balanced`, `reasoning`, or your own) to the model's name, or to an object
|
|
87
|
+
holding the name and request fields of its own; a harness's `models` maps an
|
|
88
|
+
alias to the harness's own model name, over the map akm ships for its platform
|
|
89
|
+
(Claude Code has one). An alias a connection does not map answers with its
|
|
90
|
+
first model. `akm models` lists a connection's aliases, then the models its
|
|
91
|
+
endpoint lists, and `akm models set <alias> <model>` changes one, keeping the
|
|
92
|
+
request fields of an alias that has them and warning when the endpoint does not
|
|
93
|
+
list the model. `--connection` picks another connection and `--no-probe` skips
|
|
94
|
+
the listing.
|
|
95
|
+
- `--connection`, `--harness` and `--model` on `akm agent`, `akm command run`,
|
|
96
|
+
`akm improve`, `akm proposal new`, `akm proposal extract` and `akm task add`
|
|
97
|
+
say where one invocation runs and with which model; omitted means the default,
|
|
98
|
+
and `--connection` and `--harness` are mutually exclusive. A run's selection
|
|
99
|
+
reaches every call in it, the quality-gate judges of `akm improve` included.
|
|
100
|
+
`akm task add` writes them into the task, and `akm task explain` reads them
|
|
101
|
+
back.
|
|
102
|
+
- Keys come from a `$VAR` reference (`apiKey: "$NAME"`) or from
|
|
103
|
+
`<config dir>/credentials.json` (0600), where each key is stored for one
|
|
104
|
+
endpoint: `{ "connections": { "<name>": { "key", "endpoint" } }, "services":
|
|
105
|
+
{ "embedding" | "curateRerank": { "key", "endpoint" } } }`. A key is read for
|
|
106
|
+
that endpoint alone, and a connection called `embedding` and the embedding
|
|
107
|
+
service hold different keys. A connection only an `extends` base defines uses
|
|
108
|
+
no key stored on this host (the base chose its endpoint); its runner records
|
|
109
|
+
`storedKey: false`, so a journaled or resumed run withholds it whether or not
|
|
110
|
+
the config is loaded. A literal `apiKey` in
|
|
111
|
+
`config.json` is kept, warned about once, and never read, sent or printed;
|
|
112
|
+
`akm config get` masks it and the redactor treats it as a secret.
|
|
113
|
+
- `akm health` has one `connections-and-harnesses` check, and `akm info` a
|
|
114
|
+
`connectionsAndHarnesses` list, with a
|
|
115
|
+
row for each connection (its endpoint, whether its key is held and, for
|
|
116
|
+
health, whether the endpoint answers), each harness (its platform, whether its
|
|
117
|
+
binary is found and, when probing, its version) and each kind of work (improve,
|
|
118
|
+
judges, agents, extract, enrich, index, embedding, curate rerank) naming the
|
|
119
|
+
connection or harness and the model it resolves to. The rows are resolved by
|
|
120
|
+
the code the calls use, so the table cannot disagree with a dispatch. An
|
|
121
|
+
override is compared by kind as well as name and model, so a connection and a
|
|
122
|
+
harness that share a name do not hide a per-process pin; each override row
|
|
123
|
+
carries `kind`. `akm info` contacts nothing, and neither does `akm health
|
|
124
|
+
--no-probe`.
|
|
125
|
+
- `akm setup` asks which installed agent programs to enable (saying whether akm
|
|
126
|
+
can limit each to reading and searching for its own model calls, judged on the
|
|
127
|
+
program the harness will run: `harnesses.<name>.bin`, else the platform's
|
|
128
|
+
binary on `PATH`), whether the default one also
|
|
129
|
+
takes akm's model calls (a no with no connection after it is saved as
|
|
130
|
+
`modelWork: false` on that harness, which keeps model calls off it by default;
|
|
131
|
+
a saved `modelWork: false` stays through `--yes` and is the question's default,
|
|
132
|
+
and only a yes clears it), an endpoint with its key at a masked prompt and one
|
|
133
|
+
model for each alias, picked from the models the endpoint lists, and where
|
|
134
|
+
embeddings come from. A key you type is stored in `credentials.json` for the
|
|
135
|
+
connection and its endpoint. Each flag answers one question and `--yes` takes the
|
|
136
|
+
detected default for the rest: `--endpoint`, `--api-key-env`, `--name`,
|
|
137
|
+
`--harness`, `--embedding`, `--embedding-endpoint` and
|
|
138
|
+
`--embedding-api-key-env`. A rerun starts from the current config and keeps the
|
|
139
|
+
alias picks it has. `--no-probe` runs offline: the endpoint is not contacted,
|
|
140
|
+
no models are listed, and the connection has no model until `akm models set`
|
|
141
|
+
names one.
|
|
142
|
+
- Non-interactively, with no harness yet configured, `akm setup` enables every
|
|
143
|
+
agent program found on `PATH`, the first the default; with none, agent work
|
|
144
|
+
runs on akm's own runtime over the connection.
|
|
145
|
+
- Agent work on a connection, with no harness, runs on akm's own runtime: a
|
|
146
|
+
pinned OpenCode 2 binary (2.1.4) that akm fetches and runs as a process, one
|
|
147
|
+
per run (#1244). It has no entry in config, and `opencode-sdk` is not a
|
|
148
|
+
harness platform.
|
|
149
|
+
- The first run fetches the binary: the one `@opencode/cli-<platform>` package
|
|
150
|
+
for the machine (its OS and CPU, musl, and the baseline build for an x64 CPU
|
|
151
|
+
without AVX2, chosen as OpenCode's own installer chooses), about 114 MB, from
|
|
152
|
+
the npm registry into `<akm cache dir>/opencode/2.1.4/`, checked against the
|
|
153
|
+
registry's sha512 integrity before anything is extracted. Two akm processes
|
|
154
|
+
fetching at once both finish. A failed fetch fails the run as not started and
|
|
155
|
+
names the package, its URL and the cache path; with no network for that step,
|
|
156
|
+
enable the `opencode` harness with an installed OpenCode 2. No setting points
|
|
157
|
+
the runtime at a binary of your own. On Alpine/musl the binary needs
|
|
158
|
+
`libstdc++` and `libgcc` (the Alpine Node image has them).
|
|
159
|
+
- The run is the command the `opencode` harness builds for OpenCode 2 model
|
|
160
|
+
work (`run --standalone --title akm`, the prompt on stdin), driven by the
|
|
161
|
+
connection a run was dispatched with, as the run froze it: the connection is
|
|
162
|
+
the process's only provider (`@ai-sdk/openai-compatible`, which the binary
|
|
163
|
+
bundles, so nothing is downloaded for it), at the connection's endpoint with
|
|
164
|
+
its key, carrying the one model the run names and the context window and
|
|
165
|
+
output cap the connection states, so the endpoint receives the model name as
|
|
166
|
+
written, as on chat, and a connection edited or removed later cannot redirect
|
|
167
|
+
the run.
|
|
168
|
+
- The process is akm's own. OpenCode's config, data, cache, state and temp
|
|
169
|
+
directories are under `<akm data dir>/opencode-runtime/`, no `OPENCODE_*`
|
|
170
|
+
variable of akm's environment reaches it, and it has no user or project
|
|
171
|
+
OpenCode config, no Claude Code skills, no model catalog fetch and no hosted
|
|
172
|
+
free models. It still
|
|
173
|
+
loads what OpenCode reads from outside its config directories: `~/.agents`,
|
|
174
|
+
and OpenCode's system config (`/etc/opencode`, or macOS managed
|
|
175
|
+
preferences).
|
|
176
|
+
- `--standalone` keeps a run to one process that ends with it, and another
|
|
177
|
+
run's unfinished turns are never resumed (OpenCode's background service
|
|
178
|
+
resumes every top-level session whose turn did not finish, whichever process
|
|
179
|
+
owns it). OpenCode makes and migrates its database at start, and two
|
|
180
|
+
processes doing that to one database break each other, so the first start of
|
|
181
|
+
the runtime's OpenCode version is a run of its own (`session list`, no model)
|
|
182
|
+
under a lock file in the runtime directory, and every run that starts with it,
|
|
183
|
+
a workflow's parallel units or another akm process's, waits for it.
|
|
184
|
+
- A plugin akm writes to the runtime's config directory gives the agent akm's
|
|
185
|
+
read tools (`akm_search`, `akm_show`, `akm_curate`), which call the `akm` that
|
|
186
|
+
started the run with `--detail agent --format json` and the run's
|
|
187
|
+
environment, so a stamped run's reads count as that run's. The same plugin lays
|
|
188
|
+
the connection's request fields, in the endpoint's own spelling, over each
|
|
189
|
+
model request, and takes off the output cap OpenCode adds to every request
|
|
190
|
+
(`max_completion_tokens: 32000` unless the model's limit says otherwise): a
|
|
191
|
+
request carries the cap the connection or the call writes, and none
|
|
192
|
+
otherwise, as on chat. A persona goes in the prompt.
|
|
193
|
+
- The commands the agent runs get the environment a CLI harness's child gets,
|
|
194
|
+
less its `OPENCODE_*` variables: akm's own, with its directories
|
|
195
|
+
(`AKM_CONFIG_DIR` and the rest) and the run's variables (workflow and task
|
|
196
|
+
`env:`, `AKM_EVENT_SOURCE`) set over it. What
|
|
197
|
+
akm sets for the OpenCode process itself (its directories and its OpenCode
|
|
198
|
+
settings) is put back to what akm runs in, or removed, for each command.
|
|
199
|
+
- The connection's key is in no process's environment: the inline config names
|
|
200
|
+
a file under `<akm data dir>/opencode-runtime/keys/` that holds it for the
|
|
201
|
+
run (0600, removed when the run ends).
|
|
202
|
+
- Sessions are stored in the runtime's own OpenCode database,
|
|
203
|
+
`<akm data dir>/opencode-runtime/data/opencode/opencode.db`; akm reads your
|
|
204
|
+
OpenCode 2 database read-only, for OpenCode 2 history (below).
|
|
205
|
+
- A timeout or an abort ends the run's process group, SIGINT first and SIGTERM
|
|
206
|
+
and SIGKILL after 5 s each, as for every harness. A unit `timeout` therefore
|
|
207
|
+
ends a turn in about the timeout when the endpoint is down; OpenCode alone
|
|
208
|
+
retries a failing endpoint with backoff for over a minute and has no config
|
|
209
|
+
setting to shorten it, so a unit with no `timeout` waits that long.
|
|
210
|
+
- OpenCode's headless `run` cancels questions and rejects permission requests,
|
|
211
|
+
and the model carries on. A run reports its session id and the tokens its turn
|
|
212
|
+
used, read from the session OpenCode keeps in the runtime's database, so a
|
|
213
|
+
workflow's `budget.max_tokens` and the unit journal count them; a harness run
|
|
214
|
+
reports neither.
|
|
215
|
+
- A failed run reports as a harness run does, a non-zero exit with OpenCode's
|
|
216
|
+
own message: the `llm_rate_limit`, `llm_content_filter` and `parse_error`
|
|
217
|
+
reasons the embedded runtime gave are not given.
|
|
218
|
+
- `platform: "opencode"` is your OpenCode, whichever major is installed, run
|
|
219
|
+
through its CLI: `opencode run` with the prompt on stdin, a model only when akm
|
|
220
|
+
names one, an agent only when the asset names one, and your `args` as written.
|
|
221
|
+
Agent work adds nothing else. Your OpenCode owns its configuration, logins and
|
|
222
|
+
sessions; akm reads, copies and embeds nothing of yours, and its runs are in
|
|
223
|
+
your OpenCode history, which improve reads. An interactive `akm agent` still
|
|
224
|
+
hands the terminal to the CLI. Model work is akm's own process: it adds its
|
|
225
|
+
agent to your inline config, read as OpenCode reads it (JSONC, and a
|
|
226
|
+
`{env:NAME}` reference written outside a string replaced by its value), and
|
|
227
|
+
keeps the rest of it, sets
|
|
228
|
+
`OPENCODE_DISABLE_FREE_MODELS=1` (OpenCode 2.1.2 and later honor it: a call
|
|
229
|
+
with no usable provider fails instead of sending the prompt to OpenCode's
|
|
230
|
+
hosted free model), and on OpenCode 2 runs `--standalone` (one process that
|
|
231
|
+
ends with the run, not a background service) with `--title akm`.
|
|
232
|
+
- A config in the old form (`engines`, `defaults.engine`, `defaults.llmEngine`,
|
|
233
|
+
`defaults.improveStrategy`, `workflow.judgeEngine`, a strategy's `engine`,
|
|
234
|
+
`model`, `llm` and `timeoutMs`) still loads: it is read as the new form in
|
|
235
|
+
memory, with one warning that names `akm migrate apply`, and the file is
|
|
236
|
+
rewritten only by `akm migrate apply`. An ordinary write (`akm config set`)
|
|
237
|
+
edits the file's own document and no longer converts it or drops what the
|
|
238
|
+
loader only reads; removing a value the old form supplies is refused, naming
|
|
239
|
+
`akm migrate apply`. `akm migrate apply` converts it for good, under a backup
|
|
240
|
+
of `config.json`:
|
|
241
|
+
- `engines` and `defaults` become `connections` and `harnesses` (the default
|
|
242
|
+
engine is renamed `default`, and references follow), `defaults.improveStrategy`
|
|
243
|
+
becomes `improve.strategy`, a strategy's per-process `engine` becomes
|
|
244
|
+
`connection` or `harness` by the target's kind, the where-fields a strategy
|
|
245
|
+
carried move to `improve.processes` and `improve.qualityGate`, and
|
|
246
|
+
`index.defaults.*` and `index.<pass>.engine` become `index.*` and
|
|
247
|
+
`connection`. An engine that is akm's own OpenCode runtime, or a setting akm
|
|
248
|
+
no longer reads, is dropped with a note.
|
|
249
|
+
- An engine's `apiKeyFile`, a literal or `${secrets/...}` `apiKey`, and the
|
|
250
|
+
same literal or secret-store `apiKey` on a connection, `embedding` or
|
|
251
|
+
`search.curateRerank`, are read and stored in `credentials.json` for the
|
|
252
|
+
connection's new name (or the `embedding` or `curateRerank` service) and the
|
|
253
|
+
endpoint the block names, then removed from the file. A key that cannot be
|
|
254
|
+
moved (its secret does not resolve, the block names no endpoint of its own, a
|
|
255
|
+
`connections` entry now gives it another endpoint than its engine wrote the key
|
|
256
|
+
for, or `credentials.json` already holds a different key or endpoint for that
|
|
257
|
+
slot) stays on the
|
|
258
|
+
connection as `apiKey`, with a note. One note per key names it, never its
|
|
259
|
+
value. `AKM_ENGINE_<NAME>_API_KEY` and `AKM_LLM_API_KEY`, when set, become
|
|
260
|
+
`apiKey: "$VAR"`. An engine that names no key, with none of those variables
|
|
261
|
+
set, gets none, and a note names the variables.
|
|
262
|
+
- A key in `credentials.json`'s older flat `{ "<name>": "<key>" }` form is
|
|
263
|
+
filed under the endpoint the config gives its block, after the file is copied
|
|
264
|
+
to `<cache dir>/config-backups/credentials.json.<timestamp>`. A block that
|
|
265
|
+
already has a stored key is never overwritten: the same key for the same
|
|
266
|
+
endpoint drops the older entry, and any other leaves both, with a note. A flat
|
|
267
|
+
key called `connections` or `services` is told from the namespace of that name
|
|
268
|
+
by its shape.
|
|
269
|
+
- The old engine names are kept in the data directory (`migrate/engine-targets.json`)
|
|
270
|
+
until no `engine:` key that names one is left in a file the migration can
|
|
271
|
+
reach, so an asset in a read-only bundle, a block it could not rewrite, or an
|
|
272
|
+
asset that is a symbolic link (read through, never rewritten) keeps its
|
|
273
|
+
meaning in the meantime, as does a retired `--engine` flag. The run
|
|
274
|
+
that forgets them adds one note, `assetEngineKeys.notes`, listing each
|
|
275
|
+
renamed engine with the flag that replaces `--engine <old name>`
|
|
276
|
+
(`--connection` or `--harness`).
|
|
277
|
+
- The user `models.json` is folded into the models of the connections and
|
|
278
|
+
harnesses it names, then moved to
|
|
279
|
+
`<cache dir>/config-backups/models.json.<timestamp>`. A connection's own
|
|
280
|
+
column beats the `*` column and the flat shorthand, which beat the engine's
|
|
281
|
+
own model; a model the config already names for an alias stands. What it
|
|
282
|
+
cannot place is listed in the notes.
|
|
283
|
+
- `engine:` on commands, agents, workflows (`defaults` and units) and task
|
|
284
|
+
sources becomes `connection:` or `harness:` by what the name is now, under
|
|
285
|
+
one backup directory per run (a name that is neither is written as
|
|
286
|
+
`harness:`, with a note). `akm migrate status` and `--dry-run` list the files.
|
|
287
|
+
The step reads the roots the runtime reads, by each bundle's adapter (an
|
|
288
|
+
`akm` stash's typed directories, an `akm-workflow` or `akm-task` bundle's
|
|
289
|
+
root, a Claude or OpenCode bundle's commands and agents, there for
|
|
290
|
+
`akm.engine` only), the default stash (`~/akm`)
|
|
291
|
+
included when no bundle or `AKM_BUNDLE_DIR` names it, and leaves a disabled
|
|
292
|
+
bundle as written, the default stash or the `AKM_BUNDLE_DIR` directory
|
|
293
|
+
included, under any spelling of its path.
|
|
294
|
+
- A connection or harness the loader ignores stays in the file, with a note
|
|
295
|
+
on what to fix; `akm migrate apply` never deletes one.
|
|
296
|
+
- The residue sweep leaves the `.akm/` of a stash a disabled bundle owns as
|
|
297
|
+
written, as the task and asset steps do.
|
|
298
|
+
- The standalone binary does local semantic search. It carries the ONNX Runtime
|
|
299
|
+
library for its platform and, the first time it embeds, copies it once into
|
|
300
|
+
`<cache dir>/onnxruntime/<version>-<platform>-<arch>/` (18 to 34 MB) and loads
|
|
301
|
+
it from there. A binary writes its native addon to the system temp directory,
|
|
302
|
+
so a `noexec` temp directory blocks semantic search (keyword search works): set
|
|
303
|
+
`TMPDIR` to an executable one.
|
|
304
|
+
Alpine/musl and Intel macOS have no native ONNX Runtime library: the index
|
|
305
|
+
reports semantic search `blocked` with the reason, and keyword search works.
|
|
306
|
+
- `akm index --format json` reports `verification.embeddingRuntime`, the runtime
|
|
307
|
+
the local embedder embedded with (`onnxruntime-node`); it is absent for a
|
|
308
|
+
remote embedding provider and when nothing was embedded locally.
|
|
309
|
+
- `akm health` has a `semantic-search` check again. `akm index` records the
|
|
310
|
+
semantic status it found (with the runtime and, when semantic search is
|
|
311
|
+
`blocked` or `unavailable` on this machine, the reason) beside its other
|
|
312
|
+
index facts, and the check reads that record with the index's current entry
|
|
313
|
+
and vector counts: `pass` when every entry has a vector on the native runtime,
|
|
314
|
+
`warn` when vectors lag, another runtime embedded, or the platform has no
|
|
315
|
+
native ONNX Runtime library (Alpine/musl, Intel macOS), `fail` when blocked
|
|
316
|
+
or unavailable for a cause that can be fixed (the library did not load). It
|
|
317
|
+
loads no model and sends no request, and search does not read
|
|
318
|
+
the record. The health report's Semantic Search line shows the check (`OK`,
|
|
319
|
+
`OFF`, `BLOCKED`, `UNAVAILABLE` or `UNKNOWN`); it used to say `OK` always.
|
|
320
|
+
|
|
321
|
+
### Changed
|
|
322
|
+
|
|
323
|
+
- Each kind of call asks for a shipped alias until something nearer names a
|
|
324
|
+
model: improve passes, extract, enrich and the index passes ask for `fast`;
|
|
325
|
+
judges (the reflect and distill quality gates, triage's judgment, workflow
|
|
326
|
+
gates) and agent work ask for `balanced`. A harness with a model map but no
|
|
327
|
+
entry for the alias warns once.
|
|
328
|
+
- Model work runs on any harness. Where a harness can be restricted it is: Claude
|
|
329
|
+
Code runs with its settings files ignored, only `Read` and `akm search`, `akm
|
|
330
|
+
show` and `akm curate`, no MCP servers and no saved transcript, Codex with
|
|
331
|
+
`--sandbox read-only`, and OpenCode 2 as an agent passed inline for the run,
|
|
332
|
+
in OpenCode 2's native `agents` map so that an entry of its name in your
|
|
333
|
+
config cannot replace it, with every tool denied except `read`, `glob` and
|
|
334
|
+
`grep` (and `akm_search`, `akm_show` and `akm_curate` when the akm plugin is
|
|
335
|
+
installed), so a tool a plugin adds is denied too; a plugin's own hooks still
|
|
336
|
+
run. Where it cannot
|
|
337
|
+
(the other platforms, and OpenCode 1, which warns once), the call runs
|
|
338
|
+
unrestricted, in a scratch directory, with a notice. A config that names an `opencode` harness for model work loads, and a
|
|
339
|
+
native agent named for model work is ignored with a notice. Agent work is not
|
|
340
|
+
restricted: it runs the program as you would.
|
|
341
|
+
- The `opencode` CLI dispatch path is no longer deprecated (0.10.261001 deprecated
|
|
342
|
+
it in favour of an `opencode-sdk` engine, which is gone): `platform:
|
|
343
|
+
"opencode"` is the `opencode` harness, your own OpenCode of either major run
|
|
344
|
+
through `opencode run`.
|
|
345
|
+
- Every process akm starts inherits akm's environment: a harness's child, a
|
|
346
|
+
workflow `exec` unit's command, a task's command and the commands of an agent
|
|
347
|
+
on akm's own runtime get the environment akm runs in, with the directories this akm
|
|
348
|
+
resolved, the run's `AKM_EVENT_SOURCE` and a unit's `env:` bindings set over it.
|
|
349
|
+
The environment allowlist, the Windows floor, the `PATH` supplement for
|
|
350
|
+
scheduler contexts, each harness's passthrough names and the passthrough
|
|
351
|
+
redaction policy are gone, and a frozen `pass_env` still parses and selects
|
|
352
|
+
nothing. A dispatch reply from any runner is scrubbed of the connection's key.
|
|
353
|
+
It, and the output and diagnostics a workflow `exec` unit journals, are
|
|
354
|
+
scrubbed of the values of credential-named variables in the environment the
|
|
355
|
+
child inherited (names such as `*_API_KEY`, `*_TOKEN`, `*_SECRET` and
|
|
356
|
+
`*_PASSWORD`, eight characters or more), the same rule a task log uses; a
|
|
357
|
+
task log also scrubs the values its `redact:` list names, and a workflow
|
|
358
|
+
journal the `secrets/` values substituted into a binding.
|
|
359
|
+
`env run --clean` keeps its own list. Agent work on OpenCode adds nothing to the
|
|
360
|
+
invocation; Codex agent work no longer sets `--sandbox workspace-write` and
|
|
361
|
+
Aider no longer gets `--no-auto-commits`, so each runs with the settings its
|
|
362
|
+
own configuration gives it (model work on Codex still runs `--sandbox
|
|
363
|
+
read-only`).
|
|
364
|
+
- Stopping a child process (a timeout, an abort, or a signal to akm) sends its
|
|
365
|
+
process group SIGINT first, then SIGTERM and SIGKILL, each after a 5 second
|
|
366
|
+
grace for as long as it still runs, where it sent SIGTERM and then SIGKILL.
|
|
367
|
+
SIGTERM also follows at once when the leader exits and leaves members of its
|
|
368
|
+
group behind. This covers agent programs, workflow `exec` units and task
|
|
369
|
+
commands. A program that records how a run ended acts on the SIGINT: OpenCode 2
|
|
370
|
+
marks its session interrupted and releases it, and only a run that had to be
|
|
371
|
+
terminated or killed stays suspended in your OpenCode history, where your own
|
|
372
|
+
OpenCode's background service may resume it (up to ten attempts, OpenCode's own
|
|
373
|
+
policy). On Windows there is no process group and a signal ends the program at
|
|
374
|
+
once.
|
|
375
|
+
- Harnesses are thin shells. akm writes only the arguments a program needs to run
|
|
376
|
+
without a person, hands it the prompt and takes its standard output as the
|
|
377
|
+
reply, as written: it no longer asks for JSON output or reads a result or a
|
|
378
|
+
session id out of it. A reply that must have a shape is parsed once by the
|
|
379
|
+
caller, from the schema instruction already in the prompt. Claude Code and pi
|
|
380
|
+
take the prompt on stdin, and their persona goes to `--append-system-prompt`
|
|
381
|
+
(appended to pi's own prompt).
|
|
382
|
+
- `akm agent` with no `--prompt` starts the harness for a person, with the
|
|
383
|
+
terminal and the harness's model; a connection has nothing to start, and the
|
|
384
|
+
command says so, naming `--prompt` and a harness.
|
|
385
|
+
- One loop corrects a reply that must have a shape. When the parser refuses the
|
|
386
|
+
reply, it is sent once more with what was wrong; reflect, distill, extract,
|
|
387
|
+
`akm proposal new`, the judges, the proposal drain's judgment and a workflow
|
|
388
|
+
unit with an output schema all use it. A call that fails ends as the dispatch
|
|
389
|
+
reported it, and a workflow exec step is never run twice to fix its output.
|
|
390
|
+
- A model call has one timeout, and it is the resolver's: the call's own setting,
|
|
391
|
+
else the connection's or harness's `timeoutMs`, else ten minutes for model work
|
|
392
|
+
(agent work on a harness runs until it finishes). A retry after a transient
|
|
393
|
+
failure spends what is left of the call's budget, and `akm remember --enrich`
|
|
394
|
+
keeps its 10 s limit on the request itself.
|
|
395
|
+
- `--engine NAME` on `akm agent`, `akm command run`, `akm task add`, `akm
|
|
396
|
+
proposal new` and `akm proposal extract`, and `--require-engines` on `akm
|
|
397
|
+
improve`, are still accepted, hidden from `--help` and completions, with one
|
|
398
|
+
warning each. `--engine` names a connection by that name, else a harness (`akm
|
|
399
|
+
task add --engine` writes `connection:` or `harness:`), and `--require-engines`
|
|
400
|
+
does nothing: `akm improve` stops at planning (exit 78) before any lock, index
|
|
401
|
+
write or log when no process that calls a model has a connection or harness to
|
|
402
|
+
run on (or there are several and none is called `default`), with no flag asking
|
|
403
|
+
for it. That is weaker than what the flag did, and a scheduled caller that
|
|
404
|
+
relied on it loses that: no check before the run that every enabled process
|
|
405
|
+
has a usable target and a working completion. A run with some processes that
|
|
406
|
+
can run and some that cannot runs the former and lists the rest in
|
|
407
|
+
`skippedProcesses`, and a configured but unusable target (a harness program
|
|
408
|
+
that is not installed, a connection that does not answer) is found when the
|
|
409
|
+
process dispatches. Run `akm health` first instead (`akm health && akm
|
|
410
|
+
improve`; it exits 4 on a warning): its `connections-and-harnesses` check names
|
|
411
|
+
each connection that does not answer, each harness program that is not
|
|
412
|
+
installed and a missing default. A did-you-mean for an unknown flag never
|
|
413
|
+
offers a hidden flag.
|
|
414
|
+
- A workflow run frozen by an earlier release (plan irVersion 7 or lower) whose
|
|
415
|
+
plan holds a command target is no longer resumed: it is abandoned (status
|
|
416
|
+
`failed`) with a message naming `akm workflow run <ref>` to start afresh.
|
|
417
|
+
Converting its engine runners would have changed unit input hashes and
|
|
418
|
+
published a second child run. Plans with no command target still decode. The
|
|
419
|
+
plan version is now 8, which freezes a connection or a harness where 7
|
|
420
|
+
froze an engine.
|
|
421
|
+
- `akm proposal extract --type opencode` and the improve extract gate read
|
|
422
|
+
OpenCode 2 history from the `session_v2` and `session_message` tables with
|
|
423
|
+
SQLite, read-only, from your OpenCode database and akm's own: top-level
|
|
424
|
+
sessions only, without subagent sessions or akm's model work (which ran as the
|
|
425
|
+
`akm-model-work` agent; OpenCode 1 keeps no such marker). The content hash
|
|
426
|
+
of every session is unchanged, so nothing is extracted again. A file or
|
|
427
|
+
session that cannot be read (a session missing from its file, a file with
|
|
428
|
+
neither OpenCode layout) is recorded as `read_failed`, not as an empty
|
|
429
|
+
`too_short` session.
|
|
430
|
+
- OpenCode's directories follow `XDG_DATA_HOME`, `XDG_CACHE_HOME` and
|
|
431
|
+
`XDG_CONFIG_HOME` on every platform, as OpenCode's own do (the data path was
|
|
432
|
+
wrong on macOS and ignored `XDG_DATA_HOME`); `akm health` follows
|
|
433
|
+
`XDG_CACHE_HOME` for OpenCode's plugin cache too.
|
|
434
|
+
- Model work no longer counts as user demand. Model work run through
|
|
435
|
+
`structured-call`, `propose` or `drain` stamped no event source, so the `akm`
|
|
436
|
+
commands its agent ran were recorded as the user's, which feeds ranking; it now
|
|
437
|
+
stamps `improve` (a task's agent still records `task`, and an unknown source
|
|
438
|
+
`unknown`).
|
|
439
|
+
- `GET /api/config` lists `connections` and `harnesses`, each a list of named
|
|
440
|
+
entries, where it listed `engines`, and the config page shows the two as
|
|
441
|
+
tables.
|
|
442
|
+
- The npm package depends on no OpenCode library: akm's own runtime fetches one
|
|
443
|
+
OpenCode binary on first use instead, so `npm install -g akm-cli` needs no
|
|
444
|
+
compiler (the OpenCode libraries it replaces pulled in a native addon that
|
|
445
|
+
built from source) and the installed package is smaller. Standalone binaries are
|
|
446
|
+
built by `scripts/build-standalone.ts` with no stubs for those libraries.
|
|
447
|
+
- Bundles are fetched when added and on `akm bundle update`. `akm index` no
|
|
448
|
+
longer re-fetches a git or website bundle after twelve hours, `--full` does
|
|
449
|
+
not force a fetch, and a failed forced refresh reports the failure instead of
|
|
450
|
+
serving the old copy for up to seven days (the previous copy stays on disk).
|
|
451
|
+
A configured npm bundle with no lock entry is skipped by `akm index` with one
|
|
452
|
+
warning naming `akm bundle update`, instead of hitting the npm registry on
|
|
453
|
+
every index run.
|
|
454
|
+
- `akm search --assets` is removed. It asked registries for asset-level hits,
|
|
455
|
+
but `akm search` never put them in its output, so the flag printed nothing; the
|
|
456
|
+
registry providers' asset scoring and the `assetHits` response field go with it.
|
|
457
|
+
- Registry hits from `akm search --from registry|all` carry `installRef` (the ref
|
|
458
|
+
for `akm bundle add`). The brief projection already listed it, but the hit was
|
|
459
|
+
built without it, so `--detail brief` showed only the name and score.
|
|
460
|
+
- `akm search --detail normal` includes `ref` on local hits, as `brief` already
|
|
461
|
+
did. `normal` was the only level that showed a hit without the ref `akm show`
|
|
462
|
+
needs.
|
|
463
|
+
- Env and secret files are indexed even when the bundle's `.gitignore` hides them
|
|
464
|
+
(`akm bundle create` ignores `env/` and `secrets/`), so `akm show env/<name>`
|
|
465
|
+
and `akm search --type env` work in a default bundle. The indexer lists the
|
|
466
|
+
git-ignored files under those two directories in addition to the tracked and
|
|
467
|
+
untracked ones; values still never reach the index.
|
|
468
|
+
- `akm health --no-probe` also skips the `plugin-version` newest-tag lookup (a
|
|
469
|
+
`git ls-remote` against the plugin marketplace). With probing off the row
|
|
470
|
+
reports `unknown` ("not probed") instead of "up to date", and the local
|
|
471
|
+
version-range check still runs.
|
|
472
|
+
- `akm task doctor` no longer reports `historyDir`. It named `$CACHE/tasks/history`,
|
|
473
|
+
which does not exist now that task run history lives in `state.db`.
|
|
474
|
+
- Four user-facing messages no longer cite deleted spec sections: the lesson
|
|
475
|
+
frontmatter error from `akm distill` ("See v1 spec §13"), the two `agent-skills`
|
|
476
|
+
lint details ("spec §4.5"), the bundle-identity-drift warning ("spec §11.5") and
|
|
477
|
+
the unknown-`quality` warning ("v1 spec §4.2").
|
|
478
|
+
- `akm config unset` removes the named key and leaves a parent object that
|
|
479
|
+
becomes empty. It used to delete the parent too, so unsetting a harness's only
|
|
480
|
+
key removed the harness and `akm agent` then exited 78 (`{}` is how a harness
|
|
481
|
+
is enabled).
|
|
482
|
+
- The local embedder runs the model on `onnxruntime-node` with
|
|
483
|
+
`@huggingface/tokenizers`. `@huggingface/transformers` and the `sharp`,
|
|
484
|
+
`@huggingface/jinja` and `onnxruntime-web` packages it brought are no longer
|
|
485
|
+
installed. akm fetches the model's four files from the Hugging Face Hub itself,
|
|
486
|
+
into the same `$HF_HOME/<repo>/` layout as before (`HF_HUB_OFFLINE` still
|
|
487
|
+
forbids the fetch), so a model cache an earlier release filled is reused. The
|
|
488
|
+
vectors are the same to within 1e-6 of Transformers.js, so an index built
|
|
489
|
+
before stays valid.
|
|
490
|
+
|
|
491
|
+
### Fixed
|
|
492
|
+
|
|
493
|
+
- `bun.lock` resolved `onnxruntime-node` to `onnxruntime-web`, so every checkout
|
|
494
|
+
and CI run embedded on WebAssembly, about eight times slower than the native
|
|
495
|
+
runtime. It resolves to the real package. (npm installs do not read `bun.lock`;
|
|
496
|
+
the release binaries could not embed at all, see Added.)
|
|
497
|
+
|
|
498
|
+
### Removed
|
|
499
|
+
|
|
500
|
+
- `engines`, the `defaults` block (`defaults.engine`, `defaults.llmEngine`, with
|
|
501
|
+
`defaults.improveStrategy` now `improve.strategy`), `workflow.judgeEngine`, a
|
|
502
|
+
strategy's `engine`, `model`, `llm` and `timeoutMs`, `provider`, and
|
|
503
|
+
`extraParams` as a key (write the request fields on the connection or model
|
|
504
|
+
entry), all read from an old file and converted by `akm migrate apply`. An
|
|
505
|
+
`extraParams` key that shadows a first-class setting (`temperature`,
|
|
506
|
+
`maxTokens`, `enableThinking`, `reasoningEffort`) is dropped with a note, and
|
|
507
|
+
the setting wins.
|
|
508
|
+
- `models.json`, the user overlay and the one akm shipped, and the `akm models
|
|
509
|
+
list` and `akm models copy-defaults` commands that managed them. Aliases live
|
|
510
|
+
on `connections.<name>.models`, and `akm models` shows and changes them.
|
|
511
|
+
- `apiKeyFile`, the implicit `AKM_ENGINE_<NAME>_API_KEY` and `AKM_LLM_API_KEY`
|
|
512
|
+
lookups, and `${secrets/...}` as a connection key. Use `apiKey: "$VAR"` or
|
|
513
|
+
`credentials.json`.
|
|
514
|
+
- `supportsJsonSchema`. When an endpoint rejects a response schema, akm retries
|
|
515
|
+
without one and remembers that for the rest of the process.
|
|
516
|
+
- The fallback engine. With no engine configured, akm used the `opencode` binary
|
|
517
|
+
on `PATH`; with no connection and no harness, model features and agent work are
|
|
518
|
+
off and each command that needs one points at `akm setup`.
|
|
519
|
+
- The `opencode-sdk` engine platform, and the load-time rule that refused model
|
|
520
|
+
work on an `opencode` engine.
|
|
521
|
+
- The LLM feature gate, with the 600 s timeout it carried: curate's rerank reads
|
|
522
|
+
`search.curateRerank.enabled` and memory inference `index.memory.enabled`
|
|
523
|
+
themselves.
|
|
524
|
+
- The per-harness result extractors and the JSON output modes they read.
|
|
525
|
+
- The `default-engine`, `default-llm-engine`, `configured-engines`,
|
|
526
|
+
`active-improve-strategy`, `thinking-control` and `engine-last-used` checks of
|
|
527
|
+
`akm health`, and its hard failure for an unreachable default connection; an
|
|
528
|
+
unreachable connection is a warning in the `connections-and-harnesses` check.
|
|
529
|
+
- `akm setup --probe` and `--config`, and the engine, Ollama and provider steps
|
|
530
|
+
of the wizard.
|
|
531
|
+
- The `opencode serve` server management, the OpenCode 1 and 2 HTTP adapters,
|
|
532
|
+
and the `@opencode-ai/sdk` and `@opencode/client` dependencies. Agent work on a
|
|
533
|
+
connection needs no OpenCode of yours or client package, so `akm health` checks
|
|
534
|
+
for neither.
|
|
535
|
+
- Asset tool requests. An agent or command's `tools:` (or a Claude command's
|
|
536
|
+
`allowed-tools:`) is no longer read, a task's `tools:` is ignored with a
|
|
537
|
+
warning, and `akm migrate apply` drops a v3 task's `akm.tools`. With them go
|
|
538
|
+
the `execution.allowedTools` config key (now an unknown key: warned, ignored
|
|
539
|
+
and dropped by `akm migrate apply`), the `EXECUTION_NOT_AUTHORIZED` error,
|
|
540
|
+
`toolPolicy` in `akm show`, the harness builders' tool flags, and recognizing
|
|
541
|
+
a file as an agent by its `tools:` key. Restrict an agent's tools in the
|
|
542
|
+
harness's own agent definition and select it with the harness's `agent`.
|
|
543
|
+
|
|
9
544
|
## [0.10.261013] - 2026-10-23
|
|
10
545
|
|
|
11
546
|
### Fixed
|
|
@@ -589,7 +1124,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
589
1124
|
its whole deadline. It now returns at once with `reason: "aborted"` and the declined tool call in `error`.
|
|
590
1125
|
- **Documented: OpenCode permission defaults in a dispatch (#1049).** OpenCode 1 asks before reading or writing outside
|
|
591
1126
|
the project directory; OpenCode 2 does not unless its config says `ask`, so akm's permission rejection only happens
|
|
592
|
-
on OpenCode 2 once you add that rule. akm changes no default. See [Configuration](docs/reference/configuration.md#
|
|
1127
|
+
on OpenCode 2 once you add that rule. akm changes no default. See [Configuration](docs/reference/configuration.md#harnesses).
|
|
593
1128
|
|
|
594
1129
|
## [0.10.26101201] - 2026-10-12
|
|
595
1130
|
|
|
@@ -1178,7 +1713,7 @@ When upgrading from 0.9.27:
|
|
|
1178
1713
|
with a message saying to set `"plugin": ["akm-opencode@next"]`, and lockstep stays on the `@latest` pin.
|
|
1179
1714
|
Missing, older-than-`@latest` or unpinned `@next` fails closed like the stable lockstep. Claude Code and
|
|
1180
1715
|
Codex are unchanged (no prerelease channel). The result gains `channel`. Works with `--check`, `--force`
|
|
1181
|
-
and `-q`. See [`akm upgrade`](docs/reference/cli.md#prereleases
|
|
1716
|
+
and `-q`. See [`akm upgrade`](docs/reference/cli.md#prereleases---next).
|
|
1182
1717
|
|
|
1183
1718
|
## [0.9.28-alpha.4] - 2026-10-08
|
|
1184
1719
|
|
|
@@ -5249,7 +5784,8 @@ install's cron schedule, not their worth.
|
|
|
5249
5784
|
instead. This is a Markdown-frontmatter-only key — a GitHub-shaped
|
|
5250
5785
|
workflow's closed root key set has no extension surface for it, the same
|
|
5251
5786
|
reason it cannot declare `params:` either. See
|
|
5252
|
-
[
|
|
5787
|
+
[Moving from akm 0.9 to 0.10: Workflows](docs/migration/v0.9-to-v0.10.md#workflows),
|
|
5788
|
+
which removed top-level `outputs:`.
|
|
5253
5789
|
- **`akm workflow plan <ref>`** (Evolving) — compiles, resolves, and freezes
|
|
5254
5790
|
a workflow exactly as starting a run would, then stops: zero durable
|
|
5255
5791
|
writes, no published run, no event, no lease. Prints the canonical step
|
package/README.md
CHANGED
|
@@ -40,6 +40,20 @@ prefers Bun for execution; old, unusable, or absent Bun installations fall
|
|
|
40
40
|
back to Node.js. Node.js remains required for the npm package. The standalone
|
|
41
41
|
binaries are runtime-free.
|
|
42
42
|
|
|
43
|
+
Local semantic search runs its embedding model on ONNX Runtime and is offered on
|
|
44
|
+
Linux x64 (glibc) and Apple-silicon macOS; every other platform uses
|
|
45
|
+
keyword search or an embedding endpoint. Choosing it in `akm setup`
|
|
46
|
+
(`--embedding local`) downloads the runtime (about 86 MB) and the model (about
|
|
47
|
+
127 MB) once into akm's cache: installing the package runs no install script and
|
|
48
|
+
downloads nothing native. See
|
|
49
|
+
[Getting Started](https://akm.fwdslsh.dev/docs/guides/getting-started/#local-semantic-search).
|
|
50
|
+
|
|
51
|
+
With a connection and no harness, agent work runs on akm's own runtime, a pinned
|
|
52
|
+
OpenCode 2 binary. The first time it runs, akm downloads that binary from the npm
|
|
53
|
+
registry (about 114 MB, once) into its cache; on Alpine/musl it needs `libstdc++`
|
|
54
|
+
and `libgcc` (the Alpine Node image has them). See
|
|
55
|
+
[Getting Started](https://akm.fwdslsh.dev/docs/guides/getting-started/#akms-own-agent-runtime).
|
|
56
|
+
|
|
43
57
|
## Quick Start
|
|
44
58
|
|
|
45
59
|
```sh
|
package/SECURITY.md
CHANGED
|
@@ -43,8 +43,8 @@ bugs, but you should be aware of them:
|
|
|
43
43
|
Workflow steps run in your shell with your PATH and your environment
|
|
44
44
|
variables — including any secrets you have exported or loaded via
|
|
45
45
|
`akm env run` / `akm secret run`. **Only add workflow sources you trust.** See
|
|
46
|
-
[`docs/
|
|
47
|
-
code"](docs/
|
|
46
|
+
[`docs/guides/run-workflows.md` — "Security: workflow sources are executed
|
|
47
|
+
code"](docs/guides/run-workflows.md#security-workflow-sources-are-executed-code)
|
|
48
48
|
for the full discussion.
|
|
49
49
|
|
|
50
50
|
### Scripts execute shell commands
|
|
@@ -87,12 +87,13 @@ graph content to an arbitrary path.
|
|
|
87
87
|
|
|
88
88
|
`akm improve` (whose strategies run processes such as reflect, distill, and
|
|
89
89
|
consolidate) and `akm proposal new` can send asset frontmatter and body to the
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
LLM, your asset content goes to that third party
|
|
94
|
-
(
|
|
95
|
-
|
|
90
|
+
connection (or harness) selected by the command, strategy, or current defaults.
|
|
91
|
+
Connections live under `connections.<name>` in `~/.config/akm/config.json`,
|
|
92
|
+
with their keys in the environment or in `~/.config/akm/credentials.json`. If you
|
|
93
|
+
configure a third-party LLM, your asset content goes to that third party, and a
|
|
94
|
+
harness you enable (Claude Code, Codex, ...) sends it wherever it is configured
|
|
95
|
+
to. Use a local endpoint (for example, `http://localhost:11434/v1` via Ollama)
|
|
96
|
+
for assets containing secrets or private notes.
|
|
96
97
|
|
|
97
98
|
## Known non-issues
|
|
98
99
|
|
|
@@ -103,6 +104,6 @@ containing secrets or private notes.
|
|
|
103
104
|
runtime-free. This is a compatibility limitation, not a security risk.
|
|
104
105
|
- **Workflows can read any file the akm process can read.** This is not a
|
|
105
106
|
bug — see "Threat model" above.
|
|
106
|
-
- **Installing `akm-cli` runs
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
- **Installing `akm-cli` runs no install script.** Neither `akm-cli` nor any
|
|
108
|
+
package it depends on declares one. The Node.js version is checked when akm
|
|
109
|
+
starts, not when it installs.
|