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
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* A native akm workflow bundle: Markdown workflow sources.
|
|
8
8
|
*
|
|
9
|
-
* ── validate
|
|
9
|
+
* ── validate ──
|
|
10
10
|
*
|
|
11
11
|
* Reuses the akm adapter's per-type workflow checks (shared base checks +
|
|
12
12
|
* `placeholder-stub` + `invalid-workflow-structure`). Delegates to the SAME
|
|
@@ -37,8 +37,8 @@ function isReservedDocFile(fileName) {
|
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Recognition gate: any `.md` file in this bundle IS a workflow (this
|
|
40
|
-
* adapter's entire domain is workflows
|
|
41
|
-
*
|
|
40
|
+
* adapter's entire domain is workflows), UNLESS its frontmatter declares a
|
|
41
|
+
* DIFFERENT non-empty
|
|
42
42
|
* `type:` (an explicit opt-out, e.g. a README-shaped doc that wants to be
|
|
43
43
|
* something else). No content sniffing.
|
|
44
44
|
*/
|
|
@@ -114,8 +114,8 @@ async function validate(c, changes, ctx) {
|
|
|
114
114
|
* looksLikeRoot). Unlike `isWorkflowFile` (which admits an absent `type:` —
|
|
115
115
|
* the lenient default ONCE a source is already known to be this bundle),
|
|
116
116
|
* this requires an EXPLICIT `type: workflow` — the install-time probe is
|
|
117
|
-
* choosing WHICH adapter owns an unconfigured root among several candidates
|
|
118
|
-
*
|
|
117
|
+
* choosing WHICH adapter owns an unconfigured root among several candidates,
|
|
118
|
+
* and an incidental `.md` with no frontmatter type at all
|
|
119
119
|
* (common in an OKF or llm-wiki bundle) must not misclassify that root as
|
|
120
120
|
* akm-workflow's.
|
|
121
121
|
*/
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* The `claude` tool-directory adapter — akm 0.9.0 format-family work item (#46).
|
|
6
6
|
*
|
|
7
|
-
* Recognizes a Claude Code `.claude` layout (
|
|
7
|
+
* Recognizes a Claude Code `.claude` layout (real-world:
|
|
8
8
|
* https://code.claude.com/docs/en/claude-directory): a root `CLAUDE.md` →
|
|
9
9
|
* `instruction`, `commands/*.md` → `command`, `agents/*.md` → `agent`,
|
|
10
10
|
* `skills/<name>/SKILL.md` → `skill` (item = the dir; bundled resources abstain),
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* The `dotenv` adapter — akm 0.9.0 format-family work item (#46).
|
|
6
6
|
*
|
|
7
|
-
* A metadata-only env/secret bundle
|
|
7
|
+
* A metadata-only env/secret bundle. REDACTION IS
|
|
8
8
|
* A HARD CONTRACT keyed on the ADAPTER, never on the open `type` value (a
|
|
9
9
|
* frontmatter `type:` cannot opt out):
|
|
10
10
|
* - `env/*.env` → `type: env` — only the KEY NAMES are surfaced (on `hints`);
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* conceptId: env strips `.env`; secret keeps its natural path (including any
|
|
17
17
|
* extension). Neither branch ever writes a value onto the emitted document.
|
|
18
18
|
*
|
|
19
|
-
* ── validate
|
|
19
|
+
* ── validate ──
|
|
20
20
|
*
|
|
21
21
|
* The dangerous-key scan (`dangerous-env-key`), reusing the akm adapter's
|
|
22
22
|
* `dangerousEnvKeyDiagnostics` — which preserves the code-grounded narrowness:
|
|
@@ -31,6 +31,7 @@ import fs from "node:fs";
|
|
|
31
31
|
import path from "node:path";
|
|
32
32
|
import { assetPathCandidatesForName, typeForStashDir } from "../../asset/asset-placement.js";
|
|
33
33
|
import { scanEnvKeyNames, toPosix } from "../../common.js";
|
|
34
|
+
import { sensitiveMarkerPath } from "../../sensitive-marker-path.js";
|
|
34
35
|
import { dangerousEnvKeyDiagnostics } from "./akm-lint.js";
|
|
35
36
|
import { hashContent } from "./shared.js";
|
|
36
37
|
/** A dotenv bundle is single-component; its one component is `main`. */
|
|
@@ -39,7 +40,7 @@ const COMPONENT_ID = "main";
|
|
|
39
40
|
const ENV_DIR = "env";
|
|
40
41
|
/** The `secrets/` content subdir (whole-file secrets). */
|
|
41
42
|
const SECRETS_DIR = "secrets";
|
|
42
|
-
/** Non-secret marker suffixes under `secrets
|
|
43
|
+
/** Non-secret marker suffixes under `secrets/`. */
|
|
43
44
|
const SECRET_SKIP_SUFFIXES = [".lock", ".sensitive"];
|
|
44
45
|
/** Classify a component-root-relative file as env / secret, or null (abstain). */
|
|
45
46
|
function classify(relPath) {
|
|
@@ -73,7 +74,7 @@ function classify(relPath) {
|
|
|
73
74
|
* disagreed about a documented promise.
|
|
74
75
|
*/
|
|
75
76
|
function hasSensitiveMarker(absPath, type) {
|
|
76
|
-
const marker = type === "env" ?
|
|
77
|
+
const marker = sensitiveMarkerPath(absPath, type === "env" ? "env" : "secret");
|
|
77
78
|
return marker !== absPath && fs.existsSync(marker);
|
|
78
79
|
}
|
|
79
80
|
function conceptIdForPath(type, relativePath) {
|
|
@@ -167,8 +168,8 @@ export const dotenvAdapter = {
|
|
|
167
168
|
return [];
|
|
168
169
|
const primaries = assetPathCandidatesForName(type, path.join(c.root, head), rest);
|
|
169
170
|
const expanded = primaries.flatMap((primary) => type === "env"
|
|
170
|
-
? [primary, primary
|
|
171
|
-
: [primary,
|
|
171
|
+
? [primary, sensitiveMarkerPath(primary, "env")]
|
|
172
|
+
: [primary, sensitiveMarkerPath(primary, "secret"), `${primary}.lock`]);
|
|
172
173
|
return expanded.map((candidatePath) => ({ path: candidatePath, conceptId: posix }));
|
|
173
174
|
},
|
|
174
175
|
/** The dotenv bundle owns its `env/` + `secrets/` dirs. */
|
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* The `generic-files` adapter — akm 0.9.0 format-family work item (#46).
|
|
6
6
|
*
|
|
7
|
-
* The AKM-native FALLBACK family
|
|
8
|
-
* extension
|
|
7
|
+
* The AKM-native FALLBACK family. Any leftover file is classified by
|
|
8
|
+
* extension:
|
|
9
9
|
* - a SCRIPT_EXTENSIONS extension → `script` (conceptId KEEPS the extension);
|
|
10
10
|
* - markdown / plain-text → `document` (conceptId STRIPS the extension);
|
|
11
11
|
* - everything else → `file` (conceptId keeps the extension).
|
|
12
12
|
* Placement is IDENTITY: `document` appends `.md`, `script`/`file` keep their
|
|
13
|
-
* natural path.
|
|
13
|
+
* natural path. Reserved files (`index.md`/`log.md`) are excluded from the
|
|
14
14
|
* catch-all so a structural listing is never indexed as a `document`.
|
|
15
15
|
*
|
|
16
|
-
* EXPLICIT-CONFIG ONLY: `generic-files` is never in the
|
|
16
|
+
* EXPLICIT-CONFIG ONLY: `generic-files` is never in the auto-probe order —
|
|
17
17
|
* a user opts in deliberately — so `looksLikeRoot` NEVER fires. It has no
|
|
18
18
|
* type-specific validators (`validate` runs base checks only).
|
|
19
19
|
*
|
|
@@ -83,7 +83,7 @@ async function validate(c, changes, ctx) {
|
|
|
83
83
|
const raw = change.after ?? (await ctx.readFile(change.path));
|
|
84
84
|
if (typeof raw !== "string")
|
|
85
85
|
continue;
|
|
86
|
-
// No type-specific validators — base checks only
|
|
86
|
+
// No type-specific validators — base checks only.
|
|
87
87
|
diagnostics.push(...(await runBaseValidateChecks(toPosix(change.path), parseFrontmatter(raw), c.root, ctx)));
|
|
88
88
|
}
|
|
89
89
|
return diagnostics;
|
|
@@ -39,12 +39,11 @@ export { okfAdapter } from "./okf-adapter.js";
|
|
|
39
39
|
export { opencodeAdapter } from "./opencode-adapter.js";
|
|
40
40
|
export { websiteSnapshotAdapter } from "./website-snapshot-adapter.js";
|
|
41
41
|
/**
|
|
42
|
-
* Every built-in adapter, frozen in the
|
|
42
|
+
* Every built-in adapter, frozen in the install-time probe order: the first
|
|
43
43
|
* adapter whose `looksLikeRoot` fires claims a root, so MORE-SPECIFIC probes
|
|
44
44
|
* come FIRST. This ARRAY ORDER is the executable probe order (`getAdapters()`
|
|
45
45
|
* returns it verbatim) and is pinned by the conformance suite's ordered-owner
|
|
46
|
-
* matrix
|
|
47
|
-
* for the implemented 11-family set.
|
|
46
|
+
* matrix, and is authoritative for the implemented 11-family set.
|
|
48
47
|
*
|
|
49
48
|
* Probe-precedence rationale (grounds "cannot shadow the existing three"):
|
|
50
49
|
*
|
|
@@ -63,7 +62,7 @@ export { websiteSnapshotAdapter } from "./website-snapshot-adapter.js";
|
|
|
63
62
|
* package), `akm-workflow` (a workflow-shaped top-level file), and `akm-task`
|
|
64
63
|
* (a schedule-bearing top-level `.yml`) carry disjoint, specific markers that
|
|
65
64
|
* fire on none of the other roots; they come at the front for clarity.
|
|
66
|
-
* - `generic-files` is EXPLICIT-CONFIG ONLY
|
|
65
|
+
* - `generic-files` is EXPLICIT-CONFIG ONLY — its `looksLikeRoot` never
|
|
67
66
|
* fires — so it is LAST and can never shadow anything.
|
|
68
67
|
*/
|
|
69
68
|
export const BUILTIN_ADAPTERS = Object.freeze([
|
|
@@ -2,14 +2,12 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* The first-class `llm-wiki` adapter
|
|
5
|
+
* The first-class `llm-wiki` adapter.
|
|
6
6
|
*
|
|
7
|
-
* The `wiki` ASSET-TYPE
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
11
|
-
* (llm-wiki row), §6 (wiki-page row), §0.2 (the `wiki` asset-type is retired;
|
|
12
|
-
* the adapter is first-class), §1.2 (probe = schema.md + pages/), §9 (links).
|
|
7
|
+
* The `wiki` ASSET-TYPE is retired, but the LLM Wiki structure stays first-class
|
|
8
|
+
* as its OWN adapter: a `BundleAdapter` carrying the native wiki semantics
|
|
9
|
+
* (probe = schema.md + pages/, wiki-page recognition, links) that the retired
|
|
10
|
+
* `src/wiki/` module used to own.
|
|
13
11
|
*
|
|
14
12
|
* Conformance oracle (authored, DO NOT modify): fixture
|
|
15
13
|
* `tests/fixtures/bundles/llm-wiki/` + goldens
|
|
@@ -17,7 +15,7 @@
|
|
|
17
15
|
* The adapter is built to MATCH those goldens (driven by
|
|
18
16
|
* `tests/core/adapter/llm-wiki-adapter.test.ts`).
|
|
19
17
|
*
|
|
20
|
-
* ── Structure
|
|
18
|
+
* ── Structure ──
|
|
21
19
|
*
|
|
22
20
|
* - `schema.md` / `index.md` / `log.md` at the wiki ROOT are RESERVED
|
|
23
21
|
* (recognized, never indexed as concepts) — analogous to OKF's index.md/log.md.
|
|
@@ -31,24 +29,24 @@
|
|
|
31
29
|
* - Anything else (root README, stray root `.md`, other dirs) is NOT a wiki
|
|
32
30
|
* asset (`recognize` abstains) — pages live under `pages/`.
|
|
33
31
|
*
|
|
34
|
-
* ── Links / citations
|
|
32
|
+
* ── Links / citations ──
|
|
35
33
|
*
|
|
36
34
|
* A page's `IndexDocument.links` = its resolved `xrefs:` frontmatter (the
|
|
37
35
|
* `wiki:<name>/<conceptId>` form, stripped to the target conceptId) PLUS its
|
|
38
36
|
* body bundle-relative markdown links, deduped, first-appearance order. Its
|
|
39
37
|
* `sources:` frontmatter resolves to the cited raw conceptIds (citation edges),
|
|
40
|
-
* carried on `documentJson` (adapter extras
|
|
38
|
+
* carried on `documentJson` (adapter extras) and consumed by the
|
|
41
39
|
* uncited-raw lint check.
|
|
42
40
|
*
|
|
43
|
-
* ── validate
|
|
41
|
+
* ── validate — native wiki checks ONLY ──
|
|
44
42
|
*
|
|
45
43
|
* The native structural checks ported from the retired `src/wiki/` module's
|
|
46
44
|
* `lintWiki`: `broken-xref`
|
|
47
45
|
* (an xref target that does not resolve to an existing page), `uncited-raw`
|
|
48
46
|
* (a `raw/` source not cited by any page's `sources:`), `missing-description`
|
|
49
47
|
* (a page with no description), and `broken-source` (a page `sources:` entry
|
|
50
|
-
* with no matching raw file). Broken xrefs are TOLERATED (warning, non-blocking
|
|
51
|
-
*
|
|
48
|
+
* with no matching raw file). Broken xrefs are TOLERATED (warning, non-blocking).
|
|
49
|
+
* The shared `runBaseValidateChecks` (unquoted-colon / missing-updated
|
|
52
50
|
* / stale-path / missing-ref) is NOT run: wiki files never carry an `updated`
|
|
53
51
|
* field, so `missing-updated` would fire on every page/reserved file and
|
|
54
52
|
* contradict the lint golden's clean result — the native checks are the wiki's
|
|
@@ -82,7 +80,7 @@ const WIKI_COMPONENT_ID = "main";
|
|
|
82
80
|
const WIKI_SOURCE_TYPE = "wiki-source";
|
|
83
81
|
/** Default open `type` for a `pages/` file whose frontmatter carries no `pageKind`. */
|
|
84
82
|
const DEFAULT_PAGE_KIND = "note";
|
|
85
|
-
/** Reserved wiki files (case-insensitive) at the wiki ROOT — recognized, never indexed as concepts
|
|
83
|
+
/** Reserved wiki files (case-insensitive) at the wiki ROOT — recognized, never indexed as concepts. */
|
|
86
84
|
const RESERVED_ROOT_FILES = new Set(["schema.md", "index.md", "log.md"]);
|
|
87
85
|
/** Content subdirectory holding immutable ingested sources. */
|
|
88
86
|
const RAW_SUBDIR = "raw";
|
|
@@ -2,30 +2,28 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* The reference `okf` adapter
|
|
5
|
+
* The reference `okf` adapter.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* directory gate) EXACTLY. This is pure OKF: `type` from frontmatter, identity
|
|
10
|
-
* from path, no directory routing anywhere.
|
|
7
|
+
* Pure OKF: `type` is read FROM FRONTMATTER, with NO directory gate; identity
|
|
8
|
+
* is from path; there is no directory routing anywhere.
|
|
11
9
|
*
|
|
12
|
-
* - recognize
|
|
10
|
+
* - recognize: any `.md` NOT named `index.md`/`log.md` (case-insensitive,
|
|
13
11
|
* reserved) → one concept. `type` = frontmatter `type` when a non-empty
|
|
14
12
|
* string, else the `knowledge` default. conceptId = the concept's path
|
|
15
|
-
* within the component root minus `.md`. The OKF field projection
|
|
13
|
+
* within the component root minus `.md`. The OKF field projection:
|
|
16
14
|
* name ← title (fallback: last path segment), description ← description,
|
|
17
15
|
* tags ← tags, updated ← timestamp. The directory a file sits in NEVER
|
|
18
16
|
* affects `type`.
|
|
19
|
-
* - links
|
|
17
|
+
* - links: BOTH OKF link forms — `/`-rooted bundle-relative and standard
|
|
20
18
|
* relative — resolve deterministically into target conceptIds, stored on
|
|
21
19
|
* `IndexDocument.links`. Unresolvable / out-of-component links are dropped
|
|
22
20
|
* (tolerant).
|
|
23
|
-
* - validate (
|
|
21
|
+
* - validate (LENIENT): base checks only; unknown frontmatter never fails;
|
|
24
22
|
* `missing-type` is INFO; `missing-ref` on OKF links is a non-blocking
|
|
25
23
|
* WARNING (consumers tolerate broken links). Reads go through
|
|
26
24
|
* `ctx.readFile`; ref existence via `ctx.resolveRef`. Never touches the live
|
|
27
25
|
* filesystem.
|
|
28
|
-
* - directoryList / looksLikeRoot
|
|
26
|
+
* - directoryList / looksLikeRoot. Authoring is deliberately
|
|
29
27
|
* absent; AKM-native writers fail before mutating an OKF bundle.
|
|
30
28
|
*/
|
|
31
29
|
import fs from "node:fs";
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* The `opencode` tool-directory adapter — akm 0.9.0 format-family work item
|
|
6
6
|
* (#46).
|
|
7
7
|
*
|
|
8
|
-
* Recognizes an OpenCode `.opencode` layout (
|
|
8
|
+
* Recognizes an OpenCode `.opencode` layout (real-world:
|
|
9
9
|
* https://opencode.ai/docs/{commands,agents,skills,rules}/): a root `AGENTS.md`
|
|
10
10
|
* → `instruction`, `commands/*.md` → `command`, `agents/*.md` → `agent`,
|
|
11
11
|
* `skills/<name>/SKILL.md` → `skill`, and ABSTAINS on `opencode.json` runtime
|
|
@@ -99,11 +99,11 @@ function stripFencedBlocksSimple(body) {
|
|
|
99
99
|
return out.join("\n");
|
|
100
100
|
}
|
|
101
101
|
// Ref-token grammar — copied from `base-linter.ts`'s `BUNDLE_REF_RE`
|
|
102
|
-
// (`core/asset/asset-ref.ts
|
|
102
|
+
// (`core/asset/asset-ref.ts`) as a VALUE,
|
|
103
103
|
// not an import (same cycle-avoidance rationale as the file header — the source
|
|
104
104
|
// string is duplicated so no new `core/adapter` -> `core/asset` edge is added for
|
|
105
105
|
// this scan). Recognizes the 0.9.0 FULLY-QUALIFIED `<bundle>//<concept-id>
|
|
106
|
-
// [#fragment]` prose body-ref anchored form ONLY.
|
|
106
|
+
// [#fragment]` prose body-ref anchored form ONLY. A bare short
|
|
107
107
|
// conceptId in prose is NOT a ref, so it is never flagged here (it is a ref only
|
|
108
108
|
// in the ref-LIST channels — {@link refTokenFromListValue}). The pre-0.9.0
|
|
109
109
|
// `<type>:<slug>` colon grammar is gone from every recognition surface.
|
|
@@ -178,7 +178,7 @@ function readRefStringOrArray(value) {
|
|
|
178
178
|
}
|
|
179
179
|
/**
|
|
180
180
|
* Port of `BaseLinter.runBaseChecks`, adapted to the read-only
|
|
181
|
-
* `ValidateContext`/`Diagnostic` shapes
|
|
181
|
+
* `ValidateContext`/`Diagnostic` shapes. Reproduces
|
|
182
182
|
* unquoted-colon / missing-updated / stale-path / missing-ref for ONE file's
|
|
183
183
|
* already-parsed content.
|
|
184
184
|
*
|
|
@@ -5,24 +5,24 @@
|
|
|
5
5
|
* Shared recognition / placement / validation for the two AGENT TOOL-DIRECTORY
|
|
6
6
|
* adapters — `claude` (`.claude`) and `opencode` (`.opencode`) — akm 0.9.0
|
|
7
7
|
* format-family work item (#46). Both translate a foreign tool layout into the
|
|
8
|
-
* open AKM `type` vocabulary
|
|
8
|
+
* open AKM `type` vocabulary: a root instruction file
|
|
9
9
|
* (CLAUDE.md / AGENTS.md) → `instruction`, `commands/*.md` → `command`,
|
|
10
10
|
* `agents/*.md` → `agent`, `skills/<name>/SKILL.md` → `skill` (item = the dir).
|
|
11
11
|
* They differ only in two parameters carried on {@link ToolDirLayout}:
|
|
12
12
|
* - the instruction basename + its concept id,
|
|
13
13
|
* - the adapter id + component id.
|
|
14
14
|
*
|
|
15
|
-
* The SKILL.md codec is shared with the `agent-skills` adapter as functions
|
|
16
|
-
*
|
|
17
|
-
* frontmatter `name` (== the dir name per the Agent Skills
|
|
15
|
+
* The SKILL.md codec is shared with the `agent-skills` adapter as functions:
|
|
16
|
+
* a skill's conceptId is its DIRECTORY, and its `name` is the
|
|
17
|
+
* frontmatter `name` (== the dir name per the Agent Skills hard rule).
|
|
18
18
|
*
|
|
19
|
-
* ──
|
|
19
|
+
* ── reserved files ──
|
|
20
20
|
*
|
|
21
21
|
* `index.md` / `log.md` are OKF structural files at EVERY depth — never a
|
|
22
22
|
* concept. `classify` excludes them up front so a stray `commands/index.md`
|
|
23
23
|
* never becomes a `command` (mirrors okf/akm/llm-wiki `RESERVED_FILES`).
|
|
24
24
|
*
|
|
25
|
-
* ── validate leniency
|
|
25
|
+
* ── validate leniency ──
|
|
26
26
|
*
|
|
27
27
|
* The tool-dir adapters TOLERATE the tools' native frontmatter (argument-hint,
|
|
28
28
|
* allowed-tools, tools, model, mode, temperature, agent, …) — the strict
|
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
* Node builtins.
|
|
48
48
|
*/
|
|
49
49
|
import path from "node:path";
|
|
50
|
-
import { createAdapterExtensions, } from "../../../execution/source.js";
|
|
51
50
|
import { parseFrontmatter } from "../../asset/frontmatter.js";
|
|
52
51
|
import { toPosix } from "../../common.js";
|
|
53
52
|
import { executionDefaultsFromFrontmatter, renderMarkdownExecutionSource } from "../execution-source.js";
|
|
@@ -149,7 +148,7 @@ export function readCandidatesToolDir(layout, c, conceptId) {
|
|
|
149
148
|
function nameOrSignalDiagnostics(type, relPath, data, body) {
|
|
150
149
|
if (nonEmptyString(data.name) !== undefined || nonEmptyString(data.description) !== undefined)
|
|
151
150
|
return [];
|
|
152
|
-
// command-shaped body/frontmatter signals
|
|
151
|
+
// command-shaped body/frontmatter signals: $ARGUMENTS / $1 / an `agent` frontmatter key.
|
|
153
152
|
if (type === "command" &&
|
|
154
153
|
(/\$ARGUMENTS\b/.test(body) || /\$\d/.test(body) || nonEmptyString(data.agent) !== undefined)) {
|
|
155
154
|
return [];
|
|
@@ -193,21 +192,6 @@ export async function validateToolDir(layout, c, changes, ctx) {
|
|
|
193
192
|
}
|
|
194
193
|
return diagnostics;
|
|
195
194
|
}
|
|
196
|
-
function nativeExecutionExtensions(layout, cls, data) {
|
|
197
|
-
const values = {};
|
|
198
|
-
if (layout.adapterId === "claude" && cls.type === "command" && Object.hasOwn(data, "argument-hint")) {
|
|
199
|
-
if (typeof data["argument-hint"] !== "string") {
|
|
200
|
-
throw new TypeError("frontmatter.argument-hint must be a string");
|
|
201
|
-
}
|
|
202
|
-
values.argumentHint = data["argument-hint"];
|
|
203
|
-
}
|
|
204
|
-
if (layout.adapterId === "opencode" && Object.hasOwn(data, "mode")) {
|
|
205
|
-
if (typeof data.mode !== "string")
|
|
206
|
-
throw new TypeError("frontmatter.mode must be a string");
|
|
207
|
-
values.mode = data.mode;
|
|
208
|
-
}
|
|
209
|
-
return Object.keys(values).length > 0 ? createAdapterExtensions(layout.adapterId, values) : undefined;
|
|
210
|
-
}
|
|
211
195
|
/** Translate a native Claude/OpenCode command or agent without exposing raw frontmatter. */
|
|
212
196
|
export function renderToolDirExecutionSource(layout, c, file) {
|
|
213
197
|
const cls = classify(file.relPath, layout);
|
|
@@ -225,9 +209,7 @@ export function renderToolDirExecutionSource(layout, c, file) {
|
|
|
225
209
|
},
|
|
226
210
|
defaults: (data) => executionDefaultsFromFrontmatter(data, {
|
|
227
211
|
kind: cls.type === "command" ? "command" : "persona",
|
|
228
|
-
toolsKeys: layout.adapterId === "claude" && cls.type === "command" ? ["allowed-tools", "tools"] : ["tools"],
|
|
229
212
|
}),
|
|
230
|
-
extensions: (data) => nativeExecutionExtensions(layout, cls, data),
|
|
231
213
|
});
|
|
232
214
|
}
|
|
233
215
|
/** Build the concrete `BundleAdapter` from a layout + a `looksLikeRoot` probe (claude/opencode share everything else). */
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* The `website-snapshot` adapter — akm 0.9.0 format-family work item (#46).
|
|
6
6
|
*
|
|
7
7
|
* A READ-ONLY (Mode A) view over a materialized crawl snapshot written by
|
|
8
|
-
* `src/sources/snapshot-fetchers/website-ingest.ts
|
|
8
|
+
* `src/sources/snapshot-fetchers/website-ingest.ts`. The on-disk
|
|
9
9
|
* pages are KNOWLEDGE-shaped markdown under `stash/knowledge/**` with no `type:`
|
|
10
|
-
* field; this adapter RE-TYPES them to the open `type: website`.
|
|
11
|
-
*
|
|
10
|
+
* field; this adapter RE-TYPES them to the open `type: website`. The re-type
|
|
11
|
+
* is GATED — it
|
|
12
12
|
* applies only to a page carrying the `website` tag / a `sourceUrl` (a page
|
|
13
13
|
* lacking both is not re-typed); the document KEEPS its `sourceUrl` (surfaced as
|
|
14
14
|
* `sourceRef` on `documentJson`); and the conceptId STRIPS the
|
|
@@ -27,7 +27,7 @@ const SHADOWABLE_ADAPTER_IDS = new Set(["agent-skills", "claude", "opencode"]);
|
|
|
27
27
|
/**
|
|
28
28
|
* True when `root` — already claimed by `winnerId` (one of
|
|
29
29
|
* {@link SHADOWABLE_ADAPTER_IDS}) — ALSO carries a top-level directory the
|
|
30
|
-
* `akm` adapter's own probe recognizes as its workspace shape
|
|
30
|
+
* `akm` adapter's own probe recognizes as its workspace shape and
|
|
31
31
|
* that `winnerId` does not own (its `directoryList()`, or — for `agent-skills`,
|
|
32
32
|
* which owns no fixed directory names — a root-level `<name>/SKILL.md`
|
|
33
33
|
* package) but which holds at least one real file. Cheap by design: only
|
|
@@ -5,7 +5,7 @@ import { createHash } from "node:crypto";
|
|
|
5
5
|
import { isMap, isScalar, parseDocument, visit } from "yaml";
|
|
6
6
|
import { cloneExecutionJson, cloneExecutionJsonObject, } from "../../execution/json.js";
|
|
7
7
|
import { snapshotStrictRecord } from "../../execution/record.js";
|
|
8
|
-
import {
|
|
8
|
+
import { createAdapterRenderedExecutionSource, warnRetiredEngineKey, } from "../../execution/source.js";
|
|
9
9
|
import { UsageError } from "../errors.js";
|
|
10
10
|
import { warnOnce } from "../warn.js";
|
|
11
11
|
function nextLine(text, start) {
|
|
@@ -145,12 +145,6 @@ export function executionDefaultsFromFrontmatter(data, options) {
|
|
|
145
145
|
if (typeof allowTopLevelEngine !== "boolean") {
|
|
146
146
|
throw new TypeError("execution frontmatter projection options.allowTopLevelEngine must be a boolean");
|
|
147
147
|
}
|
|
148
|
-
const configuredToolsKeys = Object.hasOwn(options, "toolsKeys")
|
|
149
|
-
? cloneExecutionJson(options.toolsKeys, "execution frontmatter projection options.toolsKeys")
|
|
150
|
-
: ["tools"];
|
|
151
|
-
if (!Array.isArray(configuredToolsKeys) || configuredToolsKeys.some((key) => typeof key !== "string" || !key)) {
|
|
152
|
-
throw new TypeError("execution frontmatter projection options.toolsKeys must be an array of non-empty strings");
|
|
153
|
-
}
|
|
154
148
|
const namespace = own(frontmatter, "akm")
|
|
155
149
|
? requireMetadataMapping(frontmatter.akm, "frontmatter.akm")
|
|
156
150
|
: snapshotStrictRecord({}, "frontmatter.akm");
|
|
@@ -161,36 +155,27 @@ export function executionDefaultsFromFrontmatter(data, options) {
|
|
|
161
155
|
? `frontmatter.akm.${key}`
|
|
162
156
|
: undefined;
|
|
163
157
|
if (location) {
|
|
164
|
-
throw new TypeError(`${location} is host-controlled and cannot be declared by an executable asset; configure the selected
|
|
158
|
+
throw new TypeError(`${location} is host-controlled and cannot be declared by an executable asset; configure the selected harness or workflow execution environment instead`);
|
|
165
159
|
}
|
|
166
160
|
}
|
|
167
161
|
const out = Object.create(null);
|
|
168
162
|
if (kind === "command" && own(frontmatter, "agent")) {
|
|
169
163
|
out.agent = nullableString(frontmatter.agent, "frontmatter.agent");
|
|
170
164
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
: undefined;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
165
|
+
// `engine` is the retired spelling of `connection` / `harness`; the resolver reads it as whichever it names.
|
|
166
|
+
for (const key of ["connection", "harness", "engine"]) {
|
|
167
|
+
const topLevel = allowTopLevelEngine && own(frontmatter, key) ? nullableString(frontmatter[key], `frontmatter.${key}`) : undefined;
|
|
168
|
+
const namespaced = own(namespace, key) ? nullableString(namespace[key], `frontmatter.akm.${key}`) : undefined;
|
|
169
|
+
if (topLevel !== undefined)
|
|
170
|
+
out[key] = topLevel;
|
|
171
|
+
else if (namespaced !== undefined)
|
|
172
|
+
out[key] = namespaced;
|
|
173
|
+
if (key === "engine" && out.engine !== undefined)
|
|
174
|
+
warnRetiredEngineKey();
|
|
175
|
+
}
|
|
181
176
|
if (own(frontmatter, "model")) {
|
|
182
177
|
out.model = nullableString(frontmatter.model, "frontmatter.model");
|
|
183
178
|
}
|
|
184
|
-
let toolsSelected = false;
|
|
185
|
-
for (const key of configuredToolsKeys) {
|
|
186
|
-
if (!own(frontmatter, key))
|
|
187
|
-
continue;
|
|
188
|
-
const selection = cloneToolSelection(frontmatter[key], `frontmatter.${key}`);
|
|
189
|
-
if (!toolsSelected) {
|
|
190
|
-
out.tools = selection;
|
|
191
|
-
toolsSelected = true;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
179
|
let inferenceEntries;
|
|
195
180
|
if (own(namespace, "inference")) {
|
|
196
181
|
if (namespace.inference === null)
|
|
@@ -283,12 +268,6 @@ export function renderMarkdownExecutionSource(input) {
|
|
|
283
268
|
if (hasDefaults && defaults === undefined) {
|
|
284
269
|
throw new TypeError("adapter execution source defaults must be omitted or resolve to an object");
|
|
285
270
|
}
|
|
286
|
-
const extensionsProjection = input.extensions;
|
|
287
|
-
const extensionsAreProjected = typeof extensionsProjection === "function";
|
|
288
|
-
const extensions = extensionsAreProjected ? extensionsProjection(parsed.data) : extensionsProjection;
|
|
289
|
-
if (Object.hasOwn(input, "extensions") && !extensionsAreProjected && extensions === undefined) {
|
|
290
|
-
throw new TypeError("adapter execution source extensions must be omitted or be an adapter-owned extension object");
|
|
291
|
-
}
|
|
292
271
|
return createAdapterRenderedExecutionSource({
|
|
293
272
|
kind,
|
|
294
273
|
content: parsed.content,
|
|
@@ -300,6 +279,5 @@ export function renderMarkdownExecutionSource(input) {
|
|
|
300
279
|
hash: createHash("sha256").update(raw, "utf8").digest("hex"),
|
|
301
280
|
},
|
|
302
281
|
...(hasDefaults ? { defaults } : {}),
|
|
303
|
-
...(extensions === undefined ? {} : { extensions }),
|
|
304
282
|
});
|
|
305
283
|
}
|
|
@@ -41,7 +41,7 @@ const BY_ID = new Map(BUILTIN_ADAPTERS.map((a) => [a.id, a]));
|
|
|
41
41
|
export function getAdapters() {
|
|
42
42
|
return [...BUILTIN_ADAPTERS];
|
|
43
43
|
}
|
|
44
|
-
/** Look up an adapter by its own `id` (matches `BundleComponent.adapter`); `undefined` for an unknown id (
|
|
44
|
+
/** Look up an adapter by its own `id` (matches `BundleComponent.adapter`); `undefined` for an unknown id (the caller skips + warns). */
|
|
45
45
|
export function adapterForId(id) {
|
|
46
46
|
return BY_ID.get(id);
|
|
47
47
|
}
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* The ONE core {@link ValidateContext} implementation
|
|
6
|
-
* follow-up ("make `validate()` genuinely load-bearing").
|
|
5
|
+
* The ONE core {@link ValidateContext} implementation.
|
|
7
6
|
*
|
|
8
7
|
* `BundleAdapter.validate()` (`./bundle-adapter.ts`) is a REQUIRED interface
|
|
9
|
-
* method whose contract is explicit and
|
|
10
|
-
* / the format-neutral spec §12.1): the adapter MUST NOT write and MUST NOT
|
|
8
|
+
* method whose contract is explicit: the adapter MUST NOT write and MUST NOT
|
|
11
9
|
* read the live filesystem — `ctx` serves the run's on-disk SNAPSHOT WITH the
|
|
12
10
|
* caller's pending {@link FileChange}s overlaid, plus a read-only `resolveRef`
|
|
13
11
|
* for link/xref existence. That overlay is meant to be built ONCE, centrally —
|
|
@@ -138,7 +138,7 @@ const BUILTIN_PLACEMENT_SPECS = {
|
|
|
138
138
|
toCanonicalName: (typeRoot, filePath) => toPosix(path.relative(typeRoot, filePath)),
|
|
139
139
|
toAssetPath: (typeRoot, name) => path.join(typeRoot, name),
|
|
140
140
|
},
|
|
141
|
-
//
|
|
141
|
+
// `lesson` asset type. Required frontmatter fields are
|
|
142
142
|
// `description` and `when_to_use`; lint enforces both.
|
|
143
143
|
lesson: { stashDir: "lessons", ...markdownSpec },
|
|
144
144
|
// Scheduled tasks. A task file pairs a cron-style schedule with a target
|
|
@@ -29,14 +29,14 @@ function normalizeName(name) {
|
|
|
29
29
|
return path.posix.normalize(name.replace(/\\/g, "/"));
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
* Bundle slug charset
|
|
32
|
+
* Bundle slug charset: non-empty, and excluding `:`/`.`/`#`/`/`
|
|
33
33
|
* plus whitespace. Excluding `:`/`.` is what keeps `bundle//conceptId` lexically
|
|
34
34
|
* distinguishable from a URL in prose; excluding `/` is what makes the first
|
|
35
35
|
* `//` an unambiguous bundle boundary; excluding `#` reserves it for fragments.
|
|
36
36
|
*/
|
|
37
37
|
const BUNDLE_SLUG_RE = /^[^\s:.#/]+$/;
|
|
38
38
|
/**
|
|
39
|
-
* True when `s` is a legal bundle slug (
|
|
39
|
+
* True when `s` is a legal bundle slug (charset: non-empty,
|
|
40
40
|
* no `:`/`.`/`#`/`/` or whitespace). Exported for input boundaries that need
|
|
41
41
|
* to distinguish bundle-qualified refs from source locators.
|
|
42
42
|
*/
|
|
@@ -45,7 +45,7 @@ export function isBundleSlug(s) {
|
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* Body-ref recognition (prose): the FULLY-QUALIFIED anchored form ONLY
|
|
48
|
-
* (`<bundle>//<concept-id>[#<fragment>]
|
|
48
|
+
* (`<bundle>//<concept-id>[#<fragment>]` — the short form is never
|
|
49
49
|
* recognized in prose). `g`/`m` for scanning; group 1 = the whole ref token.
|
|
50
50
|
*
|
|
51
51
|
* The leading `//` must be preceded by a bundle slug, so a URL (`https://…`,
|
|
@@ -12,6 +12,11 @@
|
|
|
12
12
|
* against an injected {@link RefContext}. This is the "the short
|
|
13
13
|
* form is input sugar" rule (§11.1) made structural: only a
|
|
14
14
|
* `ResolvedRef` ever crosses a storage boundary.
|
|
15
|
+
* It answers "which bundle" against an injected index snapshot;
|
|
16
|
+
* it does not find files. "Where is the file for this ref right
|
|
17
|
+
* now" has one answer, `resolveConceptOwner`
|
|
18
|
+
* (`src/indexer/lookup/adapter-concept-owner.ts`), which
|
|
19
|
+
* every resolver that needs a path calls.
|
|
15
20
|
* - serialize — `bundleRefToString` (`asset-ref.ts`); serializing a
|
|
16
21
|
* `ResolvedRef` always emits the fully-qualified form.
|
|
17
22
|
*
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* bundle's key. A bundle id is a mass identity prefix: every durable ref this
|
|
7
7
|
* tool minted (`entries.item_ref`/`bundle_id`, `proposals.ref`, a pending
|
|
8
8
|
* proposal's `proposedTarget.source`, a workflow task_history row's
|
|
9
|
-
* `target_ref`, `scheduler.enabled[].ref`) carries it, and a hand-edited
|
|
9
|
+
* `target_ref`, a `workflow_runs.workflow_ref`, `scheduler.enabled[].ref`) carries it, and a hand-edited
|
|
10
10
|
* `bundles` key strands all of it (see `src/indexer/bundle-identity-guard.ts`
|
|
11
11
|
* §11.5). This module is the rekey transaction that guard's docstring points
|
|
12
12
|
* to.
|
|
@@ -32,6 +32,7 @@ import { closeDatabase, openIndexDatabase, openReadonlyExistingDatabase, } from
|
|
|
32
32
|
import { getFilePathsByBundle, renameEntriesBundleId } from "../storage/repositories/index-entries-repository.js";
|
|
33
33
|
import { countProposalsForBundleRename, renameProposalsBundleRef } from "../storage/repositories/proposals-repository.js";
|
|
34
34
|
import { countTaskHistoryTargetRefs, renameTaskHistoryTargetRefs, } from "../storage/repositories/task-history-repository.js";
|
|
35
|
+
import { countWorkflowRunRefsForRename, renameWorkflowRunRefs } from "../storage/repositories/workflow-runs-repository.js";
|
|
35
36
|
import { selectBackend } from "../tasks/backends/index.js";
|
|
36
37
|
import { bundleRefToString, parseBundleRef } from "./asset/asset-ref.js";
|
|
37
38
|
import { validateExplicitBundleName } from "./bundle-id.js";
|
|
@@ -152,12 +153,17 @@ async function buildPlan(config, oldId, newId, sched) {
|
|
|
152
153
|
let proposalRefs = 0;
|
|
153
154
|
let proposalTargets = 0;
|
|
154
155
|
let taskHistoryRefs = 0;
|
|
156
|
+
let workflowRunRefs = 0;
|
|
157
|
+
let activeWorkflowRuns = [];
|
|
155
158
|
if (fs.existsSync(getStateDbPath())) {
|
|
156
159
|
withStateDb((db) => {
|
|
157
160
|
const counts = countProposalsForBundleRename(db, oldId);
|
|
158
161
|
proposalRefs = counts.refs;
|
|
159
162
|
proposalTargets = counts.targets;
|
|
160
163
|
taskHistoryRefs = countTaskHistoryTargetRefs(db, oldId);
|
|
164
|
+
const runs = countWorkflowRunRefsForRename(db, oldId);
|
|
165
|
+
workflowRunRefs = runs.refs;
|
|
166
|
+
activeWorkflowRuns = runs.active;
|
|
161
167
|
});
|
|
162
168
|
}
|
|
163
169
|
return {
|
|
@@ -170,7 +176,8 @@ async function buildPlan(config, oldId, newId, sched) {
|
|
|
170
176
|
},
|
|
171
177
|
lock: { present: lockPresent },
|
|
172
178
|
index: { entries: indexEntries },
|
|
173
|
-
state: { proposalRefs, proposalTargets, taskHistoryRefs },
|
|
179
|
+
state: { proposalRefs, proposalTargets, taskHistoryRefs, workflowRunRefs },
|
|
180
|
+
activeWorkflowRuns,
|
|
174
181
|
contentRefs,
|
|
175
182
|
nativeSchedulerRows,
|
|
176
183
|
};
|
|
@@ -254,12 +261,13 @@ export async function renameBundle(oldId, newId, options = {}, deps) {
|
|
|
254
261
|
closeDatabase(writeIndexDb);
|
|
255
262
|
}
|
|
256
263
|
}
|
|
257
|
-
// State: proposals.ref, a pending proposal's proposedTarget.source,
|
|
258
|
-
// workflow task_history.target_ref.
|
|
264
|
+
// State: proposals.ref, a pending proposal's proposedTarget.source,
|
|
265
|
+
// workflow task_history.target_ref, and workflow_runs.workflow_ref.
|
|
259
266
|
if (fs.existsSync(getStateDbPath())) {
|
|
260
267
|
withStateDb((db) => {
|
|
261
268
|
renameProposalsBundleRef(db, oldId, newId);
|
|
262
269
|
renameTaskHistoryTargetRefs(db, oldId, newId);
|
|
270
|
+
renameWorkflowRunRefs(db, oldId, newId);
|
|
263
271
|
});
|
|
264
272
|
}
|
|
265
273
|
// Scheduler: remove native rows still naming `<old>//` (see
|