akm-cli 0.9.0-rc.8 → 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 +105 -57
- 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 +37 -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 +101 -6
- 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 -1806
- 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 -1234
- 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 -223
- package/dist/migrate/legacy/content-migration.js +0 -305
- 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 -72
- package/dist/migrate/legacy/proposal-fs-import.js +0 -168
- package/dist/migrate/legacy/task-target-ref-migration.js +0 -272
- package/dist/migrate/legacy/three-db-cutover.js +0 -841
- 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,16 +1,34 @@
|
|
|
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 { randomUUID } from "node:crypto";
|
|
4
5
|
import fs from "node:fs";
|
|
5
6
|
import path from "node:path";
|
|
6
7
|
import { stashDirFor } from "../../core/asset/asset-placement.js";
|
|
8
|
+
import { isBundleSlug } from "../../core/asset/asset-ref.js";
|
|
7
9
|
import { displayRef, parseQualifiedRefInput } from "../../core/asset/resolve-ref.js";
|
|
10
|
+
import { loadConfig } from "../../core/config/config.js";
|
|
8
11
|
import { ConfigError, NotFoundError, UsageError } from "../../core/errors.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
12
|
+
import { defaultBundleForTarget } from "../../core/mutation-target.js";
|
|
13
|
+
import { warn } from "../../core/warn.js";
|
|
14
|
+
import { commitWriteTargetBoundary, prepareWriteTargetForMutation, resolveWriteTarget, } from "../../core/write-source.js";
|
|
15
|
+
import { withAssetMutationLease } from "../../indexer/index-writer-lock.js";
|
|
16
|
+
import { indexWrittenAssets } from "../../indexer/index-written-assets.js";
|
|
17
|
+
import { findSourceForPath, resolveSourceEntries } from "../../indexer/search/search-source.js";
|
|
18
|
+
import { isRemoteOrigin, resolveSourcesForLocator, resolveSourcesForOrigin } from "../../registry/origin-resolve.js";
|
|
11
19
|
import { syncFromRef } from "../../sources/providers/sync-from-ref.js";
|
|
12
20
|
import { resolveAssetPath } from "../../sources/resolve.js";
|
|
21
|
+
function destinationRef(config, target, type, name) {
|
|
22
|
+
if (!config || !target)
|
|
23
|
+
return undefined;
|
|
24
|
+
return displayRef({ type, name, bundleId: target.source.name }, defaultBundleForTarget(config));
|
|
25
|
+
}
|
|
13
26
|
export async function akmClone(options) {
|
|
27
|
+
const unmanagedDest = options.dest;
|
|
28
|
+
const hasUnmanagedDest = unmanagedDest !== undefined;
|
|
29
|
+
if (hasUnmanagedDest && options.target !== undefined) {
|
|
30
|
+
throw new UsageError("--dest and --bundle cannot be used together; choose an unmanaged path or a managed bundle.");
|
|
31
|
+
}
|
|
14
32
|
// F1b/F4b: accept the 0.9.0 conceptId spelling (`akm clone scripts/deploy.sh`).
|
|
15
33
|
// F5 origin split (parseQualifiedRefInput): `akm clone` also accepts a NON-slug
|
|
16
34
|
// clone SOURCE as the `origin//conceptId` prefix — a registry ref
|
|
@@ -19,25 +37,29 @@ export async function akmClone(options) {
|
|
|
19
37
|
// fallback below (the strict new-grammar parser rejects such origins as they
|
|
20
38
|
// are not bundle slugs).
|
|
21
39
|
const parsed = parseQualifiedRefInput(options.sourceRef);
|
|
22
|
-
|
|
40
|
+
const config = hasUnmanagedDest ? undefined : loadConfig();
|
|
41
|
+
const resolvedWriteTarget = config ? resolveWriteTarget(config, options.target) : undefined;
|
|
42
|
+
const writeTarget = resolvedWriteTarget ? prepareWriteTargetForMutation(resolvedWriteTarget) : undefined;
|
|
43
|
+
// An unmanaged --dest does not require any configured write target.
|
|
23
44
|
let allSources;
|
|
24
45
|
try {
|
|
25
46
|
allSources = resolveSourceEntries();
|
|
26
47
|
}
|
|
27
48
|
catch (err) {
|
|
28
|
-
if (
|
|
49
|
+
if (hasUnmanagedDest) {
|
|
29
50
|
allSources = [];
|
|
30
51
|
}
|
|
31
52
|
else {
|
|
32
53
|
throw err;
|
|
33
54
|
}
|
|
34
55
|
}
|
|
35
|
-
const
|
|
36
|
-
const destRoot = options.dest ? path.resolve(options.dest) : primarySource?.path;
|
|
56
|
+
const destRoot = unmanagedDest !== undefined ? path.resolve(unmanagedDest) : writeTarget?.source.path;
|
|
37
57
|
if (!destRoot) {
|
|
38
|
-
throw new ConfigError("No
|
|
58
|
+
throw new ConfigError("No writable source configured and no --dest provided. Run `akm bundle create` or pass --dest.", "STASH_DIR_NOT_FOUND");
|
|
39
59
|
}
|
|
40
|
-
let searchSources =
|
|
60
|
+
let searchSources = parsed.origin && !isBundleSlug(parsed.origin)
|
|
61
|
+
? resolveSourcesForLocator(parsed.origin, allSources)
|
|
62
|
+
: resolveSourcesForOrigin(parsed.origin, allSources);
|
|
41
63
|
// Remote fetch fallback: if no local source matched and origin looks remote, fetch it
|
|
42
64
|
let remoteFetched;
|
|
43
65
|
if (searchSources.length === 0 && parsed.origin && isRemoteOrigin(parsed.origin, allSources)) {
|
|
@@ -99,7 +121,11 @@ export async function akmClone(options) {
|
|
|
99
121
|
throw new UsageError(`Unsafe clone name "${destName}": resolves outside the target type directory.`);
|
|
100
122
|
}
|
|
101
123
|
}
|
|
102
|
-
const destLabel =
|
|
124
|
+
const destLabel = hasUnmanagedDest
|
|
125
|
+
? "at destination"
|
|
126
|
+
: writeTarget?.selector
|
|
127
|
+
? `in target "${writeTarget.selector}"`
|
|
128
|
+
: "in working stash";
|
|
103
129
|
// Guard against self-clone
|
|
104
130
|
if (parsed.type === "skill") {
|
|
105
131
|
const sourceSkillDir = path.resolve(path.dirname(sourcePath));
|
|
@@ -117,51 +143,109 @@ export async function akmClone(options) {
|
|
|
117
143
|
throw new Error(`Source and destination are the same path. Use --name to provide a new name for the clone.`);
|
|
118
144
|
}
|
|
119
145
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
146
|
+
return withAssetMutationLease("clone", async () => {
|
|
147
|
+
let destPath;
|
|
148
|
+
let overwritten;
|
|
149
|
+
let operationPaths;
|
|
150
|
+
if (parsed.type === "skill") {
|
|
151
|
+
const sourceSkillDir = path.dirname(sourcePath);
|
|
152
|
+
const destSkillDir = path.join(destRoot, typeDir, destName);
|
|
153
|
+
assertNoDestinationSymlinkParent(destRoot, destSkillDir);
|
|
154
|
+
const existing = lstatIfExists(destSkillDir);
|
|
155
|
+
overwritten = existing !== undefined;
|
|
156
|
+
if (overwritten && !options.force) {
|
|
157
|
+
throw new UsageError(`Asset already exists ${destLabel}: ${destSkillDir}. Use --force to overwrite.`, "RESOURCE_ALREADY_EXISTS");
|
|
158
|
+
}
|
|
159
|
+
const replacedPaths = existing?.isDirectory() && !existing.isSymbolicLink() ? listTreeFiles(destSkillDir) : [];
|
|
160
|
+
// Stage first so a failed source copy leaves the old entry untouched. A
|
|
161
|
+
// final symlink is removed as an entry, never traversed.
|
|
162
|
+
const stagingDir = `${destSkillDir}.tmp-${randomUUID()}`;
|
|
163
|
+
try {
|
|
164
|
+
fs.cpSync(sourceSkillDir, stagingDir, { recursive: true, errorOnExist: true, force: false });
|
|
165
|
+
if (overwritten)
|
|
166
|
+
fs.rmSync(destSkillDir, { recursive: true, force: true });
|
|
167
|
+
fs.renameSync(stagingDir, destSkillDir);
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
fs.rmSync(stagingDir, { recursive: true, force: true });
|
|
171
|
+
throw err;
|
|
172
|
+
}
|
|
173
|
+
destPath = path.join(destSkillDir, "SKILL.md");
|
|
174
|
+
operationPaths = [...new Set([...replacedPaths, ...listTreeFiles(destSkillDir)])];
|
|
127
175
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
176
|
+
else {
|
|
177
|
+
destPath = path.join(destRoot, typeDir, destName);
|
|
178
|
+
assertNoDestinationSymlinkParent(destRoot, destPath);
|
|
179
|
+
const existing = lstatIfExists(destPath);
|
|
180
|
+
overwritten = existing !== undefined;
|
|
181
|
+
if (overwritten && !options.force) {
|
|
182
|
+
throw new UsageError(`Asset already exists ${destLabel}: ${destPath}. Use --force to overwrite.`, "RESOURCE_ALREADY_EXISTS");
|
|
183
|
+
}
|
|
184
|
+
fs.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
185
|
+
const stagingPath = `${destPath}.tmp-${randomUUID()}`;
|
|
186
|
+
try {
|
|
187
|
+
fs.copyFileSync(sourcePath, stagingPath, fs.constants.COPYFILE_EXCL);
|
|
188
|
+
if (overwritten)
|
|
189
|
+
fs.rmSync(destPath, { recursive: true, force: true });
|
|
190
|
+
fs.renameSync(stagingPath, destPath);
|
|
137
191
|
}
|
|
138
|
-
|
|
192
|
+
catch (err) {
|
|
193
|
+
fs.rmSync(stagingPath, { force: true });
|
|
194
|
+
throw err;
|
|
195
|
+
}
|
|
196
|
+
operationPaths = [destPath];
|
|
139
197
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
198
|
+
const ref = destinationRef(config, writeTarget, parsed.type, destName);
|
|
199
|
+
if (writeTarget) {
|
|
200
|
+
const commitRoot = writeTarget.source.repoPath ?? writeTarget.source.path;
|
|
201
|
+
const commitPaths = operationPaths.map((filePath) => path.relative(commitRoot, filePath).replaceAll(path.sep, "/"));
|
|
202
|
+
commitWriteTargetBoundary(writeTarget, `Clone ${ref}`, { paths: commitPaths });
|
|
203
|
+
if (!(await indexWrittenAssets(writeTarget.source.path, [destPath], { bundleId: writeTarget.source.name }))) {
|
|
204
|
+
warn(`Clone ${ref} succeeded, but its targeted index update failed; run \`akm index\` to refresh it.`);
|
|
205
|
+
}
|
|
143
206
|
}
|
|
144
|
-
destPath = path.join(destSkillDir, "SKILL.md");
|
|
145
|
-
const ref = displayRef({ type: parsed.type, name: destName, bundleId: "local" });
|
|
146
207
|
return {
|
|
147
208
|
source: { path: sourcePath, registryId: sourceSource?.registryId },
|
|
148
|
-
destination: { path: destPath, ref },
|
|
209
|
+
destination: { path: destPath, ...(ref ? { ref } : {}) },
|
|
149
210
|
overwritten,
|
|
150
211
|
...(remoteFetched ? { remoteFetched } : {}),
|
|
151
212
|
};
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function lstatIfExists(filePath) {
|
|
216
|
+
try {
|
|
217
|
+
return fs.lstatSync(filePath);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
if (error.code === "ENOENT")
|
|
221
|
+
return undefined;
|
|
222
|
+
throw error;
|
|
152
223
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
224
|
+
}
|
|
225
|
+
function assertNoDestinationSymlinkParent(root, destination) {
|
|
226
|
+
const resolvedRoot = path.resolve(root);
|
|
227
|
+
const relativeParent = path.relative(resolvedRoot, path.dirname(path.resolve(destination)));
|
|
228
|
+
if (relativeParent === "" || relativeParent === ".")
|
|
229
|
+
return;
|
|
230
|
+
if (relativeParent.startsWith("..") || path.isAbsolute(relativeParent)) {
|
|
231
|
+
throw new UsageError(`Clone destination escapes the selected target: ${destination}.`, "PATH_ESCAPE_VIOLATION");
|
|
232
|
+
}
|
|
233
|
+
let current = resolvedRoot;
|
|
234
|
+
for (const segment of relativeParent.split(path.sep)) {
|
|
235
|
+
current = path.join(current, segment);
|
|
236
|
+
if (lstatIfExists(current)?.isSymbolicLink()) {
|
|
237
|
+
throw new UsageError(`Clone destination has a symbolic-link parent outside the selected target boundary: ${current}.`, "PATH_ESCAPE_VIOLATION");
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
function listTreeFiles(root) {
|
|
242
|
+
const files = [];
|
|
243
|
+
for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
|
|
244
|
+
const entryPath = path.join(root, entry.name);
|
|
245
|
+
if (entry.isDirectory())
|
|
246
|
+
files.push(...listTreeFiles(entryPath));
|
|
247
|
+
else
|
|
248
|
+
files.push(entryPath);
|
|
157
249
|
}
|
|
158
|
-
|
|
159
|
-
fs.copyFileSync(sourcePath, destPath);
|
|
160
|
-
const ref = displayRef({ type: parsed.type, name: destName, bundleId: "local" });
|
|
161
|
-
return {
|
|
162
|
-
source: { path: sourcePath, registryId: sourceSource?.registryId },
|
|
163
|
-
destination: { path: destPath, ref },
|
|
164
|
-
overwritten,
|
|
165
|
-
...(remoteFetched ? { remoteFetched } : {}),
|
|
166
|
-
};
|
|
250
|
+
return files;
|
|
167
251
|
}
|
|
@@ -2,10 +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
|
import path from "node:path";
|
|
5
|
+
import { detectAdapterId } from "../../core/adapter/detect-adapter.js";
|
|
5
6
|
import { isRemoteUrl } from "../../core/common.js";
|
|
6
|
-
import { bundleEntryToSourceEntry, bundlesToSourceEntries, getSources,
|
|
7
|
+
import { bundleEntryToSourceEntry, bundlesToSourceEntries, getSources, mutateConfig } from "../../core/config/config.js";
|
|
7
8
|
import { ConfigError, UsageError } from "../../core/errors.js";
|
|
8
|
-
import { resolveSourceEntries } from "../../indexer/search/search-source.js";
|
|
9
9
|
import { bundleKeyForPath, bundleKeyForUrl, nextBundleKey } from "./bundle-config-ops.js";
|
|
10
10
|
// ── Operations ──────────────────────────────────────────────────────────────
|
|
11
11
|
/**
|
|
@@ -24,17 +24,32 @@ export function addStash(opts) {
|
|
|
24
24
|
throw new ConfigError("writable: true is only supported on filesystem and git sources", "INVALID_CONFIG_FILE");
|
|
25
25
|
}
|
|
26
26
|
let result;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
const targetIsUrl = isRemoteUrl(target);
|
|
28
|
+
if (targetIsUrl && !providerType) {
|
|
29
|
+
throw new UsageError("--provider is required for URL sources (e.g. --provider git --provider website)");
|
|
30
|
+
}
|
|
31
|
+
// R-013: `--provider npm` names an npm package SPEC (e.g. "lodash",
|
|
32
|
+
// "@scope/pkg@^2"), never a URL — a tarball URL is not installable as a
|
|
33
|
+
// package spec and would only fail much later, at first sync, with a
|
|
34
|
+
// confusing "Invalid npm package name" error. Reject it loudly here instead.
|
|
35
|
+
if (providerType === "npm" && targetIsUrl) {
|
|
36
|
+
throw new UsageError(`--provider npm expects a package spec (e.g. "lodash" or "@scope/pkg@^2"), not a URL: "${target}". ` +
|
|
37
|
+
"Drop --provider npm and re-run `akm bundle add <package>` to add an npm source.");
|
|
31
38
|
}
|
|
39
|
+
// A bare (non-URL) target with --provider npm is a declarative npm source
|
|
40
|
+
// add — the same "locator, not a URL" descriptor path used for git/website
|
|
41
|
+
// URL sources below. Without this, a non-URL target fell through to the
|
|
42
|
+
// filesystem branch below and `--provider npm` was silently ignored,
|
|
43
|
+
// creating a bogus filesystem bundle for the current working directory
|
|
44
|
+
// (R-013).
|
|
45
|
+
const useDescriptorPath = targetIsUrl || providerType === "npm";
|
|
32
46
|
mutateConfig((config) => {
|
|
33
47
|
const bundles = { ...(config.bundles ?? {}) };
|
|
34
48
|
let key;
|
|
35
|
-
if (
|
|
49
|
+
if (useDescriptorPath) {
|
|
36
50
|
if (bundleKeyForUrl(config, target)) {
|
|
37
|
-
|
|
51
|
+
const already = targetIsUrl ? "Source URL already configured" : "Source already configured";
|
|
52
|
+
result = { sources: getSources(config), added: false, message: already };
|
|
38
53
|
return config;
|
|
39
54
|
}
|
|
40
55
|
key = nextBundleKey(bundles, name, target);
|
|
@@ -47,7 +62,13 @@ export function addStash(opts) {
|
|
|
47
62
|
return config;
|
|
48
63
|
}
|
|
49
64
|
key = nextBundleKey(bundles, name, resolvedPath);
|
|
50
|
-
bundles[key] = {
|
|
65
|
+
bundles[key] = {
|
|
66
|
+
path: resolvedPath,
|
|
67
|
+
...(writable === true ? { writable: true } : {}),
|
|
68
|
+
components: {
|
|
69
|
+
main: { root: ".", adapter: detectAdapterId(resolvedPath), writable: writable ?? true },
|
|
70
|
+
},
|
|
71
|
+
};
|
|
51
72
|
}
|
|
52
73
|
const next = { ...config, bundles };
|
|
53
74
|
const entry = bundleEntryToSourceEntry(key, bundles[key]);
|
|
@@ -56,17 +77,25 @@ export function addStash(opts) {
|
|
|
56
77
|
});
|
|
57
78
|
return result;
|
|
58
79
|
}
|
|
59
|
-
/**
|
|
60
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Build the 0.9.0 bundle descriptor for a declarative (non-filesystem) source
|
|
82
|
+
* (spec §10.1). `locator` is a URL for git/website; for npm it is a bare
|
|
83
|
+
* package spec (e.g. "lodash", "@scope/pkg@^2") — never a URL (R-013,
|
|
84
|
+
* rejected earlier in {@link addStash}).
|
|
85
|
+
*/
|
|
86
|
+
function urlBundleDescriptor(providerType, locator, options, writable) {
|
|
61
87
|
if (providerType === "website") {
|
|
62
88
|
// Website provider options ride on the (passthrough) website descriptor and
|
|
63
89
|
// round-trip back to `entry.options` via bundleEntryToSourceEntry.
|
|
64
|
-
return {
|
|
90
|
+
return {
|
|
91
|
+
website: { url: locator, ...(options ?? {}) },
|
|
92
|
+
components: { main: { root: ".", adapter: "website-snapshot", writable: false } },
|
|
93
|
+
};
|
|
65
94
|
}
|
|
66
95
|
if (providerType === "npm")
|
|
67
|
-
return { npm:
|
|
96
|
+
return { npm: locator };
|
|
68
97
|
if (providerType === "git")
|
|
69
|
-
return { git:
|
|
98
|
+
return { git: locator, ...(writable ? { writable: true } : {}) };
|
|
70
99
|
throw new ConfigError(`unsupported source type "${providerType}"; expected filesystem, git, website, or npm`, "INVALID_CONFIG_FILE");
|
|
71
100
|
}
|
|
72
101
|
/**
|
|
@@ -97,12 +126,3 @@ export function removeStash(target) {
|
|
|
97
126
|
});
|
|
98
127
|
return result;
|
|
99
128
|
}
|
|
100
|
-
/**
|
|
101
|
-
* List all stash sources (local filesystem + configured stashes).
|
|
102
|
-
*/
|
|
103
|
-
export function listStashes() {
|
|
104
|
-
const config = loadConfig();
|
|
105
|
-
const localSources = resolveSourceEntries();
|
|
106
|
-
const sources = getSources(config);
|
|
107
|
-
return { localSources, sources };
|
|
108
|
-
}
|