akm-cli 0.10.261012-beta → 0.10.261014-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +710 -3
- package/README.md +15 -0
- package/SECURITY.md +11 -10
- package/STABILITY.md +47 -51
- package/dist/assets/hints/cli-hints-full.md +21 -19
- package/dist/assets/hints/cli-hints-short.md +3 -4
- package/dist/assets/opencode/akm-plugin.js +177 -0
- package/dist/assets/stash-skeleton/README.md +1 -1
- package/dist/assets/tasks/core/improve.yml +1 -1
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
- package/dist/assets/ui/config.js +27 -10
- package/dist/assets/workflows/workflow-template.md +2 -2
- package/dist/cli/clack.js +3 -1
- package/dist/cli/selection.js +33 -0
- package/dist/cli/shared.js +14 -1
- package/dist/cli/unknown-flags.js +6 -37
- package/dist/cli.js +69 -48
- package/dist/commands/agent/agent-dispatch.js +17 -25
- package/dist/commands/agent/contribute-cli.js +9 -8
- package/dist/commands/command/command-cli.js +4 -8
- package/dist/commands/command/command-execution.js +25 -39
- package/dist/commands/command/execution-source-loader.js +10 -14
- package/dist/commands/completions.js +1 -1
- package/dist/commands/config-cli.js +14 -5
- package/dist/commands/env/child-env.js +12 -14
- package/dist/commands/env/env-binding.js +47 -58
- package/dist/commands/env/env-cli.js +22 -24
- package/dist/commands/env/env.js +10 -58
- package/dist/commands/env/secret-cli.js +11 -29
- package/dist/commands/env/secret.js +3 -10
- package/dist/commands/health/checks.js +10 -849
- package/dist/commands/health/connections-and-harnesses-check.js +109 -0
- package/dist/commands/health/egress.js +3 -3
- package/dist/commands/health/html-report.js +9 -10
- package/dist/commands/health/plugin-staleness.js +18 -11
- package/dist/commands/health/report-view-model.js +16 -12
- package/dist/commands/health/scheduler-binary.js +1 -1
- package/dist/commands/health/semantic-search-check.js +85 -0
- package/dist/commands/health/type-directory-check.js +0 -3
- package/dist/commands/health.js +30 -42
- package/dist/commands/improve/consolidate/pair-pass.js +10 -25
- package/dist/commands/improve/consolidate.js +10 -15
- package/dist/commands/improve/distill.js +5 -17
- package/dist/commands/improve/eligibility.js +1 -3
- package/dist/commands/improve/execution.js +37 -40
- package/dist/commands/improve/extract-cli.js +6 -11
- package/dist/commands/improve/extract-prompt.js +2 -2
- package/dist/commands/improve/extract.js +67 -97
- package/dist/commands/improve/improve-cli.js +22 -128
- package/dist/commands/improve/improve-report.js +1 -1
- package/dist/commands/improve/improve-strategies.js +25 -108
- package/dist/commands/improve/improve.js +10 -14
- package/dist/commands/improve/loop-stages.js +3 -0
- package/dist/commands/improve/memory/memory-improve.js +1 -1
- package/dist/commands/improve/preparation.js +8 -13
- package/dist/commands/improve/reflect.js +203 -332
- package/dist/commands/improve/retrieval-scope.js +1 -1
- package/dist/commands/improve/session-asset.js +3 -2
- package/dist/commands/improve/stage.js +87 -115
- package/dist/commands/lint/base-linter.js +3 -3
- package/dist/commands/lint/env-key-rules.js +7 -6
- package/dist/commands/lint/index.js +3 -3
- package/dist/commands/models-cli.js +103 -63
- package/dist/commands/proposal/drain.js +26 -39
- package/dist/commands/proposal/proposal-cli.js +14 -18
- package/dist/commands/proposal/propose-cli.js +4 -2
- package/dist/commands/proposal/propose.js +37 -64
- package/dist/commands/proposal/repository.js +17 -17
- package/dist/commands/proposal/validators/proposal-validators.js +3 -6
- package/dist/commands/read/curate.js +10 -6
- package/dist/commands/read/registry-search.js +2 -48
- package/dist/commands/read/search-cli.js +1 -8
- package/dist/commands/read/search.js +5 -6
- package/dist/commands/read/show.js +6 -29
- package/dist/commands/remember.js +25 -40
- package/dist/commands/sources/add-cli.js +8 -63
- package/dist/commands/sources/bundle-cli.js +8 -9
- package/dist/commands/sources/bundle-config-ops.js +2 -2
- package/dist/commands/sources/info.js +12 -1
- package/dist/commands/sources/init.js +1 -1
- package/dist/commands/sources/installed-stashes.js +119 -63
- package/dist/commands/sources/migration-help.js +1 -1
- package/dist/commands/sources/plugin-upgrade.js +8 -15
- package/dist/commands/sources/schema-repair.js +4 -10
- package/dist/commands/sources/source-add.js +2 -2
- package/dist/commands/sources/source-clone.js +31 -7
- package/dist/commands/sources/source-manage.js +4 -4
- package/dist/commands/targets.js +175 -0
- package/dist/commands/tasks/explain.js +104 -69
- package/dist/commands/tasks/tasks-cli.js +9 -11
- package/dist/commands/tasks/tasks.js +75 -97
- package/dist/commands/ui/api.js +11 -3
- package/dist/commands/ui/redact.js +5 -31
- package/dist/commands/ui/workspace-actions.js +1 -1
- package/dist/commands/workflow/plan.js +48 -9
- package/dist/commands/workflow-cli.js +40 -45
- package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
- package/dist/core/adapter/adapters/akm-adapter.js +36 -41
- package/dist/core/adapter/adapters/akm-lint.js +10 -12
- package/dist/core/adapter/adapters/akm-metadata.js +2 -2
- package/dist/core/adapter/adapters/akm-task-adapter.js +8 -9
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +5 -5
- package/dist/core/adapter/adapters/claude-adapter.js +1 -1
- package/dist/core/adapter/adapters/dotenv-adapter.js +7 -6
- package/dist/core/adapter/adapters/generic-files-adapter.js +5 -5
- package/dist/core/adapter/adapters/index.js +3 -4
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +12 -14
- package/dist/core/adapter/adapters/okf-adapter.js +8 -10
- package/dist/core/adapter/adapters/opencode-adapter.js +1 -1
- package/dist/core/adapter/adapters/shared.js +3 -3
- package/dist/core/adapter/adapters/tool-dir-shared.js +7 -25
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +3 -3
- package/dist/core/adapter/detect-adapter.js +1 -1
- package/dist/core/adapter/execution-source.js +13 -35
- package/dist/core/adapter/registry.js +1 -1
- package/dist/core/adapter/validate-context.js +2 -4
- package/dist/core/asset/asset-placement.js +1 -1
- package/dist/core/asset/asset-ref.js +3 -3
- package/dist/core/asset/resolve-ref.js +5 -0
- package/dist/core/bundle-rename.js +12 -4
- package/dist/core/closest-match.js +37 -0
- package/dist/core/common.js +37 -57
- package/dist/core/config/config-io.js +26 -18
- package/dist/core/config/config-schema.js +19 -106
- package/dist/core/config/config-sources.js +3 -3
- package/dist/core/config/config-types.js +4 -4
- package/dist/core/config/config-walker.js +50 -77
- package/dist/core/config/config.js +438 -109
- package/dist/core/config/convert-engine-references.js +114 -0
- package/dist/core/config/convert-engines-shared.js +40 -0
- package/dist/core/config/convert-engines.js +300 -0
- package/dist/core/config/convert-models-overlay.js +137 -0
- package/dist/core/config/credentials.js +304 -0
- package/dist/core/config/engine-semantics.js +3 -3
- package/dist/core/config/migrate-keys.js +222 -0
- package/dist/core/config/model-aliases.js +37 -0
- package/dist/core/config/models-file.js +34 -0
- package/dist/core/config/retired-engines.js +53 -0
- package/dist/core/config/schema/connections.js +41 -0
- package/dist/core/config/schema/embedding.js +2 -2
- package/dist/core/config/schema/harnesses.js +41 -0
- package/dist/core/config/schema/improve-processes.js +9 -28
- package/dist/core/config/schema/improve.js +36 -1
- package/dist/core/config/schema/index-config.js +18 -20
- package/dist/core/config/schema/primitives.js +42 -17
- package/dist/core/config/schema/search.js +6 -11
- package/dist/core/config/schema/sources-bundles.js +9 -9
- package/dist/core/config/schema/workflow.js +2 -6
- package/dist/core/config/unusable-entries.js +66 -0
- package/dist/core/content-safety.js +3 -6
- package/dist/core/endpoint-url.js +47 -0
- package/dist/core/env-secret-ref.js +84 -73
- package/dist/core/errors.js +10 -16
- package/dist/core/extra-params.js +3 -3
- package/dist/core/improve-result.js +8 -9
- package/dist/core/json-schema.js +1 -1
- package/dist/core/lesson-lint.js +1 -1
- package/dist/core/llm-inference.js +80 -0
- package/dist/core/parse.js +2 -2
- package/dist/core/paths.js +33 -10
- package/dist/core/recognition-util.js +8 -10
- package/dist/core/redaction.js +94 -55
- package/dist/core/ref-token.js +82 -0
- package/dist/core/secret-value.js +14 -0
- package/dist/core/state/migrations.js +17 -22
- package/dist/core/structured.js +2 -68
- package/dist/core/subprocess.js +63 -22
- package/dist/core/type-presentation.js +10 -14
- package/dist/core/write-source.js +20 -4
- package/dist/execution/input-contract.js +3 -6
- package/dist/execution/notices.js +49 -0
- package/dist/execution/resolved-request.js +24 -40
- package/dist/execution/source.js +21 -45
- package/dist/execution/target-ref.js +2 -2
- package/dist/indexer/bundle-identity-guard.js +6 -5
- package/dist/indexer/ensure-index.js +1 -1
- package/dist/indexer/index-writer-lock.js +1 -1
- package/dist/indexer/indexer.js +46 -42
- package/dist/indexer/installations.js +12 -22
- package/dist/indexer/lookup/adapter-concept-owner.js +40 -14
- package/dist/indexer/materialize-embeddings.js +20 -16
- package/dist/indexer/passes/memory-inference.js +21 -50
- package/dist/indexer/passes/metadata.js +5 -5
- package/dist/indexer/scan/doc-to-entry.js +1 -1
- package/dist/indexer/scan/drain-dir.js +9 -11
- package/dist/indexer/search/db-search.js +9 -7
- package/dist/indexer/search/search-source.js +42 -22
- package/dist/indexer/usage/usage-events.js +2 -3
- package/dist/indexer/walk/index-context.js +2 -1
- package/dist/indexer/walk/matchers.js +3 -11
- package/dist/indexer/walk/path-resolver.js +13 -68
- package/dist/indexer/walk/walker.js +32 -26
- package/dist/integrations/agent/akm-read-tools.js +81 -0
- package/dist/integrations/agent/config.js +1 -1
- package/dist/integrations/agent/detect.js +32 -36
- package/dist/integrations/agent/execution.js +130 -428
- package/dist/integrations/agent/index.js +1 -1
- package/dist/integrations/agent/profiles.js +24 -28
- package/dist/integrations/agent/prompts.js +17 -30
- package/dist/integrations/agent/request-lowering.js +67 -101
- package/dist/integrations/agent/resolution.js +332 -0
- package/dist/integrations/agent/runner-dispatch.js +156 -181
- package/dist/integrations/agent/runner.js +20 -70
- package/dist/integrations/agent/runtime-port.js +4 -0
- package/dist/integrations/agent/runtime.js +10 -0
- package/dist/integrations/agent/spawn.js +65 -190
- package/dist/integrations/harnesses/aider/index.js +19 -39
- package/dist/integrations/harnesses/amazonq/index.js +17 -32
- package/dist/integrations/harnesses/claude/index.js +59 -28
- package/dist/integrations/harnesses/claude/session-log.js +7 -5
- package/dist/integrations/harnesses/codex/index.js +19 -31
- package/dist/integrations/harnesses/copilot/index.js +17 -35
- package/dist/integrations/harnesses/gemini/index.js +18 -34
- package/dist/integrations/harnesses/harness.js +36 -0
- package/dist/integrations/harnesses/index.js +20 -51
- package/dist/integrations/harnesses/opencode/agent-builder.js +132 -100
- package/dist/integrations/harnesses/opencode/index.js +11 -33
- package/dist/integrations/harnesses/opencode/roots.js +50 -0
- package/dist/integrations/harnesses/opencode/runtime/binary.js +206 -0
- package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
- package/dist/integrations/harnesses/opencode/runtime/index.js +177 -0
- package/dist/integrations/harnesses/opencode/runtime/tar.js +107 -0
- package/dist/integrations/harnesses/opencode/session-log-v1.js +15 -7
- package/dist/integrations/harnesses/opencode/session-log-v2.js +72 -48
- package/dist/integrations/harnesses/opencode/session-log.js +58 -137
- package/dist/integrations/harnesses/opencode/version.js +34 -53
- package/dist/integrations/harnesses/openhands/index.js +13 -37
- package/dist/integrations/harnesses/pi/index.js +21 -32
- package/dist/integrations/lockfile.js +1 -1
- package/dist/integrations/session-logs/index.js +11 -31
- package/dist/llm/client.js +93 -111
- package/dist/llm/embedder.js +19 -34
- package/dist/llm/embedders/connection.js +31 -0
- package/dist/llm/embedders/local-model-files.js +56 -0
- package/dist/llm/embedders/local.js +146 -115
- package/dist/llm/embedders/remote.js +26 -23
- package/dist/llm/embedders/types.js +1 -1
- package/dist/llm/index-passes.js +33 -39
- package/dist/llm/memory-infer.js +67 -77
- package/dist/llm/model-list.js +35 -0
- package/dist/llm/rerank-client.js +8 -14
- package/dist/llm/structured-call.js +45 -99
- package/dist/llm/structured.js +60 -0
- package/dist/output/renderers.js +2 -8
- package/dist/output/shapes/helpers.js +18 -44
- package/dist/output/shapes/passthrough.js +1 -0
- package/dist/output/shapes.js +1 -7
- package/dist/output/text/command-format.js +41 -39
- package/dist/output/text/health-format.js +8 -2
- package/dist/output/text/helpers.js +1 -1
- package/dist/output/text/migrate.js +12 -0
- package/dist/output/text/models.js +3 -2
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/show-directives.js +16 -28
- package/dist/output/text/show-format.js +0 -2
- package/dist/output/text/targets-table.js +70 -0
- package/dist/output/text/workflow-format.js +44 -15
- package/dist/output/text.js +1 -1
- package/dist/registry/providers/skills-sh.js +1 -28
- package/dist/registry/providers/static-index.js +1 -71
- package/dist/runtime.js +6 -2
- package/dist/scripts/akm-migrate-node.js +47095 -44905
- package/dist/scripts/akm-migrate.js +46946 -44755
- package/dist/setup/detect.js +28 -273
- package/dist/setup/endpoint.js +36 -0
- package/dist/setup/semantic-assets.js +13 -19
- package/dist/setup/setup-flags.js +77 -0
- package/dist/setup/setup-plan.js +144 -0
- package/dist/setup/setup.js +134 -358
- package/dist/setup/steps/connection-shared.js +49 -101
- package/dist/setup/steps/connection.js +121 -524
- package/dist/setup/steps/embeddings.js +151 -0
- package/dist/setup/steps/harnesses.js +118 -0
- package/dist/setup/steps/platforms.js +2 -81
- package/dist/setup/steps/tasks.js +1 -2
- package/dist/setup/steps.js +10 -0
- package/dist/setup/summary.js +67 -0
- package/dist/sources/freshness.js +16 -21
- package/dist/sources/providers/git-provider.js +2 -9
- package/dist/sources/providers/provider-utils.js +13 -5
- package/dist/sources/resolve.js +12 -16
- package/dist/sources/snapshot-fetchers/robots.js +11 -12
- package/dist/sources/snapshot-fetchers/secret-seam.js +2 -4
- package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
- package/dist/sources/snapshot-fetchers/x.js +1 -1
- package/dist/standalone/onnxruntime-library.js +52 -0
- package/dist/storage/repositories/improve-ledger-repository.js +1 -1
- package/dist/storage/repositories/improve-runs-repository.js +0 -13
- package/dist/storage/repositories/index-entries-repository.js +2 -2
- package/dist/storage/repositories/proposals-repository.js +2 -2
- package/dist/storage/repositories/task-history-repository.js +2 -2
- package/dist/storage/repositories/workflow-runs-repository.js +44 -129
- package/dist/storage/sqlite-read-snapshot.js +33 -29
- package/dist/tasks/embedded.js +1 -1
- package/dist/tasks/log-redaction.js +7 -119
- package/dist/tasks/prepare/prepare-support.js +8 -7
- package/dist/tasks/prepare/prepare.js +8 -9
- package/dist/tasks/prepare/script-capture.js +9 -25
- package/dist/tasks/run/attempt-lifecycle.js +17 -35
- package/dist/tasks/run/load-task.js +54 -27
- package/dist/tasks/run/run-command-task.js +15 -10
- package/dist/tasks/run/run-native-task.js +8 -21
- package/dist/tasks/run/run-task.js +5 -8
- package/dist/tasks/run/run-workflow-task.js +14 -21
- package/dist/tasks/run/task-history.js +9 -17
- package/dist/tasks/run/task-log.js +1 -5
- package/dist/tasks/scheduler-invocation.js +13 -18
- package/dist/tasks/scheduler-sync.js +0 -1
- package/dist/tasks/source/bounded-document.js +31 -117
- package/dist/tasks/source/parse-task-source.js +0 -1
- package/dist/tasks/source/project-v4.js +5 -3
- package/dist/tasks/source/task-input-diagnostics.js +3 -4
- package/dist/tasks/source/task-source-v4.js +48 -72
- package/dist/tasks/source-v3.js +2 -5
- package/dist/tasks/task-run-reserved-flags.js +1 -2
- package/dist/workflows/authoring/authoring.js +2 -7
- package/dist/workflows/compile.js +1 -15
- package/dist/workflows/concurrency-policy.js +4 -4
- package/dist/workflows/exec/child-workflow.js +1 -4
- package/dist/workflows/exec/dispatch-redaction.js +35 -86
- package/dist/workflows/exec/environment.js +13 -77
- package/dist/workflows/exec/exec-unit.js +14 -55
- package/dist/workflows/exec/frozen-judge.js +26 -28
- package/dist/workflows/exec/native-executor.js +126 -71
- package/dist/workflows/exec/run-workflow.js +38 -42
- package/dist/workflows/exec/step-work.js +13 -17
- package/dist/workflows/exec/unit-dispatch.js +7 -21
- package/dist/workflows/freeze/environment.js +14 -119
- package/dist/workflows/freeze/freeze.js +14 -33
- package/dist/workflows/freeze/step-values.js +6 -13
- package/dist/workflows/freeze/targets/child-workflow.js +3 -5
- package/dist/workflows/freeze/targets/command.js +9 -15
- package/dist/workflows/freeze/targets/shell.js +0 -3
- package/dist/workflows/freeze/task-bindings.js +0 -1
- package/dist/workflows/parser.js +50 -59
- package/dist/workflows/plan.js +8 -2
- package/dist/workflows/renderer.js +83 -9
- package/dist/workflows/resource-limits.js +2 -2
- package/dist/workflows/runtime/run-plan.js +38 -23
- package/dist/workflows/runtime/runs.js +55 -93
- package/dist/workflows/runtime/workflow-asset-loader.js +55 -86
- package/dist/workflows/source-files.js +7 -19
- package/docs/README.md +10 -16
- package/docs/architecture/README.md +2 -37
- package/docs/architecture/adapters.md +2 -2
- package/docs/architecture/akm-core-principles.md +256 -118
- package/docs/architecture/architecture.md +283 -99
- package/docs/architecture/improvement.md +8 -2
- package/docs/architecture/internals/classification.md +1 -3
- package/docs/architecture/internals/fresh-host-rebuild-runbook.md +7 -6
- package/docs/architecture/internals/health-advisories.md +35 -74
- package/docs/architecture/internals/improve-workflow.md +27 -26
- package/docs/architecture/internals/indexing.md +3 -3
- package/docs/architecture/internals/storage-locations.md +48 -15
- package/docs/architecture/persisted-data-compat.md +10 -6
- package/docs/architecture/specs/okf-support.md +9 -11
- package/docs/architecture/specs/ref.md +7 -9
- package/docs/architecture/testing/testing-workflow.md +172 -52
- package/docs/architecture/workflow-engine.md +51 -34
- package/docs/guides/README.md +0 -1
- package/docs/guides/author-bundles.md +15 -20
- package/docs/guides/author-workflows.md +93 -71
- package/docs/guides/bundles.md +20 -16
- package/docs/guides/discover-and-load.md +1 -1
- package/docs/guides/getting-started.md +49 -3
- package/docs/guides/improve-the-library.md +10 -4
- package/docs/guides/recipes/headless-install.md +11 -16
- package/docs/guides/run-workflows.md +29 -20
- package/docs/guides/scheduling.md +2 -2
- package/docs/guides/use-with-any-agent.md +20 -22
- package/docs/integration/bundling-akm.md +19 -9
- package/docs/maintainers/README.md +2 -6
- package/docs/maintainers/release-checklist.md +73 -126
- package/docs/migration/README.md +10 -3
- package/docs/migration/release-notes/0.10.0.md +81 -16
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +1 -1
- package/docs/migration/release-notes/0.9.0.md +1 -1
- package/docs/migration/release-notes/README.md +1 -1
- package/docs/migration/v0.9-to-v0.10.md +300 -60
- package/docs/migration/v0.9.1-to-v0.9.2.md +6 -5
- package/docs/posts/config-v2-lessons-16.md +1 -1
- package/docs/posts/llm-mode-reflect-13.md +1 -1
- package/docs/posts/release-0.6.0.md +11 -11
- package/docs/posts/release-0.8.0.md +4 -4
- package/docs/posts/workflows-vaults-09.md +1 -1
- package/docs/reference/README.md +1 -1
- package/docs/reference/asset-types.md +2 -2
- package/docs/reference/cli.md +477 -388
- package/docs/reference/configuration.md +569 -550
- package/docs/reference/data-and-telemetry.md +9 -6
- package/docs/reference/env-and-secrets.md +72 -15
- package/docs/reference/refs.md +3 -20
- package/docs/reference/registry.md +12 -38
- package/docs/reference/supported-formats.md +1 -1
- package/docs/reference/tasks.md +22 -11
- package/docs/reference/ui-api.md +14 -9
- package/docs/reference/workflow-schema.md +199 -154
- package/docs/reference/workflows.md +4 -6
- package/package.json +9 -11
- package/schemas/akm-config.json +1696 -2922
- package/schemas/akm-task.json +4 -4
- package/schemas/akm-workflow.json +36 -9
- package/ROADMAP.md +0 -112
- package/dist/assets/models.json +0 -35
- package/dist/commands/health/engine-usage.js +0 -45
- package/dist/commands/sources/dangerous-env-audit.js +0 -134
- package/dist/core/activation-policy.js +0 -67
- package/dist/core/config/schema/engines.js +0 -160
- package/dist/core/config/schema/execution.js +0 -23
- package/dist/core/spawn-env.js +0 -268
- package/dist/execution/directory-identity.js +0 -78
- package/dist/integrations/agent/builder-shared.js +0 -33
- package/dist/integrations/agent/builders.js +0 -43
- package/dist/integrations/agent/engine-fallback.js +0 -59
- package/dist/integrations/agent/engine-resolution.js +0 -333
- package/dist/integrations/agent/model-map.js +0 -475
- package/dist/integrations/harnesses/aider/agent-builder.js +0 -107
- package/dist/integrations/harnesses/aider/result-extractor.js +0 -53
- package/dist/integrations/harnesses/amazonq/agent-builder.js +0 -138
- package/dist/integrations/harnesses/amazonq/result-extractor.js +0 -48
- package/dist/integrations/harnesses/claude/agent-builder.js +0 -106
- package/dist/integrations/harnesses/claude/config-import.js +0 -67
- package/dist/integrations/harnesses/claude/result-extractor.js +0 -67
- package/dist/integrations/harnesses/codex/agent-builder.js +0 -150
- package/dist/integrations/harnesses/codex/result-extractor.js +0 -110
- package/dist/integrations/harnesses/copilot/agent-builder.js +0 -117
- package/dist/integrations/harnesses/copilot/result-extractor.js +0 -178
- package/dist/integrations/harnesses/gemini/agent-builder.js +0 -114
- package/dist/integrations/harnesses/gemini/result-extractor.js +0 -149
- package/dist/integrations/harnesses/opencode/config-import.js +0 -149
- package/dist/integrations/harnesses/opencode/model-config.js +0 -33
- package/dist/integrations/harnesses/opencode/model-work-agent.js +0 -115
- package/dist/integrations/harnesses/opencode/session-log-types.js +0 -12
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -44
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -1052
- package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +0 -199
- package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +0 -254
- package/dist/integrations/harnesses/opencode-sdk/wire.js +0 -66
- package/dist/integrations/harnesses/openhands/agent-builder.js +0 -120
- package/dist/integrations/harnesses/openhands/result-extractor.js +0 -135
- package/dist/integrations/harnesses/pi/agent-builder.js +0 -89
- package/dist/integrations/harnesses/pi/result-extractor.js +0 -168
- package/dist/integrations/harnesses/shared.js +0 -18
- package/dist/integrations/harnesses/types.js +0 -55
- package/dist/llm/feature-gate.js +0 -115
- package/dist/output/shapes/models-list.js +0 -16
- package/dist/output/shapes/registry-search.js +0 -10
- package/dist/setup/detected-engines.js +0 -136
- package/dist/setup/engine-config.js +0 -97
- package/dist/setup/harness-config-import.js +0 -47
- package/dist/setup/providers.js +0 -14
- package/dist/setup/steps/semantic.js +0 -39
- package/dist/workflows/authoring/scope-key.js +0 -79
- package/dist/workflows/exec/lowering-notices.js +0 -23
- package/dist/workflows/source-semantics.js +0 -110
- package/docs/architecture/0.10-process-rules.md +0 -832
- package/docs/architecture/akm-architecture-decision-history.md +0 -2055
- package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +0 -550
- package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +0 -72
- package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +0 -142
- package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +0 -189
- package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +0 -97
- package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +0 -108
- package/docs/architecture/decisions/0006-task-source-version-routing.md +0 -124
- package/docs/architecture/decisions/0007-workflow-composition-bounds.md +0 -83
- package/docs/architecture/decisions/0008-task-binding-normalization.md +0 -88
- package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +0 -80
- package/docs/architecture/decisions/0010-driver-protocol-cut.md +0 -36
- package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +0 -125
- package/docs/architecture/decisions/README.md +0 -62
- package/docs/architecture/internals/functional-contract-patterns.md +0 -340
- package/docs/architecture/internals/registry-network-boundary.md +0 -57
- package/docs/architecture/internals/search.md +0 -248
- package/docs/architecture/reviews/env-secret-access.md +0 -319
- package/docs/architecture/runtime-boundary-design.md +0 -153
- package/docs/architecture/specs/0.9.0-close-out-plan.md +0 -361
- package/docs/architecture/specs/0.9.0-decisions.md +0 -532
- package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +0 -745
- package/docs/architecture/specs/0.9.0-open-items-register.md +0 -135
- package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +0 -740
- package/docs/architecture/specs/0.9.0-release-surface-review.md +0 -636
- package/docs/architecture/specs/agent-command-engine-model-design.md +0 -513
- package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +0 -501
- package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +0 -291
- package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +0 -2059
- package/docs/architecture/specs/di-seams-plan.md +0 -539
- package/docs/architecture/specs/driver-protocol-keep-or-cut.md +0 -275
- package/docs/architecture/specs/fact-asset-type.md +0 -142
- package/docs/architecture/specs/improve-collapse-churn-detector-design.md +0 -634
- package/docs/architecture/specs/reviews/task-workflow-unification/README.md +0 -72
- package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +0 -152
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +0 -352
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +0 -300
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +0 -402
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +0 -758
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +0 -645
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +0 -602
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +0 -27
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +0 -27
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +0 -74
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +0 -15
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +0 -132
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +0 -147
- package/docs/architecture/specs/stash-conventions-code-spec.md +0 -275
- package/docs/architecture/specs/stash-organization-conventions.md +0 -377
- package/docs/architecture/specs/task-workflow-format-unification.md +0 -721
- package/docs/architecture/specs/workflow-engine-buy-vs-build.md +0 -231
- package/docs/architecture/specs/workflow-format-unification.md +0 -432
- package/docs/architecture/testing/manual-testing-checklist.md +0 -3411
- package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
- package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1720
- package/docs/guides/claude-code-vs-akm-workflows.md +0 -29
- package/docs/guides/knowledge-management.md +0 -18
- package/docs/maintainers/curate-workmap.md +0 -335
- package/docs/migration/v0.5-to-v0.6.md +0 -759
- package/docs/migration/v0.7-to-v0.8.md +0 -1378
- package/docs/plans/0.9.2-agent-command-workflow-plan.md +0 -423
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
# Functional Contract Patterns
|
|
2
|
-
|
|
3
|
-
Quick reference for the repeated design patterns used in akm's refactor away
|
|
4
|
-
from type-centric behavior.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 1. Core Rule
|
|
9
|
-
|
|
10
|
-
Model behavior around core processes, not around one large `asset type` object.
|
|
11
|
-
|
|
12
|
-
Use:
|
|
13
|
-
|
|
14
|
-
- `type` as data
|
|
15
|
-
- small contracts as extension seams
|
|
16
|
-
- fixed-stage pipelines as orchestrators
|
|
17
|
-
|
|
18
|
-
Do not use:
|
|
19
|
-
|
|
20
|
-
- one mega interface with many optional methods
|
|
21
|
-
- open-ended plugin graphs
|
|
22
|
-
- process logic hidden behind global type switches
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 2. Repeated Pattern
|
|
27
|
-
|
|
28
|
-
For each process:
|
|
29
|
-
|
|
30
|
-
1. define a small context object
|
|
31
|
-
2. define a narrow contributor interface
|
|
32
|
-
3. register ordered contributors
|
|
33
|
-
4. let each contributor decide `appliesTo(...)`
|
|
34
|
-
5. keep one central orchestrator for stage order
|
|
35
|
-
|
|
36
|
-
This is the standard pattern to repeat across the codebase.
|
|
37
|
-
|
|
38
|
-
Contributor invariants:
|
|
39
|
-
|
|
40
|
-
1. registration is static and in-process only
|
|
41
|
-
2. ordering is deterministic
|
|
42
|
-
3. composition semantics are declared once per seam
|
|
43
|
-
4. execution is sequential by default
|
|
44
|
-
5. contributors do not dispatch into other registries directly
|
|
45
|
-
6. if a seam needs more machinery than this, it is probably too abstract
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 3. Pattern Catalog
|
|
50
|
-
|
|
51
|
-
## 3.1 Fixed-Stage Pipeline
|
|
52
|
-
|
|
53
|
-
Use when a process already has a clear top-down flow.
|
|
54
|
-
|
|
55
|
-
Examples:
|
|
56
|
-
|
|
57
|
-
- search
|
|
58
|
-
- improve
|
|
59
|
-
- indexing
|
|
60
|
-
|
|
61
|
-
Shape:
|
|
62
|
-
|
|
63
|
-
```ts
|
|
64
|
-
for (const stage of stages) {
|
|
65
|
-
for (const contributor of contributorsFor(stage)) {
|
|
66
|
-
if (!contributor.appliesTo(ctx)) continue;
|
|
67
|
-
contributor.run(ctx);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Why:
|
|
73
|
-
|
|
74
|
-
- preserves readability
|
|
75
|
-
- makes order explicit
|
|
76
|
-
- prevents plugin soup
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 3.2 Ordered Contributor Registry
|
|
81
|
-
|
|
82
|
-
Use when one stage needs several isolated policies.
|
|
83
|
-
|
|
84
|
-
Examples:
|
|
85
|
-
|
|
86
|
-
- ranking signals
|
|
87
|
-
- proposal validators
|
|
88
|
-
|
|
89
|
-
Shape:
|
|
90
|
-
|
|
91
|
-
```ts
|
|
92
|
-
interface Contributor<TContext> {
|
|
93
|
-
name: string;
|
|
94
|
-
order?: number;
|
|
95
|
-
appliesTo?(ctx: TContext): boolean;
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Why:
|
|
100
|
-
|
|
101
|
-
- testable in isolation
|
|
102
|
-
- easy to add behavior without editing the orchestrator
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## 3.3 Structural Contract
|
|
107
|
-
|
|
108
|
-
Use for stable physical concerns such as refs and paths.
|
|
109
|
-
|
|
110
|
-
Example:
|
|
111
|
-
|
|
112
|
-
- `PathResolver`
|
|
113
|
-
|
|
114
|
-
Why:
|
|
115
|
-
|
|
116
|
-
- storage layout is real and durable
|
|
117
|
-
- should not be mixed with ranking, rendering, or validation
|
|
118
|
-
|
|
119
|
-
Rule:
|
|
120
|
-
|
|
121
|
-
- keep structural contracts small and boring
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## 3.4 Classification As Facts
|
|
126
|
-
|
|
127
|
-
Classification should produce facts, not choose downstream behavior too early.
|
|
128
|
-
|
|
129
|
-
Good output:
|
|
130
|
-
|
|
131
|
-
- `type`
|
|
132
|
-
- `specificity`
|
|
133
|
-
- annotations or reasons
|
|
134
|
-
|
|
135
|
-
Avoid:
|
|
136
|
-
|
|
137
|
-
- coupling classification directly to renderer names or search policy
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## 3.5 Process-Local Validation
|
|
142
|
-
|
|
143
|
-
Validation belongs to the process that needs it.
|
|
144
|
-
|
|
145
|
-
Examples:
|
|
146
|
-
|
|
147
|
-
- proposal validation
|
|
148
|
-
- lint validation
|
|
149
|
-
- improve preflight validation
|
|
150
|
-
|
|
151
|
-
Avoid one shared validator that tries to know every process.
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## 3.6 One Pipeline, Many Signals
|
|
156
|
-
|
|
157
|
-
Search must remain one pipeline.
|
|
158
|
-
|
|
159
|
-
Use contributors for:
|
|
160
|
-
|
|
161
|
-
- exact-match boosts
|
|
162
|
-
- type preference boosts
|
|
163
|
-
- belief-state boosts
|
|
164
|
-
- graph boosts
|
|
165
|
-
- utility boosts
|
|
166
|
-
|
|
167
|
-
Do not create separate per-type scoring pipelines.
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## 3.7 Adapters Before Rewrites
|
|
172
|
-
|
|
173
|
-
First move existing behavior behind the new seam.
|
|
174
|
-
|
|
175
|
-
Only after parity is proven should behavior be reorganized.
|
|
176
|
-
|
|
177
|
-
Why:
|
|
178
|
-
|
|
179
|
-
- lower risk
|
|
180
|
-
- easier regression testing
|
|
181
|
-
- architectural progress without feature churn
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
## 3.8 Refactor-Only Safety Rule
|
|
186
|
-
|
|
187
|
-
When the work is explicitly architectural cleanup:
|
|
188
|
-
|
|
189
|
-
- no functionality changes
|
|
190
|
-
- all tests must pass with the same validation expectations
|
|
191
|
-
- the only allowed test edits are import-path or symbol-import updates caused by file moves
|
|
192
|
-
- do not rewrite assertions, fixtures, or expected outputs to accommodate the refactor
|
|
193
|
-
|
|
194
|
-
This keeps architectural cleanup separate from feature or bug-fix work.
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## 3.8a Non-goals
|
|
199
|
-
|
|
200
|
-
This pattern guide is **not** permission to:
|
|
201
|
-
|
|
202
|
-
1. build a framework
|
|
203
|
-
2. add complexity for its own sake
|
|
204
|
-
3. create registries everywhere by default
|
|
205
|
-
4. replace simple code with abstract dispatch when no real hotspot exists
|
|
206
|
-
5. introduce dynamic plugin systems or runtime discovery
|
|
207
|
-
6. change runtime behavior under the banner of refactoring
|
|
208
|
-
|
|
209
|
-
The purpose of these patterns is to remove concrete duplication and switchboard logic while keeping the system simpler to reason about than it is today.
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## 3.9 Execution Pipeline Contract
|
|
214
|
-
|
|
215
|
-
Every execution crosses the same plain functions:
|
|
216
|
-
|
|
217
|
-
1. `resolveExecution()` selects the engine (nearest layer, `defaults.engine`,
|
|
218
|
-
then the `opencode-sdk` fallback), merges the engine's defaults with the
|
|
219
|
-
caller's layers (nearest wins), expands a `models.json` alias once,
|
|
220
|
-
authorizes tools against `execution.allowedTools`, and returns the
|
|
221
|
-
`ResolvedExecutionRequestV1`, the engine's `RunnerSpec` with the request
|
|
222
|
-
applied, and per-field provenance. Credentials stay symbolic.
|
|
223
|
-
2. `buildExecution()` hands the request to the harness's own builder (derived
|
|
224
|
-
from `HARNESS_REGISTRY`), or builds chat messages for a direct LLM. A field
|
|
225
|
-
the transport cannot carry becomes a secret-free notice; a tool policy it
|
|
226
|
-
cannot enforce, or a denied tool selection, is a pre-dispatch error.
|
|
227
|
-
3. `buildExecutionFromWire()` does the same from a journaled
|
|
228
|
-
`{ request, runner }` without reading config, aliases, environment
|
|
229
|
-
variables, or credentials — workflow resume.
|
|
230
|
-
4. `runExecution()` reads credentials for the call, runs the agent CLI, the
|
|
231
|
-
OpenCode SDK, or the chat transport (an exhaustive switch over
|
|
232
|
-
`llm | agent | sdk`), and redacts every secret the child could have seen.
|
|
233
|
-
|
|
234
|
-
A prompt-free interactive native-agent launch (`akm agent`) resolves its
|
|
235
|
-
engine directly; it carries no request to build.
|
|
236
|
-
|
|
237
|
-
Diagnostic provenance is field metadata (`field`, `layer`, `kind`, `via`), not
|
|
238
|
-
resolved values or content. Lowering notices are secret-free records with a
|
|
239
|
-
fixed public vocabulary; arbitrary authored inference keys are represented by
|
|
240
|
-
wildcard field names rather than copied into diagnostics.
|
|
241
|
-
|
|
242
|
-
---
|
|
243
|
-
|
|
244
|
-
## 3.10 Session Log Harness Contract
|
|
245
|
-
|
|
246
|
-
Use one narrow raw-event ingestion seam for harness logs and session histories.
|
|
247
|
-
|
|
248
|
-
Rule:
|
|
249
|
-
|
|
250
|
-
1. harness adapters discover files and parse raw events
|
|
251
|
-
2. shared AKM logic performs normalization, fingerprinting, aggregation, and de-duplication
|
|
252
|
-
3. new harnesses should not require edits to shared unions or duplicated aggregation logic
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## 4. Implemented Contracts
|
|
257
|
-
|
|
258
|
-
**[0.9.0 change, ruled Q-06/Q-16]** This section previously listed twelve
|
|
259
|
-
"recommended" contracts; seven had no implementation anywhere in `src/`
|
|
260
|
-
(`PathResolver`, `MatchContributor`, `MetadataContributor`,
|
|
261
|
-
`LintContributor`, `ImproveContributor`, `IndexPostProcessor`,
|
|
262
|
-
`AgentRunner`) and were aspirational, not a contract any code followed.
|
|
263
|
-
Trimmed to the contributor contracts below. `SearchHitEnricher` and
|
|
264
|
-
`ActionContributor` were later folded into direct calls
|
|
265
|
-
(`src/indexer/search/search-hit-enrichers.ts`, `buildLocalAction` in
|
|
266
|
-
`src/indexer/search/db-search.ts`) — each had one implementation. The engine-owned
|
|
267
|
-
`AgentRequestLowerer` is the separate structural boundary documented in
|
|
268
|
-
§3.9, not a revival of the removed generic `AgentRunner`. See the [drift
|
|
269
|
-
register](../specs/0.9.0-docs-code-drift-register.md#q-16--functional-contract-patternsmd-4-aspiration-or-contract)
|
|
270
|
-
if a removed entry needs reviving; add it back only alongside a real
|
|
271
|
-
implementation.
|
|
272
|
-
|
|
273
|
-
## 4.1 `RankingContributor`
|
|
274
|
-
|
|
275
|
-
For search score adjustments and explanations.
|
|
276
|
-
|
|
277
|
-
## 4.2 `ProposalValidator`
|
|
278
|
-
|
|
279
|
-
For proposal acceptance checks.
|
|
280
|
-
|
|
281
|
-
## 4.3 `SessionLogHarness`
|
|
282
|
-
|
|
283
|
-
For raw session-log or history ingestion from external harnesses.
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## 5. What Stays Centralized
|
|
288
|
-
|
|
289
|
-
- source/provider model
|
|
290
|
-
- CLI command contracts
|
|
291
|
-
- DB schema and persistence boundaries
|
|
292
|
-
- write-target resolution
|
|
293
|
-
- search stage order
|
|
294
|
-
- final score normalization and clamping
|
|
295
|
-
- proposal storage
|
|
296
|
-
|
|
297
|
-
If these become pluggable, the system becomes harder to reason about.
|
|
298
|
-
|
|
299
|
-
---
|
|
300
|
-
|
|
301
|
-
## 6. What Gets Delegated
|
|
302
|
-
|
|
303
|
-
- heuristics
|
|
304
|
-
- enrichment
|
|
305
|
-
- validation rules
|
|
306
|
-
- process-specific side-effects
|
|
307
|
-
- applicability logic
|
|
308
|
-
- search explanations
|
|
309
|
-
|
|
310
|
-
If these stay centralized, switchboards keep growing.
|
|
311
|
-
|
|
312
|
-
---
|
|
313
|
-
|
|
314
|
-
## 7. Smells To Avoid
|
|
315
|
-
|
|
316
|
-
1. One large interface with many optional methods
|
|
317
|
-
2. Registries keyed only by `type`
|
|
318
|
-
3. Matching logic that also chooses presentation names
|
|
319
|
-
4. Renderers that also own indexing and search policy
|
|
320
|
-
5. Ad hoc per-command path lookup logic
|
|
321
|
-
6. Open-ended capability graphs with unclear precedence
|
|
322
|
-
7. Hidden special cases spread across callers instead of isolated behind one seam
|
|
323
|
-
8. Architectural cleanup that changes behavior or rewrites tests to fit the refactor
|
|
324
|
-
|
|
325
|
-
---
|
|
326
|
-
|
|
327
|
-
## 8. Review Checklist
|
|
328
|
-
|
|
329
|
-
When adding a new seam, ask:
|
|
330
|
-
|
|
331
|
-
1. Is this a stable process boundary?
|
|
332
|
-
2. Can the contributor be tested in isolation?
|
|
333
|
-
3. Does orchestration remain readable top-down?
|
|
334
|
-
4. Is ordering explicit?
|
|
335
|
-
5. Is `type` only an input, not the behavior object?
|
|
336
|
-
6. Can existing behavior be adapted before rewriting it?
|
|
337
|
-
7. Is this a refactor-only change with behavior preserved?
|
|
338
|
-
8. Does onboarding a new external harness require only one narrow adapter?
|
|
339
|
-
|
|
340
|
-
If the answer is no to several of these, the abstraction is probably too large.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# Registry network boundary
|
|
2
|
-
|
|
3
|
-
All HTTP(S) traffic used to discover or install registry content passes
|
|
4
|
-
through `fetchRegistry` / `fetchRegistryJson` in `src/registry/network.ts`.
|
|
5
|
-
The boundary is plain `fetch()` plus a request timeout, bounded retries on
|
|
6
|
-
network failure / timeout / 429 / 5xx (honoring a capped `Retry-After`), a
|
|
7
|
-
byte cap on the response body, and classified errors: a request that fails
|
|
8
|
-
after retries, or whose body can't be used, always leaves as an `AkmError` —
|
|
9
|
-
never a raw, unclassified exit 70.
|
|
10
|
-
|
|
11
|
-
- Not found / unusable response (HTTP 404/410, or a body that isn't valid
|
|
12
|
-
JSON / isn't shaped as expected) -> `NotFoundError` (exit 1).
|
|
13
|
-
- Every other non-2xx status, and connection failure / timeout after retries
|
|
14
|
-
are exhausted -> `TransientError` (`REGISTRY_UNREACHABLE`, exit 75).
|
|
15
|
-
- A malformed registry URL, an embedded `user:pass@`, or a non-http(s) scheme
|
|
16
|
-
-> `ConfigError` (`REGISTRY_URL_INVALID`, exit 78).
|
|
17
|
-
|
|
18
|
-
Callers: `src/registry/providers/static-index.ts`, `providers/skills-sh.ts`,
|
|
19
|
-
`src/registry/resolve.ts` (npm and GitHub metadata), `src/setup/registry-stash-loader.ts`,
|
|
20
|
-
and `src/sources/providers/provider-utils.ts`'s `downloadArchive` (npm tarball
|
|
21
|
-
download, used by `sources/providers/npm.ts`). Credentials (a resolved GitHub
|
|
22
|
-
token, etc.) are injected by the caller as ordinary `headers` on the request —
|
|
23
|
-
this module does not resolve credentials itself. HTTPS is not required by
|
|
24
|
-
`fetchRegistry` itself: `--allow-insecure-transport`/HTTPS enforcement happens
|
|
25
|
-
once, where a URL enters configuration (`akm registry add`, `akm bundle add`),
|
|
26
|
-
per `AGENTS.md`'s "Unsafe CLI overrides" policy.
|
|
27
|
-
|
|
28
|
-
## What this boundary does *not* do
|
|
29
|
-
|
|
30
|
-
Earlier releases pinned every registry request's DNS resolution: they
|
|
31
|
-
resolved and classified the hostname's A/AAAA answers, rejected loopback /
|
|
32
|
-
private / link-local / cloud-metadata / reserved addresses, connected to the
|
|
33
|
-
one validated numeric address (never re-resolving at connect time), and
|
|
34
|
-
re-validated on every retry and redirect hop. Because Bun's fetch client
|
|
35
|
-
cannot pin a TLS connection to a literal address while retaining SNI, that
|
|
36
|
-
DNS-pinned transport spawned a short-lived Node child process per request to
|
|
37
|
-
do the actual connect, over a bounded stdin/stdout framing protocol.
|
|
38
|
-
|
|
39
|
-
That pinning, and the subprocess that implemented it
|
|
40
|
-
(`pinned-transport.ts`, `pinned-request-helper.ts`), were deleted as
|
|
41
|
-
over-engineering for this codebase's actual threat model: registry URLs are
|
|
42
|
-
either the built-in registry or a URL an operator explicitly configured
|
|
43
|
-
(`akm registry add`, `AKM_REGISTRY_URL`, `AKM_NPM_REGISTRY`) — a deliberate
|
|
44
|
-
human command, not third-party input akm fetches on an untrusted caller's
|
|
45
|
-
behalf (see `AGENTS.md`'s "Defensive Code" test 3). The subprocess-per-request
|
|
46
|
-
design was also the direct cause of registry network failures surfacing as an
|
|
47
|
-
unclassified exit 70 instead of a typed error, a symptom fixed repeatedly
|
|
48
|
-
before this simplification (see CHANGELOG history around the registry HTTP
|
|
49
|
-
stack). `src/core/network-policy.ts`'s address classifier is unrelated to this
|
|
50
|
-
boundary now; it still backs the `website` source provider's own SSRF guard
|
|
51
|
-
(`src/sources/snapshot-fetchers/host-guard.ts`), which fetches arbitrary
|
|
52
|
-
operator-pasted URLs and keeps its own justification for that guard.
|
|
53
|
-
|
|
54
|
-
Registry-derived `source: git` entries are still rejected before an install
|
|
55
|
-
ref can reach `git ls-remote` or clone — that check lives in
|
|
56
|
-
`src/registry/providers/static-index.ts` and is independent of the network
|
|
57
|
-
boundary.
|
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
# Search Architecture
|
|
2
|
-
|
|
3
|
-
Search uses a multi-signal scoring pipeline combining lexical matching, semantic
|
|
4
|
-
similarity, and relevance boosts to find the most useful assets for a query.
|
|
5
|
-
|
|
6
|
-
## Pipeline Overview
|
|
7
|
-
|
|
8
|
-
```
|
|
9
|
-
Query
|
|
10
|
-
│
|
|
11
|
-
├─ FTS5 (lexical) ──────────────┐
|
|
12
|
-
│ Multi-column BM25 with │
|
|
13
|
-
│ field weighting │ Normalize + combine
|
|
14
|
-
│ ├──────────────────────── Score + Boost ── Sort ── Return
|
|
15
|
-
└─ Vector (semantic) ───────────┘ 0.7 FTS │
|
|
16
|
-
Cosine similarity, exact 0.3 Vec │
|
|
17
|
-
scan of stored vectors │
|
|
18
|
-
│
|
|
19
|
-
Boosts applied:
|
|
20
|
-
• exact name match
|
|
21
|
-
• type relevance
|
|
22
|
-
• tag/alias/hint match
|
|
23
|
-
• description match
|
|
24
|
-
• metadata quality
|
|
25
|
-
• usage history (M-2)
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Indexed Search (primary)
|
|
29
|
-
|
|
30
|
-
When an index exists (`~/.local/share/akm/index.db`), local search uses two
|
|
31
|
-
ranking signals:
|
|
32
|
-
|
|
33
|
-
### 1. FTS5 (lexical)
|
|
34
|
-
|
|
35
|
-
SQLite full-text search with Porter stemming, using **multi-column field
|
|
36
|
-
weighting**. The FTS5 table has separate columns for different metadata fields,
|
|
37
|
-
each weighted differently in the BM25 scoring:
|
|
38
|
-
|
|
39
|
-
| Column | BM25 Weight | Contents |
|
|
40
|
-
| --- | --- | --- |
|
|
41
|
-
| `name` | 10.0 | Asset name |
|
|
42
|
-
| `description` | 5.0 | Description text |
|
|
43
|
-
| `tags` | 3.0 | Tags and aliases |
|
|
44
|
-
| `hints` | 2.0 | Search hints and examples |
|
|
45
|
-
| `content` | 1.0 | bounded body projection, TOC headings, parameters |
|
|
46
|
-
|
|
47
|
-
A name match is weighted 10x higher than a content match. This ensures that
|
|
48
|
-
searching "docker" ranks the `docker-homelab` skill above a knowledge doc that
|
|
49
|
-
merely mentions Docker in its table of contents.
|
|
50
|
-
|
|
51
|
-
**Progressive fallback:** Search runs strict AND, then prefix-AND, then one
|
|
52
|
-
OR/prefix-OR recovery only if both strict forms return no candidates. Unicode
|
|
53
|
-
letter/number tokens are deduplicated and capped; callers do not strip
|
|
54
|
-
stopwords or maintain separate result collections.
|
|
55
|
-
|
|
56
|
-
**`matchStage`:** Each hit that has an FTS component reports which rung of
|
|
57
|
-
the ladder produced it via `matchStage`: `"exact"` (strict AND), `"prefix"`
|
|
58
|
-
(prefix AND), or `"relaxed"` (OR/prefix-OR recovery). The field is omitted
|
|
59
|
-
for hits with no FTS contribution (e.g. a pure-semantic hybrid match) and for
|
|
60
|
-
hits that never go through the lexical ladder (registry/browse hits). Because
|
|
61
|
-
the ladder stops at the first non-empty stage, all FTS-only hits in a single
|
|
62
|
-
response share one stage; in `hybrid` ranking mode a response can legitimately
|
|
63
|
-
mix hits that carry `matchStage` with hits that omit it.
|
|
64
|
-
|
|
65
|
-
### 2. Semantic (vector)
|
|
66
|
-
|
|
67
|
-
Cosine similarity between query embedding and stored entry embeddings.
|
|
68
|
-
Requires an embedding model — either the declared external
|
|
69
|
-
`@huggingface/transformers` dependency (default model
|
|
70
|
-
`bge-small-en-v1.5`) or a remote OpenAI-compatible endpoint. AKM imports the
|
|
71
|
-
package directly and does not copy, wrap, alias, or hash a second runtime under
|
|
72
|
-
`src/` or `dist/`. Dependency installation and platform support remain the
|
|
73
|
-
upstream package manager's responsibility. Users who need a different runtime
|
|
74
|
-
or native/GPU-class throughput can configure a remote embedding endpoint.
|
|
75
|
-
|
|
76
|
-
An LRU cache (100 entries) avoids redundant embedding computation for repeated
|
|
77
|
-
queries.
|
|
78
|
-
|
|
79
|
-
Query-time semantic failure is not conflated with configured keyword search.
|
|
80
|
-
FTS still serves the request, while `searchMode: "fts-fallback"` and one
|
|
81
|
-
sanitized warning name the normalized endpoint without URL userinfo, query
|
|
82
|
-
parameters, fragments, API keys, or raw runtime error text. Curate deduplicates
|
|
83
|
-
that warning across its internal fallback queries. `searchMode: "keyword"`
|
|
84
|
-
means no ready semantic attempt failed for this request.
|
|
85
|
-
|
|
86
|
-
### Score Normalization
|
|
87
|
-
|
|
88
|
-
FTS5 BM25 scores are negative (lower = better match). They are normalized to
|
|
89
|
-
a **0.3–1.0 range** using min-max normalization across the result set:
|
|
90
|
-
|
|
91
|
-
- Best FTS match → 1.0
|
|
92
|
-
- Worst FTS match → 0.3 (floor prevents zero-score entries)
|
|
93
|
-
|
|
94
|
-
When vector search is also active, scores are combined with weighted addition:
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
base_score = 0.7 × normalized_bm25 + 0.3 × cosine_similarity
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
**Design decision — why not RRF?** An earlier version used Reciprocal Rank
|
|
101
|
-
Fusion (RRF) to merge FTS and vector results. RRF uses rank positions instead
|
|
102
|
-
of raw scores, which avoids scale mismatch but destroys score differentiation.
|
|
103
|
-
With RRF (K=60), the best result scores 1/61 = 0.0164 and the 5th result
|
|
104
|
-
scores 1/65 = 0.0154 — a 6% difference that makes all results look equally
|
|
105
|
-
relevant. Normalized BM25 + weighted combination preserves the actual relevance
|
|
106
|
-
signal: the best match might score 1.0 while the 5th scores 0.45 — a 55%
|
|
107
|
-
difference that enables meaningful ranking. See the
|
|
108
|
-
[Scoring Design](#scoring-design) section below for the full rationale.
|
|
109
|
-
|
|
110
|
-
## Scoring Design
|
|
111
|
-
|
|
112
|
-
After normalization, multiplicative boosts are applied in a single pass:
|
|
113
|
-
|
|
114
|
-
```
|
|
115
|
-
final_score = base_score × (1 + sum_of_boosts)
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Boost signals (ordered by strength)
|
|
119
|
-
|
|
120
|
-
| Signal | Boost | When it fires |
|
|
121
|
-
| --- | --- | --- |
|
|
122
|
-
| Exact name match | +2.0 | Query exactly equals the asset's base name |
|
|
123
|
-
| Alias exact match | +1.5 | Query exactly matches a defined alias |
|
|
124
|
-
| Near-exact name | +1.0 | Query is a substring of the name or vice versa |
|
|
125
|
-
| Name token overlap | +0.3/token (max 0.9) | Individual query tokens found in name |
|
|
126
|
-
| Type: skill | +0.4 | Asset is a skill |
|
|
127
|
-
| Type: command / workflow | +0.35 | Asset is a command or workflow |
|
|
128
|
-
| Type: agent | +0.3 | Asset is an agent |
|
|
129
|
-
| Type: knowledge / fact / instruction | +0.22 | Asset is a knowledge doc, fact, or project instruction file |
|
|
130
|
-
| Type: script | +0.2 | Asset is a script |
|
|
131
|
-
| Type: memory | -0.02 | Asset is a memory (slight demotion) |
|
|
132
|
-
| Tag exact match | +0.15/tag (max 0.3) | Query token exactly matches a tag |
|
|
133
|
-
| All-token description | +0.25 | Every query token appears in description |
|
|
134
|
-
| Partial description | +0.1 | Some query tokens in description |
|
|
135
|
-
| Search hint match | +0.12/hint (max 0.24) | Query token found in a search hint |
|
|
136
|
-
| Alias token match | +0.3 | Query token found in any alias |
|
|
137
|
-
| Curated metadata | +0.05 | Non-generated metadata (quality signal) |
|
|
138
|
-
| Confidence | up to +0.05 | Based on metadata source reliability |
|
|
139
|
-
| Usage history (M-2) | up to +0.5 (capped 1.5×) | Utility score from usage telemetry |
|
|
140
|
-
|
|
141
|
-
### Design principles
|
|
142
|
-
|
|
143
|
-
**Exact name match is the strongest signal.** If a user types "docker-homelab",
|
|
144
|
-
the asset named `docker-homelab` must rank first with a decisive score gap.
|
|
145
|
-
This is the single most predictable and important ranking behavior.
|
|
146
|
-
|
|
147
|
-
**Actionable assets rank above reference material.** Skills, commands, and
|
|
148
|
-
agents are things you can execute or dispatch. Knowledge docs are reference
|
|
149
|
-
material — valuable but secondary when a user is searching for something to
|
|
150
|
-
use. The type boost encodes this hierarchy.
|
|
151
|
-
|
|
152
|
-
**Author-curated signals are stronger than auto-generated ones.** Tags,
|
|
153
|
-
aliases, and search hints are explicitly chosen by the asset author. They
|
|
154
|
-
carry more intent than terms that happen to appear in file content.
|
|
155
|
-
|
|
156
|
-
**Boosts are multiplicative on the base score.** This means a high base score
|
|
157
|
-
(strong FTS match) amplified by boosts produces a much larger gap than a low
|
|
158
|
-
base score with the same boosts. Highly relevant assets separate clearly from
|
|
159
|
-
marginally relevant ones.
|
|
160
|
-
|
|
161
|
-
### Worked example
|
|
162
|
-
|
|
163
|
-
Query: `"docker homelab"` → asset: `skills/docker-homelab`
|
|
164
|
-
|
|
165
|
-
```
|
|
166
|
-
Base BM25 (normalized): 1.0 (best FTS match in result set)
|
|
167
|
-
+ Name token overlap: +0.6 (2 tokens match: "docker", "homelab")
|
|
168
|
-
+ Type boost (skill): +0.4
|
|
169
|
-
+ Tag exact match: +0.3 (tags "docker" and "homelab" both match)
|
|
170
|
-
+ Alias token match: +0.3 (alias "docker-compose" contains "docker")
|
|
171
|
-
+ Search hint match: +0.24 (hints contain "docker" and "homelab")
|
|
172
|
-
+ All-token description: +0.25 (all query tokens in description)
|
|
173
|
-
+ Curated quality: +0.05
|
|
174
|
-
─────────────────────────────
|
|
175
|
-
BoostSum: 2.14
|
|
176
|
-
Final score: 1.0 × (1 + 2.14) = 3.14
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Compare to a sub-reference knowledge doc for the same query:
|
|
180
|
-
|
|
181
|
-
```
|
|
182
|
-
Base BM25 (normalized): 0.85 (good FTS match but not the best)
|
|
183
|
-
+ Name token overlap: +0.3 (1 token "homelab" in path-derived name)
|
|
184
|
-
+ Type boost: +0.0 (knowledge docs get no type boost)
|
|
185
|
-
+ Tag match: +0.15 (1 tag matches)
|
|
186
|
-
─────────────────────────────
|
|
187
|
-
BoostSum: 0.45
|
|
188
|
-
Final score: 0.85 × (1 + 0.45) = 1.23
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
The skill scores 3.14 vs the sub-reference at 1.23 — a 2.6× gap that clearly
|
|
192
|
-
communicates which result is more useful.
|
|
193
|
-
|
|
194
|
-
## Result Merging
|
|
195
|
-
|
|
196
|
-
There is one scoring pipeline because there is one data store. All sources —
|
|
197
|
-
filesystem, git, website, npm — are materialised to local directories and
|
|
198
|
-
indexed together. The indexer holds every searchable asset, so source results
|
|
199
|
-
do not need cross-merging.
|
|
200
|
-
|
|
201
|
-
### Source + registry results (`--from all`)
|
|
202
|
-
|
|
203
|
-
When registry results (static-index, skills.sh) are included:
|
|
204
|
-
|
|
205
|
-
- Source hits and registry hits stay in **separate response fields**:
|
|
206
|
-
`hits` and `registryHits`
|
|
207
|
-
- Registry results are never rank-merged into `hits`
|
|
208
|
-
- Registry raw scores (which may be on a 0-100 scale) do not leak through
|
|
209
|
-
|
|
210
|
-
## Substring Fallback
|
|
211
|
-
|
|
212
|
-
When no index is available, search falls back to scanning the primary bundle
|
|
213
|
-
and installed bundle roots, filtering by substring match. This ensures search
|
|
214
|
-
always works, even before `akm index` has been run.
|
|
215
|
-
|
|
216
|
-
## Output Modes
|
|
217
|
-
|
|
218
|
-
### Standard output
|
|
219
|
-
|
|
220
|
-
By default (`--format json`, `--detail brief`), search emits minimal fields:
|
|
221
|
-
`type`, `name`, `ref`, `action`, and `estimatedTokens`.
|
|
222
|
-
|
|
223
|
-
`--detail normal` emits `type`, `name`, `description`, `action`, `score`, and
|
|
224
|
-
`estimatedTokens`, plus optional warning, quality, or env-key fields.
|
|
225
|
-
`--detail full` adds `whyMatched`, `origin`, `path`, and timing data.
|
|
226
|
-
|
|
227
|
-
### Agent-optimized output
|
|
228
|
-
|
|
229
|
-
For each materialized local hit, `--detail agent` includes `name`, canonical
|
|
230
|
-
`ref`, `type`, absolute `path`, current-policy `editable`, `description`,
|
|
231
|
-
`action`, `score`, and optional `estimatedTokens`/env keys. `editHint` appears
|
|
232
|
-
only when `editable` is `false`. The hint is supplemental: `action` remains the
|
|
233
|
-
normal show, run, or use action. Registry-only hits do not acquire local access
|
|
234
|
-
fields.
|
|
235
|
-
|
|
236
|
-
`--format jsonl` outputs one JSON object per line for streaming consumption.
|
|
237
|
-
|
|
238
|
-
## Explainability
|
|
239
|
-
|
|
240
|
-
`whyMatched` explains which signals contributed to a hit's ranking. Examples:
|
|
241
|
-
|
|
242
|
-
- `"exact name match"` — query matched the asset name exactly
|
|
243
|
-
- `"skill type boost"` — asset is a skill (actionable)
|
|
244
|
-
- `"matched tags"` — query token matched a tag
|
|
245
|
-
- `"near-exact name match"` — query is a substring of the name
|
|
246
|
-
- `"usage history boost"` — utility score from M-2 telemetry
|
|
247
|
-
|
|
248
|
-
Visible in `--detail full` output.
|