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,37 @@
|
|
|
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
|
+
* The closest of a few known names to one that was typed, for a did-you-mean in
|
|
6
|
+
* an error: the unknown-flag and unknown-command paths, an improve scope's type,
|
|
7
|
+
* and a connection or harness that is not configured.
|
|
8
|
+
*/
|
|
9
|
+
/** Single-row-at-a-time edit-distance DP (inputs are short flag/command names). */
|
|
10
|
+
function editDistance(a, b) {
|
|
11
|
+
let previous = Array.from({ length: b.length + 1 }, (_, j) => j);
|
|
12
|
+
for (let i = 1; i <= a.length; i += 1) {
|
|
13
|
+
const current = [i];
|
|
14
|
+
for (let j = 1; j <= b.length; j += 1) {
|
|
15
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
16
|
+
current.push(Math.min((previous[j] ?? 0) + 1, (current[j - 1] ?? 0) + 1, (previous[j - 1] ?? 0) + cost));
|
|
17
|
+
}
|
|
18
|
+
previous = current;
|
|
19
|
+
}
|
|
20
|
+
return previous[b.length] ?? 0;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Closest candidate within `threshold` edit distance, or undefined when
|
|
24
|
+
* nothing is close enough to be worth suggesting. Callers pick their own thresholds.
|
|
25
|
+
*/
|
|
26
|
+
export function closestMatch(attempted, candidates, threshold) {
|
|
27
|
+
let best;
|
|
28
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
29
|
+
for (const candidate of candidates) {
|
|
30
|
+
const distance = editDistance(attempted, candidate);
|
|
31
|
+
if (distance < bestDistance) {
|
|
32
|
+
bestDistance = distance;
|
|
33
|
+
best = candidate;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return best !== undefined && bestDistance <= threshold ? best : undefined;
|
|
37
|
+
}
|
package/dist/core/common.js
CHANGED
|
@@ -86,8 +86,9 @@ export function readTextFile(filePath, label = "File") {
|
|
|
86
86
|
*/
|
|
87
87
|
/**
|
|
88
88
|
* Strip JavaScript-style comments from a JSON string (JSONC support).
|
|
89
|
-
* Handles `//` line comments
|
|
90
|
-
* comment-like sequences inside
|
|
89
|
+
* Handles `//` line comments, which end at a line feed or a carriage return,
|
|
90
|
+
* and `/* */` block comments while preserving comment-like sequences inside
|
|
91
|
+
* quoted strings.
|
|
91
92
|
*/
|
|
92
93
|
export function stripJsonComments(text) {
|
|
93
94
|
let result = "";
|
|
@@ -114,7 +115,7 @@ export function stripJsonComments(text) {
|
|
|
114
115
|
continue;
|
|
115
116
|
}
|
|
116
117
|
if (text[i] === "/" && text[i + 1] === "/") {
|
|
117
|
-
while (i < text.length && text[i] !== "\n")
|
|
118
|
+
while (i < text.length && text[i] !== "\n" && text[i] !== "\r")
|
|
118
119
|
i++;
|
|
119
120
|
continue;
|
|
120
121
|
}
|
|
@@ -313,7 +314,7 @@ function readStashDirFromConfig() {
|
|
|
313
314
|
if (typeof parsed !== "object" || parsed === null)
|
|
314
315
|
return undefined;
|
|
315
316
|
const raw = parsed;
|
|
316
|
-
//
|
|
317
|
+
// The primary stash is the
|
|
317
318
|
// `defaultBundle`'s filesystem `path`. Read it directly (no config module
|
|
318
319
|
// import) so the primary-stash location survives the stashDir → bundles
|
|
319
320
|
// migration without a runtime rewire.
|
|
@@ -376,25 +377,6 @@ export function hasErrnoCode(error, code) {
|
|
|
376
377
|
export function isChmodUnsupported(error) {
|
|
377
378
|
return hasErrnoCode(error, "EPERM") || hasErrnoCode(error, "ENOTSUP") || hasErrnoCode(error, "EINVAL");
|
|
378
379
|
}
|
|
379
|
-
/**
|
|
380
|
-
* True when `value` is a RELATIVE path that cannot leave its base directory:
|
|
381
|
-
* no absolute form (POSIX `/`, Windows `\` or a `C:` drive prefix), no `~`
|
|
382
|
-
* home expansion, and no `..` segment under either separator.
|
|
383
|
-
*
|
|
384
|
-
* This is the SYNTACTIC half of containment — cheap, string-only, usable at
|
|
385
|
-
* authoring time before any directory exists. It is deliberately paired with
|
|
386
|
-
* (never a substitute for) {@link isWithin}, which resolves symlinks against a
|
|
387
|
-
* real base at use time. Workflow `exec` units run both: the parser and the
|
|
388
|
-
* frozen-plan decoder reject uncontained spellings, and the executor re-checks
|
|
389
|
-
* the resolved path before spawning.
|
|
390
|
-
*/
|
|
391
|
-
export function isContainedRelativePath(value) {
|
|
392
|
-
if (value === "" || value.startsWith("/") || value.startsWith("\\") || value.startsWith("~"))
|
|
393
|
-
return false;
|
|
394
|
-
if (/^[A-Za-z]:/.test(value))
|
|
395
|
-
return false;
|
|
396
|
-
return !value.split(/[/\\]+/).includes("..");
|
|
397
|
-
}
|
|
398
380
|
export function isWithin(candidate, root) {
|
|
399
381
|
return isContainedResolvedPath(safeRealpath(candidate), safeRealpath(root));
|
|
400
382
|
}
|
|
@@ -419,16 +401,11 @@ export function isAkmRegistryCachePath(filePath) {
|
|
|
419
401
|
return isWithin(filePath, getRegistryCacheDir()) || isWithin(filePath, getRegistryIndexCacheDir());
|
|
420
402
|
}
|
|
421
403
|
/**
|
|
422
|
-
* {@link isWithin}
|
|
423
|
-
*
|
|
424
|
-
*
|
|
425
|
-
* only the realpath syscalls are awaited.
|
|
404
|
+
* The containment comparison behind {@link isWithin}.
|
|
405
|
+
* Called directly with `path.resolve`d arguments it is a lexical check: it
|
|
406
|
+
* refuses `..` and absolute names without following symlinks.
|
|
426
407
|
*/
|
|
427
|
-
export
|
|
428
|
-
return isContainedResolvedPath(await safeRealpathAsync(candidate), await safeRealpathAsync(root));
|
|
429
|
-
}
|
|
430
|
-
/** The containment comparison shared by {@link isWithin} and {@link isWithinAsync}. */
|
|
431
|
-
function isContainedResolvedPath(resolvedCandidate, resolvedRoot) {
|
|
408
|
+
export function isContainedResolvedPath(resolvedCandidate, resolvedRoot) {
|
|
432
409
|
const rel = path.relative(normalizeFsPathForComparison(resolvedRoot), normalizeFsPathForComparison(resolvedCandidate));
|
|
433
410
|
if (rel === "")
|
|
434
411
|
return true;
|
|
@@ -475,30 +452,6 @@ export function safeRealpath(p) {
|
|
|
475
452
|
}
|
|
476
453
|
}
|
|
477
454
|
}
|
|
478
|
-
/** {@link safeRealpath}'s async twin — awaited syscalls, identical walk-up. */
|
|
479
|
-
export async function safeRealpathAsync(p) {
|
|
480
|
-
const resolved = path.resolve(p);
|
|
481
|
-
try {
|
|
482
|
-
return await fs.promises.realpath(resolved);
|
|
483
|
-
}
|
|
484
|
-
catch {
|
|
485
|
-
const suffix = [];
|
|
486
|
-
let current = resolved;
|
|
487
|
-
for (;;) {
|
|
488
|
-
const parent = path.dirname(current);
|
|
489
|
-
if (parent === current)
|
|
490
|
-
return resolved;
|
|
491
|
-
suffix.unshift(path.basename(current));
|
|
492
|
-
current = parent;
|
|
493
|
-
try {
|
|
494
|
-
return path.join(await fs.promises.realpath(current), ...suffix);
|
|
495
|
-
}
|
|
496
|
-
catch {
|
|
497
|
-
// parent also doesn't exist; keep walking up
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
455
|
function normalizeFsPathForComparison(value) {
|
|
503
456
|
return process.platform === "win32" ? value.toLowerCase() : value;
|
|
504
457
|
}
|
|
@@ -938,6 +891,33 @@ export function isRecord(value) {
|
|
|
938
891
|
export function asRecord(value) {
|
|
939
892
|
return isRecord(value) ? value : undefined;
|
|
940
893
|
}
|
|
894
|
+
/** Drop each comma that is followed, past whitespace, by `}` or `]`, outside string literals. */
|
|
895
|
+
function stripTrailingCommas(text) {
|
|
896
|
+
let result = "";
|
|
897
|
+
let inString = false;
|
|
898
|
+
for (let i = 0; i < text.length; i++) {
|
|
899
|
+
const char = text[i];
|
|
900
|
+
if (inString) {
|
|
901
|
+
result += char;
|
|
902
|
+
if (char === "\\")
|
|
903
|
+
result += text[++i] ?? "";
|
|
904
|
+
else if (char === '"')
|
|
905
|
+
inString = false;
|
|
906
|
+
continue;
|
|
907
|
+
}
|
|
908
|
+
if (char === '"')
|
|
909
|
+
inString = true;
|
|
910
|
+
else if (char === ",") {
|
|
911
|
+
let next = i + 1;
|
|
912
|
+
while (next < text.length && /\s/.test(text[next]))
|
|
913
|
+
next++;
|
|
914
|
+
if (text[next] === "}" || text[next] === "]")
|
|
915
|
+
continue;
|
|
916
|
+
}
|
|
917
|
+
result += char;
|
|
918
|
+
}
|
|
919
|
+
return result;
|
|
920
|
+
}
|
|
941
921
|
/**
|
|
942
922
|
* Parse JSONC: comments stripped by {@link stripJsonComments}, and trailing
|
|
943
923
|
* commas (`[a, b,]`, `{"k": 1,}`) tolerated, as OpenCode's own `.jsonc` reader does.
|
|
@@ -948,7 +928,7 @@ export function parseJsonc(text) {
|
|
|
948
928
|
return JSON.parse(stripped);
|
|
949
929
|
}
|
|
950
930
|
catch {
|
|
951
|
-
return JSON.parse(stripped
|
|
931
|
+
return JSON.parse(stripTrailingCommas(stripped));
|
|
952
932
|
}
|
|
953
933
|
}
|
|
954
934
|
/** `JSON.parse` that returns `undefined` instead of throwing. */
|
|
@@ -83,6 +83,24 @@ const MAX_CONFIG_BACKUPS = 5;
|
|
|
83
83
|
export function backupExistingConfig(configPath, now = new Date()) {
|
|
84
84
|
if (!fs.existsSync(configPath))
|
|
85
85
|
return undefined;
|
|
86
|
+
const timestamped = copyToConfigBackups(configPath, (stamp) => `config-${stamp}.json`, now);
|
|
87
|
+
const backupDir = path.dirname(timestamped);
|
|
88
|
+
const latest = path.join(backupDir, "config.latest.json");
|
|
89
|
+
fs.copyFileSync(configPath, latest);
|
|
90
|
+
// 08-F4: a config backup carries the same sensitive fields as the live config
|
|
91
|
+
// (endpoints, tokens). `copyFileSync` inherits the source's (often 0644) mode,
|
|
92
|
+
// so tighten the backups to owner-only — mirrors the env-cli 0600 write floor.
|
|
93
|
+
chmodIfSupported(latest, 0o600);
|
|
94
|
+
pruneOldBackups(backupDir);
|
|
95
|
+
return { timestamped, latest };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Copy `source` into `<cacheDir>/config-backups/` as `name(stamp)`, where `stamp` is the
|
|
99
|
+
* timestamp of `now` and gets a `-1`, `-2`, ... when that name is taken, and return where it
|
|
100
|
+
* went. The directory is owner-only (0700) and so is the copy (0600). The one place a backup is
|
|
101
|
+
* named, for the config file and the credential store alike.
|
|
102
|
+
*/
|
|
103
|
+
export function copyToConfigBackups(source, name, now = new Date()) {
|
|
86
104
|
const backupDir = path.join(getCacheDir(), "config-backups");
|
|
87
105
|
// 08-F4: lock the backup dir owner-only up front (0700) — matching the
|
|
88
106
|
// env.ts/secret.ts convention — so no other local user can traverse in during
|
|
@@ -90,29 +108,19 @@ export function backupExistingConfig(configPath, now = new Date()) {
|
|
|
90
108
|
fs.mkdirSync(backupDir, { recursive: true, mode: 0o700 });
|
|
91
109
|
chmodIfSupported(backupDir, 0o700);
|
|
92
110
|
const timestamp = now.toISOString().replace(/[.:]/g, "-");
|
|
93
|
-
let sequence = 0
|
|
94
|
-
|
|
95
|
-
while (true) {
|
|
96
|
-
timestamped = path.join(backupDir, `config-${timestamp}${sequence === 0 ? "" : `-${sequence}`}.json`);
|
|
111
|
+
for (let sequence = 0;; sequence += 1) {
|
|
112
|
+
const target = path.join(backupDir, name(sequence === 0 ? timestamp : `${timestamp}-${sequence}`));
|
|
97
113
|
try {
|
|
98
|
-
fs.copyFileSync(
|
|
99
|
-
break;
|
|
114
|
+
fs.copyFileSync(source, target, fs.constants.COPYFILE_EXCL);
|
|
100
115
|
}
|
|
101
116
|
catch (error) {
|
|
102
|
-
if (error.code
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
if (error.code === "EEXIST")
|
|
118
|
+
continue;
|
|
119
|
+
throw error;
|
|
105
120
|
}
|
|
121
|
+
chmodIfSupported(target, 0o600);
|
|
122
|
+
return target;
|
|
106
123
|
}
|
|
107
|
-
const latest = path.join(backupDir, "config.latest.json");
|
|
108
|
-
fs.copyFileSync(configPath, latest);
|
|
109
|
-
// 08-F4: a config backup carries the same sensitive fields as the live config
|
|
110
|
-
// (endpoints, tokens). `copyFileSync` inherits the source's (often 0644) mode,
|
|
111
|
-
// so tighten the backups to owner-only — mirrors the env-cli 0600 write floor.
|
|
112
|
-
chmodIfSupported(timestamped, 0o600);
|
|
113
|
-
chmodIfSupported(latest, 0o600);
|
|
114
|
-
pruneOldBackups(backupDir);
|
|
115
|
-
return { timestamped, latest };
|
|
116
124
|
}
|
|
117
125
|
/** chmod, skipped on a filesystem without POSIX modes (CIFS), where the mount sets them. */
|
|
118
126
|
function chmodIfSupported(target, mode) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Zod schema for AkmConfig — the single source of truth for the on-disk shape.
|
|
6
6
|
*
|
|
7
7
|
* ASSEMBLY BARREL: the individual section schemas live under `./schema/*` (one
|
|
8
|
-
* cohesive module per config area —
|
|
8
|
+
* cohesive module per config area — connections, harnesses, embedding, improve, sources/
|
|
9
9
|
* bundles, index, search, output, feedback, workflow, setup, plus shared
|
|
10
10
|
* `primitives`). This file assembles them into the top-level {@link AkmConfigShape}
|
|
11
11
|
* / {@link AkmConfigSchema}, owns the cross-field {@link AkmConfigSchema.superRefine},
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* silently dropping them would mask user data loss.
|
|
32
32
|
* - UNKNOWN-KEY POLICY: portable descriptive sections generally use
|
|
33
33
|
* passthrough so version skew round-trips newer settings. Small finite
|
|
34
|
-
* authority/toggle sections (`scheduler`, `
|
|
34
|
+
* authority/toggle sections (`scheduler`, `experimental`, and
|
|
35
35
|
* reranker policy) are strict: a misspelling there must not silently turn a
|
|
36
36
|
* safety decision off. The top level remains passthrough and warns on
|
|
37
37
|
* unknown keys.
|
|
@@ -39,28 +39,28 @@
|
|
|
39
39
|
* enforced at save time via `superRefine` on the top-level schema.
|
|
40
40
|
*/
|
|
41
41
|
import { z } from "zod";
|
|
42
|
-
import {
|
|
43
|
-
import {
|
|
42
|
+
import { BUILTIN_IMPROVE_STRATEGY_NAMES, REMOVED_IMPROVE_STRATEGY_NAMES } from "./engine-semantics.js";
|
|
43
|
+
import { ConnectionsSchema } from "./schema/connections.js";
|
|
44
44
|
import { EmbeddingConnectionConfigSchema } from "./schema/embedding.js";
|
|
45
|
-
import { EnginesSchema } from "./schema/engines.js";
|
|
46
|
-
import { ExecutionPolicyConfigSchema } from "./schema/execution.js";
|
|
47
45
|
import { ExperimentalConfigSchema } from "./schema/experimental.js";
|
|
48
46
|
import { FeedbackConfigSchema } from "./schema/feedback.js";
|
|
47
|
+
import { HarnessesSchema } from "./schema/harnesses.js";
|
|
49
48
|
import { ImproveConfigSchema } from "./schema/improve.js";
|
|
50
49
|
import { IndexConfigSchema } from "./schema/index-config.js";
|
|
51
50
|
import { OutputConfigSchema } from "./schema/output.js";
|
|
52
|
-
import { CURRENT_CONFIG_VERSION,
|
|
51
|
+
import { CURRENT_CONFIG_VERSION, nonEmptyString, nonNegativeNumber } from "./schema/primitives.js";
|
|
53
52
|
import { SchedulerConfigSchema } from "./schema/scheduler.js";
|
|
54
53
|
import { SearchConfigSchema } from "./schema/search.js";
|
|
55
54
|
import { SetupConfigSchema } from "./schema/setup.js";
|
|
56
55
|
import { BundlesConfigSchema, RegistryConfigEntrySchema } from "./schema/sources-bundles.js";
|
|
57
56
|
import { WorkflowConfigSchema } from "./schema/workflow.js";
|
|
58
57
|
// ── Section re-exports (keep every `./config-schema` import path working) ────
|
|
58
|
+
export { ConnectionSchema, ConnectionsSchema } from "./schema/connections.js";
|
|
59
59
|
export { EmbeddingConnectionConfigSchema } from "./schema/embedding.js";
|
|
60
|
-
export { EngineConfigSchema, EnginesSchema, LlmConnectionConfigSchema, LlmProfileConfigSchema } from "./schema/engines.js";
|
|
61
60
|
export { ExperimentalConfigSchema } from "./schema/experimental.js";
|
|
62
61
|
export { FeedbackConfigSchema } from "./schema/feedback.js";
|
|
63
|
-
export {
|
|
62
|
+
export { HarnessesSchema } from "./schema/harnesses.js";
|
|
63
|
+
export { ImproveConfigSchema, ImproveWhereSchema } from "./schema/improve.js";
|
|
64
64
|
export { ConsolidateProcessConfigSchema, DistillProcessConfigSchema, ExtractProcessConfigSchema, ImproveProcessConfigSchema, ImproveProfileConfigSchema, MemoryInferenceProcessConfigSchema, ProactiveMaintenanceProcessConfigSchema, ReflectProcessConfigSchema, TriageProcessConfigSchema, ValidationProcessConfigSchema, } from "./schema/improve-processes.js";
|
|
65
65
|
export { IndexConfigSchema, IndexPassConfigSchema } from "./schema/index-config.js";
|
|
66
66
|
export { OutputConfigSchema } from "./schema/output.js";
|
|
@@ -70,14 +70,6 @@ export { SearchConfigSchema } from "./schema/search.js";
|
|
|
70
70
|
export { SetupConfigSchema } from "./schema/setup.js";
|
|
71
71
|
export { BundleConfigEntrySchema, BundlesConfigSchema, RegistryConfigEntrySchema, SourceConfigEntrySchema, } from "./schema/sources-bundles.js";
|
|
72
72
|
export { WorkflowConfigSchema } from "./schema/workflow.js";
|
|
73
|
-
// ── Defaults ───────────────────────────────────────────────────────────────
|
|
74
|
-
export const DefaultsSchema = z
|
|
75
|
-
.object({
|
|
76
|
-
engine: engineName.optional(),
|
|
77
|
-
llmEngine: engineName.optional(),
|
|
78
|
-
improveStrategy: engineName.optional(),
|
|
79
|
-
})
|
|
80
|
-
.passthrough();
|
|
81
73
|
// ── Top-level AkmConfig ────────────────────────────────────────────────────
|
|
82
74
|
/**
|
|
83
75
|
* Base object schema used both as the top-level shape and as the source of
|
|
@@ -104,12 +96,10 @@ export const AkmConfigShape = {
|
|
|
104
96
|
// `resolveExtendsChain` (./config.ts), not validated here (a bad ref
|
|
105
97
|
// surfaces as a `ConfigError` at load, naming the ref).
|
|
106
98
|
extends: nonEmptyString.optional(),
|
|
107
|
-
|
|
108
|
-
|
|
99
|
+
connections: ConnectionsSchema.optional(),
|
|
100
|
+
harnesses: HarnessesSchema.optional(),
|
|
109
101
|
semanticSearchMode: z.enum(["off", "auto"]).default("off"),
|
|
110
102
|
embedding: EmbeddingConnectionConfigSchema.optional(),
|
|
111
|
-
// Host-local execution authority. Inherited layers are stripped.
|
|
112
|
-
execution: ExecutionPolicyConfigSchema.optional(),
|
|
113
103
|
index: IndexConfigSchema.optional(),
|
|
114
104
|
registries: z.array(RegistryConfigEntrySchema).optional(),
|
|
115
105
|
// `bundles` + `defaultBundle` are the only source configuration shape. The
|
|
@@ -197,103 +187,26 @@ export const AkmConfigSchema = AkmConfigBaseSchema.superRefine((config, ctx) =>
|
|
|
197
187
|
});
|
|
198
188
|
}
|
|
199
189
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const fallback = config.engines?.[engine.llmEngine];
|
|
203
|
-
if (!fallback || fallback.kind !== "llm") {
|
|
204
|
-
ctx.addIssue({
|
|
205
|
-
code: z.ZodIssueCode.custom,
|
|
206
|
-
path: ["engines", name, "llmEngine"],
|
|
207
|
-
message: "llmEngine must name an LLM engine",
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
const defaultEngine = config.defaults?.engine;
|
|
213
|
-
if (defaultEngine && !config.engines?.[defaultEngine]) {
|
|
214
|
-
ctx.addIssue({
|
|
215
|
-
code: z.ZodIssueCode.custom,
|
|
216
|
-
path: ["defaults", "engine"],
|
|
217
|
-
message: "engine does not name a configured engine",
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
// One rule for every key unattended model work reads its engine from: the
|
|
221
|
-
// engine must confine the model-work tool policy (an LLM, or an agent whose
|
|
222
|
-
// harness does), because that work runs over generated content with no one
|
|
223
|
-
// watching.
|
|
224
|
-
const confining = [...HARNESS_MODEL_WORK_IDS];
|
|
225
|
-
const confiningPlatforms = `${confining.slice(0, -1).join(", ")} or ${confining.at(-1)}`;
|
|
226
|
-
const modelWorkEngine = (name, path) => {
|
|
227
|
-
if (!name)
|
|
228
|
-
return;
|
|
229
|
-
const engine = config.engines?.[name];
|
|
230
|
-
if (!engine) {
|
|
231
|
-
ctx.addIssue({ code: z.ZodIssueCode.custom, path, message: "engine does not name a configured engine" });
|
|
232
|
-
}
|
|
233
|
-
else if (engine.kind !== "llm" && !HARNESS_MODEL_WORK_IDS.has(engine.platform)) {
|
|
234
|
-
ctx.addIssue({
|
|
235
|
-
code: z.ZodIssueCode.custom,
|
|
236
|
-
path,
|
|
237
|
-
message: `engine "${name}" (platform ${engine.platform}) cannot confine the model-work tool policy, which unattended model work requires. Use an LLM engine, or an agent engine on ${confiningPlatforms}.`,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
};
|
|
241
|
-
modelWorkEngine(config.defaults?.llmEngine, ["defaults", "llmEngine"]);
|
|
242
|
-
for (const [passName, pass] of Object.entries(config.index ?? {})) {
|
|
243
|
-
const engine = pass?.engine;
|
|
244
|
-
if (typeof engine === "string")
|
|
245
|
-
modelWorkEngine(engine, ["index", passName, "engine"]);
|
|
246
|
-
}
|
|
247
|
-
const workflowJudge = config.workflow?.judgeEngine;
|
|
248
|
-
if (workflowJudge && !config.engines?.[workflowJudge]) {
|
|
249
|
-
ctx.addIssue({
|
|
250
|
-
code: z.ZodIssueCode.custom,
|
|
251
|
-
path: ["workflow", "judgeEngine"],
|
|
252
|
-
message: "judgeEngine does not name a configured engine",
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
const defaultStrategy = config.defaults?.improveStrategy;
|
|
256
|
-
if (defaultStrategy &&
|
|
190
|
+
const improveStrategy = config.improve?.strategy;
|
|
191
|
+
if (improveStrategy &&
|
|
257
192
|
// graph-refresh is exempt from this eager, config-load-time check: unlike
|
|
258
193
|
// a plain typo, it is a specific, known retirement, and refusing it here
|
|
259
194
|
// would fail every command's config load (including `akm migrate apply`,
|
|
260
195
|
// the one that fixes this). `resolveImproveStrategy`
|
|
261
196
|
// (src/commands/improve/improve-strategies.ts) refuses it lazily, at
|
|
262
197
|
// improve-invocation time, with the same message either way.
|
|
263
|
-
|
|
198
|
+
improveStrategy !== "graph-refresh" &&
|
|
264
199
|
// The strategies removed in 0.10 (#1130) are exempt for the same reason:
|
|
265
200
|
// `resolveImproveStrategy` refuses them lazily, naming `default`.
|
|
266
|
-
!REMOVED_IMPROVE_STRATEGY_NAMES.includes(
|
|
267
|
-
!BUILTIN_IMPROVE_STRATEGY_NAMES.includes(
|
|
268
|
-
!config.improve?.strategies?.[
|
|
201
|
+
!REMOVED_IMPROVE_STRATEGY_NAMES.includes(improveStrategy) &&
|
|
202
|
+
!BUILTIN_IMPROVE_STRATEGY_NAMES.includes(improveStrategy) &&
|
|
203
|
+
!config.improve?.strategies?.[improveStrategy]) {
|
|
269
204
|
ctx.addIssue({
|
|
270
205
|
code: z.ZodIssueCode.custom,
|
|
271
|
-
path: ["
|
|
272
|
-
message: "
|
|
206
|
+
path: ["improve", "strategy"],
|
|
207
|
+
message: "strategy does not name a built-in or configured improve strategy",
|
|
273
208
|
});
|
|
274
209
|
}
|
|
275
|
-
for (const [strategyName, strategy] of Object.entries(config.improve?.strategies ?? {})) {
|
|
276
|
-
const strategyPath = ["improve", "strategies", strategyName];
|
|
277
|
-
modelWorkEngine(strategy.engine, [...strategyPath, "engine"]);
|
|
278
|
-
for (const [processName, process] of Object.entries(strategy.processes ?? {})) {
|
|
279
|
-
const processConfig = process;
|
|
280
|
-
const processPath = [...strategyPath, "processes", processName];
|
|
281
|
-
if (processConfig.engine && !IMPROVE_ENGINE_PROCESSES.includes(processName)) {
|
|
282
|
-
ctx.addIssue({
|
|
283
|
-
code: z.ZodIssueCode.custom,
|
|
284
|
-
path: [...processPath, "engine"],
|
|
285
|
-
message: `${processName} does not dispatch an engine`,
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
modelWorkEngine(processConfig.engine, [...processPath, "engine"]);
|
|
290
|
-
}
|
|
291
|
-
if (processConfig.judgment?.enabled === true) {
|
|
292
|
-
modelWorkEngine(processConfig.judgment.engine, [...processPath, "judgment", "engine"]);
|
|
293
|
-
}
|
|
294
|
-
modelWorkEngine(processConfig.qualityGate?.engine, [...processPath, "qualityGate", "engine"]);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
210
|
// #464.a: defaultWriteTarget must name a configured source. 0.9.0 (spec
|
|
298
211
|
// §10.1): sources are `bundles` keys, so it must name a bundle. With no
|
|
299
212
|
// bundles configured, error out instead of silently accepting (no implicit
|
|
@@ -117,7 +117,7 @@ function hashBundleSourceIdentity(identity) {
|
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
119
|
* The resolved primary stash path — the `defaultBundle`'s filesystem `path`
|
|
120
|
-
*
|
|
120
|
+
* — or `undefined` when no filesystem primary is configured.
|
|
121
121
|
*/
|
|
122
122
|
export function primaryBundlePath(config) {
|
|
123
123
|
const bundles = config.bundles;
|
|
@@ -212,12 +212,12 @@ export function bundleEntryToSourceEntry(key, bundle, isPrimary = false) {
|
|
|
212
212
|
return undefined;
|
|
213
213
|
}
|
|
214
214
|
/**
|
|
215
|
-
* Desired 0.9.0 bundle descriptor for a registry-installed source
|
|
215
|
+
* Desired 0.9.0 bundle descriptor for a registry-installed source.
|
|
216
216
|
* Maps the install source kind onto the ONE source descriptor a bundle entry
|
|
217
217
|
* carries: git/github → a provider-ready clone URL, npm → `{ npm: ref }`,
|
|
218
218
|
* everything else (local/filesystem) → `{ path: stashRoot }`.
|
|
219
219
|
*
|
|
220
|
-
* CRITICAL
|
|
220
|
+
* CRITICAL: the materialized cache root NEVER appears in the
|
|
221
221
|
* descriptor for a git/npm bundle — the desired config carries only the source
|
|
222
222
|
* descriptor; the install locator stays in `registryId` and the resolved root
|
|
223
223
|
* belongs exclusively in the lock's `localRoot`. Callers layer
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
// Harness ids derive from the harness registry; nothing the registry imports
|
|
5
5
|
// reaches `core/config` at runtime, so there is no cycle.
|
|
6
|
-
import {
|
|
6
|
+
import { VALID_HARNESS_IDS } from "../../integrations/harnesses/index.js";
|
|
7
7
|
/**
|
|
8
8
|
* Canonical list of valid agent harness / platform ids, derived from the harness
|
|
9
|
-
* registry so the
|
|
10
|
-
*
|
|
9
|
+
* registry so the harness `platform` check and setup's `DetectedHarness` union
|
|
10
|
+
* cannot drift.
|
|
11
11
|
*/
|
|
12
|
-
export {
|
|
12
|
+
export { VALID_HARNESS_IDS };
|