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
|
@@ -38,8 +38,6 @@ import { parseEmbeddedJsonResponse } from "../../../core/parse.js";
|
|
|
38
38
|
import { DERIVED_SUFFIX } from "../../../core/recognition-util.js";
|
|
39
39
|
import { warnOnce } from "../../../core/warn.js";
|
|
40
40
|
import { sameScope, scopeFromFrontmatter } from "../../../indexer/passes/metadata.js";
|
|
41
|
-
import { runnerLlmConnection } from "../../../integrations/agent/runner.js";
|
|
42
|
-
import { assertRunnerCredentials } from "../../../integrations/agent/runner-dispatch.js";
|
|
43
41
|
import { runGit } from "../../../sources/providers/git-install.js";
|
|
44
42
|
import { closeDatabase, openExistingDatabase, openReadonlyExistingDatabase, } from "../../../storage/repositories/index-connection.js";
|
|
45
43
|
import { getAllEntries, getEntryById } from "../../../storage/repositories/index-entries-repository.js";
|
|
@@ -542,15 +540,12 @@ function checkSection(label, side) {
|
|
|
542
540
|
*/
|
|
543
541
|
async function confirmNothingLost(ctx, retired, successor) {
|
|
544
542
|
const outcome = await callStage({
|
|
545
|
-
feature: "memory_consolidation",
|
|
546
543
|
runner: ctx.llmRunner,
|
|
547
544
|
system: consolidatePairCheckPrompt,
|
|
548
545
|
prompt: `${checkSection("X (to delete)", retired)}\n${checkSection("Y (kept)", successor)}\n${termHints([`Tokens only in X: ${exclusiveTerms(retired, successor)}`])}${Date.parse(retired.createdIso) === Date.parse(successor.createdIso) ? `\n${consolidatePairSameAge}` : ""}`,
|
|
549
|
-
gate: { config: ctx.config, enabled: true },
|
|
550
546
|
request: {
|
|
551
547
|
responseSchema: PAIR_CHECK_JSON_SCHEMA,
|
|
552
548
|
enableThinking: false,
|
|
553
|
-
...(Object.hasOwn(ctx.llmRunner, "timeoutMs") ? { timeoutMs: ctx.llmRunner.timeoutMs } : {}),
|
|
554
549
|
signal: ctx.opts.signal,
|
|
555
550
|
...(ctx.chat ? { chat: ctx.chat } : {}),
|
|
556
551
|
},
|
|
@@ -592,15 +587,12 @@ async function judgeOne(ctx, candidate) {
|
|
|
592
587
|
}
|
|
593
588
|
const { older, newer } = orderByAge(initiatorSide, otherSide);
|
|
594
589
|
const outcome = await callStage({
|
|
595
|
-
feature: "memory_consolidation",
|
|
596
590
|
runner: ctx.llmRunner,
|
|
597
591
|
system: consolidatePairPrompt,
|
|
598
592
|
prompt: buildPairUserPrompt(older, newer),
|
|
599
|
-
gate: { config: ctx.config, enabled: true },
|
|
600
593
|
request: {
|
|
601
594
|
responseSchema: PAIR_JUDGE_JSON_SCHEMA,
|
|
602
595
|
enableThinking: false,
|
|
603
|
-
...(Object.hasOwn(ctx.llmRunner, "timeoutMs") ? { timeoutMs: ctx.llmRunner.timeoutMs } : {}),
|
|
604
596
|
signal: ctx.opts.signal,
|
|
605
597
|
...(ctx.chat ? { chat: ctx.chat } : {}),
|
|
606
598
|
},
|
|
@@ -647,7 +639,7 @@ async function judgeOne(ctx, candidate) {
|
|
|
647
639
|
// durable half).
|
|
648
640
|
const retiredKey = stripBundle(retired.asset.ref);
|
|
649
641
|
const successorKey = stripBundle(successor.asset.ref);
|
|
650
|
-
//
|
|
642
|
+
// A retire-worthy verdict the same-run
|
|
651
643
|
// chain guard drops is not a settled "no action" — a LATER run, once the
|
|
652
644
|
// conflicting retirement has been reviewed, may well mint it. Counted as
|
|
653
645
|
// failed so its initiator gets no row (real data: night 1 alone judged 177
|
|
@@ -731,7 +723,7 @@ async function judgeOne(ctx, candidate) {
|
|
|
731
723
|
}
|
|
732
724
|
catch (error) {
|
|
733
725
|
ctx.warnings.push(`Pair pass: could not mint a retire proposal for ${retired.asset.ref}: ${error instanceof Error ? error.message : String(error)}`);
|
|
734
|
-
//
|
|
726
|
+
// A mint failure is transient (a lock, a disk error, a
|
|
735
727
|
// validation hiccup) — treated the same as a same-run drop, so no row is
|
|
736
728
|
// written and the pair is retried next run instead of abandoned.
|
|
737
729
|
return { failed: true };
|
|
@@ -748,8 +740,8 @@ const emptyLabelCounts = () => ({
|
|
|
748
740
|
/**
|
|
749
741
|
* The pair pass (alpha.9): initiators -> candidates -> one judge call per
|
|
750
742
|
* pair -> retire proposals for the calibrated classes. Runs alongside the
|
|
751
|
-
* promote pass, sharing its gate, its frozen LLM runner and its
|
|
752
|
-
* concurrency. `bundleId` is the target bundle's id (`undefined` skips the
|
|
743
|
+
* promote pass, sharing its gate, its frozen LLM runner and its
|
|
744
|
+
* connection's concurrency. `bundleId` is the target bundle's id (`undefined` skips the
|
|
753
745
|
* pass — nothing to scope candidates to).
|
|
754
746
|
*/
|
|
755
747
|
export async function runConsolidatePairPass(opts, config, stashDir, bundleId, warnings,
|
|
@@ -811,7 +803,7 @@ seams = {}) {
|
|
|
811
803
|
}
|
|
812
804
|
const isPendingBlocked = (c) => pendingRetireRefs.has(stripBundle(c.initiator.ref)) || pendingRetireRefs.has(stripBundle(c.other.ref));
|
|
813
805
|
const rejectedPairKeys = loadRejectedPairKeys(stashDir, opts.proposalsCtx);
|
|
814
|
-
//
|
|
806
|
+
// Admit WHOLE initiators under MAX_PAIRS_PER_RUN, never
|
|
815
807
|
// individual pairs — the old flat "top 300 candidates by cosine" cap let a
|
|
816
808
|
// pending-blocked pair spend a budget slot doing nothing, and left
|
|
817
809
|
// whichever initiators landed past slot 300 partially judged forever (no
|
|
@@ -869,21 +861,14 @@ seams = {}) {
|
|
|
869
861
|
continuitySearch: seams.continuitySearch ?? createContinuitySearch(stashDir, config),
|
|
870
862
|
};
|
|
871
863
|
let failedJudgments = 0;
|
|
872
|
-
//
|
|
864
|
+
// An initiator with any failed (or never-sent) judge call
|
|
873
865
|
// gets no ledger row — a failure attempted nothing conclusive, so writing
|
|
874
866
|
// one would mean the pair is never retried.
|
|
875
867
|
const failedInitiators = new Set();
|
|
876
868
|
if (judgeable.length > 0) {
|
|
877
|
-
|
|
878
|
-
// when it has memories to dispatch — the pair pass can still have work
|
|
879
|
-
// when that pool is empty, so it validates independently before its
|
|
880
|
-
// first real dispatch. A test-injected chat seam bypasses the transport
|
|
881
|
-
// entirely and needs no credential.
|
|
882
|
-
if (!seams.chat)
|
|
883
|
-
assertRunnerCredentials(llmRunner);
|
|
884
|
-
const results = await concurrentMap(judgeable, (candidate) => judgeOne(ctx, candidate), runnerLlmConnection(llmRunner)?.concurrency ?? 1, { signal: opts.signal });
|
|
869
|
+
const results = await concurrentMap(judgeable, (candidate) => judgeOne(ctx, candidate), (llmRunner.kind === "connection" ? llmRunner.concurrency : undefined) ?? 1, { signal: opts.signal });
|
|
885
870
|
results.forEach((r, idx) => {
|
|
886
|
-
//
|
|
871
|
+
// `concurrentMap` leaves an entry `undefined` for a call an
|
|
887
872
|
// aborted run never sent at all — `r?.failed === true` reads that as
|
|
888
873
|
// `undefined === true` (false), so an unsent call counted as a clean
|
|
889
874
|
// "no action" verdict. Explicit `undefined` check closes that gap.
|
|
@@ -897,7 +882,7 @@ seams = {}) {
|
|
|
897
882
|
// candidates were admitted (whole-initiator admission above makes this a
|
|
898
883
|
// simple membership check: judgeable either has every one of an
|
|
899
884
|
// initiator's candidates, or none of them) and none of them failed
|
|
900
|
-
//
|
|
885
|
+
// — including an initiator with zero candidates, which
|
|
901
886
|
// trivially satisfies both. One left out by the cap or a pending-proposal
|
|
902
887
|
// collision gets no row at all, so the next run reconsiders it rather
|
|
903
888
|
// than treating it as settled.
|
|
@@ -928,7 +913,7 @@ seams = {}) {
|
|
|
928
913
|
initiators: initiators.length,
|
|
929
914
|
initiatorsBacklog,
|
|
930
915
|
pairsConsidered: candidates.length,
|
|
931
|
-
//
|
|
916
|
+
// Parsed verdicts only — judgeable.length counted pairs that
|
|
932
917
|
// were admitted, not pairs a verdict actually came back for.
|
|
933
918
|
pairsJudged: judgeable.length - failedJudgments,
|
|
934
919
|
labelCounts: ctx.labelCounts,
|
|
@@ -33,12 +33,12 @@ import { parseEmbeddedJsonResponse } from "../../core/parse.js";
|
|
|
33
33
|
import { openStateDatabase } from "../../core/state-db.js";
|
|
34
34
|
import { warn, warnVerbose } from "../../core/warn.js";
|
|
35
35
|
import { resolveWriteTarget } from "../../core/write-source.js";
|
|
36
|
+
import { noticeSet } from "../../execution/notices.js";
|
|
36
37
|
import { deriveInstallations } from "../../indexer/installations.js";
|
|
37
38
|
import { resolveSourceEntries } from "../../indexer/search/search-source.js";
|
|
38
39
|
import { USAGE_EVENT_RETENTION_DAYS } from "../../indexer/usage/usage-events.js";
|
|
39
|
-
import { runnerLlmConnection } from "../../integrations/agent/runner.js";
|
|
40
|
-
import { assertRunnerCredentials } from "../../integrations/agent/runner-dispatch.js";
|
|
41
40
|
import { cosineSimilarity, embedBatch, resolveEmbeddingModelId } from "../../llm/embedder.js";
|
|
41
|
+
import { effectiveEmbedding } from "../../llm/embedders/connection.js";
|
|
42
42
|
import { getBodyEmbeddings, upsertBodyEmbeddings } from "../../storage/repositories/embeddings-repository.js";
|
|
43
43
|
import { closeDatabase, openExistingDatabase, openReadonlyExistingDatabase, } from "../../storage/repositories/index-connection.js";
|
|
44
44
|
import { getAllEntries } from "../../storage/repositories/index-entries-repository.js";
|
|
@@ -52,7 +52,7 @@ import { contentHash } from "./content-hash.js";
|
|
|
52
52
|
import { resolveImproveStrategy, resolveProcessEnabled } from "./improve-strategies.js";
|
|
53
53
|
import { isContentDrivenRow, isLedgerBlocked, ledgerKey, loadLedgerSnapshot, recordLedgerAttempt } from "./ledger.js";
|
|
54
54
|
import { isInRetrievalScope, loadRetrievalScope } from "./retrieval-scope.js";
|
|
55
|
-
import { callStage, mintProposal,
|
|
55
|
+
import { callStage, mintProposal, stageRunner } from "./stage.js";
|
|
56
56
|
function parsePlan(raw) {
|
|
57
57
|
const plan = parseEmbeddedJsonResponse(raw);
|
|
58
58
|
return plan && Array.isArray(plan.operations) ? { ...plan, operations: plan.operations } : undefined;
|
|
@@ -122,9 +122,10 @@ export const CONSOLIDATE_PLAN_JSON_SCHEMA = {
|
|
|
122
122
|
*/
|
|
123
123
|
async function clusterMemoriesBySimilarity(memories, config, stateDb, signal) {
|
|
124
124
|
const telemetry = { embedMs: 0, cacheHits: 0, cacheMisses: 0 };
|
|
125
|
-
|
|
125
|
+
const embedding = effectiveEmbedding(config);
|
|
126
|
+
if (memories.length < 3 || !embedding)
|
|
126
127
|
return { ordered: memories, embedTelemetry: telemetry };
|
|
127
|
-
const modelId = resolveEmbeddingModelId(
|
|
128
|
+
const modelId = resolveEmbeddingModelId(embedding);
|
|
128
129
|
const texts = memories.map((m) => [m.description, m.tags.join(" ")].filter(Boolean).join(". ") || m.name);
|
|
129
130
|
const hashes = texts.map((t) => contentHash(t));
|
|
130
131
|
let cached = new Map();
|
|
@@ -144,7 +145,7 @@ async function clusterMemoriesBySimilarity(memories, config, stateDb, signal) {
|
|
|
144
145
|
const embedStart = Date.now();
|
|
145
146
|
let missVecs;
|
|
146
147
|
try {
|
|
147
|
-
missVecs = await embedBatch(missIndices.map((i) => texts[i]),
|
|
148
|
+
missVecs = await embedBatch(missIndices.map((i) => texts[i]), embedding, signal);
|
|
148
149
|
}
|
|
149
150
|
catch {
|
|
150
151
|
return { ordered: memories, embedTelemetry: telemetry };
|
|
@@ -335,7 +336,7 @@ export async function akmConsolidate(opts = {}) {
|
|
|
335
336
|
const stashDir = writeTarget.source.path;
|
|
336
337
|
const notices = noticeSet(opts.onNotices);
|
|
337
338
|
const enabled = resolveProcessEnabled("consolidate", profile);
|
|
338
|
-
const runner = enabled ? stageRunner(opts, config,
|
|
339
|
+
const runner = enabled ? stageRunner(opts, config, "consolidate", notices.add) : undefined;
|
|
339
340
|
opts = {
|
|
340
341
|
...opts,
|
|
341
342
|
target: writeTarget.source.name,
|
|
@@ -520,7 +521,7 @@ const ABORT_FAILURE_RATE = 0.5;
|
|
|
520
521
|
* into exactly one accounting bucket.
|
|
521
522
|
*/
|
|
522
523
|
async function judgeConsolidationChunks(args) {
|
|
523
|
-
const { chunks, opts,
|
|
524
|
+
const { chunks, opts, warnings, acc } = args;
|
|
524
525
|
const llmRunner = opts.llmRunner ?? undefined;
|
|
525
526
|
const memRef = (m) => conceptIdFromTypeName("memory", m.name);
|
|
526
527
|
const failChunk = (message, chunk) => {
|
|
@@ -563,15 +564,12 @@ async function judgeConsolidationChunks(args) {
|
|
|
563
564
|
}
|
|
564
565
|
// The transport already retries once; a failed chunk is not retried here.
|
|
565
566
|
const outcome = await callStage({
|
|
566
|
-
feature: "memory_consolidation",
|
|
567
567
|
runner: llmRunner,
|
|
568
568
|
system: consolidateSystemPrompt,
|
|
569
569
|
prompt: buildChunkPrompt(args.sourceName, chunk, chunkIdx, chunks.length, args.bodyTruncation, args.pendingProposalBodyHashes),
|
|
570
|
-
gate: { config, enabled: true },
|
|
571
570
|
request: {
|
|
572
571
|
responseSchema: CONSOLIDATE_PLAN_JSON_SCHEMA,
|
|
573
572
|
enableThinking: false,
|
|
574
|
-
...(Object.hasOwn(llmRunner, "timeoutMs") ? { timeoutMs: llmRunner.timeoutMs } : {}),
|
|
575
573
|
signal: opts.signal,
|
|
576
574
|
},
|
|
577
575
|
parse: parsePlan,
|
|
@@ -626,7 +624,7 @@ async function planConsolidation(opts, config, stashDir, memories, warnings, sta
|
|
|
626
624
|
const llmRunner = opts.llmRunner ?? undefined;
|
|
627
625
|
// 500 body chars per memory keep the judgement useful; chunk size varies instead.
|
|
628
626
|
const bodyTruncation = 500;
|
|
629
|
-
const chunkSize = computeSafeChunkSize((llmRunner
|
|
627
|
+
const chunkSize = computeSafeChunkSize((llmRunner?.kind === "connection" ? llmRunner.contextLength : undefined) ?? DEFAULT_CONTEXT_LENGTH_TOKENS, bodyTruncation, opts.maxChunkSize);
|
|
630
628
|
const sourceName = opts.target ?? stashDir;
|
|
631
629
|
let budgeted = memories;
|
|
632
630
|
const budgetMs = opts.signal?.remainingBudgetMs;
|
|
@@ -642,8 +640,6 @@ async function planConsolidation(opts, config, stashDir, memories, warnings, sta
|
|
|
642
640
|
}
|
|
643
641
|
}
|
|
644
642
|
const slice = (list) => Array.from({ length: Math.ceil(list.length / chunkSize) }, (_, i) => list.slice(i * chunkSize, (i + 1) * chunkSize));
|
|
645
|
-
if (llmRunner && budgeted.length > 0)
|
|
646
|
-
assertRunnerCredentials(llmRunner);
|
|
647
643
|
const { ordered, embedTelemetry } = await clusterMemoriesBySimilarity(budgeted, config, stateDb, opts.signal);
|
|
648
644
|
const chunks = slice(ordered);
|
|
649
645
|
const pendingProposalBodyHashes = loadPendingConsolidateProposalHashes(stashDir, opts.proposalsCtx);
|
|
@@ -652,7 +648,6 @@ async function planConsolidation(opts, config, stashDir, memories, warnings, sta
|
|
|
652
648
|
const planned = await judgeConsolidationChunks({
|
|
653
649
|
chunks,
|
|
654
650
|
opts,
|
|
655
|
-
config,
|
|
656
651
|
sourceName,
|
|
657
652
|
bodyTruncation,
|
|
658
653
|
pendingProposalBodyHashes,
|
|
@@ -33,8 +33,8 @@ import { resolveStandardsContext } from "../../core/standards/resolve-standards-
|
|
|
33
33
|
import { withStateDb } from "../../core/state-db.js";
|
|
34
34
|
import { warn, warnVerbose } from "../../core/warn.js";
|
|
35
35
|
import { recordWrittenPath } from "../../core/write-provenance.js";
|
|
36
|
+
import { noticeSet } from "../../execution/notices.js";
|
|
36
37
|
import { resolveAssetPath } from "../../indexer/walk/path-resolver.js";
|
|
37
|
-
import { assertRunnerCredentials } from "../../integrations/agent/runner-dispatch.js";
|
|
38
38
|
import { closeDatabase, openReadonlyExistingDatabase } from "../../storage/repositories/index-connection.js";
|
|
39
39
|
import { getAllEntries } from "../../storage/repositories/index-entries-repository.js";
|
|
40
40
|
import { listProposals } from "../proposal/repository.js";
|
|
@@ -48,7 +48,7 @@ import { buildRefVocabulary, scoreEncodingSalience } from "./encoding-salience.j
|
|
|
48
48
|
import { resolveImproveStrategy, resolveProcessEnabled } from "./improve-strategies.js";
|
|
49
49
|
import { recordLedgerAttempt } from "./ledger.js";
|
|
50
50
|
import { computeSalience, upsertAssetSalience } from "./salience.js";
|
|
51
|
-
import { callStage, LESSON_REJECT_MAX_SCORE, mintProposal,
|
|
51
|
+
import { callStage, LESSON_REJECT_MAX_SCORE, mintProposal, rejectedProposalContext, resolveQualityGateJudge, runLessonQualityJudge, stageRunner, } from "./stage.js";
|
|
52
52
|
/**
|
|
53
53
|
* Input types distill structurally refuses: a lesson is the distilled form
|
|
54
54
|
* (distilling one would mint `lessons/lesson-…-lesson`), and env/secret bytes
|
|
@@ -355,8 +355,8 @@ export async function akmDistill(options) {
|
|
|
355
355
|
stash,
|
|
356
356
|
config,
|
|
357
357
|
profile,
|
|
358
|
-
runner: stageRunner(options, config,
|
|
359
|
-
judgeRunner: resolveQualityGateJudge(config, profile, "distill", notices.add),
|
|
358
|
+
runner: stageRunner(options, config, "distill", notices.add),
|
|
359
|
+
judgeRunner: resolveQualityGateJudge(config, profile, "distill", notices.add, options.run),
|
|
360
360
|
notices,
|
|
361
361
|
eligMeta,
|
|
362
362
|
asset,
|
|
@@ -372,11 +372,6 @@ async function distill(run, targetKind, kind, outputRef, feedbackEvents) {
|
|
|
372
372
|
// A reinforced memory graduates to knowledge without a generation call.
|
|
373
373
|
const promotion = targetKind === "lesson" ? null : await planPromotion(run, feedbackEvents);
|
|
374
374
|
if (promotion) {
|
|
375
|
-
if (run.runner && promotion.existing)
|
|
376
|
-
assertRunnerCredentials(run.runner);
|
|
377
|
-
const judge = run.judgeRunner ?? run.runner;
|
|
378
|
-
if (judge && qualityGateEnabled(run))
|
|
379
|
-
assertRunnerCredentials(judge);
|
|
380
375
|
const promoted = await promoteToKnowledge(run, promotion);
|
|
381
376
|
stampInputSalience(run);
|
|
382
377
|
return promoted;
|
|
@@ -394,11 +389,9 @@ async function distill(run, targetKind, kind, outputRef, feedbackEvents) {
|
|
|
394
389
|
const { system, prompt } = await buildDistillMessages(run, feedback, kind, outputRef);
|
|
395
390
|
const call = run.runner
|
|
396
391
|
? await callStage({
|
|
397
|
-
feature: "distill",
|
|
398
392
|
runner: run.runner,
|
|
399
393
|
system,
|
|
400
394
|
prompt,
|
|
401
|
-
gate: { config: run.config, enabled: true },
|
|
402
395
|
// NONE is an answer: a parser that rejected it would ask for a lesson again.
|
|
403
396
|
parse: (raw) => (answeredNone(raw) ? raw : parseEmbeddedJsonResponse(raw)),
|
|
404
397
|
// The injected test transport never sees the schema.
|
|
@@ -504,7 +497,7 @@ function assembleDistilledContent(run, raw, kind, outputRef) {
|
|
|
504
497
|
});
|
|
505
498
|
throw new UsageError(`Distilled ${kind} failed validation:\n${structural.map((f) => f.message).join("\n")}`, "MISSING_REQUIRED_ARGUMENT", kind === "knowledge"
|
|
506
499
|
? "Knowledge proposals require a non-empty markdown body."
|
|
507
|
-
: "Lessons require non-empty `description` and `when_to_use` frontmatter fields.
|
|
500
|
+
: "Lessons require non-empty `description` and `when_to_use` frontmatter fields.");
|
|
508
501
|
}
|
|
509
502
|
// Heuristic quality findings go to a human, not the bin.
|
|
510
503
|
const quality = kind === "lesson" ? collectLessonQualityFindings(content, run.inputRef) : [];
|
|
@@ -655,11 +648,9 @@ async function proposeLessonUpdate(run, feedback, finding, related) {
|
|
|
655
648
|
if (candidates.length === 0)
|
|
656
649
|
return undefined;
|
|
657
650
|
const call = await callStage({
|
|
658
|
-
feature: "distill",
|
|
659
651
|
runner: run.runner,
|
|
660
652
|
system: "Return only valid JSON. No prose.",
|
|
661
653
|
prompt: buildLessonUpdatePrompt(memory, feedback, candidates),
|
|
662
|
-
gate: { config: run.config, enabled: true },
|
|
663
654
|
request: {
|
|
664
655
|
...(run.options.chat === undefined
|
|
665
656
|
? { responseSchema: DISTILL_LESSON_UPDATE_JSON_SCHEMA }
|
|
@@ -862,7 +853,6 @@ async function promoteToKnowledge(run, plan) {
|
|
|
862
853
|
let content = plan.content;
|
|
863
854
|
if (plan.existing && run.runner) {
|
|
864
855
|
const merged = await callStage({
|
|
865
|
-
feature: "distill",
|
|
866
856
|
runner: run.runner,
|
|
867
857
|
system: "Return only valid JSON. No prose.",
|
|
868
858
|
prompt: [
|
|
@@ -1074,8 +1064,6 @@ async function defaultLookup(ref, stashDir) {
|
|
|
1074
1064
|
return resolveAssetPath(ref, {
|
|
1075
1065
|
stashDir,
|
|
1076
1066
|
mode: "disk-only",
|
|
1077
|
-
directoryIndexNames: ["SKILL.md"],
|
|
1078
|
-
preserveDirectNameFallback: true,
|
|
1079
1067
|
honorOrigin: false,
|
|
1080
1068
|
});
|
|
1081
1069
|
}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
/** The refs an improve run may consider, read from the index, and the small predicates over them. */
|
|
5
5
|
import fs from "node:fs";
|
|
6
6
|
import path from "node:path";
|
|
7
|
-
import { closestMatch } from "../../cli/unknown-flags.js";
|
|
8
7
|
import { parseBundleRef } from "../../core/asset/asset-ref.js";
|
|
9
8
|
import { parseFrontmatter } from "../../core/asset/frontmatter.js";
|
|
10
9
|
import { conceptIdFromTypeName, parseRefInput, resolveRef, typeNameFromConceptId } from "../../core/asset/resolve-ref.js";
|
|
10
|
+
import { closestMatch } from "../../core/closest-match.js";
|
|
11
11
|
import { loadConfig } from "../../core/config/config.js";
|
|
12
12
|
import { ConfigError, NotFoundError, rethrowIfTestIsolationError, UsageError } from "../../core/errors.js";
|
|
13
13
|
import { isPathAbsent } from "../../core/path-access.js";
|
|
@@ -355,8 +355,6 @@ export async function findAssetFilePath(ref, stashDir, writableBundleIds) {
|
|
|
355
355
|
stashDir,
|
|
356
356
|
mode: "disk-only",
|
|
357
357
|
writableBundleIds,
|
|
358
|
-
directoryIndexNames: ["SKILL.md"],
|
|
359
|
-
preserveDirectNameFallback: true,
|
|
360
358
|
honorOrigin: true,
|
|
361
359
|
});
|
|
362
360
|
}
|
|
@@ -1,47 +1,44 @@
|
|
|
1
1
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
function cascadeDefaults(layer) {
|
|
10
|
-
if (!layer)
|
|
11
|
-
return {};
|
|
12
|
-
return {
|
|
13
|
-
...(own(layer, "engine") ? { engine: layer.engine } : {}),
|
|
14
|
-
...(own(layer, "model") ? { model: layer.model } : {}),
|
|
15
|
-
...(own(layer, "llm") ? { inference: layer.llm } : {}),
|
|
16
|
-
...(own(layer, "timeoutMs") ? { timeout: layer.timeoutMs ?? null } : {}),
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
function mergeDefaults(farther, nearer) {
|
|
20
|
-
return deepMergeConfig(farther, nearer);
|
|
21
|
-
}
|
|
4
|
+
import { IMPROVE_ENGINE_PROCESSES } from "../../core/config/engine-semantics.js";
|
|
5
|
+
import { ConfigError } from "../../core/errors.js";
|
|
6
|
+
import { executionDefaultsOf } from "../../execution/source.js";
|
|
7
|
+
import { buildExecution, currentLayer, resolveExecution, shippedAlias } from "../../integrations/agent/execution.js";
|
|
22
8
|
/**
|
|
23
|
-
* Resolve improve-owned model work
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
9
|
+
* Resolve improve-owned model work: `improve.connection` / `improve.harness`
|
|
10
|
+
* -> index.<pass> -> `improve.processes.<name>` -> the call's own settings ->
|
|
11
|
+
* the run's selection, nearest wins, over the default by name. A strategy adds no layer: it says which
|
|
12
|
+
* processes run, never where. `null` when no connection or harness is
|
|
13
|
+
* configured for it.
|
|
27
14
|
*/
|
|
28
15
|
export function resolveImproveExecution(options) {
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
16
|
+
const processKey = options.process ?? options.processName;
|
|
17
|
+
const processes = options.config.improve?.processes;
|
|
18
|
+
try {
|
|
19
|
+
const prepared = resolveExecution({
|
|
20
|
+
content: `improve ${options.processName} execution selection`,
|
|
21
|
+
config: options.config,
|
|
22
|
+
layers: [
|
|
23
|
+
shippedAlias(options.alias),
|
|
24
|
+
{ id: "improve", kind: "invocation-defaults", values: executionDefaultsOf(options.config.improve) },
|
|
25
|
+
{ id: "index", kind: "invocation-defaults", values: executionDefaultsOf(options.index) },
|
|
26
|
+
{
|
|
27
|
+
id: `improve.processes.${processKey}`,
|
|
28
|
+
kind: "invocation-defaults",
|
|
29
|
+
values: executionDefaultsOf(IMPROVE_ENGINE_PROCESSES.includes(processKey) ? processes?.[processKey] : undefined),
|
|
30
|
+
},
|
|
31
|
+
currentLayer(executionDefaultsOf(options.current)),
|
|
32
|
+
{ id: "run", kind: "current", values: executionDefaultsOf(options.run) },
|
|
33
|
+
],
|
|
34
|
+
modelWork: true,
|
|
35
|
+
});
|
|
36
|
+
const lowered = buildExecution(prepared.request, prepared.runner);
|
|
37
|
+
return Object.freeze({ runner: lowered.runner, notices: lowered.notices });
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error instanceof ConfigError && error.code === "LLM_NOT_CONFIGURED")
|
|
41
|
+
return null;
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
47
44
|
}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* `--auto` runs multiple harnesses).
|
|
19
19
|
*/
|
|
20
20
|
import { getStringArg } from "../../cli/parse-args.js";
|
|
21
|
+
import { RETIRED_ENGINE_ARG, SELECTION_ARGS, selectionFromArgs } from "../../cli/selection.js";
|
|
21
22
|
import { defineJsonCommand, EXIT_CODES, output } from "../../cli/shared.js";
|
|
22
23
|
import { loadConfig } from "../../core/config/config.js";
|
|
23
24
|
import { UsageError } from "../../core/errors.js";
|
|
@@ -62,15 +63,13 @@ export const extractCommand = defineJsonCommand({
|
|
|
62
63
|
},
|
|
63
64
|
"timeout-ms": {
|
|
64
65
|
type: "string",
|
|
65
|
-
description: "Per-session LLM timeout in ms
|
|
66
|
-
},
|
|
67
|
-
engine: {
|
|
68
|
-
type: "string",
|
|
69
|
-
description: "Named LLM engine for this invocation. Mutually exclusive with --strategy.",
|
|
66
|
+
description: "Per-session LLM timeout in ms. Default: the engine's own timeout.",
|
|
70
67
|
},
|
|
68
|
+
...SELECTION_ARGS,
|
|
69
|
+
...RETIRED_ENGINE_ARG,
|
|
71
70
|
strategy: {
|
|
72
71
|
type: "string",
|
|
73
|
-
description: "Improve strategy supplying extract behavior
|
|
72
|
+
description: "Improve strategy supplying extract behavior.",
|
|
74
73
|
},
|
|
75
74
|
},
|
|
76
75
|
async run({ args }) {
|
|
@@ -81,7 +80,6 @@ export const extractCommand = defineJsonCommand({
|
|
|
81
80
|
const auto = args.auto === true;
|
|
82
81
|
const dryRun = args["dry-run"] === true;
|
|
83
82
|
const force = args.force === true;
|
|
84
|
-
const engine = getStringArg(args, "engine");
|
|
85
83
|
const strategy = getStringArg(args, "strategy");
|
|
86
84
|
const timeoutMs = typeof args["timeout-ms"] === "string" && args["timeout-ms"] !== ""
|
|
87
85
|
? Number.parseInt(args["timeout-ms"], 10)
|
|
@@ -89,9 +87,6 @@ export const extractCommand = defineJsonCommand({
|
|
|
89
87
|
if (timeoutMs !== undefined && (!Number.isFinite(timeoutMs) || timeoutMs <= 0)) {
|
|
90
88
|
throw new UsageError(`--timeout-ms must be a positive integer (got "${args["timeout-ms"]}").`, "INVALID_FLAG_VALUE");
|
|
91
89
|
}
|
|
92
|
-
if (engine && strategy) {
|
|
93
|
-
throw new UsageError("--engine and --strategy are mutually exclusive. Pick one.", "INVALID_FLAG_VALUE");
|
|
94
|
-
}
|
|
95
90
|
if (auto && type) {
|
|
96
91
|
throw new UsageError("--auto and --type are mutually exclusive. Pick one.", "INVALID_FLAG_VALUE");
|
|
97
92
|
}
|
|
@@ -100,7 +95,7 @@ export const extractCommand = defineJsonCommand({
|
|
|
100
95
|
}
|
|
101
96
|
const config = loadConfig();
|
|
102
97
|
const resolvedPlan = resolveStandaloneExtractPlan(config, {
|
|
103
|
-
...(
|
|
98
|
+
...selectionFromArgs(args),
|
|
104
99
|
...(strategy ? { strategy } : {}),
|
|
105
100
|
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
106
101
|
});
|
|
@@ -19,8 +19,8 @@ import { escapeJsonStringControls, stripCodeFences, stripThinkBlocks } from "../
|
|
|
19
19
|
const EXTRACT_CANDIDATE_NAME_PATTERN = "^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:/[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)?$";
|
|
20
20
|
const EXTRACT_CANDIDATE_NAME_RE = new RegExp(EXTRACT_CANDIDATE_NAME_PATTERN);
|
|
21
21
|
/**
|
|
22
|
-
* JSON Schema for the structured extract output. Passed to `chatCompletion
|
|
23
|
-
*
|
|
22
|
+
* JSON Schema for the structured extract output. Passed to `chatCompletion`,
|
|
23
|
+
* which drops it once for a provider that rejects it.
|
|
24
24
|
*
|
|
25
25
|
* Shape:
|
|
26
26
|
* {
|