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
|
@@ -10,13 +10,14 @@ import { IMPROVE_PROCESS_ENGINE_CAPABILITIES } from "../engine-semantics.js";
|
|
|
10
10
|
import { engineName, LlmInvocationOverridesSchema, nonEmptyString, positiveInt } from "./primitives.js";
|
|
11
11
|
// ── Improve profile / process ──────────────────────────────────────────────
|
|
12
12
|
//
|
|
13
|
-
// WI-9.6 (§4.2/§10.2): each of the
|
|
14
|
-
// consolidate, memoryInference,
|
|
15
|
-
// proactiveMaintenance
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
13
|
+
// WI-9.6 (§4.2/§10.2): each of the improve processes (reflect, distill,
|
|
14
|
+
// consolidate, memoryInference, extract, validation, triage,
|
|
15
|
+
// proactiveMaintenance — graphExtraction had one too, until the LLM
|
|
16
|
+
// entity-graph it ran was retired in 0.9.17-alpha.9) gets its OWN schema
|
|
17
|
+
// below — a shared base (engine, model, llm, enabled, timeoutMs) extended
|
|
18
|
+
// with only the fields meaningful on that process — replacing the prior
|
|
19
|
+
// single ImproveProcessConfigSchema reused via `.optional()` for all of them
|
|
20
|
+
// (which accepted, and silently ignored, any field on any process). Field→process assignment is derived from each
|
|
20
21
|
// field's original "only meaningful on X" doc comment, cross-checked against
|
|
21
22
|
// its actual runtime consumers and the built-in strategy assets
|
|
22
23
|
// (src/assets/improve-strategies/*.json).
|
|
@@ -42,6 +43,15 @@ const IMPROVE_PROCESS_BASE_FIELDS = {
|
|
|
42
43
|
};
|
|
43
44
|
/** Reflect/distill/consolidate: process-level asset-type filter (see improve-strategies.ts shouldSkipRef/DEFAULT_ALLOWED_TYPES). */
|
|
44
45
|
const allowedTypesField = z.array(z.string().min(1)).optional();
|
|
46
|
+
/**
|
|
47
|
+
* Reflect only (R12): conceptId prefixes to exclude, matched after stripping
|
|
48
|
+
* an optional `bundle//` from both the ref and each prefix (see
|
|
49
|
+
* improve-strategies.ts shouldSkipRef). `allowedTypes` is type-only and can't
|
|
50
|
+
* exclude a subset of one type, e.g. raw wiki-ingest snapshots indexed as
|
|
51
|
+
* `knowledge/wikis/articles/raw/*`. distill/consolidate are memory-only and
|
|
52
|
+
* never read this field.
|
|
53
|
+
*/
|
|
54
|
+
const excludeRefPrefixesField = z.array(z.string().min(1)).optional();
|
|
45
55
|
/**
|
|
46
56
|
* Consolidate process: hard cap on memories processed per pass.
|
|
47
57
|
* Reflect/distill: max refs processed (same as profile-level `limit`).
|
|
@@ -55,8 +65,6 @@ const processLimitField = positiveInt.optional();
|
|
|
55
65
|
* `reflect` process (proposal-side quality gate; see reflect.ts).
|
|
56
66
|
*/
|
|
57
67
|
const qualityGateField = z.object({ enabled: z.boolean().optional() }).passthrough().optional();
|
|
58
|
-
/** Consolidate process: gate for the M-1 (#367) contradiction-detection pass. */
|
|
59
|
-
const contradictionDetectionField = z.object({ enabled: z.boolean().optional() }).passthrough().optional();
|
|
60
68
|
/**
|
|
61
69
|
* WS-3b: CLS (Complementary Learning System) interleaving (step 9).
|
|
62
70
|
* distill/memoryInference prompts include embedding-retrieved existing adjacent
|
|
@@ -100,19 +108,10 @@ const extractTriageGateField = z
|
|
|
100
108
|
})
|
|
101
109
|
.passthrough()
|
|
102
110
|
.optional();
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return { message: `${retired} is retired; use engine` };
|
|
108
|
-
}
|
|
109
|
-
return { message: ctx.defaultError };
|
|
110
|
-
};
|
|
111
|
-
// Judgment is an explicit opt-in surface, so invocation typos must fail closed.
|
|
112
|
-
// Keep the shared override schema lenient for ordinary cross-version config
|
|
113
|
-
// compatibility, while making this nested surface strict. `extraParams`
|
|
114
|
-
// remains the intentional arbitrary provider-parameter escape hatch.
|
|
115
|
-
const triageJudgmentLlmOverridesField = LlmInvocationOverridesSchema.strict();
|
|
111
|
+
// Unknown keys pass through here like every other nested surface (the loader
|
|
112
|
+
// names them once); `extraParams` remains the arbitrary provider-parameter
|
|
113
|
+
// escape hatch.
|
|
114
|
+
const triageJudgmentLlmOverridesField = LlmInvocationOverridesSchema.passthrough();
|
|
116
115
|
const triageJudgmentObjectField = z
|
|
117
116
|
.object({
|
|
118
117
|
enabled: z.boolean().optional(),
|
|
@@ -120,46 +119,32 @@ const triageJudgmentObjectField = z
|
|
|
120
119
|
model: nonEmptyString.optional(),
|
|
121
120
|
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
122
121
|
llm: triageJudgmentLlmOverridesField.optional(),
|
|
123
|
-
}
|
|
124
|
-
.
|
|
122
|
+
})
|
|
123
|
+
.passthrough();
|
|
125
124
|
/** Triage process: explicit LLM-as-judge enablement and execution overrides. */
|
|
126
125
|
const triageJudgmentField = z
|
|
127
126
|
.union([z.boolean(), triageJudgmentObjectField])
|
|
128
127
|
.transform((value) => typeof value === "boolean" ? { enabled: value } : { ...value, enabled: value.enabled ?? true })
|
|
129
128
|
.optional();
|
|
130
129
|
/**
|
|
131
|
-
* WS-3b: Anti-collapse
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* decorative/inert knob. `false` skips the merge-information-floor
|
|
139
|
-
* measurement entirely (no counting, no warning) for every merge;
|
|
140
|
-
* true/absent (default) measures it on every merge. The MEASUREMENT's
|
|
141
|
-
* outcome is advisory in v1: a failing merge is counted
|
|
142
|
-
* (`merge_floor_violations`) and warned but never refused (promotion path:
|
|
143
|
-
* docs/architecture/specs/improve-collapse-churn-detector-design.md §7). In short:
|
|
144
|
-
* this field gates whether the check runs at all (a real code path), not
|
|
145
|
-
* whether a merge is allowed.
|
|
146
|
-
* - minSpecificityRetention: distinct-token retention floor for merges (default 0.6).
|
|
147
|
-
* (WS-3b step 0a `homeostaticDemotion` was removed — R4. Continuous decay is
|
|
148
|
-
* now part of the always-applied salience recency term.)
|
|
130
|
+
* WS-3b: Anti-collapse guard (step 8), consolidate process only: a small
|
|
131
|
+
* random (non-similarity-driven) fraction of the pool is mixed into the
|
|
132
|
+
* clustered order so consolidation is not purely rich-get-richer. Default ON
|
|
133
|
+
* (opt out via `enabled: false`); `randomClusterFraction` defaults to 0.05.
|
|
134
|
+
* The retired merge guards (`maxGeneration`, `lexicalDiversityCheck`,
|
|
135
|
+
* `mergeInformationFloor`, `minSpecificityRetention`) never refused a merge
|
|
136
|
+
* and are tolerated as unknown keys.
|
|
149
137
|
*/
|
|
150
138
|
const antiCollapseField = z
|
|
151
139
|
.object({
|
|
152
140
|
enabled: z.boolean().optional(),
|
|
153
|
-
maxGeneration: z.number().int().min(1).optional(),
|
|
154
|
-
lexicalDiversityCheck: z.boolean().optional(),
|
|
155
141
|
randomClusterFraction: z.number().min(0).max(1).optional(),
|
|
156
|
-
mergeInformationFloor: z.boolean().optional(),
|
|
157
|
-
minSpecificityRetention: z.number().min(0).max(1).optional(),
|
|
158
142
|
})
|
|
159
143
|
.passthrough()
|
|
160
144
|
.optional();
|
|
161
145
|
const REFLECT_PROCESS_FIELDS = {
|
|
162
146
|
allowedTypes: allowedTypesField,
|
|
147
|
+
excludeRefPrefixes: excludeRefPrefixesField,
|
|
163
148
|
limit: processLimitField,
|
|
164
149
|
qualityGate: qualityGateField,
|
|
165
150
|
lowValueFilter: lowValueFilterField,
|
|
@@ -180,42 +165,18 @@ const CONSOLIDATE_PROCESS_FIELDS = {
|
|
|
180
165
|
// entirely (emits `pool_below_min_size`). 0 disables the guard. Default 500.
|
|
181
166
|
minPoolSize: z.number().int().min(0).optional(),
|
|
182
167
|
maxChunkSize: z.number().int().min(1).max(50).optional(),
|
|
183
|
-
// Narrow candidate pool to memories modified within this duration window
|
|
184
|
-
// plus their graph neighbours. Absent = full-pool sweep.
|
|
185
|
-
incrementalSince: z.string().optional(),
|
|
186
|
-
// Graph neighbours per changed memory during incremental consolidation.
|
|
187
|
-
// Default 5. Only meaningful with incrementalSince.
|
|
188
|
-
neighborsPerChanged: z.number().int().min(1).optional(),
|
|
189
168
|
// Fallback p90 wall-clock time per consolidation chunk in seconds, used for
|
|
190
169
|
// cold-start budget estimation when no telemetry history exists. The actual
|
|
191
170
|
// p90 is derived from observed run durations once sufficient history
|
|
192
171
|
// accumulates; this value is only used on the very first run. Default 30s.
|
|
193
172
|
p90ChunkSecondsDefault: z.number().finite().positive().optional(),
|
|
194
173
|
antiCollapse: antiCollapseField,
|
|
195
|
-
contradictionDetection: contradictionDetectionField,
|
|
196
174
|
};
|
|
197
175
|
const MEMORY_INFERENCE_PROCESS_FIELDS = {
|
|
198
176
|
// Minimum pending memory count to run the pass.
|
|
199
177
|
minPendingCount: z.number().int().min(0).optional(),
|
|
200
178
|
cls: clsField,
|
|
201
179
|
};
|
|
202
|
-
/**
|
|
203
|
-
* GraphExtraction process fields: improve-owned graph extraction scope and
|
|
204
|
-
* batching. Passed to the invocation directly and never inherited from
|
|
205
|
-
* standalone index.graph.
|
|
206
|
-
*/
|
|
207
|
-
const GRAPH_EXTRACTION_PROCESS_FIELDS = {
|
|
208
|
-
// #624 P2: when set, rank eligible files by utility_scores DESC and process
|
|
209
|
-
// only the top-N per run (incremental high-signal-first sweep). Unset =
|
|
210
|
-
// process all eligible (current behavior).
|
|
211
|
-
topN: positiveInt.optional(),
|
|
212
|
-
includeTypes: z.array(z.string().min(1)).min(1).optional(),
|
|
213
|
-
batchSize: positiveInt.optional(),
|
|
214
|
-
// Full-corpus scan. When true, graph extraction runs on ALL stash files
|
|
215
|
-
// instead of only files touched by actionable refs in the current run.
|
|
216
|
-
// Used by the `graph-refresh` built-in profile / a scheduled weekly task.
|
|
217
|
-
fullScan: z.boolean().optional(),
|
|
218
|
-
};
|
|
219
180
|
const EXTRACT_PROCESS_FIELDS = {
|
|
220
181
|
defaultSince: z.string().min(1).optional(),
|
|
221
182
|
maxTotalChars: positiveInt.optional(),
|
|
@@ -246,10 +207,7 @@ const EXTRACT_PROCESS_FIELDS = {
|
|
|
246
207
|
};
|
|
247
208
|
const TRIAGE_PROCESS_FIELDS = {
|
|
248
209
|
applyMode: z.enum(["queue", "promote"]).optional(),
|
|
249
|
-
policy: z.string().min(1).optional(),
|
|
250
210
|
maxAcceptsPerRun: positiveInt.optional(),
|
|
251
|
-
maxDiffLines: positiveInt.optional(),
|
|
252
|
-
rejectEmpty: z.boolean().optional(),
|
|
253
211
|
judgment: triageJudgmentField,
|
|
254
212
|
};
|
|
255
213
|
/** proactiveMaintenance process fields (Layer 2). */
|
|
@@ -261,37 +219,15 @@ const PROACTIVE_MAINTENANCE_PROCESS_FIELDS = {
|
|
|
261
219
|
maxPerRun: positiveInt.optional(),
|
|
262
220
|
limit: processLimitField,
|
|
263
221
|
};
|
|
264
|
-
/**
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
* Applied identically to every per-process schema and to the wide
|
|
268
|
-
* ImproveProcessConfigSchema.
|
|
269
|
-
*/
|
|
270
|
-
function checkRetiredProcessKeys(value, ctx) {
|
|
271
|
-
for (const key of ["mode", "profile"]) {
|
|
272
|
-
if (key in value) {
|
|
273
|
-
ctx.addIssue({ code: z.ZodIssueCode.custom, path: [key], message: `${key} is retired; use engine` });
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
if ("judgement" in value) {
|
|
222
|
+
/** distill/consolidate are memory-only and never read `excludeRefPrefixes` (reflect only, R12). */
|
|
223
|
+
function rejectExcludeRefPrefixesOutsideReflect(value, ctx) {
|
|
224
|
+
if ("excludeRefPrefixes" in value) {
|
|
277
225
|
ctx.addIssue({
|
|
278
226
|
code: z.ZodIssueCode.custom,
|
|
279
|
-
path: ["
|
|
280
|
-
message: "
|
|
227
|
+
path: ["excludeRefPrefixes"],
|
|
228
|
+
message: "excludeRefPrefixes is only valid on the reflect process",
|
|
281
229
|
});
|
|
282
230
|
}
|
|
283
|
-
const judgment = value.judgment;
|
|
284
|
-
if (judgment) {
|
|
285
|
-
for (const key of ["mode", "profile"]) {
|
|
286
|
-
if (key in judgment) {
|
|
287
|
-
ctx.addIssue({
|
|
288
|
-
code: z.ZodIssueCode.custom,
|
|
289
|
-
path: ["judgment", key],
|
|
290
|
-
message: `${key} is retired; use engine`,
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
231
|
}
|
|
296
232
|
export const ImproveProcessConfigSchema = z
|
|
297
233
|
.object({
|
|
@@ -300,65 +236,57 @@ export const ImproveProcessConfigSchema = z
|
|
|
300
236
|
...DISTILL_PROCESS_FIELDS,
|
|
301
237
|
...CONSOLIDATE_PROCESS_FIELDS,
|
|
302
238
|
...MEMORY_INFERENCE_PROCESS_FIELDS,
|
|
303
|
-
...GRAPH_EXTRACTION_PROCESS_FIELDS,
|
|
304
239
|
...EXTRACT_PROCESS_FIELDS,
|
|
305
240
|
...TRIAGE_PROCESS_FIELDS,
|
|
306
241
|
...PROACTIVE_MAINTENANCE_PROCESS_FIELDS,
|
|
307
242
|
})
|
|
308
|
-
.passthrough()
|
|
309
|
-
.superRefine(checkRetiredProcessKeys);
|
|
243
|
+
.passthrough();
|
|
310
244
|
/** `processes.reflect` — narrow per-process schema (WI-9.6). */
|
|
311
245
|
export const ReflectProcessConfigSchema = z
|
|
312
246
|
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...REFLECT_PROCESS_FIELDS })
|
|
313
|
-
.passthrough()
|
|
314
|
-
.superRefine(checkRetiredProcessKeys);
|
|
247
|
+
.passthrough();
|
|
315
248
|
/** `processes.distill` — narrow per-process schema (WI-9.6). */
|
|
316
249
|
export const DistillProcessConfigSchema = z
|
|
317
250
|
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...DISTILL_PROCESS_FIELDS })
|
|
318
251
|
.passthrough()
|
|
319
|
-
.superRefine(
|
|
252
|
+
.superRefine(rejectExcludeRefPrefixesOutsideReflect);
|
|
320
253
|
/** `processes.consolidate` — narrow per-process schema (WI-9.6). */
|
|
321
254
|
export const ConsolidateProcessConfigSchema = z
|
|
322
255
|
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...CONSOLIDATE_PROCESS_FIELDS })
|
|
323
256
|
.passthrough()
|
|
324
|
-
.superRefine(
|
|
257
|
+
.superRefine(rejectExcludeRefPrefixesOutsideReflect);
|
|
325
258
|
/** `processes.memoryInference` — narrow per-process schema (WI-9.6). */
|
|
326
259
|
export const MemoryInferenceProcessConfigSchema = z
|
|
327
260
|
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...MEMORY_INFERENCE_PROCESS_FIELDS })
|
|
328
|
-
.passthrough()
|
|
329
|
-
.superRefine(checkRetiredProcessKeys);
|
|
330
|
-
/** `processes.graphExtraction` — narrow per-process schema (WI-9.6). */
|
|
331
|
-
export const GraphExtractionProcessConfigSchema = z
|
|
332
|
-
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...GRAPH_EXTRACTION_PROCESS_FIELDS })
|
|
333
|
-
.passthrough()
|
|
334
|
-
.superRefine(checkRetiredProcessKeys);
|
|
261
|
+
.passthrough();
|
|
335
262
|
/** `processes.extract` — narrow per-process schema (WI-9.6). */
|
|
336
263
|
export const ExtractProcessConfigSchema = z
|
|
337
264
|
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...EXTRACT_PROCESS_FIELDS })
|
|
338
|
-
.passthrough()
|
|
339
|
-
.superRefine(checkRetiredProcessKeys);
|
|
265
|
+
.passthrough();
|
|
340
266
|
/** `processes.validation` — narrow per-process schema (WI-9.6); no extra fields beyond the shared base. */
|
|
341
|
-
export const ValidationProcessConfigSchema = z
|
|
342
|
-
.object({ ...IMPROVE_PROCESS_BASE_FIELDS })
|
|
343
|
-
.passthrough()
|
|
344
|
-
.superRefine(checkRetiredProcessKeys);
|
|
267
|
+
export const ValidationProcessConfigSchema = z.object({ ...IMPROVE_PROCESS_BASE_FIELDS }).passthrough();
|
|
345
268
|
/** `processes.triage` — narrow per-process schema (WI-9.6). */
|
|
346
269
|
export const TriageProcessConfigSchema = z
|
|
347
270
|
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...TRIAGE_PROCESS_FIELDS })
|
|
348
|
-
.passthrough()
|
|
349
|
-
.superRefine(checkRetiredProcessKeys);
|
|
271
|
+
.passthrough();
|
|
350
272
|
/** `processes.proactiveMaintenance` — narrow per-process schema (WI-9.6). */
|
|
351
273
|
export const ProactiveMaintenanceProcessConfigSchema = z
|
|
352
274
|
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...PROACTIVE_MAINTENANCE_PROCESS_FIELDS })
|
|
353
|
-
.passthrough()
|
|
354
|
-
|
|
275
|
+
.passthrough();
|
|
276
|
+
/**
|
|
277
|
+
* Process names that once had a dedicated schema and are now gone. Setting
|
|
278
|
+
* one, even with `enabled: true`, is tolerated rather than rejected by the
|
|
279
|
+
* "unknown enabled process" check below — an old config must keep loading
|
|
280
|
+
* (AGENTS.md "Reading persisted data"). `graphExtraction`: the LLM
|
|
281
|
+
* entity-graph extraction it ran was retired in 0.9.17-alpha.9.
|
|
282
|
+
*/
|
|
283
|
+
const RETIRED_PROCESS_NAMES = new Set(["graphExtraction"]);
|
|
355
284
|
const ImproveProfileProcessesSchema = z
|
|
356
285
|
.object({
|
|
357
286
|
reflect: ReflectProcessConfigSchema.optional(),
|
|
358
287
|
distill: DistillProcessConfigSchema.optional(),
|
|
359
288
|
consolidate: ConsolidateProcessConfigSchema.optional(),
|
|
360
289
|
memoryInference: MemoryInferenceProcessConfigSchema.optional(),
|
|
361
|
-
graphExtraction: GraphExtractionProcessConfigSchema.optional(),
|
|
362
290
|
extract: ExtractProcessConfigSchema.optional(),
|
|
363
291
|
validation: ValidationProcessConfigSchema.optional(),
|
|
364
292
|
triage: TriageProcessConfigSchema.optional(),
|
|
@@ -381,6 +309,7 @@ const ImproveProfileProcessesSchema = z
|
|
|
381
309
|
}
|
|
382
310
|
for (const [name, process] of Object.entries(val)) {
|
|
383
311
|
if (!(name in IMPROVE_PROCESS_ENGINE_CAPABILITIES) &&
|
|
312
|
+
!RETIRED_PROCESS_NAMES.has(name) &&
|
|
384
313
|
process !== null &&
|
|
385
314
|
typeof process === "object" &&
|
|
386
315
|
process.enabled === true) {
|
|
@@ -2,20 +2,14 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* Top-level `improve` config section (
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Top-level `improve` config section (salience, state GC, strategies). Retired
|
|
6
|
+
* keys (`salience.replayBudget`, `collapseDetector`, `utilityDecay`) are
|
|
7
|
+
* tolerated as unknown keys.
|
|
8
8
|
*/
|
|
9
9
|
import { z } from "zod";
|
|
10
10
|
import { ImproveProfileConfigSchema } from "./improve-processes.js";
|
|
11
11
|
import { engineName, nonNegativeNumber } from "./primitives.js";
|
|
12
|
-
// ── Improve top-level (
|
|
13
|
-
const ImproveUtilityDecaySchema = z
|
|
14
|
-
.object({
|
|
15
|
-
halfLifeDays: z.number().finite().min(0.1).optional(),
|
|
16
|
-
feedbackStabilityBoost: z.number().finite().min(1).optional(),
|
|
17
|
-
})
|
|
18
|
-
.passthrough();
|
|
12
|
+
// ── Improve top-level (event retention, salience, state GC) ────────────────
|
|
19
13
|
const ImproveSalienceSchema = z
|
|
20
14
|
.object({
|
|
21
15
|
/**
|
|
@@ -34,36 +28,6 @@ const ImproveSalienceSchema = z
|
|
|
34
28
|
* Default 0.75. Set to 1.0 to disable the lane entirely.
|
|
35
29
|
*/
|
|
36
30
|
salienceThreshold: z.number().min(0).max(1).optional(),
|
|
37
|
-
/**
|
|
38
|
-
* Per-run additive replay budget (#610). Up to this many top-salience refs are
|
|
39
|
-
* revisited even with no reactive signal and regardless of cooldown. Additive
|
|
40
|
-
* on top of --limit. Default 0 = no replay.
|
|
41
|
-
*/
|
|
42
|
-
replayBudget: z.number().int().min(0).optional(),
|
|
43
|
-
})
|
|
44
|
-
.passthrough();
|
|
45
|
-
// R5 — longitudinal collapse detector (observe-only; deterministic,
|
|
46
|
-
// fail-open, runs only on cycles where consolidate did work).
|
|
47
|
-
// Default ON; opt out via `improve.collapseDetector.enabled: false`.
|
|
48
|
-
// See docs/architecture/specs/improve-collapse-churn-detector-design.md.
|
|
49
|
-
// The design's CHURN alert class was removed (never fired in production —
|
|
50
|
-
// its accepted-change-volume input was always a hardcoded 0), so this schema
|
|
51
|
-
// no longer carries `churnMinAcceptedActions`.
|
|
52
|
-
const ImproveCollapseDetectorSchema = z
|
|
53
|
-
.object({
|
|
54
|
-
enabled: z.boolean().optional(),
|
|
55
|
-
// Canary set size minted on first run (owner-approved 30–50 range; default 40).
|
|
56
|
-
canaryCount: z.number().int().min(3).max(200).optional(),
|
|
57
|
-
// Top-K cutoff for canary recall/nDCG (default 10).
|
|
58
|
-
k: z.number().int().min(1).max(100).optional(),
|
|
59
|
-
// Trend window in qualifying cycles (default 5).
|
|
60
|
-
windowCycles: z.number().int().min(2).max(50).optional(),
|
|
61
|
-
// Absolute mean-recall drop vs window median that fires collapse (default 0.15).
|
|
62
|
-
recallDropThreshold: z.number().min(0).max(1).optional(),
|
|
63
|
-
// distinct-content-ratio decline over the window that fires collapse (default 0.05).
|
|
64
|
-
entropyDropThreshold: z.number().min(0).max(1).optional(),
|
|
65
|
-
// improve_cycle_metrics retention (default 365 days, owner-approved).
|
|
66
|
-
retentionDays: z.number().int().min(1).optional(),
|
|
67
31
|
})
|
|
68
32
|
.passthrough();
|
|
69
33
|
// #733 — orphan-GC pass (Workstream C, lean by design: one config gate).
|
|
@@ -85,10 +49,8 @@ const ImproveStateGcSchema = z
|
|
|
85
49
|
export const ImproveConfigSchema = z
|
|
86
50
|
.object({
|
|
87
51
|
strategies: z.record(engineName, ImproveProfileConfigSchema).optional(),
|
|
88
|
-
utilityDecay: ImproveUtilityDecaySchema.optional(),
|
|
89
52
|
eventRetentionDays: nonNegativeNumber.optional(),
|
|
90
53
|
salience: ImproveSalienceSchema.optional(),
|
|
91
|
-
collapseDetector: ImproveCollapseDetectorSchema.optional(),
|
|
92
54
|
stateGc: ImproveStateGcSchema.optional(),
|
|
93
55
|
})
|
|
94
56
|
.passthrough();
|
|
@@ -10,19 +10,6 @@ import { z } from "zod";
|
|
|
10
10
|
import { warnOnce } from "../../warn.js";
|
|
11
11
|
import { engineName, LlmInvocationOverridesSchema, nonEmptyString, positiveInt } from "./primitives.js";
|
|
12
12
|
// ── Index / per-pass ────────────────────────────────────────────────────────
|
|
13
|
-
//
|
|
14
|
-
// WI-9.6c: `graphExtractionIncludeTypes` is no longer validated against a
|
|
15
|
-
// hardcoded allowlist (the prior GRAPH_EXTRACTION_INCLUDE_TYPES_ALLOWED,
|
|
16
|
-
// which included a stale `wiki` entry and was already missing `fact` from the
|
|
17
|
-
// runtime consumer's own list — the schema-level allowlist had drifted from
|
|
18
|
-
// reality). Accept-any until Chunk 2 sources a real type list from adapter
|
|
19
|
-
// metadata: the field is now an array of arbitrary non-empty strings.
|
|
20
|
-
// Runtime consumers already handle unknown/unsupported type strings
|
|
21
|
-
// gracefully — src/indexer/graph/graph-extraction.ts's
|
|
22
|
-
// `SUPPORTED_GRAPH_EXTRACTION_INCLUDE_TYPES` set (and `collectEligibleFiles`)
|
|
23
|
-
// silently skips any type it doesn't recognize (no placement entry ⇒ zero
|
|
24
|
-
// eligible files for that type; no crash). This is a permissive-direction
|
|
25
|
-
// behavior change: configs with a previously-rejected type string now parse.
|
|
26
13
|
const INDEX_PASS_RETIRED_KEYS = new Set([
|
|
27
14
|
"endpoint",
|
|
28
15
|
"provider",
|
|
@@ -32,22 +19,11 @@ const INDEX_PASS_RETIRED_KEYS = new Set([
|
|
|
32
19
|
"maxTokens",
|
|
33
20
|
"capabilities",
|
|
34
21
|
]);
|
|
35
|
-
const INDEX_PASS_KNOWN_KEYS = new Set([
|
|
36
|
-
"engine",
|
|
37
|
-
"model",
|
|
38
|
-
"timeoutMs",
|
|
39
|
-
"enabled",
|
|
40
|
-
"llm",
|
|
41
|
-
"graphExtractionBatchSize",
|
|
42
|
-
"graphExtractionIncludeTypes",
|
|
43
|
-
"lazyGraphExtraction",
|
|
44
|
-
]);
|
|
45
22
|
/**
|
|
46
|
-
* Per-pass `index.<pass>` entry.
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* string` strings — keeps `akm` startup errors actionable.
|
|
23
|
+
* Per-pass `index.<pass>` entry. The preprocess names and drops the retired
|
|
24
|
+
* engine settings above with a targeted message. Any other unknown key is kept
|
|
25
|
+
* and named once by the config loader's schema walk, like an unknown key
|
|
26
|
+
* anywhere else in config.
|
|
51
27
|
*/
|
|
52
28
|
export const IndexPassConfigSchema = z.preprocess((raw, ctx) => {
|
|
53
29
|
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
@@ -62,13 +38,6 @@ export const IndexPassConfigSchema = z.preprocess((raw, ctx) => {
|
|
|
62
38
|
cleaned ??= { ...obj };
|
|
63
39
|
delete cleaned[key];
|
|
64
40
|
}
|
|
65
|
-
else if (!INDEX_PASS_KNOWN_KEYS.has(key)) {
|
|
66
|
-
warnOnce(`index-pass:unknown:${dotted}`, `Unknown key \`${dotted}\` ignored. Per-pass entries support ` +
|
|
67
|
-
"`engine`, `model`, `timeoutMs`, `enabled`, `llm`, `graphExtractionBatchSize`, " +
|
|
68
|
-
"`graphExtractionIncludeTypes`, and `lazyGraphExtraction`.");
|
|
69
|
-
cleaned ??= { ...obj };
|
|
70
|
-
delete cleaned[key];
|
|
71
|
-
}
|
|
72
41
|
}
|
|
73
42
|
return cleaned ?? raw;
|
|
74
43
|
}, z
|
|
@@ -78,13 +47,8 @@ export const IndexPassConfigSchema = z.preprocess((raw, ctx) => {
|
|
|
78
47
|
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
79
48
|
enabled: z.boolean().optional(),
|
|
80
49
|
llm: LlmInvocationOverridesSchema.optional(),
|
|
81
|
-
graphExtractionBatchSize: positiveInt.optional(),
|
|
82
|
-
// Accept-any until Chunk 2 (WI-9.6c) — no longer enum-restricted.
|
|
83
|
-
graphExtractionIncludeTypes: z.array(z.string().min(1)).nonempty().optional(),
|
|
84
|
-
lazyGraphExtraction: z.boolean().optional(),
|
|
85
50
|
})
|
|
86
51
|
.passthrough());
|
|
87
|
-
const MetadataEnhanceSchema = z.object({ enabled: z.boolean().optional() }).passthrough();
|
|
88
52
|
const IndexDefaultsSchema = z
|
|
89
53
|
.object({
|
|
90
54
|
engine: engineName.optional(),
|
|
@@ -95,16 +59,14 @@ const IndexDefaultsSchema = z
|
|
|
95
59
|
.passthrough();
|
|
96
60
|
/**
|
|
97
61
|
* Index config is a union of reserved feature sections and per-pass entries.
|
|
98
|
-
* Passthrough so per-pass entries (keyed by arbitrary pass names like
|
|
99
|
-
* `
|
|
62
|
+
* Passthrough so per-pass entries (keyed by arbitrary pass names like
|
|
63
|
+
* `memory`, or a retired one like `graph`) can live next to the reserved keys.
|
|
100
64
|
* The outer preprocess emits the legacy parser's actionable error messages
|
|
101
65
|
* for the two most common type-shape mistakes:
|
|
102
66
|
* - An array at the `index` block.
|
|
103
67
|
* - A non-object at `index.<passName>`.
|
|
104
|
-
* Inner field validation (
|
|
105
|
-
*
|
|
106
|
-
* `graphExtractionIncludeTypes` accepts arbitrary non-empty strings
|
|
107
|
-
* (WI-9.6c — no hardcoded type allowlist; accept-any until Chunk 2).
|
|
68
|
+
* Inner field validation (invocation overrides, provider-key rejection) is
|
|
69
|
+
* delegated to {@link IndexPassConfigSchema}.
|
|
108
70
|
*/
|
|
109
71
|
const IndexConfigRuntimeSchema = z.preprocess((raw, ctx) => {
|
|
110
72
|
if (raw === undefined || raw === null)
|
|
@@ -112,7 +74,7 @@ const IndexConfigRuntimeSchema = z.preprocess((raw, ctx) => {
|
|
|
112
74
|
if (Array.isArray(raw)) {
|
|
113
75
|
ctx.addIssue({
|
|
114
76
|
code: z.ZodIssueCode.custom,
|
|
115
|
-
message: 'Invalid `index` config: expected an object keyed by pass name (e.g. `{ "
|
|
77
|
+
message: 'Invalid `index` config: expected an object keyed by pass name (e.g. `{ "memory": { "enabled": false } }`).',
|
|
116
78
|
});
|
|
117
79
|
return raw;
|
|
118
80
|
}
|
|
@@ -138,7 +100,6 @@ const IndexConfigRuntimeSchema = z.preprocess((raw, ctx) => {
|
|
|
138
100
|
}, z
|
|
139
101
|
.object({
|
|
140
102
|
defaults: IndexDefaultsSchema.optional(),
|
|
141
|
-
metadataEnhance: MetadataEnhanceSchema.optional(),
|
|
142
103
|
})
|
|
143
104
|
.catchall(IndexPassConfigSchema));
|
|
144
105
|
// The runtime catchall correctly validates arbitrary pass objects, but its
|
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { nonEmptyString } from "./primitives.js";
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
.object({
|
|
9
|
-
|
|
10
|
-
ref
|
|
11
|
-
/** Identity of the configured source this host approved, not merely its mutable bundle name. */
|
|
12
|
-
sourceId: z.string().regex(/^sha256:[0-9a-f]{64}$/),
|
|
13
|
-
})
|
|
14
|
-
.strict();
|
|
15
|
-
/** Absence from this allow-list means disabled. */
|
|
6
|
+
/** A 0.9.17-alpha `{kind, ref, sourceId}` activation, read as its ref. */
|
|
7
|
+
const LegacySchedulerActivationSchema = z
|
|
8
|
+
.object({ ref: nonEmptyString })
|
|
9
|
+
.passthrough()
|
|
10
|
+
.transform((activation) => activation.ref);
|
|
16
11
|
export const SchedulerConfigSchema = z
|
|
17
12
|
.object({
|
|
18
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Fully-qualified refs (`bundle//tasks/x`, `bundle//workflows/y`) this host
|
|
15
|
+
* schedules. Absent when the host has never chosen: `akm task sync` then
|
|
16
|
+
* takes the akm-written rows already installed as the choice and writes it.
|
|
17
|
+
*/
|
|
18
|
+
enabled: z.array(z.union([nonEmptyString, LegacySchedulerActivationSchema])).optional(),
|
|
19
19
|
})
|
|
20
|
-
.
|
|
20
|
+
.passthrough();
|
|
@@ -2,29 +2,15 @@
|
|
|
2
2
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
|
-
* `search` config section
|
|
6
|
-
*
|
|
5
|
+
* `search` config section: default type exclusion and the optional curate
|
|
6
|
+
* reranker.
|
|
7
7
|
*/
|
|
8
8
|
import { z } from "zod";
|
|
9
|
-
import { httpUrl, nonEmptyString,
|
|
9
|
+
import { httpUrl, nonEmptyString, positiveInt, symbolicOrWarnApiKey } from "./primitives.js";
|
|
10
10
|
// ── Search ──────────────────────────────────────────────────────────────────
|
|
11
|
-
const SearchGraphBoostSchema = z
|
|
12
|
-
.object({
|
|
13
|
-
directBoostPerEntity: nonNegativeNumber.optional(),
|
|
14
|
-
directBoostCap: nonNegativeNumber.optional(),
|
|
15
|
-
hopBoostPerEntity: nonNegativeNumber.optional(),
|
|
16
|
-
hopBoostCap: nonNegativeNumber.optional(),
|
|
17
|
-
/** Hard-capped at 3; values > 3 hard-error so users see the typo. */
|
|
18
|
-
maxHops: positiveInt.max(3).optional(),
|
|
19
|
-
/** Only "blend" is exercised; "off"/"multiply" were never set in practice and were removed. */
|
|
20
|
-
confidenceMode: z.enum(["blend"]).default("blend").optional(),
|
|
21
|
-
/** Range [0, 1]; values > 1 hard-error (no silent clamp). */
|
|
22
|
-
confidenceWeight: z.number().finite().min(0).max(1).default(0.2).optional(),
|
|
23
|
-
})
|
|
24
|
-
.passthrough();
|
|
25
11
|
/**
|
|
26
12
|
* `search.curateRerank` (#951) — an optional cross-encoder rerank pass over
|
|
27
|
-
* `akm curate`'s
|
|
13
|
+
* `akm curate`'s top fused candidates.
|
|
28
14
|
*
|
|
29
15
|
* Deliberately its own small config arm rather than a third member of the
|
|
30
16
|
* `engines` map (`EngineConfigSchema` in ./engines.ts): that union's "llm" /
|
|
@@ -48,15 +34,13 @@ export const CurateRerankConfigSchema = z
|
|
|
48
34
|
model: nonEmptyString.optional(),
|
|
49
35
|
apiKey: symbolicOrWarnApiKey("search.curateRerank.apiKey").optional(),
|
|
50
36
|
timeoutMs: positiveInt.optional(),
|
|
51
|
-
/** How many of
|
|
37
|
+
/** How many of the top fused search candidates curate sends to the reranker. Default 30. */
|
|
52
38
|
topN: positiveInt.max(50).optional(),
|
|
53
39
|
})
|
|
54
|
-
.
|
|
40
|
+
.passthrough();
|
|
55
41
|
export const SearchConfigSchema = z
|
|
56
42
|
.object({
|
|
57
|
-
minScore: nonNegativeNumber.optional(),
|
|
58
43
|
defaultExcludeTypes: z.array(nonEmptyString).optional(),
|
|
59
|
-
graphBoost: SearchGraphBoostSchema.optional(),
|
|
60
44
|
curateRerank: CurateRerankConfigSchema.optional(),
|
|
61
45
|
})
|
|
62
46
|
.passthrough();
|
|
@@ -271,7 +271,6 @@ export function resolveSecretWriteTarget(ref, writeTarget, create) {
|
|
|
271
271
|
*/
|
|
272
272
|
export function withEnvSecretWrite(target, ref, op, paths, mutate) {
|
|
273
273
|
return withWriteTargetMutation(target, paths, {
|
|
274
|
-
ignored: "local-only",
|
|
275
274
|
purpose: `${ref.type}-${op.toLowerCase()}`,
|
|
276
275
|
message: `${op} ${formatRefForMessage({ type: ref.type, name: ref.name, origin: target.source.name })}`,
|
|
277
276
|
}, mutate);
|