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
|
@@ -4,21 +4,19 @@
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
import { getParsedInvocation } from "../../cli/invocation.js";
|
|
7
|
-
import { getStringArg,
|
|
8
|
-
import { output, runWithJsonErrors } from "../../cli/shared.js";
|
|
7
|
+
import { getStringArg, parsePositiveIntFlag } from "../../cli/parse-args.js";
|
|
8
|
+
import { GLOBAL_OUTPUT_ARGS, output, runWithJsonErrors } from "../../cli/shared.js";
|
|
9
|
+
import { isFullRefInput, parseRefInput } from "../../core/asset/resolve-ref.js";
|
|
9
10
|
import { loadConfig } from "../../core/config/config.js";
|
|
10
11
|
import { UsageError } from "../../core/errors.js";
|
|
12
|
+
import { resolveMutationTarget } from "../../core/mutation-target.js";
|
|
11
13
|
import { getCacheDir } from "../../core/paths.js";
|
|
12
14
|
import { redactSensitiveText } from "../../core/redaction.js";
|
|
13
|
-
import {
|
|
14
|
-
import { clearLogFile, setLogFile } from "../../core/warn.js";
|
|
15
|
+
import { clearLogFile, setLogFile, warn } from "../../core/warn.js";
|
|
15
16
|
import { resolveWriteTarget } from "../../core/write-source.js";
|
|
16
17
|
import { collectEngineCredentialValues } from "../../integrations/agent/engine-resolution.js";
|
|
17
|
-
import { getActiveCanaries, queryRecentCycleMetrics } from "../../storage/repositories/canaries-repository.js";
|
|
18
|
-
import { closeDatabase, openExistingDatabase } from "../../storage/repositories/index-connection.js";
|
|
19
|
-
import { refreshCanarySet } from "./collapse-detector.js";
|
|
20
18
|
import { akmImprove } from "./improve.js";
|
|
21
|
-
import { buildImproveRunId,
|
|
19
|
+
import { buildImproveRunId, recordImproveRunResult, recordTerminatedImproveRun, } from "./improve-result-file.js";
|
|
22
20
|
import { runImproveSession } from "./improve-session.js";
|
|
23
21
|
import { resolveImprovePlan } from "./improve-strategies.js";
|
|
24
22
|
let akmImproveForRun = akmImprove;
|
|
@@ -26,89 +24,79 @@ let akmImproveForRun = akmImprove;
|
|
|
26
24
|
export function _setAkmImproveForTests(fake) {
|
|
27
25
|
akmImproveForRun = fake ?? akmImprove;
|
|
28
26
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
output("improve-canary", result);
|
|
27
|
+
/**
|
|
28
|
+
* Handle the `--auto-accept` flag retired in 0.9.0, returning the scope the run
|
|
29
|
+
* should actually use.
|
|
30
|
+
*
|
|
31
|
+
* citty is non-strict, so the removed flag is silently absorbed rather than
|
|
32
|
+
* rejected — which is the dangerous case. The SPACE-separated spelling
|
|
33
|
+
* (`--auto-accept 90`) leaves `90` sitting in the positional slot, where it is
|
|
34
|
+
* read as the asset-type scope: the run then matches nothing and exits 0, so a
|
|
35
|
+
* 0.8-era crontab goes dark with no error at all. Warn about the flag, and drop
|
|
36
|
+
* the poisoned positional so the run behaves as an unscoped improve instead.
|
|
37
|
+
*/
|
|
38
|
+
function resolveScopeAfterRetiredAutoAccept(scopeArg) {
|
|
39
|
+
const invocation = getParsedInvocation();
|
|
40
|
+
const autoAcceptRaw = invocation.getFlagValue("--auto-accept");
|
|
41
|
+
if (autoAcceptRaw === undefined && !invocation.hasFlag("--auto-accept"))
|
|
42
|
+
return scopeArg;
|
|
43
|
+
warn("[improve] --auto-accept was removed in 0.9 and is ignored; proposals always queue for review. " +
|
|
44
|
+
"Replacement: `akm improve && akm proposal drain --promote --yes`, or a `triage` block with " +
|
|
45
|
+
'applyMode: "promote" in your strategy. It becomes a hard error in 0.10.');
|
|
46
|
+
if (scopeArg !== undefined && scopeArg === autoAcceptRaw) {
|
|
47
|
+
warn(`[improve] ignoring "${scopeArg}" as a scope — it is the removed --auto-accept flag's value.`);
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return scopeArg;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* `akm improve canary` was removed in 0.9 (moved to
|
|
54
|
+
* `scripts/refresh-canary-set.ts`). Without this check "canary" falls through
|
|
55
|
+
* to the generic scope positional, where resolveImproveScope treats any bare
|
|
56
|
+
* word as a type filter that matches zero entries — so an unmigrated caller
|
|
57
|
+
* silently acquires the improve lock and exits 0 having done nothing, instead
|
|
58
|
+
* of getting an error.
|
|
59
|
+
*/
|
|
60
|
+
function rejectRetiredCanaryScope(scopeArg) {
|
|
61
|
+
if (scopeArg !== "canary")
|
|
62
|
+
return;
|
|
63
|
+
throw new UsageError('"akm improve canary" was removed in 0.9. Use `bun scripts/refresh-canary-set.ts [--refresh]` instead.', "INVALID_FLAG_VALUE");
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* `--target` was renamed to `--bundle` on `improve` in 0.9 (S8). citty is
|
|
67
|
+
* non-strict, so the retired spelling is silently absorbed rather than
|
|
68
|
+
* rejected — accepted proposals then write into the default bundle instead
|
|
69
|
+
* of the one the caller named, with exit 0 and no error. Reject it
|
|
70
|
+
* explicitly instead.
|
|
71
|
+
*/
|
|
72
|
+
function rejectRetiredImproveTargetFlag() {
|
|
73
|
+
if (!getParsedInvocation().hasFlag("--target"))
|
|
74
|
+
return;
|
|
75
|
+
throw new UsageError("`akm improve --target` was renamed to `--bundle` in 0.9. Use `--bundle <name>` instead.", "INVALID_FLAG_VALUE");
|
|
79
76
|
}
|
|
80
77
|
export const improveCommand = defineCommand({
|
|
81
78
|
meta: {
|
|
82
79
|
name: "improve",
|
|
83
|
-
description: "Analyze existing AKM assets and generate improvement proposals; also consolidates memories when the selected strategy enables consolidate.
|
|
80
|
+
description: "Analyze existing AKM assets and generate improvement proposals; also consolidates memories when the selected strategy enables consolidate.",
|
|
84
81
|
},
|
|
82
|
+
// Raw defineCommand, so the global output flags are declared here explicitly.
|
|
83
|
+
// Without them citty treats `--format` as a boolean and its space-separated
|
|
84
|
+
// value falls through to the `scope` positional.
|
|
85
85
|
args: {
|
|
86
|
+
...GLOBAL_OUTPUT_ARGS,
|
|
86
87
|
scope: {
|
|
87
88
|
type: "positional",
|
|
88
89
|
description: "Optional asset type or asset ref to improve",
|
|
89
90
|
required: false,
|
|
90
91
|
},
|
|
91
92
|
task: { type: "string", description: "Add extra guidance for this improvement pass" },
|
|
92
|
-
refresh: {
|
|
93
|
-
type: "boolean",
|
|
94
|
-
description: "(canary scope only) Mint a new collapse-detector canary set and deactivate the old one; old rows and their cycle history are retained",
|
|
95
|
-
default: false,
|
|
96
|
-
},
|
|
97
93
|
"dry-run": { type: "boolean", description: "Show planned actions without writing", default: false },
|
|
98
|
-
|
|
99
|
-
"auto-accept": {
|
|
100
|
-
type: "string",
|
|
101
|
-
description: "DEPRECATED and ignored (the 0.9.0 confidence gate was removed; proposals queue for review via `akm proposal` / the drain engine). Accepted for one minor so existing crontabs keep working; removed in 0.10.",
|
|
102
|
-
},
|
|
94
|
+
bundle: { type: "string", description: "Override the write target for accepted proposals" },
|
|
103
95
|
limit: { type: "string", description: "Maximum number of assets to process (highest utility first)" },
|
|
104
96
|
"timeout-ms": {
|
|
105
97
|
type: "string",
|
|
106
98
|
description: "Wall-clock budget for the entire run in milliseconds (default: 7200000 = 2 hours)",
|
|
107
99
|
},
|
|
108
|
-
"consolidate-recovery": {
|
|
109
|
-
type: "string",
|
|
110
|
-
description: "How to handle stale/incomplete consolidation journals: abort (default) or clean (remove stale journal artifacts)",
|
|
111
|
-
},
|
|
112
100
|
"require-feedback-signal": {
|
|
113
101
|
type: "boolean",
|
|
114
102
|
description: "Only process assets with recent feedback signals (disables the proactive/high-salience fallback lanes)",
|
|
@@ -116,7 +104,7 @@ export const improveCommand = defineCommand({
|
|
|
116
104
|
},
|
|
117
105
|
"json-to-stdout": {
|
|
118
106
|
type: "boolean",
|
|
119
|
-
description: "
|
|
107
|
+
description: "Also emit the full persisted run result on stdout as JSON.",
|
|
120
108
|
default: false,
|
|
121
109
|
},
|
|
122
110
|
"skip-if-locked": {
|
|
@@ -126,11 +114,11 @@ export const improveCommand = defineCommand({
|
|
|
126
114
|
},
|
|
127
115
|
strategy: {
|
|
128
116
|
type: "string",
|
|
129
|
-
description: "Named improve strategy from improve.strategies or built-in strategies (default,
|
|
117
|
+
description: "Named improve strategy from improve.strategies or built-in strategies (catchup, consolidate, default, frequent, graph-refresh, memory-focus, proactive-maintenance, quick, reflect-distill, thorough). Controls which sub-processes run and which asset types are processed.",
|
|
130
118
|
},
|
|
131
119
|
sync: {
|
|
132
120
|
type: "boolean",
|
|
133
|
-
description: "Commit (and optionally push) the git-backed primary
|
|
121
|
+
description: "Commit (and optionally push) the git-backed primary bundle when the run finishes. Use --no-sync to disable. Default: on for git-backed bundles (per profile config).",
|
|
134
122
|
},
|
|
135
123
|
push: {
|
|
136
124
|
type: "boolean",
|
|
@@ -138,39 +126,32 @@ export const improveCommand = defineCommand({
|
|
|
138
126
|
},
|
|
139
127
|
},
|
|
140
128
|
async run({ args }) {
|
|
141
|
-
// "canary" is a reserved scope word (never a valid asset type, and refs
|
|
142
|
-
// contain ":"): dispatch to the detector inspection verb instead of an
|
|
143
|
-
// improve run.
|
|
144
|
-
if (args.scope === "canary") {
|
|
145
|
-
await runWithJsonErrors(() => runCanaryInspection(args.refresh));
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
129
|
await runWithJsonErrors(async () => {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
130
|
+
rejectRetiredImproveTargetFlag();
|
|
131
|
+
// D7 — `--format` used to be rejected here outright. It is a global flag on
|
|
132
|
+
// a command that does emit an envelope through `output()` (always on
|
|
133
|
+
// `--dry-run`, otherwise with `--json-to-stdout`), so rejecting it made
|
|
134
|
+
// improve a fourth inconsistent format behaviour rather than a documented
|
|
135
|
+
// exemption. It now applies to that envelope; progress output stays on
|
|
136
|
+
// stderr regardless.
|
|
154
137
|
const jsonToStdout = args["json-to-stdout"];
|
|
155
|
-
|
|
156
|
-
parseAutoAcceptFlag(args["auto-accept"]);
|
|
157
|
-
const targetArg = getStringArg(args, "target");
|
|
138
|
+
const targetArg = getStringArg(args, "bundle");
|
|
158
139
|
const taskArg = getStringArg(args, "task");
|
|
159
140
|
const dryRun = args["dry-run"];
|
|
160
141
|
const limitRaw = parsePositiveIntFlag(args.limit ?? undefined);
|
|
161
142
|
const timeoutMs = parsePositiveIntFlag(args["timeout-ms"], "--timeout-ms");
|
|
162
|
-
const consolidateRecoveryRaw = args["consolidate-recovery"];
|
|
163
|
-
const consolidateRecovery = consolidateRecoveryRaw === undefined
|
|
164
|
-
? undefined
|
|
165
|
-
: consolidateRecoveryRaw.trim().toLowerCase();
|
|
166
|
-
if (consolidateRecovery !== undefined && consolidateRecovery !== "abort" && consolidateRecovery !== "clean") {
|
|
167
|
-
throw new UsageError(`Invalid --consolidate-recovery value: "${consolidateRecoveryRaw}". Must be one of: abort, clean.`, "INVALID_FLAG_VALUE");
|
|
168
|
-
}
|
|
169
143
|
const requireFeedbackSignal = args["require-feedback-signal"];
|
|
170
144
|
const skipIfLocked = args["skip-if-locked"];
|
|
171
145
|
const strategyArg = getStringArg(args, "strategy");
|
|
172
146
|
const effectiveConfig = loadConfig();
|
|
173
|
-
const
|
|
147
|
+
const scopeArg = resolveScopeAfterRetiredAutoAccept(getStringArg(args, "scope"));
|
|
148
|
+
rejectRetiredCanaryScope(scopeArg);
|
|
149
|
+
const scopeRef = scopeArg && isFullRefInput(scopeArg) ? parseRefInput(scopeArg) : undefined;
|
|
150
|
+
const writeTarget = dryRun
|
|
151
|
+
? undefined
|
|
152
|
+
: scopeRef
|
|
153
|
+
? resolveMutationTarget(effectiveConfig, scopeRef, targetArg).target
|
|
154
|
+
: resolveWriteTarget(effectiveConfig, targetArg);
|
|
174
155
|
// Resolve every enabled model-backed process before logging, signal
|
|
175
156
|
// lifecycle setup, or any filesystem/database side effect.
|
|
176
157
|
const resolvedPlan = resolveImprovePlan(strategyArg, effectiveConfig);
|
|
@@ -197,9 +178,8 @@ export const improveCommand = defineCommand({
|
|
|
197
178
|
// was minted at end-of-run, so SIGTERM'd runs (cron timeout) left no
|
|
198
179
|
// row in improve_runs and effectively disappeared from `akm health`.
|
|
199
180
|
const runId = buildImproveRunId();
|
|
200
|
-
const primaryStashDir = writeTarget
|
|
201
|
-
const
|
|
202
|
-
const inferredScopeMode = (scopeArg ?? "").includes(":") ? "ref" : scopeArg ? "type" : "all";
|
|
181
|
+
const primaryStashDir = writeTarget?.source.path;
|
|
182
|
+
const inferredScopeMode = scopeRef ? "ref" : scopeArg ? "type" : "all";
|
|
203
183
|
// Signal handler + exception path both flow through this helper so
|
|
204
184
|
// every abnormal termination produces a row with ok:false and a
|
|
205
185
|
// reason in metadata.terminated.
|
|
@@ -243,7 +223,7 @@ export const improveCommand = defineCommand({
|
|
|
243
223
|
dryRun,
|
|
244
224
|
resolvedPlan,
|
|
245
225
|
target: targetArg,
|
|
246
|
-
writeTarget,
|
|
226
|
+
...(writeTarget ? { writeTarget } : {}),
|
|
247
227
|
...(runId !== undefined ? { runId } : {}),
|
|
248
228
|
...(limitRaw !== undefined ? { limit: limitRaw } : {}),
|
|
249
229
|
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
@@ -255,7 +235,6 @@ export const improveCommand = defineCommand({
|
|
|
255
235
|
target: targetArg,
|
|
256
236
|
dryRun,
|
|
257
237
|
task: taskArg,
|
|
258
|
-
...(consolidateRecovery !== undefined ? { recoveryMode: consolidateRecovery } : {}),
|
|
259
238
|
},
|
|
260
239
|
}),
|
|
261
240
|
}, {
|
|
@@ -278,12 +257,15 @@ export const improveCommand = defineCommand({
|
|
|
278
257
|
finally {
|
|
279
258
|
clearLogFile();
|
|
280
259
|
}
|
|
281
|
-
|
|
282
|
-
if (dryRun || jsonToStdout) {
|
|
260
|
+
if (dryRun) {
|
|
283
261
|
// A dry-run never persists its result, so stdout is its only result
|
|
284
|
-
// channel.
|
|
262
|
+
// channel. F4: was `process.exit(0)`, which terminates synchronously
|
|
263
|
+
// and skips pending cleanup (e.g. the `finally { clearLogFile(); }`
|
|
264
|
+
// above already ran, but any citty/runWithJsonErrors-level cleanup
|
|
265
|
+
// on the way out would not). Exit code is 0 either way — `return`
|
|
266
|
+
// alone is sufficient since success is the default `process.exitCode`.
|
|
285
267
|
output("improve", improveResult);
|
|
286
|
-
|
|
268
|
+
return;
|
|
287
269
|
}
|
|
288
270
|
// Default mode (0.8.0+): persist the full result as a row in the
|
|
289
271
|
// `improve_runs` table of state.db (migration 003) and emit NOTHING
|
|
@@ -299,7 +281,6 @@ export const improveCommand = defineCommand({
|
|
|
299
281
|
// ORDER BY started_at DESC LIMIT 10"
|
|
300
282
|
// runId + primaryStashDir minted up-top so signal handlers can record
|
|
301
283
|
// partial runs; reuse them here for the success path.
|
|
302
|
-
const resultRef = improveRunLocator(runId);
|
|
303
284
|
runRecorded = true; // Suppress any late signal-handler write — the success path owns the row now.
|
|
304
285
|
if (primaryStashDir) {
|
|
305
286
|
try {
|
|
@@ -308,15 +289,18 @@ export const improveCommand = defineCommand({
|
|
|
308
289
|
catch (err) {
|
|
309
290
|
// Stderr warning on the failure path is preferable to crashing
|
|
310
291
|
// the run after all the work has completed.
|
|
311
|
-
process.stderr.write(`warning: failed to record improve run ${
|
|
292
|
+
process.stderr.write(`warning: failed to record improve run ${runId}: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
312
293
|
}
|
|
313
294
|
}
|
|
314
295
|
else {
|
|
315
|
-
process.stderr.write(`warning: no writable
|
|
296
|
+
process.stderr.write(`warning: no writable bundle directory resolved; improve result not persisted to state.db (use --json-to-stdout to capture)\n`);
|
|
316
297
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
process.exit(0)
|
|
298
|
+
if (jsonToStdout)
|
|
299
|
+
output("improve", improveResult);
|
|
300
|
+
// F4: was `process.exit(0)` — the run has already been fully recorded
|
|
301
|
+
// above (recordImproveRunResult / the warning path), so nothing here
|
|
302
|
+
// depends on an immediate synchronous exit. This is the last statement
|
|
303
|
+
// in the handler, so a plain fall-through is equivalent.
|
|
320
304
|
});
|
|
321
305
|
},
|
|
322
306
|
});
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
* `improve_runs` table of `state.db` (migration 003). Stdout is empty.
|
|
10
10
|
* The existing `[improve] ...` progress log lines on stderr remain the
|
|
11
11
|
* canonical console UX.
|
|
12
|
-
* - `--json-to-stdout`
|
|
13
|
-
* nothing written to state.db.
|
|
12
|
+
* - `--json-to-stdout` additionally emits the persisted result as JSON.
|
|
14
13
|
*
|
|
15
14
|
* v0.8.0 storage change (this module): the previous on-disk artifact at
|
|
16
15
|
* `<stash>/.akm/runs/<runId>/improve-result.json` is no longer written. The
|
|
@@ -26,7 +25,6 @@
|
|
|
26
25
|
* single-slot artefact. We mint a fresh timestamped id for each improve run.
|
|
27
26
|
*/
|
|
28
27
|
import crypto from "node:crypto";
|
|
29
|
-
import path from "node:path";
|
|
30
28
|
import { decodeImproveResult } from "../../core/improve-result.js";
|
|
31
29
|
import { redactSensitiveValue } from "../../core/redaction.js";
|
|
32
30
|
import { withStateDb } from "../../core/state-db.js";
|
|
@@ -45,32 +43,9 @@ export function buildImproveRunId(now = new Date()) {
|
|
|
45
43
|
const rand = crypto.randomBytes(4).toString("hex");
|
|
46
44
|
return `${iso}-${rand}`;
|
|
47
45
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Return a stable, human-recognisable reference for a given improve run.
|
|
50
|
-
*
|
|
51
|
-
* Historical compatibility shim: callers used to receive a stash-relative
|
|
52
|
-
* file path like `.akm/runs/<runId>/improve-result.json`. With the state.db
|
|
53
|
-
* migration, no such file exists, but several callers still log "wrote to
|
|
54
|
-
* <path>" style messages. Returning a `state.db//improve_runs/<runId>`
|
|
55
|
-
* locator preserves the "the result is at <thing>" signature so existing
|
|
56
|
-
* log lines and error messages continue to make sense without rewriting
|
|
57
|
-
* every call site.
|
|
58
|
-
*/
|
|
59
|
-
export function improveRunLocator(runId) {
|
|
60
|
-
return path.join("state.db", "improve_runs", runId);
|
|
61
|
-
}
|
|
62
46
|
/**
|
|
63
47
|
* Persist the full improve result into the `improve_runs` table of state.db.
|
|
64
48
|
*
|
|
65
|
-
* Backwards-compatible signature: the argument list and return type match the
|
|
66
|
-
* pre-0.8.0 file-writing helper (the 0.9.0 rename from `writeImproveResultFile`
|
|
67
|
-
* corrects the name, which had lied about writing a file). The returned
|
|
68
|
-
* string is the `state.db//improve_runs/<runId>` locator (see
|
|
69
|
-
* {@link improveRunLocator}), which is intended for log messages
|
|
70
|
-
* only — no caller should treat it as a filesystem path. Zero current
|
|
71
|
-
* readers existed for the previous file path, so this is a pure storage
|
|
72
|
-
* swap.
|
|
73
|
-
*
|
|
74
49
|
* The state.db row carries the scope and dry-run flag from `result.scope`
|
|
75
50
|
* and `result.dryRun`, plus the full result JSON for full fidelity. The
|
|
76
51
|
* dry-run column is indexed so productivity audits can filter cleanly
|
|
@@ -94,7 +69,6 @@ export function recordImproveRunResult(stashDir, runId, result, startedAt, sensi
|
|
|
94
69
|
completedAt,
|
|
95
70
|
stashDir,
|
|
96
71
|
dryRun: Boolean(result.dryRun),
|
|
97
|
-
legacyProfile: redactSensitiveValue(decoded.legacyProfile, sensitiveValues),
|
|
98
72
|
strategy: redactSensitiveValue(decoded.strategy, sensitiveValues),
|
|
99
73
|
scopeMode: result.scope?.mode ?? "all",
|
|
100
74
|
scopeValue: persistedResult.scope?.value ?? null,
|
|
@@ -103,7 +77,6 @@ export function recordImproveRunResult(stashDir, runId, result, startedAt, sensi
|
|
|
103
77
|
result: persistedResult,
|
|
104
78
|
});
|
|
105
79
|
});
|
|
106
|
-
return improveRunLocator(runId);
|
|
107
80
|
}
|
|
108
81
|
/**
|
|
109
82
|
* Persist an improve_runs row for a run that did NOT complete normally.
|
|
@@ -16,6 +16,7 @@ import { deepMergeConfig } from "../../core/config/deep-merge.js";
|
|
|
16
16
|
import { BUILTIN_IMPROVE_STRATEGY_NAMES, IMPROVE_PROCESS_ENGINE_CAPABILITIES, } from "../../core/config/engine-semantics.js";
|
|
17
17
|
import { ConfigError } from "../../core/errors.js";
|
|
18
18
|
import { resolveImproveProcessRunner, resolveTriageJudgmentRunner, } from "../../integrations/agent/runner.js";
|
|
19
|
+
import { applyAutonomyGate } from "./autonomy-gate.js";
|
|
19
20
|
export const DEFAULT_ALLOWED_TYPES = {
|
|
20
21
|
reflect: ["agent", "command", "knowledge", "lesson", "memory", "skill", "workflow"],
|
|
21
22
|
distill: ["memory"],
|
|
@@ -66,9 +67,6 @@ export function resolveImproveStrategy(name, config) {
|
|
|
66
67
|
const resolved = deepMergeConfig(baseStrategy, (userStrategies[selectedName] ?? {}));
|
|
67
68
|
return { name: selectedName, config: resolved };
|
|
68
69
|
}
|
|
69
|
-
export function resolveStrategyProcessEnabled(strategy, processName) {
|
|
70
|
-
return resolveProcessEnabled(processName, strategy.config);
|
|
71
|
-
}
|
|
72
70
|
function cloneAndFreeze(value) {
|
|
73
71
|
const clone = structuredClone(value);
|
|
74
72
|
const freeze = (item) => {
|
|
@@ -83,8 +81,13 @@ function cloneAndFreeze(value) {
|
|
|
83
81
|
}
|
|
84
82
|
/** Resolve every enabled process structurally before improve emits signals or performs I/O. */
|
|
85
83
|
export function resolveImprovePlan(name, config, options = {}) {
|
|
86
|
-
const
|
|
87
|
-
|
|
84
|
+
const selected = resolveImproveStrategy(name, config);
|
|
85
|
+
// D8 — gate autonomy BEFORE the plan is built, so every downstream consumer
|
|
86
|
+
// (process enablement, LLM preflight, triage judgment) sees one already-safe
|
|
87
|
+
// strategy rather than each having to re-ask whether autonomy is allowed.
|
|
88
|
+
const { config: gatedStrategyConfig, gated } = applyAutonomyGate(selected.config, config);
|
|
89
|
+
const strategy = { name: selected.name, config: gatedStrategyConfig };
|
|
90
|
+
return { ...buildImprovePlan(strategy, config, options), autonomyGated: gated };
|
|
88
91
|
}
|
|
89
92
|
function buildImprovePlan(strategy, config, options) {
|
|
90
93
|
const processes = {};
|