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
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* Where akm's work runs, as one table: a row for each configured connection
|
|
6
|
+
* and harness, and a row for each kind of work naming the connection or
|
|
7
|
+
* harness, and the model, it resolves to. The work rows are resolved by the same
|
|
8
|
+
* resolvers the calls use, so the table never disagrees with what a call does.
|
|
9
|
+
*
|
|
10
|
+
* Pure but for the key and PATH lookups it reads. What needs the network or a
|
|
11
|
+
* process (is the endpoint reachable, what does the harness report as its
|
|
12
|
+
* version) is passed in by the caller that wants it: `akm health` supplies
|
|
13
|
+
* them, `akm info` does not.
|
|
14
|
+
*/
|
|
15
|
+
import { ambiguousDefaultAdvice, defaultConnection, defaultHarness, } from "../core/config/config.js";
|
|
16
|
+
import { readCredential } from "../core/config/credentials.js";
|
|
17
|
+
import { IMPROVE_ENGINE_PROCESSES } from "../core/config/engine-semantics.js";
|
|
18
|
+
import { SHIPPED_ALIAS } from "../core/config/model-aliases.js";
|
|
19
|
+
import { envReferenceName } from "../core/config/schema/primitives.js";
|
|
20
|
+
import { ConfigError } from "../core/errors.js";
|
|
21
|
+
import { redactUrlCredentials } from "../core/redaction.js";
|
|
22
|
+
import { defaultWhich } from "../integrations/agent/detect.js";
|
|
23
|
+
import { resolveTarget } from "../integrations/agent/resolution.js";
|
|
24
|
+
import { DEFAULT_LOCAL_MODEL } from "../llm/embedder.js";
|
|
25
|
+
import { effectiveEmbedding } from "../llm/embedders/connection.js";
|
|
26
|
+
import { resolveIndexPassExecution } from "../llm/index-passes.js";
|
|
27
|
+
import { resolveImproveExecution } from "./improve/execution.js";
|
|
28
|
+
function keyState(connection, name, env) {
|
|
29
|
+
const variable = connection.apiKey === undefined ? undefined : envReferenceName(connection.apiKey);
|
|
30
|
+
if (variable !== undefined)
|
|
31
|
+
return env[variable]?.trim() ? "env-set" : "env-unset";
|
|
32
|
+
return readCredential({ connection: name }, connection.endpoint) !== undefined ? "credentials" : "none";
|
|
33
|
+
}
|
|
34
|
+
function connectionRows(input) {
|
|
35
|
+
const { config } = input;
|
|
36
|
+
const defaultName = defaultConnection(config)?.name;
|
|
37
|
+
return Object.entries(config.connections ?? {}).map(([name, connection]) => {
|
|
38
|
+
const reach = input.reachability?.get(name);
|
|
39
|
+
return {
|
|
40
|
+
type: "connection",
|
|
41
|
+
name,
|
|
42
|
+
default: name === defaultName,
|
|
43
|
+
endpoint: redactUrlCredentials(connection.endpoint),
|
|
44
|
+
key: keyState(connection, name, input.env ?? process.env),
|
|
45
|
+
...(reach ? { reachable: reach.reachable, ...(reach.error ? { error: reach.error } : {}) } : {}),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** A harness's binary, as a call to it would resolve it. */
|
|
50
|
+
function harnessBin(config, name, harness) {
|
|
51
|
+
try {
|
|
52
|
+
const target = resolveTarget({ config, layers: [{ harness: name }] });
|
|
53
|
+
if (target.kind === "harness")
|
|
54
|
+
return target.bin;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Falls through: nothing to look up.
|
|
58
|
+
}
|
|
59
|
+
return harness.bin ?? harness.platform ?? name;
|
|
60
|
+
}
|
|
61
|
+
function harnessRows(input) {
|
|
62
|
+
const { config } = input;
|
|
63
|
+
const defaultName = defaultHarness(config)?.name;
|
|
64
|
+
const which = input.which ?? defaultWhich;
|
|
65
|
+
return Object.entries(config.harnesses ?? {}).map(([name, harness]) => {
|
|
66
|
+
const version = input.versions?.get(name);
|
|
67
|
+
const bin = harnessBin(config, name, harness);
|
|
68
|
+
return {
|
|
69
|
+
type: "harness",
|
|
70
|
+
name,
|
|
71
|
+
default: name === defaultName,
|
|
72
|
+
platform: harness.platform ?? name,
|
|
73
|
+
bin,
|
|
74
|
+
installed: Boolean(which(bin)),
|
|
75
|
+
...(harness.modelWork === false ? { modelWork: false } : {}),
|
|
76
|
+
...(version ? { version } : {}),
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** What a resolver says: a runner, nothing (not set up), or what is wrong with the config. */
|
|
81
|
+
function attempt(resolve) {
|
|
82
|
+
try {
|
|
83
|
+
const runner = resolve();
|
|
84
|
+
return runner ? { runner } : {};
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
if (err instanceof ConfigError && (err.code === "LLM_NOT_CONFIGURED" || err.code === "AGENT_NOT_CONFIGURED")) {
|
|
88
|
+
return {};
|
|
89
|
+
}
|
|
90
|
+
return { problem: err instanceof Error ? err.message : String(err) };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const sameTarget = (a, b) => a.runner?.kind === b.runner?.kind && a.runner?.name === b.runner?.name && a.runner?.model === b.runner?.model;
|
|
94
|
+
/** A work row from its base resolution and the variants that may resolve somewhere else. */
|
|
95
|
+
function runnerRow(process, base, variants = [], ambiguous) {
|
|
96
|
+
const overrides = variants
|
|
97
|
+
.filter(([, variant]) => !sameTarget(variant, base))
|
|
98
|
+
.map(([name, variant]) => ({
|
|
99
|
+
name,
|
|
100
|
+
kind: variant.runner?.kind ?? null,
|
|
101
|
+
target: variant.runner?.name ?? null,
|
|
102
|
+
model: variant.runner?.model ?? null,
|
|
103
|
+
}));
|
|
104
|
+
// Work that resolves to nothing because the config has several entries and no default is not "not set up".
|
|
105
|
+
const problem = base.problem ??
|
|
106
|
+
variants.find(([, variant]) => variant.problem)?.[1].problem ??
|
|
107
|
+
(base.runner ? undefined : ambiguous);
|
|
108
|
+
return {
|
|
109
|
+
type: "process",
|
|
110
|
+
process,
|
|
111
|
+
kind: base.runner?.kind ?? null,
|
|
112
|
+
target: base.runner?.name ?? null,
|
|
113
|
+
model: base.runner?.model ?? null,
|
|
114
|
+
...(overrides.length > 0 ? { overrides } : {}),
|
|
115
|
+
...(problem ? { problem } : {}),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function embeddingRow(config, ambiguous) {
|
|
119
|
+
const off = { type: "process", process: "embedding", kind: null, target: null, model: null };
|
|
120
|
+
if (config.semanticSearchMode === "off")
|
|
121
|
+
return off;
|
|
122
|
+
// A model with no endpoint of its own is served by the default connection; with none to choose, the built-in embedder runs instead.
|
|
123
|
+
const wantsDefaultConnection = config.embedding?.model !== undefined && config.embedding.endpoint === undefined;
|
|
124
|
+
const embedding = effectiveEmbedding(config);
|
|
125
|
+
if (embedding?.endpoint === undefined) {
|
|
126
|
+
return {
|
|
127
|
+
...off,
|
|
128
|
+
kind: "local",
|
|
129
|
+
target: "built-in",
|
|
130
|
+
model: embedding?.localModel ?? DEFAULT_LOCAL_MODEL,
|
|
131
|
+
...(wantsDefaultConnection && ambiguous ? { problem: ambiguous } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const served = config.embedding?.endpoint === undefined;
|
|
135
|
+
return {
|
|
136
|
+
...off,
|
|
137
|
+
kind: served ? "connection" : "endpoint",
|
|
138
|
+
target: served ? (defaultConnection(config)?.name ?? null) : redactUrlCredentials(embedding.endpoint),
|
|
139
|
+
model: embedding.model ?? null,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function rerankRow(config) {
|
|
143
|
+
const rerank = config.search?.curateRerank;
|
|
144
|
+
const on = rerank?.enabled === true && rerank.endpoint !== undefined;
|
|
145
|
+
return {
|
|
146
|
+
type: "process",
|
|
147
|
+
process: "curate-rerank",
|
|
148
|
+
kind: on ? "endpoint" : null,
|
|
149
|
+
target: on ? redactUrlCredentials(rerank.endpoint) : null,
|
|
150
|
+
model: on ? (rerank.model ?? null) : null,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function processRows(config) {
|
|
154
|
+
const ambiguous = ambiguousDefaultAdvice(config);
|
|
155
|
+
const improve = (processName, alias, rest = {}) => attempt(() => resolveImproveExecution({ config, processName, alias: SHIPPED_ALIAS[alias], ...rest })?.runner);
|
|
156
|
+
const gate = config.improve?.qualityGate;
|
|
157
|
+
return [
|
|
158
|
+
runnerRow("improve", improve("improve", "improve"), IMPROVE_ENGINE_PROCESSES.map((name) => [name, improve(name, "improve")]), ambiguous),
|
|
159
|
+
runnerRow("judges", improve("judge", "judge"), [
|
|
160
|
+
["triage judgment", improve("triage-judgment", "judge", { process: "triage" })],
|
|
161
|
+
["quality gate", improve("quality-judge", "judge", gate ? { current: gate } : {})],
|
|
162
|
+
], ambiguous),
|
|
163
|
+
runnerRow("agents", attempt(() => resolveTarget({ config, layers: [{ model: SHIPPED_ALIAS.agent }] })), [], ambiguous),
|
|
164
|
+
runnerRow("extract", improve("extract", "extract"), [], ambiguous),
|
|
165
|
+
runnerRow("enrich", improve("remember-enrich", "enrich"), [], ambiguous),
|
|
166
|
+
runnerRow("index", attempt(() => resolveIndexPassExecution("memory", config).runner), [],
|
|
167
|
+
// A pass that is switched off is not waiting for a default.
|
|
168
|
+
config.index?.memory?.enabled === false ? undefined : ambiguous),
|
|
169
|
+
embeddingRow(config, ambiguous),
|
|
170
|
+
rerankRow(config),
|
|
171
|
+
];
|
|
172
|
+
}
|
|
173
|
+
export function targetRows(input) {
|
|
174
|
+
return [...connectionRows(input), ...harnessRows(input), ...processRows(input.config)];
|
|
175
|
+
}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* `akm task explain <ref> [input flags]` — read-only task introspection
|
|
6
|
-
* (spec docs/plans/specs/p2b-input-bindings.md §4.5, §1.7 B-N4).
|
|
5
|
+
* `akm task explain <ref> [input flags]` — read-only task introspection.
|
|
7
6
|
*
|
|
8
7
|
* Prints the task source path and owning bundle, its input declarations with
|
|
9
8
|
* defaults, the supplied values WITH PROVENANCE (`default` | `flag` |
|
|
@@ -14,13 +13,12 @@
|
|
|
14
13
|
* (`src/tasks/run/attempt-lifecycle.ts` is never imported here), never writes
|
|
15
14
|
* history or a log (`src/tasks/run/task-history.ts` /
|
|
16
15
|
* `src/tasks/run/task-log.ts` are never imported here), never touches the
|
|
17
|
-
* scheduler (`src/tasks/scheduler-*.ts` are never imported here), and
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* whose whole point is to work on a task the caller just wrote).
|
|
16
|
+
* scheduler (`src/tasks/scheduler-*.ts` are never imported here), and reads a
|
|
17
|
+
* composed command/persona REF only through the read-only lookup `akm command
|
|
18
|
+
* run --dry-run` uses (an isolated snapshot of the index, never the live one).
|
|
19
|
+
* A command or persona that cannot be read is reported as the envelope's
|
|
20
|
+
* `execution.problem`, not thrown: the task the caller just wrote is the thing
|
|
21
|
+
* being explained.
|
|
24
22
|
*
|
|
25
23
|
* SECRET-FREE BY CONSTRUCTION for the structural bans below — these hold
|
|
26
24
|
* regardless of any value's shape, because the excluded data never reaches
|
|
@@ -33,20 +31,16 @@
|
|
|
33
31
|
* rendered command/persona source — so a `run:` command string,
|
|
34
32
|
* `with.content`, an inline `akm/command` prompt body, or a stored
|
|
35
33
|
* command's own rendered content is never read, let alone printed;
|
|
36
|
-
* - effective execution settings (engine/model/timeout)
|
|
37
|
-
* `
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* `
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* "current" layer, built here from the TASK's own `execution` overrides
|
|
47
|
-
* ONLY — engine/model/inference/outputSchema/tools/timeout, deliberately
|
|
48
|
-
* never `environment`/`workspace`/`agent`, so a portable persona selector
|
|
49
|
-
* can never demand a persona this module never loads). Only
|
|
34
|
+
* - effective execution settings (engine/model/timeout) come from the SAME
|
|
35
|
+
* entry point `akm command run` uses (`prepareCommandInvocation`), so a
|
|
36
|
+
* stored command's own frontmatter (its `harness:`, `model:`, `agent:`) and
|
|
37
|
+
* the persona it names contribute their layers and the target named is the
|
|
38
|
+
* target `command run --dry-run` names. An inline `akm/command` prompt has
|
|
39
|
+
* no frontmatter: it goes through `resolveExecution` with a BLANK inline
|
|
40
|
+
* command. The cascade's "current" layer is built from the TASK's own
|
|
41
|
+
* `execution` overrides ONLY — connection/harness/engine/model/agent/inference/
|
|
42
|
+
* outputSchema/timeout, deliberately never `environment`/`workspace`, so no
|
|
43
|
+
* `runtime.environment` value is ever near this module. Only
|
|
50
44
|
* `engine`/`model`/`runtime.timeoutMs` and the cascade's own
|
|
51
45
|
* `{layer,kind,via}` provenance map are read back — never
|
|
52
46
|
* `request.command`, `request.persona`, `request.conversation`, or
|
|
@@ -62,45 +56,47 @@
|
|
|
62
56
|
* `redacted: true`, instead of the real value — applied uniformly across
|
|
63
57
|
* every place a declared or supplied VALUE can appear in this envelope: a
|
|
64
58
|
* declaration's own `default`, each entry of a declaration's own `enum`
|
|
65
|
-
* list (checked per-entry, not as one blanked list
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* `suppliedInputs`). Do not paste this command's output into an untrusted
|
|
59
|
+
* list (checked per-entry, not as one blanked list), a `suppliedInputs` entry
|
|
60
|
+
* regardless of provenance, and a `schedule[].inputs` entry (the declaration
|
|
61
|
+
* row alone would leave the identical value printed verbatim one section over,
|
|
62
|
+
* in `suppliedInputs`). Do not paste this command's output into an untrusted
|
|
70
63
|
* place on the assumption that it can never contain a credential.
|
|
71
64
|
*
|
|
72
65
|
* Field-level execution provenance is READ from `resolveExecution`'s own
|
|
73
66
|
* `provenance` — this module is a CONSUMER of the one common resolver, never a
|
|
74
|
-
* second resolver: it never re-derives
|
|
67
|
+
* second resolver: it never re-derives connection, harness or model precedence itself.
|
|
75
68
|
*/
|
|
76
69
|
import fs from "node:fs";
|
|
77
70
|
import { detectAdapterId } from "../../core/adapter/detect-adapter.js";
|
|
78
|
-
import { makeBundleRef } from "../../core/asset/asset-ref.js";
|
|
71
|
+
import { makeBundleRef, parseBundleRef } from "../../core/asset/asset-ref.js";
|
|
79
72
|
import { loadConfig } from "../../core/config/config.js";
|
|
80
|
-
import {
|
|
73
|
+
import { SHIPPED_ALIAS } from "../../core/config/model-aliases.js";
|
|
74
|
+
import { ConfigError, NotFoundError } from "../../core/errors.js";
|
|
81
75
|
import { applyInputDefaults, materializeInputFlags, } from "../../execution/input-contract.js";
|
|
82
76
|
import { createInlineResolvedCommand } from "../../execution/resolved-request.js";
|
|
77
|
+
import { isPortableExecutionAgentSelector } from "../../execution/source.js";
|
|
78
|
+
import { lookupBundleRefReadonly } from "../../indexer/indexer.js";
|
|
83
79
|
import { resolveAdapterConceptOwner } from "../../indexer/lookup/adapter-concept-owner.js";
|
|
84
|
-
import { resolveExecution } from "../../integrations/agent/execution.js";
|
|
80
|
+
import { currentLayer, resolveExecution, shippedAlias, } from "../../integrations/agent/execution.js";
|
|
85
81
|
import { isSchedulerRefEnabled } from "../../tasks/activation-config.js";
|
|
86
82
|
import { parseTaskSource } from "../../tasks/source/parse-task-source.js";
|
|
87
83
|
import { projectTaskSourceV4 } from "../../tasks/source/project-v4.js";
|
|
88
84
|
import { TASK_INPUT_DIAGNOSTICS } from "../../tasks/source/task-input-diagnostics.js";
|
|
89
85
|
import { validateTaskConceptId, validateTaskId } from "../../tasks/task-id.js";
|
|
90
86
|
import { detectSecretShapedParams } from "../../workflows/exec/param-secrets.js";
|
|
87
|
+
import { prepareCommandInvocation } from "../command/command-execution.js";
|
|
91
88
|
import { parseTaskRef, resolveTaskReadBundle, taskIdForAdapter } from "./tasks.js";
|
|
92
89
|
function isSecretShapedValue(name, value) {
|
|
93
90
|
return detectSecretShapedParams({ [name]: value }).length > 0;
|
|
94
91
|
}
|
|
95
92
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* `sk-live-…` default appeared in full in both output formats. Applied to
|
|
93
|
+
* `buildInputDeclarations` redacts a secret-shaped DEFAULT, so
|
|
94
|
+
* `buildSuppliedInputs` (and a v4 schedule entry's own `inputs`, printed
|
|
95
|
+
* verbatim from the source) must redact the identical value too, or a
|
|
96
|
+
* `sk-live-…` default would appear in full in the same envelope. Applied to
|
|
101
97
|
* every supplied/schedule-binding row regardless of provenance, so the same
|
|
102
|
-
* best-effort redaction (see this file's header) applies uniformly across
|
|
103
|
-
*
|
|
98
|
+
* best-effort redaction (see this file's header) applies uniformly across the
|
|
99
|
+
* whole envelope, not just the declaration row.
|
|
104
100
|
*/
|
|
105
101
|
function redactIfSecretShaped(name, value) {
|
|
106
102
|
if (!isSecretShapedValue(name, value))
|
|
@@ -114,13 +110,10 @@ function declarationEnum(schema) {
|
|
|
114
110
|
return Array.isArray(schema.enum) ? schema.enum : undefined;
|
|
115
111
|
}
|
|
116
112
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* key over — an `enum: [..., "sk-live-…"]` list echoed the credential in
|
|
122
|
-
* full even though the matching `default:` on the same declaration was
|
|
123
|
-
* already redacted. Fixed by applying the SAME per-value check
|
|
113
|
+
* `buildInputDeclarations` redacts a secret-shaped `default` via
|
|
114
|
+
* {@link redactIfSecretShaped} applied to the WHOLE default value, but the
|
|
115
|
+
* identical value appearing in that same declaration's JSON-Schema `enum:`
|
|
116
|
+
* list would print unredacted one key over. Apply the SAME per-value check
|
|
124
117
|
* ({@link isSecretShapedValue}) to each entry independently, replacing only
|
|
125
118
|
* the secret-shaped ones with `"<redacted>"` — deliberately NOT collapsing
|
|
126
119
|
* the whole list to one `"<redacted>"` sentinel the way a single `default`
|
|
@@ -173,7 +166,7 @@ function targetSection(document) {
|
|
|
173
166
|
const uses = document.target.uses;
|
|
174
167
|
return { kind: uses.kind, ref: uses.ref };
|
|
175
168
|
}
|
|
176
|
-
/** True only for the two `uses:` kinds an execution cascade (
|
|
169
|
+
/** True only for the two `uses:` kinds an execution cascade (connection, harness and model resolution) actually applies to. */
|
|
177
170
|
function isCommandTarget(document) {
|
|
178
171
|
return (document.target.kind === "uses" &&
|
|
179
172
|
(document.target.uses.kind === "builtin-command" || document.target.uses.kind === "command"));
|
|
@@ -183,46 +176,88 @@ function isCommandTarget(document) {
|
|
|
183
176
|
* home for both a v3 document's authored `akm.*` and a v4 document's
|
|
184
177
|
* projected `execution` block) as a cascade "current" layer — the exact
|
|
185
178
|
* non-secret subset `src/tasks/prepare/prepare-support.ts`'s
|
|
186
|
-
* `currentExecutionValues` also forwards, minus `
|
|
187
|
-
*
|
|
188
|
-
* see this file's header).
|
|
179
|
+
* `currentExecutionValues` also forwards, minus `workspace`/`environment`
|
|
180
|
+
* (this module never reads `env:`, see this file's header).
|
|
189
181
|
*/
|
|
190
|
-
function currentExecutionValues(document) {
|
|
182
|
+
function currentExecutionValues(document, bundleName) {
|
|
191
183
|
const akm = document.akm;
|
|
192
184
|
if (!akm)
|
|
193
185
|
return {};
|
|
194
186
|
const out = {};
|
|
195
|
-
for (const key of ["engine", "model", "inference", "outputSchema", "
|
|
187
|
+
for (const key of ["connection", "harness", "engine", "model", "inference", "outputSchema", "timeout"]) {
|
|
196
188
|
if (Object.hasOwn(akm, key))
|
|
197
189
|
out[key] = akm[key];
|
|
198
190
|
}
|
|
191
|
+
if (Object.hasOwn(akm, "agent")) {
|
|
192
|
+
const agent = akm.agent;
|
|
193
|
+
out.agent =
|
|
194
|
+
typeof agent === "string" && isPortableExecutionAgentSelector(agent) ? qualifyInBundle(agent, bundleName) : agent;
|
|
195
|
+
}
|
|
199
196
|
return out;
|
|
200
197
|
}
|
|
198
|
+
/** A ref the task wrote, relative to its own bundle unless it names one. */
|
|
199
|
+
function qualifyInBundle(ref, bundleName) {
|
|
200
|
+
const parsed = parseBundleRef(ref);
|
|
201
|
+
return makeBundleRef(parsed.bundle ?? bundleName, parsed.conceptId);
|
|
202
|
+
}
|
|
203
|
+
/** The stored command the task runs, if it runs one; an inline `akm/command` prompt has none. */
|
|
204
|
+
function storedCommandRef(document) {
|
|
205
|
+
if (document.target.kind !== "uses")
|
|
206
|
+
return undefined;
|
|
207
|
+
if (document.target.uses.kind === "command")
|
|
208
|
+
return document.target.uses.ref;
|
|
209
|
+
const command = document.target.command;
|
|
210
|
+
return command?.kind === "stored" ? command.ref : undefined;
|
|
211
|
+
}
|
|
201
212
|
/**
|
|
202
213
|
* Effective execution settings + field-level provenance for a command-kind
|
|
203
|
-
* target
|
|
204
|
-
*
|
|
214
|
+
* target. A stored command is prepared the way `akm command run --dry-run`
|
|
215
|
+
* prepares it; one that cannot be (a missing command or persona) falls back to
|
|
216
|
+
* the cascade without it, with the reason in `problem`.
|
|
205
217
|
*/
|
|
206
|
-
function resolveExecutionSettings(document) {
|
|
218
|
+
async function resolveExecutionSettings(document, bundleName) {
|
|
207
219
|
if (!isCommandTarget(document))
|
|
208
220
|
return { provenance: {} };
|
|
209
|
-
const
|
|
210
|
-
const
|
|
221
|
+
const config = loadConfig();
|
|
222
|
+
const current = currentExecutionValues(document, bundleName);
|
|
223
|
+
const ref = storedCommandRef(document);
|
|
224
|
+
let problem;
|
|
225
|
+
let prepared;
|
|
226
|
+
if (ref !== undefined) {
|
|
227
|
+
try {
|
|
228
|
+
prepared = await prepareCommandInvocation({
|
|
229
|
+
action: { ref: qualifyInBundle(ref, bundleName) },
|
|
230
|
+
config,
|
|
231
|
+
current: current,
|
|
232
|
+
sourceLookup: lookupBundleRefReadonly,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
if (error instanceof ConfigError)
|
|
237
|
+
throw error;
|
|
238
|
+
problem = error instanceof Error ? error.message : String(error);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
prepared ??= resolveExecution({
|
|
211
242
|
command: createInlineResolvedCommand({ template: "", content: "" }),
|
|
212
|
-
config
|
|
213
|
-
|
|
214
|
-
|
|
243
|
+
config,
|
|
244
|
+
layers: [
|
|
245
|
+
shippedAlias(SHIPPED_ALIAS.agent),
|
|
246
|
+
{ id: "task-explain", kind: "command", values: {} },
|
|
247
|
+
...(Object.keys(current).length > 0 ? [currentLayer(current)] : []),
|
|
248
|
+
],
|
|
215
249
|
});
|
|
216
|
-
const
|
|
250
|
+
const target = prepared.request.target;
|
|
217
251
|
return {
|
|
218
252
|
engine: {
|
|
219
|
-
name:
|
|
220
|
-
kind:
|
|
221
|
-
...(
|
|
253
|
+
name: target.name,
|
|
254
|
+
kind: target.kind,
|
|
255
|
+
...(target.platform !== undefined ? { platform: target.platform } : {}),
|
|
222
256
|
},
|
|
223
257
|
...(prepared.request.model !== undefined ? { model: prepared.request.model } : {}),
|
|
224
258
|
...(prepared.request.runtime.timeoutMs !== undefined ? { timeoutMs: prepared.request.runtime.timeoutMs } : {}),
|
|
225
259
|
provenance: prepared.provenance,
|
|
260
|
+
...(problem !== undefined ? { problem } : {}),
|
|
226
261
|
};
|
|
227
262
|
}
|
|
228
263
|
/**
|
|
@@ -247,9 +282,9 @@ export async function akmTaskExplain(ref, options = {}) {
|
|
|
247
282
|
}
|
|
248
283
|
const sourcePath = owner.path;
|
|
249
284
|
const yaml = fs.readFileSync(sourcePath, "utf8");
|
|
250
|
-
const parsed = parseTaskSource({ yaml, filePath: sourcePath
|
|
285
|
+
const parsed = parseTaskSource({ yaml, filePath: sourcePath });
|
|
251
286
|
const inputContract = parsed.v4.inputs ?? {};
|
|
252
|
-
//
|
|
287
|
+
// `akm task run`'s
|
|
253
288
|
// load-task.ts copies this same materialize -> applyInputDefaults ->
|
|
254
289
|
// validateInputs ladder, but its own trailing `validateInputs` +
|
|
255
290
|
// `contractViolation` throw is load-task's OWN enforcement that a task
|
|
@@ -259,8 +294,8 @@ export async function akmTaskExplain(ref, options = {}) {
|
|
|
259
294
|
// input is exactly the fact `explain` exists to surface, not a condition
|
|
260
295
|
// that should make the command refuse to print. Deliberately NOT calling
|
|
261
296
|
// `validateInputs` here: `materializeInputFlags` above still runs its own
|
|
262
|
-
// per-flag validation (an unknown flag name still fails UNKNOWN_FLAG
|
|
263
|
-
//
|
|
297
|
+
// per-flag validation (an unknown flag name still fails UNKNOWN_FLAG; a
|
|
298
|
+
// supplied value failing its own declared schema still fails
|
|
264
299
|
// here), so only the "required and never supplied at all" case is left
|
|
265
300
|
// unenforced. `buildSuppliedInputs` below naturally renders that case as a
|
|
266
301
|
// declaration row (always present, carrying `required: true`) with no
|
|
@@ -298,7 +333,7 @@ export async function akmTaskExplain(ref, options = {}) {
|
|
|
298
333
|
target: targetSection(document),
|
|
299
334
|
inputDeclarations: buildInputDeclarations(inputContract),
|
|
300
335
|
suppliedInputs: buildSuppliedInputs(defaultedInputs, materializedInputs),
|
|
301
|
-
execution: resolveExecutionSettings(document),
|
|
336
|
+
execution: await resolveExecutionSettings(document, bundle.source.name),
|
|
302
337
|
schedule,
|
|
303
338
|
};
|
|
304
339
|
}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
import { defineCommand } from "citty";
|
|
26
26
|
import { getParsedInvocation } from "../../cli/invocation.js";
|
|
27
27
|
import { parsePositiveIntFlag } from "../../cli/parse-args.js";
|
|
28
|
+
import { RETIRED_ENGINE_ARG, SELECTION_ARGS, selectionFromArgs } from "../../cli/selection.js";
|
|
28
29
|
import { defineGroupCommand, defineJsonCommand, EXIT_CODES, GLOBAL_OUTPUT_ARGS, output, outputWithExitCode, runWithJsonErrors, } from "../../cli/shared.js";
|
|
29
30
|
import { UsageError } from "../../core/errors.js";
|
|
30
31
|
import { TASK_RUN_BOOLEAN_FLAGS, TASK_RUN_VALUE_FLAGS } from "../../tasks/task-run-reserved-flags.js";
|
|
@@ -47,7 +48,7 @@ const bundleArg = {
|
|
|
47
48
|
* other value spelling (`--<name>=false`, `--<name>=1`, `--<name>=`) walks
|
|
48
49
|
* straight past it and is then absorbed downstream — by citty's non-strict
|
|
49
50
|
* parser, or by `parseTaskInputFlags`' reserved-name skip — exactly the
|
|
50
|
-
* silent-discard defect these rejecters exist to close
|
|
51
|
+
* silent-discard defect these rejecters exist to close. The
|
|
51
52
|
* name is taken as everything before the FIRST `=`, which is
|
|
52
53
|
* `parseTaskInputFlags`' own split (see its `body.indexOf("=")` below), so the
|
|
53
54
|
* rejecter and the scanner can never disagree about what a token names.
|
|
@@ -94,21 +95,20 @@ function rejectExplainScheduledFlag() {
|
|
|
94
95
|
return;
|
|
95
96
|
throw new UsageError('Unknown flag "--scheduled".', "UNKNOWN_FLAG");
|
|
96
97
|
}
|
|
97
|
-
// ── `akm task run` input flags — Stage 1: capture
|
|
98
|
+
// ── `akm task run` input flags — Stage 1: capture ───────────────────────────
|
|
98
99
|
//
|
|
99
100
|
// Mirrors `parseWorkflowParameterFlags` (src/commands/workflow-cli.ts:232-289)
|
|
100
101
|
// exactly: the CLI carries RAW string/boolean flag values to the boundary
|
|
101
102
|
// that knows the task's declared contract (Stage 2, src/tasks/run/load-task.ts)
|
|
102
103
|
// — coercion happens once, there. `akm task run`'s own declared flags
|
|
103
104
|
// (GLOBAL_OUTPUT_ARGS, --bundle, --scheduled) are excluded so they are never
|
|
104
|
-
// mistaken for inputs
|
|
105
|
+
// mistaken for inputs.
|
|
105
106
|
// `TASK_RUN_VALUE_FLAGS` / `TASK_RUN_BOOLEAN_FLAGS` are re-exported here
|
|
106
107
|
// (unchanged in name, location, and value) from a dependency-free leaf module
|
|
107
108
|
// so `src/tasks/source/task-source-v4.ts` can reject a declared `inputs:`
|
|
108
109
|
// name that collides with one of them without importing this CLI file —
|
|
109
110
|
// which would cycle back through `./tasks` -> `../../tasks/source/*` into the
|
|
110
|
-
// parser (
|
|
111
|
-
// round 2; see `../../tasks/task-run-reserved-flags.ts`'s own header).
|
|
111
|
+
// parser (see `../../tasks/task-run-reserved-flags.ts`'s own header).
|
|
112
112
|
export { TASK_RUN_BOOLEAN_FLAGS, TASK_RUN_VALUE_FLAGS };
|
|
113
113
|
const TASK_RUN_VALUE_FLAG_SET = new Set(TASK_RUN_VALUE_FLAGS);
|
|
114
114
|
const TASK_RUN_BOOLEAN_FLAG_SET = new Set(TASK_RUN_BOOLEAN_FLAGS);
|
|
@@ -182,8 +182,8 @@ const tasksAddCommand = defineJsonCommand({
|
|
|
182
182
|
type: "string",
|
|
183
183
|
description: 'Exact shell string to run on the schedule (no AI agent), e.g. "akm improve --strategy consolidate".',
|
|
184
184
|
},
|
|
185
|
-
|
|
186
|
-
|
|
185
|
+
...SELECTION_ARGS,
|
|
186
|
+
...RETIRED_ENGINE_ARG,
|
|
187
187
|
"timeout-ms": { type: "string", description: "Positive timeout in milliseconds for prompt or command targets" },
|
|
188
188
|
params: { type: "string", description: "Workflow params as a JSON object" },
|
|
189
189
|
name: { type: "string", description: "Human-readable name for the task" },
|
|
@@ -206,8 +206,7 @@ const tasksAddCommand = defineJsonCommand({
|
|
|
206
206
|
workflow: args.workflow,
|
|
207
207
|
prompt: args.prompt,
|
|
208
208
|
command: args.command,
|
|
209
|
-
|
|
210
|
-
model: args.model,
|
|
209
|
+
...selectionFromArgs(args),
|
|
211
210
|
timeoutMs: args["timeout-ms"] === undefined ? undefined : parsePositiveIntFlag(args["timeout-ms"]),
|
|
212
211
|
params: args.params,
|
|
213
212
|
name: args.name,
|
|
@@ -354,8 +353,7 @@ const tasksSyncCommand = defineJsonCommand({
|
|
|
354
353
|
outputWithExitCode("task-sync", result, result.failures.length > 0 ? EXIT_CODES.GENERAL : undefined);
|
|
355
354
|
},
|
|
356
355
|
});
|
|
357
|
-
// ── `akm task explain` — read-only introspection
|
|
358
|
-
// docs/plans/specs/p2b-input-bindings.md §4.5, §1.7 B-N4) ──────────────────
|
|
356
|
+
// ── `akm task explain` — read-only introspection ────────────────────────────
|
|
359
357
|
const tasksExplainCommand = defineJsonCommand({
|
|
360
358
|
meta: {
|
|
361
359
|
name: "explain",
|