akm-cli 0.9.0-rc.0 → 0.9.0-rc.13
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 +1283 -22
- package/README.md +62 -37
- package/SECURITY.md +46 -31
- package/dist/akm +162 -38
- package/dist/akm-migrate +44 -0
- package/dist/assets/backends/schtasks-template.xml +2 -1
- package/dist/assets/hints/cli-hints-full.md +268 -118
- package/dist/assets/hints/cli-hints-short.md +87 -24
- package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
- package/dist/assets/improve-strategies/frequent.json +15 -0
- package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
- package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
- package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
- package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
- package/dist/assets/improve-strategies/reflect-distill.json +30 -0
- package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
- package/dist/assets/prompts/consolidate-system.md +5 -5
- package/dist/assets/prompts/extract-session.md +2 -6
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
- package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
- package/dist/assets/prompts/reflect-output-repair.md +3 -0
- package/dist/assets/prompts/workflow-unit-preamble.md +26 -0
- package/dist/assets/stash-skeleton/README.md +38 -10
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
- package/dist/assets/tasks/core/extract.yml +3 -2
- package/dist/assets/tasks/core/improve.yml +2 -1
- package/dist/assets/tasks/core/index-refresh.yml +1 -0
- package/dist/assets/tasks/core/sync.yml +1 -0
- package/dist/assets/tasks/core/version-check.yml +2 -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 +5 -4
- package/dist/assets/workflows/workflow-template.md +31 -15
- package/dist/cli/invocation.js +279 -0
- package/dist/cli/parse-args.js +5 -90
- package/dist/cli/retired-commands.js +78 -0
- package/dist/cli/shared.js +158 -48
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +747 -293
- package/dist/commands/agent/agent-dispatch.js +19 -18
- package/dist/commands/agent/agent-support.js +0 -24
- package/dist/commands/agent/contribute-cli.js +43 -97
- package/dist/commands/completions.js +80 -23
- package/dist/commands/config-cli.js +44 -281
- package/dist/commands/env/env-binding.js +99 -0
- package/dist/commands/env/env-cli.js +84 -224
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +45 -61
- package/dist/commands/env/secret.js +32 -62
- package/dist/commands/feedback-cli.js +179 -85
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +7 -8
- package/dist/commands/health/checks.js +279 -94
- package/dist/commands/health/html-report.js +197 -578
- package/dist/commands/health/improve-metrics.js +277 -246
- package/dist/commands/health/llm-usage.js +19 -19
- package/dist/commands/health/md-report.js +16 -7
- package/dist/commands/health/metrics.js +67 -32
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +508 -0
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +16 -56
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
- package/dist/commands/health/types-improve.js +29 -0
- package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
- package/dist/commands/health/types-result.js +7 -0
- package/dist/commands/health/types-runs.js +4 -0
- package/dist/commands/health/types-session-log.js +4 -0
- package/dist/commands/health/types-windows.js +4 -0
- package/dist/commands/health/types.js +26 -21
- package/dist/commands/health/windows.js +2 -3
- package/dist/commands/health.js +296 -167
- package/dist/commands/improve/anti-collapse.js +5 -5
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +65 -52
- package/dist/commands/improve/consolidate/chunking.js +9 -7
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +454 -1354
- package/dist/commands/improve/content-hash.js +39 -0
- package/dist/commands/improve/distill/content-repair.js +4 -10
- package/dist/commands/improve/distill/promote-memory.js +89 -64
- package/dist/commands/improve/distill/quality-gate.js +118 -42
- package/dist/commands/improve/distill-guards.js +1 -1
- package/dist/commands/improve/distill-promotion-policy.js +33 -888
- package/dist/commands/improve/distill.js +607 -363
- package/dist/commands/improve/eligibility.js +165 -79
- package/dist/commands/improve/extract-cli.js +35 -126
- package/dist/commands/improve/extract-prompt.js +6 -35
- package/dist/commands/improve/extract.js +640 -391
- package/dist/commands/improve/feedback-valence.js +2 -12
- package/dist/commands/improve/improve-cli.js +134 -135
- package/dist/commands/improve/improve-result-file.js +30 -50
- package/dist/commands/improve/improve-run-types.js +4 -0
- package/dist/commands/improve/improve-strategies.js +135 -0
- package/dist/commands/improve/improve.js +904 -701
- package/dist/commands/improve/locks.js +64 -111
- package/dist/commands/improve/loop-stages.js +1110 -923
- package/dist/commands/improve/memory/derived-ref.js +124 -0
- package/dist/commands/improve/memory/memory-belief.js +79 -7
- package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
- package/dist/commands/improve/memory/memory-improve.js +25 -37
- package/dist/commands/improve/outcome-loop.js +25 -88
- package/dist/commands/improve/preparation.js +1034 -813
- package/dist/commands/improve/proactive-maintenance.js +34 -9
- package/dist/commands/improve/proposal-envelope.js +31 -0
- package/dist/commands/improve/reflect.js +983 -794
- package/dist/commands/improve/run-context.js +119 -0
- package/dist/commands/improve/salience.js +24 -127
- package/dist/commands/improve/session-asset.js +7 -3
- package/dist/commands/improve/shared.js +14 -34
- package/dist/commands/improve/source-identity.js +28 -0
- package/dist/commands/improve/triage.js +20 -17
- package/dist/commands/lint/base-linter.js +340 -313
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +185 -30
- package/dist/commands/{events.js → log.js} +28 -38
- package/dist/commands/migrate-cli.js +54 -0
- package/dist/commands/migration-tool.js +55 -0
- package/dist/commands/observability-cli.js +70 -208
- package/dist/commands/proposal/diff-format.js +50 -0
- package/dist/commands/proposal/drain-policies.js +0 -6
- package/dist/commands/proposal/drain.js +91 -40
- package/dist/commands/proposal/proposal-cli.js +134 -132
- package/dist/commands/proposal/proposal-types.js +56 -0
- package/dist/commands/proposal/proposal.js +83 -65
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +105 -88
- package/dist/commands/proposal/repository.js +1303 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
- package/dist/commands/proposal/validators/proposal-validators.js +61 -12
- package/dist/commands/proposal/validators/proposals.js +6 -8
- package/dist/commands/read/curate.js +78 -73
- package/dist/commands/read/knowledge.js +510 -13
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +84 -15
- package/dist/commands/read/search-cli.js +203 -96
- package/dist/commands/read/search.js +126 -94
- package/dist/commands/read/show.js +226 -250
- package/dist/commands/registry-cli.js +34 -60
- package/dist/commands/remember.js +18 -57
- package/dist/commands/sources/add-cli.js +104 -49
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +63 -0
- package/dist/commands/sources/info.js +27 -15
- package/dist/commands/sources/init.js +30 -40
- package/dist/commands/sources/installed-stashes.js +469 -172
- package/dist/commands/sources/migration-help.js +7 -4
- package/dist/commands/sources/schema-repair.js +10 -9
- package/dist/commands/sources/self-update.js +182 -121
- package/dist/commands/sources/source-add.js +169 -178
- package/dist/commands/sources/source-clone.js +144 -41
- package/dist/commands/sources/source-manage.js +94 -59
- package/dist/commands/sources/sources-cli.js +64 -205
- package/dist/commands/sources/stash-cli.js +91 -54
- package/dist/commands/sources/stash-skeleton.js +1 -1
- package/dist/commands/tasks/tasks-cli.js +106 -104
- package/dist/commands/tasks/tasks.js +445 -262
- package/dist/commands/workflow-cli.js +232 -121
- package/dist/core/action-contributors.js +1 -1
- package/dist/core/activation-policy.js +49 -0
- package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
- package/dist/core/adapter/adapters/akm-adapter.js +528 -0
- package/dist/core/adapter/adapters/akm-lint.js +392 -0
- package/dist/core/adapter/adapters/akm-metadata.js +387 -0
- package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
- package/dist/core/adapter/adapters/claude-adapter.js +61 -0
- package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
- package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
- package/dist/core/adapter/adapters/index.js +80 -0
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
- package/dist/core/adapter/adapters/okf-adapter.js +391 -0
- package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
- package/dist/core/adapter/adapters/shared.js +286 -0
- package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
- package/dist/core/adapter/bundle-adapter.js +4 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +44 -0
- package/dist/core/adapter/registry.js +56 -0
- package/dist/core/adapter/types.js +4 -0
- package/dist/core/asset/akm-markdown.js +30 -0
- package/dist/core/asset/asset-placement.js +243 -0
- package/dist/core/asset/asset-ref.js +110 -79
- package/dist/core/asset/asset-serialize.js +20 -0
- package/dist/core/asset/frontmatter.js +28 -12
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +274 -0
- package/dist/core/asset/stash-meta.js +2 -2
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +281 -86
- package/dist/core/config/config-io.js +42 -128
- package/dist/core/config/config-schema.js +233 -834
- package/dist/core/config/config-sources.js +162 -39
- package/dist/core/config/config-types.js +16 -11
- package/dist/core/config/config-version.js +29 -0
- package/dist/core/config/config-walker.js +126 -37
- package/dist/core/config/config.js +154 -331
- package/dist/core/config/deep-merge.js +41 -0
- package/dist/core/config/engine-semantics.js +28 -0
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +38 -0
- package/dist/core/config/schema/engines.js +116 -0
- package/dist/core/config/schema/experimental.js +47 -0
- package/dist/core/config/schema/feedback.js +31 -0
- package/dist/core/config/schema/improve-processes.js +389 -0
- package/dist/core/config/schema/improve.js +94 -0
- package/dist/core/config/schema/index-config.js +176 -0
- package/dist/core/config/schema/output.js +18 -0
- package/dist/core/config/schema/primitives.js +94 -0
- package/dist/core/config/schema/search.js +30 -0
- package/dist/core/config/schema/setup.js +18 -0
- package/dist/core/config/schema/sources-bundles.js +169 -0
- package/dist/core/config/schema/workflow.js +29 -0
- package/dist/core/env-secret-ref.js +155 -20
- package/dist/core/errors.js +17 -15
- package/dist/core/events-types.js +4 -0
- package/dist/core/events.js +46 -128
- package/dist/core/extra-params.js +62 -0
- package/dist/core/file-change.js +17 -0
- package/dist/core/file-lock.js +202 -57
- package/dist/core/fs-txn.js +392 -0
- package/dist/core/git-message.js +59 -0
- package/dist/core/improve-result.js +167 -0
- package/dist/core/json-schema.js +142 -0
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +1 -1
- package/dist/core/maintenance-barrier.js +135 -0
- package/dist/core/migration-operation.js +44 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/paths.js +22 -25
- package/dist/core/platform.js +10 -0
- package/dist/core/recognition-util.js +128 -0
- package/dist/core/redaction.js +392 -0
- package/dist/core/standards/resolve-standards-context.js +36 -65
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +5 -5
- package/dist/core/state/migrations.js +242 -11
- package/dist/core/state-db.js +98 -10
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +303 -0
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/time.js +20 -0
- package/dist/core/type-presentation.js +130 -0
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +834 -118
- package/dist/indexer/bundle-identity-guard.js +92 -0
- package/dist/indexer/db/graph-db.js +1 -25
- package/dist/indexer/db/llm-cache.js +1 -1
- package/dist/indexer/ensure-index.js +30 -9
- package/dist/indexer/graph/graph-boost.js +9 -30
- package/dist/indexer/graph/graph-extraction.js +41 -27
- package/dist/indexer/graph/graph-types.js +4 -0
- package/dist/indexer/index-writer-lock.js +93 -49
- package/dist/indexer/index-written-assets.js +100 -53
- package/dist/indexer/indexer.js +746 -329
- package/dist/indexer/init.js +18 -25
- package/dist/indexer/installations.js +142 -0
- package/dist/indexer/passes/dir-staleness.js +18 -10
- package/dist/indexer/passes/memory-inference.js +25 -15
- package/dist/indexer/passes/metadata.js +412 -243
- package/dist/indexer/scan/doc-to-entry.js +160 -0
- package/dist/indexer/scan/drain-dir.js +134 -0
- package/dist/indexer/search/db-search.js +292 -108
- package/dist/indexer/search/fts-query.js +64 -0
- package/dist/indexer/search/ranking-contributors.js +145 -25
- package/dist/indexer/search/ranking-types.js +4 -0
- package/dist/indexer/search/ranking.js +28 -71
- package/dist/indexer/search/search-attribution.js +67 -0
- package/dist/indexer/search/search-fields.js +18 -3
- package/dist/indexer/search/search-hit-enrichers.js +30 -40
- package/dist/indexer/search/search-source.js +157 -111
- package/dist/indexer/search/semantic-status.js +4 -1
- package/dist/indexer/usage/usage-events.js +10 -30
- package/dist/indexer/walk/file-context.js +3 -45
- package/dist/indexer/walk/matchers.js +42 -34
- package/dist/indexer/walk/path-resolver.js +11 -5
- package/dist/indexer/walk/walker.js +42 -14
- package/dist/integrations/agent/builder-shared.js +7 -0
- package/dist/integrations/agent/builders.js +5 -56
- package/dist/integrations/agent/config.js +3 -143
- package/dist/integrations/agent/detect.js +17 -2
- package/dist/integrations/agent/engine-resolution.js +231 -0
- package/dist/integrations/agent/index.js +1 -2
- package/dist/integrations/agent/model-aliases.js +16 -2
- package/dist/integrations/agent/profiles.js +36 -62
- package/dist/integrations/agent/prompts.js +46 -18
- package/dist/integrations/agent/runner-dispatch.js +93 -4
- package/dist/integrations/agent/runner.js +76 -208
- package/dist/integrations/agent/spawn.js +88 -196
- package/dist/integrations/harnesses/aider/agent-builder.js +114 -0
- package/dist/integrations/harnesses/aider/index.js +48 -0
- package/dist/integrations/harnesses/aider/result-extractor.js +53 -0
- package/dist/integrations/harnesses/amazonq/agent-builder.js +147 -0
- package/dist/integrations/harnesses/amazonq/index.js +45 -0
- package/dist/integrations/harnesses/amazonq/result-extractor.js +48 -0
- package/dist/integrations/harnesses/claude/agent-builder.js +46 -8
- package/dist/integrations/harnesses/claude/config-import.js +1 -3
- package/dist/integrations/harnesses/claude/index.js +24 -35
- package/dist/integrations/harnesses/claude/result-extractor.js +52 -0
- package/dist/integrations/harnesses/claude/session-log.js +27 -75
- package/dist/integrations/harnesses/codex/agent-builder.js +138 -0
- package/dist/integrations/harnesses/codex/index.js +52 -0
- package/dist/integrations/harnesses/codex/result-extractor.js +73 -0
- package/dist/integrations/harnesses/copilot/agent-builder.js +122 -0
- package/dist/integrations/harnesses/copilot/index.js +48 -0
- package/dist/integrations/harnesses/copilot/result-extractor.js +151 -0
- package/dist/integrations/harnesses/gemini/agent-builder.js +120 -0
- package/dist/integrations/harnesses/gemini/index.js +48 -0
- package/dist/integrations/harnesses/gemini/result-extractor.js +121 -0
- package/dist/integrations/harnesses/ids.js +24 -0
- package/dist/integrations/harnesses/index.js +54 -34
- package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
- package/dist/integrations/harnesses/opencode/config-import.js +1 -3
- package/dist/integrations/harnesses/opencode/index.js +14 -32
- package/dist/integrations/harnesses/opencode/session-log.js +67 -125
- package/dist/integrations/harnesses/opencode-sdk/harness.js +51 -0
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +681 -108
- package/dist/integrations/harnesses/openhands/agent-builder.js +128 -0
- package/dist/integrations/harnesses/openhands/index.js +48 -0
- package/dist/integrations/harnesses/openhands/result-extractor.js +103 -0
- package/dist/integrations/harnesses/pi/agent-builder.js +97 -0
- package/dist/integrations/harnesses/pi/index.js +45 -0
- package/dist/integrations/harnesses/pi/result-extractor.js +135 -0
- package/dist/integrations/harnesses/shared.js +17 -0
- package/dist/integrations/harnesses/types.js +43 -32
- package/dist/integrations/lockfile.js +211 -24
- package/dist/integrations/session-logs/index.js +36 -39
- package/dist/integrations/session-logs/provider-base.js +113 -0
- package/dist/llm/client.js +182 -110
- package/dist/llm/embedders/deterministic.js +2 -2
- package/dist/llm/embedders/remote.js +21 -9
- package/dist/llm/feature-gate.js +17 -57
- package/dist/llm/graph-extract.js +12 -13
- package/dist/llm/index-passes.js +8 -42
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +45 -30
- package/dist/llm/structured-call.js +16 -8
- package/dist/llm/usage-persist.js +30 -5
- package/dist/llm/usage-telemetry.js +59 -6
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/command-registry.js +27 -0
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +251 -0
- package/dist/output/html-render.js +11 -16
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +14 -279
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +58 -84
- package/dist/output/shapes/passthrough.js +11 -39
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes/registry.js +12 -6
- package/dist/output/shapes.js +0 -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 +562 -0
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/helpers.js +15 -1164
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +202 -0
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/registry.js +12 -6
- package/dist/output/text/show-directives.js +117 -0
- package/dist/output/text/show-format.js +103 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +332 -0
- package/dist/output/text/workflow.js +3 -2
- package/dist/output/text.js +10 -19
- 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 +15 -25
- package/dist/registry/resolve.js +43 -94
- package/dist/registry/semver.js +43 -0
- package/dist/runtime.js +81 -12
- package/dist/scripts/akm-migrate.js +35529 -0
- package/dist/setup/detect.js +5 -7
- package/dist/setup/detected-engines.js +136 -0
- package/dist/setup/engine-config.js +100 -0
- package/dist/setup/registry-stash-loader.js +3 -3
- package/dist/setup/semantic-assets.js +12 -9
- package/dist/setup/setup.js +444 -208
- package/dist/setup/steps/connection-shared.js +120 -0
- package/dist/setup/steps/connection.js +108 -305
- package/dist/setup/steps/platforms.js +13 -12
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +21 -15
- package/dist/setup/steps/stashdir.js +6 -4
- package/dist/setup/steps/tasks.js +236 -119
- package/dist/setup/steps.js +3 -2
- package/dist/sources/freshness.js +39 -0
- 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 +54 -56
- package/dist/sources/providers/git-stash.js +420 -91
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +47 -22
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +2 -2
- package/dist/sources/resolve.js +11 -10
- package/dist/sources/snapshot-fetchers/types.js +4 -0
- package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
- package/dist/storage/database.js +60 -4
- package/dist/storage/engines/sqlite-migrations.js +156 -5
- package/dist/storage/locations.js +1 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +51 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -32
- package/dist/storage/repositories/index-connection.js +79 -0
- package/dist/storage/repositories/index-db.js +4 -3
- package/dist/storage/repositories/index-entries-repository.js +863 -0
- package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
- package/dist/storage/repositories/index-entry-types.js +4 -0
- package/dist/storage/repositories/index-fts-repository.js +167 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
- package/dist/storage/repositories/index-meta-repository.js +49 -0
- package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
- package/dist/storage/repositories/index-sql.js +12 -0
- package/dist/storage/repositories/index-utility-repository.js +356 -0
- package/dist/storage/repositories/index-vec-repository.js +250 -0
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +317 -75
- package/dist/storage/repositories/registry-cache.js +1 -1
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +110 -3
- package/dist/storage/repositories/workflow-runs-repository.js +240 -19
- package/dist/tasks/backends/cron.js +169 -46
- package/dist/tasks/backends/exec-utils.js +76 -3
- package/dist/tasks/backends/index.js +6 -9
- package/dist/tasks/backends/launchd.js +292 -55
- package/dist/tasks/backends/schtasks.js +557 -70
- package/dist/tasks/backends/types.js +4 -0
- package/dist/tasks/command-executable.js +93 -0
- package/dist/tasks/embedded.js +56 -38
- package/dist/tasks/parser.js +156 -64
- package/dist/tasks/resolve-akm-bin.js +144 -51
- package/dist/tasks/runner.js +377 -209
- package/dist/tasks/schedule.js +108 -19
- package/dist/tasks/scheduler-invocation.js +296 -0
- package/dist/tasks/schema.js +1 -1
- package/dist/tasks/task-id.js +35 -0
- package/dist/tasks/validator.js +30 -16
- package/dist/text-import-hook.mjs +1 -1
- package/dist/workflows/authoring/authoring.js +104 -43
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/cli.js +0 -16
- package/dist/workflows/concurrency-policy.js +15 -0
- package/dist/workflows/exec/brief.js +450 -0
- package/dist/workflows/exec/frozen-judge.js +47 -0
- package/dist/workflows/exec/native-executor.js +1038 -0
- package/dist/workflows/exec/param-secrets.js +115 -0
- package/dist/workflows/exec/report.js +1460 -0
- package/dist/workflows/exec/run-workflow.js +602 -0
- package/dist/workflows/exec/scheduler.js +71 -0
- package/dist/workflows/exec/step-work.js +1190 -0
- package/dist/workflows/exec/unit-writer.js +23 -0
- package/dist/workflows/exec/workflow-engine-gate.js +67 -0
- package/dist/workflows/exec/worktree.js +171 -0
- package/dist/workflows/ir/compile.js +246 -0
- package/dist/workflows/ir/freeze.js +233 -0
- package/dist/workflows/ir/params.js +54 -0
- package/dist/workflows/ir/plan-hash.js +68 -0
- package/dist/workflows/ir/schema.js +540 -0
- package/dist/workflows/parser.js +878 -304
- package/dist/workflows/program/expressions.js +181 -0
- package/dist/workflows/program/schema.js +51 -0
- package/dist/workflows/renderer.js +100 -45
- package/dist/workflows/resource-limits.js +22 -0
- package/dist/workflows/runtime/agent-identity.js +59 -14
- package/dist/workflows/runtime/checkin.js +1 -1
- package/dist/workflows/runtime/plan-classifier.js +131 -0
- package/dist/workflows/runtime/runs.js +376 -119
- package/dist/workflows/runtime/unit-checkin.js +45 -0
- package/dist/workflows/runtime/unit-phases.js +20 -0
- package/dist/workflows/runtime/workflow-asset-loader.js +241 -40
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +2 -3
- package/dist/workflows/validator.js +52 -30
- package/docs/README.md +42 -78
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +9 -8
- package/docs/migration/release-notes/0.9.0.md +158 -14
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +844 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/data-and-telemetry.md +333 -0
- package/package.json +21 -17
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +4636 -0
- package/schemas/akm-task.json +87 -0
- package/schemas/akm-workflow.json +373 -0
- package/dist/akm-migrate-storage +0 -38
- package/dist/assets/help/help-accept.md +0 -12
- package/dist/assets/help/help-improve.md +0 -84
- package/dist/assets/help/help-proposals.md +0 -17
- package/dist/assets/help/help-propose.md +0 -17
- package/dist/assets/help/help-reject.md +0 -11
- package/dist/assets/profiles/frequent.json +0 -13
- package/dist/assets/profiles/recombine-only.json +0 -21
- package/dist/assets/profiles/reflect-distill.json +0 -30
- package/dist/assets/profiles/synthesize.json +0 -15
- package/dist/assets/prompts/procedural-system.md +0 -44
- package/dist/assets/prompts/recombine-system.md +0 -40
- package/dist/assets/prompts/staleness-detect-system.md +0 -6
- package/dist/assets/tasks/core/backup.yml +0 -4
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/assets/templates/html/default.html +0 -78
- package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
- package/dist/assets/wiki/index-template.md +0 -12
- package/dist/assets/wiki/ingest-workflow-template.md +0 -83
- package/dist/assets/wiki/log-template.md +0 -8
- package/dist/assets/wiki/schema-template.md +0 -61
- package/dist/cli/config-migrate.js +0 -150
- package/dist/cli/config-validate.js +0 -39
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -487
- package/dist/commands/improve/calibration.js +0 -161
- package/dist/commands/improve/dedup.js +0 -482
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/improve/hot-probation.js +0 -45
- package/dist/commands/improve/improve-auto-accept.js +0 -276
- package/dist/commands/improve/improve-profiles.js +0 -168
- package/dist/commands/improve/procedural.js +0 -398
- package/dist/commands/improve/recombine.js +0 -818
- package/dist/commands/improve/schema-similarity-gate.js +0 -168
- package/dist/commands/lint/agent-linter.js +0 -44
- package/dist/commands/lint/command-linter.js +0 -44
- package/dist/commands/lint/default-linter.js +0 -16
- package/dist/commands/lint/fact-linter.js +0 -39
- package/dist/commands/lint/knowledge-linter.js +0 -16
- package/dist/commands/lint/memory-linter.js +0 -61
- package/dist/commands/lint/registry.js +0 -41
- package/dist/commands/lint/skill-linter.js +0 -45
- package/dist/commands/lint/task-linter.js +0 -50
- package/dist/commands/lint/workflow-linter.js +0 -81
- package/dist/commands/proposal/legacy-import.js +0 -115
- package/dist/commands/sources/history.js +0 -196
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/commands/wiki-cli.js +0 -292
- package/dist/core/asset/asset-registry.js +0 -76
- package/dist/core/asset/asset-spec.js +0 -259
- package/dist/core/config/config-migration.js +0 -602
- package/dist/core/deep-merge.js +0 -38
- package/dist/core/eval/rank-metrics.js +0 -113
- package/dist/core/ripgrep/install.js +0 -163
- package/dist/core/ripgrep/resolve.js +0 -81
- package/dist/indexer/db/db.js +0 -1413
- package/dist/indexer/manifest.js +0 -170
- package/dist/indexer/passes/metadata-contributors.js +0 -31
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -49
- package/dist/llm/call-ai.js +0 -62
- package/dist/llm/memory-infer-impl.js +0 -138
- 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/output/text/wiki.js +0 -16
- package/dist/registry/build-index.js +0 -386
- package/dist/scripts/migrate-storage.js +0 -19108
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -9411
- package/dist/scripts/migrations/v16-to-v17.js +0 -141
- package/dist/setup/legacy-config.js +0 -106
- package/dist/storage/repositories/consolidation-repository.js +0 -38
- package/dist/storage/repositories/recombine-repository.js +0 -213
- package/dist/wiki/wiki-templates.js +0 -15
- package/dist/wiki/wiki.js +0 -1012
- package/dist/workflows/db.js +0 -215
- package/docs/data-and-telemetry.md +0 -226
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* `akm agent <
|
|
5
|
+
* `akm agent [--engine <name>] [--prompt <text>] [--command <ref>] [--workflow <ref>] [args...]`
|
|
6
6
|
*
|
|
7
|
-
* Dispatch an agent by named
|
|
7
|
+
* Dispatch an agent by named engine, optionally injecting a prompt from
|
|
8
8
|
* inline text, a stash command: asset, or a stash workflow: asset.
|
|
9
9
|
*
|
|
10
10
|
* When none of --prompt, --command, or --workflow are given, the agent is
|
|
@@ -14,11 +14,10 @@
|
|
|
14
14
|
* filled from the extra positional args in order.
|
|
15
15
|
*/
|
|
16
16
|
import fs from "node:fs";
|
|
17
|
-
import {
|
|
17
|
+
import { parseRefInput } from "../../core/asset/resolve-ref.js";
|
|
18
18
|
import { NotFoundError, UsageError } from "../../core/errors.js";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { runOpencodeSdk } from "../../integrations/harnesses/opencode-sdk/index.js";
|
|
19
|
+
import { resolveEngine } from "../../integrations/agent/engine-resolution.js";
|
|
20
|
+
import { executeRunner } from "../../integrations/agent/runner-dispatch.js";
|
|
22
21
|
/**
|
|
23
22
|
* Fill `{{0}}`, `{{1}}`, ... placeholders in `template` with the
|
|
24
23
|
* corresponding entries in `args`. Any placeholder index that exceeds the
|
|
@@ -40,7 +39,7 @@ function fillPlaceholders(template, args) {
|
|
|
40
39
|
async function resolveAssetBody(ref) {
|
|
41
40
|
let parsed;
|
|
42
41
|
try {
|
|
43
|
-
parsed =
|
|
42
|
+
parsed = parseRefInput(ref);
|
|
44
43
|
}
|
|
45
44
|
catch (err) {
|
|
46
45
|
throw new UsageError(`Invalid asset ref "${ref}": ${err instanceof Error ? err.message : String(err)}`, "INVALID_FLAG_VALUE");
|
|
@@ -59,12 +58,16 @@ async function resolveAssetBody(ref) {
|
|
|
59
58
|
}
|
|
60
59
|
}
|
|
61
60
|
export async function akmAgentDispatch(options) {
|
|
62
|
-
if (!options.
|
|
63
|
-
throw new UsageError("agent
|
|
61
|
+
if (!options.agentConfig)
|
|
62
|
+
throw new UsageError("agent requires a valid config with an agent engine.", "MISSING_REQUIRED_ARGUMENT");
|
|
63
|
+
const engineName = options.engine ?? options.agentConfig.defaults?.engine;
|
|
64
|
+
if (!engineName)
|
|
65
|
+
throw new UsageError("agent requires --engine or defaults.engine.", "MISSING_REQUIRED_ARGUMENT");
|
|
66
|
+
const runner = resolveEngine(engineName, options.agentConfig);
|
|
67
|
+
if (runner.kind === "llm") {
|
|
68
|
+
throw new UsageError(`Engine "${engineName}" is an LLM engine; akm agent requires an agent engine.`, "INVALID_FLAG_VALUE");
|
|
64
69
|
}
|
|
65
|
-
|
|
66
|
-
// agent config is absent or the profile is not found.
|
|
67
|
-
const profile = requireAgentProfile(options.agentConfig, options.profileName.trim());
|
|
70
|
+
const profile = runner.profile;
|
|
68
71
|
// Resolve the prompt text from whichever source was provided.
|
|
69
72
|
let prompt;
|
|
70
73
|
if (options.commandRef) {
|
|
@@ -79,7 +82,7 @@ export async function akmAgentDispatch(options) {
|
|
|
79
82
|
prompt = options.prompt;
|
|
80
83
|
}
|
|
81
84
|
// When prompt is undefined, the agent is launched interactively.
|
|
82
|
-
const stdio = prompt === undefined &&
|
|
85
|
+
const stdio = prompt === undefined && runner.kind !== "sdk" ? "interactive" : profile.stdio;
|
|
83
86
|
// Build the final dispatch request: merge the caller-supplied dispatch with
|
|
84
87
|
// the resolved prompt so the builder has all context in one place.
|
|
85
88
|
const dispatchRequest = options.dispatch
|
|
@@ -93,14 +96,12 @@ export async function akmAgentDispatch(options) {
|
|
|
93
96
|
...(options.cwd ? { cwd: options.cwd } : {}),
|
|
94
97
|
...(dispatchRequest !== undefined ? { dispatch: dispatchRequest } : {}),
|
|
95
98
|
};
|
|
96
|
-
const result =
|
|
97
|
-
? await runOpencodeSdk(profile, prompt ?? "", runOptions, options.llmConfig)
|
|
98
|
-
: await runAgent(profile, prompt, runOptions);
|
|
99
|
+
const result = await executeRunner(runner, prompt ?? "", runOptions);
|
|
99
100
|
return {
|
|
100
|
-
schemaVersion:
|
|
101
|
+
schemaVersion: 2,
|
|
101
102
|
ok: result.ok,
|
|
102
103
|
shape: "agent-result",
|
|
103
|
-
|
|
104
|
+
engine: engineName,
|
|
104
105
|
exitCode: result.exitCode,
|
|
105
106
|
stdout: result.stdout ?? "",
|
|
106
107
|
stderr: result.stderr ?? "",
|
|
@@ -1,30 +1,6 @@
|
|
|
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 { loadConfig } from "../../core/config/config.js";
|
|
5
|
-
import { requireAgentProfile, } from "../../integrations/agent/index.js";
|
|
6
|
-
// ── Config helpers ───────────────────────────────────────────────────────────
|
|
7
|
-
/**
|
|
8
|
-
* Load the loaded AkmConfig from disk.
|
|
9
|
-
*
|
|
10
|
-
* After 0.8.0, the legacy `agent` top-level block was removed — the agent
|
|
11
|
-
* profile data now lives on the unified `AkmConfig` (via `profiles.agent` and
|
|
12
|
-
* `defaults.agent`). This helper remains for source-compat with callers that
|
|
13
|
-
* still expect an "AgentConfig"; it now returns the loaded `AkmConfig`.
|
|
14
|
-
*/
|
|
15
|
-
export function loadAgentConfigFromDisk() {
|
|
16
|
-
return loadConfig();
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Resolve the agent profile for a command's options.
|
|
20
|
-
* Prefers an injected `agentProfile` (test seam) over the on-disk config.
|
|
21
|
-
*/
|
|
22
|
-
export function resolveAgentProfile(options) {
|
|
23
|
-
if (options.agentProfile)
|
|
24
|
-
return options.agentProfile;
|
|
25
|
-
const agent = options.agentConfig ?? loadAgentConfigFromDisk();
|
|
26
|
-
return requireAgentProfile(agent, options.profile);
|
|
27
|
-
}
|
|
28
4
|
// ── Failure helpers ──────────────────────────────────────────────────────────
|
|
29
5
|
/**
|
|
30
6
|
* Base failure envelope shared by all agent command failures.
|
|
@@ -2,55 +2,48 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* Contribution command cluster (`akm agent`, `akm lint
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* output shape stay byte-identical.
|
|
5
|
+
* Contribution command cluster (`akm agent`, `akm lint`) — the asset
|
|
6
|
+
* authoring / validation verbs. Extracted verbatim from src/cli.ts (WS6) so
|
|
7
|
+
* the God Module shrinks; the `main.subCommands.{agent,lint}` keys and every
|
|
8
|
+
* command's args / output shape stay byte-identical.
|
|
10
9
|
*
|
|
11
|
-
* These
|
|
12
|
-
* conditionally (exit 1 on a failed dispatch
|
|
13
|
-
*
|
|
14
|
-
* `runWithJsonErrors` form rather than migrating to
|
|
15
|
-
* (which is reserved for plain runWithJsonErrors+output
|
|
10
|
+
* These handlers branch on the result and set a non-zero `process.exitCode`
|
|
11
|
+
* conditionally (exit 1 on a failed dispatch, or on `--fail-on-flagged` lint
|
|
12
|
+
* findings) rather than emitting through the thrown-error path, so they keep
|
|
13
|
+
* the inline `runWithJsonErrors` form rather than migrating to
|
|
14
|
+
* `defineJsonCommand` (which is reserved for plain runWithJsonErrors+output
|
|
15
|
+
* handlers). `process.exitCode` (not `process.exit()`) so the process still
|
|
16
|
+
* exits via natural event-loop drain rather than skipping pending cleanup —
|
|
17
|
+
* see R-067 / F4.
|
|
16
18
|
*
|
|
17
|
-
* NOTE
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* no private helper with that module — its path/name helpers come from the
|
|
21
|
-
* shared src/core/asset-create.ts module, imported below.
|
|
19
|
+
* NOTE: the asset-authoring `propose` verb (formerly here) moved to
|
|
20
|
+
* `akm proposal new` (0.9 CLI overhaul, S8) — see
|
|
21
|
+
* src/commands/proposal/propose-cli.ts.
|
|
22
22
|
*/
|
|
23
|
-
import fs from "node:fs";
|
|
24
|
-
import path from "node:path";
|
|
25
23
|
import { defineCommand } from "citty";
|
|
26
24
|
import { getStringArg, parsePositiveIntFlag } from "../../cli/parse-args.js";
|
|
27
|
-
import { EXIT_CODES, output, runWithJsonErrors } from "../../cli/shared.js";
|
|
28
|
-
import { assertFlatAssetName, combineCreatePath, normalizeCreateSubPath } from "../../core/asset/asset-create.js";
|
|
25
|
+
import { EXIT_CODES, GLOBAL_OUTPUT_ARGS, output, runWithJsonErrors } from "../../cli/shared.js";
|
|
29
26
|
import { loadConfig } from "../../core/config/config.js";
|
|
30
|
-
import {
|
|
27
|
+
import { resolveUsageEventSource } from "../../indexer/usage/usage-events.js";
|
|
31
28
|
import { akmLint } from "../lint/index.js";
|
|
32
|
-
import { akmPropose } from "../proposal/propose.js";
|
|
33
29
|
import { akmAgentDispatch } from "./agent-dispatch.js";
|
|
34
30
|
const EXIT_GENERAL = EXIT_CODES.GENERAL;
|
|
35
31
|
export const agentCommand = defineCommand({
|
|
36
32
|
meta: {
|
|
37
33
|
name: "agent",
|
|
38
|
-
description: "Dispatch an agent CLI (opencode, claude, …) with an optional agent asset that provides the system prompt, model, and tool policy. Use <agent-ref> to embody a
|
|
34
|
+
description: "Dispatch an agent CLI (opencode, claude, …) with an optional agent asset that provides the system prompt, model, and tool policy. Use <agent-ref> to embody a bundle agent, --model to override the model, and --prompt/--command/--workflow to provide the task.",
|
|
39
35
|
},
|
|
40
36
|
args: {
|
|
41
|
-
|
|
42
|
-
type: "positional",
|
|
43
|
-
description: "Agent profile / platform to use (opencode, claude, …)",
|
|
44
|
-
required: false,
|
|
45
|
-
},
|
|
37
|
+
...GLOBAL_OUTPUT_ARGS,
|
|
46
38
|
"agent-ref": {
|
|
47
39
|
type: "positional",
|
|
48
|
-
description: "Optional agent asset ref (e.g.
|
|
40
|
+
description: "Optional agent asset ref (e.g. agents/code-reviewer). Loads system prompt, model, and tool policy from the bundle asset.",
|
|
49
41
|
required: false,
|
|
50
42
|
},
|
|
51
43
|
prompt: { type: "string", description: "Task prompt to pass to the agent" },
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
engine: { type: "string", description: "Agent engine to use (default: defaults.engine)" },
|
|
45
|
+
command: { type: "string", description: "Load prompt from a command asset" },
|
|
46
|
+
workflow: { type: "string", description: "Load prompt from a workflow asset" },
|
|
54
47
|
model: {
|
|
55
48
|
type: "string",
|
|
56
49
|
description: "Model override — accepts aliases (opus, sonnet, haiku) or exact platform model IDs. Overrides the model specified in the agent asset.",
|
|
@@ -63,13 +56,8 @@ export const agentCommand = defineCommand({
|
|
|
63
56
|
},
|
|
64
57
|
async run({ args }) {
|
|
65
58
|
await runWithJsonErrors(async () => {
|
|
66
|
-
if (!args.profile) {
|
|
67
|
-
throw new UsageError("Usage: akm agent <profile> [<agent-ref>] [--prompt <text>] [--model <model>]", "MISSING_REQUIRED_ARGUMENT", "Provide the agent profile name. Available profiles are listed in profiles.agent.");
|
|
68
|
-
}
|
|
69
59
|
const timeoutMs = parsePositiveIntFlag(args["timeout-ms"], "--timeout-ms");
|
|
70
60
|
const config = loadConfig();
|
|
71
|
-
const { getDefaultLlmConfig } = await import("../../core/config/config.js");
|
|
72
|
-
// After 0.8.0 the agent block IS the loaded AkmConfig.
|
|
73
61
|
const agentConfig = config;
|
|
74
62
|
// Resolve agent asset ref → extract system prompt, model, and tool policy.
|
|
75
63
|
const agentRef = getStringArg(args, "agent-ref");
|
|
@@ -78,7 +66,7 @@ export const agentCommand = defineCommand({
|
|
|
78
66
|
let assetTools;
|
|
79
67
|
if (agentRef) {
|
|
80
68
|
const { akmShowUnified } = await import("../read/show.js");
|
|
81
|
-
const asset = await akmShowUnified({ ref: agentRef, detail: "full" });
|
|
69
|
+
const asset = await akmShowUnified({ ref: agentRef, detail: "full", eventSource: resolveUsageEventSource() });
|
|
82
70
|
systemPrompt = typeof asset.content === "string" ? asset.content : undefined;
|
|
83
71
|
assetModel = typeof asset.modelHint === "string" ? asset.modelHint : undefined;
|
|
84
72
|
assetTools = asset.toolPolicy;
|
|
@@ -95,12 +83,11 @@ export const agentCommand = defineCommand({
|
|
|
95
83
|
// platform-specific flags beyond the profile's base args).
|
|
96
84
|
const hasDispatchContent = !!(promptText ?? commandRef ?? workflowRef ?? systemPrompt ?? model ?? assetTools);
|
|
97
85
|
const result = await akmAgentDispatch({
|
|
98
|
-
|
|
86
|
+
engine: getStringArg(args, "engine"),
|
|
99
87
|
prompt: promptText,
|
|
100
88
|
commandRef,
|
|
101
89
|
workflowRef,
|
|
102
90
|
agentConfig,
|
|
103
|
-
llmConfig: getDefaultLlmConfig(config),
|
|
104
91
|
...(hasDispatchContent
|
|
105
92
|
? {
|
|
106
93
|
dispatch: {
|
|
@@ -117,7 +104,16 @@ export const agentCommand = defineCommand({
|
|
|
117
104
|
});
|
|
118
105
|
output("agent-result", result);
|
|
119
106
|
if (!result.ok) {
|
|
120
|
-
process.exit(EXIT_GENERAL)
|
|
107
|
+
// R-067-style fix: this used to call `process.exit(EXIT_GENERAL)`
|
|
108
|
+
// directly, which terminates synchronously and skips any pending
|
|
109
|
+
// `finally`/cleanup up the call stack (including the dispatched
|
|
110
|
+
// agent process' own bookkeeping). `output()` has already run above,
|
|
111
|
+
// so there is nothing left in this handler that depends on
|
|
112
|
+
// terminating immediately — `process.exitCode` + `return` (this is
|
|
113
|
+
// the last statement anyway) lets the process exit naturally once
|
|
114
|
+
// the event loop drains.
|
|
115
|
+
process.exitCode = EXIT_GENERAL;
|
|
116
|
+
return;
|
|
121
117
|
}
|
|
122
118
|
});
|
|
123
119
|
},
|
|
@@ -125,16 +121,22 @@ export const agentCommand = defineCommand({
|
|
|
125
121
|
export const lintCommand = defineCommand({
|
|
126
122
|
meta: {
|
|
127
123
|
name: "lint",
|
|
128
|
-
description: "Scan
|
|
124
|
+
description: "Scan bundle .md files for structural issues (unquoted colons, missing updated field, orphaned stubs, placeholder stubs, missing name/type, stale paths, broken refs in body text and in refs/xrefs/supersededBy/contradictedBy frontmatter). Use --fix to auto-fix Tier 1 issues. Exits 0 on success regardless of findings; use --fail-on-flagged for CI fail-on-finding behavior.",
|
|
129
125
|
},
|
|
130
126
|
args: {
|
|
127
|
+
// R-051: `lint` is a raw `defineCommand` (not `defineJsonCommand`), so it
|
|
128
|
+
// does not get `GLOBAL_OUTPUT_ARGS` for free. `--format`/`--detail`/
|
|
129
|
+
// `--shape`/`--output` already parsed correctly here (this command has no
|
|
130
|
+
// positional for a stray value to fall into), so this is purely a
|
|
131
|
+
// `--help` visibility / consistency fix, not a behavior change.
|
|
132
|
+
...GLOBAL_OUTPUT_ARGS,
|
|
131
133
|
fix: {
|
|
132
134
|
type: "boolean",
|
|
133
135
|
alias: "auto-fix",
|
|
134
136
|
description: "Apply auto-fixes in place (alias: --auto-fix)",
|
|
135
137
|
default: false,
|
|
136
138
|
},
|
|
137
|
-
dir: { type: "string", description: "Override
|
|
139
|
+
dir: { type: "string", description: "Override bundle root directory (default: from config)" },
|
|
138
140
|
"fail-on-flagged": {
|
|
139
141
|
type: "boolean",
|
|
140
142
|
description: "Exit non-zero when summary.flagged > 0 (CI-friendly). Default: exit 0 regardless of findings.",
|
|
@@ -161,59 +163,3 @@ export const lintCommand = defineCommand({
|
|
|
161
163
|
});
|
|
162
164
|
},
|
|
163
165
|
});
|
|
164
|
-
export const proposeCommand = defineCommand({
|
|
165
|
-
meta: {
|
|
166
|
-
name: "propose",
|
|
167
|
-
description: "Ask the configured agent CLI to author a brand-new asset and queue it as a proposal",
|
|
168
|
-
},
|
|
169
|
-
args: {
|
|
170
|
-
// Optional in citty so run() is invoked when omitted; we re-validate
|
|
171
|
-
// below to surface a structured UsageError (exit 2) instead of citty's
|
|
172
|
-
// default help-banner exit-0.
|
|
173
|
-
type: { type: "positional", description: "Asset type (skill, command, knowledge, lesson, ...)", required: false },
|
|
174
|
-
name: {
|
|
175
|
-
type: "positional",
|
|
176
|
-
description: "Asset name (flat, no '/'; use --path for a subdirectory)",
|
|
177
|
-
required: false,
|
|
178
|
-
},
|
|
179
|
-
path: {
|
|
180
|
-
type: "string",
|
|
181
|
-
description: "Relative subdirectory under the type dir to place the proposed asset in (e.g. 'release'). The filename comes from the name.",
|
|
182
|
-
},
|
|
183
|
-
task: { type: "string", description: "Task description for the agent (what should the asset do?)" },
|
|
184
|
-
file: { type: "string", description: "Read the task or prompt text from a UTF-8 file" },
|
|
185
|
-
profile: { type: "string", description: "Override the agent profile (defaults to agent.default)" },
|
|
186
|
-
"timeout-ms": { type: "string", description: "Override the agent CLI timeout in milliseconds" },
|
|
187
|
-
},
|
|
188
|
-
async run({ args }) {
|
|
189
|
-
await runWithJsonErrors(async () => {
|
|
190
|
-
// citty silently shows help and exits 0 when required positionals are
|
|
191
|
-
// omitted. Re-validate explicitly so the exit code is 2 (USAGE) and a
|
|
192
|
-
// structured JSON error reaches scripted callers.
|
|
193
|
-
const taskFromFlag = typeof args.task === "string" ? args.task : undefined;
|
|
194
|
-
const fileFromFlag = typeof args.file === "string" ? args.file : undefined;
|
|
195
|
-
if (!args.type || !args.name || (!taskFromFlag && !fileFromFlag)) {
|
|
196
|
-
throw new UsageError("Usage: akm propose <type> <name> (--task '<task>' | --file <path>).", "MISSING_REQUIRED_ARGUMENT", "Provide the asset type, name, and exactly one of --task or --file.");
|
|
197
|
-
}
|
|
198
|
-
if (taskFromFlag && fileFromFlag) {
|
|
199
|
-
throw new UsageError("Pass exactly one of --task or --file.", "INVALID_FLAG_VALUE");
|
|
200
|
-
}
|
|
201
|
-
// `name` is flat; subdirectory placement is `--path`'s job.
|
|
202
|
-
assertFlatAssetName(String(args.name));
|
|
203
|
-
const proposedName = combineCreatePath(normalizeCreateSubPath(getStringArg(args, "path")), String(args.name));
|
|
204
|
-
const taskText = fileFromFlag ? fs.readFileSync(path.resolve(fileFromFlag), "utf8") : (taskFromFlag ?? "");
|
|
205
|
-
const timeoutMs = parsePositiveIntFlag(args["timeout-ms"], "--timeout-ms");
|
|
206
|
-
const result = await akmPropose({
|
|
207
|
-
type: String(args.type),
|
|
208
|
-
name: proposedName,
|
|
209
|
-
task: taskText,
|
|
210
|
-
profile: getStringArg(args, "profile"),
|
|
211
|
-
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
212
|
-
});
|
|
213
|
-
output("propose", result);
|
|
214
|
-
if (result.ok === false) {
|
|
215
|
-
process.exit(EXIT_GENERAL);
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
},
|
|
219
|
-
});
|
|
@@ -4,33 +4,73 @@
|
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import path from "node:path";
|
|
7
|
-
import {
|
|
8
|
-
// ── Known flag values ────────────────────────────────────────────────────────
|
|
7
|
+
import { placementTypes } from "../core/asset/asset-placement.js";
|
|
9
8
|
const FLAG_VALUES = {
|
|
10
|
-
"--format": ["json", "
|
|
11
|
-
"--detail": ["brief", "normal", "full"
|
|
12
|
-
"--
|
|
13
|
-
"--
|
|
14
|
-
"--shell": ["bash"],
|
|
9
|
+
"--format": [{ values: ["json", "jsonl", "yaml", "text", "md", "html"] }],
|
|
10
|
+
"--detail": [{ values: ["brief", "normal", "full"] }],
|
|
11
|
+
"--shape": [{ values: ["human", "agent", "summary"] }],
|
|
12
|
+
"--type": [{ values: () => [...placementTypes(), "any"] }],
|
|
13
|
+
"--shell": [{ values: ["bash"] }],
|
|
14
|
+
"--from": [{ paths: ["akm search", "akm curate"], values: ["local", "registry", "all"] }],
|
|
15
15
|
};
|
|
16
|
+
function resolveRuleValues(rule) {
|
|
17
|
+
return typeof rule.values === "function" ? rule.values() : rule.values;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build the `${prev}`-case body for one flag. When the flag has no
|
|
21
|
+
* path-scoped rules, every command shares one value set (unchanged from
|
|
22
|
+
* before R-052a). When it does (currently only `--from`), nest a
|
|
23
|
+
* `${cmd_path}` match inside the flag's case so the suggestion depends on
|
|
24
|
+
* which command is being completed — with a `*)` fallback to any
|
|
25
|
+
* unscoped/global rule declared alongside the scoped ones, or no suggestion
|
|
26
|
+
* at all when every rule for that flag is scoped.
|
|
27
|
+
*/
|
|
28
|
+
function buildFlagValueCaseBody(rules) {
|
|
29
|
+
const scoped = rules.filter((rule) => rule.paths && rule.paths.length > 0);
|
|
30
|
+
const global = rules.find((rule) => !rule.paths || rule.paths.length === 0);
|
|
31
|
+
if (scoped.length === 0) {
|
|
32
|
+
return ` COMPREPLY=( $(compgen -W "${resolveRuleValues(global).join(" ")}" -- "\${cur}") )`;
|
|
33
|
+
}
|
|
34
|
+
const branches = scoped
|
|
35
|
+
.map((rule) => ` ${rule.paths.map((p) => `"${p}"`).join("|")})
|
|
36
|
+
COMPREPLY=( $(compgen -W "${resolveRuleValues(rule).join(" ")}" -- "\${cur}") )
|
|
37
|
+
;;`)
|
|
38
|
+
.join("\n");
|
|
39
|
+
const fallback = global
|
|
40
|
+
? ` *)
|
|
41
|
+
COMPREPLY=( $(compgen -W "${resolveRuleValues(global).join(" ")}" -- "\${cur}") )
|
|
42
|
+
;;`
|
|
43
|
+
: "";
|
|
44
|
+
return ` case "\${cmd_path}" in
|
|
45
|
+
${branches}
|
|
46
|
+
${fallback}
|
|
47
|
+
esac`;
|
|
48
|
+
}
|
|
16
49
|
function walkCommandTree(cmd, parentPath = "") {
|
|
17
50
|
const name = cmd.meta?.name ?? "";
|
|
18
51
|
const currentPath = parentPath ? `${parentPath} ${name}` : name;
|
|
19
52
|
const result = [];
|
|
20
|
-
|
|
53
|
+
// `meta.hidden` (e.g. `migrate`, S11) is excluded from completion the same
|
|
54
|
+
// way citty's own `renderUsage` excludes it from a rendered COMMANDS list —
|
|
55
|
+
// a hidden command still runs, it just isn't suggested.
|
|
56
|
+
const visibleSubEntries = Object.entries((cmd.subCommands ?? {})).filter(([, sub]) => !sub.meta?.hidden);
|
|
57
|
+
const subcommands = visibleSubEntries.map(([key]) => key);
|
|
21
58
|
const flags = [];
|
|
59
|
+
const valueFlags = [];
|
|
22
60
|
if (cmd.args) {
|
|
23
61
|
for (const [flagName, arg] of Object.entries(cmd.args)) {
|
|
24
62
|
if (arg.type === "positional")
|
|
25
63
|
continue;
|
|
26
64
|
flags.push(`--${flagName}`);
|
|
65
|
+
if (arg.type === "boolean" && arg.default === true)
|
|
66
|
+
flags.push(`--no-${flagName}`);
|
|
67
|
+
if (arg.type !== "boolean")
|
|
68
|
+
valueFlags.push(`--${flagName}`);
|
|
27
69
|
}
|
|
28
70
|
}
|
|
29
|
-
result.push({ path: currentPath, subcommands, flags });
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
result.push(...walkCommandTree(sub, currentPath));
|
|
33
|
-
}
|
|
71
|
+
result.push({ path: currentPath, subcommands, flags, valueFlags });
|
|
72
|
+
for (const [, sub] of visibleSubEntries) {
|
|
73
|
+
result.push(...walkCommandTree(sub, currentPath));
|
|
34
74
|
}
|
|
35
75
|
return result;
|
|
36
76
|
}
|
|
@@ -41,6 +81,7 @@ export function generateBashCompletions(cmd) {
|
|
|
41
81
|
// Collect global flags from root command
|
|
42
82
|
const rootInfo = commands.find((c) => c.path === rootName);
|
|
43
83
|
const globalFlags = rootInfo?.flags ?? [];
|
|
84
|
+
const valueFlags = [...new Set(commands.flatMap((info) => info.valueFlags))];
|
|
44
85
|
// Build the case blocks for subcommand completion
|
|
45
86
|
const caseBlocks = [];
|
|
46
87
|
for (const info of commands) {
|
|
@@ -61,10 +102,9 @@ export function generateBashCompletions(cmd) {
|
|
|
61
102
|
}
|
|
62
103
|
// Build flag-value completion cases
|
|
63
104
|
const valueCases = [];
|
|
64
|
-
for (const [flag,
|
|
65
|
-
const values = typeof valuesOrFn === "function" ? valuesOrFn() : valuesOrFn;
|
|
105
|
+
for (const [flag, rules] of Object.entries(FLAG_VALUES)) {
|
|
66
106
|
valueCases.push(` ${flag})
|
|
67
|
-
|
|
107
|
+
${buildFlagValueCaseBody(rules)}
|
|
68
108
|
return 0
|
|
69
109
|
;;`);
|
|
70
110
|
}
|
|
@@ -83,20 +123,37 @@ _${rootName}() {
|
|
|
83
123
|
cword=\${COMP_CWORD}
|
|
84
124
|
fi
|
|
85
125
|
|
|
86
|
-
#
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
esac
|
|
90
|
-
|
|
91
|
-
# Build the command path from COMP_WORDS
|
|
126
|
+
# Build the command path from recognized subcommand transitions only. Positional
|
|
127
|
+
# arguments and option values cannot extend the path, so completion remains
|
|
128
|
+
# command-aware after either one.
|
|
92
129
|
local cmd_path="${rootName}"
|
|
130
|
+
local skip_value=0
|
|
93
131
|
for (( i=1; i < cword; i++ )); do
|
|
132
|
+
if (( skip_value )); then
|
|
133
|
+
skip_value=0
|
|
134
|
+
continue
|
|
135
|
+
fi
|
|
94
136
|
case "\${words[i]}" in
|
|
137
|
+
--) break ;;
|
|
138
|
+
--*=*) continue ;;
|
|
139
|
+
${valueFlags.join("|")}) skip_value=1; continue ;;
|
|
95
140
|
-*) continue ;;
|
|
96
|
-
*)
|
|
141
|
+
*)
|
|
142
|
+
case "\${cmd_path}:\${words[i]}" in
|
|
143
|
+
${commands
|
|
144
|
+
.filter((info) => info.subcommands.length > 0)
|
|
145
|
+
.flatMap((info) => info.subcommands.map((subcommand) => ` "${info.path}:${subcommand}") cmd_path="${info.path} ${subcommand}" ;;`))
|
|
146
|
+
.join("\n")}
|
|
147
|
+
esac
|
|
148
|
+
;;
|
|
97
149
|
esac
|
|
98
150
|
done
|
|
99
151
|
|
|
152
|
+
# Complete flag values
|
|
153
|
+
case "\${prev}" in
|
|
154
|
+
${valueCases.join("\n")}
|
|
155
|
+
esac
|
|
156
|
+
|
|
100
157
|
# Complete based on current command path
|
|
101
158
|
case "\${cmd_path}" in
|
|
102
159
|
${caseBlocks.join("\n")}
|