akm-cli 0.9.0-rc.9 → 0.9.0
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 +1063 -44
- package/README.md +51 -25
- package/SECURITY.md +14 -1
- package/STABILITY.md +497 -0
- package/dist/akm +148 -35
- package/dist/{akm-migrate-storage → akm-migrate} +6 -9
- package/dist/assets/hints/cli-hints-full.md +223 -95
- package/dist/assets/hints/cli-hints-short.md +85 -22
- package/dist/assets/improve-strategies/default.json +1 -1
- package/dist/assets/improve-strategies/reflect-distill.json +1 -1
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/stash-skeleton/README.md +6 -5
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +20 -9
- package/dist/assets/tasks/core/extract.yml +1 -1
- package/dist/assets/tasks/core/version-check.yml +1 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
- package/dist/assets/templates/html/health.html +1 -3
- package/dist/assets/workflows/workflow-template.md +32 -15
- package/dist/cli/invocation.js +40 -15
- package/dist/cli/parse-args.js +0 -22
- package/dist/cli/retired-commands.js +121 -0
- package/dist/cli/shared.js +154 -22
- package/dist/cli/unknown-flags.js +236 -0
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +696 -258
- package/dist/commands/agent/agent-dispatch.js +14 -3
- package/dist/commands/agent/contribute-cli.js +73 -88
- package/dist/commands/completions.js +79 -22
- package/dist/commands/config-cli.js +17 -150
- package/dist/commands/env/env-cli.js +59 -143
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +36 -66
- package/dist/commands/env/secret.js +24 -57
- package/dist/commands/feedback-cli.js +141 -87
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +3 -4
- package/dist/commands/health/checks.js +85 -23
- package/dist/commands/health/html-report.js +7 -10
- package/dist/commands/health/improve-metrics.js +25 -83
- package/dist/commands/health/md-report.js +5 -9
- package/dist/commands/health/metrics.js +62 -20
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +4 -5
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +3 -48
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/commands/health/types-improve.js +7 -0
- package/dist/commands/health.js +99 -28
- package/dist/commands/improve/anti-collapse.js +2 -2
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +41 -40
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +140 -1000
- package/dist/commands/improve/distill/promote-memory.js +12 -12
- package/dist/commands/improve/distill/quality-gate.js +6 -6
- package/dist/commands/improve/distill.js +58 -69
- package/dist/commands/improve/eligibility.js +95 -55
- package/dist/commands/improve/extract-cli.js +14 -133
- package/dist/commands/improve/improve-cli.js +98 -114
- package/dist/commands/improve/improve-result-file.js +1 -28
- package/dist/commands/improve/improve-strategies.js +8 -5
- package/dist/commands/improve/improve.js +128 -91
- package/dist/commands/improve/loop-stages.js +182 -20
- package/dist/commands/improve/memory/derived-ref.js +45 -43
- package/dist/commands/improve/memory/memory-belief.js +1 -1
- package/dist/commands/improve/memory/memory-contradiction-detect.js +4 -12
- package/dist/commands/improve/memory/memory-improve.js +6 -5
- package/dist/commands/improve/outcome-loop.js +22 -65
- package/dist/commands/improve/preparation.js +114 -123
- package/dist/commands/improve/proactive-maintenance.js +2 -5
- package/dist/commands/improve/reflect.js +56 -160
- package/dist/commands/improve/salience.js +11 -122
- package/dist/commands/improve/source-identity.js +10 -38
- package/dist/commands/lint/base-linter.js +20 -124
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +249 -43
- package/dist/commands/{events.js → log.js} +33 -38
- package/dist/commands/migrate-cli.js +92 -12
- package/dist/commands/migration-tool.js +46 -0
- package/dist/commands/observability-cli.js +70 -209
- package/dist/commands/proposal/drain.js +101 -29
- package/dist/commands/proposal/proposal-cli.js +76 -48
- package/dist/commands/proposal/proposal.js +54 -18
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +23 -15
- package/dist/commands/proposal/repository.js +701 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +2 -8
- package/dist/commands/proposal/validators/proposal-validators.js +55 -7
- package/dist/commands/proposal/validators/proposals.js +4 -7
- package/dist/commands/read/curate.js +34 -53
- package/dist/commands/read/knowledge.js +150 -95
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +42 -15
- package/dist/commands/read/search-cli.js +180 -78
- package/dist/commands/read/search.js +58 -43
- package/dist/commands/read/show.js +197 -141
- package/dist/commands/registry-cli.js +12 -51
- package/dist/commands/remember.js +14 -57
- package/dist/commands/sources/add-cli.js +100 -31
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +7 -2
- package/dist/commands/sources/info.js +18 -5
- package/dist/commands/sources/init.js +12 -12
- package/dist/commands/sources/installed-stashes.js +382 -98
- package/dist/commands/sources/schema-repair.js +3 -2
- package/dist/commands/sources/self-update.js +131 -38
- package/dist/commands/sources/source-add.js +72 -17
- package/dist/commands/sources/source-clone.js +129 -45
- package/dist/commands/sources/source-manage.js +43 -23
- package/dist/commands/sources/sources-cli.js +57 -208
- package/dist/commands/sources/stash-cli.js +46 -53
- package/dist/commands/tasks/tasks-cli.js +91 -97
- package/dist/commands/tasks/tasks.js +276 -421
- package/dist/commands/workflow-cli.js +175 -450
- package/dist/core/adapter/adapters/akm-adapter.js +47 -28
- package/dist/core/adapter/adapters/akm-lint.js +42 -27
- package/dist/core/adapter/adapters/akm-metadata.js +15 -44
- package/dist/core/adapter/adapters/akm-task-adapter.js +15 -13
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +55 -71
- package/dist/core/adapter/adapters/dotenv-adapter.js +1 -1
- package/dist/core/adapter/adapters/generic-files-adapter.js +2 -0
- package/dist/core/adapter/adapters/index.js +6 -6
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +14 -8
- package/dist/core/adapter/adapters/okf-adapter.js +187 -19
- package/dist/core/adapter/adapters/shared.js +3 -19
- package/dist/core/adapter/adapters/tool-dir-shared.js +8 -3
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +1 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +6 -4
- package/dist/core/adapter/validate-context.js +214 -0
- package/dist/core/asset/akm-markdown.js +63 -0
- package/dist/core/asset/asset-placement.js +20 -6
- package/dist/core/asset/asset-ref.js +11 -9
- package/dist/core/asset/frontmatter-lint.js +30 -0
- package/dist/core/asset/frontmatter.js +25 -9
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +89 -18
- package/dist/core/asset/stash-meta.js +1 -1
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +152 -38
- package/dist/core/config/config-io.js +12 -1
- package/dist/core/config/config-schema.js +35 -8
- package/dist/core/config/config-sources.js +55 -11
- package/dist/core/config/config-walker.js +25 -9
- package/dist/core/config/config.js +9 -48
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +5 -1
- package/dist/core/config/schema/experimental.js +30 -0
- package/dist/core/config/schema/improve-processes.js +0 -6
- package/dist/core/config/schema/improve.js +21 -3
- package/dist/core/config/schema/index-config.js +8 -15
- package/dist/core/config/schema/output.js +4 -1
- package/dist/core/config/schema/setup.js +9 -18
- package/dist/core/config/schema/sources-bundles.js +49 -33
- package/dist/core/config/schema/workflow.js +3 -3
- package/dist/core/env-secret-ref.js +76 -46
- package/dist/core/errors.js +18 -12
- package/dist/core/events.js +46 -128
- package/dist/core/file-change.js +6 -5
- package/dist/core/fs-txn.js +83 -7
- package/dist/core/git-message.js +2 -2
- package/dist/core/improve-result.js +1 -100
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +2 -1
- package/dist/core/migration-operation.js +16 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/parse.js +4 -1
- package/dist/core/paths.js +17 -20
- package/dist/core/recognition-util.js +12 -14
- package/dist/core/redaction.js +34 -0
- package/dist/core/standards/resolve-standards-context.js +2 -14
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +2 -2
- package/dist/core/state/migrations.js +41 -18
- package/dist/core/state-db.js +5 -14
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +6 -4
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/type-presentation.js +3 -3
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +771 -95
- package/dist/indexer/bundle-identity-guard.js +3 -2
- package/dist/indexer/db/graph-db.js +0 -24
- package/dist/indexer/ensure-index.js +1 -0
- package/dist/indexer/graph/graph-boost.js +9 -34
- package/dist/indexer/graph/graph-extraction.js +8 -5
- package/dist/indexer/index-writer-lock.js +53 -17
- package/dist/indexer/index-written-assets.js +16 -22
- package/dist/indexer/indexer.js +497 -239
- package/dist/indexer/installations.js +14 -96
- package/dist/indexer/passes/dir-staleness.js +16 -9
- package/dist/indexer/passes/memory-inference.js +11 -9
- package/dist/indexer/passes/metadata.js +113 -47
- package/dist/indexer/scan/doc-to-entry.js +38 -1
- package/dist/indexer/scan/drain-dir.js +13 -23
- package/dist/indexer/search/db-search.js +99 -54
- package/dist/indexer/search/fts-query.js +47 -24
- package/dist/indexer/search/ranking-contributors.js +42 -20
- package/dist/indexer/search/ranking.js +18 -99
- package/dist/indexer/search/search-fields.js +7 -2
- package/dist/indexer/search/search-source.js +82 -93
- package/dist/indexer/usage/usage-events.js +0 -89
- package/dist/indexer/walk/file-context.js +2 -1
- package/dist/indexer/walk/matchers.js +30 -43
- package/dist/indexer/walk/path-resolver.js +7 -2
- package/dist/indexer/walk/walker.js +38 -12
- package/dist/integrations/agent/builders.js +0 -6
- package/dist/integrations/agent/config.js +2 -2
- package/dist/integrations/agent/detect.js +49 -19
- package/dist/integrations/agent/engine-fallback.js +76 -0
- package/dist/integrations/agent/profiles.js +14 -0
- package/dist/integrations/agent/prompts.js +12 -8
- package/dist/integrations/agent/runner-dispatch.js +4 -2
- package/dist/integrations/agent/runner.js +0 -1
- package/dist/integrations/agent/spawn.js +5 -6
- package/dist/integrations/github.js +1 -1
- package/dist/integrations/harnesses/aider/agent-builder.js +6 -4
- package/dist/integrations/harnesses/amazonq/agent-builder.js +7 -4
- package/dist/integrations/harnesses/claude/session-log.js +0 -10
- package/dist/integrations/harnesses/codex/agent-builder.js +5 -2
- package/dist/integrations/harnesses/copilot/agent-builder.js +5 -3
- package/dist/integrations/harnesses/gemini/agent-builder.js +5 -3
- package/dist/integrations/harnesses/index.js +3 -7
- package/dist/integrations/harnesses/opencode/agent-builder.js +21 -2
- package/dist/integrations/harnesses/opencode/session-log.js +0 -15
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +13 -4
- package/dist/integrations/harnesses/openhands/agent-builder.js +9 -6
- package/dist/integrations/harnesses/pi/agent-builder.js +6 -4
- package/dist/integrations/lockfile.js +88 -7
- package/dist/integrations/session-logs/index.js +3 -28
- package/dist/llm/client.js +136 -100
- package/dist/llm/embedders/remote.js +13 -5
- package/dist/llm/feature-gate.js +4 -12
- package/dist/llm/graph-extract.js +5 -11
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +5 -7
- package/dist/llm/structured-call.js +1 -1
- package/dist/llm/usage-persist.js +26 -5
- package/dist/llm/usage-telemetry.js +25 -2
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +259 -0
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +14 -36
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +56 -83
- package/dist/output/shapes/migrate.js +8 -0
- package/dist/output/shapes/passthrough.js +7 -41
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes.js +2 -9
- package/dist/output/text/{init.js → bundle-create.js} +3 -1
- package/dist/output/text/bundle-show.js +7 -0
- package/dist/output/text/command-format.js +164 -96
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/health-format.js +103 -0
- package/dist/output/text/health.js +7 -0
- package/dist/output/text/helpers.js +10 -8
- package/dist/output/text/lint-format.js +43 -0
- package/dist/output/text/{save.js → lint.js} +2 -2
- package/dist/output/text/migrate.js +88 -0
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +44 -72
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/show-directives.js +15 -7
- package/dist/output/text/status-list.js +32 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +24 -203
- package/dist/output/text/workflow.js +1 -7
- package/dist/output/text.js +16 -17
- package/dist/registry/factory.js +4 -6
- package/dist/registry/origin-resolve.js +16 -27
- package/dist/registry/providers/skills-sh.js +3 -3
- package/dist/registry/providers/static-index.js +13 -23
- package/dist/registry/resolve.js +42 -7
- package/dist/registry/semver.js +34 -84
- package/dist/runtime.js +2 -23
- package/dist/scripts/akm-migrate-node.js +60290 -0
- package/dist/scripts/akm-migrate.js +59628 -0
- package/dist/setup/detect.js +42 -15
- package/dist/setup/registry-stash-loader.js +2 -2
- package/dist/setup/setup.js +236 -136
- package/dist/setup/steps/connection.js +7 -9
- package/dist/setup/steps/platforms.js +9 -9
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +12 -13
- package/dist/setup/steps/stashdir.js +2 -3
- package/dist/setup/steps/tasks.js +237 -120
- package/dist/sources/freshness.js +1 -1
- package/dist/sources/provider-factory.js +11 -17
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +278 -34
- package/dist/sources/providers/git-provider.js +25 -23
- package/dist/sources/providers/git-stash.js +395 -106
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +7 -4
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +6 -1
- package/dist/sources/resolve.js +6 -5
- package/dist/sources/snapshot-fetchers/bluesky.js +146 -0
- package/dist/sources/snapshot-fetchers/content-extract.js +566 -0
- package/dist/sources/snapshot-fetchers/fetcher-util.js +41 -0
- package/dist/sources/snapshot-fetchers/github.js +100 -0
- package/dist/sources/snapshot-fetchers/host-guard.js +291 -0
- package/dist/sources/snapshot-fetchers/registry.js +17 -1
- package/dist/sources/snapshot-fetchers/robots.js +348 -0
- package/dist/sources/snapshot-fetchers/rss.js +282 -0
- package/dist/sources/snapshot-fetchers/secret-seam.js +42 -0
- package/dist/sources/snapshot-fetchers/website-ingest.js +566 -268
- package/dist/sources/snapshot-fetchers/x.js +910 -0
- package/dist/storage/database.js +7 -0
- package/dist/storage/engines/sqlite-migrations.js +23 -111
- package/dist/storage/managed-db.js +2 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +27 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -12
- package/dist/storage/repositories/index-connection.js +17 -6
- package/dist/storage/repositories/index-entries-repository.js +151 -240
- package/dist/storage/repositories/index-entry-mapper.js +15 -11
- package/dist/storage/repositories/index-fts-repository.js +5 -2
- package/dist/storage/repositories/index-llm-cache-repository.js +0 -1
- package/dist/storage/repositories/index-meta-repository.js +2 -3
- package/dist/storage/repositories/index-schema.js +10 -25
- package/dist/storage/repositories/index-utility-repository.js +15 -28
- package/dist/storage/repositories/index-vec-repository.js +6 -1
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +296 -59
- package/dist/storage/repositories/registry-cache.js +19 -0
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +15 -13
- package/dist/storage/repositories/workflow-runs-repository.js +52 -40
- package/dist/tasks/backends/cron.js +105 -15
- package/dist/tasks/backends/index.js +1 -1
- package/dist/tasks/backends/launchd.js +85 -38
- package/dist/tasks/backends/schtasks.js +135 -15
- package/dist/tasks/embedded.js +56 -40
- package/dist/tasks/parser.js +7 -157
- package/dist/tasks/resolve-akm-bin.js +137 -59
- package/dist/tasks/runner.js +79 -42
- package/dist/tasks/scheduler-invocation.js +220 -10
- package/dist/tasks/schema.js +24 -1
- package/dist/tasks/task-id.js +1 -3
- package/dist/tasks/validator.js +20 -6
- package/dist/workflows/authoring/authoring.js +94 -143
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/exec/frozen-judge.js +28 -2
- package/dist/workflows/exec/native-executor.js +77 -57
- package/dist/workflows/exec/param-secrets.js +9 -9
- package/dist/workflows/exec/run-workflow.js +133 -79
- package/dist/workflows/exec/step-work.js +219 -346
- package/dist/{migrate-storage-node.mjs → workflows/exec/unit-dispatch.js} +1 -5
- package/dist/workflows/ir/compile.js +141 -270
- package/dist/workflows/ir/freeze.js +40 -30
- package/dist/workflows/ir/params.js +135 -11
- package/dist/workflows/ir/plan-hash.js +1 -1
- package/dist/workflows/ir/schema.js +25 -26
- package/dist/workflows/parser.js +872 -307
- package/dist/workflows/program/expressions.js +20 -208
- package/dist/workflows/program/schema.js +7 -10
- package/dist/workflows/renderer.js +95 -68
- package/dist/workflows/resource-limits.js +2 -0
- package/dist/workflows/runtime/checkin.js +3 -3
- package/dist/workflows/runtime/plan-classifier.js +16 -75
- package/dist/workflows/runtime/runs.js +186 -127
- package/dist/workflows/runtime/unit-checkin.js +1 -1
- package/dist/workflows/runtime/unit-phases.js +2 -2
- package/dist/workflows/runtime/workflow-asset-loader.js +232 -83
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +30 -36
- package/dist/workflows/validator.js +21 -62
- package/docs/README.md +68 -0
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.7.0.md +11 -11
- package/docs/migration/release-notes/0.9.0.md +208 -27
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +564 -208
- package/docs/migration/v0.9.0-troubleshooting.md +561 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/cli.md +2253 -0
- package/docs/reference/configuration.md +358 -0
- package/docs/reference/data-and-telemetry.md +105 -42
- package/docs/reference/workflows.md +647 -0
- package/package.json +22 -11
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +81 -128
- package/schemas/akm-workflow.json +74 -73
- package/dist/assets/tasks/core/backup.yml +0 -5
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/cli/config-migrate.js +0 -1878
- package/dist/cli/config-validate.js +0 -41
- package/dist/commands/backup-cli.js +0 -56
- package/dist/commands/bundle/bundle-cli.js +0 -68
- package/dist/commands/bundle/bundle.js +0 -219
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -489
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/mv-cli.js +0 -1221
- package/dist/commands/sources/history.js +0 -201
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/core/migration-backup.js +0 -1231
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -95
- package/dist/llm/memory-infer-impl.js +0 -138
- package/dist/migrate/legacy/config-source-migration.js +0 -257
- package/dist/migrate/legacy/content-migration.js +0 -350
- package/dist/migrate/legacy/legacy-layout.js +0 -779
- package/dist/migrate/legacy/legacy-paths.js +0 -25
- package/dist/migrate/legacy/legacy-stash-json.js +0 -80
- package/dist/migrate/legacy/proposal-fs-import.js +0 -168
- package/dist/migrate/legacy/task-target-ref-migration.js +0 -278
- package/dist/migrate/legacy/three-db-cutover.js +0 -845
- package/dist/migrate/legacy/workflow-migrations-bodies.js +0 -52
- package/dist/migrate/legacy/workflow-migrations-frozen.js +0 -21
- package/dist/migrate/legacy-ref-grammar.js +0 -214
- package/dist/output/shapes/distill.js +0 -14
- package/dist/output/shapes/history.js +0 -11
- package/dist/output/text/distill.js +0 -6
- package/dist/output/text/enable-disable.js +0 -8
- package/dist/output/text/history.js +0 -6
- package/dist/registry/build-index.js +0 -382
- package/dist/schemas/akm-config.json +0 -4704
- package/dist/schemas/akm-task.json +0 -87
- package/dist/schemas/akm-workflow.json +0 -372
- package/dist/scripts/migrate-storage.js +0 -3816
- package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
- package/dist/workflows/cli.js +0 -53
- package/dist/workflows/exec/brief.js +0 -481
- package/dist/workflows/exec/report.js +0 -1460
- package/dist/workflows/exec/watch.js +0 -116
- package/dist/workflows/program/parser.js +0 -813
- package/dist/workflows/program/project.js +0 -104
|
@@ -1,35 +1,197 @@
|
|
|
1
1
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import fs from "node:fs";
|
|
4
6
|
import path from "node:path";
|
|
5
7
|
import { resolveStashDir } from "../core/common.js";
|
|
6
8
|
import { ConfigError } from "../core/errors.js";
|
|
7
|
-
import { getCacheDir, getConfigDir, getDataDir } from "../core/paths.js";
|
|
9
|
+
import { getCacheDir, getConfigDir, getDataDir, getTaskContextDir } from "../core/paths.js";
|
|
8
10
|
export const SCHEDULED_TASK_CONTEXT_KEYS = [
|
|
9
|
-
"
|
|
11
|
+
"AKM_BUNDLE_DIR",
|
|
10
12
|
"AKM_CONFIG_DIR",
|
|
11
13
|
"AKM_DATA_DIR",
|
|
12
14
|
"AKM_CACHE_DIR",
|
|
13
15
|
"AKM_STATE_DIR",
|
|
14
16
|
];
|
|
17
|
+
export const SCHEDULER_CONTEXT_ARG = "--scheduler-context";
|
|
15
18
|
/** Resolve the complete non-secret AKM directory context captured by schedulers. */
|
|
16
19
|
export function resolveScheduledTaskContext(env = process.env, platform = process.platform) {
|
|
17
20
|
return canonicalContext({
|
|
18
|
-
|
|
21
|
+
AKM_BUNDLE_DIR: path.resolve(resolveStashDir(env)),
|
|
19
22
|
AKM_CONFIG_DIR: path.resolve(getConfigDir(env, platform)),
|
|
20
23
|
AKM_DATA_DIR: path.resolve(getDataDir(env, platform)),
|
|
21
24
|
AKM_CACHE_DIR: path.resolve(getCacheDir(env)),
|
|
22
|
-
//
|
|
23
|
-
// that still honor it even though current durable state lives under DATA.
|
|
25
|
+
// Capture the complete process directory context used by scheduled commands.
|
|
24
26
|
AKM_STATE_DIR: path.resolve(resolveStateDir(env, platform)),
|
|
25
27
|
});
|
|
26
28
|
}
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Build the one scheduler-generated argv shape consumed by all backends.
|
|
31
|
+
*
|
|
32
|
+
* `target` records the bundle a non-primary task lives in as a `--bundle
|
|
33
|
+
* <bundle>` token so the scheduled `akm task run` resolves the task (and its
|
|
34
|
+
* relative asset refs) from that bundle. It is emitted ONLY when supplied and
|
|
35
|
+
* non-empty — callers pass it exclusively for a non-default bundle, so a
|
|
36
|
+
* primary-bundle (or default) task omits the target pair.
|
|
37
|
+
*/
|
|
38
|
+
export function buildScheduledTaskInvocation(akmArgv, id, contextPath, target) {
|
|
39
|
+
const targetArgs = target !== undefined && target !== "" ? ["--bundle", target] : [];
|
|
30
40
|
return {
|
|
31
|
-
argv: [
|
|
32
|
-
|
|
41
|
+
argv: [
|
|
42
|
+
...akmArgv,
|
|
43
|
+
SCHEDULER_CONTEXT_ARG,
|
|
44
|
+
assertAbsolutePath(contextPath),
|
|
45
|
+
"task",
|
|
46
|
+
"run",
|
|
47
|
+
id,
|
|
48
|
+
...targetArgs,
|
|
49
|
+
"--scheduled",
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function schedulerContextDescriptor(context = resolveScheduledTaskContext(), envPath = process.env.PATH ?? "") {
|
|
54
|
+
return {
|
|
55
|
+
version: 1,
|
|
56
|
+
environment: { ...canonicalContext(context), PATH: validatePathValue(envPath) },
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function schedulerContextPath(descriptor) {
|
|
60
|
+
const bytes = serializeDescriptor(descriptor);
|
|
61
|
+
const digest = createHash("sha256").update(bytes).digest("hex");
|
|
62
|
+
return path.join(getTaskContextDir(descriptor.environment), `${digest}.json`);
|
|
63
|
+
}
|
|
64
|
+
/** Write a content-addressed descriptor without ever replacing existing content. */
|
|
65
|
+
export function writeSchedulerContextDescriptor(descriptor = schedulerContextDescriptor()) {
|
|
66
|
+
const file = schedulerContextPath(descriptor);
|
|
67
|
+
const bytes = serializeDescriptor(descriptor);
|
|
68
|
+
fs.mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
69
|
+
if (process.platform !== "win32") {
|
|
70
|
+
fs.chmodSync(path.dirname(file), 0o700);
|
|
71
|
+
}
|
|
72
|
+
if (lstatIfExists(file)) {
|
|
73
|
+
if (serializeDescriptor(validateSchedulerContextDescriptor(file)) !== bytes)
|
|
74
|
+
throw invalidSchedulerContext();
|
|
75
|
+
return file;
|
|
76
|
+
}
|
|
77
|
+
const temp = path.join(path.dirname(file), `.${path.basename(file)}.${process.pid}.${Date.now()}.tmp`);
|
|
78
|
+
try {
|
|
79
|
+
fs.writeFileSync(temp, bytes, { encoding: "utf8", mode: 0o600, flag: "wx" });
|
|
80
|
+
try {
|
|
81
|
+
fs.renameSync(temp, file);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (!lstatIfExists(file) || serializeDescriptor(validateSchedulerContextDescriptor(file)) !== bytes)
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
restrictDescriptor(file);
|
|
88
|
+
validateSchedulerContextDescriptor(file);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
fs.rmSync(temp, { force: true });
|
|
92
|
+
}
|
|
93
|
+
return file;
|
|
94
|
+
}
|
|
95
|
+
export function loadSchedulerContextDescriptor(file, env = process.env) {
|
|
96
|
+
const descriptor = validateSchedulerContextDescriptor(file);
|
|
97
|
+
for (const key of SCHEDULED_TASK_CONTEXT_KEYS)
|
|
98
|
+
env[key] = descriptor.environment[key];
|
|
99
|
+
env.PATH = descriptor.environment.PATH;
|
|
100
|
+
}
|
|
101
|
+
export function validateSchedulerContextDescriptor(file) {
|
|
102
|
+
const absolute = assertAbsolutePath(file);
|
|
103
|
+
let linkStat;
|
|
104
|
+
try {
|
|
105
|
+
linkStat = fs.lstatSync(absolute);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw schedulerContextFileError(absolute, error instanceof Error ? error.message : String(error));
|
|
109
|
+
}
|
|
110
|
+
if (linkStat.isSymbolicLink())
|
|
111
|
+
throw schedulerContextFileError(absolute, "symbolic links are not allowed");
|
|
112
|
+
if (!linkStat.isFile())
|
|
113
|
+
throw schedulerContextFileError(absolute, "path is not a regular file");
|
|
114
|
+
let descriptorBytes;
|
|
115
|
+
let fd;
|
|
116
|
+
try {
|
|
117
|
+
const noFollow = process.platform === "win32" ? 0 : fs.constants.O_NOFOLLOW;
|
|
118
|
+
fd = fs.openSync(absolute, fs.constants.O_RDONLY | noFollow);
|
|
119
|
+
const stat = fs.fstatSync(fd);
|
|
120
|
+
if (!stat.isFile())
|
|
121
|
+
throw schedulerContextFileError(absolute, "path is not a regular file");
|
|
122
|
+
if (process.platform !== "win32") {
|
|
123
|
+
if (typeof process.getuid !== "function") {
|
|
124
|
+
throw schedulerContextFileError(absolute, "current uid is unavailable for ownership verification");
|
|
125
|
+
}
|
|
126
|
+
const uid = process.getuid();
|
|
127
|
+
if (stat.uid !== uid)
|
|
128
|
+
throw schedulerContextFileError(absolute, `file owner ${stat.uid} does not match uid ${uid}`);
|
|
129
|
+
if ((stat.mode & 0o077) !== 0) {
|
|
130
|
+
throw schedulerContextFileError(absolute, "group or other permissions must be disabled");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
descriptorBytes = fs.readFileSync(fd);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (error instanceof ConfigError)
|
|
137
|
+
throw error;
|
|
138
|
+
throw schedulerContextFileError(absolute, error instanceof Error ? error.message : String(error));
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
if (fd !== undefined)
|
|
142
|
+
fs.closeSync(fd);
|
|
143
|
+
}
|
|
144
|
+
const filename = path.basename(absolute);
|
|
145
|
+
const match = /^([a-f0-9]{64})\.json$/.exec(filename);
|
|
146
|
+
const digest = createHash("sha256").update(descriptorBytes).digest("hex");
|
|
147
|
+
if (!match || match[1] !== digest) {
|
|
148
|
+
throw schedulerContextFileError(absolute, "content SHA-256 does not match the descriptor filename");
|
|
149
|
+
}
|
|
150
|
+
let parsed;
|
|
151
|
+
try {
|
|
152
|
+
parsed = JSON.parse(descriptorBytes.toString("utf8"));
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
throw schedulerContextFileError(absolute, error instanceof Error ? error.message : String(error));
|
|
156
|
+
}
|
|
157
|
+
return canonicalDescriptor(parsed);
|
|
158
|
+
}
|
|
159
|
+
/** Load and remove the hidden descriptor argument before citty parses argv. */
|
|
160
|
+
export function consumeSchedulerContextArg(argv, env = process.env) {
|
|
161
|
+
const separator = argv.indexOf("--");
|
|
162
|
+
const index = argv.slice(0, separator === -1 ? argv.length : separator).indexOf(SCHEDULER_CONTEXT_ARG);
|
|
163
|
+
if (index === -1)
|
|
164
|
+
return argv;
|
|
165
|
+
const file = argv[index + 1];
|
|
166
|
+
if (!file) {
|
|
167
|
+
throw new ConfigError(`${SCHEDULER_CONTEXT_ARG} requires an absolute descriptor path.`, "INVALID_CONFIG_FILE");
|
|
168
|
+
}
|
|
169
|
+
loadSchedulerContextDescriptor(file, env);
|
|
170
|
+
return [...argv.slice(0, index), ...argv.slice(index + 2)];
|
|
171
|
+
}
|
|
172
|
+
export function parseScheduledTaskArgv(argv) {
|
|
173
|
+
const contextIndex = argv.indexOf(SCHEDULER_CONTEXT_ARG);
|
|
174
|
+
if (contextIndex < 1 || argv.indexOf(SCHEDULER_CONTEXT_ARG, contextIndex + 1) !== -1)
|
|
175
|
+
return undefined;
|
|
176
|
+
const contextPath = argv[contextIndex + 1];
|
|
177
|
+
const tasksIndex = contextIndex + 2;
|
|
178
|
+
if (!contextPath || argv[tasksIndex] !== "task" || argv[tasksIndex + 1] !== "run" || !argv[tasksIndex + 2]) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
let index = tasksIndex + 3;
|
|
182
|
+
let target;
|
|
183
|
+
if (argv[index] === "--bundle") {
|
|
184
|
+
target = argv[index + 1];
|
|
185
|
+
if (!target)
|
|
186
|
+
return undefined;
|
|
187
|
+
index += 2;
|
|
188
|
+
}
|
|
189
|
+
if (argv[index] !== "--scheduled" || index !== argv.length - 1)
|
|
190
|
+
return undefined;
|
|
191
|
+
return {
|
|
192
|
+
binding: [...argv.slice(0, contextIndex)],
|
|
193
|
+
contextPath: assertAbsolutePath(contextPath),
|
|
194
|
+
...(target !== undefined ? { target } : {}),
|
|
33
195
|
};
|
|
34
196
|
}
|
|
35
197
|
function canonicalContext(input) {
|
|
@@ -51,6 +213,54 @@ function canonicalContext(input) {
|
|
|
51
213
|
}
|
|
52
214
|
return context;
|
|
53
215
|
}
|
|
216
|
+
function canonicalDescriptor(input) {
|
|
217
|
+
if (typeof input !== "object" || input === null || Array.isArray(input))
|
|
218
|
+
throw invalidSchedulerContext();
|
|
219
|
+
const record = input;
|
|
220
|
+
if (Object.keys(record).length !== 2 || record.version !== 1)
|
|
221
|
+
throw invalidSchedulerContext();
|
|
222
|
+
const rawEnvironment = record.environment;
|
|
223
|
+
if (typeof rawEnvironment !== "object" || rawEnvironment === null || Array.isArray(rawEnvironment)) {
|
|
224
|
+
throw invalidSchedulerContext();
|
|
225
|
+
}
|
|
226
|
+
const environment = rawEnvironment;
|
|
227
|
+
if (Object.keys(environment).length !== SCHEDULED_TASK_CONTEXT_KEYS.length + 1)
|
|
228
|
+
throw invalidSchedulerContext();
|
|
229
|
+
const PATH = validatePathValue(environment.PATH);
|
|
230
|
+
const { PATH: _, ...rawContext } = environment;
|
|
231
|
+
return { version: 1, environment: { ...canonicalContext(rawContext), PATH } };
|
|
232
|
+
}
|
|
233
|
+
function serializeDescriptor(descriptor) {
|
|
234
|
+
return `${JSON.stringify(canonicalDescriptor(descriptor))}\n`;
|
|
235
|
+
}
|
|
236
|
+
function validatePathValue(value) {
|
|
237
|
+
if (typeof value !== "string" || containsControlCharacter(value))
|
|
238
|
+
throw invalidSchedulerContext();
|
|
239
|
+
return value;
|
|
240
|
+
}
|
|
241
|
+
function assertAbsolutePath(value) {
|
|
242
|
+
if (containsControlCharacter(value) || (!path.posix.isAbsolute(value) && !path.win32.isAbsolute(value))) {
|
|
243
|
+
throw invalidSchedulerContext();
|
|
244
|
+
}
|
|
245
|
+
return value;
|
|
246
|
+
}
|
|
247
|
+
function restrictDescriptor(file) {
|
|
248
|
+
if (process.platform !== "win32")
|
|
249
|
+
fs.chmodSync(file, 0o600);
|
|
250
|
+
}
|
|
251
|
+
function lstatIfExists(file) {
|
|
252
|
+
try {
|
|
253
|
+
return fs.lstatSync(file);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
if (error.code === "ENOENT")
|
|
257
|
+
return undefined;
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function schedulerContextFileError(file, reason) {
|
|
262
|
+
return new ConfigError(`Invalid scheduler context descriptor "${file}": ${reason}.`, "INVALID_CONFIG_FILE");
|
|
263
|
+
}
|
|
54
264
|
function containsControlCharacter(value) {
|
|
55
265
|
for (const char of value) {
|
|
56
266
|
const code = char.codePointAt(0) ?? 0;
|
package/dist/tasks/schema.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* Task asset schema. A task pairs a cron-style schedule with exactly one of:
|
|
6
6
|
*
|
|
7
|
-
* • a workflow target —
|
|
7
|
+
* • a workflow target — executed via `runWorkflowSteps()`
|
|
8
8
|
* • a prompt target — invoked via `runAgent()` against the configured
|
|
9
9
|
* agent harness (e.g. `opencode run`)
|
|
10
10
|
* • a command target — invoked directly via `Bun.spawn()`, no AI agent
|
|
@@ -13,3 +13,26 @@
|
|
|
13
13
|
* inline prompts use a YAML block scalar (`prompt: |`).
|
|
14
14
|
*/
|
|
15
15
|
export const TASK_SCHEMA_VERSION = 2;
|
|
16
|
+
/**
|
|
17
|
+
* Lint-level shape problems for a parsed task YAML mapping: the field rules
|
|
18
|
+
* `src/tasks/parser.ts` enforces at load time, phrased as diagnostics. The ONE
|
|
19
|
+
* definition shared by both task linters (`core/adapter/adapters/akm-lint.ts`
|
|
20
|
+
* and `akm-task-adapter.ts`) so lint and runtime cannot disagree — they
|
|
21
|
+
* previously did, in both directions: lint demanded `enabled` (which the
|
|
22
|
+
* parser defaults to `true`, so a runnable task was flagged) and never checked
|
|
23
|
+
* `version` (which the parser hard-requires as `2`, so a lint-clean task died
|
|
24
|
+
* at runtime with TASK_SCHEMA_VERSION_UNSUPPORTED). `schemas/akm-task.json`
|
|
25
|
+
* agrees with the parser: `required: [version, schedule]`, `version:
|
|
26
|
+
* {const: 2}`, `enabled` optional but boolean. Target-arity rules stay with
|
|
27
|
+
* each caller (they legitimately differ: at-least-one vs exactly-one).
|
|
28
|
+
*/
|
|
29
|
+
export function taskFieldProblems(data) {
|
|
30
|
+
const problems = [];
|
|
31
|
+
if (data.version !== TASK_SCHEMA_VERSION)
|
|
32
|
+
problems.push(`version (must be ${TASK_SCHEMA_VERSION})`);
|
|
33
|
+
if (typeof data.schedule !== "string" || data.schedule.trim() === "")
|
|
34
|
+
problems.push("schedule");
|
|
35
|
+
if ("enabled" in data && typeof data.enabled !== "boolean")
|
|
36
|
+
problems.push("enabled (must be a boolean when present)");
|
|
37
|
+
return problems;
|
|
38
|
+
}
|
package/dist/tasks/task-id.js
CHANGED
|
@@ -31,7 +31,5 @@ export function validateTaskId(id) {
|
|
|
31
31
|
return id;
|
|
32
32
|
}
|
|
33
33
|
export function normaliseTaskId(raw) {
|
|
34
|
-
|
|
35
|
-
// normalize filesystem-derived ids into a different filename.
|
|
36
|
-
return validateTaskId(raw.trim().replace(/\.(yml|md)$/, ""));
|
|
34
|
+
return validateTaskId(raw.trim());
|
|
37
35
|
}
|
package/dist/tasks/validator.js
CHANGED
|
@@ -10,15 +10,17 @@
|
|
|
10
10
|
* • the asset/file source exists (prompt targets)
|
|
11
11
|
* • the selected engine resolves (prompt targets)
|
|
12
12
|
*
|
|
13
|
-
* Validation is deliberately split from parsing: callers that only
|
|
14
|
-
*
|
|
15
|
-
* `
|
|
13
|
+
* Validation is deliberately split from parsing: callers that only inspect
|
|
14
|
+
* task metadata (e.g. `akm show`) can skip these checks, while
|
|
15
|
+
* `task add` and `task run` should always run them.
|
|
16
16
|
*/
|
|
17
17
|
import fs from "node:fs";
|
|
18
18
|
import path from "node:path";
|
|
19
|
+
import { placementSpecFor } from "../core/asset/asset-placement.js";
|
|
19
20
|
import { parseRefInput } from "../core/asset/resolve-ref.js";
|
|
20
21
|
import { loadConfig } from "../core/config/config.js";
|
|
21
22
|
import { NotFoundError } from "../core/errors.js";
|
|
23
|
+
import { NO_ENGINE_MESSAGE_SUFFIX, withEngineFallback } from "../integrations/agent/engine-fallback.js";
|
|
22
24
|
import { resolveEngine } from "../integrations/agent/engine-resolution.js";
|
|
23
25
|
import { resolveAssetPath } from "../sources/resolve.js";
|
|
24
26
|
import { parseSchedule } from "./schedule.js";
|
|
@@ -39,12 +41,15 @@ export async function validateTaskDocument(task, options) {
|
|
|
39
41
|
}
|
|
40
42
|
// Prompt target. Resolve the engine unconditionally — when no engine is
|
|
41
43
|
// set on the task, defaults.engine is required. Catching this at
|
|
42
|
-
// `
|
|
44
|
+
// `task add` / `task sync` time is much more useful than failing only
|
|
43
45
|
// when the OS scheduler fires.
|
|
44
|
-
|
|
46
|
+
// Resolve against the SAME effective config the runner will use
|
|
47
|
+
// (`tasks/runner.ts`), or validation rejects at `task add` / `task sync` a
|
|
48
|
+
// task the runner would have happily executed via the implicit fallback.
|
|
49
|
+
const { config } = withEngineFallback(loadConfig());
|
|
45
50
|
const engine = task.target.engine ?? config.defaults?.engine;
|
|
46
51
|
if (!engine)
|
|
47
|
-
throw new NotFoundError(`Task "${task.id}"
|
|
52
|
+
throw new NotFoundError(`Task "${task.id}" ${NO_ENGINE_MESSAGE_SUFFIX}`, "ASSET_NOT_FOUND");
|
|
48
53
|
const resolved = resolveEngine(engine, config);
|
|
49
54
|
if (task.target.llm !== undefined && resolved.kind !== "llm") {
|
|
50
55
|
throw new NotFoundError(`Task "${task.id}" uses llm overrides with non-LLM engine "${engine}".`, "ASSET_NOT_FOUND");
|
|
@@ -53,6 +58,15 @@ export async function validateTaskDocument(task, options) {
|
|
|
53
58
|
if (src.kind === "asset") {
|
|
54
59
|
const stashDir = options.stashDir;
|
|
55
60
|
const ref = parseRefInput(src.ref);
|
|
61
|
+
// D11 — `parseRefInput` now also accepts an opaque adapter conceptId (a
|
|
62
|
+
// ref whose leading segment is not an AKM placement dir), but
|
|
63
|
+
// `resolveAssetPath` (src/sources/resolve.ts) is placement-dir-only: it
|
|
64
|
+
// has no stash-subdir to route an opaque type through. Surface a clean
|
|
65
|
+
// domain error here rather than let that helper crash on a missing
|
|
66
|
+
// directory mapping.
|
|
67
|
+
if (placementSpecFor(ref.type) === undefined) {
|
|
68
|
+
throw new NotFoundError(`Task "${task.id}" prompt asset ref "${src.ref}" is not an AKM-placed asset — adapter-owned (opaque) prompt sources are not resolvable as task inputs yet.`, "ASSET_NOT_FOUND");
|
|
69
|
+
}
|
|
56
70
|
await resolveAssetPath(stashDir, ref.type, ref.name);
|
|
57
71
|
}
|
|
58
72
|
else if (src.kind === "file") {
|