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
|
@@ -0,0 +1,562 @@
|
|
|
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
|
+
export function formatInfoPlain(r) {
|
|
5
|
+
const lines = [];
|
|
6
|
+
if (r.version)
|
|
7
|
+
lines.push(`version: ${String(r.version)}`);
|
|
8
|
+
if (r.bundleDir)
|
|
9
|
+
lines.push(`bundleDir: ${String(r.bundleDir)}`);
|
|
10
|
+
if (r.configPath)
|
|
11
|
+
lines.push(`configPath: ${String(r.configPath)}`);
|
|
12
|
+
if (r.cacheDir)
|
|
13
|
+
lines.push(`cacheDir: ${String(r.cacheDir)}`);
|
|
14
|
+
if (r.dbPath)
|
|
15
|
+
lines.push(`dbPath: ${String(r.dbPath)}`);
|
|
16
|
+
const capabilities = r.capabilities;
|
|
17
|
+
if (capabilities) {
|
|
18
|
+
lines.push("capabilities:");
|
|
19
|
+
for (const [k, v] of Object.entries(capabilities)) {
|
|
20
|
+
lines.push(` ${k}: ${typeof v === "object" ? JSON.stringify(v) : String(v)}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const indexStats = r.index;
|
|
24
|
+
if (indexStats) {
|
|
25
|
+
lines.push("index:");
|
|
26
|
+
for (const [k, v] of Object.entries(indexStats)) {
|
|
27
|
+
lines.push(` ${k}: ${typeof v === "object" ? JSON.stringify(v) : String(v)}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (lines.length === 0)
|
|
31
|
+
return JSON.stringify(r, null, 2);
|
|
32
|
+
return lines.join("\n");
|
|
33
|
+
}
|
|
34
|
+
export function formatConfigPlain(r) {
|
|
35
|
+
// Recursive flattener: prints `key=value` lines, and nested objects as
|
|
36
|
+
// `parent.child=value`. Arrays render as JSON for compactness.
|
|
37
|
+
const lines = [];
|
|
38
|
+
const walk = (obj, prefix) => {
|
|
39
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
40
|
+
const path = prefix ? `${prefix}.${k}` : k;
|
|
41
|
+
if (v === null || v === undefined) {
|
|
42
|
+
lines.push(`${path}=`);
|
|
43
|
+
}
|
|
44
|
+
else if (Array.isArray(v)) {
|
|
45
|
+
lines.push(`${path}=${JSON.stringify(v)}`);
|
|
46
|
+
}
|
|
47
|
+
else if (typeof v === "object") {
|
|
48
|
+
walk(v, path);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
lines.push(`${path}=${String(v)}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
walk(r, "");
|
|
56
|
+
if (lines.length === 0)
|
|
57
|
+
return "(empty config)";
|
|
58
|
+
return lines.join("\n");
|
|
59
|
+
}
|
|
60
|
+
export function formatFeedbackPlain(r) {
|
|
61
|
+
const ref = String(r.ref ?? "?");
|
|
62
|
+
const signal = String(r.signal ?? "?");
|
|
63
|
+
const note = typeof r.note === "string" && r.note ? ` — ${r.note}` : "";
|
|
64
|
+
return `Recorded ${signal} feedback for ${ref}${note}`;
|
|
65
|
+
}
|
|
66
|
+
export function formatRememberPlain(r) {
|
|
67
|
+
const ref = String(r.ref ?? "?");
|
|
68
|
+
const pathValue = String(r.path ?? "?");
|
|
69
|
+
return `Saved ${ref} at ${pathValue}`;
|
|
70
|
+
}
|
|
71
|
+
export function formatImportPlain(r) {
|
|
72
|
+
const ref = String(r.ref ?? "?");
|
|
73
|
+
const source = String(r.source ?? "?");
|
|
74
|
+
const pathValue = String(r.path ?? "?");
|
|
75
|
+
return `Imported ${source} → ${ref} at ${pathValue}`;
|
|
76
|
+
}
|
|
77
|
+
export function formatSyncPlain(r) {
|
|
78
|
+
if (r.ok === false) {
|
|
79
|
+
const reason = typeof r.reason === "string" ? r.reason : "unknown";
|
|
80
|
+
return `sync: failed (${reason})`;
|
|
81
|
+
}
|
|
82
|
+
const name = typeof r.name === "string" ? r.name : "primary bundle";
|
|
83
|
+
const committed = r.committed === true;
|
|
84
|
+
const pushed = r.pushed === true;
|
|
85
|
+
const parts = [`sync: ${name}`];
|
|
86
|
+
parts.push(committed ? "committed" : "no changes");
|
|
87
|
+
if (pushed)
|
|
88
|
+
parts.push("pushed");
|
|
89
|
+
return parts.join(" — ");
|
|
90
|
+
}
|
|
91
|
+
export function formatRegistryListPlain(r) {
|
|
92
|
+
const registries = Array.isArray(r.registries) ? r.registries : [];
|
|
93
|
+
if (registries.length === 0) {
|
|
94
|
+
return "No registries configured. Add one with `akm registry add <url>`.";
|
|
95
|
+
}
|
|
96
|
+
const lines = [];
|
|
97
|
+
for (const reg of registries) {
|
|
98
|
+
const url = String(reg.url ?? "?");
|
|
99
|
+
const name = typeof reg.name === "string" ? reg.name : "";
|
|
100
|
+
const provider = typeof reg.provider === "string" ? ` (${reg.provider})` : "";
|
|
101
|
+
const enabled = reg.enabled === false ? " [disabled]" : "";
|
|
102
|
+
const head = name ? `${name}: ${url}` : url;
|
|
103
|
+
lines.push(`${head}${provider}${enabled}`);
|
|
104
|
+
}
|
|
105
|
+
return lines.join("\n");
|
|
106
|
+
}
|
|
107
|
+
export function formatRegistryAddPlain(r) {
|
|
108
|
+
if (r.added === false) {
|
|
109
|
+
return typeof r.message === "string" ? r.message : "Registry already configured.";
|
|
110
|
+
}
|
|
111
|
+
const registries = Array.isArray(r.registries) ? r.registries.length : 0;
|
|
112
|
+
return `Registry added (${registries} total).`;
|
|
113
|
+
}
|
|
114
|
+
export function formatRegistryRemovePlain(r) {
|
|
115
|
+
if (r.removed === false) {
|
|
116
|
+
return typeof r.message === "string" ? r.message : "No matching registry found.";
|
|
117
|
+
}
|
|
118
|
+
const entry = r.entry;
|
|
119
|
+
const url = entry ? String(entry.url ?? entry.name ?? "?") : "?";
|
|
120
|
+
return `Removed registry ${url}`;
|
|
121
|
+
}
|
|
122
|
+
export function formatRegistrySearchPlain(r, detail) {
|
|
123
|
+
// Reuse the same renderer as `search` — both share `hits` / `registryHits`.
|
|
124
|
+
return formatSearchPlain(r, detail);
|
|
125
|
+
}
|
|
126
|
+
export function formatEnvListPlain(r) {
|
|
127
|
+
// Multi-env listing: { envs: [{ ref, path, keys }, ...] }
|
|
128
|
+
const envs = Array.isArray(r.envs) ? r.envs : [];
|
|
129
|
+
if (envs.length === 0) {
|
|
130
|
+
return "No env files. Create one with `akm env create <name>`, then edit the .env file directly.";
|
|
131
|
+
}
|
|
132
|
+
const lines = [];
|
|
133
|
+
for (const v of envs) {
|
|
134
|
+
const ref = String(v.ref ?? "?");
|
|
135
|
+
const keys = Array.isArray(v.keys) ? v.keys.map(String) : [];
|
|
136
|
+
if (lines.length > 0)
|
|
137
|
+
lines.push("");
|
|
138
|
+
lines.push(`## ${ref}`);
|
|
139
|
+
if (keys.length === 0) {
|
|
140
|
+
lines.push("- (no keys)");
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
for (const key of keys) {
|
|
144
|
+
lines.push(`- ${key}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return lines.join("\n");
|
|
148
|
+
}
|
|
149
|
+
export function formatEnvCreatePlain(r) {
|
|
150
|
+
return `Created env ${String(r.ref ?? "?")}`;
|
|
151
|
+
}
|
|
152
|
+
export function formatEnvExportPlain(r) {
|
|
153
|
+
return `Wrote ${String(r.ref ?? "?")} export script → ${String(r.out ?? "?")} (mode 0600; source it, then delete)`;
|
|
154
|
+
}
|
|
155
|
+
export function formatEnvRemovePlain(r) {
|
|
156
|
+
const removed = r.removed === true;
|
|
157
|
+
return removed ? `Removed env ${String(r.ref ?? "?")}` : `Env ${String(r.ref ?? "?")} was not present`;
|
|
158
|
+
}
|
|
159
|
+
export function formatEventsPlain(r) {
|
|
160
|
+
const events = Array.isArray(r.events) ? r.events : [];
|
|
161
|
+
const headerParts = [];
|
|
162
|
+
if (typeof r.ref === "string" && r.ref)
|
|
163
|
+
headerParts.push(`ref: ${r.ref}`);
|
|
164
|
+
if (typeof r.type === "string" && r.type)
|
|
165
|
+
headerParts.push(`type: ${r.type}`);
|
|
166
|
+
if (typeof r.since === "string" && r.since)
|
|
167
|
+
headerParts.push(`since: ${r.since}`);
|
|
168
|
+
const totalCount = typeof r.totalCount === "number" ? r.totalCount : events.length;
|
|
169
|
+
headerParts.push(`${totalCount} event(s)`);
|
|
170
|
+
const header = headerParts.join(" ");
|
|
171
|
+
if (events.length === 0) {
|
|
172
|
+
return `${header}\nNo events.`;
|
|
173
|
+
}
|
|
174
|
+
const lines = [header, ""];
|
|
175
|
+
for (const event of events) {
|
|
176
|
+
lines.push(formatEventLine(event));
|
|
177
|
+
}
|
|
178
|
+
return lines.join("\n").trimEnd();
|
|
179
|
+
}
|
|
180
|
+
export function formatEventLine(event) {
|
|
181
|
+
const ts = String(event.ts ?? "?");
|
|
182
|
+
const eventType = String(event.eventType ?? "?");
|
|
183
|
+
const ref = event.ref ? String(event.ref) : null;
|
|
184
|
+
const head = ref ? `${ts} [${eventType}] ${ref}` : `${ts} [${eventType}]`;
|
|
185
|
+
if (event.metadata != null && event.metadata !== "") {
|
|
186
|
+
const meta = typeof event.metadata === "string" ? event.metadata : JSON.stringify(event.metadata);
|
|
187
|
+
return `${head}\n metadata: ${meta}`;
|
|
188
|
+
}
|
|
189
|
+
return head;
|
|
190
|
+
}
|
|
191
|
+
export function formatSearchPlain(r, detail) {
|
|
192
|
+
const hits = r.hits ?? [];
|
|
193
|
+
const registryHits = r.registryHits ?? [];
|
|
194
|
+
const allHits = [...hits, ...registryHits];
|
|
195
|
+
if (allHits.length === 0) {
|
|
196
|
+
const warnings = Array.isArray(r.warnings) ? r.warnings : [];
|
|
197
|
+
const hasSetupWarning = warnings.some((w) => String(w).toLowerCase().includes("no bundle") || String(w).toLowerCase().includes("not configured"));
|
|
198
|
+
if (hasSetupWarning) {
|
|
199
|
+
return "No bundle configured. Run `akm bundle create` to create your working bundle, then `akm index` to build the search index.";
|
|
200
|
+
}
|
|
201
|
+
const base = r.tip ? String(r.tip) : "No matches found.";
|
|
202
|
+
return `${base}\nTry:\n akm search '<broader-term>' # fewer keywords\n akm bundle list # see all configured sources\n akm curate '<query>' # let akm select the best match`;
|
|
203
|
+
}
|
|
204
|
+
const lines = [];
|
|
205
|
+
for (const hit of allHits) {
|
|
206
|
+
const type = hit.type ?? "unknown";
|
|
207
|
+
const name = hit.name ?? "unnamed";
|
|
208
|
+
const score = hit.score != null ? ` (score: ${hit.score})` : "";
|
|
209
|
+
const desc = hit.description ? ` ${hit.description}` : "";
|
|
210
|
+
lines.push(`${type}: ${name}${score}`);
|
|
211
|
+
if (desc)
|
|
212
|
+
lines.push(desc);
|
|
213
|
+
if (hit.id)
|
|
214
|
+
lines.push(` id: ${String(hit.id)}`);
|
|
215
|
+
if (hit.ref)
|
|
216
|
+
lines.push(` ref: ${String(hit.ref)}`);
|
|
217
|
+
if (hit.origin !== undefined)
|
|
218
|
+
lines.push(` origin: ${String(hit.origin)}`);
|
|
219
|
+
if (Array.isArray(hit.keys) && hit.keys.length > 0)
|
|
220
|
+
lines.push(` keys: ${hit.keys.join(", ")}`);
|
|
221
|
+
if (hit.size)
|
|
222
|
+
lines.push(` size: ${String(hit.size)}`);
|
|
223
|
+
if (hit.action)
|
|
224
|
+
lines.push(` action: ${String(hit.action)}`);
|
|
225
|
+
if (hit.run)
|
|
226
|
+
lines.push(` run: ${String(hit.run)}`);
|
|
227
|
+
if (Array.isArray(hit.tags) && hit.tags.length > 0)
|
|
228
|
+
lines.push(` tags: ${hit.tags.join(", ")}`);
|
|
229
|
+
// Optional v1 spec §4.2 quality marker (e.g. "curated" / "proposed").
|
|
230
|
+
if (typeof hit.quality === "string" && hit.quality)
|
|
231
|
+
lines.push(` quality: ${hit.quality}`);
|
|
232
|
+
// Surface optional hit-level warnings (v1 spec §4.2).
|
|
233
|
+
if (Array.isArray(hit.warnings) && hit.warnings.length > 0) {
|
|
234
|
+
lines.push(` warnings: ${hit.warnings.join("; ")}`);
|
|
235
|
+
}
|
|
236
|
+
const graph = typeof hit.graph === "object" && hit.graph !== null ? hit.graph : undefined;
|
|
237
|
+
if (graph) {
|
|
238
|
+
const entities = Array.isArray(graph.entities) ? graph.entities : [];
|
|
239
|
+
if (entities.length > 0) {
|
|
240
|
+
const matched = entities
|
|
241
|
+
.filter((entity) => String(entity.kind ?? "") === "matched")
|
|
242
|
+
.map((entity) => String(entity.name ?? "?"));
|
|
243
|
+
const neighbors = entities
|
|
244
|
+
.filter((entity) => String(entity.kind ?? "") !== "matched")
|
|
245
|
+
.map((entity) => String(entity.name ?? "?"));
|
|
246
|
+
lines.push(` graph: ${[
|
|
247
|
+
matched.length > 0 ? `query match=${matched.join(", ")}` : undefined,
|
|
248
|
+
neighbors.length > 0 ? `neighbors=${neighbors.join(", ")}` : undefined,
|
|
249
|
+
]
|
|
250
|
+
.filter(Boolean)
|
|
251
|
+
.join("; ")}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (detail === "full") {
|
|
255
|
+
if (hit.path)
|
|
256
|
+
lines.push(` path: ${String(hit.path)}`);
|
|
257
|
+
if (hit.editable != null)
|
|
258
|
+
lines.push(` editable: ${String(hit.editable)}`);
|
|
259
|
+
if (hit.editHint)
|
|
260
|
+
lines.push(` editHint: ${String(hit.editHint)}`);
|
|
261
|
+
const whyMatched = hit.whyMatched;
|
|
262
|
+
if (whyMatched && whyMatched.length > 0) {
|
|
263
|
+
lines.push(` whyMatched: ${whyMatched.join(", ")}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
lines.push(""); // blank line between hits
|
|
267
|
+
}
|
|
268
|
+
if (detail === "full" && r.timing) {
|
|
269
|
+
const timing = r.timing;
|
|
270
|
+
const parts = [];
|
|
271
|
+
if (timing.totalMs != null)
|
|
272
|
+
parts.push(`total: ${timing.totalMs}ms`);
|
|
273
|
+
if (timing.rankMs != null)
|
|
274
|
+
parts.push(`rank: ${timing.rankMs}ms`);
|
|
275
|
+
if (timing.embedMs != null)
|
|
276
|
+
parts.push(`embed: ${timing.embedMs}ms`);
|
|
277
|
+
if (parts.length > 0)
|
|
278
|
+
lines.push(`timing: ${parts.join(", ")}`);
|
|
279
|
+
}
|
|
280
|
+
// REC-02: When stash hits exist, tell the agent the next required step so it
|
|
281
|
+
// doesn't skip `akm show` and write from training memory instead.
|
|
282
|
+
if (hits.length >= 1) {
|
|
283
|
+
// Prefer skill/command/agent type hits for the "Next:" ref — knowledge docs are
|
|
284
|
+
// supplementary context, not the authoritative schema agents should load first.
|
|
285
|
+
const preferredHit = hits.find((h) => h.type === "skill" || h.type === "command" || h.type === "agent") ?? hits[0];
|
|
286
|
+
const topRef = typeof preferredHit.ref === "string" ? preferredHit.ref : null;
|
|
287
|
+
const hasWorkflowHit = hits.some((h) => h.type === "workflow");
|
|
288
|
+
if (topRef) {
|
|
289
|
+
if (hasWorkflowHit) {
|
|
290
|
+
const workflowRef = hits.find((h) => h.type === "workflow");
|
|
291
|
+
const wfRef = workflowRef && typeof workflowRef.ref === "string" ? workflowRef.ref : topRef;
|
|
292
|
+
lines.push(`Next: akm show '${topRef}' | To start a workflow: akm workflow next '${wfRef}'`);
|
|
293
|
+
lines.push("After running workflow next: follow each step and run `akm workflow complete <run-id> --step <step-id>` when done.");
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
lines.push(`Next: akm show '${topRef}'`);
|
|
297
|
+
lines.push("After reading the asset: check whether a workflow applies before editing — if so, use `akm workflow next` instead.");
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return lines.join("\n").trimEnd();
|
|
302
|
+
}
|
|
303
|
+
export function formatCuratePlain(r, detail) {
|
|
304
|
+
const query = typeof r.query === "string" ? r.query : "";
|
|
305
|
+
const summary = typeof r.summary === "string" ? r.summary : "";
|
|
306
|
+
const items = Array.isArray(r.items) ? r.items : [];
|
|
307
|
+
const lines = [`Curated results for "${query}"`];
|
|
308
|
+
if (summary)
|
|
309
|
+
lines.push(summary);
|
|
310
|
+
if (items.length === 0) {
|
|
311
|
+
if (r.tip)
|
|
312
|
+
lines.push(String(r.tip));
|
|
313
|
+
return lines.join("\n");
|
|
314
|
+
}
|
|
315
|
+
for (const item of items) {
|
|
316
|
+
const type = typeof item.type === "string" ? item.type : "unknown";
|
|
317
|
+
const name = typeof item.name === "string" ? item.name : "unnamed";
|
|
318
|
+
lines.push("");
|
|
319
|
+
lines.push(`[${type}] ${name}`);
|
|
320
|
+
if (item.description)
|
|
321
|
+
lines.push(` ${String(item.description)}`);
|
|
322
|
+
if (item.preview)
|
|
323
|
+
lines.push(` preview: ${String(item.preview)}`);
|
|
324
|
+
if (item.ref)
|
|
325
|
+
lines.push(` ref: ${String(item.ref)}`);
|
|
326
|
+
if (item.id)
|
|
327
|
+
lines.push(` id: ${String(item.id)}`);
|
|
328
|
+
if (Array.isArray(item.keys) && item.keys.length > 0) {
|
|
329
|
+
lines.push(` keys: ${item.keys.join(", ")}`);
|
|
330
|
+
}
|
|
331
|
+
if (Array.isArray(item.parameters) && item.parameters.length > 0) {
|
|
332
|
+
lines.push(` parameters: ${item.parameters.join(", ")}`);
|
|
333
|
+
}
|
|
334
|
+
if (item.run)
|
|
335
|
+
lines.push(` run: ${String(item.run)}`);
|
|
336
|
+
if (item.followUp)
|
|
337
|
+
lines.push(` show: ${String(item.followUp)}`);
|
|
338
|
+
if (Array.isArray(item.supportRefs) && item.supportRefs.length > 0) {
|
|
339
|
+
for (const support of item.supportRefs) {
|
|
340
|
+
if (!support.ref)
|
|
341
|
+
continue;
|
|
342
|
+
const label = typeof support.type === "string" ? `[${support.type}] ` : "";
|
|
343
|
+
const why = typeof support.reason === "string" ? ` — ${support.reason}` : "";
|
|
344
|
+
lines.push(` support: ${label}${String(support.ref)}${why}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
if (detail !== "brief" && item.reason)
|
|
348
|
+
lines.push(` why: ${String(item.reason)}`);
|
|
349
|
+
}
|
|
350
|
+
const warnings = Array.isArray(r.warnings) ? r.warnings : [];
|
|
351
|
+
if (warnings.length > 0) {
|
|
352
|
+
lines.push("");
|
|
353
|
+
lines.push("Warnings:");
|
|
354
|
+
for (const warning of warnings) {
|
|
355
|
+
lines.push(`- ${String(warning)}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
lines.push("");
|
|
359
|
+
lines.push("Next steps:");
|
|
360
|
+
lines.push(" 1. Run `akm show <ref>` for the best result above to read the full schema.");
|
|
361
|
+
lines.push(" 2. Edit the workspace file using the schema field names and your task-specific values.");
|
|
362
|
+
lines.push(" 3. Run `akm feedback <ref> --positive` when the task succeeds.");
|
|
363
|
+
lines.push("To search further: akm search '<query>'");
|
|
364
|
+
return lines.join("\n");
|
|
365
|
+
}
|
|
366
|
+
export function formatInitPlain(r) {
|
|
367
|
+
let out = `Bundle initialized at ${r.bundleDir ?? "unknown"}`;
|
|
368
|
+
// When --dir scaffolded a secondary bundle but the default was deliberately
|
|
369
|
+
// left untouched, tell the user instead of silently repointing their default.
|
|
370
|
+
if (r.defaultBundleUpdated === false && typeof r.previousBundleDir === "string" && r.previousBundleDir) {
|
|
371
|
+
out += `\nYour default bundle is unchanged (${r.previousBundleDir}). Re-run with --set-default to make ${r.bundleDir} the default.`;
|
|
372
|
+
}
|
|
373
|
+
else if (r.configPath) {
|
|
374
|
+
out += `\nConfig saved to ${r.configPath}`;
|
|
375
|
+
}
|
|
376
|
+
return out;
|
|
377
|
+
}
|
|
378
|
+
export function formatIndexPlain(r) {
|
|
379
|
+
const indexResult = r;
|
|
380
|
+
let out = `Indexed ${indexResult.totalEntries ?? 0} entries from ${indexResult.directoriesScanned ?? 0} directories (mode: ${indexResult.mode ?? "unknown"})`;
|
|
381
|
+
const warnings = indexResult.warnings;
|
|
382
|
+
if (Array.isArray(warnings) && warnings.length > 0) {
|
|
383
|
+
out += `\nWarnings (${warnings.length}):`;
|
|
384
|
+
for (const message of warnings)
|
|
385
|
+
out += `\n - ${String(message)}`;
|
|
386
|
+
}
|
|
387
|
+
const verification = indexResult.verification;
|
|
388
|
+
if (verification?.ok === false && verification.message) {
|
|
389
|
+
out += `\nVerification: ${String(verification.message)}`;
|
|
390
|
+
}
|
|
391
|
+
const timing = indexResult.timing;
|
|
392
|
+
if (timing) {
|
|
393
|
+
out +=
|
|
394
|
+
`\nTiming: total ${timing.totalMs}ms` +
|
|
395
|
+
`, preflight ${timing.preflightMs}ms` +
|
|
396
|
+
`, walk ${timing.walkMs}ms` +
|
|
397
|
+
`, llm ${timing.llmMs}ms` +
|
|
398
|
+
`, embeddings ${timing.embedMs}ms` +
|
|
399
|
+
`, fts ${timing.ftsMs}ms` +
|
|
400
|
+
`, finalize ${timing.finalizeMs}ms` +
|
|
401
|
+
`, clean ${timing.cleanMs}ms` +
|
|
402
|
+
`, end-to-end ${timing.endToEndMs}ms`;
|
|
403
|
+
}
|
|
404
|
+
return out;
|
|
405
|
+
}
|
|
406
|
+
export function formatListPlain(r) {
|
|
407
|
+
const sources = Array.isArray(r.sources) ? r.sources : [];
|
|
408
|
+
if (sources.length === 0)
|
|
409
|
+
return "No sources configured. Use `akm bundle add` to add a source.";
|
|
410
|
+
const lines = [];
|
|
411
|
+
for (const src of sources) {
|
|
412
|
+
const kind = typeof src.kind === "string" ? src.kind : "unknown";
|
|
413
|
+
const name = typeof src.name === "string" ? src.name : "unnamed";
|
|
414
|
+
const ver = typeof src.version === "string" ? ` v${src.version}` : "";
|
|
415
|
+
const prov = typeof src.provider === "string" ? ` (${src.provider})` : "";
|
|
416
|
+
const flags = [];
|
|
417
|
+
if (src.default === true)
|
|
418
|
+
flags.push("default");
|
|
419
|
+
if (src.writable === true)
|
|
420
|
+
flags.push("writable");
|
|
421
|
+
const flagText = flags.length > 0 ? ` [${flags.join(", ")}]` : "";
|
|
422
|
+
lines.push(`[${kind}] ${name}${ver}${prov}${flagText}`);
|
|
423
|
+
}
|
|
424
|
+
lines.push("");
|
|
425
|
+
lines.push("To search: akm search '<query>' | To view an asset: akm show <ref>");
|
|
426
|
+
return lines.join("\n");
|
|
427
|
+
}
|
|
428
|
+
/** Render a single `SourceEntry` — `akm bundle show <name>`'s detail view of one `list` row. */
|
|
429
|
+
export function formatBundleShowPlain(r) {
|
|
430
|
+
const name = typeof r.name === "string" ? r.name : "unknown";
|
|
431
|
+
const kind = typeof r.kind === "string" ? r.kind : "unknown";
|
|
432
|
+
const lines = [`${name} [${kind}]`];
|
|
433
|
+
if (r.default === true)
|
|
434
|
+
lines.push(" default: true");
|
|
435
|
+
if (r.writable === true)
|
|
436
|
+
lines.push(" writable: true");
|
|
437
|
+
if (typeof r.version === "string")
|
|
438
|
+
lines.push(` version: ${r.version}`);
|
|
439
|
+
if (typeof r.provider === "string")
|
|
440
|
+
lines.push(` provider: ${r.provider}`);
|
|
441
|
+
if (typeof r.path === "string")
|
|
442
|
+
lines.push(` path: ${r.path}`);
|
|
443
|
+
if (typeof r.ref === "string")
|
|
444
|
+
lines.push(` ref: ${r.ref}`);
|
|
445
|
+
if (typeof r.registryId === "string")
|
|
446
|
+
lines.push(` registryId: ${r.registryId}`);
|
|
447
|
+
lines.push(` items: ${typeof r.itemCount === "number" ? r.itemCount : 0}`);
|
|
448
|
+
const byType = r.byType;
|
|
449
|
+
if (byType && Object.keys(byType).length > 0) {
|
|
450
|
+
lines.push(` byType: ${Object.entries(byType)
|
|
451
|
+
.map(([t, n]) => `${t}=${n}`)
|
|
452
|
+
.join(", ")}`);
|
|
453
|
+
}
|
|
454
|
+
const status = r.status;
|
|
455
|
+
if (status?.exists === false)
|
|
456
|
+
lines.push(" status: MISSING on disk");
|
|
457
|
+
return lines.join("\n");
|
|
458
|
+
}
|
|
459
|
+
export function formatAddPlain(r) {
|
|
460
|
+
// `akm bundle add <ref>` (source-add.ts `AddResponse`) and `akm bundle add
|
|
461
|
+
// <target> --provider <kind>` (source-manage.ts `SourceAddResult`) are
|
|
462
|
+
// genuinely different operations that happen to share the "add" command
|
|
463
|
+
// name: the former eagerly fetches and indexes content, the latter only
|
|
464
|
+
// writes a desired locator to config — nothing is synced until a later
|
|
465
|
+
// `akm bundle update`. Force-fitting the declarative shape's `added`/`entry`/`message`
|
|
466
|
+
// fields into the "Installed <ref> (N scanned...)" wording produced
|
|
467
|
+
// "Installed undefined (0 directories scanned...)" (R-014) because it
|
|
468
|
+
// implied a sync that never happened. `AddResponse` always carries an
|
|
469
|
+
// `index` block (even when zero entries were scanned); `SourceAddResult`
|
|
470
|
+
// never does — that is the reliable shape discriminator used below to
|
|
471
|
+
// render each honestly instead of unifying them.
|
|
472
|
+
if (!("index" in r))
|
|
473
|
+
return formatDeclarativeAddPlain(r);
|
|
474
|
+
const index = r.index;
|
|
475
|
+
const scanned = index?.directoriesScanned ?? 0;
|
|
476
|
+
const total = index?.totalEntries ?? 0;
|
|
477
|
+
const lines = [`Installed ${r.ref} (${scanned} directories scanned, ${total} total assets indexed)`];
|
|
478
|
+
const warnings = index?.warnings;
|
|
479
|
+
if (Array.isArray(warnings) && warnings.length > 0) {
|
|
480
|
+
lines.push(`Warnings (${warnings.length}):`);
|
|
481
|
+
for (const message of warnings)
|
|
482
|
+
lines.push(` - ${String(message)}`);
|
|
483
|
+
}
|
|
484
|
+
return lines.join("\n");
|
|
485
|
+
}
|
|
486
|
+
/** Render a `SourceAddResult` (declarative `--provider` add) — see {@link formatAddPlain}. */
|
|
487
|
+
function formatDeclarativeAddPlain(r) {
|
|
488
|
+
if (r.added !== true) {
|
|
489
|
+
return typeof r.message === "string" ? r.message : "add: no changes";
|
|
490
|
+
}
|
|
491
|
+
const entry = r.entry;
|
|
492
|
+
const kind = typeof entry?.type === "string" ? entry.type : "source";
|
|
493
|
+
const name = (typeof entry?.name === "string" && entry.name) ||
|
|
494
|
+
(typeof entry?.path === "string" && entry.path) ||
|
|
495
|
+
(typeof entry?.url === "string" && entry.url) ||
|
|
496
|
+
"source";
|
|
497
|
+
// A filesystem bundle reflects files already on disk — nothing to fetch,
|
|
498
|
+
// just index it. Every other declarative kind (git/website/npm) is a
|
|
499
|
+
// locator only; its content is not materialized until `akm bundle update`.
|
|
500
|
+
if (kind === "filesystem") {
|
|
501
|
+
return `Added ${name} (filesystem) — run \`akm index\` to index it.`;
|
|
502
|
+
}
|
|
503
|
+
return `Added ${name} (${kind}) — not yet synced; run \`akm bundle update ${name}\` to fetch it.`;
|
|
504
|
+
}
|
|
505
|
+
export function formatRemovePlain(r) {
|
|
506
|
+
const target = r.target ?? r.ref ?? "";
|
|
507
|
+
const ok = r.ok !== false ? "OK" : "FAILED";
|
|
508
|
+
return `remove: ${target} ${ok}`;
|
|
509
|
+
}
|
|
510
|
+
export function formatUpdatePlain(r) {
|
|
511
|
+
// R-015: `processed` alone conflated three cases into one empty array —
|
|
512
|
+
// a true no-op (--all with nothing configured), a source this call flatly
|
|
513
|
+
// never looked at (a plain source under --all), and a plain git/website
|
|
514
|
+
// source that WAS just synced successfully but has no `UpdateResultItem`
|
|
515
|
+
// shape to report (no version/lock to diff). All three rendered as the
|
|
516
|
+
// same misleading "nothing to update". `plainSynced` and `skipped` (see
|
|
517
|
+
// sources/types.ts) cover the other two so this can report accurately.
|
|
518
|
+
const processed = r.processed;
|
|
519
|
+
const plainSynced = r.plainSynced;
|
|
520
|
+
const skipped = r.skipped;
|
|
521
|
+
const lines = [];
|
|
522
|
+
for (const item of processed ?? []) {
|
|
523
|
+
const changed = item.changed;
|
|
524
|
+
const installed = item.installed;
|
|
525
|
+
const previous = item.previous;
|
|
526
|
+
if (changed?.any) {
|
|
527
|
+
const prev = previous?.resolvedVersion ?? "unknown";
|
|
528
|
+
const next = installed?.resolvedVersion ?? "unknown";
|
|
529
|
+
lines.push(`update: ${item.id} v${prev} → v${next}`);
|
|
530
|
+
}
|
|
531
|
+
else {
|
|
532
|
+
lines.push(`update: ${item.id} (unchanged)`);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
for (const item of plainSynced ?? []) {
|
|
536
|
+
lines.push(`update: ${item.id} synced (${item.kind})`);
|
|
537
|
+
}
|
|
538
|
+
for (const item of skipped ?? []) {
|
|
539
|
+
lines.push(`update: ${item.id} skipped — ${item.reason}`);
|
|
540
|
+
}
|
|
541
|
+
return lines.length > 0 ? lines.join("\n") : `update: nothing to update`;
|
|
542
|
+
}
|
|
543
|
+
export function formatUpgradePlain(r) {
|
|
544
|
+
if (r.upgraded === true) {
|
|
545
|
+
return `akm upgraded: v${r.currentVersion} → v${r.newVersion}`;
|
|
546
|
+
}
|
|
547
|
+
if (r.updateAvailable === true) {
|
|
548
|
+
return `akm v${r.currentVersion} → v${r.latestVersion} available (run 'akm upgrade' to install)`;
|
|
549
|
+
}
|
|
550
|
+
if (r.updateAvailable === false && r.latestVersion) {
|
|
551
|
+
return `akm v${r.currentVersion} is already the latest version`;
|
|
552
|
+
}
|
|
553
|
+
if (r.message)
|
|
554
|
+
return String(r.message);
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
export function formatClonePlain(r) {
|
|
558
|
+
const dst = r.destination?.path ?? "unknown";
|
|
559
|
+
const remote = r.remoteFetched ? " (fetched from remote)" : "";
|
|
560
|
+
const over = r.overwritten ? " (overwritten)" : "";
|
|
561
|
+
return `Cloned${remote} → ${dst}${over}`;
|
|
562
|
+
}
|
package/dist/output/text/env.js
CHANGED
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
// Output text formatters for `akm env *` commands.
|
|
5
|
-
import { formatEnvCreatePlain, formatEnvExportPlain, formatEnvListPlain, formatEnvRemovePlain
|
|
5
|
+
import { formatEnvCreatePlain, formatEnvExportPlain, formatEnvListPlain, formatEnvRemovePlain } from "./helpers.js";
|
|
6
6
|
export const envFormatters = [
|
|
7
7
|
{ command: "env-list", handler: (r) => formatEnvListPlain(r) },
|
|
8
8
|
{ command: "env-create", handler: (r) => formatEnvCreatePlain(r) },
|
|
9
9
|
{ command: "env-export", handler: (r) => formatEnvExportPlain(r) },
|
|
10
10
|
{ command: "env-remove", handler: (r) => formatEnvRemovePlain(r) },
|
|
11
|
-
{ command: "env-set", handler: (r) => formatEnvSetPlain(r) },
|
|
12
|
-
{ command: "env-unset", handler: (r) => formatEnvUnsetPlain(r) },
|
|
13
11
|
];
|
|
@@ -1,11 +1,12 @@
|
|
|
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
|
-
// Output text
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// Output text formatter for `akm log` (#204).
|
|
5
|
+
//
|
|
6
|
+
// R-060: renamed from `events-list` to `log-list` — see
|
|
7
|
+
// src/output/shapes/events.ts for the full rationale.
|
|
8
|
+
//
|
|
9
|
+
// 0.9.0 CLI overhaul (S3): `log tail` (and its `log-tail` formatter entry)
|
|
10
|
+
// was dropped along with the command.
|
|
7
11
|
import { formatEventsPlain } from "./helpers.js";
|
|
8
|
-
export const eventsFormatters = [
|
|
9
|
-
{ command: "events-list", handler: (r) => formatEventsPlain(r) },
|
|
10
|
-
{ command: "events-tail", handler: (r) => formatEventsPlain(r) },
|
|
11
|
-
];
|
|
12
|
+
export const eventsFormatters = [{ command: "log-list", handler: (r) => formatEventsPlain(r) }];
|