akm-cli 0.9.16 → 0.9.17-alpha.10
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 +2101 -0
- package/STABILITY.md +11 -10
- package/dist/akm +124 -193
- package/dist/akm-migrate +38 -19
- package/dist/assets/hints/cli-hints-full.md +6 -7
- package/dist/assets/improve-strategies/catchup.json +0 -3
- package/dist/assets/improve-strategies/consolidate.json +0 -1
- package/dist/assets/improve-strategies/default.json +1 -2
- package/dist/assets/improve-strategies/proactive-maintenance.json +1 -2
- package/dist/assets/improve-strategies/quick.json +1 -2
- package/dist/assets/improve-strategies/reflect-distill.json +1 -2
- package/dist/assets/improve-strategies/thorough.json +0 -3
- package/dist/assets/prompts/consolidate-pair.md +20 -0
- package/dist/assets/prompts/consolidate-system.md +4 -11
- package/dist/assets/prompts/retrieval-relevance-judge.md +6 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +20 -20
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -2
- package/dist/assets/templates/html/health.html +3 -5
- package/dist/cli/retired-commands.js +1 -1
- package/dist/cli/shared.js +6 -2
- package/dist/cli/unknown-flags.js +24 -1
- package/dist/cli.js +68 -10
- package/dist/commands/agent/agent-dispatch.js +1 -1
- package/dist/commands/command/command-execution.js +24 -62
- package/dist/commands/feedback-cli.js +0 -1
- package/dist/commands/health/accept-rate.js +6 -0
- package/dist/commands/health/archive-usage.js +92 -0
- package/dist/commands/health/checks.js +83 -74
- package/dist/commands/health/config-skew.js +38 -0
- package/dist/commands/health/data-dir-usage.js +25 -13
- package/dist/commands/health/egress.js +54 -0
- package/dist/commands/health/html-report.js +1 -42
- package/dist/commands/health/improve-metrics.js +136 -591
- package/dist/commands/health/md-report.js +1 -6
- package/dist/commands/health/plugin-staleness.js +53 -3
- package/dist/commands/health/renderers.js +12 -4
- package/dist/commands/health/report-view-model.js +14 -120
- package/dist/commands/health/types-improve.js +4 -19
- package/dist/commands/health/windows.js +64 -74
- package/dist/commands/health.js +145 -143
- package/dist/commands/improve/consolidate/chunking.js +26 -117
- package/dist/commands/improve/consolidate/continuity-check.js +137 -0
- package/dist/commands/improve/consolidate/pair-pass.js +791 -0
- package/dist/commands/improve/consolidate/sanitize.js +54 -149
- package/dist/commands/improve/consolidate.js +589 -1127
- package/dist/commands/improve/content-hash.js +16 -24
- package/dist/commands/improve/distill/content-repair.js +18 -100
- package/dist/commands/improve/distill-guards.js +20 -81
- package/dist/commands/improve/distill-promotion-policy.js +23 -243
- package/dist/commands/improve/distill.js +608 -1041
- package/dist/commands/improve/eligibility.js +126 -390
- package/dist/commands/improve/execution.js +8 -10
- package/dist/commands/improve/extract-prompt.js +1 -2
- package/dist/commands/improve/extract.js +487 -1046
- package/dist/commands/improve/feedback-valence.js +0 -25
- package/dist/commands/improve/improve-cli.js +75 -169
- package/dist/commands/improve/improve-result-file.js +10 -66
- package/dist/commands/improve/improve-strategies.js +52 -4
- package/dist/commands/improve/improve-usage-report.js +18 -64
- package/dist/commands/improve/improve.js +480 -1074
- package/dist/commands/improve/ledger.js +119 -0
- package/dist/commands/improve/locks.js +2 -8
- package/dist/commands/improve/loop-stages.js +415 -1073
- package/dist/commands/improve/memory/derived-ref.js +12 -77
- package/dist/commands/improve/memory/memory-belief.js +16 -118
- package/dist/commands/improve/memory/memory-improve.js +266 -14
- package/dist/commands/improve/outcome-loop.js +28 -156
- package/dist/commands/improve/planner.js +5 -15
- package/dist/commands/improve/preparation.js +779 -2319
- package/dist/commands/improve/proactive-maintenance.js +34 -101
- package/dist/commands/improve/reflect-noise.js +104 -280
- package/dist/commands/improve/reflect.js +642 -1353
- package/dist/commands/improve/retrieval-gate.js +127 -0
- package/dist/commands/improve/retrieval-scope.js +92 -0
- package/dist/commands/improve/salience.js +41 -240
- package/dist/commands/improve/session-asset.js +19 -100
- package/dist/commands/improve/stage.js +322 -0
- package/dist/commands/lint/base-linter.js +37 -15
- package/dist/commands/proposal/drain.js +261 -578
- package/dist/commands/proposal/proposal-cli.js +19 -20
- package/dist/commands/proposal/proposal-types.js +31 -24
- package/dist/commands/proposal/proposal.js +38 -8
- package/dist/commands/proposal/propose.js +134 -160
- package/dist/commands/proposal/repository.js +1097 -1394
- package/dist/commands/proposal/validators/proposal-quality-validators.js +71 -174
- package/dist/commands/proposal/validators/proposal-validators.js +1 -1
- package/dist/commands/proposal/validators/proposals.js +22 -89
- package/dist/commands/read/curate.js +105 -462
- package/dist/commands/read/knowledge.js +3 -2
- package/dist/commands/read/search-cli.js +16 -33
- package/dist/commands/read/search.js +17 -23
- package/dist/commands/read/show.js +57 -108
- package/dist/commands/sources/bundle-cli.js +25 -2
- package/dist/commands/sources/bundle-config-ops.js +4 -0
- package/dist/commands/sources/dangerous-env-audit.js +1 -2
- package/dist/commands/sources/info.js +127 -29
- package/dist/commands/sources/installed-stashes.js +197 -746
- package/dist/commands/sources/schema-repair.js +98 -129
- package/dist/commands/sources/source-add.js +62 -12
- package/dist/commands/sources/source-manage.js +9 -2
- package/dist/commands/sources/stash-cli.js +24 -4
- package/dist/commands/tasks/explain.js +10 -13
- package/dist/commands/tasks/tasks-cli.js +12 -13
- package/dist/commands/tasks/tasks.js +350 -936
- package/dist/commands/tasks/validate.js +26 -24
- package/dist/commands/workflow/plan.js +22 -29
- package/dist/commands/workflow-cli.js +4 -4
- package/dist/core/adapter/adapters/akm-adapter.js +2 -1
- package/dist/core/adapter/adapters/akm-lint.js +2 -3
- package/dist/core/adapter/adapters/akm-metadata.js +42 -12
- package/dist/core/adapter/adapters/akm-task-adapter.js +29 -8
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +1 -1
- package/dist/core/adapter/execution-source.js +17 -29
- package/dist/core/asset/asset-placement.js +4 -13
- package/dist/core/asset/frontmatter.js +106 -1
- package/dist/core/asset/resolve-ref.js +1 -1
- package/dist/core/bundle-id.js +42 -5
- package/dist/core/bundle-rename.js +285 -0
- package/dist/core/config/config-io.js +1 -2
- package/dist/core/config/config-schema.js +9 -34
- package/dist/core/config/config-walker.js +1 -1
- package/dist/core/config/config.js +184 -111
- package/dist/core/config/engine-semantics.js +0 -2
- package/dist/core/config/legacy-source-shape-shim.js +38 -9
- package/dist/core/config/schema/embedding.js +20 -5
- package/dist/core/config/schema/engines.js +5 -0
- package/dist/core/config/schema/execution.js +1 -1
- package/dist/core/config/schema/experimental.js +1 -1
- package/dist/core/config/schema/improve-processes.js +54 -125
- package/dist/core/config/schema/improve.js +4 -42
- package/dist/core/config/schema/index-config.js +9 -48
- package/dist/core/config/schema/scheduler.js +12 -12
- package/dist/core/config/schema/search.js +6 -22
- package/dist/core/env-secret-ref.js +0 -1
- package/dist/core/errors.js +8 -9
- package/dist/core/file-change.js +13 -5
- package/dist/core/file-lock.js +76 -173
- package/dist/core/improve-result.js +35 -7
- package/dist/core/improve-types.js +0 -1
- package/dist/core/logs-db.js +2 -2
- package/dist/core/loopback.js +7 -12
- package/dist/core/non-task-input.js +20 -0
- package/dist/core/parse.js +13 -16
- package/dist/core/paths.js +0 -24
- package/dist/core/redaction.js +109 -2
- package/dist/core/run-lock.js +2 -5
- package/dist/core/spawn-env.js +1 -1
- package/dist/core/state/migrations.js +123 -61
- package/dist/core/state-db-scope.js +2 -4
- package/dist/core/state-db.js +126 -692
- package/dist/core/time.js +0 -20
- package/dist/core/type-presentation.js +1 -9
- package/dist/core/write-source.js +294 -1005
- package/dist/execution/input-contract.js +1 -1
- package/dist/execution/resolved-request.js +135 -689
- package/dist/execution/source.js +63 -257
- package/dist/execution/target-ref.js +1 -1
- package/dist/indexer/bundle-identity-guard.js +2 -2
- package/dist/indexer/db/llm-cache.js +2 -2
- package/dist/indexer/ensure-index.js +77 -73
- package/dist/indexer/index-rebuild-lock.js +3 -11
- package/dist/indexer/index-writer-lock.js +8 -17
- package/dist/indexer/index-written-assets.js +141 -154
- package/dist/indexer/indexer.js +400 -1124
- package/dist/indexer/links/declared-links.js +90 -0
- package/dist/indexer/materialize-embeddings.js +60 -397
- package/dist/indexer/passes/memory-inference.js +96 -90
- package/dist/indexer/passes/metadata.js +132 -219
- package/dist/indexer/read-preflight.js +0 -7
- package/dist/indexer/scan/doc-to-entry.js +2 -3
- package/dist/indexer/scan/drain-dir.js +1 -1
- package/dist/indexer/search/db-search.js +190 -590
- package/dist/indexer/search/fts-query.js +30 -41
- package/dist/indexer/search/ranking.js +28 -154
- package/dist/indexer/search/search-attribution.js +12 -32
- package/dist/indexer/search/search-fields.js +11 -15
- package/dist/indexer/search/search-hit-enrichers.js +54 -85
- package/dist/indexer/search/search-source.js +1 -4
- package/dist/indexer/usage/usage-events.js +36 -7
- package/dist/indexer/walk/walker.js +3 -4
- package/dist/integrations/agent/engine-fallback.js +23 -40
- package/dist/integrations/agent/engine-resolution.js +93 -183
- package/dist/integrations/agent/execution.js +507 -0
- package/dist/integrations/agent/model-map.js +28 -156
- package/dist/integrations/agent/request-lowering.js +66 -141
- package/dist/integrations/agent/runner-dispatch.js +143 -321
- package/dist/integrations/agent/runner.js +54 -14
- package/dist/integrations/lockfile.js +53 -101
- package/dist/llm/client.js +18 -6
- package/dist/llm/embedders/deterministic.js +2 -3
- package/dist/llm/embedders/profile.js +71 -0
- package/dist/llm/embedders/remote.js +11 -17
- package/dist/llm/feature-gate.js +0 -8
- package/dist/llm/index-passes.js +3 -5
- package/dist/llm/memory-infer.js +1 -2
- package/dist/llm/structured-call.js +5 -24
- package/dist/output/generic-render.js +23 -11
- package/dist/output/html-render.js +13 -10
- package/dist/output/render-registry.js +3 -32
- package/dist/output/shapes/helpers.js +25 -38
- package/dist/output/shapes/passthrough.js +1 -9
- package/dist/{indexer/graph/graph-types.js → output/text/bundle-rename.js} +4 -1
- package/dist/output/text/command-format.js +69 -31
- package/dist/output/text/helpers.js +1 -1
- package/dist/output/text/migrate.js +5 -14
- package/dist/output/text/proposal-format.js +48 -3
- package/dist/output/text/show-format.js +13 -17
- package/dist/output/text/workflow-format.js +0 -32
- package/dist/output/text.js +2 -0
- package/dist/registry/factory.js +4 -19
- package/dist/registry/network.js +66 -220
- package/dist/registry/providers/index.js +0 -2
- package/dist/registry/providers/skills-sh.js +3 -14
- package/dist/registry/providers/static-index.js +24 -26
- package/dist/registry/resolve.js +55 -131
- package/dist/scripts/akm-migrate-node.js +42948 -92369
- package/dist/scripts/akm-migrate.js +42935 -92354
- package/dist/setup/registry-stash-loader.js +4 -13
- package/dist/setup/semantic-assets.js +3 -44
- package/dist/setup/setup.js +1 -1
- package/dist/setup/steps/connection.js +5 -6
- package/dist/setup/steps/platforms.js +2 -2
- package/dist/setup/steps/tasks.js +25 -15
- package/dist/sources/provider-factory.js +17 -18
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +7 -1
- package/dist/sources/providers/git-provider.js +0 -3
- package/dist/sources/providers/git-stash.js +83 -21
- package/dist/sources/providers/npm.js +2 -4
- package/dist/sources/providers/provider-utils.js +5 -10
- package/dist/sources/providers/website.js +0 -2
- package/dist/sources/snapshot-fetchers/website-ingest.js +1 -1
- package/dist/sources/website-url.js +2 -2
- package/dist/storage/database.js +9 -35
- package/dist/storage/repositories/improve-ledger-repository.js +209 -0
- package/dist/storage/repositories/index-connection.js +39 -72
- package/dist/storage/repositories/index-entries-repository.js +131 -129
- package/dist/storage/repositories/index-entry-mapper.js +1 -2
- package/dist/storage/repositories/index-entry-schema.js +101 -268
- package/dist/storage/repositories/index-fts-repository.js +86 -256
- package/dist/storage/repositories/index-links-repository.js +143 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +7 -9
- package/dist/storage/repositories/index-meta-repository.js +6 -4
- package/dist/storage/repositories/index-schema.js +257 -325
- package/dist/storage/repositories/index-utility-repository.js +8 -29
- package/dist/storage/repositories/index-vec-repository.js +133 -414
- package/dist/storage/repositories/outcome-repository.js +2 -1
- package/dist/storage/repositories/proposals-repository.js +104 -1
- package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
- package/dist/storage/repositories/salience-repository.js +1 -19
- package/dist/storage/repositories/task-history-repository.js +26 -4
- package/dist/storage/repositories/workflow-runs-repository.js +53 -244
- package/dist/storage/sqlite-migrations.js +136 -0
- package/dist/storage/sqlite-pragmas.js +11 -9
- package/dist/storage/sqlite-transaction.js +170 -0
- package/dist/storage/state-db-integrity.js +130 -0
- package/dist/tasks/activation-config.js +134 -62
- package/dist/tasks/backends/cron.js +191 -302
- package/dist/tasks/backends/exec-utils.js +2 -5
- package/dist/tasks/backends/launchd.js +141 -748
- package/dist/tasks/backends/schtasks.js +119 -623
- package/dist/tasks/prepare/prepare-support.js +5 -15
- package/dist/tasks/prepare/prepare.js +0 -2
- package/dist/tasks/resolve-akm-bin.js +20 -79
- package/dist/tasks/run/attempt-lifecycle.js +0 -1
- package/dist/tasks/run/load-task.js +1 -1
- package/dist/tasks/scheduler-binding.js +20 -238
- package/dist/tasks/scheduler-invocation.js +136 -244
- package/dist/tasks/scheduler-lock.js +53 -0
- package/dist/tasks/scheduler-sync.js +368 -679
- package/dist/tasks/source/parse-task-source.js +55 -9
- package/dist/tasks/source/task-source-v3-frozen.js +3 -4
- package/dist/tasks/source/task-to-v4.js +464 -88
- package/dist/workflows/authoring/authoring.js +3 -12
- package/dist/workflows/compile.js +211 -0
- package/dist/workflows/concurrency-policy.js +13 -74
- package/dist/workflows/exec/child-invocation.js +3 -17
- package/dist/workflows/exec/child-workflow.js +32 -141
- package/dist/workflows/exec/dispatch-redaction.js +13 -53
- package/dist/workflows/exec/environment.js +98 -0
- package/dist/workflows/exec/exec-unit.js +33 -140
- package/dist/workflows/exec/frozen-judge.js +7 -59
- package/dist/workflows/exec/native-executor.js +82 -341
- package/dist/workflows/exec/param-secrets.js +29 -47
- package/dist/workflows/exec/run-workflow.js +154 -387
- package/dist/workflows/exec/scheduler.js +9 -36
- package/dist/workflows/exec/step-work.js +127 -430
- package/dist/workflows/exec/unit-dispatch.js +11 -63
- package/dist/workflows/exec/unit-writer.js +8 -52
- package/dist/workflows/exec/worktree.js +39 -273
- package/dist/workflows/freeze/child-output-references.js +4 -15
- package/dist/workflows/freeze/environment.js +99 -92
- package/dist/workflows/freeze/freeze.js +172 -0
- package/dist/workflows/freeze/step-values.js +19 -21
- package/dist/workflows/freeze/targets/child-workflow.js +23 -92
- package/dist/workflows/freeze/targets/command.js +10 -33
- package/dist/workflows/freeze/targets/script.js +5 -12
- package/dist/workflows/freeze/targets/shell.js +3 -6
- package/dist/workflows/freeze/targets/task.js +25 -80
- package/dist/workflows/freeze/task-bindings.js +20 -67
- package/dist/workflows/{source-ir/github-yaml.js → github-yaml.js} +88 -206
- package/dist/workflows/ir/params.js +6 -51
- package/dist/workflows/ir/plan-hash.js +2 -34
- package/dist/workflows/parser.js +140 -43
- package/dist/{commands/improve/consolidate/types.js → workflows/plan.js} +2 -1
- package/dist/workflows/renderer.js +36 -69
- package/dist/workflows/resource-limits.js +12 -120
- package/dist/workflows/runtime/agent-identity.js +8 -40
- package/dist/workflows/runtime/run-outputs.js +3 -6
- package/dist/workflows/runtime/run-plan.js +316 -0
- package/dist/workflows/runtime/runs.js +48 -200
- package/dist/workflows/runtime/workflow-asset-loader.js +24 -57
- package/dist/workflows/{source-ir/semantics.js → source-semantics.js} +16 -20
- package/dist/workflows/validate-summary.js +2 -7
- package/docs/integration/bundling-akm.md +49 -42
- package/docs/migration/README.md +1 -0
- package/docs/migration/release-notes/0.9.17.md +43 -0
- package/docs/migration/v0.9.1-to-v0.9.2.md +23 -7
- package/docs/reference/cli.md +232 -135
- package/docs/reference/configuration.md +71 -57
- package/docs/reference/data-and-telemetry.md +20 -21
- package/docs/reference/tasks.md +105 -39
- package/docs/reference/workflow-schema.md +14 -18
- package/docs/reference/workflows.md +6 -9
- package/package.json +1 -1
- package/schemas/akm-config.json +115 -738
- package/schemas/akm-workflow.json +1 -0
- package/dist/assets/improve-strategies/graph-refresh.json +0 -15
- package/dist/assets/prompts/contradiction-judge.md +0 -33
- package/dist/assets/prompts/graph-extract-system.md +0 -1
- package/dist/assets/prompts/graph-extract-user-prompt.md +0 -35
- package/dist/assets/prompts/metadata-enhance-system.md +0 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +0 -4
- package/dist/commands/health/advisories.js +0 -150
- package/dist/commands/health/metrics.js +0 -329
- package/dist/commands/health/surfaces.js +0 -102
- package/dist/commands/improve/anti-collapse.js +0 -83
- package/dist/commands/improve/collapse-detector.js +0 -432
- package/dist/commands/improve/consolidate/eligibility.js +0 -48
- package/dist/commands/improve/consolidate/merge.js +0 -149
- package/dist/commands/improve/distill/promote-memory.js +0 -291
- package/dist/commands/improve/distill/quality-gate.js +0 -337
- package/dist/commands/improve/eval-cases.js +0 -52
- package/dist/commands/improve/memory/memory-contradiction-detect.js +0 -291
- package/dist/commands/improve/proposal-envelope.js +0 -31
- package/dist/commands/improve/run-context.js +0 -123
- package/dist/commands/improve/shared.js +0 -31
- package/dist/commands/improve/source-identity.js +0 -28
- package/dist/commands/improve/triage.js +0 -96
- package/dist/commands/proposal/drain-policies.js +0 -151
- package/dist/commands/sources/update-transaction.js +0 -220
- package/dist/core/action-contributors.js +0 -28
- package/dist/core/config/config-version-shim.js +0 -101
- package/dist/core/fs-txn.js +0 -405
- package/dist/core/lexical-score.js +0 -25
- package/dist/core/maintenance-barrier.js +0 -167
- package/dist/execution/executable-identity.js +0 -105
- package/dist/execution/guarded-source.js +0 -427
- package/dist/indexer/db/graph-db.js +0 -444
- package/dist/indexer/graph/graph-boost.js +0 -427
- package/dist/indexer/graph/graph-dedup.js +0 -95
- package/dist/indexer/graph/graph-extraction.js +0 -1108
- package/dist/indexer/search/name-match.js +0 -35
- package/dist/indexer/search/ranking-contributors.js +0 -515
- package/dist/indexer/search/ranking-types.js +0 -4
- package/dist/indexer/walk/project-context.js +0 -192
- package/dist/integrations/agent/execution-cascade.js +0 -566
- package/dist/integrations/agent/execution-definitions.js +0 -202
- package/dist/integrations/agent/execution-lowering.js +0 -841
- package/dist/integrations/agent/execution-preparation.js +0 -98
- package/dist/integrations/agent/inline-execution.js +0 -74
- package/dist/llm/graph-extract.js +0 -728
- package/dist/llm/metadata-enhance.js +0 -96
- package/dist/registry/create-provider-registry.js +0 -29
- package/dist/registry/pinned-request-helper.js +0 -247
- package/dist/registry/pinned-transport.js +0 -717
- package/dist/sources/providers/index.js +0 -14
- package/dist/storage/engines/sqlite-migrations.js +0 -271
- package/dist/storage/repositories/canaries-repository.js +0 -107
- package/dist/storage/repositories/embedding-salvage-repository.js +0 -184
- package/dist/storage/repositories/registry-cache.js +0 -113
- package/dist/tasks/scheduler-sync-preview.js +0 -52
- package/dist/tasks/source/task-to-v3.js +0 -507
- package/dist/workflows/freeze/resolve-steps.js +0 -86
- package/dist/workflows/freeze/source-freeze.js +0 -64
- package/dist/workflows/ir/compile.js +0 -321
- package/dist/workflows/ir/environment-v4.js +0 -330
- package/dist/workflows/ir/freeze-v4.js +0 -153
- package/dist/workflows/ir/schema-v4.js +0 -745
- package/dist/workflows/ir/schema.js +0 -354
- package/dist/workflows/program/schema.js +0 -77
- package/dist/workflows/runtime/checkin.js +0 -57
- package/dist/workflows/runtime/plan-classifier.js +0 -196
- package/dist/workflows/runtime/unit-checkin.js +0 -45
- package/dist/workflows/runtime/unit-phases.js +0 -20
- package/dist/workflows/schema.js +0 -4
- package/dist/workflows/source-ir/compile.js +0 -200
- package/dist/workflows/source-ir/program.js +0 -50
- package/dist/workflows/source-ir/result.js +0 -26
- package/dist/workflows/source-ir/schema.js +0 -786
- package/dist/workflows/source-ir/triggers.js +0 -79
- package/dist/workflows/source-ir/uses.js +0 -40
- package/dist/workflows/validator.js +0 -60
|
@@ -25,7 +25,6 @@ import { resolveImproveExecution } from "../improve/execution.js";
|
|
|
25
25
|
import { extractCommand } from "../improve/extract-cli.js";
|
|
26
26
|
import { resolveImproveStrategy } from "../improve/improve-strategies.js";
|
|
27
27
|
import { drainProposals } from "./drain.js";
|
|
28
|
-
import { resolveDrainPolicy } from "./drain-policies.js";
|
|
29
28
|
import { akmProposalAccept, akmProposalDiff, akmProposalList, akmProposalReject, akmProposalRevert, akmProposalShow, bulkAdjudicateProposals, } from "./proposal.js";
|
|
30
29
|
import { proposeCommand } from "./propose-cli.js";
|
|
31
30
|
export function mergeProposalDrainNotices(resolutionNotices, dispatchNotices) {
|
|
@@ -90,6 +89,10 @@ const proposalListCommand = defineJsonCommand({
|
|
|
90
89
|
},
|
|
91
90
|
ref: { type: "string", description: "Filter by asset ref ([bundle//]conceptId, e.g. knowledge/guide.md)" },
|
|
92
91
|
type: { type: "string", description: "Filter by asset type" },
|
|
92
|
+
generator: {
|
|
93
|
+
type: "string",
|
|
94
|
+
description: "Filter by generator/source (e.g. reflect, distill, consolidate-pair) — same value accept/reject --generator take.",
|
|
95
|
+
},
|
|
93
96
|
},
|
|
94
97
|
run({ args }) {
|
|
95
98
|
const status = parseProposalStatus(args.status);
|
|
@@ -98,6 +101,7 @@ const proposalListCommand = defineJsonCommand({
|
|
|
98
101
|
status,
|
|
99
102
|
ref: args.ref,
|
|
100
103
|
type: args.type,
|
|
104
|
+
generator: args.generator,
|
|
101
105
|
includeArchive: status === "accepted" || status === "rejected" || status === "reverted",
|
|
102
106
|
});
|
|
103
107
|
output("proposal-list", result);
|
|
@@ -150,7 +154,7 @@ const proposalAcceptCommand = defineJsonCommand({
|
|
|
150
154
|
return;
|
|
151
155
|
}
|
|
152
156
|
const { maxDiffLines, olderThanMs } = parseBulkFilterFlags(args);
|
|
153
|
-
const { count, results } = await bulkAdjudicateProposals({
|
|
157
|
+
const { count, results, skippedForContinuityRisk } = await bulkAdjudicateProposals({
|
|
154
158
|
action: "accept",
|
|
155
159
|
generator,
|
|
156
160
|
maxDiffLines,
|
|
@@ -159,7 +163,16 @@ const proposalAcceptCommand = defineJsonCommand({
|
|
|
159
163
|
queue: args.queue,
|
|
160
164
|
target: args.target,
|
|
161
165
|
});
|
|
162
|
-
output("proposal-accept-batch", {
|
|
166
|
+
output("proposal-accept-batch", {
|
|
167
|
+
accepted: count,
|
|
168
|
+
results,
|
|
169
|
+
// S4: how many otherwise-matching proposals were skipped specifically
|
|
170
|
+
// because they carry retirement.continuityRisk — visible under
|
|
171
|
+
// --dry-run and on a real run alike, distinct from an ordinary
|
|
172
|
+
// --max-diff-lines/--older-than miss.
|
|
173
|
+
skippedForContinuityRisk,
|
|
174
|
+
dryRun: args["dry-run"],
|
|
175
|
+
});
|
|
163
176
|
return;
|
|
164
177
|
}
|
|
165
178
|
if (!args.id) {
|
|
@@ -323,13 +336,9 @@ const proposalShowCommand = defineJsonCommand({
|
|
|
323
336
|
const proposalDrainCommand = defineJsonCommand({
|
|
324
337
|
meta: {
|
|
325
338
|
name: "drain",
|
|
326
|
-
description: "Drain the
|
|
339
|
+
description: "Drain the pending proposal backlog: accept what a quality judge passed, reject empty diffs, leave the rest for judgment or review",
|
|
327
340
|
},
|
|
328
341
|
args: {
|
|
329
|
-
policy: {
|
|
330
|
-
type: "string",
|
|
331
|
-
description: "Built-in preset (personal-stash|conservative|manual) or path to a policy file",
|
|
332
|
-
},
|
|
333
342
|
"dry-run": {
|
|
334
343
|
type: "boolean",
|
|
335
344
|
description: "List what would be accepted/rejected/deferred without writing.",
|
|
@@ -345,10 +354,6 @@ const proposalDrainCommand = defineJsonCommand({
|
|
|
345
354
|
type: "string",
|
|
346
355
|
description: "Hard per-run accept ceiling. Accepts beyond this are reported as skippedByCap.",
|
|
347
356
|
},
|
|
348
|
-
"max-diff-lines": {
|
|
349
|
-
type: "string",
|
|
350
|
-
description: "Defer (never promote) accepts whose proposed content exceeds this many lines.",
|
|
351
|
-
},
|
|
352
357
|
"older-than": {
|
|
353
358
|
type: "string",
|
|
354
359
|
description: "Only consider proposals created more than this many days ago.",
|
|
@@ -365,7 +370,7 @@ const proposalDrainCommand = defineJsonCommand({
|
|
|
365
370
|
},
|
|
366
371
|
strategy: {
|
|
367
372
|
type: "string",
|
|
368
|
-
description: "Read the triage block (
|
|
373
|
+
description: "Read the triage block (applyMode, ceilings, judgment) from this improve strategy.",
|
|
369
374
|
},
|
|
370
375
|
},
|
|
371
376
|
async run({ args, rawArgs }) {
|
|
@@ -378,20 +383,17 @@ const proposalDrainCommand = defineJsonCommand({
|
|
|
378
383
|
// always override config; config supplies defaults for any flag omitted.
|
|
379
384
|
const selectedStrategy = resolveImproveStrategy(args.strategy, cfg);
|
|
380
385
|
const triageConfig = selectedStrategy.config.processes?.triage;
|
|
381
|
-
const policy = resolveDrainPolicy(args.policy ?? triageConfig?.policy);
|
|
382
386
|
const dryRun = args["dry-run"] === true;
|
|
383
387
|
const applyMode = args.promote === true ? "promote" : (triageConfig?.applyMode ?? "queue");
|
|
384
388
|
const maxAccepts = parsePositiveIntFlag(args["max-accepts"], "--max-accepts") ??
|
|
385
389
|
triageConfig?.maxAcceptsPerRun ??
|
|
386
390
|
25;
|
|
387
|
-
const maxDiffLines = parsePositiveIntFlag(args["max-diff-lines"], "--max-diff-lines") ??
|
|
388
|
-
triageConfig?.maxDiffLines;
|
|
389
391
|
const rawOlderThan = parsePositiveIntFlag(args["older-than"], "--older-than");
|
|
390
392
|
const olderThanMs = rawOlderThan !== undefined ? rawOlderThan * 86_400_000 : undefined;
|
|
391
393
|
// Promotion in promote mode is destructive (commits to git, no batch revert).
|
|
392
394
|
if (applyMode === "promote" && !dryRun) {
|
|
393
395
|
const { confirmDestructive } = await import("../../cli/confirm.js");
|
|
394
|
-
const confirmed = await confirmDestructive(
|
|
396
|
+
const confirmed = await confirmDestructive("Drain and promote judge-passed pending proposals? Promotions commit to git and cannot be batch-reverted.", { yes: args.yes === true });
|
|
395
397
|
if (!confirmed) {
|
|
396
398
|
process.stderr.write("Aborted.\n");
|
|
397
399
|
return;
|
|
@@ -444,11 +446,9 @@ const proposalDrainCommand = defineJsonCommand({
|
|
|
444
446
|
result = await withLlmStage("drain", () => drainProposals({
|
|
445
447
|
stashDir,
|
|
446
448
|
config: cfg,
|
|
447
|
-
policy,
|
|
448
449
|
applyMode,
|
|
449
450
|
maxAccepts,
|
|
450
451
|
dryRun,
|
|
451
|
-
...(maxDiffLines !== undefined ? { maxDiffLines } : {}),
|
|
452
452
|
...(excludeIds ? { excludeIds } : {}),
|
|
453
453
|
judgment,
|
|
454
454
|
}));
|
|
@@ -461,7 +461,6 @@ const proposalDrainCommand = defineJsonCommand({
|
|
|
461
461
|
output("proposal-drain", {
|
|
462
462
|
schemaVersion: 1,
|
|
463
463
|
ok: true,
|
|
464
|
-
policy: policy.name,
|
|
465
464
|
applyMode,
|
|
466
465
|
dryRun,
|
|
467
466
|
strategy: selectedStrategy.name,
|
|
@@ -1,56 +1,63 @@
|
|
|
1
1
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
-
// ── Source allow-list (F-4 / #385) ──────────────────────────────────────────
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Rationale (W3C PROV-DM 2013): Provenance records require typed, validated
|
|
9
|
-
* sources for meaningful aggregation. Accept-rate-per-source is the core
|
|
10
|
-
* self-measurement metric for recursive self-improvement: if reflect proposals
|
|
11
|
-
* are accepted at 20% and distill proposals at 60%, that guides resource
|
|
12
|
-
* allocation. Free-text typos (`"reflct"`) produce unaggregatable events.
|
|
13
|
-
*
|
|
14
|
-
* Automated sources (those in {@link AUTOMATED_PROPOSAL_SOURCES}) require a
|
|
15
|
-
* `sourceRun` field for full PROV-DM traceability.
|
|
5
|
+
* Valid proposal `source` values (#385): typed sources keep accept-rate per
|
|
6
|
+
* source aggregatable (PROV-DM). An unknown value is accepted with a warning.
|
|
16
7
|
*/
|
|
17
8
|
export const PROPOSAL_SOURCES = [
|
|
18
|
-
// Automated sources — require sourceRun for traceability.
|
|
19
9
|
"reflect",
|
|
20
10
|
"distill",
|
|
21
11
|
"consolidate",
|
|
12
|
+
/** The consolidate pair pass's own retire proposals (alpha.9, S6) — kept apart from `consolidate`'s promotions so a bulk `accept --generator consolidate` never sweeps a retirement, and the reverse. */
|
|
13
|
+
"consolidate-pair",
|
|
22
14
|
"extract",
|
|
23
15
|
"improve",
|
|
24
|
-
// Semi-automated / tool-driven.
|
|
25
16
|
"feedback",
|
|
26
|
-
// Human-initiated / CLI-driven.
|
|
27
17
|
"propose",
|
|
28
18
|
"remember",
|
|
29
19
|
"import",
|
|
30
|
-
// Internal / system.
|
|
31
20
|
"distill_quality_rejected",
|
|
32
21
|
"schema-repair",
|
|
33
22
|
];
|
|
34
|
-
/** Automated sources
|
|
23
|
+
/** Automated sources, which should carry a `sourceRun`. */
|
|
35
24
|
export const AUTOMATED_PROPOSAL_SOURCES = [
|
|
36
25
|
"reflect",
|
|
37
26
|
"distill",
|
|
38
27
|
"consolidate",
|
|
28
|
+
"consolidate-pair",
|
|
39
29
|
"extract",
|
|
40
30
|
"improve",
|
|
41
31
|
"schema-repair",
|
|
42
32
|
];
|
|
43
|
-
/**
|
|
44
|
-
* Check whether a string is a valid {@link ProposalSource}.
|
|
45
|
-
* Unknown source values are accepted with a runtime warning rather than a hard
|
|
46
|
-
* error, to allow extensions without breaking existing callers.
|
|
47
|
-
*/
|
|
48
33
|
export function isValidProposalSource(source) {
|
|
49
34
|
return PROPOSAL_SOURCES.includes(source);
|
|
50
35
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Check whether a source value is an automated source requiring `sourceRun`.
|
|
53
|
-
*/
|
|
54
36
|
export function isAutomatedProposalSource(source) {
|
|
55
37
|
return AUTOMATED_PROPOSAL_SOURCES.includes(source);
|
|
56
38
|
}
|
|
39
|
+
/** A pending or accepted proposal whose primary change deletes its target (a consolidate retire proposal, alpha.9). */
|
|
40
|
+
export function isRetireProposal(proposal) {
|
|
41
|
+
return proposal.changes[0]?.op === "delete";
|
|
42
|
+
}
|
|
43
|
+
/** A promote refused because the target changed after mint (STALE, R20) — not a merit judgement. */
|
|
44
|
+
export const STALE_TARGET_GATE_REASON = "stale-target";
|
|
45
|
+
export const EXPIRED_GATE_REASON = "expired";
|
|
46
|
+
export const ASSET_MISSING_GATE_REASON = "asset-missing";
|
|
47
|
+
const PROCEDURAL_GATE_REASONS = new Set([
|
|
48
|
+
STALE_TARGET_GATE_REASON,
|
|
49
|
+
EXPIRED_GATE_REASON,
|
|
50
|
+
ASSET_MISSING_GATE_REASON,
|
|
51
|
+
]);
|
|
52
|
+
/**
|
|
53
|
+
* A rejection nobody judged on its content (stale target, expiry, orphan
|
|
54
|
+
* purge). The "previously rejected" prompt context and the accept-rate metric
|
|
55
|
+
* leave these out. Expiries archived before the gate reason existed are known
|
|
56
|
+
* by their review reason.
|
|
57
|
+
*/
|
|
58
|
+
export function isProceduralRejection(proposal) {
|
|
59
|
+
if (proposal.gateDecision?.outcome === "auto-rejected" && PROCEDURAL_GATE_REASONS.has(proposal.gateDecision.reason)) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
return proposal.review?.reason?.startsWith("expired:") === true;
|
|
63
|
+
}
|
|
@@ -15,7 +15,8 @@ import { resolveStashDir } from "../../core/common.js";
|
|
|
15
15
|
import { loadConfig } from "../../core/config/config.js";
|
|
16
16
|
import { resolveWriteTarget } from "../../core/write-source.js";
|
|
17
17
|
import { withAssetMutationLease } from "../../indexer/index-writer-lock.js";
|
|
18
|
-
import {
|
|
18
|
+
import { isRetireProposal } from "./proposal-types.js";
|
|
19
|
+
import { diffProposal, listProposals, preflightProposalPromotion, promoteProposal, proposalContent, rejectProposalDurably, resolveProposalId, revertProposal, } from "./repository.js";
|
|
19
20
|
import { validateProposal } from "./validators/proposals.js";
|
|
20
21
|
// ── Shared helpers ──────────────────────────────────────────────────────────
|
|
21
22
|
function resolveStash(stashDir) {
|
|
@@ -55,7 +56,7 @@ export function akmProposalList(options = {}) {
|
|
|
55
56
|
status: options.status,
|
|
56
57
|
ref: options.ref,
|
|
57
58
|
type: options.type,
|
|
58
|
-
});
|
|
59
|
+
}).filter((p) => options.generator === undefined || p.source === options.generator);
|
|
59
60
|
return { schemaVersion: 1, totalCount: proposals.length, proposals };
|
|
60
61
|
}
|
|
61
62
|
export function akmProposalShow(options) {
|
|
@@ -64,9 +65,13 @@ export function akmProposalShow(options) {
|
|
|
64
65
|
const proposal = resolveProposalId(stash, options.id);
|
|
65
66
|
let validation = validateProposal(proposal);
|
|
66
67
|
// An explicit stashDir without config is an in-process storage test seam; it
|
|
67
|
-
// has no authenticated write-target context to preflight against.
|
|
68
|
+
// has no authenticated write-target context to preflight against. A retire
|
|
69
|
+
// proposal writes no content — preflightProposalPromotion's stamp/lint
|
|
70
|
+
// machinery is create/update-shaped and has nothing meaningful to check
|
|
71
|
+
// here; `diff` already shows the body being retired.
|
|
68
72
|
if (validation.ok &&
|
|
69
73
|
proposal.status === "pending" &&
|
|
74
|
+
!isRetireProposal(proposal) &&
|
|
70
75
|
(options.config !== undefined || options.stashDir === undefined)) {
|
|
71
76
|
try {
|
|
72
77
|
preflightProposalPromotion(options.config ?? loadConfig(), proposal, { queueTarget: queue.target });
|
|
@@ -104,7 +109,6 @@ export async function akmProposalReject(options) {
|
|
|
104
109
|
const config = options.config ?? loadConfig();
|
|
105
110
|
const { stashDir: stash } = resolveProposalQueue(options.stashDir, options.queue, config);
|
|
106
111
|
const proposalId = resolveProposalId(stash, options.id, options.ctx).id;
|
|
107
|
-
await recoverProposalTransactionsForStash(stash, config, options.ctx, proposalId);
|
|
108
112
|
const updated = rejectProposalDurably(stash, proposalId, options.reason, options.ctx, options.gateDecision);
|
|
109
113
|
return {
|
|
110
114
|
schemaVersion: 1,
|
|
@@ -162,6 +166,16 @@ export async function akmProposalRevert(options) {
|
|
|
162
166
|
proposal: result.proposal,
|
|
163
167
|
};
|
|
164
168
|
}
|
|
169
|
+
/** The retired file's current line count for `--max-diff-lines` (S6); unresolvable is never size-filtered here — the real accept/reject attempt fails cleanly on a genuinely stale target. */
|
|
170
|
+
function retiredTargetLineCount(stashDir, config, proposal, queueTarget) {
|
|
171
|
+
try {
|
|
172
|
+
const existing = diffProposal(stashDir, config, proposal.id, { queueTarget }).existing;
|
|
173
|
+
return existing === null ? 0 : existing.split("\n").length;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return 0;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
165
179
|
/**
|
|
166
180
|
* Bulk accept/reject every pending proposal from one generator, applying the
|
|
167
181
|
* shared `--max-diff-lines` / `--older-than` filters. Consolidates the two
|
|
@@ -171,12 +185,21 @@ export async function akmProposalRevert(options) {
|
|
|
171
185
|
*/
|
|
172
186
|
export async function bulkAdjudicateProposals(options) {
|
|
173
187
|
const config = options.config ?? loadConfig();
|
|
174
|
-
const { stashDir } = resolveProposalQueue(options.stashDir, options.queue, config);
|
|
175
|
-
|
|
188
|
+
const { stashDir, target: queueTarget } = resolveProposalQueue(options.stashDir, options.queue, config);
|
|
189
|
+
// Every filter EXCEPT the continuityRisk exclusion below — matched against
|
|
190
|
+
// separately so its own count (S4) can be reported apart from an ordinary
|
|
191
|
+
// --max-diff-lines/--older-than miss.
|
|
192
|
+
const matched = listProposals(stashDir, { status: "pending" }).filter((p) => {
|
|
176
193
|
if (p.source !== options.generator)
|
|
177
194
|
return false;
|
|
178
195
|
if (options.maxDiffLines !== undefined) {
|
|
179
|
-
|
|
196
|
+
// S6: a retire proposal's own payload is empty (it deletes its
|
|
197
|
+
// target) — proposalContent() would always read as 1 line, so
|
|
198
|
+
// --max-diff-lines could never filter one out. Count the retired
|
|
199
|
+
// file's own current line count instead.
|
|
200
|
+
const lines = isRetireProposal(p)
|
|
201
|
+
? retiredTargetLineCount(stashDir, config, p, queueTarget)
|
|
202
|
+
: proposalContent(p).split("\n").length;
|
|
180
203
|
if (lines > options.maxDiffLines)
|
|
181
204
|
return false;
|
|
182
205
|
}
|
|
@@ -187,6 +210,13 @@ export async function bulkAdjudicateProposals(options) {
|
|
|
187
210
|
}
|
|
188
211
|
return true;
|
|
189
212
|
});
|
|
213
|
+
// Item 1 (continuity check, alpha.9 plan §5.4, rule R3): a retire proposal
|
|
214
|
+
// the check flagged is never bulk-accepted, by generator or any other
|
|
215
|
+
// sweep — only a person accepting it by id can. Bulk reject is unaffected:
|
|
216
|
+
// declining a risky proposal is never the unsafe direction.
|
|
217
|
+
const isContinuityExcluded = (p) => options.action === "accept" && Boolean(p.retirement?.continuityRisk);
|
|
218
|
+
const skippedForContinuityRisk = matched.filter(isContinuityExcluded).length;
|
|
219
|
+
const pending = matched.filter((p) => !isContinuityExcluded(p));
|
|
190
220
|
const results = [];
|
|
191
221
|
for (const proposal of pending) {
|
|
192
222
|
if (options.dryRun) {
|
|
@@ -199,5 +229,5 @@ export async function bulkAdjudicateProposals(options) {
|
|
|
199
229
|
results.push(await akmProposalReject({ stashDir, id: proposal.id, queue: options.queue, reason: options.reason, config }));
|
|
200
230
|
}
|
|
201
231
|
}
|
|
202
|
-
return { count: results.length, results };
|
|
232
|
+
return { count: results.length, results, skippedForContinuityRisk };
|
|
203
233
|
}
|