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
|
@@ -262,49 +262,17 @@ export function shapeSearchOutput(result, detail, shape = "human") {
|
|
|
262
262
|
...(result.tip ? { tip: result.tip } : {}),
|
|
263
263
|
};
|
|
264
264
|
}
|
|
265
|
-
export function shapeRegistrySearchOutput(result, detail) {
|
|
266
|
-
const hits = Array.isArray(result.hits) ? result.hits : [];
|
|
267
|
-
const assetHits = Array.isArray(result.assetHits) ? result.assetHits : [];
|
|
268
|
-
// Shape stash hits as registry type
|
|
269
|
-
const shapedKitHits = hits.map((hit) => shapeSearchHit({ ...hit, type: "registry" }, detail));
|
|
270
|
-
// Shape asset hits by detail level
|
|
271
|
-
const shapedAssetHits = assetHits.map((hit) => shapeAssetHit(hit, detail));
|
|
272
|
-
const shaped = {
|
|
273
|
-
hits: shapedKitHits,
|
|
274
|
-
...(shapedAssetHits.length > 0 ? { assetHits: shapedAssetHits } : {}),
|
|
275
|
-
...(Array.isArray(result.warnings) && result.warnings.length > 0 ? { warnings: result.warnings } : {}),
|
|
276
|
-
};
|
|
277
|
-
if (detail === "full") {
|
|
278
|
-
shaped.query = result.query;
|
|
279
|
-
}
|
|
280
|
-
return shaped;
|
|
281
|
-
}
|
|
282
|
-
export function shapeAssetHit(hit, detail) {
|
|
283
|
-
if (detail === "brief")
|
|
284
|
-
return pickFields(hit, ["assetName", "assetType", "action", "estimatedTokens"]);
|
|
285
|
-
if (detail === "normal") {
|
|
286
|
-
return capDescription(pickFields(hit, ["assetName", "assetType", "description", "stash", "action", "estimatedTokens"]), NORMAL_DESCRIPTION_LIMIT);
|
|
287
|
-
}
|
|
288
|
-
return hit;
|
|
289
|
-
}
|
|
290
265
|
export function shapeSearchHit(hit, detail) {
|
|
291
266
|
if (hit.type === "registry") {
|
|
292
267
|
if (detail === "brief") {
|
|
293
|
-
//
|
|
294
|
-
//
|
|
295
|
-
|
|
296
|
-
// Normalise: if only title exists, expose it as `name` for consistency
|
|
297
|
-
if (out.title && !out.name)
|
|
298
|
-
out.name = out.title;
|
|
299
|
-
return out;
|
|
268
|
+
// Always project installRef and score so callers can use the result
|
|
269
|
+
// without --detail full (QA #28).
|
|
270
|
+
return pickFields(hit, ["name", "installRef", "score"]);
|
|
300
271
|
}
|
|
301
272
|
if (detail === "normal") {
|
|
302
|
-
//
|
|
303
|
-
//
|
|
304
|
-
|
|
305
|
-
if (out.title && !out.name)
|
|
306
|
-
out.name = out.title;
|
|
307
|
-
return out;
|
|
273
|
+
// Renderers project optional hit-level `warnings` so providers can
|
|
274
|
+
// surface non-fatal issues.
|
|
275
|
+
return capDescription(pickFields(hit, ["name", "description", "action", "installRef", "score", "warnings"]), NORMAL_DESCRIPTION_LIMIT);
|
|
308
276
|
}
|
|
309
277
|
return hit;
|
|
310
278
|
}
|
|
@@ -317,9 +285,19 @@ export function shapeSearchHit(hit, detail) {
|
|
|
317
285
|
if (detail === "normal") {
|
|
318
286
|
// `warnings` is projected at `normal` so non-fatal hit-level issues are
|
|
319
287
|
// visible without forcing callers up to `--detail full`. Optional
|
|
320
|
-
// `quality`
|
|
288
|
+
// `quality` is also surfaced when present so callers
|
|
321
289
|
// can see why a `proposed` entry showed up under `--include-proposed`.
|
|
322
|
-
const shaped = capDescription(pickFields(hit, [
|
|
290
|
+
const shaped = capDescription(pickFields(hit, [
|
|
291
|
+
"type",
|
|
292
|
+
"name",
|
|
293
|
+
"ref",
|
|
294
|
+
"description",
|
|
295
|
+
"action",
|
|
296
|
+
"score",
|
|
297
|
+
"estimatedTokens",
|
|
298
|
+
"warnings",
|
|
299
|
+
"quality",
|
|
300
|
+
]), NORMAL_DESCRIPTION_LIMIT);
|
|
323
301
|
if (Array.isArray(hit.keys) && hit.keys.length > 0)
|
|
324
302
|
shaped.keys = hit.keys;
|
|
325
303
|
return shaped;
|
|
@@ -376,8 +354,6 @@ export function shapeShowOutput(result, detail, shape = "human") {
|
|
|
376
354
|
"run",
|
|
377
355
|
"setup",
|
|
378
356
|
"cwd",
|
|
379
|
-
"activeRun",
|
|
380
|
-
"toolPolicy",
|
|
381
357
|
"modelHint",
|
|
382
358
|
"agent",
|
|
383
359
|
"parameters",
|
|
@@ -408,7 +384,6 @@ export function shapeShowOutput(result, detail, shape = "human") {
|
|
|
408
384
|
"content",
|
|
409
385
|
"template",
|
|
410
386
|
"prompt",
|
|
411
|
-
"toolPolicy",
|
|
412
387
|
"modelHint",
|
|
413
388
|
"agent",
|
|
414
389
|
"parameters",
|
|
@@ -418,7 +393,6 @@ export function shapeShowOutput(result, detail, shape = "human") {
|
|
|
418
393
|
"run",
|
|
419
394
|
"setup",
|
|
420
395
|
"cwd",
|
|
421
|
-
"activeRun",
|
|
422
396
|
"keys",
|
|
423
397
|
"links",
|
|
424
398
|
"evidence",
|
package/dist/output/shapes.js
CHANGED
|
@@ -5,7 +5,6 @@ import { curateShapes } from "./shapes/curate.js";
|
|
|
5
5
|
import { envListShapes } from "./shapes/env-list.js";
|
|
6
6
|
import { eventsShapes } from "./shapes/events.js";
|
|
7
7
|
import { migrateShapes } from "./shapes/migrate.js";
|
|
8
|
-
import { modelsListShapes } from "./shapes/models-list.js";
|
|
9
8
|
import { passthroughShapes } from "./shapes/passthrough.js";
|
|
10
9
|
import { proposalAcceptShapes } from "./shapes/proposal/accept.js";
|
|
11
10
|
import { proposalDiffShapes } from "./shapes/proposal/diff.js";
|
|
@@ -15,7 +14,6 @@ import { proposalRejectShapes } from "./shapes/proposal/reject.js";
|
|
|
15
14
|
import { proposalReopenShapes } from "./shapes/proposal/reopen.js";
|
|
16
15
|
import { proposalShowShapes } from "./shapes/proposal/show.js";
|
|
17
16
|
import { getOutputShapeHandler, registerOutputShapes } from "./shapes/registry.js";
|
|
18
|
-
import { registrySearchShapes } from "./shapes/registry-search.js";
|
|
19
17
|
import { searchShapes } from "./shapes/search.js";
|
|
20
18
|
import { secretListShapes } from "./shapes/secret-list.js";
|
|
21
19
|
import { showShapes } from "./shapes/show.js";
|
|
@@ -28,7 +26,6 @@ import { showShapes } from "./shapes/show.js";
|
|
|
28
26
|
const BUILT_IN_OUTPUT_SHAPES = [
|
|
29
27
|
...searchShapes,
|
|
30
28
|
...curateShapes,
|
|
31
|
-
...registrySearchShapes,
|
|
32
29
|
...showShapes,
|
|
33
30
|
...eventsShapes,
|
|
34
31
|
...proposalListShapes,
|
|
@@ -41,7 +38,6 @@ const BUILT_IN_OUTPUT_SHAPES = [
|
|
|
41
38
|
...envListShapes,
|
|
42
39
|
...secretListShapes,
|
|
43
40
|
...migrateShapes,
|
|
44
|
-
...modelsListShapes,
|
|
45
41
|
// Passthrough commands are registered last so an explicit dedicated handler
|
|
46
42
|
// above always wins over the identity-stamp fallback for the same name.
|
|
47
43
|
...passthroughShapes,
|
|
@@ -66,7 +62,6 @@ registerOutputShapes(BUILT_IN_OUTPUT_SHAPES);
|
|
|
66
62
|
const LIST_RESULT_COLLECTION_KEYS = {
|
|
67
63
|
search: "hits",
|
|
68
64
|
curate: "items",
|
|
69
|
-
"registry-search": "hits",
|
|
70
65
|
"proposal-list": "proposals",
|
|
71
66
|
list: "sources", // `akm bundle list`
|
|
72
67
|
"env-list": "envs",
|
|
@@ -76,7 +71,6 @@ const LIST_RESULT_COLLECTION_KEYS = {
|
|
|
76
71
|
"task-history": "rows",
|
|
77
72
|
"log-list": "events", // `akm log list`
|
|
78
73
|
"config-diff": "rows", // `akm config diff`
|
|
79
|
-
"models-list": "rows", // `akm models list`
|
|
80
74
|
};
|
|
81
75
|
function withResultsAlias(command, shaped) {
|
|
82
76
|
const key = LIST_RESULT_COLLECTION_KEYS[command];
|
|
@@ -99,7 +93,7 @@ export function shapeForCommand(command, result, detail, shape = "human") {
|
|
|
99
93
|
if (handler) {
|
|
100
94
|
return withResultsAlias(command, handler(result, detail, shape));
|
|
101
95
|
}
|
|
102
|
-
//
|
|
96
|
+
// Output-shape registry is exhaustive: no silent JSON.stringify
|
|
103
97
|
// fallback. A missing case here is a registration bug — fail loudly so
|
|
104
98
|
// the caller (or its tests) sees the missing command name.
|
|
105
99
|
throw new Error(`output shape not registered for command: ${command}`);
|
|
@@ -10,11 +10,10 @@
|
|
|
10
10
|
* Split out of `helpers.ts` (formerly 1418 lines / 59 fns) as its own
|
|
11
11
|
* sibling module: unlike `show`/`workflow`/`proposal` (each a stateful,
|
|
12
12
|
* multi-branch renderer with its own module), these are flat
|
|
13
|
-
* field-extraction formatters with no shared state
|
|
14
|
-
* `formatRegistrySearchPlain` delegating to `formatSearchPlain` in this
|
|
15
|
-
* same file.
|
|
13
|
+
* field-extraction formatters with no shared state.
|
|
16
14
|
*/
|
|
17
15
|
import { formatRegistryUrl } from "../../core/registry-url.js";
|
|
16
|
+
import { renderTargetsTable } from "./targets-table.js";
|
|
18
17
|
/** Render the current `InfoResponse` shape. */
|
|
19
18
|
export function formatInfoPlain(r) {
|
|
20
19
|
const lines = [];
|
|
@@ -69,6 +68,8 @@ export function formatInfoPlain(r) {
|
|
|
69
68
|
lines.push(` [${String(source.type ?? "?")}] ${String(label)}${disabled}`);
|
|
70
69
|
}
|
|
71
70
|
}
|
|
71
|
+
if (Array.isArray(r.connectionsAndHarnesses))
|
|
72
|
+
lines.push(...renderTargetsTable(r.connectionsAndHarnesses));
|
|
72
73
|
const indexStats = r.indexStats;
|
|
73
74
|
if (indexStats) {
|
|
74
75
|
lines.push("indexStats:");
|
|
@@ -169,15 +170,11 @@ export function formatRegistryRemovePlain(r) {
|
|
|
169
170
|
const url = entry ? (typeof entry.url === "string" ? formatRegistryUrl(entry.url) : String(entry.name ?? "?")) : "?";
|
|
170
171
|
return `Removed registry ${url}`;
|
|
171
172
|
}
|
|
172
|
-
export function formatRegistrySearchPlain(r, detail) {
|
|
173
|
-
// Reuse the same renderer as `search` — both share `hits` / `registryHits`.
|
|
174
|
-
return formatSearchPlain(r, detail);
|
|
175
|
-
}
|
|
176
173
|
export function formatEnvListPlain(r) {
|
|
177
174
|
// Multi-env listing: { envs: [{ ref, path, keys }, ...] }
|
|
178
175
|
const envs = Array.isArray(r.envs) ? r.envs : [];
|
|
179
176
|
if (envs.length === 0) {
|
|
180
|
-
return "No env files. Create one with `akm env create
|
|
177
|
+
return "No env files. Create one with `akm env create env/<name>`, then edit the .env file directly.";
|
|
181
178
|
}
|
|
182
179
|
const lines = [];
|
|
183
180
|
for (const v of envs) {
|
|
@@ -272,14 +269,16 @@ export function formatSearchPlain(r, detail) {
|
|
|
272
269
|
lines.push(` size: ${String(hit.size)}`);
|
|
273
270
|
if (hit.action)
|
|
274
271
|
lines.push(` action: ${String(hit.action)}`);
|
|
272
|
+
if (hit.installRef)
|
|
273
|
+
lines.push(` installRef: ${String(hit.installRef)}`);
|
|
275
274
|
if (hit.run)
|
|
276
275
|
lines.push(` run: ${String(hit.run)}`);
|
|
277
276
|
if (Array.isArray(hit.tags) && hit.tags.length > 0)
|
|
278
277
|
lines.push(` tags: ${hit.tags.join(", ")}`);
|
|
279
|
-
// Optional
|
|
278
|
+
// Optional quality marker (e.g. "curated" / "proposed").
|
|
280
279
|
if (typeof hit.quality === "string" && hit.quality)
|
|
281
280
|
lines.push(` quality: ${hit.quality}`);
|
|
282
|
-
// Surface optional hit-level warnings
|
|
281
|
+
// Surface optional hit-level warnings.
|
|
283
282
|
if (Array.isArray(hit.warnings) && hit.warnings.length > 0) {
|
|
284
283
|
lines.push(` warnings: ${hit.warnings.join("; ")}`);
|
|
285
284
|
}
|
|
@@ -457,34 +456,27 @@ export function formatListPlain(r) {
|
|
|
457
456
|
lines.push("To search: akm search '<query>' | To view an asset: akm show <ref>");
|
|
458
457
|
return lines.join("\n");
|
|
459
458
|
}
|
|
460
|
-
/** Render `akm models
|
|
461
|
-
export function
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
return width;
|
|
482
|
-
});
|
|
483
|
-
const renderRow = (cols) => cols
|
|
484
|
-
.map((cell, i) => cell.padEnd(widths[i] ?? cell.length))
|
|
485
|
-
.join(" ")
|
|
486
|
-
.trimEnd();
|
|
487
|
-
return [renderRow(headers), ...cells.map(renderRow)].join("\n");
|
|
459
|
+
/** Render `akm models`'s `{ connection, aliases, available }`: each alias's model, then the models the endpoint lists. */
|
|
460
|
+
export function formatModelsPlain(r) {
|
|
461
|
+
const aliases = r.aliases && typeof r.aliases === "object" ? Object.entries(r.aliases) : [];
|
|
462
|
+
const available = Array.isArray(r.available) ? r.available.map(String) : [];
|
|
463
|
+
const title = `Connection ${String(r.connection ?? "?")}`;
|
|
464
|
+
if (aliases.length === 0 && available.length === 0) {
|
|
465
|
+
return `${title} has no model aliases. Set one with \`akm models set <alias> <model>\`.`;
|
|
466
|
+
}
|
|
467
|
+
const lines = [title];
|
|
468
|
+
if (aliases.length > 0) {
|
|
469
|
+
const width = Math.max("ALIAS".length, ...aliases.map(([alias]) => alias.length));
|
|
470
|
+
lines.push(`${"ALIAS".padEnd(width)} MODEL`, ...aliases.map(([alias, model]) => `${alias.padEnd(width)} ${String(model)}`));
|
|
471
|
+
}
|
|
472
|
+
if (available.length > 0)
|
|
473
|
+
lines.push(...(aliases.length > 0 ? [""] : []), "AVAILABLE", ...available.map((model) => ` ${model}`));
|
|
474
|
+
return lines.join("\n");
|
|
475
|
+
}
|
|
476
|
+
/** Render `akm models set`'s result. */
|
|
477
|
+
export function formatModelsSetPlain(r) {
|
|
478
|
+
const was = typeof r.previous === "string" ? ` (was ${r.previous})` : "";
|
|
479
|
+
return `${String(r.alias)} -> ${String(r.model)} on connection ${String(r.connection)}${was}`;
|
|
488
480
|
}
|
|
489
481
|
/** Render a single `SourceEntry` — `akm bundle show <name>`'s detail view of one `list` row. */
|
|
490
482
|
export function formatBundleShowPlain(r) {
|
|
@@ -580,14 +572,24 @@ export function formatBundleRenamePlain(r) {
|
|
|
580
572
|
const proposalRefs = Number(state.proposalRefs ?? 0);
|
|
581
573
|
const proposalTargets = Number(state.proposalTargets ?? 0);
|
|
582
574
|
const taskHistoryRefs = Number(state.taskHistoryRefs ?? 0);
|
|
575
|
+
const workflowRunRefs = Number(state.workflowRunRefs ?? 0);
|
|
576
|
+
const activeWorkflowRuns = Array.isArray(r.activeWorkflowRuns)
|
|
577
|
+
? r.activeWorkflowRuns
|
|
578
|
+
: [];
|
|
583
579
|
const entries = Number(index.entries ?? 0);
|
|
584
580
|
const contentRefs = Array.isArray(r.contentRefs) ? r.contentRefs : [];
|
|
585
581
|
const nativeSchedulerRows = Array.isArray(r.nativeSchedulerRows) ? r.nativeSchedulerRows : [];
|
|
586
582
|
const verb = applied ? "Renamed" : "Would rename";
|
|
587
583
|
const lines = [
|
|
588
584
|
`${verb} bundle "${oldId}" to "${newId}" (${entries} index entries, ${schedulerRefs} scheduler ref(s), ` +
|
|
589
|
-
`${proposalRefs + proposalTargets} proposal reference(s), ${taskHistoryRefs} task-history row(s)
|
|
585
|
+
`${proposalRefs + proposalTargets} proposal reference(s), ${taskHistoryRefs} task-history row(s), ` +
|
|
586
|
+
`${workflowRunRefs} workflow run(s)).`,
|
|
590
587
|
];
|
|
588
|
+
if (activeWorkflowRuns.length > 0) {
|
|
589
|
+
lines.push("Active and blocked workflow runs keep the old bundle name in their frozen plan; continue them (`akm workflow run <id>`, after `akm workflow resume <id>` for a blocked one) or abandon them (`akm workflow abandon <id>`):");
|
|
590
|
+
for (const run of activeWorkflowRuns)
|
|
591
|
+
lines.push(` - ${run.id} (${run.workflowRef}, ${run.status})`);
|
|
592
|
+
}
|
|
591
593
|
if (!applied) {
|
|
592
594
|
lines.push("Re-run without --dry-run to apply. It also re-syncs native scheduler bindings under the new name.");
|
|
593
595
|
if (nativeSchedulerRows.length > 0) {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
import { flattenForText } from "../generic-render.js";
|
|
5
5
|
import { renderStatusEntries, summarizeCounts } from "./status-list.js";
|
|
6
|
+
import { renderTargetsTable } from "./targets-table.js";
|
|
6
7
|
const STATUS_GLYPH = { fail: "✗", warn: "⚠", unknown: "?", pass: "✓" };
|
|
7
8
|
const STATUS_RANK = { fail: 0, warn: 1, unknown: 2, pass: 3 };
|
|
8
9
|
/** Worst-first, for both the section summary and (via `STATUS_RANK`) row order. */
|
|
@@ -23,7 +24,12 @@ function checkStatusEntry(check, detail) {
|
|
|
23
24
|
// Evidence is diagnostic detail, not the headline signal — gated behind
|
|
24
25
|
// --detail the same way `formatSearchPlain`/`formatCuratePlain` gate
|
|
25
26
|
// their own verbose fields (full path/editHint/whyMatched, "why" reasoning).
|
|
26
|
-
|
|
27
|
+
// The `connections-and-harnesses` table is the exception: it is the check's answer, so it always shows.
|
|
28
|
+
detailLines: check.name === "connections-and-harnesses" && Array.isArray(check.evidence?.rows)
|
|
29
|
+
? renderTargetsTable(check.evidence.rows)
|
|
30
|
+
: detail === "brief"
|
|
31
|
+
? []
|
|
32
|
+
: evidenceLines(check.evidence),
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
35
|
/** Render one `hardChecks`/`advisories` section: a count summary header, then worst-first rows. */
|
|
@@ -56,7 +62,7 @@ export function formatHealthPlain(r, detail) {
|
|
|
56
62
|
lines.push("", ...renderCheckSection("hardChecks", hardChecks, detail));
|
|
57
63
|
lines.push("", ...renderCheckSection("advisories", advisories, detail));
|
|
58
64
|
if (detail === "brief" &&
|
|
59
|
-
[...hardChecks, ...advisories].some((c) => c.evidence && Object.keys(c.evidence).length > 0)) {
|
|
65
|
+
[...hardChecks, ...advisories].some((c) => c.name !== "connections-and-harnesses" && c.evidence && Object.keys(c.evidence).length > 0)) {
|
|
60
66
|
lines.push("", "(evidence omitted at --detail brief; re-run with --detail normal or --detail full to see it)");
|
|
61
67
|
}
|
|
62
68
|
// Everything else (metrics, improve, and the optional runs/windows/deltas/
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* No registry imports — no circular dependencies.
|
|
17
17
|
*/
|
|
18
|
-
export { formatAddPlain, formatBundleRenamePlain, formatBundleShowPlain, formatClonePlain, formatConfigPlain, formatCuratePlain, formatEnvCreatePlain, formatEnvExportPlain, formatEnvListPlain, formatEnvRemovePlain, formatEventLine, formatEventsPlain, formatFeedbackPlain, formatImportPlain, formatIndexPlain, formatInfoPlain, formatInitPlain, formatListPlain,
|
|
18
|
+
export { formatAddPlain, formatBundleRenamePlain, formatBundleShowPlain, formatClonePlain, formatConfigPlain, formatCuratePlain, formatEnvCreatePlain, formatEnvExportPlain, formatEnvListPlain, formatEnvRemovePlain, formatEventLine, formatEventsPlain, formatFeedbackPlain, formatImportPlain, formatIndexPlain, formatInfoPlain, formatInitPlain, formatListPlain, formatModelsPlain, formatModelsSetPlain, formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain, formatRememberPlain, formatRemovePlain, formatSearchPlain, formatSyncPlain, formatUpdatePlain, formatUpgradePlain, } from "./command-format.js";
|
|
19
19
|
export { formatHealthPlain } from "./health-format.js";
|
|
20
20
|
export { formatLintPlain } from "./lint-format.js";
|
|
21
21
|
export { formatGateDecisionSummary, formatProposalAcceptPlain, formatProposalDiffPlain, formatProposalDrainPlain, formatProposalListPlain, formatProposalProducerPlain, formatProposalRejectPlain, formatProposalReopenBatchPlain, formatProposalReopenPlain, formatProposalShowPlain, } from "./proposal-format.js";
|
|
@@ -18,13 +18,25 @@ export function formatMigratePlain(result) {
|
|
|
18
18
|
if (typeof plan.status !== "string")
|
|
19
19
|
return null;
|
|
20
20
|
const lines = [`${planGlyph(plan.status)} ${plan.status}`];
|
|
21
|
+
if (plan.configFile?.credentials?.length) {
|
|
22
|
+
lines.push(` credentials.json: ${plan.configFile.credentials.length} key(s) (${plan.configFile.credentials.join(", ")})`);
|
|
23
|
+
}
|
|
21
24
|
if (plan.taskFiles) {
|
|
22
25
|
const tasks = plan.taskFiles;
|
|
23
26
|
lines.push(` task files: ${tasks.changed} change, ${tasks.skipped} current, ${tasks.blocked} blocked`);
|
|
24
27
|
}
|
|
28
|
+
if (plan.assetEngineKeys) {
|
|
29
|
+
lines.push(` asset engine keys: ${plan.assetEngineKeys.changed} change, ${plan.assetEngineKeys.skipped} skipped`);
|
|
30
|
+
}
|
|
25
31
|
if (plan.blockers?.length) {
|
|
26
32
|
lines.push("", "blockers:", ...plan.blockers.map((blocker) => ` - ${blocker}`));
|
|
27
33
|
}
|
|
34
|
+
if (plan.configFile?.notes?.length) {
|
|
35
|
+
lines.push("", "config notes:", ...plan.configFile.notes.map((note) => ` - ${note}`));
|
|
36
|
+
}
|
|
37
|
+
if (plan.assetEngineKeys?.notes?.length) {
|
|
38
|
+
lines.push("", "engine name notes:", ...plan.assetEngineKeys.notes.map((note) => ` - ${note}`));
|
|
39
|
+
}
|
|
28
40
|
if (plan.backupPath) {
|
|
29
41
|
lines.push("", `backup: ${plan.backupPath}`);
|
|
30
42
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
import {
|
|
4
|
+
import { formatModelsPlain, formatModelsSetPlain } from "./helpers.js";
|
|
5
5
|
export const modelsFormatters = [
|
|
6
|
-
{ command: "models
|
|
6
|
+
{ command: "models", handler: (r) => formatModelsPlain(r) },
|
|
7
|
+
{ command: "models-set", handler: (r) => formatModelsSetPlain(r) },
|
|
7
8
|
];
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
// Output text formatters for `akm registry *` commands.
|
|
5
|
-
import { formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain
|
|
5
|
+
import { formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain } from "./helpers.js";
|
|
6
6
|
export const registryCommandFormatters = [
|
|
7
7
|
{ command: "registry-list", handler: (r) => formatRegistryListPlain(r) },
|
|
8
8
|
{ command: "registry-add", handler: (r) => formatRegistryAddPlain(r) },
|
|
9
9
|
{ command: "registry-remove", handler: (r) => formatRegistryRemovePlain(r) },
|
|
10
|
-
{ command: "registry-search", handler: (r, detail) => formatRegistrySearchPlain(r, detail) },
|
|
11
10
|
];
|
|
@@ -43,36 +43,24 @@ export function appendShowDirectives(lines, r) {
|
|
|
43
43
|
lines.push(` - If this asset does not contain what you need, run \`akm feedback '${assetRef ?? "<ref>"}' --negative\` and search for a different asset.`);
|
|
44
44
|
}
|
|
45
45
|
if (assetType === "skill" || assetType === "knowledge") {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
lines.push("");
|
|
54
|
-
lines.push(
|
|
46
|
+
// Show the APPLY directive. Branch on whether this
|
|
47
|
+
// skill primarily teaches CLI commands (shell output) vs YAML schema.
|
|
48
|
+
const preApplyLines = [...lines];
|
|
49
|
+
lines.push("");
|
|
50
|
+
lines.push("---");
|
|
51
|
+
if (isCommandOutputSkill(preApplyLines)) {
|
|
52
|
+
lines.push("APPLY (only if no workflow step is required for this task):");
|
|
53
|
+
lines.push(" 1. Identify the output file from README.md (typically commands.txt).");
|
|
54
|
+
lines.push(" 2. Write the exact command syntax from the code blocks above — replace every placeholder (`<name>`, `<value>`) with a real, concrete value from your task context. Do not write placeholder text.");
|
|
55
|
+
lines.push(" 3. Each command should be on a single line (no backslash line continuation unless the verifier expects it).");
|
|
56
|
+
lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if this reference did not contain the needed command syntax.`);
|
|
55
57
|
}
|
|
56
58
|
else {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
lines.push("");
|
|
61
|
-
lines.push("
|
|
62
|
-
if (isCommandOutputSkill(preApplyLines)) {
|
|
63
|
-
lines.push("APPLY (only if no workflow step is required for this task):");
|
|
64
|
-
lines.push(" 1. Identify the output file from README.md (typically commands.txt).");
|
|
65
|
-
lines.push(" 2. Write the exact command syntax from the code blocks above — replace every placeholder (`<name>`, `<value>`) with a real, concrete value from your task context. Do not write placeholder text.");
|
|
66
|
-
lines.push(" 3. Each command should be on a single line (no backslash line continuation unless the verifier expects it).");
|
|
67
|
-
lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if this reference did not contain the needed command syntax.`);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
lines.push("APPLY (only if no workflow step is required for this task):");
|
|
71
|
-
lines.push(" 1. Identify the target file from README.md — write or edit it. If the file does not yet exist, CREATE it with the full structure from this schema.");
|
|
72
|
-
lines.push(" 2. Add/edit the fields shown above using the exact field names from this schema.");
|
|
73
|
-
lines.push(" 3. COPY the exact YAML structure and field names from the code blocks above — do not substitute synonyms or invent nesting. Replace every placeholder value with a real, concrete value from your task context. Do not leave any field as null, empty, or a placeholder.");
|
|
74
|
-
lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if the task fails after following this guidance.`);
|
|
75
|
-
}
|
|
59
|
+
lines.push("APPLY (only if no workflow step is required for this task):");
|
|
60
|
+
lines.push(" 1. Identify the target file from README.md — write or edit it. If the file does not yet exist, CREATE it with the full structure from this schema.");
|
|
61
|
+
lines.push(" 2. Add/edit the fields shown above using the exact field names from this schema.");
|
|
62
|
+
lines.push(" 3. COPY the exact YAML structure and field names from the code blocks above — do not substitute synonyms or invent nesting. Replace every placeholder value with a real, concrete value from your task context. Do not leave any field as null, empty, or a placeholder.");
|
|
63
|
+
lines.push(`Run \`akm feedback ${assetRef ? `'${assetRef}'` : "<ref>"} --positive\` after the task succeeds, or \`--negative\` if the task fails after following this guidance.`);
|
|
76
64
|
}
|
|
77
65
|
}
|
|
78
66
|
else if (assetType === "workflow") {
|
|
@@ -43,8 +43,6 @@ export function formatShowPlain(r, detail) {
|
|
|
43
43
|
}
|
|
44
44
|
if (r.modelHint != null)
|
|
45
45
|
lines.push(`modelHint: ${String(r.modelHint)}`);
|
|
46
|
-
if (r.toolPolicy != null)
|
|
47
|
-
lines.push(`toolPolicy: ${JSON.stringify(r.toolPolicy)}`);
|
|
48
46
|
if (r.run)
|
|
49
47
|
lines.push(`run: ${String(r.run)}`);
|
|
50
48
|
if (r.setup)
|
|
@@ -0,0 +1,70 @@
|
|
|
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 text = (value) => (value === undefined || value === null ? "-" : String(value));
|
|
5
|
+
const yesNo = (value) => (value === undefined ? "-" : value ? "yes" : "no");
|
|
6
|
+
/** Left-aligned columns, two spaces apart, the header first. */
|
|
7
|
+
function table(headers, cells) {
|
|
8
|
+
const widths = headers.map((header, i) => Math.max(header.length, ...cells.map((row) => row[i]?.length ?? 0)));
|
|
9
|
+
const line = (row) => row
|
|
10
|
+
.map((cell, i) => cell.padEnd(widths[i] ?? cell.length))
|
|
11
|
+
.join(" ")
|
|
12
|
+
.trimEnd();
|
|
13
|
+
return [line(headers), ...cells.map(line)];
|
|
14
|
+
}
|
|
15
|
+
/** The reachability column: answered, or why not. */
|
|
16
|
+
function reachable(row) {
|
|
17
|
+
return row.reachable === true ? "yes" : `no${row.error ? ` (${text(row.error)})` : ""}`;
|
|
18
|
+
}
|
|
19
|
+
/** The work column: where it runs, or that it does not. */
|
|
20
|
+
function runsOn(row) {
|
|
21
|
+
if (row.kind === null || row.kind === undefined)
|
|
22
|
+
return "off";
|
|
23
|
+
return row.kind === "local" ? "built-in embedder" : `${text(row.kind)} ${text(row.target)}`;
|
|
24
|
+
}
|
|
25
|
+
/** `triage judgment → connection second (qwen3-8b)`: a part of the work that runs elsewhere, and where. */
|
|
26
|
+
function override(entry) {
|
|
27
|
+
const where = entry.target === null || entry.target === undefined ? "off" : `${text(entry.kind)} ${text(entry.target)}`;
|
|
28
|
+
return `${text(entry.name)} → ${where}${entry.model ? ` (${text(entry.model)})` : ""}`;
|
|
29
|
+
}
|
|
30
|
+
/** What to look at in a work row: what resolves elsewhere, or what is wrong. */
|
|
31
|
+
function notes(row) {
|
|
32
|
+
const elsewhere = Array.isArray(row.overrides) ? row.overrides.map(override) : [];
|
|
33
|
+
return [...elsewhere, ...(row.problem ? [text(row.problem)] : [])].join("; ");
|
|
34
|
+
}
|
|
35
|
+
const CONNECTION_COLUMNS = [
|
|
36
|
+
{ header: "NAME", cell: (row) => text(row.name) },
|
|
37
|
+
{ header: "DEFAULT", cell: (row) => (row.default ? "yes" : "") },
|
|
38
|
+
{ header: "ENDPOINT", cell: (row) => text(row.endpoint) },
|
|
39
|
+
{ header: "KEY", cell: (row) => text(row.key) },
|
|
40
|
+
{ header: "REACHABLE", cell: reachable, field: "reachable" },
|
|
41
|
+
];
|
|
42
|
+
const HARNESS_COLUMNS = [
|
|
43
|
+
{ header: "NAME", cell: (row) => text(row.name) },
|
|
44
|
+
{ header: "DEFAULT", cell: (row) => (row.default ? "yes" : "") },
|
|
45
|
+
{ header: "PLATFORM", cell: (row) => text(row.platform) },
|
|
46
|
+
{ header: "INSTALLED", cell: (row) => yesNo(row.installed) },
|
|
47
|
+
{ header: "MODEL CALLS", cell: (row) => (row.modelWork === false ? "off" : ""), field: "modelWork" },
|
|
48
|
+
{ header: "VERSION", cell: (row) => text(row.version), field: "version" },
|
|
49
|
+
];
|
|
50
|
+
const WORK_COLUMNS = [
|
|
51
|
+
{ header: "WORK", cell: (row) => text(row.process) },
|
|
52
|
+
{ header: "RUNS ON", cell: runsOn },
|
|
53
|
+
{ header: "MODEL", cell: (row) => text(row.model) },
|
|
54
|
+
{ header: "NOTES", cell: notes },
|
|
55
|
+
];
|
|
56
|
+
function section(title, columns, rows) {
|
|
57
|
+
if (rows.length === 0)
|
|
58
|
+
return [];
|
|
59
|
+
const shown = columns.filter((column) => column.field === undefined || rows.some((row) => row[column.field] !== undefined));
|
|
60
|
+
const body = table(shown.map((column) => column.header), rows.map((row) => shown.map((column) => column.cell(row))));
|
|
61
|
+
return [`${title}:`, ...body.map((line) => ` ${line}`)];
|
|
62
|
+
}
|
|
63
|
+
export function renderTargetsTable(rows) {
|
|
64
|
+
const of = (type) => rows.filter((row) => row?.type === type);
|
|
65
|
+
return [
|
|
66
|
+
...section("connections", CONNECTION_COLUMNS, of("connection")),
|
|
67
|
+
...section("harnesses", HARNESS_COLUMNS, of("harness")),
|
|
68
|
+
...section("work", WORK_COLUMNS, of("process")),
|
|
69
|
+
];
|
|
70
|
+
}
|