akm-cli 0.9.0-rc.8 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1063 -44
- package/README.md +51 -25
- package/SECURITY.md +14 -1
- package/STABILITY.md +497 -0
- package/dist/akm +148 -35
- package/dist/{akm-migrate-storage → akm-migrate} +6 -9
- package/dist/assets/hints/cli-hints-full.md +223 -95
- package/dist/assets/hints/cli-hints-short.md +85 -22
- package/dist/assets/improve-strategies/default.json +1 -1
- package/dist/assets/improve-strategies/reflect-distill.json +1 -1
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/stash-skeleton/README.md +6 -5
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +20 -9
- package/dist/assets/tasks/core/extract.yml +1 -1
- package/dist/assets/tasks/core/version-check.yml +1 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
- package/dist/assets/templates/html/health.html +1 -3
- package/dist/assets/workflows/workflow-template.md +32 -15
- package/dist/cli/invocation.js +40 -15
- package/dist/cli/parse-args.js +0 -22
- package/dist/cli/retired-commands.js +121 -0
- package/dist/cli/shared.js +154 -22
- package/dist/cli/unknown-flags.js +236 -0
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +696 -258
- package/dist/commands/agent/agent-dispatch.js +14 -3
- package/dist/commands/agent/contribute-cli.js +73 -88
- package/dist/commands/completions.js +79 -22
- package/dist/commands/config-cli.js +17 -150
- package/dist/commands/env/env-cli.js +59 -143
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +36 -66
- package/dist/commands/env/secret.js +24 -57
- package/dist/commands/feedback-cli.js +141 -87
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +3 -4
- package/dist/commands/health/checks.js +85 -23
- package/dist/commands/health/html-report.js +7 -10
- package/dist/commands/health/improve-metrics.js +25 -83
- package/dist/commands/health/md-report.js +5 -9
- package/dist/commands/health/metrics.js +62 -20
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +4 -5
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +3 -48
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/commands/health/types-improve.js +7 -0
- package/dist/commands/health.js +99 -28
- package/dist/commands/improve/anti-collapse.js +2 -2
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +41 -40
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +140 -1000
- package/dist/commands/improve/distill/promote-memory.js +12 -12
- package/dist/commands/improve/distill/quality-gate.js +6 -6
- package/dist/commands/improve/distill.js +58 -69
- package/dist/commands/improve/eligibility.js +105 -57
- package/dist/commands/improve/extract-cli.js +14 -133
- package/dist/commands/improve/improve-cli.js +98 -114
- package/dist/commands/improve/improve-result-file.js +1 -28
- package/dist/commands/improve/improve-strategies.js +8 -5
- package/dist/commands/improve/improve.js +128 -91
- package/dist/commands/improve/loop-stages.js +182 -20
- package/dist/commands/improve/memory/derived-ref.js +45 -43
- package/dist/commands/improve/memory/memory-belief.js +1 -1
- package/dist/commands/improve/memory/memory-contradiction-detect.js +4 -12
- package/dist/commands/improve/memory/memory-improve.js +6 -5
- package/dist/commands/improve/outcome-loop.js +22 -65
- package/dist/commands/improve/preparation.js +114 -123
- package/dist/commands/improve/proactive-maintenance.js +2 -5
- package/dist/commands/improve/reflect.js +56 -160
- package/dist/commands/improve/salience.js +11 -122
- package/dist/commands/improve/source-identity.js +10 -38
- package/dist/commands/lint/base-linter.js +20 -124
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +249 -43
- package/dist/commands/{events.js → log.js} +33 -38
- package/dist/commands/migrate-cli.js +92 -12
- package/dist/commands/migration-tool.js +46 -0
- package/dist/commands/observability-cli.js +70 -209
- package/dist/commands/proposal/drain.js +101 -29
- package/dist/commands/proposal/proposal-cli.js +76 -48
- package/dist/commands/proposal/proposal.js +54 -18
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +23 -15
- package/dist/commands/proposal/repository.js +701 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +2 -8
- package/dist/commands/proposal/validators/proposal-validators.js +55 -7
- package/dist/commands/proposal/validators/proposals.js +4 -7
- package/dist/commands/read/curate.js +34 -53
- package/dist/commands/read/knowledge.js +150 -95
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +42 -15
- package/dist/commands/read/search-cli.js +180 -78
- package/dist/commands/read/search.js +58 -43
- package/dist/commands/read/show.js +197 -141
- package/dist/commands/registry-cli.js +12 -51
- package/dist/commands/remember.js +14 -57
- package/dist/commands/sources/add-cli.js +100 -31
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +7 -2
- package/dist/commands/sources/info.js +18 -5
- package/dist/commands/sources/init.js +12 -12
- package/dist/commands/sources/installed-stashes.js +382 -98
- package/dist/commands/sources/schema-repair.js +3 -2
- package/dist/commands/sources/self-update.js +131 -38
- package/dist/commands/sources/source-add.js +72 -17
- package/dist/commands/sources/source-clone.js +129 -45
- package/dist/commands/sources/source-manage.js +43 -23
- package/dist/commands/sources/sources-cli.js +57 -208
- package/dist/commands/sources/stash-cli.js +46 -53
- package/dist/commands/tasks/tasks-cli.js +91 -97
- package/dist/commands/tasks/tasks.js +276 -421
- package/dist/commands/workflow-cli.js +175 -450
- package/dist/core/adapter/adapters/akm-adapter.js +47 -28
- package/dist/core/adapter/adapters/akm-lint.js +42 -27
- package/dist/core/adapter/adapters/akm-metadata.js +15 -44
- package/dist/core/adapter/adapters/akm-task-adapter.js +15 -13
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +55 -71
- package/dist/core/adapter/adapters/dotenv-adapter.js +1 -1
- package/dist/core/adapter/adapters/generic-files-adapter.js +2 -0
- package/dist/core/adapter/adapters/index.js +6 -6
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +14 -8
- package/dist/core/adapter/adapters/okf-adapter.js +187 -19
- package/dist/core/adapter/adapters/shared.js +3 -19
- package/dist/core/adapter/adapters/tool-dir-shared.js +8 -3
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +1 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +6 -4
- package/dist/core/adapter/validate-context.js +214 -0
- package/dist/core/asset/akm-markdown.js +63 -0
- package/dist/core/asset/asset-placement.js +20 -6
- package/dist/core/asset/asset-ref.js +11 -9
- package/dist/core/asset/frontmatter-lint.js +30 -0
- package/dist/core/asset/frontmatter.js +37 -9
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +89 -18
- package/dist/core/asset/stash-meta.js +1 -1
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +152 -38
- package/dist/core/config/config-io.js +12 -1
- package/dist/core/config/config-schema.js +35 -8
- package/dist/core/config/config-sources.js +55 -11
- package/dist/core/config/config-walker.js +25 -9
- package/dist/core/config/config.js +9 -48
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +5 -1
- package/dist/core/config/schema/experimental.js +30 -0
- package/dist/core/config/schema/improve-processes.js +0 -6
- package/dist/core/config/schema/improve.js +21 -3
- package/dist/core/config/schema/index-config.js +8 -15
- package/dist/core/config/schema/output.js +4 -1
- package/dist/core/config/schema/setup.js +9 -18
- package/dist/core/config/schema/sources-bundles.js +49 -33
- package/dist/core/config/schema/workflow.js +3 -3
- package/dist/core/env-secret-ref.js +76 -46
- package/dist/core/errors.js +18 -12
- package/dist/core/events.js +46 -128
- package/dist/core/file-change.js +6 -5
- package/dist/core/fs-txn.js +83 -7
- package/dist/core/git-message.js +2 -2
- package/dist/core/improve-result.js +1 -100
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +2 -1
- package/dist/core/migration-operation.js +16 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/parse.js +4 -1
- package/dist/core/paths.js +17 -20
- package/dist/core/recognition-util.js +12 -14
- package/dist/core/redaction.js +34 -0
- package/dist/core/standards/resolve-standards-context.js +2 -14
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +2 -2
- package/dist/core/state/migrations.js +41 -18
- package/dist/core/state-db.js +5 -14
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +6 -4
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/type-presentation.js +3 -3
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +771 -95
- package/dist/indexer/bundle-identity-guard.js +3 -2
- package/dist/indexer/db/graph-db.js +0 -24
- package/dist/indexer/ensure-index.js +1 -0
- package/dist/indexer/graph/graph-boost.js +9 -34
- package/dist/indexer/graph/graph-extraction.js +8 -5
- package/dist/indexer/index-writer-lock.js +53 -17
- package/dist/indexer/index-written-assets.js +16 -22
- package/dist/indexer/indexer.js +497 -239
- package/dist/indexer/installations.js +14 -96
- package/dist/indexer/passes/dir-staleness.js +16 -9
- package/dist/indexer/passes/memory-inference.js +11 -9
- package/dist/indexer/passes/metadata.js +113 -47
- package/dist/indexer/scan/doc-to-entry.js +38 -1
- package/dist/indexer/scan/drain-dir.js +13 -23
- package/dist/indexer/search/db-search.js +99 -54
- package/dist/indexer/search/fts-query.js +47 -24
- package/dist/indexer/search/ranking-contributors.js +42 -20
- package/dist/indexer/search/ranking.js +18 -99
- package/dist/indexer/search/search-fields.js +7 -2
- package/dist/indexer/search/search-source.js +82 -93
- package/dist/indexer/usage/usage-events.js +0 -89
- package/dist/indexer/walk/file-context.js +2 -1
- package/dist/indexer/walk/matchers.js +30 -43
- package/dist/indexer/walk/path-resolver.js +7 -2
- package/dist/indexer/walk/walker.js +38 -12
- package/dist/integrations/agent/builders.js +0 -6
- package/dist/integrations/agent/config.js +2 -2
- package/dist/integrations/agent/detect.js +49 -19
- package/dist/integrations/agent/engine-fallback.js +76 -0
- package/dist/integrations/agent/profiles.js +14 -0
- package/dist/integrations/agent/prompts.js +12 -8
- package/dist/integrations/agent/runner-dispatch.js +4 -2
- package/dist/integrations/agent/runner.js +0 -1
- package/dist/integrations/agent/spawn.js +5 -6
- package/dist/integrations/github.js +1 -1
- package/dist/integrations/harnesses/aider/agent-builder.js +6 -4
- package/dist/integrations/harnesses/amazonq/agent-builder.js +7 -4
- package/dist/integrations/harnesses/claude/session-log.js +0 -10
- package/dist/integrations/harnesses/codex/agent-builder.js +5 -2
- package/dist/integrations/harnesses/copilot/agent-builder.js +5 -3
- package/dist/integrations/harnesses/gemini/agent-builder.js +5 -3
- package/dist/integrations/harnesses/index.js +3 -7
- package/dist/integrations/harnesses/opencode/agent-builder.js +21 -2
- package/dist/integrations/harnesses/opencode/session-log.js +0 -15
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +13 -4
- package/dist/integrations/harnesses/openhands/agent-builder.js +9 -6
- package/dist/integrations/harnesses/pi/agent-builder.js +6 -4
- package/dist/integrations/lockfile.js +101 -6
- package/dist/integrations/session-logs/index.js +3 -28
- package/dist/llm/client.js +136 -100
- package/dist/llm/embedders/remote.js +13 -5
- package/dist/llm/feature-gate.js +4 -12
- package/dist/llm/graph-extract.js +5 -11
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +5 -7
- package/dist/llm/structured-call.js +1 -1
- package/dist/llm/usage-persist.js +26 -5
- package/dist/llm/usage-telemetry.js +25 -2
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +259 -0
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +14 -36
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +56 -83
- package/dist/output/shapes/migrate.js +8 -0
- package/dist/output/shapes/passthrough.js +7 -41
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes.js +2 -9
- package/dist/output/text/{init.js → bundle-create.js} +3 -1
- package/dist/output/text/bundle-show.js +7 -0
- package/dist/output/text/command-format.js +164 -96
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/health-format.js +103 -0
- package/dist/output/text/health.js +7 -0
- package/dist/output/text/helpers.js +10 -8
- package/dist/output/text/lint-format.js +43 -0
- package/dist/output/text/{save.js → lint.js} +2 -2
- package/dist/output/text/migrate.js +88 -0
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +44 -72
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/show-directives.js +15 -7
- package/dist/output/text/status-list.js +32 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +24 -203
- package/dist/output/text/workflow.js +1 -7
- package/dist/output/text.js +16 -17
- package/dist/registry/factory.js +4 -6
- package/dist/registry/origin-resolve.js +16 -27
- package/dist/registry/providers/skills-sh.js +3 -3
- package/dist/registry/providers/static-index.js +13 -23
- package/dist/registry/resolve.js +42 -7
- package/dist/registry/semver.js +34 -84
- package/dist/runtime.js +2 -23
- package/dist/scripts/akm-migrate-node.js +60290 -0
- package/dist/scripts/akm-migrate.js +59628 -0
- package/dist/setup/detect.js +42 -15
- package/dist/setup/registry-stash-loader.js +2 -2
- package/dist/setup/setup.js +236 -136
- package/dist/setup/steps/connection.js +7 -9
- package/dist/setup/steps/platforms.js +9 -9
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +12 -13
- package/dist/setup/steps/stashdir.js +2 -3
- package/dist/setup/steps/tasks.js +237 -120
- package/dist/sources/freshness.js +1 -1
- package/dist/sources/provider-factory.js +11 -17
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +278 -34
- package/dist/sources/providers/git-provider.js +25 -23
- package/dist/sources/providers/git-stash.js +395 -106
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +7 -4
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +6 -1
- package/dist/sources/resolve.js +6 -5
- package/dist/sources/snapshot-fetchers/bluesky.js +146 -0
- package/dist/sources/snapshot-fetchers/content-extract.js +566 -0
- package/dist/sources/snapshot-fetchers/fetcher-util.js +41 -0
- package/dist/sources/snapshot-fetchers/github.js +100 -0
- package/dist/sources/snapshot-fetchers/host-guard.js +291 -0
- package/dist/sources/snapshot-fetchers/registry.js +17 -1
- package/dist/sources/snapshot-fetchers/robots.js +348 -0
- package/dist/sources/snapshot-fetchers/rss.js +282 -0
- package/dist/sources/snapshot-fetchers/secret-seam.js +42 -0
- package/dist/sources/snapshot-fetchers/website-ingest.js +566 -268
- package/dist/sources/snapshot-fetchers/x.js +910 -0
- package/dist/storage/database.js +7 -0
- package/dist/storage/engines/sqlite-migrations.js +23 -111
- package/dist/storage/managed-db.js +2 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +27 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -12
- package/dist/storage/repositories/index-connection.js +17 -6
- package/dist/storage/repositories/index-entries-repository.js +151 -240
- package/dist/storage/repositories/index-entry-mapper.js +15 -11
- package/dist/storage/repositories/index-fts-repository.js +5 -2
- package/dist/storage/repositories/index-llm-cache-repository.js +0 -1
- package/dist/storage/repositories/index-meta-repository.js +2 -3
- package/dist/storage/repositories/index-schema.js +10 -25
- package/dist/storage/repositories/index-utility-repository.js +15 -28
- package/dist/storage/repositories/index-vec-repository.js +6 -1
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +296 -59
- package/dist/storage/repositories/registry-cache.js +19 -0
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +15 -13
- package/dist/storage/repositories/workflow-runs-repository.js +52 -40
- package/dist/tasks/backends/cron.js +105 -15
- package/dist/tasks/backends/index.js +1 -1
- package/dist/tasks/backends/launchd.js +85 -38
- package/dist/tasks/backends/schtasks.js +135 -15
- package/dist/tasks/embedded.js +56 -40
- package/dist/tasks/parser.js +7 -157
- package/dist/tasks/resolve-akm-bin.js +137 -59
- package/dist/tasks/runner.js +79 -42
- package/dist/tasks/scheduler-invocation.js +220 -10
- package/dist/tasks/schema.js +24 -1
- package/dist/tasks/task-id.js +1 -3
- package/dist/tasks/validator.js +20 -6
- package/dist/workflows/authoring/authoring.js +94 -143
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/exec/frozen-judge.js +28 -2
- package/dist/workflows/exec/native-executor.js +77 -57
- package/dist/workflows/exec/param-secrets.js +9 -9
- package/dist/workflows/exec/run-workflow.js +133 -79
- package/dist/workflows/exec/step-work.js +219 -346
- package/dist/{migrate-storage-node.mjs → workflows/exec/unit-dispatch.js} +1 -5
- package/dist/workflows/ir/compile.js +141 -270
- package/dist/workflows/ir/freeze.js +40 -30
- package/dist/workflows/ir/params.js +135 -11
- package/dist/workflows/ir/plan-hash.js +1 -1
- package/dist/workflows/ir/schema.js +25 -26
- package/dist/workflows/parser.js +872 -307
- package/dist/workflows/program/expressions.js +20 -208
- package/dist/workflows/program/schema.js +7 -10
- package/dist/workflows/renderer.js +95 -68
- package/dist/workflows/resource-limits.js +2 -0
- package/dist/workflows/runtime/checkin.js +3 -3
- package/dist/workflows/runtime/plan-classifier.js +16 -75
- package/dist/workflows/runtime/runs.js +186 -127
- package/dist/workflows/runtime/unit-checkin.js +1 -1
- package/dist/workflows/runtime/unit-phases.js +2 -2
- package/dist/workflows/runtime/workflow-asset-loader.js +232 -83
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +30 -36
- package/dist/workflows/validator.js +21 -62
- package/docs/README.md +68 -0
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.7.0.md +11 -11
- package/docs/migration/release-notes/0.9.0.md +208 -27
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +564 -208
- package/docs/migration/v0.9.0-troubleshooting.md +561 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/cli.md +2253 -0
- package/docs/reference/configuration.md +358 -0
- package/docs/reference/data-and-telemetry.md +105 -42
- package/docs/reference/workflows.md +647 -0
- package/package.json +22 -11
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +81 -128
- package/schemas/akm-workflow.json +74 -73
- package/dist/assets/tasks/core/backup.yml +0 -5
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/cli/config-migrate.js +0 -1806
- package/dist/cli/config-validate.js +0 -41
- package/dist/commands/backup-cli.js +0 -56
- package/dist/commands/bundle/bundle-cli.js +0 -68
- package/dist/commands/bundle/bundle.js +0 -219
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -489
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/mv-cli.js +0 -1221
- package/dist/commands/sources/history.js +0 -201
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/core/migration-backup.js +0 -1234
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -95
- package/dist/llm/memory-infer-impl.js +0 -138
- package/dist/migrate/legacy/config-source-migration.js +0 -223
- package/dist/migrate/legacy/content-migration.js +0 -305
- package/dist/migrate/legacy/legacy-layout.js +0 -779
- package/dist/migrate/legacy/legacy-paths.js +0 -25
- package/dist/migrate/legacy/legacy-stash-json.js +0 -72
- package/dist/migrate/legacy/proposal-fs-import.js +0 -168
- package/dist/migrate/legacy/task-target-ref-migration.js +0 -272
- package/dist/migrate/legacy/three-db-cutover.js +0 -841
- package/dist/migrate/legacy/workflow-migrations-bodies.js +0 -52
- package/dist/migrate/legacy/workflow-migrations-frozen.js +0 -21
- package/dist/migrate/legacy-ref-grammar.js +0 -214
- package/dist/output/shapes/distill.js +0 -14
- package/dist/output/shapes/history.js +0 -11
- package/dist/output/text/distill.js +0 -6
- package/dist/output/text/enable-disable.js +0 -8
- package/dist/output/text/history.js +0 -6
- package/dist/registry/build-index.js +0 -382
- package/dist/schemas/akm-config.json +0 -4704
- package/dist/schemas/akm-task.json +0 -87
- package/dist/schemas/akm-workflow.json +0 -372
- package/dist/scripts/migrate-storage.js +0 -3816
- package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
- package/dist/workflows/cli.js +0 -53
- package/dist/workflows/exec/brief.js +0 -481
- package/dist/workflows/exec/report.js +0 -1460
- package/dist/workflows/exec/watch.js +0 -116
- package/dist/workflows/program/parser.js +0 -813
- package/dist/workflows/program/project.js +0 -104
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
import { renderStatusEntries } from "./status-list.js";
|
|
5
|
+
const ARTIFACT_ORDER = ["config", "state", "workflow", "index"];
|
|
6
|
+
const ARTIFACT_LABEL = {
|
|
7
|
+
config: "config.json",
|
|
8
|
+
state: "state.db",
|
|
9
|
+
workflow: "workflow.db",
|
|
10
|
+
index: "index.db",
|
|
11
|
+
};
|
|
12
|
+
/** Lower rank sorts first (worse-first) via `renderStatusEntries`. */
|
|
13
|
+
function artifactSeverity(status) {
|
|
14
|
+
switch (status) {
|
|
15
|
+
case "corrupt":
|
|
16
|
+
case "inconsistent":
|
|
17
|
+
case "newer":
|
|
18
|
+
return { rank: 0, glyph: "✗" };
|
|
19
|
+
case "old":
|
|
20
|
+
return { rank: 1, glyph: "⚠" };
|
|
21
|
+
case "missing":
|
|
22
|
+
return { rank: 2, glyph: "?" };
|
|
23
|
+
default: // "current"
|
|
24
|
+
return { rank: 3, glyph: "✓" };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function planGlyph(status) {
|
|
28
|
+
switch (status) {
|
|
29
|
+
case "current":
|
|
30
|
+
return "✓";
|
|
31
|
+
case "ready":
|
|
32
|
+
return "⚠";
|
|
33
|
+
case "not-applicable":
|
|
34
|
+
return "·";
|
|
35
|
+
default: // "blocked"
|
|
36
|
+
return "✗";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function formatMigratePlain(result) {
|
|
40
|
+
if (!result || typeof result !== "object")
|
|
41
|
+
return null;
|
|
42
|
+
const plan = result;
|
|
43
|
+
if (typeof plan.status !== "string")
|
|
44
|
+
return null;
|
|
45
|
+
const lines = [`${planGlyph(plan.status)} ${plan.status}`];
|
|
46
|
+
if (plan.message)
|
|
47
|
+
lines.push(` ${plan.message}`);
|
|
48
|
+
if (plan.activeOperation) {
|
|
49
|
+
lines.push(` in-flight ${plan.activeOperation.kind} at ${plan.activeOperation.sentinelPath}`);
|
|
50
|
+
}
|
|
51
|
+
if (plan.artifacts) {
|
|
52
|
+
const entries = ARTIFACT_ORDER.filter((name) => plan.artifacts?.[name]).map((name) => {
|
|
53
|
+
const artifact = plan.artifacts?.[name];
|
|
54
|
+
const { rank, glyph } = artifactSeverity(artifact.status);
|
|
55
|
+
const detailLines = [];
|
|
56
|
+
if (artifact.detail)
|
|
57
|
+
detailLines.push(artifact.detail);
|
|
58
|
+
if (artifact.migrationIds?.length)
|
|
59
|
+
detailLines.push(`migrations applied: ${artifact.migrationIds.length}`);
|
|
60
|
+
return { severityRank: rank, glyph, headline: `${ARTIFACT_LABEL[name]}: ${artifact.status}`, detailLines };
|
|
61
|
+
});
|
|
62
|
+
lines.push("", "artifacts:", ...renderStatusEntries(entries).map((line) => ` ${line}`));
|
|
63
|
+
}
|
|
64
|
+
if (plan.targetConfig) {
|
|
65
|
+
const target = plan.targetConfig;
|
|
66
|
+
lines.push("", `target config: ${target.status} (source: ${target.source}${target.path ? `, ${target.path}` : ""})`);
|
|
67
|
+
if (target.detail)
|
|
68
|
+
lines.push(` ${target.detail}`);
|
|
69
|
+
}
|
|
70
|
+
if (plan.generatedConfig) {
|
|
71
|
+
const generated = plan.generatedConfig;
|
|
72
|
+
lines.push("", `generated config: ${generated.status} at ${generated.path}`);
|
|
73
|
+
if (generated.droppedKeys.length > 0) {
|
|
74
|
+
lines.push(` drops (add engines/defaults yourself if needed): ${generated.droppedKeys.join(", ")}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (plan.blockers?.length) {
|
|
78
|
+
lines.push("", "blockers:", ...plan.blockers.map((blocker) => ` - ${blocker}`));
|
|
79
|
+
}
|
|
80
|
+
if (plan.backupPath) {
|
|
81
|
+
lines.push("", `backup: ${plan.backupPath}${plan.backupRunId ? ` (run ${plan.backupRunId})` : ""}`);
|
|
82
|
+
}
|
|
83
|
+
return lines.join("\n");
|
|
84
|
+
}
|
|
85
|
+
export const migrateFormatters = [
|
|
86
|
+
{ command: "migrate-status", handler: (r) => formatMigratePlain(r) },
|
|
87
|
+
{ command: "migrate-apply", handler: (r) => formatMigratePlain(r) },
|
|
88
|
+
];
|
|
@@ -1,9 +1,11 @@
|
|
|
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 formatters for `akm reflect` / `akm
|
|
4
|
+
// Output text formatters for `akm reflect` / `akm proposal new` (#226; the
|
|
5
|
+
// latter formerly the top-level `akm propose`, moved in the 0.9 CLI
|
|
6
|
+
// overhaul, S8).
|
|
5
7
|
import { formatProposalProducerPlain } from "../helpers.js";
|
|
6
8
|
export const proposalProducerFormatters = [
|
|
7
9
|
{ command: "reflect", handler: (r) => formatProposalProducerPlain("reflect", r) },
|
|
8
|
-
{ command: "
|
|
10
|
+
{ command: "proposal-new", handler: (r) => formatProposalProducerPlain("proposal new", r) },
|
|
9
11
|
];
|
|
@@ -2,16 +2,17 @@
|
|
|
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
|
-
* Plain-text renderers for `akm proposal *`
|
|
5
|
+
* Plain-text renderers for `akm proposal *` commands.
|
|
6
6
|
*
|
|
7
7
|
* Split out of `helpers.ts` (formerly 1418 lines / 59 fns) as its own
|
|
8
8
|
* sibling module: proposal listing/show share the gate-decision summary
|
|
9
|
-
* helpers
|
|
10
|
-
*
|
|
9
|
+
* helpers. (`akm distill` has no registered top-level command — its former
|
|
10
|
+
* plain-text renderer, `formatDistillPlain`, was dead code; removed per
|
|
11
|
+
* R-063/B5.)
|
|
11
12
|
*/
|
|
12
13
|
export function formatProposalProducerPlain(command, r) {
|
|
13
14
|
if (r.ok === false) {
|
|
14
|
-
const reason = String(r.reason
|
|
15
|
+
const reason = String(r.reason);
|
|
15
16
|
const error = typeof r.error === "string" ? r.error : "";
|
|
16
17
|
const lines = [`${command}: failed (${reason})`];
|
|
17
18
|
if (error)
|
|
@@ -23,16 +24,16 @@ export function formatProposalProducerPlain(command, r) {
|
|
|
23
24
|
}
|
|
24
25
|
return lines.join("\n");
|
|
25
26
|
}
|
|
26
|
-
const proposal = r.proposal
|
|
27
|
-
const id = String(proposal.id
|
|
28
|
-
const ref = String(r.ref
|
|
29
|
-
const status = String(proposal.status
|
|
27
|
+
const proposal = r.proposal;
|
|
28
|
+
const id = String(proposal.id);
|
|
29
|
+
const ref = String(r.ref);
|
|
30
|
+
const status = String(proposal.status);
|
|
30
31
|
return `${command}: queued proposal ${id} (${ref}) [${status}]`;
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
34
|
* Render a one-line gate-decision summary for the proposal list / show surfaces
|
|
34
|
-
* (#577), e.g. `gate=deferred:
|
|
35
|
-
* string
|
|
35
|
+
* (#577), e.g. `gate=deferred:max-diff-lines (210 > 200)`. Returns the empty
|
|
36
|
+
* string when no well-formed decision is present.
|
|
36
37
|
*/
|
|
37
38
|
export function formatGateDecisionSummary(raw) {
|
|
38
39
|
if (typeof raw !== "object" || raw === null)
|
|
@@ -46,48 +47,43 @@ export function formatGateDecisionSummary(raw) {
|
|
|
46
47
|
return `gate=${outcome}${reason}${cmp ? ` (${cmp})` : ""}`;
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
49
|
-
* Reconstruct the threshold comparison
|
|
50
|
-
*
|
|
51
|
-
* the empty string when the decision lacks the operands.
|
|
50
|
+
* Reconstruct the drain threshold comparison when both operands are present.
|
|
51
|
+
* Returns the empty string when the decision lacks either operand.
|
|
52
52
|
*/
|
|
53
53
|
function formatGateThresholdComparison(d) {
|
|
54
54
|
const thresholds = (typeof d.thresholds === "object" && d.thresholds !== null ? d.thresholds : {});
|
|
55
|
-
const confidence = typeof d.confidence === "number" ? d.confidence : undefined;
|
|
56
|
-
const autoAccept = typeof thresholds.autoAccept === "number" ? thresholds.autoAccept : undefined;
|
|
57
|
-
if (confidence !== undefined && autoAccept !== undefined) {
|
|
58
|
-
const op = confidence >= autoAccept ? ">=" : "<";
|
|
59
|
-
return `${confidence.toFixed(2)} ${op} ${autoAccept.toFixed(2)}`;
|
|
60
|
-
}
|
|
61
|
-
// Drain bands: when the measured value is present, render the full comparison
|
|
62
|
-
// ("210 > 200" / "1 < 5"); otherwise fall back to the bound alone (#577).
|
|
63
55
|
const measured = typeof d.measured === "number" ? d.measured : undefined;
|
|
56
|
+
if (measured === undefined)
|
|
57
|
+
return "";
|
|
64
58
|
if (typeof thresholds.maxDiffLines === "number") {
|
|
65
|
-
return measured
|
|
66
|
-
? `${measured} > ${thresholds.maxDiffLines}`
|
|
67
|
-
: `maxDiffLines=${thresholds.maxDiffLines}`;
|
|
59
|
+
return `${measured} > ${thresholds.maxDiffLines}`;
|
|
68
60
|
}
|
|
69
61
|
if (typeof thresholds.minContentLines === "number") {
|
|
70
|
-
return measured
|
|
71
|
-
? `${measured} < ${thresholds.minContentLines}`
|
|
72
|
-
: `minContentLines=${thresholds.minContentLines}`;
|
|
62
|
+
return `${measured} < ${thresholds.minContentLines}`;
|
|
73
63
|
}
|
|
74
64
|
return "";
|
|
75
65
|
}
|
|
76
66
|
export function formatProposalListPlain(r) {
|
|
77
|
-
const proposals =
|
|
78
|
-
const total =
|
|
67
|
+
const proposals = r.proposals;
|
|
68
|
+
const total = r.totalCount;
|
|
79
69
|
if (proposals.length === 0) {
|
|
80
|
-
|
|
70
|
+
// NEW-1: `akm reflect` and `akm distill` are internal improve-pipeline
|
|
71
|
+
// process names (src/commands/improve/{reflect,distill}.ts), not
|
|
72
|
+
// registered top-level commands (see the subCommands map in src/cli.ts) —
|
|
73
|
+
// an agent following this hint would run a command that does not exist.
|
|
74
|
+
// The real ways to queue a proposal are `akm improve <ref>` (which runs
|
|
75
|
+
// the reflect/distill/consolidate pipeline internally) and
|
|
76
|
+
// `akm proposal new`.
|
|
77
|
+
return `${total} proposal(s).\nNo proposals.\nGenerate one with \`akm improve <ref>\` or \`akm proposal new <type> <name> --task ...\`.`;
|
|
81
78
|
}
|
|
82
79
|
const lines = [`${total} proposal(s)`, ""];
|
|
83
80
|
for (const p of proposals) {
|
|
84
|
-
const id = String(p.id
|
|
85
|
-
const ref = String(p.ref
|
|
86
|
-
const status = String(p.status
|
|
87
|
-
const source = String(p.source
|
|
88
|
-
const created = String(p.createdAt
|
|
89
|
-
// #577: surface the gate verdict inline so the queue explains itself
|
|
90
|
-
// ("deferred: below-threshold"). Legacy proposals carry no gateDecision.
|
|
81
|
+
const id = String(p.id);
|
|
82
|
+
const ref = String(p.ref);
|
|
83
|
+
const status = String(p.status);
|
|
84
|
+
const source = String(p.source);
|
|
85
|
+
const created = String(p.createdAt);
|
|
86
|
+
// #577: surface the gate verdict inline so the queue explains itself.
|
|
91
87
|
const gate = formatGateDecisionSummary(p.gateDecision);
|
|
92
88
|
const gateSuffix = gate ? ` ${gate}` : "";
|
|
93
89
|
lines.push(`${id} [${status}] ${ref} source=${source} ${created}${gateSuffix}`);
|
|
@@ -95,12 +91,12 @@ export function formatProposalListPlain(r) {
|
|
|
95
91
|
return lines.join("\n").trimEnd();
|
|
96
92
|
}
|
|
97
93
|
export function formatProposalShowPlain(r) {
|
|
98
|
-
const p = r.proposal
|
|
94
|
+
const p = r.proposal;
|
|
99
95
|
const lines = [];
|
|
100
|
-
lines.push(`# proposal ${String(p.id
|
|
101
|
-
lines.push(`ref: ${String(p.ref
|
|
102
|
-
lines.push(`status: ${String(p.status
|
|
103
|
-
lines.push(`source: ${String(p.source
|
|
96
|
+
lines.push(`# proposal ${String(p.id)}`);
|
|
97
|
+
lines.push(`ref: ${String(p.ref)}`);
|
|
98
|
+
lines.push(`status: ${String(p.status)}`);
|
|
99
|
+
lines.push(`source: ${String(p.source)}`);
|
|
104
100
|
if (p.sourceRun)
|
|
105
101
|
lines.push(`sourceRun: ${String(p.sourceRun)}`);
|
|
106
102
|
if (p.createdAt)
|
|
@@ -110,12 +106,11 @@ export function formatProposalShowPlain(r) {
|
|
|
110
106
|
if (typeof p.confidence === "number")
|
|
111
107
|
lines.push(`confidence: ${p.confidence.toFixed(2)}`);
|
|
112
108
|
// #577: gate decision (auto-accepted / deferred / auto-rejected + reason +
|
|
113
|
-
// thresholds)
|
|
114
|
-
// always present and the operator never sees a silent gap.
|
|
109
|
+
// thresholds), when this proposal has passed through a gate.
|
|
115
110
|
const gate = p.gateDecision;
|
|
116
111
|
if (gate && typeof gate.outcome === "string") {
|
|
117
112
|
lines.push(`gate.decision: ${String(gate.outcome)}`);
|
|
118
|
-
lines.push(`gate.reason: ${
|
|
113
|
+
lines.push(`gate.reason: ${String(gate.reason)}`);
|
|
119
114
|
const cmp = formatGateThresholdComparison(gate);
|
|
120
115
|
if (cmp)
|
|
121
116
|
lines.push(`gate.thresholds: ${cmp}`);
|
|
@@ -124,9 +119,6 @@ export function formatProposalShowPlain(r) {
|
|
|
124
119
|
if (gate.decidedAt)
|
|
125
120
|
lines.push(`gate.decidedAt: ${String(gate.decidedAt)}`);
|
|
126
121
|
}
|
|
127
|
-
else {
|
|
128
|
-
lines.push("gate.decision: unknown");
|
|
129
|
-
}
|
|
130
122
|
const review = p.review;
|
|
131
123
|
if (review) {
|
|
132
124
|
lines.push(`review.outcome: ${String(review.outcome ?? "?")}`);
|
|
@@ -171,11 +163,11 @@ export function formatProposalShowPlain(r) {
|
|
|
171
163
|
return lines.join("\n").trimEnd();
|
|
172
164
|
}
|
|
173
165
|
export function formatProposalAcceptPlain(r) {
|
|
174
|
-
return `Accepted proposal ${String(r.id
|
|
166
|
+
return `Accepted proposal ${String(r.id)} → ${String(r.ref)} at ${String(r.assetPath)}`;
|
|
175
167
|
}
|
|
176
168
|
export function formatProposalRejectPlain(r) {
|
|
177
169
|
const reason = r.reason ? ` (${String(r.reason)})` : "";
|
|
178
|
-
return `Rejected proposal ${String(r.id
|
|
170
|
+
return `Rejected proposal ${String(r.id)} (${String(r.ref)})${reason}`;
|
|
179
171
|
}
|
|
180
172
|
export function formatProposalDrainPlain(r) {
|
|
181
173
|
const policy = String(r.policy ?? "?");
|
|
@@ -199,30 +191,10 @@ export function formatProposalDrainPlain(r) {
|
|
|
199
191
|
}
|
|
200
192
|
return lines.join("\n").trimEnd();
|
|
201
193
|
}
|
|
202
|
-
export function formatDistillPlain(r) {
|
|
203
|
-
const outcome = String(r.outcome ?? "unknown");
|
|
204
|
-
const inputRef = String(r.inputRef ?? "?");
|
|
205
|
-
const lessonRef = String(r.lessonRef ?? "?");
|
|
206
|
-
if (outcome === "queued") {
|
|
207
|
-
const id = String(r.proposalId ?? "?");
|
|
208
|
-
return `Distilled ${inputRef} → proposal ${id} (${lessonRef}). Run \`akm proposal show ${id}\` to review.`;
|
|
209
|
-
}
|
|
210
|
-
if (outcome === "validation_failed") {
|
|
211
|
-
const findings = Array.isArray(r.findings) ? r.findings : [];
|
|
212
|
-
const lines = [`Distillation produced an invalid lesson for ${inputRef}; no proposal queued.`];
|
|
213
|
-
for (const f of findings) {
|
|
214
|
-
lines.push(` - ${String(f.message ?? f.kind ?? "validation finding")}`);
|
|
215
|
-
}
|
|
216
|
-
return lines.join("\n");
|
|
217
|
-
}
|
|
218
|
-
// skipped
|
|
219
|
-
const message = typeof r.message === "string" ? r.message : "feature disabled or LLM unavailable";
|
|
220
|
-
return `Distill skipped for ${inputRef}: ${message}`;
|
|
221
|
-
}
|
|
222
194
|
export function formatProposalDiffPlain(r) {
|
|
223
195
|
const header = r.isNew
|
|
224
|
-
? `# proposal ${String(r.id
|
|
225
|
-
: `# proposal ${String(r.id
|
|
196
|
+
? `# proposal ${String(r.id)} (new asset: ${String(r.ref)})`
|
|
197
|
+
: `# proposal ${String(r.id)} (update: ${String(r.ref)})`;
|
|
226
198
|
const unified = typeof r.unified === "string" ? r.unified : "";
|
|
227
199
|
if (!unified)
|
|
228
200
|
return `${header}\n(no changes)`;
|
|
@@ -2,11 +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 registry *` commands.
|
|
5
|
-
import { formatRegistryAddPlain,
|
|
5
|
+
import { formatRegistryAddPlain, formatRegistryListPlain, formatRegistryRemovePlain, formatRegistrySearchPlain, } from "./helpers.js";
|
|
6
6
|
export const registryCommandFormatters = [
|
|
7
7
|
{ command: "registry-list", handler: (r) => formatRegistryListPlain(r) },
|
|
8
8
|
{ command: "registry-add", handler: (r) => formatRegistryAddPlain(r) },
|
|
9
9
|
{ command: "registry-remove", handler: (r) => formatRegistryRemovePlain(r) },
|
|
10
10
|
{ command: "registry-search", handler: (r, detail) => formatRegistrySearchPlain(r, detail) },
|
|
11
|
-
{ command: "registry-build-index", handler: (r) => formatRegistryBuildIndexPlain(r) },
|
|
12
11
|
];
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* Directive strings are byte-identical to the pre-extraction version —
|
|
12
12
|
* only the seam moved.
|
|
13
13
|
*/
|
|
14
|
+
import { conceptIdFromTypeName } from "../../core/asset/resolve-ref.js";
|
|
14
15
|
/**
|
|
15
16
|
* Append the type-specific agent directive block to an in-progress
|
|
16
17
|
* `formatShowPlain` render. Mutates `lines` in place (matches the original
|
|
@@ -21,7 +22,16 @@ export function appendShowDirectives(lines, r) {
|
|
|
21
22
|
// REC-01 / REC-09: Append a type-specific directive so agents apply the
|
|
22
23
|
// content rather than substituting training-data approximations.
|
|
23
24
|
const assetType = typeof r.type === "string" ? r.type : null;
|
|
24
|
-
|
|
25
|
+
// 0.9.0 (Q-02 / R-002): the retired `type:name` colon grammar is gone —
|
|
26
|
+
// build the slash conceptId the same way the workflow branch below does
|
|
27
|
+
// (`workflows/${name}`), via the entry's own already-computed `ref` when
|
|
28
|
+
// present (it carries correct bundle-qualification), falling back to a
|
|
29
|
+
// type-derived conceptId for callers that don't set `ref`.
|
|
30
|
+
const assetRef = typeof r.ref === "string"
|
|
31
|
+
? r.ref
|
|
32
|
+
: typeof r.name === "string" && assetType
|
|
33
|
+
? conceptIdFromTypeName(assetType, r.name)
|
|
34
|
+
: null;
|
|
25
35
|
// Show-loop detection: if the agent has shown this asset 3+ times without
|
|
26
36
|
// writing anything, surface a warning so it stops cycling and acts.
|
|
27
37
|
const showLoopCount = typeof r.showLoopWarning === "number" ? r.showLoopWarning : 0;
|
|
@@ -35,9 +45,7 @@ export function appendShowDirectives(lines, r) {
|
|
|
35
45
|
if (assetType === "skill" || assetType === "knowledge") {
|
|
36
46
|
const activeRun = r.activeRun;
|
|
37
47
|
if (activeRun) {
|
|
38
|
-
|
|
39
|
-
lines.unshift(` akm workflow complete '${activeRun.runId}'${activeRun.stepId ? ` --step '${activeRun.stepId}'` : ""}`);
|
|
40
|
-
lines.unshift("Read this schema, then follow your workflow step's instructions to edit the workspace file. When done, mark the step complete:");
|
|
48
|
+
lines.unshift("Read this reference, follow the active unit's instructions, and return the result to the workflow runner. Step completion is automatic.");
|
|
41
49
|
lines.unshift(`WORKFLOW ACTIVE — schema shown as reference (run: ${activeRun.runId})`);
|
|
42
50
|
lines.unshift("---");
|
|
43
51
|
lines.unshift("");
|
|
@@ -78,14 +86,14 @@ export function appendShowDirectives(lines, r) {
|
|
|
78
86
|
const insertIdx = separatorIdx >= 0 ? separatorIdx + 1 : r.type || r.name ? 1 : 0;
|
|
79
87
|
const actionDirective = [
|
|
80
88
|
`ACTION REQUIRED: Do not execute steps manually from this output.`,
|
|
81
|
-
`Run \`akm workflow
|
|
89
|
+
`Run \`akm workflow run '${workflowRef}'\` to execute the workflow through its declared gates.`,
|
|
82
90
|
"---",
|
|
83
91
|
];
|
|
84
92
|
lines.splice(insertIdx, 0, "", ...actionDirective);
|
|
85
93
|
lines.push("");
|
|
86
94
|
lines.push("---");
|
|
87
|
-
lines.push(`NEXT STEP: Run \`akm workflow
|
|
88
|
-
lines.push("
|
|
95
|
+
lines.push(`NEXT STEP: Run \`akm workflow run '${workflowRef}'\` to execute the workflow.`);
|
|
96
|
+
lines.push("Inspect the workflow first; the runner dispatches and completes each step automatically.");
|
|
89
97
|
}
|
|
90
98
|
}
|
|
91
99
|
/**
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* Render entries worst-first (by `severityRank`, ties keep original order),
|
|
6
|
+
* each as a glyph-prefixed headline with its optional indented detail lines.
|
|
7
|
+
*/
|
|
8
|
+
export function renderStatusEntries(entries) {
|
|
9
|
+
const ordered = entries
|
|
10
|
+
.map((entry, index) => ({ entry, index }))
|
|
11
|
+
.sort((a, b) => a.entry.severityRank - b.entry.severityRank || a.index - b.index)
|
|
12
|
+
.map(({ entry }) => entry);
|
|
13
|
+
const lines = [];
|
|
14
|
+
for (const entry of ordered) {
|
|
15
|
+
lines.push(`${entry.glyph} ${entry.headline}`);
|
|
16
|
+
for (const detail of entry.detailLines ?? []) {
|
|
17
|
+
lines.push(` ${detail}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return lines;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Render a status→count map as `"2 fail, 1 warn, 5 pass"`, in `order` (worst
|
|
24
|
+
* first) with zero counts omitted. Shared by any section header that wants a
|
|
25
|
+
* one-line "what's in here" summary before the per-row detail.
|
|
26
|
+
*/
|
|
27
|
+
export function summarizeCounts(counts, order) {
|
|
28
|
+
return order
|
|
29
|
+
.filter((status) => (counts[status] ?? 0) > 0)
|
|
30
|
+
.map((status) => `${counts[status]} ${status}`)
|
|
31
|
+
.join(", ");
|
|
32
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
import { formatSyncPlain } from "./helpers.js";
|
|
5
|
+
export const syncFormatters = [{ command: "sync", handler: (r) => formatSyncPlain(r) }];
|