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
|
@@ -9,6 +9,107 @@ current-truth reference.
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
+
## Invariants
|
|
13
|
+
|
|
14
|
+
These behaviors hold across every command. Each names the test that pins it;
|
|
15
|
+
one that names none is held by review. The rules for how the code itself is
|
|
16
|
+
written are in [Core Principles](akm-core-principles.md).
|
|
17
|
+
|
|
18
|
+
- **Files are the truth.** Capabilities are files in bundles. `index.db` is
|
|
19
|
+
a derived view that `akm index` rebuilds; `state.db` holds akm's
|
|
20
|
+
bookkeeping (events, proposals, runs, salience), never capability
|
|
21
|
+
content; `logs.db` holds purgeable log lines. Every change akm makes to a
|
|
22
|
+
capability lands as a file: an accepted proposal becomes the asset, memory
|
|
23
|
+
inference writes derived children, retirement leaves an archive and a
|
|
24
|
+
tombstone, extraction writes session assets. Pinned by
|
|
25
|
+
`tests/integration/indexer/ensure-index-serve.test.ts`.
|
|
26
|
+
- **One local retrieval layer.** Every source materializes to disk and is
|
|
27
|
+
indexed the same way; `show` resolves through the index and reads from
|
|
28
|
+
disk. Registry results are opt-in and arrive in `registryHits`, never
|
|
29
|
+
merged into `hits`. A source provider fetches and refreshes and implements
|
|
30
|
+
no search or show, so source resolution, registry install and provider
|
|
31
|
+
plumbing stay behind indexing and the path from `search` or `curate` to
|
|
32
|
+
`show` is a lookup in the local index. Pinned by the `SourceProvider`
|
|
33
|
+
interface in `src/sources/provider.ts` and
|
|
34
|
+
`tests/integration/output-baseline.test.ts`.
|
|
35
|
+
- **Discovery chooses, show delivers.** `search` and `curate` return enough
|
|
36
|
+
to pick an asset and its `ref` at every detail level (a registry hit
|
|
37
|
+
carries `installRef` instead); `show` returns the payload; `--detail agent`
|
|
38
|
+
results also carry `path` and `editable`. Pinned by
|
|
39
|
+
`tests/output-shapes-unit.test.ts` and `tests/output-baseline.test.ts`.
|
|
40
|
+
- **Every token earns its place.** Default output is lean: `--detail brief`
|
|
41
|
+
lists only what is needed to choose the next asset, and `normal`, `full`
|
|
42
|
+
and `agent` widen or reshape it. `show` returns what a consumer needs to
|
|
43
|
+
act on the asset (a script's run hints, a skill's instructions, a
|
|
44
|
+
command's template, an agent's prompt, knowledge content, a workflow's
|
|
45
|
+
steps and parameters, env key names, secret metadata) and never an env or
|
|
46
|
+
secret value. Pinned by `tests/output-shapes-unit.test.ts`.
|
|
47
|
+
- **Refs are path identities.** `[bundle//]conceptId`, with `#fragment`
|
|
48
|
+
accepted by `show` only. A short ref resolves against `defaultBundle`,
|
|
49
|
+
then the remaining bundles in installation order. A rename is a new
|
|
50
|
+
identity. An agent passes the ref `search` returned to `show` and never
|
|
51
|
+
parses or builds one. Pinned by `tests/asset-ref.test.ts`,
|
|
52
|
+
`tests/resolve-ref.test.ts` and
|
|
53
|
+
`tests/contracts/ref-resolver-contract.test.ts`.
|
|
54
|
+
- **Execution happens only through named surfaces.** Workflow runs, tasks,
|
|
55
|
+
agent and command dispatch, `env run` and `secret run`, the improve and
|
|
56
|
+
proposal processes, index passes, and fetcher modules in the working
|
|
57
|
+
bundle's `scripts/wiki-fetchers/` directory during website sync. `search`
|
|
58
|
+
and `show` execute nothing; a script runs only as a task or workflow
|
|
59
|
+
target. Held by review.
|
|
60
|
+
- **Improvement is review-first.** Proposals are the unit of change: reflect,
|
|
61
|
+
distill, extract and consolidate only emit proposals. Three lanes act
|
|
62
|
+
without a person, and only with `experimental.improveAutonomy` on: memory
|
|
63
|
+
inference, memory cleanup, and a triage promote that runs the judgment
|
|
64
|
+
tier (a promote through the deterministic gates alone needs no opt-in). A
|
|
65
|
+
fix a person types with `akm feedback --replace` is applied at once, as a
|
|
66
|
+
normal accept that `akm proposal revert` undoes. Regardless of the opt-in,
|
|
67
|
+
session extraction writes session assets, and `improve` purges graced
|
|
68
|
+
archives, commits accepted proposals and auto-syncs a git-backed bundle.
|
|
69
|
+
Pinned by
|
|
70
|
+
`tests/improve-plan-autonomy-wiring.test.ts` and
|
|
71
|
+
`tests/config-experimental-improve-autonomy.test.ts`.
|
|
72
|
+
- **Writes resolve one way.** An explicit `--bundle`, then
|
|
73
|
+
`defaultWriteTarget`, then the working bundle, then an error. A
|
|
74
|
+
destination that is not writable is an error, never a fallback. Env and
|
|
75
|
+
secret values are never printed. Pinned by
|
|
76
|
+
`tests/integration/write/write-source.test.ts`,
|
|
77
|
+
`tests/integration/env/env.test.ts` and
|
|
78
|
+
`tests/integration/secret/secret-indexing.test.ts`.
|
|
79
|
+
- **Output is for automation first.** `--format json` and `--detail brief`
|
|
80
|
+
by default; failures are `{ok, error, code}` on stderr with a stable exit
|
|
81
|
+
code. Pinned by `tests/integration/output-baseline.test.ts` and
|
|
82
|
+
`tests/integration/cli-errors.test.ts`.
|
|
83
|
+
- **A workflow run executes the plan frozen at creation.** The plan, the
|
|
84
|
+
resolved request, the runner selection and the fan-out widths are
|
|
85
|
+
journaled when the run starts; a resumed run reads the journal and never
|
|
86
|
+
config, so editing config changes the next run and not the one in flight.
|
|
87
|
+
The journaled runner is symbolic (a `$VAR` reference, or a connection's name
|
|
88
|
+
for its stored key), so a credential is not frozen: dispatch materializes the
|
|
89
|
+
current key, for the frozen endpoint only, and only if the runner was frozen
|
|
90
|
+
eligible for one (`storedKey: false` marks a connection an `extends` base
|
|
91
|
+
alone defines). Pinned by `tests/workflows/child-plan-immutability.test.ts`
|
|
92
|
+
and `tests/workflows/immutable-execution-v4-red.test.ts`.
|
|
93
|
+
- **Host authority is local and never inferred.** Inherited config shares
|
|
94
|
+
portable policy only. A disabled bundle (`enabled: false`) is inert across
|
|
95
|
+
content reads, writes, indexing and execution; an explicit bundle lifecycle
|
|
96
|
+
command may still update a named disabled bundle without activating it. The
|
|
97
|
+
default bundle is carried as explicit identity and default status, never
|
|
98
|
+
taken from array position. Runtime code never invents authority: the one
|
|
99
|
+
host-local choice it fills in by itself is `scheduler.enabled`, and only from
|
|
100
|
+
evidence the operator already created on this host (a config without the list
|
|
101
|
+
takes the akm-written rows already in the native scheduler as the choice;
|
|
102
|
+
see [Configuration](../reference/configuration.md#scheduler-activation)).
|
|
103
|
+
Anything else that would need a new trust decision is reported, never
|
|
104
|
+
invented. Pinned by `tests/config.test.ts` and
|
|
105
|
+
`tests/source-source.test.ts`.
|
|
106
|
+
- **An unsafe override names one risk.** `--allow-insecure-transport` allows
|
|
107
|
+
plain HTTP and nothing else, and there is no combined bypass. Pinned for the
|
|
108
|
+
flag by `tests/integration/registry/registry-network-boundary.test.ts`; the
|
|
109
|
+
absence of a combined bypass is held by review.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
12
113
|
## Asset Types
|
|
13
114
|
|
|
14
115
|
The `akm` adapter's fourteen built-in asset types (`skill`, `command`,
|
|
@@ -100,9 +201,7 @@ User-facing item refs are path-identified:
|
|
|
100
201
|
- a rename is delete plus create: the new path is a new identity and learned
|
|
101
202
|
state does not follow it
|
|
102
203
|
|
|
103
|
-
See [`specs/ref.md`](./specs/ref.md) for the normative grammar
|
|
104
|
-
[`specs/0.9.0-decisions.md`](./specs/0.9.0-decisions.md) for the rationale
|
|
105
|
-
behind the 0.9.0 changes.
|
|
204
|
+
See [`specs/ref.md`](./specs/ref.md) for the normative grammar.
|
|
106
205
|
|
|
107
206
|
Each indexed entry stores that identity as `item_ref`, with `bundle_id` and
|
|
108
207
|
`concept_id` provenance, and stores its absolute materialized local file as
|
|
@@ -223,9 +322,8 @@ in the index, and fails closed when no configured source owns the path.
|
|
|
223
322
|
## Writing to Sources
|
|
224
323
|
|
|
225
324
|
Writes go through one helper: `src/core/write-source.ts`. This is the only
|
|
226
|
-
place in the codebase that branches on `source.kind
|
|
227
|
-
|
|
228
|
-
prose-only until 0.9.0, and drifted.
|
|
325
|
+
place in the codebase that branches on `source.kind`. Review holds that line
|
|
326
|
+
(core principle 2); the lint script that once checked it was deleted.
|
|
229
327
|
|
|
230
328
|
Command layers therefore never hold provider knowledge. Where a step is
|
|
231
329
|
meaningful only for a publication-backed target, `write-source.ts` exposes a
|
|
@@ -388,78 +486,110 @@ scripts tell "akm threw unexpectedly" apart from an ordinary `NotFoundError`
|
|
|
388
486
|
|
|
389
487
|
---
|
|
390
488
|
|
|
391
|
-
##
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
489
|
+
## Connections and Harnesses
|
|
490
|
+
|
|
491
|
+
akm reaches models through two things, and nothing else is configured to run
|
|
492
|
+
work. A **connection** is an OpenAI-compatible endpoint with an optional key and
|
|
493
|
+
the models it serves under aliases. A **harness** is an agent program the user
|
|
494
|
+
already has (Claude Code, Codex, OpenCode, and the other platforms registered in
|
|
495
|
+
`HARNESS_REGISTRY`). The connection named `default`, or the only one, is the
|
|
496
|
+
default connection; harnesses follow the same rule. Public execution selection
|
|
497
|
+
names a connection or a harness, never a profile, and
|
|
498
|
+
[Configuration](../reference/configuration.md) is the reference for both.
|
|
499
|
+
|
|
500
|
+
What runs where follows from the kind of work:
|
|
501
|
+
|
|
502
|
+
- **Model work** (the improve processes, judges, index passes, extraction,
|
|
503
|
+
`remember --enrich`) runs on the default connection as a direct request to its
|
|
504
|
+
endpoint; with no connection, on the default harness, with its tools restricted
|
|
505
|
+
where the harness can be.
|
|
506
|
+
- **Agent work** (`akm agent`, `command run`, `proposal new`, agent tasks,
|
|
507
|
+
workflow agent steps) runs on the default harness; with no harness, on **akm's
|
|
508
|
+
own runtime** over the default connection. The runtime is a pinned OpenCode 2
|
|
509
|
+
binary that akm runs as a process, has no name in config, and is not a harness.
|
|
510
|
+
- With neither a connection nor a harness, those features are off, and each
|
|
511
|
+
command that needs one says so and points at `akm setup`. There is no fallback
|
|
512
|
+
and nothing hidden.
|
|
406
513
|
|
|
407
514
|
Every execution — direct commands, tasks, workflows, improve, proposals, and
|
|
408
|
-
index passes — takes the same
|
|
409
|
-
(`src/integrations/agent/execution.ts`, `runner-dispatch.ts`):
|
|
515
|
+
index passes — takes the same steps
|
|
516
|
+
(`src/integrations/agent/resolution.ts`, `execution.ts`, `runner-dispatch.ts`):
|
|
410
517
|
|
|
411
518
|
```text
|
|
412
519
|
adapter-rendered or anonymous work
|
|
413
520
|
-> resolveExecution(input) -> { request, runner (a RunnerSpec), provenance }
|
|
414
|
-
-> buildExecution(request, runner) -> harness argv inputs or chat messages
|
|
415
|
-
-> runExecution(built, options) ->
|
|
521
|
+
-> buildExecution(request, runner) -> harness argv inputs, runtime inputs, or chat messages
|
|
522
|
+
-> runExecution(built, options) -> harness program, akm's OpenCode runtime, or direct chat
|
|
416
523
|
```
|
|
417
524
|
|
|
418
|
-
`resolveExecution`
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
wins: the
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
525
|
+
`resolveExecution` asks `resolveTarget` (the one resolver; `akm health`, `akm
|
|
526
|
+
info` and `akm task explain` use it too, so what they print is what a call does)
|
|
527
|
+
for the connection or harness and the model, then merges one set of defaults,
|
|
528
|
+
nearest wins. The layers run farthest to nearest: the shipped alias for the kind
|
|
529
|
+
of work, the configuration for the process, the persona, the command, the
|
|
530
|
+
invocation defaults, and the current call's flags. A connection or harness that
|
|
531
|
+
is named and not configured is an error (exit 78) that lists the configured names;
|
|
532
|
+
the default is used only when nothing was named. A
|
|
533
|
+
model is an alias, looked up on the selected connection or harness, or an exact
|
|
534
|
+
name; the request records the exact final model. A connection's request fields
|
|
535
|
+
and the model entry's are sent as written, under the portable settings
|
|
536
|
+
(`temperature`, `maxTokens`, ...) the layers ask for, which the one translation
|
|
537
|
+
in `src/core/llm-inference.ts` writes in the endpoint's own spelling. Omitted,
|
|
538
|
+
explicit `null`, zero, and empty values stay distinct. The result's
|
|
427
539
|
`provenance` names the layer behind each field (`akm task explain`,
|
|
428
540
|
`command run --dry-run`).
|
|
429
541
|
|
|
430
542
|
`buildExecution` hands the request to the selected harness's own builder
|
|
431
|
-
(registered on `HARNESS_REGISTRY`),
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
543
|
+
(registered on `HARNESS_REGISTRY`), to the runtime's lowerer, or builds chat
|
|
544
|
+
messages for a direct request. A harness builder is a thin shell: it names the
|
|
545
|
+
program's arguments, delivers the prompt (on stdin where the program reads it,
|
|
546
|
+
as an argument otherwise) and takes standard output as the reply. A field the
|
|
547
|
+
transport cannot carry becomes a secret-free `untranslated-field` notice and
|
|
548
|
+
dispatch continues.
|
|
549
|
+
|
|
550
|
+
Credentials stay symbolic (a `$VAR` reference, or the connection's name for its
|
|
551
|
+
`credentials.json` entry) in everything `resolveExecution` returns, so a request
|
|
552
|
+
and runner can be journaled. `runExecution()` materializes the current value at
|
|
553
|
+
each dispatch (`src/core/config/credentials.ts`: the variable's value, else the
|
|
554
|
+
key stored for that connection and the endpoint it was frozen with) and scrubs it
|
|
555
|
+
from the result, together with the values of credential-named variables in the
|
|
556
|
+
environment the child inherited (names such as `*_API_KEY`, `*_TOKEN`, `*_SECRET`
|
|
557
|
+
and `*_PASSWORD`, eight characters or more: `collectInferredSecretValues`,
|
|
558
|
+
`src/core/redaction.ts`, the rule a task log uses). A harness has no key of akm's,
|
|
559
|
+
so a harness reply is scrubbed of the inherited values alone. Two things are
|
|
560
|
+
therefore different at resume: workflow resume calls
|
|
561
|
+
`buildExecutionFromWire()` on the journaled `{ request, runner }` and reads no
|
|
562
|
+
config, so a config edit after the freeze cannot change a resumed unit's
|
|
563
|
+
endpoint, model or settings; but the key is read again at dispatch (a stored key is used only for a
|
|
564
|
+
connection this host's own config defines, which `resolveTarget` records on the
|
|
565
|
+
runner as `storedKey: false` when it does not, so the answer does not depend on
|
|
566
|
+
whether a config is loaded), so a rotated key reaches the resumed unit, and only
|
|
567
|
+
at the endpoint it was frozen with. The prompt-free interactive `akm agent` launch resolves its
|
|
568
|
+
harness directly and starts it with the terminal inherited; a connection has
|
|
569
|
+
nothing to start.
|
|
570
|
+
|
|
571
|
+
A config in the older `engines` form is converted to `connections` and
|
|
572
|
+
`harnesses` by one pure function (`src/core/config/convert-engines.ts`), in
|
|
573
|
+
memory on every load and permanently by `akm migrate apply`.
|
|
574
|
+
|
|
575
|
+
Task source v4 execution and durable workflow dispatch use this runtime
|
|
576
|
+
boundary. Markdown workflows compile through source IR v1; new starts freeze
|
|
577
|
+
`irVersion: 8`, which records a connection or harness where earlier versions
|
|
578
|
+
recorded an engine. A stored plan that decodes runs whatever release froze it
|
|
579
|
+
(plans with only exec steps from `irVersion` 5 on decode); one that does not,
|
|
580
|
+
which includes every earlier plan with a command step, is marked abandoned and
|
|
581
|
+
`akm workflow run <ref>` starts afresh. Only a plan a newer akm froze is
|
|
582
|
+
refused, naming the upgrade. AKM does not support full GitHub Actions semantics
|
|
583
|
+
or arbitrary remote action execution.
|
|
454
584
|
|
|
455
585
|
### In-tree LLM helpers (`src/llm/`)
|
|
456
586
|
|
|
457
587
|
Every helper under `src/llm/` is a **bounded, single-shot, stateless** call.
|
|
458
588
|
Concretely:
|
|
459
589
|
|
|
460
|
-
- Each public export is either a
|
|
461
|
-
`splitMemoryIntoAtomicFacts`,
|
|
462
|
-
`
|
|
590
|
+
- Each public export is either a stateless function (`chatCompletion` performs
|
|
591
|
+
one HTTP request and keeps nothing between calls; `splitMemoryIntoAtomicFacts`,
|
|
592
|
+
`resolveIndexPassExecution`, `parseJsonResponse`, …) or a factory that returns
|
|
463
593
|
a one-shot client tied to the symbolic runner/config the caller passes in.
|
|
464
594
|
- No module under `src/llm/` keeps session, conversation, or response state at
|
|
465
595
|
module scope. The only module-level singleton is the local embedder
|
|
@@ -468,43 +598,94 @@ Concretely:
|
|
|
468
598
|
`resetLocalEmbedder()` so tests can construct a fresh pipeline.
|
|
469
599
|
- `callStructured()` is the common bounded structured-LLM seam: it adapts an
|
|
470
600
|
already-resolved symbolic runner into an inline resolved request, lowers it,
|
|
471
|
-
and dispatches
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
601
|
+
and dispatches it through `runExecution`, which materializes the connection's
|
|
602
|
+
key at dispatch like every other dispatch and re-runs no alias resolution.
|
|
603
|
+
Index callers use `resolveIndexPassExecution()` to freeze the typed
|
|
604
|
+
`{ runner, notices }` selection once per invocation; there is no separate
|
|
605
|
+
readiness projection. Which improve processes run is chosen
|
|
606
|
+
by `improve.strategies`, and where each runs by `improve.processes`; see
|
|
607
|
+
`docs/reference/configuration.md` for canonical config paths.
|
|
477
608
|
|
|
478
|
-
|
|
479
|
-
|
|
609
|
+
Review holds the seam; the test that once inspected the module shape of each
|
|
610
|
+
`src/llm/*` entry was deleted.
|
|
480
611
|
|
|
481
|
-
### External agents (`src/integrations/agent/`)
|
|
612
|
+
### External agents (`src/integrations/agent/`, `src/integrations/harnesses/`)
|
|
482
613
|
|
|
483
|
-
|
|
614
|
+
Agent programs are reachable by two execution paths, both behind
|
|
615
|
+
`runExecution`:
|
|
484
616
|
|
|
485
617
|
**Spawn path** (`src/integrations/agent/spawn.ts`):
|
|
486
618
|
|
|
487
|
-
- `runAgent(profile,
|
|
488
|
-
|
|
489
|
-
|
|
619
|
+
- `runAgent(profile, options)` is the single shell-out entry point. It owns
|
|
620
|
+
process spawn, captured/interactive stdio, hard timeout, and structured
|
|
621
|
+
failure reasons. The child's environment is the one akm runs in, with the
|
|
622
|
+
directories this akm resolved and the call's own variables set over it.
|
|
623
|
+
- The `opencode` harness is the user's installed OpenCode, both majors, through
|
|
624
|
+
`opencode run` with the prompt on stdin
|
|
625
|
+
(`src/integrations/harnesses/opencode/agent-builder.ts`). Their OpenCode owns
|
|
626
|
+
its configuration, logins and sessions; akm embeds, copies and reads none of it
|
|
627
|
+
to run. Agent work runs it as the user would; model work is akm's own process
|
|
628
|
+
([How akm runs a harness](../reference/configuration.md#how-akm-runs-a-harness)).
|
|
490
629
|
- The `AgentRunResult` envelope carries `{ ok, exitCode, stdout, stderr,
|
|
491
|
-
durationMs, reason?, error?,
|
|
492
|
-
`"timeout"
|
|
630
|
+
durationMs, reason?, error?, ... }` where `reason` is a typed code such as
|
|
631
|
+
`"timeout"`, `"spawn_failed"`, `"non_zero_exit"` or `"parse_error"`. Callers
|
|
493
632
|
never see raw process errors.
|
|
494
633
|
|
|
495
|
-
**
|
|
496
|
-
|
|
497
|
-
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
634
|
+
**akm's OpenCode runtime** (`src/integrations/harnesses/opencode/runtime/`):
|
|
635
|
+
|
|
636
|
+
- It is akm's agent runtime behind one application-owned port,
|
|
637
|
+
`src/integrations/agent/runtime-port.ts`: the lowering target a request is
|
|
638
|
+
lowered for (`lowering`) and `run` for one resolved dispatch. Lowering and
|
|
639
|
+
dispatch use only the port; the one module that names this folder is
|
|
640
|
+
`src/integrations/agent/runtime.ts`, and the folder reads no config
|
|
641
|
+
(`tests/contracts/runtime-port-boundary.test.ts` checks both).
|
|
642
|
+
- It is a pinned OpenCode 2 binary run as a process, one per run: `opencode run
|
|
643
|
+
--standalone --title akm` with the prompt on standard input and the reply on
|
|
644
|
+
standard output, the same command the `opencode` harness builds for OpenCode 2
|
|
645
|
+
model work. akm fetches the binary from the npm registry the first time the
|
|
646
|
+
runtime runs and keeps it in its cache (`binary.ts`: the package for the
|
|
647
|
+
platform, checked against the registry's integrity hash before anything is
|
|
648
|
+
extracted). It depends on no OpenCode library, so nothing of OpenCode is
|
|
649
|
+
installed with akm.
|
|
650
|
+
- The process is akm's own (`command.ts`): the connection a run was dispatched
|
|
651
|
+
with is its only provider (endpoint, key, model and context window as the run
|
|
652
|
+
froze them, never from the live config); its config, data, cache, state and
|
|
653
|
+
temp directories are `<akm data dir>/opencode-runtime/{config,data,cache,state,tmp}`;
|
|
654
|
+
no user or project OpenCode configuration is read (OpenCode still reads
|
|
655
|
+
`~/.agents` and its system config), nor are your Claude Code skills, its free
|
|
656
|
+
models and model-catalog fetch are off, and the `OPENCODE_*` variables akm runs with are not passed to it.
|
|
657
|
+
`--standalone` keeps a run to one process that ends with it, and replays no
|
|
658
|
+
killed session. OpenCode makes and migrates its database at start and two
|
|
659
|
+
processes doing that to one database break each other, so the first start of
|
|
660
|
+
this OpenCode version is a run of its own (`session list`, no model) under a
|
|
661
|
+
lock file in the runtime directory (`prepare.lock`, a dead holder reclaimed),
|
|
662
|
+
which leaves a `prepared-<version>` marker; runs that start with it, in this
|
|
663
|
+
akm process or another, wait for it.
|
|
664
|
+
- The process loads akm's plugin (`src/assets/opencode/akm-plugin.js`, written
|
|
665
|
+
to the runtime's config directory): `akm_search`, `akm_show` and `akm_curate`
|
|
666
|
+
run the akm that started the run, by the argv it runs as (`AKM_OPENCODE_CLI`,
|
|
667
|
+
a JSON array: the executable alone when compiled, the runtime and the script
|
|
668
|
+
otherwise), the
|
|
669
|
+
connection's request fields are laid over each model request, with OpenCode's
|
|
670
|
+
own output cap taken off, and the variables akm set for the process (its
|
|
671
|
+
directories and its OpenCode settings) are put back to akm's own, or removed,
|
|
672
|
+
in the environment of the commands the agent runs.
|
|
673
|
+
- The connection's key is in no environment: the inline config references it as
|
|
674
|
+
`{file:<data>/opencode-runtime/keys/<session>}`, a 0600 file written for the
|
|
675
|
+
run and removed after it.
|
|
676
|
+
- Agent work runs OpenCode's default agent with its normal tools. Model work never
|
|
677
|
+
runs here: on a connection it is a direct request to its endpoint.
|
|
678
|
+
- Every session is stored in akm's own OpenCode database
|
|
679
|
+
(`<akm data dir>/opencode-runtime/data/opencode/opencode.db`), which `akm
|
|
680
|
+
proposal extract --type opencode` reads back with SQLite alone, beside your own
|
|
681
|
+
OpenCode's database.
|
|
682
|
+
- Nobody can answer an akm run: OpenCode's headless `run` cancels questions and
|
|
683
|
+
rejects permission requests, and the model carries on.
|
|
684
|
+
- The run goes through the spawn path every agent run does (`runBuiltCommand`,
|
|
685
|
+
`src/integrations/agent/spawn.ts`): one deadline and one abort signal, the
|
|
686
|
+
SIGINT, SIGTERM, SIGKILL ladder, and captured output. A run that cannot start
|
|
687
|
+
(no binary and no registry to fetch it from) fails as `spawn_failed`, naming
|
|
688
|
+
the package, the URL and the cache path.
|
|
508
689
|
|
|
509
690
|
New tasks are task source v4 `.yml` assets. Normal execution rejects v2 and v3
|
|
510
691
|
and directs operators to the explicit preview/apply migrator. Task source v4
|
|
@@ -528,15 +709,20 @@ activity registry around them; `state.db` writers serialize on SQLite's own
|
|
|
528
709
|
| `src/cli/` | citty composition helpers |
|
|
529
710
|
| `src/core/asset/asset-placement.ts` | asset type registry and canonical source directories (`PLACEMENT_SPECS`) |
|
|
530
711
|
| `src/core/asset/asset-ref.ts` | asset ref parsing and normalization (`parseBundleRef`) |
|
|
531
|
-
| `src/core/config/config.ts` | config loading, validation, env resolution |
|
|
712
|
+
| `src/core/config/config.ts` | config loading, validation, env resolution; the default connection and harness |
|
|
713
|
+
| `src/core/config/credentials.ts` | `credentials.json` and the dispatch-time resolution of a connection's key (`$VAR`, else the stored entry) |
|
|
714
|
+
| `src/core/config/convert-engines.ts` | the one conversion of the older `engines` / `defaults` form to `connections` / `harnesses`, called by the loader and by `akm migrate apply` |
|
|
532
715
|
| `src/core/errors.ts` | error classes with stable codes and hints |
|
|
533
716
|
| `src/core/parse.ts` | shared JSON parsing: think/fence stripping, balanced-brace extraction |
|
|
534
717
|
| `src/core/concurrent.ts` | bounded concurrency pool (`concurrentMap`, default 1 worker) |
|
|
535
718
|
| `src/core/write-source.ts` | the single write helper (branches on `source.kind`) |
|
|
536
719
|
| `src/execution/resolved-request.ts` | the versioned resolved execution request and its canonical wire form (tolerant decode) |
|
|
537
|
-
| `src/integrations/agent/
|
|
538
|
-
| `src/integrations/agent/
|
|
539
|
-
| `src/integrations/agent/
|
|
720
|
+
| `src/integrations/agent/resolution.ts` | `resolveTarget`: the connection or harness a call runs on, and its model, timeout and request fields |
|
|
721
|
+
| `src/integrations/agent/execution.ts` | `resolveExecution` (target, layers, model alias, persona) and `buildExecution` / `buildExecutionFromWire` |
|
|
722
|
+
| `src/integrations/agent/runner-dispatch.ts` | `runExecution`: reads credentials at dispatch, runs harness / runtime / chat, redacts the result |
|
|
723
|
+
| `src/integrations/agent/request-lowering.ts` | lowers a resolved request for a harness or the runtime, reporting what the target cannot carry |
|
|
724
|
+
| `src/integrations/harnesses/` | `HARNESS_REGISTRY` and one folder per harness (thin shells that turn a request into argv, env and stdin) |
|
|
725
|
+
| `src/commands/targets.ts` | the table of connections, harnesses and the work on them that `akm health`, `akm info` and `akm setup` print |
|
|
540
726
|
| `src/sources/provider.ts` | minimal `SourceProvider` interface |
|
|
541
727
|
| `src/sources/providers/` | filesystem / git / website / npm implementations |
|
|
542
728
|
| `src/sources/resolve.ts` | filesystem path resolution for refs |
|
|
@@ -556,18 +742,16 @@ activity registry around them; `state.db` writers serialize on SQLite's own
|
|
|
556
742
|
| `src/commands/agent/` | contribute/agent command surface |
|
|
557
743
|
| `src/registry/providers/` | registry provider implementations (static-index, skills-sh) |
|
|
558
744
|
| `src/output/shapes/`, `src/output/text/` | JSON-envelope and text-output registries per command (#490) — a parallel concern to `src/output/renderers.ts`'s per-asset-type `show` renderers, which is still live and self-registering, not replaced |
|
|
559
|
-
| `src/workflows/authoring/` | workflow authoring
|
|
745
|
+
| `src/workflows/authoring/` | workflow authoring |
|
|
560
746
|
| `src/workflows/runtime/runs.ts` | workflow run persistence (raw SQL lives in `src/storage/repositories/workflow-runs-repository.ts`) |
|
|
561
747
|
| `src/workflows/runtime/` | run lifecycle: runs, checkin, agent-identity |
|
|
562
748
|
| `src/llm/client.ts` | OpenAI-compatible chat completions client (stateless, single request/response) |
|
|
563
|
-
| `src/llm/index-passes.ts` | per-pass
|
|
564
|
-
| `src/llm/memory-infer.ts` | atomic-fact split helper (
|
|
749
|
+
| `src/llm/index-passes.ts` | per-pass connection or harness resolution for `akm index` (`index.*`) |
|
|
750
|
+
| `src/llm/memory-infer.ts` | atomic-fact split helper (runs where `improve.processes.memoryInference` or `index.memory` says) |
|
|
565
751
|
| `src/llm/embedder.ts` | local + remote embedder facade with cached pipeline |
|
|
566
752
|
| `src/integrations/agent/spawn.ts` | agent CLI shell-out entry point (`runAgent`) |
|
|
567
|
-
| `src/integrations/harnesses/opencode
|
|
568
|
-
| `src/integrations/agent/
|
|
569
|
-
| `src/integrations/agent/profiles.ts` | internal spawn descriptors used after agent-engine lowering |
|
|
570
|
-
| `src/integrations/agent/engine-resolution.ts` | named engine and symbolic transport-material resolution; exact request model projection happens in execution lowering |
|
|
753
|
+
| `src/integrations/harnesses/opencode/runtime/` | akm's own runtime: the pinned OpenCode binary, fetched and run as a process |
|
|
754
|
+
| `src/integrations/agent/profiles.ts` | internal spawn descriptors, built from the harness registry |
|
|
571
755
|
| `src/llm/structured-call.ts` | bounded structured-LLM adapter through the common resolved/lowered execution seam |
|
|
572
756
|
| `src/integrations/agent/detect.ts` | PATH-based agent CLI detection for `akm setup` |
|
|
573
757
|
|
|
@@ -37,7 +37,7 @@ everything else routes through `akm proposal accept`.
|
|
|
37
37
|
for every entry and `akm feedback` for the entry it touched.
|
|
38
38
|
- **Strategies** (`src/commands/improve/improve-strategies.ts`,
|
|
39
39
|
`src/assets/improve-strategies/*.json`) — named presets that decide which
|
|
40
|
-
improve processes run and with what
|
|
40
|
+
improve processes run and with what limits and gates (where each runs is `improve.processes`).
|
|
41
41
|
- **Autonomy gate** (`src/commands/improve/autonomy-gate.ts`) — downgrades
|
|
42
42
|
the handful of processes that would otherwise mutate assets without review
|
|
43
43
|
(memory inference, memory cleanup, and a judged triage promote), unless
|
|
@@ -374,7 +374,13 @@ exactly this path (`proposal drain --promote` without judgment): 0.91 (terra) an
|
|
|
374
374
|
|
|
375
375
|
Every downgrade is reported, not silent: it warns on stderr, appends an
|
|
376
376
|
`improve_skipped` event with `reason: "autonomy_gated"`, and is counted in
|
|
377
|
-
`akm health`'s improve skip-reason summary.
|
|
377
|
+
`akm health`'s improve skip-reason summary. The `default` strategy enables
|
|
378
|
+
`memoryInference`, so every live `akm improve` run on an install without the
|
|
379
|
+
opt-in warns `[improve] memoryInference skipped` and names
|
|
380
|
+
`experimental.improveAutonomy`. That is by design, because a gated lane is never
|
|
381
|
+
a silent no-op (`applyAutonomyGate` in `src/commands/improve/autonomy-gate.ts`,
|
|
382
|
+
the warning in `runImproveStageSequence` in `src/commands/improve/improve.ts`).
|
|
383
|
+
Consolidation stays enabled with
|
|
378
384
|
autonomy off: both its passes only ever emit a reviewable proposal. The one
|
|
379
385
|
pair-pass `retire` proposal `triage` `applyMode: "promote"` accepts is a
|
|
380
386
|
retirement the pair pass staged (nothing unique to the retired side, confirmed
|
|
@@ -93,7 +93,6 @@ ties broken by registration order (later wins). The signals:
|
|
|
93
93
|
| Specificity | Signal | Result |
|
|
94
94
|
| --- | --- | --- |
|
|
95
95
|
| 25 | `SKILL.md` (skill directory) | `skill` |
|
|
96
|
-
| 20 | `tools` frontmatter | `agent` |
|
|
97
96
|
| 19 | workflow markdown structure | `workflow` |
|
|
98
97
|
| 18 | command frontmatter / `$ARGUMENTS` body placeholders | `command` |
|
|
99
98
|
| 15 | immediate parent dir hint | directory-specific type |
|
|
@@ -120,7 +119,6 @@ ties broken by registration order (later wins). The signals:
|
|
|
120
119
|
|
|
121
120
|
| Signal | Type | Specificity |
|
|
122
121
|
| --- | --- | --- |
|
|
123
|
-
| `tools` in frontmatter | `agent` | 20 |
|
|
124
122
|
| workflow heading/step structure | `workflow` | 19 |
|
|
125
123
|
| `agent` in frontmatter | `command` | 18 |
|
|
126
124
|
| `$ARGUMENTS` or `$1`-`$3` in body | `command` | 18 |
|
|
@@ -147,7 +145,7 @@ Unknown string values warn once at runtime and remain searchable.
|
|
|
147
145
|
| `scripts/deploy.sh` | parent dir (15) → `script` | `scripts/deploy.sh` |
|
|
148
146
|
| `skills/review/SKILL.md` | `SKILL.md` (25) → `skill` | `skills/review` |
|
|
149
147
|
| `commands/release.md` with `agent: coder` | command frontmatter (18) | `commands/release` |
|
|
150
|
-
| `agents/reviewer.md`
|
|
148
|
+
| `agents/reviewer.md` | parent dir (15) → `agent` | `agents/reviewer` |
|
|
151
149
|
| `workflows/release.md` with workflow structure | structure (19) → `workflow` | `workflows/release` |
|
|
152
150
|
| `env/prod.env` | parent dir (15) → `env` | `env/prod` |
|
|
153
151
|
| `secrets/deploy-token` | parent dir (15) → `secret` | `secrets/deploy-token` |
|
|
@@ -16,13 +16,14 @@ git (the 08-F1 recovery pattern — see step 3).
|
|
|
16
16
|
`~/.config/akm/config.json` (`%APPDATA%\akm\config.json` on Windows;
|
|
17
17
|
override with `AKM_CONFIG_DIR`). This file is gitignored on the host, so the
|
|
18
18
|
recovery source is the ONE versioned copy committed to the bundle git
|
|
19
|
-
(08-F1 pattern). Copy that file into place; it carries
|
|
20
|
-
`
|
|
19
|
+
(08-F1 pattern). Copy that file into place; it carries the `connections`,
|
|
20
|
+
`harnesses`, and cron-load-bearing improve
|
|
21
21
|
strategies that are otherwise unrecoverable.
|
|
22
|
-
4. **Provide secrets/env.** `config.json` references API keys via `$
|
|
23
|
-
placeholders; export those environment variables (or restore
|
|
24
|
-
|
|
25
|
-
the
|
|
22
|
+
4. **Provide secrets/env.** `config.json` references API keys via `$VAR`
|
|
23
|
+
placeholders; export those environment variables (or restore
|
|
24
|
+
`credentials.json` from your own backup; it is never part of `config.json`)
|
|
25
|
+
so the connections and the embedding endpoint resolve. Never commit the
|
|
26
|
+
resolved values.
|
|
26
27
|
5. **Restore the working bundle.** Clone your bundle git remote to the path
|
|
27
28
|
named by your working bundle's entry under `bundles` in the restored
|
|
28
29
|
config (`defaultBundle` selects which one; default path `~/akm`). There is
|