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
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
* the engine behind `akm proposal drain` and (later) the `triage` improve
|
|
10
10
|
* pre-pass.
|
|
11
11
|
*
|
|
12
|
-
* Design
|
|
12
|
+
* Design:
|
|
13
13
|
* - Reuses `listProposals` (no source filter — generator filtering is
|
|
14
14
|
* in-memory) and the `akmProposalAccept` / `akmProposalReject` wrappers from
|
|
15
15
|
* `proposal.ts` so the standard `promoted` / `rejected` events are emitted.
|
|
16
|
-
*
|
|
16
|
+
* Deterministic by design; only the configured drain policy decides.
|
|
17
17
|
* - Backlog-only: `excludeIds` removes this-run's fresh proposals so triage
|
|
18
|
-
* never re-adjudicates
|
|
18
|
+
* never re-adjudicates a current run's output (decision #2).
|
|
19
19
|
* - Hard guardrails enforced in code: a `maxAccepts` ceiling checked *before*
|
|
20
20
|
* the promote loop (remainder → `skippedByCap`); `maxDiffLines` defers large
|
|
21
21
|
* accepts; `applyMode: "queue"` (the safe default) never promotes (stage
|
|
@@ -31,20 +31,22 @@
|
|
|
31
31
|
* never silently looks like full success.
|
|
32
32
|
*
|
|
33
33
|
* The promote / reject functions and the runner dispatch are injectable
|
|
34
|
-
* (mirrors
|
|
35
|
-
*
|
|
34
|
+
* (mirrors reflect's dual test seams) so tests can run the full engine without
|
|
35
|
+
* touching the filesystem or spawning a process.
|
|
36
36
|
*/
|
|
37
|
+
import { createHash } from "node:crypto";
|
|
37
38
|
import fs from "node:fs";
|
|
38
39
|
import path from "node:path";
|
|
39
|
-
import {
|
|
40
|
-
import { resolveAssetPathFromName, TYPE_DIRS } from "../../core/asset/asset-spec.js";
|
|
40
|
+
import { assetPathForName, stashDirFor } from "../../core/asset/asset-placement.js";
|
|
41
41
|
import { parseFrontmatter } from "../../core/asset/frontmatter.js";
|
|
42
|
+
import { parseRefInput } from "../../core/asset/resolve-ref.js";
|
|
42
43
|
import { appendEvent } from "../../core/events.js";
|
|
44
|
+
import { escapeJsonStringControls, stripCodeFences, stripThinkBlocks } from "../../core/parse.js";
|
|
43
45
|
import { info, warn } from "../../core/warn.js";
|
|
44
46
|
import { executeRunner } from "../../integrations/agent/runner-dispatch.js";
|
|
45
|
-
import { chatCompletion
|
|
47
|
+
import { chatCompletion } from "../../llm/client.js";
|
|
46
48
|
import { akmProposalAccept, akmProposalReject } from "./proposal.js";
|
|
47
|
-
import { listProposals, recordGateDecision } from "./repository.js";
|
|
49
|
+
import { listProposals, proposalContent, recordGateDecision, } from "./repository.js";
|
|
48
50
|
// ---------------------------------------------------------------------------
|
|
49
51
|
// Content helpers
|
|
50
52
|
// ---------------------------------------------------------------------------
|
|
@@ -63,7 +65,7 @@ export function contentLineCount(content) {
|
|
|
63
65
|
}
|
|
64
66
|
/** An empty / near-empty diff has no meaningful body content. */
|
|
65
67
|
export function isEmptyDiff(proposal) {
|
|
66
|
-
const content = proposal
|
|
68
|
+
const content = proposalContent(proposal);
|
|
67
69
|
if (content.trim().length === 0)
|
|
68
70
|
return true;
|
|
69
71
|
return contentBodyLineCount(content) === 0;
|
|
@@ -73,7 +75,7 @@ export function isEmptyDiff(proposal) {
|
|
|
73
75
|
* Returns `null` when no rule applies (the proposal is left pending untouched).
|
|
74
76
|
*/
|
|
75
77
|
export function classifyProposal(proposal, policy, maxDiffLines) {
|
|
76
|
-
const content = proposal
|
|
78
|
+
const content = proposalContent(proposal);
|
|
77
79
|
// Empty / near-empty diffs reject first (the reject-empty floor).
|
|
78
80
|
if (policy.rejectEmpty && isEmptyDiff(proposal)) {
|
|
79
81
|
return { verdict: "reject", reason: "empty diff", gate: { reason: "empty-diff" } };
|
|
@@ -82,7 +84,7 @@ export function classifyProposal(proposal, policy, maxDiffLines) {
|
|
|
82
84
|
if (r.generator !== proposal.source)
|
|
83
85
|
return false;
|
|
84
86
|
if (r.requireType !== undefined) {
|
|
85
|
-
const fm = parseFrontmatter(proposal
|
|
87
|
+
const fm = parseFrontmatter(proposalContent(proposal)).data;
|
|
86
88
|
if (typeof fm.type !== "string" || fm.type !== r.requireType)
|
|
87
89
|
return false;
|
|
88
90
|
}
|
|
@@ -126,12 +128,12 @@ function deferReasonForSource(source) {
|
|
|
126
128
|
/** Read the live on-disk content of a proposal's target asset, if it exists. */
|
|
127
129
|
function readLiveAssetContent(stashDir, ref) {
|
|
128
130
|
try {
|
|
129
|
-
const parsed =
|
|
130
|
-
const typeDir =
|
|
131
|
+
const parsed = parseRefInput(ref);
|
|
132
|
+
const typeDir = stashDirFor(parsed.type);
|
|
131
133
|
if (!typeDir)
|
|
132
134
|
return undefined;
|
|
133
135
|
const typeRoot = path.join(stashDir, typeDir);
|
|
134
|
-
const assetPath =
|
|
136
|
+
const assetPath = assetPathForName(parsed.type, typeRoot, parsed.name);
|
|
135
137
|
if (!fs.existsSync(assetPath))
|
|
136
138
|
return undefined;
|
|
137
139
|
return fs.readFileSync(assetPath, "utf8");
|
|
@@ -152,7 +154,7 @@ function prefetchJudgmentContext(stashDir, proposal, pending) {
|
|
|
152
154
|
}
|
|
153
155
|
/** Build the judgment prompt with the proposed content + pre-fetched context. */
|
|
154
156
|
export function buildJudgmentPrompt(proposal, reason, ctx) {
|
|
155
|
-
const proposed = proposal
|
|
157
|
+
const proposed = proposalContent(proposal);
|
|
156
158
|
const sections = [
|
|
157
159
|
"You are adjudicating a pending knowledge-base proposal that the deterministic",
|
|
158
160
|
"triage pass could not resolve. Decide whether to accept, reject, or defer it.",
|
|
@@ -175,7 +177,7 @@ export function buildJudgmentPrompt(proposal, reason, ctx) {
|
|
|
175
177
|
if (ctx.siblings.length > 0) {
|
|
176
178
|
sections.push("", "## Other pending proposals for the same ref (dedup context)");
|
|
177
179
|
for (const sib of ctx.siblings) {
|
|
178
|
-
sections.push("", `### Sibling ${sib.id} (source: ${sib.source})`, "```", sib
|
|
180
|
+
sections.push("", `### Sibling ${sib.id} (source: ${sib.source})`, "```", proposalContent(sib), "```");
|
|
179
181
|
}
|
|
180
182
|
}
|
|
181
183
|
sections.push("", "## Your task", 'Return ONLY a JSON object: {"decision": "accept" | "reject" | "defer", "reason": "<short reason>"}.', "- accept: the proposed content is a correct, valuable update worth committing.", "- reject: the proposal is wrong, a duplicate, or contradicts the live asset.", "- defer: you cannot decide from the provided context (leave it pending).", "Output the JSON object and nothing else.");
|
|
@@ -183,7 +185,7 @@ export function buildJudgmentPrompt(proposal, reason, ctx) {
|
|
|
183
185
|
}
|
|
184
186
|
/** Parse a {@link JudgmentVerdict} from raw runner output. Lenient. */
|
|
185
187
|
export function parseJudgmentVerdict(raw) {
|
|
186
|
-
const cleaned =
|
|
188
|
+
const cleaned = escapeJsonStringControls(stripCodeFences(stripThinkBlocks(raw))).trim();
|
|
187
189
|
if (!cleaned)
|
|
188
190
|
return null;
|
|
189
191
|
// Find the first balanced-looking JSON object in the output.
|
|
@@ -240,6 +242,9 @@ async function dispatchJudgment(runner, prompt, seams) {
|
|
|
240
242
|
}
|
|
241
243
|
return parseJudgmentVerdict(result.stdout);
|
|
242
244
|
}
|
|
245
|
+
function judgedContentHash(proposal) {
|
|
246
|
+
return createHash("sha256").update(proposalContent(proposal), "utf8").digest("hex");
|
|
247
|
+
}
|
|
243
248
|
/**
|
|
244
249
|
* Run the judgment tier over the deferred items. The runner only *judges*; the
|
|
245
250
|
* engine performs the resulting accept (respecting `applyMode`) / reject write.
|
|
@@ -284,7 +289,12 @@ async function runJudgmentTier(input) {
|
|
|
284
289
|
continue;
|
|
285
290
|
}
|
|
286
291
|
try {
|
|
287
|
-
input.rejectFn({
|
|
292
|
+
await input.rejectFn({
|
|
293
|
+
stashDir: input.stashDir,
|
|
294
|
+
id: item.id,
|
|
295
|
+
reason: verdict.reason || "judgment: reject",
|
|
296
|
+
gateDecision: { outcome: "auto-rejected", reason: "judgment-reject", gate: input.gateLabel },
|
|
297
|
+
});
|
|
288
298
|
rejected.push(item.id);
|
|
289
299
|
}
|
|
290
300
|
catch (err) {
|
|
@@ -300,6 +310,21 @@ async function runJudgmentTier(input) {
|
|
|
300
310
|
// is RESOLVED (the runner judged it). Track separately so it is NOT
|
|
301
311
|
// reported as "left unresolved" and a follow-up promote run picks it up.
|
|
302
312
|
staged.push(item.id);
|
|
313
|
+
if (!input.dryRun) {
|
|
314
|
+
try {
|
|
315
|
+
recordGateDecision(input.stashDir, item.id, {
|
|
316
|
+
outcome: "staged",
|
|
317
|
+
reason: "judgment-accept",
|
|
318
|
+
contentHash: judgedContentHash(proposal),
|
|
319
|
+
gate: input.gateLabel,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
catch (err) {
|
|
323
|
+
warn(`[triage] failed to stage judgment for ${item.id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
324
|
+
staged.pop();
|
|
325
|
+
stillDeferred.push(item);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
303
328
|
continue;
|
|
304
329
|
}
|
|
305
330
|
// Accept cap: once the shared budget is exhausted, route further accepts to
|
|
@@ -314,7 +339,13 @@ async function runJudgmentTier(input) {
|
|
|
314
339
|
continue;
|
|
315
340
|
}
|
|
316
341
|
try {
|
|
317
|
-
await input.promoteFn({
|
|
342
|
+
await input.promoteFn({
|
|
343
|
+
stashDir: input.stashDir,
|
|
344
|
+
id: item.id,
|
|
345
|
+
...(input.target ? { target: input.target } : {}),
|
|
346
|
+
...(input.config ? { config: input.config } : {}),
|
|
347
|
+
gateDecision: { outcome: "auto-accepted", reason: "judgment-accept", gate: input.gateLabel },
|
|
348
|
+
});
|
|
318
349
|
promoted.push(item.id);
|
|
319
350
|
acceptBudget -= 1;
|
|
320
351
|
}
|
|
@@ -341,6 +372,7 @@ export async function drainProposals(opts, promoteFn = akmProposalAccept, reject
|
|
|
341
372
|
const pending = listProposals(opts.stashDir, { status: "pending" }).filter((p) => !exclude.has(p.id));
|
|
342
373
|
// First, classify every proposal deterministically.
|
|
343
374
|
const acceptIds = [];
|
|
375
|
+
const acceptGateReasons = new Map();
|
|
344
376
|
const rejectTargets = [];
|
|
345
377
|
const gateLabel = `triage:${opts.policy.name}`;
|
|
346
378
|
// Items deferred purely because they need a judge (no threshold-based reason)
|
|
@@ -353,22 +385,31 @@ export async function drainProposals(opts, promoteFn = akmProposalAccept, reject
|
|
|
353
385
|
// the audit trail and silently promote content the gate explicitly rejected.
|
|
354
386
|
// Such proposals remain pending until the TTL expires them — the queue is
|
|
355
387
|
// audited-autonomous; no manual-review rung exists (06-M3).
|
|
356
|
-
if (proposal.gateDecision?.outcome === "auto-rejected")
|
|
388
|
+
if (proposal.gateDecision?.outcome === "auto-rejected" && !proposal.gateDecision.gate?.startsWith("triage:")) {
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
391
|
+
if (proposal.gateDecision?.outcome === "staged" &&
|
|
392
|
+
proposal.gateDecision.gate === gateLabel &&
|
|
393
|
+
proposal.gateDecision.contentHash === judgedContentHash(proposal)) {
|
|
394
|
+
acceptIds.push(proposal.id);
|
|
395
|
+
acceptGateReasons.set(proposal.id, "judgment-accept");
|
|
357
396
|
continue;
|
|
397
|
+
}
|
|
358
398
|
const decision = classifyProposal(proposal, opts.policy, opts.maxDiffLines);
|
|
359
399
|
if (decision === null)
|
|
360
400
|
continue;
|
|
361
401
|
// #577: stamp the gate's verdict onto the proposal so `akm proposal show`
|
|
362
402
|
// can explain WHY it landed here. A dry-run performs zero writes, so it
|
|
363
403
|
// records nothing.
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
404
|
+
if (decision.verdict === "defer") {
|
|
405
|
+
stampGateDecision(opts, proposal.id, {
|
|
406
|
+
outcome: "deferred",
|
|
407
|
+
reason: decision.gate.reason,
|
|
408
|
+
...(decision.gate.measured !== undefined ? { measured: decision.gate.measured } : {}),
|
|
409
|
+
...(decision.gate.thresholds ? { thresholds: decision.gate.thresholds } : {}),
|
|
410
|
+
gate: gateLabel,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
372
413
|
// A defer with no threshold (mid-band / possible-dup from the defer list) is
|
|
373
414
|
// pending only because it needs adjudication — re-stampable to
|
|
374
415
|
// `no-judge-configured`. A band-based defer keeps its specific reason.
|
|
@@ -377,6 +418,7 @@ export async function drainProposals(opts, promoteFn = akmProposalAccept, reject
|
|
|
377
418
|
}
|
|
378
419
|
if (decision.verdict === "accept") {
|
|
379
420
|
acceptIds.push(proposal.id);
|
|
421
|
+
acceptGateReasons.set(proposal.id, "policy-accept");
|
|
380
422
|
}
|
|
381
423
|
else if (decision.verdict === "reject") {
|
|
382
424
|
rejectTargets.push({ id: proposal.id, reason: decision.reason });
|
|
@@ -392,7 +434,12 @@ export async function drainProposals(opts, promoteFn = akmProposalAccept, reject
|
|
|
392
434
|
continue;
|
|
393
435
|
}
|
|
394
436
|
try {
|
|
395
|
-
rejectFn({
|
|
437
|
+
await rejectFn({
|
|
438
|
+
stashDir: opts.stashDir,
|
|
439
|
+
id: target.id,
|
|
440
|
+
reason: target.reason,
|
|
441
|
+
gateDecision: { outcome: "auto-rejected", reason: "empty-diff", gate: gateLabel },
|
|
442
|
+
});
|
|
396
443
|
result.rejected.push(target.id);
|
|
397
444
|
}
|
|
398
445
|
catch (err) {
|
|
@@ -413,7 +460,17 @@ export async function drainProposals(opts, promoteFn = akmProposalAccept, reject
|
|
|
413
460
|
info(`[triage] auto-promote active: ${withinCap.length} accepts allowed this run`);
|
|
414
461
|
for (const id of withinCap) {
|
|
415
462
|
try {
|
|
416
|
-
await promoteFn({
|
|
463
|
+
await promoteFn({
|
|
464
|
+
stashDir: opts.stashDir,
|
|
465
|
+
id,
|
|
466
|
+
...(opts.target ? { target: opts.target } : {}),
|
|
467
|
+
...(opts.config ? { config: opts.config } : {}),
|
|
468
|
+
gateDecision: {
|
|
469
|
+
outcome: "auto-accepted",
|
|
470
|
+
reason: acceptGateReasons.get(id) ?? "policy-accept",
|
|
471
|
+
gate: gateLabel,
|
|
472
|
+
},
|
|
473
|
+
});
|
|
417
474
|
result.promoted.push(id);
|
|
418
475
|
deterministicPromoted += 1;
|
|
419
476
|
}
|
|
@@ -447,7 +504,10 @@ export async function drainProposals(opts, promoteFn = akmProposalAccept, reject
|
|
|
447
504
|
promoteFn,
|
|
448
505
|
rejectFn,
|
|
449
506
|
seams: judgmentSeams,
|
|
507
|
+
...(opts.target ? { target: opts.target } : {}),
|
|
508
|
+
...(opts.config ? { config: opts.config } : {}),
|
|
450
509
|
remainingAcceptBudget,
|
|
510
|
+
gateLabel,
|
|
451
511
|
});
|
|
452
512
|
result.promoted.push(...tier.promoted);
|
|
453
513
|
result.rejected.push(...tier.rejected);
|
|
@@ -458,15 +518,6 @@ export async function drainProposals(opts, promoteFn = akmProposalAccept, reject
|
|
|
458
518
|
if (tier.skippedByCap.length > 0) {
|
|
459
519
|
info(`[triage] accept ceiling reached in judgment tier: ${tier.skippedByCap.length} judged-accept items skipped by cap (maxAccepts=${opts.maxAccepts})`);
|
|
460
520
|
}
|
|
461
|
-
// #577: re-stamp the gate decision for items the judgment tier resolved so
|
|
462
|
-
// `akm proposal show` reflects the judge's verdict, not the earlier
|
|
463
|
-
// deterministic defer.
|
|
464
|
-
for (const id of tier.promoted) {
|
|
465
|
-
stampGateDecision(opts, id, { outcome: "auto-accepted", reason: "judgment-accept", gate: gateLabel });
|
|
466
|
-
}
|
|
467
|
-
for (const id of tier.rejected) {
|
|
468
|
-
stampGateDecision(opts, id, { outcome: "auto-rejected", reason: "judgment-reject", gate: gateLabel });
|
|
469
|
-
}
|
|
470
521
|
// Replace the deferred list with only the items the judgment tier could NOT
|
|
471
522
|
// resolve (verdict "defer", parse failure, or runner error). Staged
|
|
472
523
|
// queue-mode accepts are RESOLVED and tracked in result.staged instead.
|