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
|
@@ -1,136 +0,0 @@
|
|
|
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
|
-
const CHAT_SUFFIX = "/chat/completions";
|
|
5
|
-
export function normalizeChatCompletionsEndpoint(input) {
|
|
6
|
-
const url = new URL(input);
|
|
7
|
-
if (url.protocol !== "http:" && url.protocol !== "https:")
|
|
8
|
-
throw new Error("endpoint must use http or https");
|
|
9
|
-
if (url.username || url.password || url.search || url.hash)
|
|
10
|
-
throw new Error("endpoint cannot contain credentials, query, or fragment");
|
|
11
|
-
let pathname = url.pathname.replace(/\/+$/, "");
|
|
12
|
-
if (!pathname.endsWith(CHAT_SUFFIX)) {
|
|
13
|
-
if (!pathname.endsWith("/v1") && !pathname.includes("/openai"))
|
|
14
|
-
pathname += "/v1";
|
|
15
|
-
pathname += CHAT_SUFFIX;
|
|
16
|
-
}
|
|
17
|
-
url.pathname = pathname;
|
|
18
|
-
return url.toString().replace(/\/$/, "");
|
|
19
|
-
}
|
|
20
|
-
export function engineFingerprint(engine) {
|
|
21
|
-
return engine.kind === "llm"
|
|
22
|
-
? `llm:${normalizeChatCompletionsEndpoint(engine.endpoint)}`
|
|
23
|
-
: `agent:${engine.platform}`;
|
|
24
|
-
}
|
|
25
|
-
export async function verifyOpenAiCompatibleEndpoint(candidate, fetchFn = fetch) {
|
|
26
|
-
let endpoint;
|
|
27
|
-
try {
|
|
28
|
-
endpoint = normalizeChatCompletionsEndpoint(candidate.endpoint);
|
|
29
|
-
}
|
|
30
|
-
catch (error) {
|
|
31
|
-
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
32
|
-
}
|
|
33
|
-
if (!candidate.model.trim())
|
|
34
|
-
return { ok: false, reason: "no detected model" };
|
|
35
|
-
const credential = candidate.apiKeyEnvVar ? process.env[candidate.apiKeyEnvVar] : undefined;
|
|
36
|
-
if (candidate.apiKeyEnvVar && !credential) {
|
|
37
|
-
return { ok: false, reason: `required credential ${candidate.apiKeyEnvVar} is unavailable` };
|
|
38
|
-
}
|
|
39
|
-
const controller = new AbortController();
|
|
40
|
-
const timer = setTimeout(() => controller.abort(), 10_000);
|
|
41
|
-
timer.unref?.();
|
|
42
|
-
try {
|
|
43
|
-
const response = await fetchFn(endpoint, {
|
|
44
|
-
method: "POST",
|
|
45
|
-
headers: {
|
|
46
|
-
"content-type": "application/json",
|
|
47
|
-
...(credential ? { authorization: `Bearer ${credential}` } : {}),
|
|
48
|
-
},
|
|
49
|
-
body: JSON.stringify({
|
|
50
|
-
model: candidate.model,
|
|
51
|
-
messages: [{ role: "user", content: "Reply OK" }],
|
|
52
|
-
max_tokens: 1,
|
|
53
|
-
stream: false,
|
|
54
|
-
}),
|
|
55
|
-
signal: controller.signal,
|
|
56
|
-
});
|
|
57
|
-
if (!response.ok)
|
|
58
|
-
return { ok: false, reason: `HTTP ${response.status}` };
|
|
59
|
-
const body = (await response.json());
|
|
60
|
-
if (typeof body.choices?.[0]?.message?.content !== "string") {
|
|
61
|
-
return { ok: false, reason: "response did not contain choices[0].message.content" };
|
|
62
|
-
}
|
|
63
|
-
return { ok: true, endpoint };
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
clearTimeout(timer);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function slug(value) {
|
|
73
|
-
const normalized = value
|
|
74
|
-
.toLowerCase()
|
|
75
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
76
|
-
.replace(/^-|-$/g, "");
|
|
77
|
-
return normalized && /^[a-z]/.test(normalized) ? normalized : "local";
|
|
78
|
-
}
|
|
79
|
-
function availableName(config, preferred, fingerprint) {
|
|
80
|
-
for (const [name, engine] of Object.entries(config.engines ?? {}).sort(([left], [right]) => left.localeCompare(right))) {
|
|
81
|
-
if (engineFingerprint(engine) === fingerprint)
|
|
82
|
-
return name;
|
|
83
|
-
}
|
|
84
|
-
const base = slug(preferred);
|
|
85
|
-
if (!config.engines?.[base])
|
|
86
|
-
return base;
|
|
87
|
-
for (let suffix = 2;; suffix++) {
|
|
88
|
-
const candidate = `${base}-${suffix}`;
|
|
89
|
-
if (!config.engines?.[candidate])
|
|
90
|
-
return candidate;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/** Insert or reuse an LLM engine by canonical endpoint without modifying a match. */
|
|
94
|
-
export function upsertDetectedLlmEngine(config, candidate) {
|
|
95
|
-
const endpoint = normalizeChatCompletionsEndpoint(candidate.endpoint);
|
|
96
|
-
const fingerprint = `llm:${endpoint}`;
|
|
97
|
-
const name = availableName(config, candidate.provider, fingerprint);
|
|
98
|
-
const existing = config.engines?.[name];
|
|
99
|
-
const reused = existing !== undefined && engineFingerprint(existing) === fingerprint;
|
|
100
|
-
const engines = reused
|
|
101
|
-
? config.engines
|
|
102
|
-
: {
|
|
103
|
-
...(config.engines ?? {}),
|
|
104
|
-
[name]: {
|
|
105
|
-
kind: "llm",
|
|
106
|
-
provider: candidate.provider,
|
|
107
|
-
endpoint,
|
|
108
|
-
model: candidate.model,
|
|
109
|
-
...(candidate.apiKeyEnvVar ? { apiKey: `\${${candidate.apiKeyEnvVar}}` } : {}),
|
|
110
|
-
},
|
|
111
|
-
};
|
|
112
|
-
const defaults = { ...(config.defaults ?? {}) };
|
|
113
|
-
const currentDefault = defaults.llmEngine;
|
|
114
|
-
if (!currentDefault ||
|
|
115
|
-
(config.engines?.[currentDefault] && engineFingerprint(config.engines[currentDefault]) === fingerprint)) {
|
|
116
|
-
defaults.llmEngine = name;
|
|
117
|
-
}
|
|
118
|
-
if (!defaults.engine)
|
|
119
|
-
defaults.engine = defaults.llmEngine ?? name;
|
|
120
|
-
return { config: { ...config, engines, defaults }, name, reused };
|
|
121
|
-
}
|
|
122
|
-
/** Insert or reuse an agent engine by canonical platform without modifying a match. */
|
|
123
|
-
export function upsertDetectedAgentEngine(config, platform) {
|
|
124
|
-
const fingerprint = `agent:${platform}`;
|
|
125
|
-
const name = availableName(config, platform, fingerprint);
|
|
126
|
-
const existing = config.engines?.[name];
|
|
127
|
-
const reused = existing !== undefined && engineFingerprint(existing) === fingerprint;
|
|
128
|
-
const engines = reused ? config.engines : { ...(config.engines ?? {}), [name]: { kind: "agent", platform } };
|
|
129
|
-
const defaults = { ...(config.defaults ?? {}) };
|
|
130
|
-
const currentDefault = defaults.engine;
|
|
131
|
-
if (!currentDefault ||
|
|
132
|
-
(config.engines?.[currentDefault] && engineFingerprint(config.engines[currentDefault]) === fingerprint)) {
|
|
133
|
-
defaults.engine = name;
|
|
134
|
-
}
|
|
135
|
-
return { config: { ...config, engines, defaults }, name, reused };
|
|
136
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
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
|
-
import { ConfigError } from "../core/errors.js";
|
|
5
|
-
export function readCurrentLlmEngine(config) {
|
|
6
|
-
const name = config.defaults?.llmEngine;
|
|
7
|
-
const engine = name ? config.engines?.[name] : undefined;
|
|
8
|
-
if (!engine || engine.kind !== "llm")
|
|
9
|
-
return undefined;
|
|
10
|
-
const { kind: _kind, timeoutMs, ...connection } = engine;
|
|
11
|
-
return {
|
|
12
|
-
...connection,
|
|
13
|
-
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export function readAgentEngineSelection(config) {
|
|
17
|
-
const engines = {};
|
|
18
|
-
for (const [name, engine] of Object.entries(config.engines ?? {})) {
|
|
19
|
-
if (engine.kind === "agent")
|
|
20
|
-
engines[name] = { ...engine };
|
|
21
|
-
}
|
|
22
|
-
const defaultName = config.defaults?.engine;
|
|
23
|
-
const defaultIsAgent = defaultName && config.engines?.[defaultName]?.kind === "agent";
|
|
24
|
-
if (Object.keys(engines).length === 0 && !defaultIsAgent)
|
|
25
|
-
return undefined;
|
|
26
|
-
return { ...(defaultIsAgent ? { default: defaultName } : {}), engines };
|
|
27
|
-
}
|
|
28
|
-
/** Write an OpenAI-compatible connection as a named LLM engine. */
|
|
29
|
-
export function writeLlmEngine(config, llm) {
|
|
30
|
-
const name = config.defaults?.llmEngine ?? "default";
|
|
31
|
-
if (!llm) {
|
|
32
|
-
const engines = { ...(config.engines ?? {}) };
|
|
33
|
-
if (engines[name]?.kind === "llm")
|
|
34
|
-
delete engines[name];
|
|
35
|
-
const defaults = { ...(config.defaults ?? {}) };
|
|
36
|
-
delete defaults.llmEngine;
|
|
37
|
-
if (defaults.engine === name)
|
|
38
|
-
delete defaults.engine;
|
|
39
|
-
return { engines, defaults };
|
|
40
|
-
}
|
|
41
|
-
if (config.engines?.[name] && config.engines[name].kind !== "llm") {
|
|
42
|
-
throw new ConfigError(`Cannot configure LLM engine ${JSON.stringify(name)} because that name belongs to an agent engine.`, "INVALID_CONFIG_FILE");
|
|
43
|
-
}
|
|
44
|
-
const endpoint = llm.endpoint.endsWith("/chat/completions")
|
|
45
|
-
? llm.endpoint
|
|
46
|
-
: `${llm.endpoint.replace(/\/$/, "")}/chat/completions`;
|
|
47
|
-
return {
|
|
48
|
-
engines: {
|
|
49
|
-
...(config.engines ?? {}),
|
|
50
|
-
[name]: {
|
|
51
|
-
...llm,
|
|
52
|
-
kind: "llm",
|
|
53
|
-
endpoint,
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
defaults: { ...(config.defaults ?? {}), engine: config.defaults?.engine ?? name, llmEngine: name },
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/** Merge setup-selected agent engines without translating profile-shaped data. */
|
|
60
|
-
export function writeAgentEngines(config, selection) {
|
|
61
|
-
for (const [name, engine] of Object.entries(selection?.engines ?? {})) {
|
|
62
|
-
const existing = config.engines?.[name];
|
|
63
|
-
if (existing && existing.kind !== engine.kind) {
|
|
64
|
-
throw new ConfigError(`Cannot configure ${engine.kind} engine ${JSON.stringify(name)} because that name belongs to an ${existing.kind} engine.`, "INVALID_CONFIG_FILE");
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const defaults = { ...(config.defaults ?? {}) };
|
|
68
|
-
if (selection?.disabled) {
|
|
69
|
-
const currentDefault = defaults.engine;
|
|
70
|
-
if (currentDefault && config.engines?.[currentDefault]?.kind === "agent") {
|
|
71
|
-
const llmDefault = defaults.llmEngine;
|
|
72
|
-
if (llmDefault && config.engines?.[llmDefault]?.kind === "llm")
|
|
73
|
-
defaults.engine = llmDefault;
|
|
74
|
-
else
|
|
75
|
-
delete defaults.engine;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (selection?.default)
|
|
79
|
-
defaults.engine = selection.default;
|
|
80
|
-
const engines = { ...(config.engines ?? {}), ...(selection?.engines ?? {}) };
|
|
81
|
-
const selectedEngine = selection?.default ? engines[selection.default] : undefined;
|
|
82
|
-
if (selection?.default && selectedEngine && selectedEngine.kind !== "agent") {
|
|
83
|
-
throw new ConfigError(`Cannot select agent engine ${JSON.stringify(selection.default)} because that name belongs to an LLM engine.`, "INVALID_CONFIG_FILE");
|
|
84
|
-
}
|
|
85
|
-
if (selection?.default && !engines[selection.default]) {
|
|
86
|
-
engines[selection.default] = {
|
|
87
|
-
kind: "agent",
|
|
88
|
-
platform: selection.default,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
return { engines, defaults };
|
|
92
|
-
}
|
|
93
|
-
export function cloneLlmConnection(llm) {
|
|
94
|
-
if (!llm)
|
|
95
|
-
return undefined;
|
|
96
|
-
return JSON.parse(JSON.stringify(llm));
|
|
97
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
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
|
-
* Pluggable registry of LLM config importers for supported agent harnesses.
|
|
6
|
-
*
|
|
7
|
-
* Each importer detects whether a harness is installed (filesystem only,
|
|
8
|
-
* no network) and, if so, reads its config to extract LLM connection details.
|
|
9
|
-
* API key VALUES are never stored — only the env var names that hold them.
|
|
10
|
-
*
|
|
11
|
-
* To add a new harness importer: declare `configImporter` on the harness
|
|
12
|
-
* descriptor (`integrations/harnesses/<id>/index.ts`).
|
|
13
|
-
*
|
|
14
|
-
* NOTE: The `detect()` method in each importer overlaps intentionally with
|
|
15
|
-
* `detectAgentPlatforms()` in `detect.ts`. That function scans for harness
|
|
16
|
-
* presence to display installed platforms to the user; these importers go
|
|
17
|
-
* further by reading and parsing the harness config. They serve different
|
|
18
|
-
* purposes and should not be deduplicated.
|
|
19
|
-
*/
|
|
20
|
-
import { HARNESS_REGISTRY } from "../integrations/harnesses/index.js";
|
|
21
|
-
/** Importers declared by the registered harnesses, in registry order. */
|
|
22
|
-
export const HARNESS_CONFIG_IMPORTERS = HARNESS_REGISTRY.flatMap((h) => h.configImporter ? [h.configImporter] : []);
|
|
23
|
-
/**
|
|
24
|
-
* Run all importers whose `detect()` returns `true` and collect their configs.
|
|
25
|
-
*
|
|
26
|
-
* Pure function — filesystem reads only, no network, no side effects.
|
|
27
|
-
* Individual importer failures are swallowed so one broken harness never
|
|
28
|
-
* blocks the setup wizard.
|
|
29
|
-
*
|
|
30
|
-
* @returns List of detected harness configs (may be empty).
|
|
31
|
-
*/
|
|
32
|
-
export function detectHarnessConfigs() {
|
|
33
|
-
const results = [];
|
|
34
|
-
for (const importer of HARNESS_CONFIG_IMPORTERS) {
|
|
35
|
-
try {
|
|
36
|
-
if (!importer.detect())
|
|
37
|
-
continue;
|
|
38
|
-
const config = importer.importConfig();
|
|
39
|
-
if (config)
|
|
40
|
-
results.push(config);
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
// Never let one importer crash the whole detection
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return results;
|
|
47
|
-
}
|
package/dist/setup/providers.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
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
|
-
* Endpoint + default model for each cloud provider akm can recommend from a
|
|
6
|
-
* detected API key. A provider absent from this table yields no recommendation
|
|
7
|
-
* (the previous paired `switch`es both returned `undefined`).
|
|
8
|
-
*/
|
|
9
|
-
export const PROVIDER_DEFAULTS = {
|
|
10
|
-
anthropic: { endpoint: "https://api.anthropic.com/v1", model: "claude-sonnet-4-5" },
|
|
11
|
-
openai: { endpoint: "https://api.openai.com/v1", model: "gpt-4o-mini" },
|
|
12
|
-
gemini: { endpoint: "https://generativelanguage.googleapis.com/v1beta/openai", model: "gemini-1.5-flash" },
|
|
13
|
-
groq: { endpoint: "https://api.groq.com/openai/v1", model: "llama-3.3-70b-versatile" },
|
|
14
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
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
|
-
* Setup wizard step: enable/disable semantic search and decide whether to
|
|
6
|
-
* prepare its assets now.
|
|
7
|
-
*/
|
|
8
|
-
import * as p from "../../cli/clack.js";
|
|
9
|
-
import { prompt } from "../prompt.js";
|
|
10
|
-
import { describeSemanticSearchAssets, isRemoteEmbeddingConfig } from "../semantic-assets.js";
|
|
11
|
-
export async function stepSemanticSearch(
|
|
12
|
-
// Owner ruling 9 (R-039): the runtime default is "off" (a bare/headless
|
|
13
|
-
// install must never silently pull the ~130 MB model), but the interactive
|
|
14
|
-
// wizard pre-selects semantic search ON — a human is present to read the
|
|
15
|
-
// warning below and decide. `_current` is intentionally unused for the
|
|
16
|
-
// enable/disable pre-selection below: it must NOT track
|
|
17
|
-
// `semanticSearchMode`, or this pre-selection would silently flip to off
|
|
18
|
-
// along with the runtime default. Kept in the signature for call-site
|
|
19
|
-
// stability (callers pass the in-progress setup config positionally).
|
|
20
|
-
_current, embedding) {
|
|
21
|
-
// Show the warning (asset sizes; "no local model download" when a remote
|
|
22
|
-
// embedding endpoint is configured) BEFORE the prompt so the pre-checked
|
|
23
|
-
// default is an informed choice, not a surprise.
|
|
24
|
-
p.note(describeSemanticSearchAssets(embedding).join("\n"), "Semantic Search Assets");
|
|
25
|
-
const enabled = await prompt(() => p.confirm({
|
|
26
|
-
message: "Enable semantic search?",
|
|
27
|
-
initialValue: true,
|
|
28
|
-
}));
|
|
29
|
-
if (!enabled) {
|
|
30
|
-
return { mode: "off", prepareAssets: false };
|
|
31
|
-
}
|
|
32
|
-
const prepareAssets = await prompt(() => p.confirm({
|
|
33
|
-
message: isRemoteEmbeddingConfig(embedding)
|
|
34
|
-
? "Check the embedding endpoint and verify semantic search now?"
|
|
35
|
-
: "Download and verify semantic-search assets now?",
|
|
36
|
-
initialValue: true,
|
|
37
|
-
}));
|
|
38
|
-
return { mode: "auto", prepareAssets };
|
|
39
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
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
|
-
import { createHash } from "node:crypto";
|
|
5
|
-
import fs from "node:fs";
|
|
6
|
-
import path from "node:path";
|
|
7
|
-
import { isWithin, resolveStashDir, safeRealpath, toPosix } from "../../core/common.js";
|
|
8
|
-
const PROJECT_CONFIG_RELATIVE_PATH = path.join(".akm", "config.json");
|
|
9
|
-
export function getCurrentWorkflowScopeKey() {
|
|
10
|
-
const anchor = resolveWorkflowScopeAnchor(process.cwd());
|
|
11
|
-
const normalized = normalizeScopePath(anchor);
|
|
12
|
-
const digest = createHash("sha256").update(normalized).digest("hex");
|
|
13
|
-
return `dir:v1:${digest}`;
|
|
14
|
-
}
|
|
15
|
-
export function resolveWorkflowScopeAnchor(startDir) {
|
|
16
|
-
const cwd = safeRealpath(startDir);
|
|
17
|
-
const projectRoot = findNearestProjectConfigRoot(cwd);
|
|
18
|
-
if (projectRoot)
|
|
19
|
-
return projectRoot;
|
|
20
|
-
const gitRoot = findNearestGitRoot(cwd);
|
|
21
|
-
if (gitRoot)
|
|
22
|
-
return gitRoot;
|
|
23
|
-
try {
|
|
24
|
-
const stashDir = safeRealpath(resolveStashDir());
|
|
25
|
-
if (isWithin(cwd, stashDir))
|
|
26
|
-
return stashDir;
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
// Ignore stash resolution failures and fall back to cwd.
|
|
30
|
-
}
|
|
31
|
-
return cwd;
|
|
32
|
-
}
|
|
33
|
-
function findNearestProjectConfigRoot(startDir) {
|
|
34
|
-
let currentDir = startDir;
|
|
35
|
-
while (true) {
|
|
36
|
-
const configPath = path.join(currentDir, PROJECT_CONFIG_RELATIVE_PATH);
|
|
37
|
-
if (isFile(configPath)) {
|
|
38
|
-
return safeRealpath(currentDir);
|
|
39
|
-
}
|
|
40
|
-
const parentDir = path.dirname(currentDir);
|
|
41
|
-
if (parentDir === currentDir)
|
|
42
|
-
return null;
|
|
43
|
-
currentDir = parentDir;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function findNearestGitRoot(startDir) {
|
|
47
|
-
let currentDir = startDir;
|
|
48
|
-
while (true) {
|
|
49
|
-
const gitPath = path.join(currentDir, ".git");
|
|
50
|
-
if (exists(gitPath)) {
|
|
51
|
-
return safeRealpath(currentDir);
|
|
52
|
-
}
|
|
53
|
-
const parentDir = path.dirname(currentDir);
|
|
54
|
-
if (parentDir === currentDir)
|
|
55
|
-
return null;
|
|
56
|
-
currentDir = parentDir;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function exists(candidate) {
|
|
60
|
-
try {
|
|
61
|
-
fs.accessSync(candidate, fs.constants.F_OK);
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function isFile(candidate) {
|
|
69
|
-
try {
|
|
70
|
-
return fs.statSync(candidate).isFile();
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function normalizeScopePath(value) {
|
|
77
|
-
const posix = toPosix(value);
|
|
78
|
-
return process.platform === "win32" ? posix.toLowerCase() : posix;
|
|
79
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
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
|
-
import { canonicalJson } from "../ir/plan-hash.js";
|
|
5
|
-
/**
|
|
6
|
-
* Merge safe lowerer diagnostics in first-seen order.
|
|
7
|
-
*
|
|
8
|
-
* Notices are live execution metadata only: this helper is deliberately used
|
|
9
|
-
* by executor/report/output paths, never by result/evidence journal writers.
|
|
10
|
-
* Canonical JSON includes `details`, so two genuinely different structured
|
|
11
|
-
* diagnostics are not collapsed merely because their headline fields match.
|
|
12
|
-
*/
|
|
13
|
-
export function mergeLoweringNotices(...groups) {
|
|
14
|
-
const merged = new Map();
|
|
15
|
-
for (const group of groups) {
|
|
16
|
-
for (const notice of group ?? []) {
|
|
17
|
-
const key = canonicalJson(notice);
|
|
18
|
-
if (!merged.has(key))
|
|
19
|
-
merged.set(key, notice);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return merged.size > 0 ? [...merged.values()] : undefined;
|
|
23
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
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
|
-
/** Semantic checks for the Markdown workflow grammar (`parser.ts`). */
|
|
5
|
-
import fs from "node:fs";
|
|
6
|
-
import path from "node:path";
|
|
7
|
-
export class WorkflowSourceSemanticError extends Error {
|
|
8
|
-
code;
|
|
9
|
-
constructor(code, message) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.code = code;
|
|
12
|
-
this.name = "WorkflowSourceSemanticError";
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export function canonicalizeWorkflowWorkingDirectory(value, workspaceRoot) {
|
|
16
|
-
if (hasControlCharacter(value)) {
|
|
17
|
-
throw new WorkflowSourceSemanticError("working-directory-control-character", "working-directory may not contain NUL or control characters.");
|
|
18
|
-
}
|
|
19
|
-
if (value === "" || value.trim() === "") {
|
|
20
|
-
throw new WorkflowSourceSemanticError("working-directory-escape", "working-directory must be a non-empty relative contained path.");
|
|
21
|
-
}
|
|
22
|
-
const portable = value.replaceAll("\\", "/");
|
|
23
|
-
const segments = portable.split("/");
|
|
24
|
-
if (path.posix.isAbsolute(portable) ||
|
|
25
|
-
path.win32.isAbsolute(value) ||
|
|
26
|
-
portable.startsWith("~") ||
|
|
27
|
-
segments.some((segment) => segment === "" || segment === "..")) {
|
|
28
|
-
throw new WorkflowSourceSemanticError("working-directory-escape", "working-directory must be relative and contained.");
|
|
29
|
-
}
|
|
30
|
-
const withoutDots = segments.filter((segment) => segment !== ".");
|
|
31
|
-
const canonical = withoutDots.length === 0 ? "." : withoutDots.join("/");
|
|
32
|
-
if (workspaceRoot !== undefined)
|
|
33
|
-
verifyPhysicalContainment(workspaceRoot, canonical);
|
|
34
|
-
return canonical;
|
|
35
|
-
}
|
|
36
|
-
function hasControlCharacter(value) {
|
|
37
|
-
for (const character of value) {
|
|
38
|
-
const codePoint = character.codePointAt(0) ?? 0;
|
|
39
|
-
if (codePoint <= 0x1f || codePoint === 0x7f)
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
function verifyPhysicalContainment(workspaceRoot, relative) {
|
|
45
|
-
let root;
|
|
46
|
-
try {
|
|
47
|
-
root = fs.realpathSync(workspaceRoot);
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
throw new WorkflowSourceSemanticError("working-directory-unverifiable", "Workspace root cannot be physically verified.");
|
|
51
|
-
}
|
|
52
|
-
const candidate = path.resolve(root, ...relative.split("/"));
|
|
53
|
-
if (!contained(root, candidate)) {
|
|
54
|
-
throw new WorkflowSourceSemanticError("working-directory-escape", "working-directory escapes the workspace.");
|
|
55
|
-
}
|
|
56
|
-
let current = root;
|
|
57
|
-
for (const segment of relative === "." ? [] : relative.split("/")) {
|
|
58
|
-
current = path.join(current, segment);
|
|
59
|
-
try {
|
|
60
|
-
const entry = fs.lstatSync(current);
|
|
61
|
-
if (entry.isSymbolicLink()) {
|
|
62
|
-
let physical;
|
|
63
|
-
try {
|
|
64
|
-
physical = fs.realpathSync(current);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
throw new WorkflowSourceSemanticError("working-directory-unverifiable", "working-directory contains a dangling or unresolvable symlink.");
|
|
68
|
-
}
|
|
69
|
-
if (!contained(root, physical)) {
|
|
70
|
-
throw new WorkflowSourceSemanticError("working-directory-escape", "working-directory resolves through a symlink outside the workspace.");
|
|
71
|
-
}
|
|
72
|
-
let target;
|
|
73
|
-
try {
|
|
74
|
-
target = fs.statSync(current);
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
throw new WorkflowSourceSemanticError("working-directory-unverifiable", "working-directory symlink target cannot be physically verified.");
|
|
78
|
-
}
|
|
79
|
-
if (!target.isDirectory()) {
|
|
80
|
-
throw new WorkflowSourceSemanticError("working-directory-unverifiable", "working-directory must resolve through directories.");
|
|
81
|
-
}
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (!entry.isDirectory()) {
|
|
85
|
-
throw new WorkflowSourceSemanticError("working-directory-unverifiable", "working-directory must resolve through directories.");
|
|
86
|
-
}
|
|
87
|
-
const physical = fs.realpathSync(current);
|
|
88
|
-
if (!contained(root, physical)) {
|
|
89
|
-
throw new WorkflowSourceSemanticError("working-directory-escape", "working-directory resolves through a symlink outside the workspace.");
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch (cause) {
|
|
93
|
-
if (cause instanceof WorkflowSourceSemanticError)
|
|
94
|
-
throw cause;
|
|
95
|
-
const code = cause?.code;
|
|
96
|
-
if (code === "ENOENT") {
|
|
97
|
-
// A genuinely absent lexical component is allowed at source time; the
|
|
98
|
-
// runtime dispatch boundary revalidates containment when it appears.
|
|
99
|
-
// `lstat` distinguishes this from a dangling symlink, which fails
|
|
100
|
-
// closed above even before its target can appear.
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
throw new WorkflowSourceSemanticError("working-directory-unverifiable", "working-directory cannot be physically verified.");
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function contained(root, candidate) {
|
|
108
|
-
const relative = path.relative(root, candidate);
|
|
109
|
-
return relative === "" || (!relative.startsWith(`..${path.sep}`) && relative !== ".." && !path.isAbsolute(relative));
|
|
110
|
-
}
|