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,41 +0,0 @@
|
|
|
1
|
-
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
-
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
-
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
/**
|
|
5
|
-
* `akm config validate` — verify the on-disk config matches the schema.
|
|
6
|
-
*
|
|
7
|
-
* Reads the user config file, validates against AkmConfigSchema, and either
|
|
8
|
-
* prints "All checks passed." or a list of structured errors (path + message).
|
|
9
|
-
* Exits non-zero on errors so it composes well in CI hooks.
|
|
10
|
-
*/
|
|
11
|
-
import { parseConfigText, readConfigText } from "../core/config/config-io.js";
|
|
12
|
-
import { CURRENT_CONFIG_VERSION, validateConfigShape } from "../core/config/config-schema.js";
|
|
13
|
-
import { ConfigError } from "../core/errors.js";
|
|
14
|
-
import { getConfigPath } from "../core/paths.js";
|
|
15
|
-
export async function runConfigValidate() {
|
|
16
|
-
const configPath = getConfigPath();
|
|
17
|
-
let text;
|
|
18
|
-
try {
|
|
19
|
-
text = readConfigText(configPath);
|
|
20
|
-
}
|
|
21
|
-
catch (err) {
|
|
22
|
-
const detail = err instanceof Error ? err.message : String(err);
|
|
23
|
-
throw new ConfigError(`Could not read config at ${configPath}: ${detail}`, "INVALID_CONFIG_FILE");
|
|
24
|
-
}
|
|
25
|
-
if (text === undefined) {
|
|
26
|
-
console.log(`No config file at ${configPath} — nothing to validate.`);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
// parseConfigText throws ConfigError on malformed JSON (#458). Surface as-is.
|
|
30
|
-
const raw = parseConfigText(text, configPath);
|
|
31
|
-
if (raw.configVersion !== CURRENT_CONFIG_VERSION) {
|
|
32
|
-
throw new ConfigError(`Unsupported configVersion at ${configPath}: expected "${CURRENT_CONFIG_VERSION}".`, "UNSUPPORTED_CONFIG_VERSION", "Recreate engines and improve.strategies manually; AKM 0.9 never translates profile-based configuration.");
|
|
33
|
-
}
|
|
34
|
-
const result = validateConfigShape(raw);
|
|
35
|
-
if (result.ok) {
|
|
36
|
-
console.log(`All checks passed. (${configPath})`);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
const lines = result.errors.map((e) => ` - ${e.path || "(root)"}: ${e.message}`).join("\n");
|
|
40
|
-
throw new ConfigError(`Config at ${configPath} has ${result.errors.length} validation error${result.errors.length === 1 ? "" : "s"}:\n${lines}`, "INVALID_CONFIG_FILE", "Fix the listed fields, or run `akm config migrate` if the errors look like legacy-shape leftovers.");
|
|
41
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
-
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
-
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
import { defineGroupCommand, defineJsonCommand, output } from "../cli/shared.js";
|
|
5
|
-
import { UsageError } from "../core/errors.js";
|
|
6
|
-
import { createMigrationBackup, MIGRATION_BACKUP_VERSION, restoreMigrationBackup } from "../core/migration-backup.js";
|
|
7
|
-
function requireVersion(value) {
|
|
8
|
-
if (value !== MIGRATION_BACKUP_VERSION) {
|
|
9
|
-
throw new UsageError(`Unsupported migration backup target ${JSON.stringify(value)}; expected ${MIGRATION_BACKUP_VERSION}.`, "INVALID_FLAG_VALUE");
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export const backupCommand = defineGroupCommand({
|
|
13
|
-
meta: { name: "backup", description: "Create or restore a verified migration recovery run" },
|
|
14
|
-
subCommands: {
|
|
15
|
-
create: defineJsonCommand({
|
|
16
|
-
meta: { name: "create", description: "Create a unique installation-scoped migration recovery run" },
|
|
17
|
-
args: {
|
|
18
|
-
for: { type: "string", required: true, description: "Migration target version (0.9.0)" },
|
|
19
|
-
},
|
|
20
|
-
run({ args }) {
|
|
21
|
-
requireVersion(args.for);
|
|
22
|
-
const result = createMigrationBackup();
|
|
23
|
-
output("backup", {
|
|
24
|
-
action: "create",
|
|
25
|
-
for: MIGRATION_BACKUP_VERSION,
|
|
26
|
-
path: result.path,
|
|
27
|
-
created: result.created,
|
|
28
|
-
manifest: result.manifest,
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
}),
|
|
32
|
-
restore: defineJsonCommand({
|
|
33
|
-
meta: { name: "restore", description: "Restore a recovery run after preserving a rescue snapshot" },
|
|
34
|
-
args: {
|
|
35
|
-
for: { type: "string", required: true, description: "Migration target version (0.9.0)" },
|
|
36
|
-
run: { type: "string", description: "Backup run ID (defaults to the newest applicable run)" },
|
|
37
|
-
confirm: { type: "boolean", default: false, description: "Confirm destructive restoration" },
|
|
38
|
-
},
|
|
39
|
-
run({ args }) {
|
|
40
|
-
requireVersion(args.for);
|
|
41
|
-
const result = restoreMigrationBackup(args.confirm, args.run);
|
|
42
|
-
output("backup", {
|
|
43
|
-
action: "restore",
|
|
44
|
-
for: MIGRATION_BACKUP_VERSION,
|
|
45
|
-
path: result.path,
|
|
46
|
-
restored: true,
|
|
47
|
-
rescuePath: result.rescuePath,
|
|
48
|
-
manifest: result.manifest,
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
}),
|
|
52
|
-
},
|
|
53
|
-
defaultRun() {
|
|
54
|
-
throw new UsageError("Choose `backup create` or `backup restore`.", "MISSING_REQUIRED_ARGUMENT");
|
|
55
|
-
},
|
|
56
|
-
});
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
-
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
-
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
/**
|
|
5
|
-
* `akm bundle` command family (normative spec §29 CLI convergence). Groups the
|
|
6
|
-
* 0.9.0 read verbs over the workspace bundle state:
|
|
7
|
-
*
|
|
8
|
-
* akm bundle list — configured bundles + resolved lock state
|
|
9
|
-
* akm bundle show <id> — one bundle's config, lock state, item count
|
|
10
|
-
* akm bundle items <id> — a bundle's indexed items (by canonical ref)
|
|
11
|
-
*
|
|
12
|
-
* Mirrors the existing group-command wiring (`graph`, `env`, `secret`): a
|
|
13
|
-
* `defineGroupCommand` whose `defaultRun` fires only on the bare `akm bundle`
|
|
14
|
-
* invocation (falls back to `list`), and `defineJsonCommand` leaves that emit
|
|
15
|
-
* the standard JSON envelope with `--format` parity. The lifecycle verbs
|
|
16
|
-
* (`create`/`install`/`update`/`remove`/`sync`/`export`) stay on their existing
|
|
17
|
-
* top-level commands for 0.9.0; `bind`/`unbind`/`bindings` are Tier B and are
|
|
18
|
-
* intentionally not registered here (spec §18 staging note, §29).
|
|
19
|
-
*/
|
|
20
|
-
import { defineGroupCommand, defineJsonCommand, output } from "../../cli/shared.js";
|
|
21
|
-
import { akmBundleItems, akmBundleList, akmBundleShow } from "./bundle.js";
|
|
22
|
-
const bundleSubCommands = {
|
|
23
|
-
list: defineJsonCommand({
|
|
24
|
-
meta: {
|
|
25
|
-
name: "list",
|
|
26
|
-
description: "List configured bundles (desired config + resolved lock state), defaultBundle marked",
|
|
27
|
-
},
|
|
28
|
-
run() {
|
|
29
|
-
output("bundle-list", akmBundleList());
|
|
30
|
-
},
|
|
31
|
-
}),
|
|
32
|
-
show: defineJsonCommand({
|
|
33
|
-
meta: {
|
|
34
|
-
name: "show",
|
|
35
|
-
description: "Show one bundle's source descriptor, resolved lock state, components, and item count",
|
|
36
|
-
},
|
|
37
|
-
args: {
|
|
38
|
-
// Optional in citty so run() is invoked even when omitted; the body then
|
|
39
|
-
// throws a structured UsageError (exit 2) instead of citty's raw
|
|
40
|
-
// required-positional error (which escapes as an unclassified exit 70).
|
|
41
|
-
id: { type: "positional", description: "Bundle id (a key in the workspace `bundles` config)", required: false },
|
|
42
|
-
},
|
|
43
|
-
run({ args }) {
|
|
44
|
-
output("bundle-show", akmBundleShow({ id: typeof args.id === "string" ? args.id : "" }));
|
|
45
|
-
},
|
|
46
|
-
}),
|
|
47
|
-
items: defineJsonCommand({
|
|
48
|
-
meta: {
|
|
49
|
-
name: "items",
|
|
50
|
-
description: "List a bundle's indexed items by canonical `bundle//conceptId` ref, with a per-type count",
|
|
51
|
-
},
|
|
52
|
-
args: {
|
|
53
|
-
// Optional for the same reason as `show` above: a missing id must surface
|
|
54
|
-
// as a structured UsageError (exit 2), not citty's unclassified exit 70.
|
|
55
|
-
id: { type: "positional", description: "Bundle id (a key in the workspace `bundles` config)", required: false },
|
|
56
|
-
},
|
|
57
|
-
run({ args }) {
|
|
58
|
-
output("bundle-items", akmBundleItems({ id: typeof args.id === "string" ? args.id : "" }));
|
|
59
|
-
},
|
|
60
|
-
}),
|
|
61
|
-
};
|
|
62
|
-
export const bundleCommand = defineGroupCommand({
|
|
63
|
-
meta: { name: "bundle", description: "Inspect the workspace's configured bundles and their resolved lock state" },
|
|
64
|
-
subCommands: bundleSubCommands,
|
|
65
|
-
defaultRun() {
|
|
66
|
-
output("bundle-list", akmBundleList());
|
|
67
|
-
},
|
|
68
|
-
});
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
-
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
-
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
/**
|
|
5
|
-
* `akm bundle` read surface — the 0.9.0 CLI convergence toward the bundle
|
|
6
|
-
* command family (normative spec §29). This module owns the READ verbs
|
|
7
|
-
* (`list`, `show`, `items`) over the workspace's resolved bundle state:
|
|
8
|
-
*
|
|
9
|
-
* - the desired configuration (`bundles` / `defaultBundle`, spec §10.1), and
|
|
10
|
-
* - the resolved lock state (`akm.lock`, spec §10.2), joined by bundle id, and
|
|
11
|
-
* - the persisted index (`item_ref` / `bundle_id` provenance columns) for the
|
|
12
|
-
* per-bundle item listing.
|
|
13
|
-
*
|
|
14
|
-
* Scope note (deliberate): the lifecycle verbs the §29 direction also lists
|
|
15
|
-
* (`create`/`install`/`update`/`remove`/`sync`/`export`) keep their existing
|
|
16
|
-
* top-level commands (`akm add`/`update`/`remove`/`sync`, …) for 0.9.0 — this
|
|
17
|
-
* chunk adds the new read namespace over the freshly-landed `bundles` config +
|
|
18
|
-
* lock state, nothing more. `akm bind|unbind|bindings` are Tier B and are NOT
|
|
19
|
-
* implemented (spec §18 staging note, §29). No trust/activation machinery lives
|
|
20
|
-
* here — these are pure reads of already-persisted state.
|
|
21
|
-
*/
|
|
22
|
-
import fs from "node:fs";
|
|
23
|
-
import { loadConfig } from "../../core/config/config.js";
|
|
24
|
-
import { NotFoundError, UsageError } from "../../core/errors.js";
|
|
25
|
-
import { getDbPath } from "../../core/paths.js";
|
|
26
|
-
import { readLockfile } from "../../integrations/lockfile.js";
|
|
27
|
-
import { closeDatabase, openExistingDatabase } from "../../storage/repositories/index-connection.js";
|
|
28
|
-
import { getAllEntries } from "../../storage/repositories/index-entries-repository.js";
|
|
29
|
-
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
30
|
-
/** Derive the single source descriptor view from a validated bundle entry. */
|
|
31
|
-
function describeBundleSource(entry) {
|
|
32
|
-
if (typeof entry.path === "string" && entry.path.length > 0) {
|
|
33
|
-
return { kind: "path", locator: entry.path };
|
|
34
|
-
}
|
|
35
|
-
if (typeof entry.git === "string" && entry.git.length > 0) {
|
|
36
|
-
return { kind: "git", locator: entry.git };
|
|
37
|
-
}
|
|
38
|
-
if (entry.website && typeof entry.website.url === "string") {
|
|
39
|
-
return {
|
|
40
|
-
kind: "website",
|
|
41
|
-
locator: entry.website.url,
|
|
42
|
-
...(typeof entry.website.maxPages === "number" ? { maxPages: entry.website.maxPages } : {}),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
if (typeof entry.npm === "string" && entry.npm.length > 0) {
|
|
46
|
-
return { kind: "npm", locator: entry.npm };
|
|
47
|
-
}
|
|
48
|
-
// A validated config always carries exactly one descriptor; this fallback
|
|
49
|
-
// only fires for a hand-corrupted entry that bypassed schema validation.
|
|
50
|
-
return { kind: "path", locator: "" };
|
|
51
|
-
}
|
|
52
|
-
/** Project a lockfile entry onto the §10.2 view (drops the redundant `id`). */
|
|
53
|
-
function toLockView(entry) {
|
|
54
|
-
if (!entry)
|
|
55
|
-
return null;
|
|
56
|
-
return {
|
|
57
|
-
source: entry.source,
|
|
58
|
-
ref: entry.ref,
|
|
59
|
-
...(entry.resolvedVersion !== undefined ? { resolvedVersion: entry.resolvedVersion } : {}),
|
|
60
|
-
...(entry.resolvedRevision !== undefined ? { resolvedRevision: entry.resolvedRevision } : {}),
|
|
61
|
-
...(entry.integrity !== undefined ? { integrity: entry.integrity } : {}),
|
|
62
|
-
...(entry.localRoot !== undefined ? { localRoot: entry.localRoot } : {}),
|
|
63
|
-
...(entry.manifestDigest !== undefined ? { manifestDigest: entry.manifestDigest } : {}),
|
|
64
|
-
...(entry.adapterIds !== undefined ? { adapterIds: entry.adapterIds } : {}),
|
|
65
|
-
...(entry.installedAt !== undefined ? { installedAt: entry.installedAt } : {}),
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/** Component views for a bundle entry (transitional single-entry `components` map). */
|
|
69
|
-
function describeComponents(entry) {
|
|
70
|
-
const components = entry.components;
|
|
71
|
-
if (!components)
|
|
72
|
-
return [];
|
|
73
|
-
return Object.entries(components).map(([name, component]) => ({
|
|
74
|
-
name,
|
|
75
|
-
...(typeof component.root === "string" ? { root: component.root } : {}),
|
|
76
|
-
...(typeof component.adapter === "string" ? { adapter: component.adapter } : {}),
|
|
77
|
-
...(typeof component.writable === "boolean" ? { writable: component.writable } : {}),
|
|
78
|
-
}));
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Enumerate the indexed items whose durable `bundle_id` provenance equals
|
|
82
|
-
* `bundleId`. Returns `[]` when the index has not been built yet — a bundle
|
|
83
|
-
* with no index rows is a valid (just-installed, not-yet-indexed) state, not an
|
|
84
|
-
* error. Deterministically ordered (type, then conceptId) so the JSON is stable.
|
|
85
|
-
*/
|
|
86
|
-
export function readBundleItems(bundleId, dbPath) {
|
|
87
|
-
const resolvedPath = dbPath ?? getDbPath();
|
|
88
|
-
if (!fs.existsSync(resolvedPath))
|
|
89
|
-
return [];
|
|
90
|
-
let db;
|
|
91
|
-
try {
|
|
92
|
-
db = openExistingDatabase(resolvedPath);
|
|
93
|
-
const items = [];
|
|
94
|
-
for (const row of getAllEntries(db)) {
|
|
95
|
-
if (row.bundleId !== bundleId)
|
|
96
|
-
continue;
|
|
97
|
-
const conceptId = row.conceptId ?? row.entry.name;
|
|
98
|
-
items.push({
|
|
99
|
-
ref: `${bundleId}//${conceptId}`,
|
|
100
|
-
conceptId,
|
|
101
|
-
type: row.entry.type,
|
|
102
|
-
name: row.entry.name,
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
items.sort((a, b) => a.type.localeCompare(b.type) || a.conceptId.localeCompare(b.conceptId));
|
|
106
|
-
return items;
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
// Surface (don't swallow) so an operator can diagnose a corrupt/locked index
|
|
110
|
-
// rather than silently seeing an empty bundle. Mirrors `akm info` behavior.
|
|
111
|
-
process.stderr.write(`[akm bundle] failed to read index items from ${resolvedPath}: ${String(err)}\n`);
|
|
112
|
-
return [];
|
|
113
|
-
}
|
|
114
|
-
finally {
|
|
115
|
-
if (db) {
|
|
116
|
-
try {
|
|
117
|
-
closeDatabase(db);
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
/* ignore close error */
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
/** Resolve one bundle config entry by id or throw a not-found naming the bundle. */
|
|
126
|
-
function requireBundle(config, id) {
|
|
127
|
-
const trimmed = id.trim();
|
|
128
|
-
if (!trimmed) {
|
|
129
|
-
throw new UsageError("A bundle id is required.", "MISSING_REQUIRED_ARGUMENT");
|
|
130
|
-
}
|
|
131
|
-
const bundles = config.bundles;
|
|
132
|
-
const entry = bundles?.[trimmed];
|
|
133
|
-
if (!entry) {
|
|
134
|
-
throw new NotFoundError(bundles
|
|
135
|
-
? `No bundle named "${trimmed}". Run \`akm bundle list\` to see configured bundles.`
|
|
136
|
-
: `No bundles are configured. This workspace still uses the pre-0.9.0 source shape; run \`akm migrate apply\` to adopt bundles.`, "SOURCE_NOT_FOUND");
|
|
137
|
-
}
|
|
138
|
-
return entry;
|
|
139
|
-
}
|
|
140
|
-
// ── Commands ──────────────────────────────────────────────────────────────────
|
|
141
|
-
/**
|
|
142
|
-
* `akm bundle list` — the configured bundles (spec §10.1 desired config) joined
|
|
143
|
-
* with their resolved lock state (spec §10.2), defaultBundle marked. Empty (with
|
|
144
|
-
* a migration `note`) for a workspace that still uses the pre-0.9.0 source shape.
|
|
145
|
-
*/
|
|
146
|
-
export function akmBundleList() {
|
|
147
|
-
const config = loadConfig();
|
|
148
|
-
const bundles = config.bundles;
|
|
149
|
-
const defaultBundle = config.defaultBundle ?? null;
|
|
150
|
-
if (!bundles) {
|
|
151
|
-
return {
|
|
152
|
-
schemaVersion: 1,
|
|
153
|
-
defaultBundle: null,
|
|
154
|
-
bundles: [],
|
|
155
|
-
totalBundles: 0,
|
|
156
|
-
note: "No bundles configured. This workspace still uses the pre-0.9.0 source shape (`stashDir`/`sources`/`installed`); run `akm migrate apply` to adopt the bundle model.",
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
const locks = readLockfile();
|
|
160
|
-
const lockById = new Map(locks.map((entry) => [entry.id, entry]));
|
|
161
|
-
const summaries = Object.entries(bundles).map(([id, entry]) => ({
|
|
162
|
-
id,
|
|
163
|
-
default: id === defaultBundle,
|
|
164
|
-
source: describeBundleSource(entry),
|
|
165
|
-
writable: entry.writable === true,
|
|
166
|
-
...(typeof entry.registryId === "string" ? { registryId: entry.registryId } : {}),
|
|
167
|
-
lock: toLockView(lockById.get(id)),
|
|
168
|
-
}));
|
|
169
|
-
return {
|
|
170
|
-
schemaVersion: 1,
|
|
171
|
-
defaultBundle,
|
|
172
|
-
bundles: summaries,
|
|
173
|
-
totalBundles: summaries.length,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* `akm bundle show <id>` — one bundle's desired config (source descriptor,
|
|
178
|
-
* writable, registryId, components), its resolved lock state, and its indexed
|
|
179
|
-
* item count. Not-found (exit 1) for an unknown or unconfigured bundle.
|
|
180
|
-
*/
|
|
181
|
-
export function akmBundleShow(input) {
|
|
182
|
-
const config = loadConfig();
|
|
183
|
-
const entry = requireBundle(config, input.id);
|
|
184
|
-
const id = input.id.trim();
|
|
185
|
-
const lock = readLockfile().find((e) => e.id === id);
|
|
186
|
-
return {
|
|
187
|
-
schemaVersion: 1,
|
|
188
|
-
id,
|
|
189
|
-
default: id === config.defaultBundle,
|
|
190
|
-
source: describeBundleSource(entry),
|
|
191
|
-
writable: entry.writable === true,
|
|
192
|
-
...(typeof entry.registryId === "string" ? { registryId: entry.registryId } : {}),
|
|
193
|
-
components: describeComponents(entry),
|
|
194
|
-
lock: toLockView(lock),
|
|
195
|
-
itemCount: readBundleItems(id, input.dbPath).length,
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* `akm bundle items <id>` — the indexed items belonging to a bundle, keyed by
|
|
200
|
-
* their canonical `bundle//conceptId` ref, with a per-type count. Not-found
|
|
201
|
-
* (exit 1) for an unknown or unconfigured bundle.
|
|
202
|
-
*/
|
|
203
|
-
export function akmBundleItems(input) {
|
|
204
|
-
const config = loadConfig();
|
|
205
|
-
requireBundle(config, input.id);
|
|
206
|
-
const id = input.id.trim();
|
|
207
|
-
const items = readBundleItems(id, input.dbPath);
|
|
208
|
-
const byType = {};
|
|
209
|
-
for (const item of items) {
|
|
210
|
-
byType[item.type] = (byType[item.type] ?? 0) + 1;
|
|
211
|
-
}
|
|
212
|
-
return {
|
|
213
|
-
schemaVersion: 1,
|
|
214
|
-
bundle: id,
|
|
215
|
-
items,
|
|
216
|
-
totalItems: items.length,
|
|
217
|
-
byType,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
-
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
-
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
/**
|
|
5
|
-
* `akm graph` command family. Extracted verbatim from src/cli.ts (WS6) so the
|
|
6
|
-
* God Module shrinks; the `main.subCommands.graph` key and every subcommand's
|
|
7
|
-
* args/output shape are byte-identical. Each handler is migrated to
|
|
8
|
-
* `defineJsonCommand`, which wraps the body in `runWithJsonErrors` and emits the
|
|
9
|
-
* same JSON envelope (stdout/stderr/exit-code) as the inline `runWithJsonErrors`
|
|
10
|
-
* form it replaces.
|
|
11
|
-
*/
|
|
12
|
-
import { parsePositiveIntFlag } from "../../cli/parse-args.js";
|
|
13
|
-
import { defineGroupCommand, defineJsonCommand, output } from "../../cli/shared.js";
|
|
14
|
-
import { akmGraphEntities, akmGraphEntity, akmGraphExport, akmGraphOrphans, akmGraphRelated, akmGraphRelations, akmGraphSummary, akmGraphUpdate, } from "./graph.js";
|
|
15
|
-
const graphSubCommands = {
|
|
16
|
-
summary: defineJsonCommand({
|
|
17
|
-
meta: { name: "summary", description: "Show entity-graph counts and quality telemetry" },
|
|
18
|
-
args: {
|
|
19
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
20
|
-
},
|
|
21
|
-
run({ args }) {
|
|
22
|
-
output("graph-summary", akmGraphSummary({ source: args.source }));
|
|
23
|
-
},
|
|
24
|
-
}),
|
|
25
|
-
entities: defineJsonCommand({
|
|
26
|
-
meta: { name: "entities", description: "List entities with per-file occurrence counts" },
|
|
27
|
-
args: {
|
|
28
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
29
|
-
limit: { type: "string", description: "Maximum entities to return" },
|
|
30
|
-
},
|
|
31
|
-
run({ args }) {
|
|
32
|
-
output("graph-entities", akmGraphEntities({ source: args.source, limit: parsePositiveIntFlag(args.limit ?? undefined) }));
|
|
33
|
-
},
|
|
34
|
-
}),
|
|
35
|
-
relations: defineJsonCommand({
|
|
36
|
-
meta: { name: "relations", description: "List relations with occurrence counts" },
|
|
37
|
-
args: {
|
|
38
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
39
|
-
limit: { type: "string", description: "Maximum relations to return" },
|
|
40
|
-
},
|
|
41
|
-
run({ args }) {
|
|
42
|
-
output("graph-relations", akmGraphRelations({ source: args.source, limit: parsePositiveIntFlag(args.limit ?? undefined) }));
|
|
43
|
-
},
|
|
44
|
-
}),
|
|
45
|
-
related: defineJsonCommand({
|
|
46
|
-
meta: { name: "related", description: "Show graph-related neighboring assets for a ref" },
|
|
47
|
-
args: {
|
|
48
|
-
ref: { type: "positional", description: "Asset ref", required: true },
|
|
49
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
50
|
-
limit: { type: "string", description: "Maximum related assets to return" },
|
|
51
|
-
},
|
|
52
|
-
async run({ args }) {
|
|
53
|
-
output("graph-related", await akmGraphRelated({
|
|
54
|
-
ref: args.ref ?? "",
|
|
55
|
-
source: args.source,
|
|
56
|
-
limit: parsePositiveIntFlag(args.limit ?? undefined),
|
|
57
|
-
}));
|
|
58
|
-
},
|
|
59
|
-
}),
|
|
60
|
-
entity: defineJsonCommand({
|
|
61
|
-
meta: { name: "entity", description: "List assets that contain the given entity" },
|
|
62
|
-
args: {
|
|
63
|
-
name: { type: "positional", description: "Entity name", required: true },
|
|
64
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
65
|
-
limit: { type: "string", description: "Maximum matches to return" },
|
|
66
|
-
},
|
|
67
|
-
run({ args }) {
|
|
68
|
-
output("graph-entity", akmGraphEntity({
|
|
69
|
-
name: args.name ?? "",
|
|
70
|
-
source: args.source,
|
|
71
|
-
limit: parsePositiveIntFlag(args.limit ?? undefined),
|
|
72
|
-
}));
|
|
73
|
-
},
|
|
74
|
-
}),
|
|
75
|
-
orphans: defineJsonCommand({
|
|
76
|
-
meta: { name: "orphans", description: "List assets with no extracted graph entities" },
|
|
77
|
-
args: {
|
|
78
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
79
|
-
limit: { type: "string", description: "Maximum orphans to return" },
|
|
80
|
-
},
|
|
81
|
-
run({ args }) {
|
|
82
|
-
output("graph-orphans", akmGraphOrphans({ source: args.source, limit: parsePositiveIntFlag(args.limit ?? undefined) }));
|
|
83
|
-
},
|
|
84
|
-
}),
|
|
85
|
-
export: defineJsonCommand({
|
|
86
|
-
meta: { name: "export", description: "Export graph artifact as JSON or JSONL" },
|
|
87
|
-
args: {
|
|
88
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
89
|
-
out: { type: "string", description: "Output path" },
|
|
90
|
-
format: { type: "string", description: "Export format (json|jsonl)", default: "json" },
|
|
91
|
-
},
|
|
92
|
-
run({ args }) {
|
|
93
|
-
output("graph-export", akmGraphExport({
|
|
94
|
-
source: args.source,
|
|
95
|
-
out: args.out ?? "",
|
|
96
|
-
format: args.format,
|
|
97
|
-
}));
|
|
98
|
-
},
|
|
99
|
-
}),
|
|
100
|
-
update: defineJsonCommand({
|
|
101
|
-
meta: { name: "update", description: "Re-run graph extraction, optionally scoped to specific asset refs" },
|
|
102
|
-
args: {
|
|
103
|
-
refs: {
|
|
104
|
-
type: "positional",
|
|
105
|
-
description: "Zero or more asset refs to scope extraction (omit for a full re-extract)",
|
|
106
|
-
required: false,
|
|
107
|
-
default: "",
|
|
108
|
-
},
|
|
109
|
-
source: { type: "string", description: "Source name/path (default: primary stash source)" },
|
|
110
|
-
},
|
|
111
|
-
async run({ args }) {
|
|
112
|
-
// `refs` is a single positional; collect remaining argv tokens as well.
|
|
113
|
-
const rawRefs = [args.refs, ...(Array.isArray(args._) ? args._ : [])].filter((r) => typeof r === "string" && r.trim().length > 0);
|
|
114
|
-
output("graph-update", await akmGraphUpdate({ refs: rawRefs.length > 0 ? rawRefs : undefined, source: args.source }));
|
|
115
|
-
},
|
|
116
|
-
}),
|
|
117
|
-
};
|
|
118
|
-
export const graphCommand = defineGroupCommand({
|
|
119
|
-
meta: { name: "graph", description: "Inspect the indexed entity graph stored in SQLite" },
|
|
120
|
-
subCommands: graphSubCommands,
|
|
121
|
-
defaultRun() {
|
|
122
|
-
output("graph-summary", akmGraphSummary());
|
|
123
|
-
},
|
|
124
|
-
});
|