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
|
@@ -2,239 +2,114 @@
|
|
|
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
|
-
* Agent CLI spawn wrapper
|
|
5
|
+
* Agent CLI spawn wrapper.
|
|
6
6
|
*
|
|
7
7
|
* Single helper that owns:
|
|
8
8
|
* • Process spawn (Bun's subprocess API).
|
|
9
9
|
* • Captured vs interactive stdio.
|
|
10
10
|
* • Hard timeout (per-call override or profile default).
|
|
11
|
-
* • Structured failure reasons — `timeout`, `spawn_failed`,
|
|
12
|
-
* `non_zero_exit
|
|
11
|
+
* • Structured failure reasons — `timeout`, `aborted`, `spawn_failed`,
|
|
12
|
+
* `non_zero_exit`.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* The command comes from the harness (`harness.build`); this module never
|
|
15
|
+
* touches a model. Agents are reachable only via shell-out.
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import { runManagedSubprocess, streamCaptureFailure
|
|
20
|
-
import {
|
|
17
|
+
import { ConfigError } from "../../core/errors.js";
|
|
18
|
+
import { childProcessEnv } from "../../core/paths.js";
|
|
19
|
+
import { runManagedSubprocess, streamCaptureFailure } from "../../core/subprocess.js";
|
|
20
|
+
import { getHarness } from "../harnesses/index.js";
|
|
21
21
|
import { DEFAULT_AGENT_TIMEOUT_MS } from "./config.js";
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* • Every entry in `options.env` (highest precedence).
|
|
23
|
+
* The child's env, lowest precedence first: the environment akm runs in with the
|
|
24
|
+
* directories this akm resolved set over it, so a child that runs `akm` uses the
|
|
25
|
+
* same installation ({@link childProcessEnv}); then the call's `env`. The one
|
|
26
|
+
* environment policy for anything an agent run starts: a CLI harness's child, and
|
|
27
|
+
* the shell of an embedded session.
|
|
29
28
|
*/
|
|
30
|
-
function buildChildEnv(
|
|
31
|
-
|
|
32
|
-
if (profile.env) {
|
|
33
|
-
for (const [k, v] of Object.entries(profile.env))
|
|
34
|
-
env[k] = v;
|
|
35
|
-
}
|
|
36
|
-
if (options.env) {
|
|
37
|
-
for (const [k, v] of Object.entries(options.env))
|
|
38
|
-
env[k] = v;
|
|
39
|
-
}
|
|
40
|
-
return env;
|
|
29
|
+
export function buildChildEnv(options) {
|
|
30
|
+
return { ...childProcessEnv(), ...options.env };
|
|
41
31
|
}
|
|
42
32
|
/**
|
|
43
33
|
* This path's phrasing of the SHARED incomplete-capture verdict
|
|
44
34
|
* ({@link streamCaptureFailure} in `core/subprocess.ts`). The classification
|
|
45
35
|
* lives in the primitive so the agent path and the workflow `exec` path cannot
|
|
46
36
|
* drift apart on what "the capture did not complete" means; only the sentence
|
|
47
|
-
* naming
|
|
37
|
+
* naming what ran is local.
|
|
48
38
|
*/
|
|
49
|
-
function streamFailureMessage(
|
|
39
|
+
function streamFailureMessage(label, stdout, stderr) {
|
|
50
40
|
const failures = streamCaptureFailure(stdout, stderr);
|
|
51
|
-
return failures === undefined ? undefined :
|
|
41
|
+
return failures === undefined ? undefined : `${label} output capture failed: ${failures}`;
|
|
42
|
+
}
|
|
43
|
+
function failed(reason, error, rest = {}) {
|
|
44
|
+
return { ok: false, exitCode: null, stdout: "", stderr: "", durationMs: 0, reason, error, ...rest };
|
|
52
45
|
}
|
|
53
46
|
/**
|
|
54
|
-
* Spawn the agent CLI
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* The `prompt` argument is appended to `profile.args` (and `options.args`)
|
|
58
|
-
* unless it is `undefined`. Pass `prompt = ""` to forward an explicit
|
|
59
|
-
* empty positional, or pass extra args via `options.args`.
|
|
47
|
+
* Spawn the agent CLI `profile` names, with the command its harness builds from
|
|
48
|
+
* `options.dispatch`, and return a structured result.
|
|
60
49
|
*
|
|
61
50
|
* Failure modes (see {@link AgentFailureReason}):
|
|
62
51
|
*
|
|
63
|
-
* • `spawn_failed` — the spawn call threw
|
|
52
|
+
* • `spawn_failed` — the spawn call threw, or its output could not be captured.
|
|
64
53
|
* • `timeout` — exceeded the resolved timeout.
|
|
54
|
+
* • `aborted` — the caller's signal fired.
|
|
65
55
|
* • `non_zero_exit` — child exited with a non-zero code.
|
|
66
|
-
* • `parse_error` — `parseOutput === "json"` and stdout was not JSON.
|
|
67
56
|
*
|
|
68
|
-
* `ok === true` requires exit code 0
|
|
69
|
-
|
|
57
|
+
* `ok === true` requires exit code 0.
|
|
58
|
+
*/
|
|
59
|
+
export async function runAgent(profile, options = {}) {
|
|
60
|
+
const platform = profile.platform ?? profile.name;
|
|
61
|
+
const harness = getHarness(platform);
|
|
62
|
+
if (!harness) {
|
|
63
|
+
throw new ConfigError(`Agent platform "${platform}" has no registered command builder.`, "INVALID_CONFIG_FILE", "Select a canonical agent platform in harnesses.<name>.platform.");
|
|
64
|
+
}
|
|
65
|
+
const built = harness.build(profile, options.dispatch ?? {});
|
|
66
|
+
const command = { argv: built.argv, env: { ...buildChildEnv(options), ...built.env }, stdin: built.stdin };
|
|
67
|
+
return runBuiltCommand(`agent CLI "${profile.name}"`, command, options, options.stdio ?? profile.stdio);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Run a command that is already built and return a structured result: the part
|
|
71
|
+
* of {@link runAgent} that does not depend on which harness built the command,
|
|
72
|
+
* which akm's own runtime (`harnesses/opencode/runtime/`) shares. `label` names
|
|
73
|
+
* what ran in the failure messages.
|
|
70
74
|
*/
|
|
71
|
-
export async function
|
|
72
|
-
const stdioMode = options.stdio ?? profile.stdio;
|
|
75
|
+
export async function runBuiltCommand(label, { argv, env, stdin }, options, stdioMode = options.stdio ?? "captured") {
|
|
73
76
|
// null = explicitly disabled (no kill timer). undefined = runtime default.
|
|
74
77
|
const timeoutMs = options.timeoutMs !== undefined ? options.timeoutMs : DEFAULT_AGENT_TIMEOUT_MS;
|
|
75
|
-
const parseOutput = options.parseOutput ?? profile.parseOutput;
|
|
76
|
-
const setTimeoutImpl = options.setTimeoutFn ?? setTimeout;
|
|
77
|
-
const clearTimeoutImpl = options.clearTimeoutFn ?? clearTimeout;
|
|
78
|
-
// Observability seam — ids/status only, best-effort (see RunAgentOptions.onEvent).
|
|
79
|
-
const emitSpawnEvent = (type, data) => {
|
|
80
|
-
if (!options.onEvent)
|
|
81
|
-
return;
|
|
82
|
-
try {
|
|
83
|
-
options.onEvent({ type, data });
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// Observability must never break the dispatch.
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
// Build argv via the platform-specific builder when dispatch params are
|
|
90
|
-
// provided; otherwise use the direct positional-prompt form.
|
|
91
|
-
let builtArgv;
|
|
92
|
-
let builtEnv;
|
|
93
|
-
if (options.dispatch !== undefined) {
|
|
94
|
-
const builder = getCommandBuilder(profile.platform ?? profile.name, options.builderRegistry);
|
|
95
|
-
const built = builder.build(profile, options.dispatch);
|
|
96
|
-
builtArgv = built.argv;
|
|
97
|
-
builtEnv = built.env;
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
const positionalArgs = [...profile.args, ...(options.args ?? [])];
|
|
101
|
-
if (prompt !== undefined)
|
|
102
|
-
positionalArgs.push(prompt);
|
|
103
|
-
builtArgv = [profile.bin, ...positionalArgs];
|
|
104
|
-
}
|
|
105
|
-
// Extra args (e.g. forwarded CLI positionals) are appended after the builder output.
|
|
106
|
-
const finalArgv = [...builtArgv, ...(options.dispatch ? (options.args ?? []) : [])];
|
|
107
|
-
const env = { ...buildChildEnv(profile, options), ...(builtEnv ?? {}) };
|
|
108
|
-
const start = Date.now();
|
|
109
78
|
// Cooperative cancel: refuse to spawn at all when the caller's signal is
|
|
110
79
|
// already aborted (e.g. the run's budget was exhausted before this unit).
|
|
111
80
|
if (options.signal?.aborted) {
|
|
112
|
-
return {
|
|
113
|
-
ok: false,
|
|
114
|
-
exitCode: null,
|
|
115
|
-
stdout: "",
|
|
116
|
-
stderr: "",
|
|
117
|
-
durationMs: 0,
|
|
118
|
-
reason: "aborted",
|
|
119
|
-
error: `agent CLI "${profile.name}" not started: caller signal already aborted`,
|
|
120
|
-
};
|
|
81
|
+
return failed("aborted", `${label} not started: caller signal already aborted`);
|
|
121
82
|
}
|
|
122
83
|
// Spawn/timeout/abort/capture are owned by the managed-subprocess primitive
|
|
123
84
|
// (src/core/subprocess.ts): process-GROUP spawn (detached in captured mode),
|
|
124
|
-
// the SIGTERM→SIGKILL kill ladder on timeout/abort, bounded output capture,
|
|
125
|
-
// and the optional stdin payload.
|
|
126
|
-
// the
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
// abort or a synchronous spawn failure), and captures the proc so spawn_exit
|
|
130
|
-
// can carry the same pid.
|
|
131
|
-
let spawnedProc;
|
|
132
|
-
const result = await runManagedSubprocess(finalArgv, {
|
|
85
|
+
// the SIGINT→SIGTERM→SIGKILL kill ladder on timeout/abort, bounded output capture,
|
|
86
|
+
// and the optional stdin payload. This keeps the agent-specific surface:
|
|
87
|
+
// the failure taxonomy.
|
|
88
|
+
const start = Date.now();
|
|
89
|
+
const result = await runManagedSubprocess([...argv], {
|
|
133
90
|
capture: stdioMode === "captured",
|
|
134
|
-
env,
|
|
91
|
+
env: { ...env },
|
|
135
92
|
...(options.cwd ? { cwd: options.cwd } : {}),
|
|
136
|
-
...(
|
|
93
|
+
...(stdin !== undefined ? { stdin } : {}),
|
|
137
94
|
timeoutMs,
|
|
138
95
|
...(options.signal ? { signal: options.signal } : {}),
|
|
139
|
-
...(options.spawn ? { spawnFn: options.spawn } : {}),
|
|
140
|
-
setTimeoutFn: setTimeoutImpl,
|
|
141
|
-
clearTimeoutFn: clearTimeoutImpl,
|
|
142
|
-
onSpawn: (proc) => {
|
|
143
|
-
spawnedProc = proc;
|
|
144
|
-
emitSpawnEvent("spawn_start", {
|
|
145
|
-
profile: profile.name,
|
|
146
|
-
...(typeof proc.pid === "number" ? { pid: proc.pid } : {}),
|
|
147
|
-
});
|
|
148
|
-
},
|
|
149
96
|
});
|
|
150
|
-
const pidField = spawnedProc && typeof spawnedProc.pid === "number" ? { pid: spawnedProc.pid } : {};
|
|
151
97
|
const durationMs = Date.now() - start;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
}
|
|
159
|
-
return {
|
|
160
|
-
ok: false,
|
|
161
|
-
exitCode: null,
|
|
162
|
-
stdout: "",
|
|
163
|
-
stderr: "",
|
|
164
|
-
durationMs,
|
|
165
|
-
reason: "spawn_failed",
|
|
166
|
-
error: result.spawnError.message,
|
|
167
|
-
};
|
|
98
|
+
if (result.spawnError)
|
|
99
|
+
return failed("spawn_failed", result.spawnError.message, { durationMs });
|
|
100
|
+
const { exitCode, stdout, stderr } = result;
|
|
101
|
+
const output = { exitCode, stdout, stderr, durationMs };
|
|
102
|
+
if (result.aborted) {
|
|
103
|
+
return failed("aborted", `${label} aborted by caller signal`, output);
|
|
168
104
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
profile: profile.name,
|
|
172
|
-
...pidField,
|
|
173
|
-
exitCode,
|
|
174
|
-
status: aborted ? "aborted" : timedOut ? "timeout" : exitCode !== 0 ? "non_zero_exit" : "ok",
|
|
175
|
-
});
|
|
176
|
-
if (aborted) {
|
|
177
|
-
return {
|
|
178
|
-
ok: false,
|
|
179
|
-
exitCode,
|
|
180
|
-
stdout,
|
|
181
|
-
stderr,
|
|
182
|
-
durationMs,
|
|
183
|
-
reason: "aborted",
|
|
184
|
-
error: `agent CLI "${profile.name}" aborted by caller signal`,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
if (timedOut) {
|
|
188
|
-
return {
|
|
189
|
-
ok: false,
|
|
190
|
-
exitCode,
|
|
191
|
-
stdout,
|
|
192
|
-
stderr,
|
|
193
|
-
durationMs,
|
|
194
|
-
reason: "timeout",
|
|
195
|
-
error: `agent CLI "${profile.name}" timed out after ${timeoutMs ?? 0}ms`,
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
const captureFailure = streamFailureMessage(profile.name, result.stdoutRead, result.stderrRead);
|
|
199
|
-
if (captureFailure) {
|
|
200
|
-
return {
|
|
201
|
-
ok: false,
|
|
202
|
-
exitCode,
|
|
203
|
-
stdout,
|
|
204
|
-
stderr,
|
|
205
|
-
durationMs,
|
|
206
|
-
reason: "spawn_failed",
|
|
207
|
-
error: captureFailure,
|
|
208
|
-
};
|
|
105
|
+
if (result.timedOut) {
|
|
106
|
+
return failed("timeout", `${label} timed out after ${timeoutMs ?? 0}ms`, output);
|
|
209
107
|
}
|
|
108
|
+
const captureFailure = streamFailureMessage(label, result.stdoutRead, result.stderrRead);
|
|
109
|
+
if (captureFailure)
|
|
110
|
+
return failed("spawn_failed", captureFailure, output);
|
|
210
111
|
if (exitCode !== 0) {
|
|
211
|
-
return {
|
|
212
|
-
ok: false,
|
|
213
|
-
exitCode,
|
|
214
|
-
stdout,
|
|
215
|
-
stderr,
|
|
216
|
-
durationMs,
|
|
217
|
-
reason: "non_zero_exit",
|
|
218
|
-
error: `agent CLI "${profile.name}" exited with code ${exitCode}`,
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
if (parseOutput === "json" && stdioMode === "captured") {
|
|
222
|
-
// Strip <think> blocks and code fences, then parse with embedded-JSON
|
|
223
|
-
// fallback for local LLMs that emit prose around the payload. Handles
|
|
224
|
-
// both top-level `{…}` and `[…]` structures.
|
|
225
|
-
const parsed = parseEmbeddedJsonResponse(stdout);
|
|
226
|
-
if (parsed === undefined) {
|
|
227
|
-
return {
|
|
228
|
-
ok: false,
|
|
229
|
-
exitCode,
|
|
230
|
-
stdout,
|
|
231
|
-
stderr,
|
|
232
|
-
durationMs,
|
|
233
|
-
reason: "parse_error",
|
|
234
|
-
error: "no JSON structure found in agent output",
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
return { ok: true, exitCode, stdout, stderr, durationMs, parsed };
|
|
112
|
+
return failed("non_zero_exit", `${label} exited with code ${exitCode}`, output);
|
|
238
113
|
}
|
|
239
|
-
return { ok: true,
|
|
114
|
+
return { ok: true, ...output };
|
|
240
115
|
}
|
|
@@ -2,46 +2,26 @@
|
|
|
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
|
-
* Aider
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* It also defines {@link AiderHarness}, the {@link AkmHarness} descriptor that
|
|
12
|
-
* `HARNESS_REGISTRY` registers. Dispatch-only: no native session-log reader or
|
|
13
|
-
* config importer yet.
|
|
5
|
+
* Aider (`aider`). `--message` is its one-shot mode, `--yes-always` confirms every
|
|
6
|
+
* prompt so an unattended run does not stop, and `--no-pretty` keeps ANSI
|
|
7
|
+
* rendering out of the captured reply. The message is a flag value, with no
|
|
8
|
+
* positional prompt and no `--` to hide behind, so it is glued on with `=`: a
|
|
9
|
+
* prompt that starts with `-` then binds to the flag and is never read as an option.
|
|
14
10
|
*/
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
import { aiderBuilder } from "./agent-builder.js";
|
|
18
|
-
import { aiderResultExtractor } from "./result-extractor.js";
|
|
19
|
-
export { AIDER_PLATFORM, aiderBuilder } from "./agent-builder.js";
|
|
20
|
-
export { aiderResultExtractor } from "./result-extractor.js";
|
|
21
|
-
/**
|
|
22
|
-
* Aider.
|
|
23
|
-
*
|
|
24
|
-
* Canonical id is `'aider'`; no alias or distinct runtime identity.
|
|
25
|
-
*/
|
|
26
|
-
export class AiderHarness extends BaseHarness {
|
|
11
|
+
import { withoutModelFlag, } from "../harness.js";
|
|
12
|
+
export class AiderHarness {
|
|
27
13
|
id = "aider";
|
|
28
14
|
displayName = "Aider";
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
// No `identityEnv`: the matrix lists Aider's identity markers as uncertain,
|
|
42
|
-
// and Aider stamps no session var onto child processes.
|
|
43
|
-
capabilities = caps({
|
|
44
|
-
agentDispatch: true,
|
|
45
|
-
detection: true,
|
|
46
|
-
});
|
|
15
|
+
profile = { bin: "aider", args: [] };
|
|
16
|
+
systemPrompt = false;
|
|
17
|
+
nativeAgent = false;
|
|
18
|
+
confinable = false;
|
|
19
|
+
build({ bin, args }, req) {
|
|
20
|
+
const argv = [bin, ...(req.model ? withoutModelFlag(args) : args)];
|
|
21
|
+
if (req.model)
|
|
22
|
+
argv.push("--model", req.model);
|
|
23
|
+
if (req.prompt !== undefined)
|
|
24
|
+
argv.push("--yes-always", "--no-pretty", `--message=${req.prompt}`);
|
|
25
|
+
return { argv };
|
|
26
|
+
}
|
|
47
27
|
}
|
|
@@ -2,39 +2,24 @@
|
|
|
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
|
-
* Amazon Q Developer CLI
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Per-harness barrel gathering the Amazon Q integration surfaces:
|
|
9
|
-
* - agent command builder → ./agent-builder.ts (amazonqBuilder)
|
|
10
|
-
* - result extractor → ./result-extractor.ts (amazonqResultExtractor)
|
|
11
|
-
*
|
|
12
|
-
* It also defines {@link AmazonqHarness}, the {@link AkmHarness} descriptor
|
|
13
|
-
* that `HARNESS_REGISTRY` registers. Dispatch-only: no native session-log
|
|
14
|
-
* reader or config importer yet.
|
|
5
|
+
* Amazon Q Developer CLI (`q`). Headless is `q chat --no-interactive`, which
|
|
6
|
+
* prints the reply and exits; `--trust-all-tools` stops it asking before each
|
|
7
|
+
* tool. The prompt is the trailing positional, after `--`.
|
|
15
8
|
*/
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
import { amazonqBuilder } from "./agent-builder.js";
|
|
19
|
-
import { amazonqResultExtractor } from "./result-extractor.js";
|
|
20
|
-
export { AMAZONQ_PLATFORM, amazonqBuilder } from "./agent-builder.js";
|
|
21
|
-
export { amazonqResultExtractor, stripTerminalFraming } from "./result-extractor.js";
|
|
22
|
-
/**
|
|
23
|
-
* Amazon Q Developer CLI (`q`).
|
|
24
|
-
*
|
|
25
|
-
* Canonical id is `'amazonq'`; no alias or distinct runtime identity.
|
|
26
|
-
*/
|
|
27
|
-
export class AmazonqHarness extends BaseHarness {
|
|
9
|
+
import { withoutLeading, withoutModelFlag, } from "../harness.js";
|
|
10
|
+
export class AmazonqHarness {
|
|
28
11
|
id = "amazonq";
|
|
29
12
|
displayName = "Amazon Q Developer CLI";
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
13
|
+
profile = { bin: "q", args: [] };
|
|
14
|
+
systemPrompt = false;
|
|
15
|
+
nativeAgent = false;
|
|
16
|
+
confinable = false;
|
|
17
|
+
build({ bin, args }, req) {
|
|
18
|
+
const authored = withoutLeading(args, "chat");
|
|
19
|
+
const base = [bin, "chat", ...(req.model ? withoutModelFlag(authored) : authored)];
|
|
20
|
+
const model = req.model ? ["--model", req.model] : [];
|
|
21
|
+
if (req.prompt === undefined)
|
|
22
|
+
return { argv: [...base, ...model] };
|
|
23
|
+
return { argv: [...base, "--no-interactive", "--trust-all-tools", ...model, "--", req.prompt] };
|
|
24
|
+
}
|
|
40
25
|
}
|
|
@@ -1,42 +1,73 @@
|
|
|
1
1
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
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
|
-
import {
|
|
5
|
-
import { BaseHarness } from "../types.js";
|
|
6
|
-
import { claudeBuilder } from "./agent-builder.js";
|
|
7
|
-
import { claudeCodeImporter } from "./config-import.js";
|
|
8
|
-
import { claudeResultExtractor } from "./result-extractor.js";
|
|
4
|
+
import { modelFromArgs, withoutModelFlag, } from "../harness.js";
|
|
9
5
|
import { ClaudeCodeProvider } from "./session-log.js";
|
|
10
|
-
export { claudeBuilder } from "./agent-builder.js";
|
|
11
|
-
export { claudeCodeImporter } from "./config-import.js";
|
|
12
|
-
export { claudeResultExtractor } from "./result-extractor.js";
|
|
13
6
|
export { ClaudeCodeProvider } from "./session-log.js";
|
|
14
7
|
/**
|
|
15
|
-
* Claude Code.
|
|
16
|
-
*
|
|
17
|
-
*
|
|
8
|
+
* The model-work tool policy on Claude Code, verified against 2.1.283:
|
|
9
|
+
* - `--restricted` ignores the user, project and local settings files (whose
|
|
10
|
+
* allow rules would otherwise pre-approve any command or path) and confines
|
|
11
|
+
* the file tools to the working directory;
|
|
12
|
+
* - `--strict-mcp-config` starts no MCP server, and `--tools` offers only Read
|
|
13
|
+
* and Bash: no Edit;
|
|
14
|
+
* - `--allowedTools` pre-approves Read and `akm search`, `akm show` and
|
|
15
|
+
* `akm curate`, and `--permission-mode dontAsk` denies everything else instead
|
|
16
|
+
* of prompting, including a compound, redirected or substituted command;
|
|
17
|
+
* - `--no-session-persistence` keeps the run out of Claude Code's transcripts,
|
|
18
|
+
* which `akm extract` would otherwise harvest as the user's own sessions.
|
|
19
|
+
* The config's `args` are left out of a model-work run, because `--add-dir`,
|
|
20
|
+
* `--settings` or a second `--allowedTools` would widen the policy; only the model
|
|
21
|
+
* they name is kept.
|
|
18
22
|
*/
|
|
19
|
-
export
|
|
23
|
+
export const MODEL_WORK_CLAUDE_FLAGS = Object.freeze([
|
|
24
|
+
"--restricted",
|
|
25
|
+
"--strict-mcp-config",
|
|
26
|
+
"--tools",
|
|
27
|
+
"Read,Bash",
|
|
28
|
+
"--allowedTools",
|
|
29
|
+
"Read,Bash(akm search *),Bash(akm show *),Bash(akm curate *)",
|
|
30
|
+
"--permission-mode",
|
|
31
|
+
"dontAsk",
|
|
32
|
+
"--no-session-persistence",
|
|
33
|
+
]);
|
|
34
|
+
export class ClaudeHarness {
|
|
20
35
|
id = "claude";
|
|
21
36
|
displayName = "Claude Code";
|
|
22
37
|
// Home-relative config dir scanned by `akm setup` (#567). Claude Code has a
|
|
23
38
|
// session-log provider, so offering it as a stash source is functional.
|
|
24
39
|
setupDetectionDir = ".claude";
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
|
|
40
|
+
profile = { bin: "claude", args: [] };
|
|
41
|
+
models = {
|
|
42
|
+
fast: "claude-haiku-4-5-20251001",
|
|
43
|
+
balanced: "claude-sonnet-4-6",
|
|
44
|
+
reasoning: "claude-opus-4-7",
|
|
45
|
+
};
|
|
46
|
+
// Claude Code exports its session id to the commands it runs. Only a concrete id
|
|
47
|
+
// attributes a run to this harness, not the bare "running under Claude Code" fact.
|
|
48
|
+
identityEnv = ["CLAUDE_CODE_SESSION_ID"];
|
|
33
49
|
sessionLogProvider = () => new ClaudeCodeProvider();
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
systemPrompt = true;
|
|
51
|
+
nativeAgent = true;
|
|
52
|
+
confinable = true;
|
|
53
|
+
build({ bin, args }, req) {
|
|
54
|
+
const argv = [bin];
|
|
55
|
+
let model = req.model;
|
|
56
|
+
if (req.modelWork) {
|
|
57
|
+
argv.push(...MODEL_WORK_CLAUDE_FLAGS);
|
|
58
|
+
model ??= modelFromArgs(args);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
argv.push(...(model ? withoutModelFlag(args) : args));
|
|
62
|
+
}
|
|
63
|
+
if (req.agent)
|
|
64
|
+
argv.push("--agent", req.agent);
|
|
65
|
+
if (req.systemPrompt)
|
|
66
|
+
argv.push("--append-system-prompt", req.systemPrompt);
|
|
67
|
+
if (model)
|
|
68
|
+
argv.push("--model", model);
|
|
69
|
+
if (req.prompt === undefined)
|
|
70
|
+
return { argv };
|
|
71
|
+
return { argv: [...argv, "-p"], stdin: req.prompt };
|
|
72
|
+
}
|
|
42
73
|
}
|
|
@@ -7,17 +7,19 @@ import path from "node:path";
|
|
|
7
7
|
import { extractInlineRefMentions } from "../../session-logs/inline-refs.js";
|
|
8
8
|
import { AbstractSessionLogProvider } from "../../session-logs/provider-base.js";
|
|
9
9
|
/**
|
|
10
|
-
* Root directory holding Claude Code's per-project JSONL session logs
|
|
10
|
+
* Root directory holding Claude Code's per-project JSONL session logs: the
|
|
11
|
+
* `projects` folder of its config directory (`CLAUDE_CONFIG_DIR`, else `~/.claude`).
|
|
11
12
|
*
|
|
12
|
-
* Resolved per call (not memoized at module load) so the
|
|
13
|
-
*
|
|
14
|
-
* isolated-storage sandbox
|
|
13
|
+
* Resolved per call (not memoized at module load) so the environment can be set
|
|
14
|
+
* after import. `AKM_CLAUDE_PROJECTS_DIR` overrides it so tests, and the
|
|
15
|
+
* isolated-storage sandbox, can point the scan at an empty fixture directory
|
|
15
16
|
* instead of the real `~/.claude/projects`, which on an actively-used machine
|
|
16
17
|
* holds many large session files and would make `akm health` (which scans it
|
|
17
18
|
* synchronously) slow and non-hermetic.
|
|
18
19
|
*/
|
|
19
20
|
function claudeProjectsDir() {
|
|
20
|
-
return process.env.AKM_CLAUDE_PROJECTS_DIR ??
|
|
21
|
+
return (process.env.AKM_CLAUDE_PROJECTS_DIR ??
|
|
22
|
+
path.join(process.env.CLAUDE_CONFIG_DIR || path.join(os.homedir(), ".claude"), "projects"));
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Directory Claude Code writes a session's subagent transcripts into, as
|
|
@@ -1,43 +1,31 @@
|
|
|
1
1
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
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
|
-
import {
|
|
5
|
-
import { BaseHarness } from "../types.js";
|
|
6
|
-
import { codexBuilder } from "./agent-builder.js";
|
|
7
|
-
import { codexResultExtractor } from "./result-extractor.js";
|
|
4
|
+
import { modelFromArgs, withoutLeading, withoutModelFlag, } from "../harness.js";
|
|
8
5
|
import { CodexProvider } from "./session-log.js";
|
|
9
|
-
export { codexBuilder, codexResumeArgs, writeCodexOutputSchemaFile } from "./agent-builder.js";
|
|
10
|
-
export { codexResultExtractor } from "./result-extractor.js";
|
|
11
6
|
export { CodexProvider } from "./session-log.js";
|
|
12
|
-
|
|
13
|
-
* OpenAI Codex CLI.
|
|
14
|
-
*
|
|
15
|
-
* Canonical id is `'codex'`; no alias or distinct runtime identity.
|
|
16
|
-
*/
|
|
17
|
-
export class CodexHarness extends BaseHarness {
|
|
7
|
+
export class CodexHarness {
|
|
18
8
|
id = "codex";
|
|
19
9
|
displayName = "OpenAI Codex CLI";
|
|
20
10
|
// No `setupDetectionDir`: `~/.codex` holds credentials and session rollouts,
|
|
21
11
|
// not assets, so `akm setup` must not offer it as a stash source.
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// ── Workflow-engine descriptor (plan §"Capability matrix", P2) ────────────
|
|
26
|
-
// No flag-shaped resume: codex resume is the `exec resume <id>` SUBCOMMAND
|
|
27
|
-
// chain (see `codexResumeArgs` in ./agent-builder.ts).
|
|
28
|
-
// Presence flag: CODEX_SANDBOX is stamped only on processes codex itself
|
|
29
|
-
// spawns inside its sandbox, so it genuinely means "running under codex" —
|
|
30
|
-
// but its VALUE (e.g. "seatbelt") is a sandbox mode, not a session id, so it
|
|
31
|
-
// is registered as `presenceEnv` (harness inference only), never
|
|
32
|
-
// `identityEnv` (whose values persist as agent_session_id). CODEX_HOME (the
|
|
33
|
-
// matrix's other candidate) is deliberately NOT registered anywhere: it is a
|
|
34
|
-
// user config-dir var commonly exported in shell profiles, so it would stamp
|
|
35
|
-
// identity onto manual runs (see `AkmHarness.presenceEnv`).
|
|
12
|
+
profile = { bin: "codex", args: [] };
|
|
13
|
+
// CODEX_SANDBOX is stamped only on processes codex itself spawns inside its sandbox, so it
|
|
14
|
+
// means "running under codex"; its value (e.g. "seatbelt") is a sandbox mode, not a session id.
|
|
36
15
|
presenceEnv = ["CODEX_SANDBOX"];
|
|
37
16
|
sessionLogProvider = () => new CodexProvider();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
17
|
+
systemPrompt = false;
|
|
18
|
+
nativeAgent = false;
|
|
19
|
+
confinable = true;
|
|
20
|
+
build({ bin, args }, req) {
|
|
21
|
+
const authored = withoutLeading(args, "exec");
|
|
22
|
+
// Model work drops the config's args (a `--sandbox` among them would widen the policy), keeping the model they name.
|
|
23
|
+
const extra = req.modelWork ? [] : req.model ? withoutModelFlag(authored) : authored;
|
|
24
|
+
const model = req.model ?? (req.modelWork ? modelFromArgs(authored) : undefined);
|
|
25
|
+
const modelFlag = model ? ["--model", model] : [];
|
|
26
|
+
if (req.prompt === undefined)
|
|
27
|
+
return { argv: [bin, ...extra, ...modelFlag] };
|
|
28
|
+
const sandbox = req.modelWork ? ["--sandbox", "read-only"] : [];
|
|
29
|
+
return { argv: [bin, "exec", ...extra, ...sandbox, "--skip-git-repo-check", ...modelFlag, "--", req.prompt] };
|
|
30
|
+
}
|
|
43
31
|
}
|