akm-cli 0.9.0-rc.0 → 0.9.0-rc.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1283 -22
- package/README.md +62 -37
- package/SECURITY.md +46 -31
- package/dist/akm +162 -38
- package/dist/akm-migrate +44 -0
- package/dist/assets/backends/schtasks-template.xml +2 -1
- package/dist/assets/hints/cli-hints-full.md +268 -118
- package/dist/assets/hints/cli-hints-short.md +87 -24
- package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
- package/dist/assets/improve-strategies/frequent.json +15 -0
- package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
- package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
- package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
- package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
- package/dist/assets/improve-strategies/reflect-distill.json +30 -0
- package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
- package/dist/assets/prompts/consolidate-system.md +5 -5
- package/dist/assets/prompts/extract-session.md +2 -6
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
- package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
- package/dist/assets/prompts/reflect-output-repair.md +3 -0
- package/dist/assets/prompts/workflow-unit-preamble.md +26 -0
- package/dist/assets/stash-skeleton/README.md +38 -10
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
- package/dist/assets/tasks/core/extract.yml +3 -2
- package/dist/assets/tasks/core/improve.yml +2 -1
- package/dist/assets/tasks/core/index-refresh.yml +1 -0
- package/dist/assets/tasks/core/sync.yml +1 -0
- package/dist/assets/tasks/core/version-check.yml +2 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
- package/dist/assets/templates/html/health.html +5 -4
- package/dist/assets/workflows/workflow-template.md +31 -15
- package/dist/cli/invocation.js +279 -0
- package/dist/cli/parse-args.js +5 -90
- package/dist/cli/retired-commands.js +78 -0
- package/dist/cli/shared.js +158 -48
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +747 -293
- package/dist/commands/agent/agent-dispatch.js +19 -18
- package/dist/commands/agent/agent-support.js +0 -24
- package/dist/commands/agent/contribute-cli.js +43 -97
- package/dist/commands/completions.js +80 -23
- package/dist/commands/config-cli.js +44 -281
- package/dist/commands/env/env-binding.js +99 -0
- package/dist/commands/env/env-cli.js +84 -224
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +45 -61
- package/dist/commands/env/secret.js +32 -62
- package/dist/commands/feedback-cli.js +179 -85
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +7 -8
- package/dist/commands/health/checks.js +279 -94
- package/dist/commands/health/html-report.js +197 -578
- package/dist/commands/health/improve-metrics.js +277 -246
- package/dist/commands/health/llm-usage.js +19 -19
- package/dist/commands/health/md-report.js +16 -7
- package/dist/commands/health/metrics.js +67 -32
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +508 -0
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +16 -56
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
- package/dist/commands/health/types-improve.js +29 -0
- package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
- package/dist/commands/health/types-result.js +7 -0
- package/dist/commands/health/types-runs.js +4 -0
- package/dist/commands/health/types-session-log.js +4 -0
- package/dist/commands/health/types-windows.js +4 -0
- package/dist/commands/health/types.js +26 -21
- package/dist/commands/health/windows.js +2 -3
- package/dist/commands/health.js +296 -167
- package/dist/commands/improve/anti-collapse.js +5 -5
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +65 -52
- package/dist/commands/improve/consolidate/chunking.js +9 -7
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +454 -1354
- package/dist/commands/improve/content-hash.js +39 -0
- package/dist/commands/improve/distill/content-repair.js +4 -10
- package/dist/commands/improve/distill/promote-memory.js +89 -64
- package/dist/commands/improve/distill/quality-gate.js +118 -42
- package/dist/commands/improve/distill-guards.js +1 -1
- package/dist/commands/improve/distill-promotion-policy.js +33 -888
- package/dist/commands/improve/distill.js +607 -363
- package/dist/commands/improve/eligibility.js +165 -79
- package/dist/commands/improve/extract-cli.js +35 -126
- package/dist/commands/improve/extract-prompt.js +6 -35
- package/dist/commands/improve/extract.js +640 -391
- package/dist/commands/improve/feedback-valence.js +2 -12
- package/dist/commands/improve/improve-cli.js +134 -135
- package/dist/commands/improve/improve-result-file.js +30 -50
- package/dist/commands/improve/improve-run-types.js +4 -0
- package/dist/commands/improve/improve-strategies.js +135 -0
- package/dist/commands/improve/improve.js +904 -701
- package/dist/commands/improve/locks.js +64 -111
- package/dist/commands/improve/loop-stages.js +1110 -923
- package/dist/commands/improve/memory/derived-ref.js +124 -0
- package/dist/commands/improve/memory/memory-belief.js +79 -7
- package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
- package/dist/commands/improve/memory/memory-improve.js +25 -37
- package/dist/commands/improve/outcome-loop.js +25 -88
- package/dist/commands/improve/preparation.js +1034 -813
- package/dist/commands/improve/proactive-maintenance.js +34 -9
- package/dist/commands/improve/proposal-envelope.js +31 -0
- package/dist/commands/improve/reflect.js +983 -794
- package/dist/commands/improve/run-context.js +119 -0
- package/dist/commands/improve/salience.js +24 -127
- package/dist/commands/improve/session-asset.js +7 -3
- package/dist/commands/improve/shared.js +14 -34
- package/dist/commands/improve/source-identity.js +28 -0
- package/dist/commands/improve/triage.js +20 -17
- package/dist/commands/lint/base-linter.js +340 -313
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +185 -30
- package/dist/commands/{events.js → log.js} +28 -38
- package/dist/commands/migrate-cli.js +54 -0
- package/dist/commands/migration-tool.js +55 -0
- package/dist/commands/observability-cli.js +70 -208
- package/dist/commands/proposal/diff-format.js +50 -0
- package/dist/commands/proposal/drain-policies.js +0 -6
- package/dist/commands/proposal/drain.js +91 -40
- package/dist/commands/proposal/proposal-cli.js +134 -132
- package/dist/commands/proposal/proposal-types.js +56 -0
- package/dist/commands/proposal/proposal.js +83 -65
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +105 -88
- package/dist/commands/proposal/repository.js +1303 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
- package/dist/commands/proposal/validators/proposal-validators.js +61 -12
- package/dist/commands/proposal/validators/proposals.js +6 -8
- package/dist/commands/read/curate.js +78 -73
- package/dist/commands/read/knowledge.js +510 -13
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +84 -15
- package/dist/commands/read/search-cli.js +203 -96
- package/dist/commands/read/search.js +126 -94
- package/dist/commands/read/show.js +226 -250
- package/dist/commands/registry-cli.js +34 -60
- package/dist/commands/remember.js +18 -57
- package/dist/commands/sources/add-cli.js +104 -49
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +63 -0
- package/dist/commands/sources/info.js +27 -15
- package/dist/commands/sources/init.js +30 -40
- package/dist/commands/sources/installed-stashes.js +469 -172
- package/dist/commands/sources/migration-help.js +7 -4
- package/dist/commands/sources/schema-repair.js +10 -9
- package/dist/commands/sources/self-update.js +182 -121
- package/dist/commands/sources/source-add.js +169 -178
- package/dist/commands/sources/source-clone.js +144 -41
- package/dist/commands/sources/source-manage.js +94 -59
- package/dist/commands/sources/sources-cli.js +64 -205
- package/dist/commands/sources/stash-cli.js +91 -54
- package/dist/commands/sources/stash-skeleton.js +1 -1
- package/dist/commands/tasks/tasks-cli.js +106 -104
- package/dist/commands/tasks/tasks.js +445 -262
- package/dist/commands/workflow-cli.js +232 -121
- package/dist/core/action-contributors.js +1 -1
- package/dist/core/activation-policy.js +49 -0
- package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
- package/dist/core/adapter/adapters/akm-adapter.js +528 -0
- package/dist/core/adapter/adapters/akm-lint.js +392 -0
- package/dist/core/adapter/adapters/akm-metadata.js +387 -0
- package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
- package/dist/core/adapter/adapters/claude-adapter.js +61 -0
- package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
- package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
- package/dist/core/adapter/adapters/index.js +80 -0
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
- package/dist/core/adapter/adapters/okf-adapter.js +391 -0
- package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
- package/dist/core/adapter/adapters/shared.js +286 -0
- package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
- package/dist/core/adapter/bundle-adapter.js +4 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +44 -0
- package/dist/core/adapter/registry.js +56 -0
- package/dist/core/adapter/types.js +4 -0
- package/dist/core/asset/akm-markdown.js +30 -0
- package/dist/core/asset/asset-placement.js +243 -0
- package/dist/core/asset/asset-ref.js +110 -79
- package/dist/core/asset/asset-serialize.js +20 -0
- package/dist/core/asset/frontmatter.js +28 -12
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +274 -0
- package/dist/core/asset/stash-meta.js +2 -2
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +281 -86
- package/dist/core/config/config-io.js +42 -128
- package/dist/core/config/config-schema.js +233 -834
- package/dist/core/config/config-sources.js +162 -39
- package/dist/core/config/config-types.js +16 -11
- package/dist/core/config/config-version.js +29 -0
- package/dist/core/config/config-walker.js +126 -37
- package/dist/core/config/config.js +154 -331
- package/dist/core/config/deep-merge.js +41 -0
- package/dist/core/config/engine-semantics.js +28 -0
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +38 -0
- package/dist/core/config/schema/engines.js +116 -0
- package/dist/core/config/schema/experimental.js +47 -0
- package/dist/core/config/schema/feedback.js +31 -0
- package/dist/core/config/schema/improve-processes.js +389 -0
- package/dist/core/config/schema/improve.js +94 -0
- package/dist/core/config/schema/index-config.js +176 -0
- package/dist/core/config/schema/output.js +18 -0
- package/dist/core/config/schema/primitives.js +94 -0
- package/dist/core/config/schema/search.js +30 -0
- package/dist/core/config/schema/setup.js +18 -0
- package/dist/core/config/schema/sources-bundles.js +169 -0
- package/dist/core/config/schema/workflow.js +29 -0
- package/dist/core/env-secret-ref.js +155 -20
- package/dist/core/errors.js +17 -15
- package/dist/core/events-types.js +4 -0
- package/dist/core/events.js +46 -128
- package/dist/core/extra-params.js +62 -0
- package/dist/core/file-change.js +17 -0
- package/dist/core/file-lock.js +202 -57
- package/dist/core/fs-txn.js +392 -0
- package/dist/core/git-message.js +59 -0
- package/dist/core/improve-result.js +167 -0
- package/dist/core/json-schema.js +142 -0
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +1 -1
- package/dist/core/maintenance-barrier.js +135 -0
- package/dist/core/migration-operation.js +44 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/paths.js +22 -25
- package/dist/core/platform.js +10 -0
- package/dist/core/recognition-util.js +128 -0
- package/dist/core/redaction.js +392 -0
- package/dist/core/standards/resolve-standards-context.js +36 -65
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +5 -5
- package/dist/core/state/migrations.js +242 -11
- package/dist/core/state-db.js +98 -10
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +303 -0
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/time.js +20 -0
- package/dist/core/type-presentation.js +130 -0
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +834 -118
- package/dist/indexer/bundle-identity-guard.js +92 -0
- package/dist/indexer/db/graph-db.js +1 -25
- package/dist/indexer/db/llm-cache.js +1 -1
- package/dist/indexer/ensure-index.js +30 -9
- package/dist/indexer/graph/graph-boost.js +9 -30
- package/dist/indexer/graph/graph-extraction.js +41 -27
- package/dist/indexer/graph/graph-types.js +4 -0
- package/dist/indexer/index-writer-lock.js +93 -49
- package/dist/indexer/index-written-assets.js +100 -53
- package/dist/indexer/indexer.js +746 -329
- package/dist/indexer/init.js +18 -25
- package/dist/indexer/installations.js +142 -0
- package/dist/indexer/passes/dir-staleness.js +18 -10
- package/dist/indexer/passes/memory-inference.js +25 -15
- package/dist/indexer/passes/metadata.js +412 -243
- package/dist/indexer/scan/doc-to-entry.js +160 -0
- package/dist/indexer/scan/drain-dir.js +134 -0
- package/dist/indexer/search/db-search.js +292 -108
- package/dist/indexer/search/fts-query.js +64 -0
- package/dist/indexer/search/ranking-contributors.js +145 -25
- package/dist/indexer/search/ranking-types.js +4 -0
- package/dist/indexer/search/ranking.js +28 -71
- package/dist/indexer/search/search-attribution.js +67 -0
- package/dist/indexer/search/search-fields.js +18 -3
- package/dist/indexer/search/search-hit-enrichers.js +30 -40
- package/dist/indexer/search/search-source.js +157 -111
- package/dist/indexer/search/semantic-status.js +4 -1
- package/dist/indexer/usage/usage-events.js +10 -30
- package/dist/indexer/walk/file-context.js +3 -45
- package/dist/indexer/walk/matchers.js +42 -34
- package/dist/indexer/walk/path-resolver.js +11 -5
- package/dist/indexer/walk/walker.js +42 -14
- package/dist/integrations/agent/builder-shared.js +7 -0
- package/dist/integrations/agent/builders.js +5 -56
- package/dist/integrations/agent/config.js +3 -143
- package/dist/integrations/agent/detect.js +17 -2
- package/dist/integrations/agent/engine-resolution.js +231 -0
- package/dist/integrations/agent/index.js +1 -2
- package/dist/integrations/agent/model-aliases.js +16 -2
- package/dist/integrations/agent/profiles.js +36 -62
- package/dist/integrations/agent/prompts.js +46 -18
- package/dist/integrations/agent/runner-dispatch.js +93 -4
- package/dist/integrations/agent/runner.js +76 -208
- package/dist/integrations/agent/spawn.js +88 -196
- package/dist/integrations/harnesses/aider/agent-builder.js +114 -0
- package/dist/integrations/harnesses/aider/index.js +48 -0
- package/dist/integrations/harnesses/aider/result-extractor.js +53 -0
- package/dist/integrations/harnesses/amazonq/agent-builder.js +147 -0
- package/dist/integrations/harnesses/amazonq/index.js +45 -0
- package/dist/integrations/harnesses/amazonq/result-extractor.js +48 -0
- package/dist/integrations/harnesses/claude/agent-builder.js +46 -8
- package/dist/integrations/harnesses/claude/config-import.js +1 -3
- package/dist/integrations/harnesses/claude/index.js +24 -35
- package/dist/integrations/harnesses/claude/result-extractor.js +52 -0
- package/dist/integrations/harnesses/claude/session-log.js +27 -75
- package/dist/integrations/harnesses/codex/agent-builder.js +138 -0
- package/dist/integrations/harnesses/codex/index.js +52 -0
- package/dist/integrations/harnesses/codex/result-extractor.js +73 -0
- package/dist/integrations/harnesses/copilot/agent-builder.js +122 -0
- package/dist/integrations/harnesses/copilot/index.js +48 -0
- package/dist/integrations/harnesses/copilot/result-extractor.js +151 -0
- package/dist/integrations/harnesses/gemini/agent-builder.js +120 -0
- package/dist/integrations/harnesses/gemini/index.js +48 -0
- package/dist/integrations/harnesses/gemini/result-extractor.js +121 -0
- package/dist/integrations/harnesses/ids.js +24 -0
- package/dist/integrations/harnesses/index.js +54 -34
- package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
- package/dist/integrations/harnesses/opencode/config-import.js +1 -3
- package/dist/integrations/harnesses/opencode/index.js +14 -32
- package/dist/integrations/harnesses/opencode/session-log.js +67 -125
- package/dist/integrations/harnesses/opencode-sdk/harness.js +51 -0
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +681 -108
- package/dist/integrations/harnesses/openhands/agent-builder.js +128 -0
- package/dist/integrations/harnesses/openhands/index.js +48 -0
- package/dist/integrations/harnesses/openhands/result-extractor.js +103 -0
- package/dist/integrations/harnesses/pi/agent-builder.js +97 -0
- package/dist/integrations/harnesses/pi/index.js +45 -0
- package/dist/integrations/harnesses/pi/result-extractor.js +135 -0
- package/dist/integrations/harnesses/shared.js +17 -0
- package/dist/integrations/harnesses/types.js +43 -32
- package/dist/integrations/lockfile.js +211 -24
- package/dist/integrations/session-logs/index.js +36 -39
- package/dist/integrations/session-logs/provider-base.js +113 -0
- package/dist/llm/client.js +182 -110
- package/dist/llm/embedders/deterministic.js +2 -2
- package/dist/llm/embedders/remote.js +21 -9
- package/dist/llm/feature-gate.js +17 -57
- package/dist/llm/graph-extract.js +12 -13
- package/dist/llm/index-passes.js +8 -42
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +45 -30
- package/dist/llm/structured-call.js +16 -8
- package/dist/llm/usage-persist.js +30 -5
- package/dist/llm/usage-telemetry.js +59 -6
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/command-registry.js +27 -0
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +251 -0
- package/dist/output/html-render.js +11 -16
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +14 -279
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +58 -84
- package/dist/output/shapes/passthrough.js +11 -39
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes/registry.js +12 -6
- package/dist/output/shapes.js +0 -9
- package/dist/output/text/{init.js → bundle-create.js} +3 -1
- package/dist/output/text/bundle-show.js +7 -0
- package/dist/output/text/command-format.js +562 -0
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/helpers.js +15 -1164
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +202 -0
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/registry.js +12 -6
- package/dist/output/text/show-directives.js +117 -0
- package/dist/output/text/show-format.js +103 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +332 -0
- package/dist/output/text/workflow.js +3 -2
- package/dist/output/text.js +10 -19
- package/dist/registry/factory.js +4 -6
- package/dist/registry/origin-resolve.js +16 -27
- package/dist/registry/providers/skills-sh.js +3 -3
- package/dist/registry/providers/static-index.js +15 -25
- package/dist/registry/resolve.js +43 -94
- package/dist/registry/semver.js +43 -0
- package/dist/runtime.js +81 -12
- package/dist/scripts/akm-migrate.js +35529 -0
- package/dist/setup/detect.js +5 -7
- package/dist/setup/detected-engines.js +136 -0
- package/dist/setup/engine-config.js +100 -0
- package/dist/setup/registry-stash-loader.js +3 -3
- package/dist/setup/semantic-assets.js +12 -9
- package/dist/setup/setup.js +444 -208
- package/dist/setup/steps/connection-shared.js +120 -0
- package/dist/setup/steps/connection.js +108 -305
- package/dist/setup/steps/platforms.js +13 -12
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +21 -15
- package/dist/setup/steps/stashdir.js +6 -4
- package/dist/setup/steps/tasks.js +236 -119
- package/dist/setup/steps.js +3 -2
- package/dist/sources/freshness.js +39 -0
- package/dist/sources/provider-factory.js +11 -17
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +278 -34
- package/dist/sources/providers/git-provider.js +54 -56
- package/dist/sources/providers/git-stash.js +420 -91
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +47 -22
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +2 -2
- package/dist/sources/resolve.js +11 -10
- package/dist/sources/snapshot-fetchers/types.js +4 -0
- package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
- package/dist/storage/database.js +60 -4
- package/dist/storage/engines/sqlite-migrations.js +156 -5
- package/dist/storage/locations.js +1 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +51 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -32
- package/dist/storage/repositories/index-connection.js +79 -0
- package/dist/storage/repositories/index-db.js +4 -3
- package/dist/storage/repositories/index-entries-repository.js +863 -0
- package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
- package/dist/storage/repositories/index-entry-types.js +4 -0
- package/dist/storage/repositories/index-fts-repository.js +167 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
- package/dist/storage/repositories/index-meta-repository.js +49 -0
- package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
- package/dist/storage/repositories/index-sql.js +12 -0
- package/dist/storage/repositories/index-utility-repository.js +356 -0
- package/dist/storage/repositories/index-vec-repository.js +250 -0
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +317 -75
- package/dist/storage/repositories/registry-cache.js +1 -1
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +110 -3
- package/dist/storage/repositories/workflow-runs-repository.js +240 -19
- package/dist/tasks/backends/cron.js +169 -46
- package/dist/tasks/backends/exec-utils.js +76 -3
- package/dist/tasks/backends/index.js +6 -9
- package/dist/tasks/backends/launchd.js +292 -55
- package/dist/tasks/backends/schtasks.js +557 -70
- package/dist/tasks/backends/types.js +4 -0
- package/dist/tasks/command-executable.js +93 -0
- package/dist/tasks/embedded.js +56 -38
- package/dist/tasks/parser.js +156 -64
- package/dist/tasks/resolve-akm-bin.js +144 -51
- package/dist/tasks/runner.js +377 -209
- package/dist/tasks/schedule.js +108 -19
- package/dist/tasks/scheduler-invocation.js +296 -0
- package/dist/tasks/schema.js +1 -1
- package/dist/tasks/task-id.js +35 -0
- package/dist/tasks/validator.js +30 -16
- package/dist/text-import-hook.mjs +1 -1
- package/dist/workflows/authoring/authoring.js +104 -43
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/cli.js +0 -16
- package/dist/workflows/concurrency-policy.js +15 -0
- package/dist/workflows/exec/brief.js +450 -0
- package/dist/workflows/exec/frozen-judge.js +47 -0
- package/dist/workflows/exec/native-executor.js +1038 -0
- package/dist/workflows/exec/param-secrets.js +115 -0
- package/dist/workflows/exec/report.js +1460 -0
- package/dist/workflows/exec/run-workflow.js +602 -0
- package/dist/workflows/exec/scheduler.js +71 -0
- package/dist/workflows/exec/step-work.js +1190 -0
- package/dist/workflows/exec/unit-writer.js +23 -0
- package/dist/workflows/exec/workflow-engine-gate.js +67 -0
- package/dist/workflows/exec/worktree.js +171 -0
- package/dist/workflows/ir/compile.js +246 -0
- package/dist/workflows/ir/freeze.js +233 -0
- package/dist/workflows/ir/params.js +54 -0
- package/dist/workflows/ir/plan-hash.js +68 -0
- package/dist/workflows/ir/schema.js +540 -0
- package/dist/workflows/parser.js +878 -304
- package/dist/workflows/program/expressions.js +181 -0
- package/dist/workflows/program/schema.js +51 -0
- package/dist/workflows/renderer.js +100 -45
- package/dist/workflows/resource-limits.js +22 -0
- package/dist/workflows/runtime/agent-identity.js +59 -14
- package/dist/workflows/runtime/checkin.js +1 -1
- package/dist/workflows/runtime/plan-classifier.js +131 -0
- package/dist/workflows/runtime/runs.js +376 -119
- package/dist/workflows/runtime/unit-checkin.js +45 -0
- package/dist/workflows/runtime/unit-phases.js +20 -0
- package/dist/workflows/runtime/workflow-asset-loader.js +241 -40
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +2 -3
- package/dist/workflows/validator.js +52 -30
- package/docs/README.md +42 -78
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +9 -8
- package/docs/migration/release-notes/0.9.0.md +158 -14
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +844 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/data-and-telemetry.md +333 -0
- package/package.json +21 -17
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +4636 -0
- package/schemas/akm-task.json +87 -0
- package/schemas/akm-workflow.json +373 -0
- package/dist/akm-migrate-storage +0 -38
- package/dist/assets/help/help-accept.md +0 -12
- package/dist/assets/help/help-improve.md +0 -84
- package/dist/assets/help/help-proposals.md +0 -17
- package/dist/assets/help/help-propose.md +0 -17
- package/dist/assets/help/help-reject.md +0 -11
- package/dist/assets/profiles/frequent.json +0 -13
- package/dist/assets/profiles/recombine-only.json +0 -21
- package/dist/assets/profiles/reflect-distill.json +0 -30
- package/dist/assets/profiles/synthesize.json +0 -15
- package/dist/assets/prompts/procedural-system.md +0 -44
- package/dist/assets/prompts/recombine-system.md +0 -40
- package/dist/assets/prompts/staleness-detect-system.md +0 -6
- package/dist/assets/tasks/core/backup.yml +0 -4
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/assets/templates/html/default.html +0 -78
- package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
- package/dist/assets/wiki/index-template.md +0 -12
- package/dist/assets/wiki/ingest-workflow-template.md +0 -83
- package/dist/assets/wiki/log-template.md +0 -8
- package/dist/assets/wiki/schema-template.md +0 -61
- package/dist/cli/config-migrate.js +0 -150
- package/dist/cli/config-validate.js +0 -39
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -487
- package/dist/commands/improve/calibration.js +0 -161
- package/dist/commands/improve/dedup.js +0 -482
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/improve/hot-probation.js +0 -45
- package/dist/commands/improve/improve-auto-accept.js +0 -276
- package/dist/commands/improve/improve-profiles.js +0 -168
- package/dist/commands/improve/procedural.js +0 -398
- package/dist/commands/improve/recombine.js +0 -818
- package/dist/commands/improve/schema-similarity-gate.js +0 -168
- package/dist/commands/lint/agent-linter.js +0 -44
- package/dist/commands/lint/command-linter.js +0 -44
- package/dist/commands/lint/default-linter.js +0 -16
- package/dist/commands/lint/fact-linter.js +0 -39
- package/dist/commands/lint/knowledge-linter.js +0 -16
- package/dist/commands/lint/memory-linter.js +0 -61
- package/dist/commands/lint/registry.js +0 -41
- package/dist/commands/lint/skill-linter.js +0 -45
- package/dist/commands/lint/task-linter.js +0 -50
- package/dist/commands/lint/workflow-linter.js +0 -81
- package/dist/commands/proposal/legacy-import.js +0 -115
- package/dist/commands/sources/history.js +0 -196
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/commands/wiki-cli.js +0 -292
- package/dist/core/asset/asset-registry.js +0 -76
- package/dist/core/asset/asset-spec.js +0 -259
- package/dist/core/config/config-migration.js +0 -602
- package/dist/core/deep-merge.js +0 -38
- package/dist/core/eval/rank-metrics.js +0 -113
- package/dist/core/ripgrep/install.js +0 -163
- package/dist/core/ripgrep/resolve.js +0 -81
- package/dist/indexer/db/db.js +0 -1413
- package/dist/indexer/manifest.js +0 -170
- package/dist/indexer/passes/metadata-contributors.js +0 -31
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -49
- package/dist/llm/call-ai.js +0 -62
- package/dist/llm/memory-infer-impl.js +0 -138
- package/dist/output/shapes/distill.js +0 -14
- package/dist/output/shapes/history.js +0 -11
- package/dist/output/text/distill.js +0 -6
- package/dist/output/text/enable-disable.js +0 -8
- package/dist/output/text/history.js +0 -6
- package/dist/output/text/wiki.js +0 -16
- package/dist/registry/build-index.js +0 -386
- package/dist/scripts/migrate-storage.js +0 -19108
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -9411
- package/dist/scripts/migrations/v16-to-v17.js +0 -141
- package/dist/setup/legacy-config.js +0 -106
- package/dist/storage/repositories/consolidation-repository.js +0 -38
- package/dist/storage/repositories/recombine-repository.js +0 -213
- package/dist/wiki/wiki-templates.js +0 -15
- package/dist/wiki/wiki.js +0 -1012
- package/dist/workflows/db.js +0 -215
- package/docs/data-and-telemetry.md +0 -226
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
|
@@ -26,12 +26,6 @@
|
|
|
26
26
|
export const UTILITY_WEIGHT = 0.7;
|
|
27
27
|
/** Weight on the feedback attention term in the combined eligibility score. */
|
|
28
28
|
export const FEEDBACK_WEIGHT = 0.3;
|
|
29
|
-
/**
|
|
30
|
-
* Minimum |valence| magnitude for an item to be ROUTED to the fix / reinforce
|
|
31
|
-
* lane. Below this the feedback is too weak/mixed to be a confident signal and
|
|
32
|
-
* the item carries no attention lane (`null`). Pure magnitude in [0, 1].
|
|
33
|
-
*/
|
|
34
|
-
export const STRONG_VALENCE_THRESHOLD = 0.5;
|
|
35
29
|
/**
|
|
36
30
|
* Compute the symmetric-valence attention score for one asset's feedback.
|
|
37
31
|
*
|
|
@@ -42,13 +36,9 @@ export function computeValenceScore(counts) {
|
|
|
42
36
|
const negative = Math.max(0, counts.negative);
|
|
43
37
|
const total = positive + negative;
|
|
44
38
|
if (total === 0) {
|
|
45
|
-
return { valence: 0, magnitude: 0, attention: 0
|
|
39
|
+
return { valence: 0, magnitude: 0, attention: 0 };
|
|
46
40
|
}
|
|
47
41
|
const valence = (positive - negative) / total;
|
|
48
42
|
const magnitude = Math.abs(valence);
|
|
49
|
-
|
|
50
|
-
if (magnitude >= STRONG_VALENCE_THRESHOLD) {
|
|
51
|
-
lane = valence < 0 ? "fix" : "reinforce";
|
|
52
|
-
}
|
|
53
|
-
return { valence, magnitude, attention: magnitude, lane };
|
|
43
|
+
return { valence, magnitude, attention: magnitude };
|
|
54
44
|
}
|
|
@@ -3,116 +3,108 @@
|
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { getParsedInvocation } from "../../cli/invocation.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";
|
|
8
10
|
import { loadConfig } from "../../core/config/config.js";
|
|
9
11
|
import { UsageError } from "../../core/errors.js";
|
|
12
|
+
import { resolveMutationTarget } from "../../core/mutation-target.js";
|
|
10
13
|
import { getCacheDir } from "../../core/paths.js";
|
|
11
|
-
import {
|
|
12
|
-
import { clearLogFile, setLogFile } from "../../core/warn.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { parseFlagValue } from "../../output/context.js";
|
|
16
|
-
import { getActiveCanaries, queryRecentCycleMetrics } from "../../storage/repositories/canaries-repository.js";
|
|
17
|
-
import { refreshCanarySet } from "./collapse-detector.js";
|
|
14
|
+
import { redactSensitiveText } from "../../core/redaction.js";
|
|
15
|
+
import { clearLogFile, setLogFile, warn } from "../../core/warn.js";
|
|
16
|
+
import { resolveWriteTarget } from "../../core/write-source.js";
|
|
17
|
+
import { collectEngineCredentialValues } from "../../integrations/agent/engine-resolution.js";
|
|
18
18
|
import { akmImprove } from "./improve.js";
|
|
19
|
-
import { buildImproveRunId,
|
|
19
|
+
import { buildImproveRunId, recordImproveRunResult, recordTerminatedImproveRun, } from "./improve-result-file.js";
|
|
20
20
|
import { runImproveSession } from "./improve-session.js";
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
21
|
+
import { resolveImprovePlan } from "./improve-strategies.js";
|
|
22
|
+
let akmImproveForRun = akmImprove;
|
|
23
|
+
/** Swap the CLI's improve work implementation in deterministic subprocess tests. */
|
|
24
|
+
export function _setAkmImproveForTests(fake) {
|
|
25
|
+
akmImproveForRun = fake ?? akmImprove;
|
|
26
|
+
}
|
|
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");
|
|
71
76
|
}
|
|
72
77
|
export const improveCommand = defineCommand({
|
|
73
78
|
meta: {
|
|
74
79
|
name: "improve",
|
|
75
|
-
description: "Analyze existing AKM assets and generate improvement proposals; also consolidates memories when
|
|
80
|
+
description: "Analyze existing AKM assets and generate improvement proposals; also consolidates memories when the selected strategy enables consolidate.",
|
|
76
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.
|
|
77
85
|
args: {
|
|
86
|
+
...GLOBAL_OUTPUT_ARGS,
|
|
78
87
|
scope: {
|
|
79
88
|
type: "positional",
|
|
80
89
|
description: "Optional asset type or asset ref to improve",
|
|
81
90
|
required: false,
|
|
82
91
|
},
|
|
83
92
|
task: { type: "string", description: "Add extra guidance for this improvement pass" },
|
|
84
|
-
refresh: {
|
|
85
|
-
type: "boolean",
|
|
86
|
-
description: "(canary scope only) Mint a new collapse-detector canary set and deactivate the old one; old rows and their cycle history are retained",
|
|
87
|
-
default: false,
|
|
88
|
-
},
|
|
89
93
|
"dry-run": { type: "boolean", description: "Show planned actions without writing", default: false },
|
|
90
|
-
|
|
91
|
-
"auto-accept": {
|
|
92
|
-
type: "string",
|
|
93
|
-
description: "Auto-accept proposals at or above this confidence threshold (0-100). Default: disabled. Pass a value 0-100 to enable. 'safe' is an alias for 90. Pass 'false' to be explicit.",
|
|
94
|
-
},
|
|
94
|
+
bundle: { type: "string", description: "Override the write target for accepted proposals" },
|
|
95
95
|
limit: { type: "string", description: "Maximum number of assets to process (highest utility first)" },
|
|
96
96
|
"timeout-ms": {
|
|
97
97
|
type: "string",
|
|
98
98
|
description: "Wall-clock budget for the entire run in milliseconds (default: 7200000 = 2 hours)",
|
|
99
99
|
},
|
|
100
|
-
"consolidate-recovery": {
|
|
101
|
-
type: "string",
|
|
102
|
-
description: "How to handle stale/incomplete consolidation journals: abort (default) or clean (remove stale journal artifacts)",
|
|
103
|
-
},
|
|
104
100
|
"require-feedback-signal": {
|
|
105
101
|
type: "boolean",
|
|
106
|
-
description: "Only process assets with recent feedback signals (disables
|
|
102
|
+
description: "Only process assets with recent feedback signals (disables the proactive/high-salience fallback lanes)",
|
|
107
103
|
default: false,
|
|
108
104
|
},
|
|
109
|
-
"min-retrieval-count": {
|
|
110
|
-
type: "string",
|
|
111
|
-
description: "Minimum retrieval count for zero-feedback fallback eligibility (default: 1, set 0 to include all assets regardless of retrieval history)",
|
|
112
|
-
},
|
|
113
105
|
"json-to-stdout": {
|
|
114
106
|
type: "boolean",
|
|
115
|
-
description: "
|
|
107
|
+
description: "Also emit the full persisted run result on stdout as JSON.",
|
|
116
108
|
default: false,
|
|
117
109
|
},
|
|
118
110
|
"skip-if-locked": {
|
|
@@ -120,13 +112,13 @@ export const improveCommand = defineCommand({
|
|
|
120
112
|
description: "If another improve run already holds the lock, skip gracefully (exit 0) instead of failing with 'already running' (exit 78). Use for high-frequency scheduled runs so they don't pile up failures while a longer run is in progress.",
|
|
121
113
|
default: false,
|
|
122
114
|
},
|
|
123
|
-
|
|
115
|
+
strategy: {
|
|
124
116
|
type: "string",
|
|
125
|
-
description: "Named improve
|
|
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.",
|
|
126
118
|
},
|
|
127
119
|
sync: {
|
|
128
120
|
type: "boolean",
|
|
129
|
-
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).",
|
|
130
122
|
},
|
|
131
123
|
push: {
|
|
132
124
|
type: "boolean",
|
|
@@ -134,39 +126,37 @@ export const improveCommand = defineCommand({
|
|
|
134
126
|
},
|
|
135
127
|
},
|
|
136
128
|
async run({ args }) {
|
|
137
|
-
// "canary" is a reserved scope word (never a valid asset type, and refs
|
|
138
|
-
// contain ":"): dispatch to the detector inspection verb instead of an
|
|
139
|
-
// improve run.
|
|
140
|
-
if (args.scope === "canary") {
|
|
141
|
-
await runWithJsonErrors(() => runCanaryInspection(args.refresh));
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
129
|
await runWithJsonErrors(async () => {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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.
|
|
150
137
|
const jsonToStdout = args["json-to-stdout"];
|
|
151
|
-
const
|
|
152
|
-
const autoAccept = parseAutoAcceptFlag(autoAcceptRaw);
|
|
153
|
-
const targetArg = getStringArg(args, "target");
|
|
138
|
+
const targetArg = getStringArg(args, "bundle");
|
|
154
139
|
const taskArg = getStringArg(args, "task");
|
|
155
140
|
const dryRun = args["dry-run"];
|
|
156
141
|
const limitRaw = parsePositiveIntFlag(args.limit ?? undefined);
|
|
157
142
|
const timeoutMs = parsePositiveIntFlag(args["timeout-ms"], "--timeout-ms");
|
|
158
|
-
const consolidateRecoveryRaw = args["consolidate-recovery"];
|
|
159
|
-
const consolidateRecovery = consolidateRecoveryRaw === undefined
|
|
160
|
-
? undefined
|
|
161
|
-
: consolidateRecoveryRaw.trim().toLowerCase();
|
|
162
|
-
if (consolidateRecovery !== undefined && consolidateRecovery !== "abort" && consolidateRecovery !== "clean") {
|
|
163
|
-
throw new UsageError(`Invalid --consolidate-recovery value: "${consolidateRecoveryRaw}". Must be one of: abort, clean.`, "INVALID_FLAG_VALUE");
|
|
164
|
-
}
|
|
165
|
-
const minRetrievalCountRaw = args["min-retrieval-count"];
|
|
166
|
-
const minRetrievalCount = parseNonNegativeIntFlag(minRetrievalCountRaw, "--min-retrieval-count");
|
|
167
143
|
const requireFeedbackSignal = args["require-feedback-signal"];
|
|
168
144
|
const skipIfLocked = args["skip-if-locked"];
|
|
169
|
-
const
|
|
145
|
+
const strategyArg = getStringArg(args, "strategy");
|
|
146
|
+
const effectiveConfig = loadConfig();
|
|
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);
|
|
155
|
+
// Resolve every enabled model-backed process before logging, signal
|
|
156
|
+
// lifecycle setup, or any filesystem/database side effect.
|
|
157
|
+
const resolvedPlan = resolveImprovePlan(strategyArg, effectiveConfig);
|
|
158
|
+
const selectedStrategyName = resolvedPlan.strategy.name;
|
|
159
|
+
const sensitiveValues = collectEngineCredentialValues(effectiveConfig);
|
|
170
160
|
// Only set the keys the user actually passed (citty leaves the flag
|
|
171
161
|
// undefined unless `--sync`/`--no-sync` / `--push`/`--no-push` appears),
|
|
172
162
|
// so the resolved profile `sync` block wins by default.
|
|
@@ -177,8 +167,10 @@ export const improveCommand = defineCommand({
|
|
|
177
167
|
syncOverride.enabled = syncFlag;
|
|
178
168
|
if (pushFlag !== undefined)
|
|
179
169
|
syncOverride.push = pushFlag;
|
|
180
|
-
|
|
181
|
-
|
|
170
|
+
if (!dryRun) {
|
|
171
|
+
const improveLogFile = path.join(getCacheDir(), "logs", "improve", `${new Date().toISOString().replace(/[:.]/g, "-")}.log`);
|
|
172
|
+
setLogFile(improveLogFile);
|
|
173
|
+
}
|
|
182
174
|
const startedAtMs = Date.now();
|
|
183
175
|
const startedAtIso = new Date(startedAtMs).toISOString();
|
|
184
176
|
// Mint the run-id up front so signal handlers can persist a partial
|
|
@@ -186,14 +178,15 @@ export const improveCommand = defineCommand({
|
|
|
186
178
|
// was minted at end-of-run, so SIGTERM'd runs (cron timeout) left no
|
|
187
179
|
// row in improve_runs and effectively disappeared from `akm health`.
|
|
188
180
|
const runId = buildImproveRunId();
|
|
189
|
-
const primaryStashDir =
|
|
190
|
-
const
|
|
191
|
-
const inferredScopeMode = (scopeArg ?? "").includes(":") ? "ref" : scopeArg ? "type" : "all";
|
|
181
|
+
const primaryStashDir = writeTarget?.source.path;
|
|
182
|
+
const inferredScopeMode = scopeRef ? "ref" : scopeArg ? "type" : "all";
|
|
192
183
|
// Signal handler + exception path both flow through this helper so
|
|
193
184
|
// every abnormal termination produces a row with ok:false and a
|
|
194
185
|
// reason in metadata.terminated.
|
|
195
186
|
let runRecorded = false;
|
|
196
187
|
const persistTerminated = (reason, errorMessage) => {
|
|
188
|
+
if (dryRun)
|
|
189
|
+
return;
|
|
197
190
|
if (runRecorded)
|
|
198
191
|
return;
|
|
199
192
|
if (!primaryStashDir)
|
|
@@ -204,8 +197,9 @@ export const improveCommand = defineCommand({
|
|
|
204
197
|
scopeMode: inferredScopeMode,
|
|
205
198
|
scopeValue: scopeArg ?? null,
|
|
206
199
|
dryRun: Boolean(dryRun),
|
|
207
|
-
|
|
208
|
-
...(errorMessage ? { errorMessage } : {}),
|
|
200
|
+
strategy: selectedStrategyName,
|
|
201
|
+
...(errorMessage ? { errorMessage: redactSensitiveText(errorMessage, sensitiveValues) } : {}),
|
|
202
|
+
sensitiveValues,
|
|
209
203
|
});
|
|
210
204
|
}
|
|
211
205
|
catch (err) {
|
|
@@ -223,33 +217,33 @@ export const improveCommand = defineCommand({
|
|
|
223
217
|
let improveResult;
|
|
224
218
|
try {
|
|
225
219
|
improveResult = await runImproveSession({
|
|
226
|
-
runWork: () =>
|
|
220
|
+
runWork: () => akmImproveForRun({
|
|
227
221
|
scope: scopeArg,
|
|
228
222
|
task: taskArg,
|
|
229
223
|
dryRun,
|
|
224
|
+
resolvedPlan,
|
|
230
225
|
target: targetArg,
|
|
231
|
-
|
|
226
|
+
...(writeTarget ? { writeTarget } : {}),
|
|
232
227
|
...(runId !== undefined ? { runId } : {}),
|
|
233
228
|
...(limitRaw !== undefined ? { limit: limitRaw } : {}),
|
|
234
229
|
...(timeoutMs !== undefined ? { timeoutMs } : {}),
|
|
235
|
-
...(minRetrievalCount !== undefined ? { minRetrievalCount } : {}),
|
|
236
230
|
...(requireFeedbackSignal ? { requireFeedbackSignal } : {}),
|
|
237
231
|
...(skipIfLocked ? { skipIfLocked } : {}),
|
|
238
|
-
...(
|
|
232
|
+
...(strategyArg !== undefined ? { strategy: strategyArg } : {}),
|
|
239
233
|
...(Object.keys(syncOverride).length > 0 ? { sync: syncOverride } : {}),
|
|
240
234
|
consolidateOptions: {
|
|
241
235
|
target: targetArg,
|
|
242
236
|
dryRun,
|
|
243
|
-
autoAccept,
|
|
244
237
|
task: taskArg,
|
|
245
|
-
...(consolidateRecovery !== undefined ? { recoveryMode: consolidateRecovery } : {}),
|
|
246
238
|
},
|
|
247
239
|
}),
|
|
248
240
|
}, {
|
|
249
241
|
signalSource: process,
|
|
250
242
|
exit: process.exit,
|
|
251
243
|
onTerminate: (reason) => persistTerminated(reason),
|
|
252
|
-
ack: (message) => process.stderr.write(
|
|
244
|
+
ack: (message) => process.stderr.write(dryRun
|
|
245
|
+
? `[improve] ${message}; dry-run state was not persisted\n`
|
|
246
|
+
: `[improve] ${message}; recorded terminated run ${runId}\n`),
|
|
253
247
|
});
|
|
254
248
|
}
|
|
255
249
|
catch (err) {
|
|
@@ -263,12 +257,15 @@ export const improveCommand = defineCommand({
|
|
|
263
257
|
finally {
|
|
264
258
|
clearLogFile();
|
|
265
259
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
//
|
|
269
|
-
//
|
|
260
|
+
if (dryRun) {
|
|
261
|
+
// A dry-run never persists its result, so stdout is its only result
|
|
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`.
|
|
270
267
|
output("improve", improveResult);
|
|
271
|
-
|
|
268
|
+
return;
|
|
272
269
|
}
|
|
273
270
|
// Default mode (0.8.0+): persist the full result as a row in the
|
|
274
271
|
// `improve_runs` table of state.db (migration 003) and emit NOTHING
|
|
@@ -284,24 +281,26 @@ export const improveCommand = defineCommand({
|
|
|
284
281
|
// ORDER BY started_at DESC LIMIT 10"
|
|
285
282
|
// runId + primaryStashDir minted up-top so signal handlers can record
|
|
286
283
|
// partial runs; reuse them here for the success path.
|
|
287
|
-
const resultRef = relativeImproveResultPath(runId);
|
|
288
284
|
runRecorded = true; // Suppress any late signal-handler write — the success path owns the row now.
|
|
289
285
|
if (primaryStashDir) {
|
|
290
286
|
try {
|
|
291
|
-
|
|
287
|
+
recordImproveRunResult(primaryStashDir, runId, improveResult, startedAtIso, sensitiveValues);
|
|
292
288
|
}
|
|
293
289
|
catch (err) {
|
|
294
290
|
// Stderr warning on the failure path is preferable to crashing
|
|
295
291
|
// the run after all the work has completed.
|
|
296
|
-
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`);
|
|
297
293
|
}
|
|
298
294
|
}
|
|
299
295
|
else {
|
|
300
|
-
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`);
|
|
301
297
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
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.
|
|
305
304
|
});
|
|
306
305
|
},
|
|
307
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,8 @@
|
|
|
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
|
|
28
|
+
import { decodeImproveResult } from "../../core/improve-result.js";
|
|
29
|
+
import { redactSensitiveValue } from "../../core/redaction.js";
|
|
30
30
|
import { withStateDb } from "../../core/state-db.js";
|
|
31
31
|
import { recordImproveRun } from "../../storage/repositories/improve-runs-repository.js";
|
|
32
32
|
/**
|
|
@@ -43,45 +43,19 @@ export function buildImproveRunId(now = new Date()) {
|
|
|
43
43
|
const rand = crypto.randomBytes(4).toString("hex");
|
|
44
44
|
return `${iso}-${rand}`;
|
|
45
45
|
}
|
|
46
|
-
/**
|
|
47
|
-
* Return a stable, human-recognisable reference for a given improve run.
|
|
48
|
-
*
|
|
49
|
-
* Historical compatibility shim: callers used to receive a stash-relative
|
|
50
|
-
* file path like `.akm/runs/<runId>/improve-result.json`. With the state.db
|
|
51
|
-
* migration, no such file exists, but several callers still log "wrote to
|
|
52
|
-
* <path>" style messages. Returning a `state.db//improve_runs/<runId>`
|
|
53
|
-
* locator preserves the "the result is at <thing>" signature so existing
|
|
54
|
-
* log lines and error messages continue to make sense without rewriting
|
|
55
|
-
* every call site.
|
|
56
|
-
*/
|
|
57
|
-
export function relativeImproveResultPath(runId) {
|
|
58
|
-
return path.join("state.db", "improve_runs", runId);
|
|
59
|
-
}
|
|
60
46
|
/**
|
|
61
47
|
* Persist the full improve result into the `improve_runs` table of state.db.
|
|
62
48
|
*
|
|
63
|
-
* Backwards-compatible signature: the function name, argument list, and
|
|
64
|
-
* return type all match the pre-0.8.0 file-writing helper. The returned
|
|
65
|
-
* string is the `state.db//improve_runs/<runId>` locator (see
|
|
66
|
-
* {@link relativeImproveResultPath}), which is intended for log messages
|
|
67
|
-
* only — no caller should treat it as a filesystem path. Zero current
|
|
68
|
-
* readers existed for the previous file path, so this is a pure storage
|
|
69
|
-
* swap.
|
|
70
|
-
*
|
|
71
49
|
* The state.db row carries the scope and dry-run flag from `result.scope`
|
|
72
50
|
* and `result.dryRun`, plus the full result JSON for full fidelity. The
|
|
73
51
|
* dry-run column is indexed so productivity audits can filter cleanly
|
|
74
52
|
* (closes the dry-run/real-run artifact-trap recorded in MEMORY.md
|
|
75
53
|
* `feedback_akm_dryrun_artifact_trap`).
|
|
76
54
|
*
|
|
77
|
-
* @param profile - The `--profile` value passed to this invocation (e.g.
|
|
78
|
-
* `quick`, `reflect-distill`), or `null`/`undefined` when no profile was
|
|
79
|
-
* given. Mirrors {@link recordTerminatedImproveRun}'s `ctx.profile`
|
|
80
|
-
* convention so successful and terminated runs are equally queryable by
|
|
81
|
-
* profile. Previously hardcoded to `null` here, which meant only
|
|
82
|
-
* abnormally-terminated runs recorded their profile in state.db.
|
|
83
55
|
*/
|
|
84
|
-
export function
|
|
56
|
+
export function recordImproveRunResult(stashDir, runId, result, startedAt, sensitiveValues = []) {
|
|
57
|
+
const decoded = decodeImproveResult(result);
|
|
58
|
+
const persistedResult = redactSensitiveValue(result, sensitiveValues);
|
|
85
59
|
withStateDb((db) => {
|
|
86
60
|
const completedAt = new Date().toISOString();
|
|
87
61
|
// startedAt is the ISO timestamp captured at process launch (passed from the
|
|
@@ -95,15 +69,14 @@ export function writeImproveResultFile(stashDir, runId, result, startedAt, profi
|
|
|
95
69
|
completedAt,
|
|
96
70
|
stashDir,
|
|
97
71
|
dryRun: Boolean(result.dryRun),
|
|
98
|
-
|
|
72
|
+
strategy: redactSensitiveValue(decoded.strategy, sensitiveValues),
|
|
99
73
|
scopeMode: result.scope?.mode ?? "all",
|
|
100
|
-
scopeValue:
|
|
101
|
-
guidance:
|
|
74
|
+
scopeValue: persistedResult.scope?.value ?? null,
|
|
75
|
+
guidance: persistedResult.guidance ?? null,
|
|
102
76
|
ok: Boolean(result.ok),
|
|
103
|
-
result,
|
|
77
|
+
result: persistedResult,
|
|
104
78
|
});
|
|
105
79
|
});
|
|
106
|
-
return relativeImproveResultPath(runId);
|
|
107
80
|
}
|
|
108
81
|
/**
|
|
109
82
|
* Persist an improve_runs row for a run that did NOT complete normally.
|
|
@@ -124,37 +97,44 @@ export function writeImproveResultFile(stashDir, runId, result, startedAt, profi
|
|
|
124
97
|
*/
|
|
125
98
|
export function recordTerminatedImproveRun(stashDir, runId, startedAt, reason, ctx) {
|
|
126
99
|
const completedAt = new Date().toISOString();
|
|
127
|
-
const
|
|
128
|
-
|
|
100
|
+
const persistedReason = redactSensitiveValue(reason, ctx.sensitiveValues ?? []);
|
|
101
|
+
const persistedScopeValue = redactSensitiveValue(ctx.scopeValue, ctx.sensitiveValues ?? []);
|
|
102
|
+
const persistedStrategy = redactSensitiveValue(ctx.strategy, ctx.sensitiveValues ?? []);
|
|
103
|
+
const minimalResult = redactSensitiveValue({
|
|
104
|
+
schemaVersion: 2,
|
|
129
105
|
ok: false,
|
|
130
|
-
|
|
131
|
-
|
|
106
|
+
strategy: persistedStrategy,
|
|
107
|
+
scope: { mode: ctx.scopeMode ?? "all", ...(persistedScopeValue ? { value: persistedScopeValue } : {}) },
|
|
108
|
+
dryRun: Boolean(ctx.dryRun),
|
|
109
|
+
memorySummary: { eligible: 0, derived: 0 },
|
|
132
110
|
actions: [],
|
|
133
111
|
plannedRefs: [],
|
|
134
112
|
terminated: {
|
|
135
|
-
reason,
|
|
113
|
+
reason: persistedReason,
|
|
136
114
|
at: completedAt,
|
|
137
|
-
...(ctx
|
|
115
|
+
...(ctx.errorMessage ? { errorMessage: ctx.errorMessage } : {}),
|
|
138
116
|
},
|
|
139
|
-
};
|
|
117
|
+
}, ctx.sensitiveValues ?? []);
|
|
140
118
|
withStateDb((db) => {
|
|
141
119
|
recordImproveRun(db, {
|
|
142
120
|
id: runId,
|
|
143
121
|
startedAt,
|
|
144
122
|
completedAt,
|
|
145
123
|
stashDir,
|
|
146
|
-
dryRun: Boolean(ctx
|
|
147
|
-
|
|
148
|
-
scopeMode: ctx
|
|
149
|
-
scopeValue:
|
|
124
|
+
dryRun: Boolean(ctx.dryRun),
|
|
125
|
+
strategy: persistedStrategy,
|
|
126
|
+
scopeMode: ctx.scopeMode ?? "all",
|
|
127
|
+
scopeValue: persistedScopeValue ?? null,
|
|
150
128
|
guidance: null,
|
|
151
129
|
ok: false,
|
|
152
130
|
result: minimalResult,
|
|
153
131
|
metadata: {
|
|
154
132
|
terminated: {
|
|
155
|
-
reason,
|
|
133
|
+
reason: persistedReason,
|
|
156
134
|
at: completedAt,
|
|
157
|
-
...(ctx
|
|
135
|
+
...(ctx.errorMessage
|
|
136
|
+
? { errorMessage: redactSensitiveValue(ctx.errorMessage, ctx.sensitiveValues ?? []) }
|
|
137
|
+
: {}),
|
|
158
138
|
},
|
|
159
139
|
},
|
|
160
140
|
});
|