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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* `finalizeImproveResult` persists on a live run (`improve-usage-report.ts`),
|
|
8
8
|
* so the command and the end-of-run stderr table stay byte-identical in
|
|
9
9
|
* structure. A row with no persisted `usageReport` degrades rather than
|
|
10
|
-
* errors
|
|
10
|
+
* errors (a reader must tolerate data older releases wrote):
|
|
11
11
|
* its cross-tab is recomputed from the run's own `llm_usage` events and a
|
|
12
12
|
* `notes` entry explains why — either the row predates #944, or (per
|
|
13
13
|
* `recordTerminatedImproveRun` in improve-result-file.ts) the run was
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
import consolidate from "../../assets/improve-strategies/consolidate.json" with { type: "json" };
|
|
5
5
|
import defaultStrategy from "../../assets/improve-strategies/default.json" with { type: "json" };
|
|
6
6
|
import { conceptIdFromTypeName, parseRefInput } from "../../core/asset/resolve-ref.js";
|
|
7
|
+
import { ambiguousDefaultAdvice, } from "../../core/config/config.js";
|
|
7
8
|
import { ImproveProfileConfigSchema } from "../../core/config/config-schema.js";
|
|
8
9
|
import { deepMergeConfig } from "../../core/config/deep-merge.js";
|
|
9
10
|
import { BUILTIN_IMPROVE_STRATEGY_NAMES, IMPROVE_ENGINE_PROCESSES, IMPROVE_PROCESS_NAMES, REMOVED_IMPROVE_STRATEGY_NAMES, } from "../../core/config/engine-semantics.js";
|
|
11
|
+
import { SHIPPED_ALIAS } from "../../core/config/model-aliases.js";
|
|
10
12
|
import { ConfigError } from "../../core/errors.js";
|
|
11
|
-
import { describeLlmCredentialAvailability, } from "../../integrations/agent/engine-resolution.js";
|
|
12
|
-
import { runnerLlmConnection } from "../../integrations/agent/runner.js";
|
|
13
13
|
import { applyAutonomyGate } from "./autonomy-gate.js";
|
|
14
14
|
import { resolveImproveExecution } from "./execution.js";
|
|
15
15
|
import { stripBundle } from "./ledger.js";
|
|
@@ -70,7 +70,7 @@ if (BUILTIN_IMPROVE_STRATEGY_NAMES.some((name) => !(name in BUILTIN_STRATEGIES))
|
|
|
70
70
|
throw new Error("Built-in improve strategy names are out of sync with their assets");
|
|
71
71
|
}
|
|
72
72
|
export function resolveImproveStrategy(name, config) {
|
|
73
|
-
const selectedName = name ?? config.
|
|
73
|
+
const selectedName = name ?? config.improve?.strategy ?? "default";
|
|
74
74
|
const userStrategies = config.improve?.strategies ?? {};
|
|
75
75
|
// graph-refresh named a specific, common retirement — refuse it
|
|
76
76
|
// unconditionally, even when `improve.strategies["graph-refresh"]` still
|
|
@@ -111,16 +111,15 @@ export function resolveImproveStrategy(name, config) {
|
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
113
113
|
* The processes that make their own model calls, so the plan resolves a runner
|
|
114
|
-
* for each: every
|
|
114
|
+
* for each: every process that makes a model call but triage, whose connection or harness is its judgment's.
|
|
115
115
|
*/
|
|
116
116
|
export const MODEL_CALLING_PROCESSES = new Set(IMPROVE_ENGINE_PROCESSES.filter((name) => name !== "triage"));
|
|
117
117
|
/**
|
|
118
118
|
* Project a resolved improve plan into one routing row per
|
|
119
119
|
* {@link IMPROVE_PROCESS_NAMES} name, plus a `"triage.judgment"`
|
|
120
|
-
* pseudo-row when the strategy configures a judgment
|
|
120
|
+
* pseudo-row when the strategy configures a judgment connection or harness. Pure — no I/O,
|
|
121
121
|
* no re-resolution. Shared by `improve --dry-run`'s `plan.processes` (#947)
|
|
122
|
-
* and `akm health`'s post-run reporting (#944)
|
|
123
|
-
* `active-improve-strategy` check keeps its existing `engines` shape.
|
|
122
|
+
* and `akm health`'s post-run reporting (#944).
|
|
124
123
|
*/
|
|
125
124
|
export function projectResolvedProcessRouting(plan) {
|
|
126
125
|
const unavailableByProcess = new Map(plan.engineUnavailable.map((item) => [item.process, item]));
|
|
@@ -133,20 +132,11 @@ export function projectResolvedProcessRouting(plan) {
|
|
|
133
132
|
enabled: process.enabled,
|
|
134
133
|
...(process.runner
|
|
135
134
|
? {
|
|
136
|
-
engine: process.runner.
|
|
137
|
-
model:
|
|
135
|
+
engine: process.runner.name,
|
|
136
|
+
...(process.runner.model !== undefined ? { model: process.runner.model } : {}),
|
|
138
137
|
engineKind: process.runner.kind,
|
|
139
138
|
}
|
|
140
|
-
:
|
|
141
|
-
// runner, but its structurally resolved engine/model is still worth
|
|
142
|
-
// showing in the routing table (dry-run preview, health probe).
|
|
143
|
-
unavailable?.engine
|
|
144
|
-
? {
|
|
145
|
-
engine: unavailable.engine,
|
|
146
|
-
...(unavailable.model ? { model: unavailable.model } : {}),
|
|
147
|
-
engineKind: "llm",
|
|
148
|
-
}
|
|
149
|
-
: {}),
|
|
139
|
+
: {}),
|
|
150
140
|
notices: process.notices ?? [],
|
|
151
141
|
...(unavailable ? { unavailable: { configKey: unavailable.configKey, reason: unavailable.reason } } : {}),
|
|
152
142
|
});
|
|
@@ -158,9 +148,9 @@ export function projectResolvedProcessRouting(plan) {
|
|
|
158
148
|
enabled: plan.triageJudgment !== null,
|
|
159
149
|
...(plan.triageJudgment
|
|
160
150
|
? {
|
|
161
|
-
engine: plan.triageJudgment.
|
|
151
|
+
engine: plan.triageJudgment.name,
|
|
162
152
|
engineKind: plan.triageJudgment.kind,
|
|
163
|
-
...(plan.triageJudgment.
|
|
153
|
+
...(plan.triageJudgment.model !== undefined ? { model: plan.triageJudgment.model } : {}),
|
|
164
154
|
}
|
|
165
155
|
: {}),
|
|
166
156
|
notices: plan.triageJudgmentNotices ?? [],
|
|
@@ -193,39 +183,9 @@ export function resolveImprovePlan(name, config, options = {}) {
|
|
|
193
183
|
const strategy = { name: selected.name, config: gatedStrategyConfig };
|
|
194
184
|
return { ...buildImprovePlan(strategy, config, options), autonomyGated: gated };
|
|
195
185
|
}
|
|
196
|
-
/** Describe why a resolved-but-uncredentialed runner belongs in `engineUnavailable` (#957). */
|
|
197
|
-
function credentialUnavailableReason(engineName, status) {
|
|
198
|
-
return `requires a credential that is not available in this process's environment (engine "${engineName}": ${status.reason})`;
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Whether the credential akm reads for `runner` is reachable in `env`: an LLM
|
|
202
|
-
* engine's own, or an SDK engine's LLM fallback. An agent CLI reads its own.
|
|
203
|
-
*/
|
|
204
|
-
function runnerCredentialStatus(runner, env) {
|
|
205
|
-
if (runner.kind === "llm")
|
|
206
|
-
return describeLlmCredentialAvailability(runner, env);
|
|
207
|
-
if (runner.kind === "sdk") {
|
|
208
|
-
return describeLlmCredentialAvailability({
|
|
209
|
-
credential: runner.fallbackCredential,
|
|
210
|
-
apiKeyFile: runner.fallbackApiKeyFile,
|
|
211
|
-
apiKeySecretRef: runner.fallbackApiKeySecretRef,
|
|
212
|
-
}, env);
|
|
213
|
-
}
|
|
214
|
-
return { available: true };
|
|
215
|
-
}
|
|
216
186
|
function buildImprovePlan(strategy, config, options) {
|
|
217
|
-
const env = options.env ?? process.env;
|
|
218
187
|
const processes = {};
|
|
219
188
|
const engineUnavailable = [];
|
|
220
|
-
// #957 round 2 — distinguishes "credential unavailable" (a working engine
|
|
221
|
-
// whose secret isn't in this environment) from "no engine selected at all"
|
|
222
|
-
// among the pushes below, so `allowAllDisabled` can bypass the ConfigError
|
|
223
|
-
// only for the former. The latter is the guard's original, pre-#957
|
|
224
|
-
// condition and must keep hard-aborting for every caller, including a
|
|
225
|
-
// health probe with `allowAllDisabled` set — a totally unconfigured
|
|
226
|
-
// install is not the credential-in-the-wrong-environment case this option
|
|
227
|
-
// exists for.
|
|
228
|
-
let anyEngineNotConfigured = false;
|
|
229
189
|
for (const processName of IMPROVE_PROCESS_NAMES) {
|
|
230
190
|
const sourceProcessConfig = strategy.config.processes?.[processName] ?? {};
|
|
231
191
|
const enabled = sourceProcessConfig.enabled === true;
|
|
@@ -238,49 +198,22 @@ function buildImprovePlan(strategy, config, options) {
|
|
|
238
198
|
// Validation itself is structural and always runs. Only its optional repair
|
|
239
199
|
// step needs a model, so disabling repair must not create an LLM preflight.
|
|
240
200
|
const skipsRepairEngine = processName === "validation" && options.repairValidationFailures === false;
|
|
241
|
-
// #957: a resolved-but-uncredentialed runner is folded into the same
|
|
242
|
-
// "no engine" branch below — set here so the shared push/continue block
|
|
243
|
-
// can tell the two apart in its reason text.
|
|
244
|
-
let credentialUnavailableMessage;
|
|
245
|
-
// #800/#957 round 3 — the structurally resolved engine/model/contextLength
|
|
246
|
-
// for the credential-unavailable case only, so a dry-run preview can read
|
|
247
|
-
// what resolution decided (e.g. the consolidation chunk-size estimate)
|
|
248
|
-
// without the runner ever carrying a credential-less connection forward.
|
|
249
|
-
let credentialUnavailableRouting;
|
|
250
201
|
if (!skipsRepairEngine) {
|
|
251
202
|
const resolved = resolveImproveExecution({
|
|
252
203
|
config,
|
|
253
|
-
profile: strategy.config,
|
|
254
|
-
process: sourceProcessConfig,
|
|
255
204
|
processName,
|
|
205
|
+
alias: SHIPPED_ALIAS.improve,
|
|
206
|
+
...(options.run ? { run: options.run } : {}),
|
|
256
207
|
});
|
|
257
208
|
runner = resolved?.runner ?? null;
|
|
258
209
|
notices = resolved?.notices ?? [];
|
|
259
|
-
if (runner) {
|
|
260
|
-
const credentialStatus = runnerCredentialStatus(runner, env);
|
|
261
|
-
if (!credentialStatus.available) {
|
|
262
|
-
const connection = runnerLlmConnection(runner);
|
|
263
|
-
credentialUnavailableMessage = credentialUnavailableReason(runner.engine, credentialStatus);
|
|
264
|
-
credentialUnavailableRouting = {
|
|
265
|
-
engine: runner.engine,
|
|
266
|
-
...(connection?.model !== undefined ? { model: connection.model } : {}),
|
|
267
|
-
...(connection?.contextLength !== undefined ? { contextLength: connection.contextLength } : {}),
|
|
268
|
-
};
|
|
269
|
-
runner = null;
|
|
270
|
-
notices = [];
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
210
|
}
|
|
274
211
|
if (!runner && !skipsRepairEngine) {
|
|
275
|
-
const configKey = `improve.
|
|
276
|
-
if (!credentialUnavailableMessage)
|
|
277
|
-
anyEngineNotConfigured = true;
|
|
212
|
+
const configKey = `improve.processes.${processName}.connection`;
|
|
278
213
|
engineUnavailable.push({
|
|
279
214
|
process: processName,
|
|
280
215
|
configKey,
|
|
281
|
-
reason:
|
|
282
|
-
`requires an engine that is not configured. Set defaults.llmEngine or ${configKey}`,
|
|
283
|
-
...credentialUnavailableRouting,
|
|
216
|
+
reason: `requires a connection or harness that is not configured. Run \`akm setup\`, or set ${configKey}`,
|
|
284
217
|
});
|
|
285
218
|
processes[processName] = Object.freeze({
|
|
286
219
|
enabled: false,
|
|
@@ -299,43 +232,26 @@ function buildImprovePlan(strategy, config, options) {
|
|
|
299
232
|
});
|
|
300
233
|
}
|
|
301
234
|
if (engineUnavailable.length > 0 &&
|
|
302
|
-
//
|
|
303
|
-
!
|
|
304
|
-
(!options.allowAllDisabled || anyEngineNotConfigured)) {
|
|
235
|
+
// Triage without its judgment and proactiveMaintenance make no model call: they alone do not keep a run alive.
|
|
236
|
+
![...MODEL_CALLING_PROCESSES].some((name) => processes[name].enabled)) {
|
|
305
237
|
const names = engineUnavailable.map((item) => `"${item.process}"`).join(", ");
|
|
306
|
-
|
|
238
|
+
const ambiguous = ambiguousDefaultAdvice(config);
|
|
239
|
+
throw new ConfigError(`No improve process can run: ${names} ${engineUnavailable.length === 1 ? "requires" : "require"} a connection or harness that ${ambiguous ? "has no default to run on" : "is not configured"}. ${ambiguous ? `${ambiguous}.` : "Run `akm setup`, or set improve.connection or improve.harness."}`, "LLM_NOT_CONFIGURED");
|
|
307
240
|
}
|
|
308
241
|
const triage = strategy.config.processes?.triage;
|
|
309
242
|
const judgmentEnabled = triage?.judgment?.enabled === true;
|
|
310
243
|
const triageJudgmentResolution = processes.triage.enabled && judgmentEnabled
|
|
311
244
|
? resolveImproveExecution({
|
|
312
245
|
config,
|
|
313
|
-
|
|
314
|
-
process: triage,
|
|
315
|
-
current: triage.judgment,
|
|
246
|
+
process: "triage",
|
|
316
247
|
processName: "triage-judgment",
|
|
248
|
+
alias: SHIPPED_ALIAS.judge,
|
|
249
|
+
...(options.run ? { run: options.run } : {}),
|
|
317
250
|
})
|
|
318
251
|
: null;
|
|
319
|
-
|
|
252
|
+
const triageJudgment = triageJudgmentResolution?.runner ?? null;
|
|
320
253
|
if (processes.triage.enabled && judgmentEnabled && !triageJudgment) {
|
|
321
|
-
throw new ConfigError(`Enabled improve triage judgment requires
|
|
322
|
-
}
|
|
323
|
-
// #957: same credential-unavailable treatment as the main per-process loop
|
|
324
|
-
// above — a triage judgment engine that resolves structurally but whose
|
|
325
|
-
// credential (or, for an SDK judgment, its LLM fallback credential) is
|
|
326
|
-
// unavailable in this process's environment is folded into
|
|
327
|
-
// `engineUnavailable` under the reserved `"triage.judgment"` process name
|
|
328
|
-
// instead of silently reaching dispatch with a doomed credential.
|
|
329
|
-
if (triageJudgment) {
|
|
330
|
-
const credentialStatus = runnerCredentialStatus(triageJudgment, env);
|
|
331
|
-
if (!credentialStatus.available) {
|
|
332
|
-
engineUnavailable.push({
|
|
333
|
-
process: "triage.judgment",
|
|
334
|
-
configKey: `improve.strategies.${strategy.name}.processes.triage.judgment.engine`,
|
|
335
|
-
reason: credentialUnavailableReason(triageJudgment.engine, credentialStatus),
|
|
336
|
-
});
|
|
337
|
-
triageJudgment = null;
|
|
338
|
-
}
|
|
254
|
+
throw new ConfigError(`Enabled improve triage judgment requires a connection or harness. Run \`akm setup\`, or set improve.connection or improve.processes.triage.connection.`, "LLM_NOT_CONFIGURED");
|
|
339
255
|
}
|
|
340
256
|
const frozenProcesses = Object.freeze(processes);
|
|
341
257
|
const frozenStrategy = Object.freeze({
|
|
@@ -350,6 +266,7 @@ function buildImprovePlan(strategy, config, options) {
|
|
|
350
266
|
strategy: frozenStrategy,
|
|
351
267
|
processes: frozenProcesses,
|
|
352
268
|
triageJudgment: triageJudgment ? cloneAndFreeze(triageJudgment) : null,
|
|
269
|
+
...(options.run ? { run: cloneAndFreeze(options.run) } : {}),
|
|
353
270
|
...(triageJudgmentResolution?.notices.length
|
|
354
271
|
? { triageJudgmentNotices: cloneAndFreeze(triageJudgmentResolution.notices) }
|
|
355
272
|
: {}),
|
|
@@ -10,6 +10,7 @@ import fs from "node:fs";
|
|
|
10
10
|
import path from "node:path";
|
|
11
11
|
import { parseRefInput } from "../../core/asset/resolve-ref.js";
|
|
12
12
|
import { bundlesToSourceEntries, loadConfig } from "../../core/config/config.js";
|
|
13
|
+
import { collectCredentialValues } from "../../core/config/credentials.js";
|
|
13
14
|
import { ConfigError, rethrowIfTestIsolationError, UsageError } from "../../core/errors.js";
|
|
14
15
|
import { appendEvent } from "../../core/events.js";
|
|
15
16
|
import { classifyImproveAction, foldDistillSkipped } from "../../core/improve-types.js";
|
|
@@ -20,12 +21,12 @@ import { openStateDatabase } from "../../core/state-db.js";
|
|
|
20
21
|
import { info, warn, warnVerbose } from "../../core/warn.js";
|
|
21
22
|
import { beginWriteProvenance, relativeWrittenPath } from "../../core/write-provenance.js";
|
|
22
23
|
import { resolveWorkingStashTarget, resolveWritable, resolveWriteTarget } from "../../core/write-source.js";
|
|
24
|
+
import { noticeSet } from "../../execution/notices.js";
|
|
23
25
|
import { ensureIndex } from "../../indexer/ensure-index.js";
|
|
24
26
|
import { indexWrittenAssets } from "../../indexer/index-written-assets.js";
|
|
25
27
|
import { akmIndex } from "../../indexer/indexer.js";
|
|
26
28
|
import { countPendingMemoriesNeedingDecision } from "../../indexer/passes/memory-inference.js";
|
|
27
29
|
import { resolveEntryContentDir, resolveSourceEntries } from "../../indexer/search/search-source.js";
|
|
28
|
-
import { collectEngineCredentialValues } from "../../integrations/agent/engine-resolution.js";
|
|
29
30
|
import { installLlmUsagePersistence } from "../../llm/usage-persist.js";
|
|
30
31
|
import { withLlmStage } from "../../llm/usage-telemetry.js";
|
|
31
32
|
import { GitStashPushError, isGitBackedStash, listGitChangedPaths, resolveWritableOverride, saveGitStash, } from "../../sources/providers/git.js";
|
|
@@ -47,7 +48,7 @@ import { analyzeMemoryCleanup, purgeGracedArchive, RETIRE_GRACE_DAYS, } from "./
|
|
|
47
48
|
import { buildImproveExecutionPlan } from "./planner.js";
|
|
48
49
|
import { CONSOLIDATION_CONFIG_KEYS, pickDefined, recordImproveSkip, runImprovePreparationStage } from "./preparation.js";
|
|
49
50
|
import { akmReflect } from "./reflect.js";
|
|
50
|
-
import { errMessage
|
|
51
|
+
import { errMessage } from "./stage.js";
|
|
51
52
|
export { runImproveMaintenancePasses } from "./loop-stages.js";
|
|
52
53
|
export function renderSyncCommitMessage(template, result, nowMs) {
|
|
53
54
|
const iso = new Date(nowMs).toISOString();
|
|
@@ -65,7 +66,7 @@ export function renderSyncCommitMessage(template, result, nowMs) {
|
|
|
65
66
|
return template.replace(/\{(\w+)\}/g, (match, key) => tokens[key] ?? match);
|
|
66
67
|
}
|
|
67
68
|
/**
|
|
68
|
-
* How long the loop waits for its first
|
|
69
|
+
* How long the loop waits for its first model response before printing one
|
|
69
70
|
* "still waiting" line (#957): a dead endpoint otherwise looks like a slow run.
|
|
70
71
|
* Armed when the loop starts, not at run start.
|
|
71
72
|
*/
|
|
@@ -109,7 +110,7 @@ export async function akmImprove(options = {}) {
|
|
|
109
110
|
const { budgetMs, budgetAbortController, scope, selectedStrategy, syncRepoDir, resolvedStateDbPath } = setup;
|
|
110
111
|
let clearBudgetTimer = () => { };
|
|
111
112
|
let clearFirstResponseHeartbeat = () => { };
|
|
112
|
-
// Set by the usage sink when any
|
|
113
|
+
// Set by the usage sink when any model call terminates, prepass included.
|
|
113
114
|
let firstEngineResponseSeen = false;
|
|
114
115
|
let initialGitPaths = new Set();
|
|
115
116
|
let preRunSync;
|
|
@@ -253,7 +254,7 @@ export async function akmImprove(options = {}) {
|
|
|
253
254
|
}
|
|
254
255
|
if (!firstEngineResponseSeen) {
|
|
255
256
|
const firstResponseTimer = setTimeout(() => {
|
|
256
|
-
warn("[improve] Still waiting for the first
|
|
257
|
+
warn("[improve] Still waiting for the first model response...");
|
|
257
258
|
}, FIRST_ENGINE_RESPONSE_HEARTBEAT_MS);
|
|
258
259
|
firstResponseTimer.unref?.();
|
|
259
260
|
clearFirstResponseHeartbeat = () => clearTimeout(firstResponseTimer);
|
|
@@ -360,12 +361,8 @@ function resolveImproveRunSetup(options) {
|
|
|
360
361
|
const scope = resolveImproveScope(options.scope);
|
|
361
362
|
const config = options.config ?? loadConfig();
|
|
362
363
|
const configuredImproveProfile = resolveImproveStrategy(options.strategy, config).config;
|
|
363
|
-
// A dry run never dispatches, so an all-disabled strategy must not abort it.
|
|
364
364
|
const resolvedPlan = options.resolvedPlan ??
|
|
365
|
-
resolveImprovePlan(options.strategy, config, {
|
|
366
|
-
repairValidationFailures: options.repairValidationFailures,
|
|
367
|
-
allowAllDisabled: options.dryRun,
|
|
368
|
-
});
|
|
365
|
+
resolveImprovePlan(options.strategy, config, { repairValidationFailures: options.repairValidationFailures });
|
|
369
366
|
const selectedStrategy = resolvedPlan.strategy;
|
|
370
367
|
const improveProfile = selectedStrategy.config;
|
|
371
368
|
const configuredLimits = {
|
|
@@ -433,7 +430,7 @@ function resolveImproveRunSetup(options) {
|
|
|
433
430
|
config,
|
|
434
431
|
resolvedPlan,
|
|
435
432
|
selectedStrategy,
|
|
436
|
-
improveSensitiveValues:
|
|
433
|
+
improveSensitiveValues: collectCredentialValues(config),
|
|
437
434
|
improveProfile,
|
|
438
435
|
configuredImproveProfile,
|
|
439
436
|
configuredLimits,
|
|
@@ -626,7 +623,6 @@ export function buildDryRunResult(run, collected, preparation) {
|
|
|
626
623
|
...(preparation?.planning ? { plan: buildResultExecutionPlan(run, preparation, collected, true) } : {}),
|
|
627
624
|
...(strategyFilteredRefs.length > 0 ? { strategyFilteredRefs } : {}),
|
|
628
625
|
...(run.resolvedPlan.engineUnavailable.length > 0 ? { skippedProcesses: run.resolvedPlan.engineUnavailable } : {}),
|
|
629
|
-
...(run.options.engineProbe !== undefined ? { engineProbe: run.options.engineProbe } : {}),
|
|
630
626
|
...(preparation?.proactiveMaintenance ? { proactiveMaintenance: preparation.proactiveMaintenance } : {}),
|
|
631
627
|
};
|
|
632
628
|
}
|
|
@@ -725,7 +721,8 @@ async function runTriagePrePass(run) {
|
|
|
725
721
|
dryRun: false,
|
|
726
722
|
excludeIds: new Set(),
|
|
727
723
|
judgment: resolvedPlan.triageJudgment,
|
|
728
|
-
|
|
724
|
+
signal: run.budgetAbortController.signal,
|
|
725
|
+
}), { engine: resolvedPlan.triageJudgment?.name, process: "triage.judgment" });
|
|
729
726
|
}
|
|
730
727
|
catch (err) {
|
|
731
728
|
warn(`[improve] triage pre-pass failed (non-fatal): ${errMessage(err)}`);
|
|
@@ -1026,7 +1023,6 @@ function finalizeImproveResult(args) {
|
|
|
1026
1023
|
...(preparation.planning ? { plan: buildResultExecutionPlan(run, preparation, collected, false) } : {}),
|
|
1027
1024
|
...(strategyFilteredRefs.length > 0 ? { strategyFilteredRefs } : {}),
|
|
1028
1025
|
...(resolvedPlan.engineUnavailable.length > 0 ? { skippedProcesses: resolvedPlan.engineUnavailable } : {}),
|
|
1029
|
-
...(options.engineProbe !== undefined ? { engineProbe: options.engineProbe } : {}),
|
|
1030
1026
|
...(usageReport ? { usageReport } : {}),
|
|
1031
1027
|
actions: persistedActions,
|
|
1032
1028
|
...(distillSkippedAggregate ? { distillSkipped: distillSkippedAggregate } : {}),
|
|
@@ -155,6 +155,8 @@ async function runLoopReflectPass(planned, env, tally) {
|
|
|
155
155
|
signal: env.budgetSignal,
|
|
156
156
|
eventsCtx: env.eventsCtx,
|
|
157
157
|
...(planned.eligibilitySource ? { eligibilitySource: planned.eligibilitySource } : {}),
|
|
158
|
+
llmRunner: resolvedPlan.processes.reflect.runner,
|
|
159
|
+
...(resolvedPlan.run ? { run: resolvedPlan.run } : {}),
|
|
158
160
|
};
|
|
159
161
|
const result = await attributeStage(resolvedPlan, "reflect", () => env.reflectFn(reflectArgs));
|
|
160
162
|
const reason = result.ok ? undefined : result.reason;
|
|
@@ -254,6 +256,7 @@ async function runLoopDistillPass(planned, refType, isDistillOnly, env, tally) {
|
|
|
254
256
|
...(improveProfile ? { improveProfile } : {}),
|
|
255
257
|
config: options.config,
|
|
256
258
|
llmRunner: resolvedPlan.processes.distill.runner,
|
|
259
|
+
...(resolvedPlan.run ? { run: resolvedPlan.run } : {}),
|
|
257
260
|
signal: env.budgetSignal,
|
|
258
261
|
eventsCtx: env.eventsCtx,
|
|
259
262
|
...(planned.eligibilitySource ? { eligibilitySource: planned.eligibilitySource } : {}),
|
|
@@ -558,7 +558,7 @@ export function archiveCleanupCandidate(stashDir, candidate, filePath) {
|
|
|
558
558
|
? { successorRefs: candidate.successorRefs }
|
|
559
559
|
: {}),
|
|
560
560
|
}, "Archived derived memory for recoverable cleanup.\n");
|
|
561
|
-
//
|
|
561
|
+
// Write the tombstone BEFORE moving the file — a
|
|
562
562
|
// crash in between used to leave a file already at archivedPath with no
|
|
563
563
|
// cleanup.md to explain it (unrecoverable: revert refuses on a missing
|
|
564
564
|
// tombstone, and nothing else knows this archive dir exists). Reordered,
|
|
@@ -24,7 +24,6 @@ import { appendEvent, readEvents } from "../../core/events.js";
|
|
|
24
24
|
import { withStateDb } from "../../core/state-db.js";
|
|
25
25
|
import { info, warn } from "../../core/warn.js";
|
|
26
26
|
import { countUsageEventsByType, USAGE_EVENT_RETENTION_DAYS } from "../../indexer/usage/usage-events.js";
|
|
27
|
-
import { runnerLlmConnection } from "../../integrations/agent/runner.js";
|
|
28
27
|
import { getAvailableHarnesses } from "../../integrations/session-logs/index.js";
|
|
29
28
|
import { getZeroResultSearches } from "../../storage/repositories/index-entries-repository.js";
|
|
30
29
|
import { getRetrievalCounts } from "../../storage/repositories/index-utility-repository.js";
|
|
@@ -113,11 +112,8 @@ function planConsolidationPass(args) {
|
|
|
113
112
|
maxChunkSize: processConfig?.maxChunkSize,
|
|
114
113
|
}, primaryStashDir, [], args.existingKnowledgeBodyHashes ?? loadExistingKnowledgeBodyHashes(primaryStashDir), { readOnly: args.eventsCtx?.readOnly === true })
|
|
115
114
|
: { poolSize: 0, candidatePoolSize: 0, judgedUnchanged: 0 };
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
const chunkSize = computeSafeChunkSize((resolvedPlan.processes.consolidate.runner &&
|
|
119
|
-
runnerLlmConnection(resolvedPlan.processes.consolidate.runner)?.contextLength) ??
|
|
120
|
-
unavailable?.contextLength ??
|
|
115
|
+
const consolidateRunner = resolvedPlan.processes.consolidate.runner;
|
|
116
|
+
const chunkSize = computeSafeChunkSize((consolidateRunner?.kind === "connection" ? consolidateRunner.contextLength : undefined) ??
|
|
121
117
|
DEFAULT_CONTEXT_LENGTH_TOKENS, 500, processConfig?.maxChunkSize);
|
|
122
118
|
const profilePassed = processConfig?.enabled !== false;
|
|
123
119
|
const deltaPassed = pool.candidatePoolSize > 0 || pool.judgedUnchanged === 0;
|
|
@@ -194,17 +190,17 @@ async function runConsolidationPass(args) {
|
|
|
194
190
|
return { consolidation, plan: planned.plan };
|
|
195
191
|
}
|
|
196
192
|
/** The extract gates, evaluated once for both the live pass and the dry-run report. */
|
|
197
|
-
function inspectExtractPass(args, readOnly) {
|
|
193
|
+
async function inspectExtractPass(args, readOnly) {
|
|
198
194
|
const { options, improveProfile, resolvedPlan, eventsCtx } = args;
|
|
199
195
|
const enabled = resolvedPlan.processes.extract.enabled;
|
|
200
|
-
const hasRunner = resolvedPlan.processes.extract.runner
|
|
196
|
+
const hasRunner = resolvedPlan.processes.extract.runner !== null;
|
|
201
197
|
const availableHarnesses = (options.extractHarnesses ?? getAvailableHarnesses()).filter((h) => h.isAvailable());
|
|
202
198
|
const configured = improveProfile.processes?.extract?.minNewSessions;
|
|
203
199
|
const minNewSessions = typeof configured === "number" ? configured : 0;
|
|
204
200
|
let newCandidateCount;
|
|
205
201
|
if (enabled && hasRunner && availableHarnesses.length > 0 && minNewSessions > 0) {
|
|
206
202
|
const defaultSince = improveProfile.processes?.extract?.defaultSince;
|
|
207
|
-
newCandidateCount = (options.extractCandidateCountFn ?? countNewExtractCandidates)(options.config ?? loadConfig(), {
|
|
203
|
+
newCandidateCount = await (options.extractCandidateCountFn ?? countNewExtractCandidates)(options.config ?? loadConfig(), {
|
|
208
204
|
harnesses: availableHarnesses,
|
|
209
205
|
improveProfile,
|
|
210
206
|
...(defaultSince ? { since: defaultSince } : {}),
|
|
@@ -245,17 +241,16 @@ async function runSessionExtractPass(args, plan) {
|
|
|
245
241
|
if (!resolvedPlan.processes.extract.enabled)
|
|
246
242
|
return { warnings };
|
|
247
243
|
const runner = resolvedPlan.processes.extract.runner;
|
|
248
|
-
if (!runner
|
|
244
|
+
if (!runner) {
|
|
249
245
|
throw new ConfigError("Resolved improve plan has no runner for enabled extract process.", "LLM_NOT_CONFIGURED");
|
|
250
246
|
}
|
|
251
247
|
const config = options.config ?? loadConfig();
|
|
252
248
|
const extractPlan = Object.freeze({
|
|
253
249
|
strategy: resolvedPlan.strategy.name,
|
|
254
|
-
engine: runner.
|
|
250
|
+
engine: runner.name,
|
|
255
251
|
enabled: true,
|
|
256
252
|
process: resolvedPlan.processes.extract.config,
|
|
257
253
|
runner,
|
|
258
|
-
timeoutMs: runner.timeoutMs === undefined ? 600_000 : runner.timeoutMs,
|
|
259
254
|
embeddingConfig: Object.freeze(structuredClone(config.embedding)),
|
|
260
255
|
...(resolvedPlan.processes.extract.notices?.length ? { notices: resolvedPlan.processes.extract.notices } : {}),
|
|
261
256
|
});
|
|
@@ -374,7 +369,7 @@ export async function runImprovePreparationStage(args) {
|
|
|
374
369
|
plan: planConsolidationPass(args).plan,
|
|
375
370
|
}
|
|
376
371
|
: await runConsolidationPass(args);
|
|
377
|
-
const extractPlan = inspectExtractPass(args, planOnly);
|
|
372
|
+
const extractPlan = await inspectExtractPass(args, planOnly);
|
|
378
373
|
const extractPass = planOnly ? { warnings: [] } : await runSessionExtractPass(args, extractPlan);
|
|
379
374
|
cleanupWarnings.push(...extractPass.warnings);
|
|
380
375
|
if (persist) {
|