akm-cli 0.9.0-rc.0 → 0.9.0-rc.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1283 -22
- package/README.md +62 -37
- package/SECURITY.md +46 -31
- package/dist/akm +162 -38
- package/dist/akm-migrate +44 -0
- package/dist/assets/backends/schtasks-template.xml +2 -1
- package/dist/assets/hints/cli-hints-full.md +268 -118
- package/dist/assets/hints/cli-hints-short.md +87 -24
- package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
- package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
- package/dist/assets/improve-strategies/frequent.json +15 -0
- package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
- package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
- package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
- package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
- package/dist/assets/improve-strategies/reflect-distill.json +30 -0
- package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
- package/dist/assets/prompts/consolidate-system.md +5 -5
- package/dist/assets/prompts/extract-session.md +2 -6
- package/dist/assets/prompts/memory-infer-user.md +2 -3
- package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
- package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
- package/dist/assets/prompts/reflect-output-repair.md +3 -0
- package/dist/assets/prompts/workflow-unit-preamble.md +26 -0
- package/dist/assets/stash-skeleton/README.md +38 -10
- package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
- package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
- package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
- package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
- package/dist/assets/tasks/core/extract.yml +3 -2
- package/dist/assets/tasks/core/improve.yml +2 -1
- package/dist/assets/tasks/core/index-refresh.yml +1 -0
- package/dist/assets/tasks/core/sync.yml +1 -0
- package/dist/assets/tasks/core/version-check.yml +2 -1
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
- package/dist/assets/templates/html/health.html +5 -4
- package/dist/assets/workflows/workflow-template.md +31 -15
- package/dist/cli/invocation.js +279 -0
- package/dist/cli/parse-args.js +5 -90
- package/dist/cli/retired-commands.js +78 -0
- package/dist/cli/shared.js +158 -48
- package/dist/cli-node.mjs +2 -1
- package/dist/cli.js +747 -293
- package/dist/commands/agent/agent-dispatch.js +19 -18
- package/dist/commands/agent/agent-support.js +0 -24
- package/dist/commands/agent/contribute-cli.js +43 -97
- package/dist/commands/completions.js +80 -23
- package/dist/commands/config-cli.js +44 -281
- package/dist/commands/env/env-binding.js +99 -0
- package/dist/commands/env/env-cli.js +84 -224
- package/dist/commands/env/env.js +12 -163
- package/dist/commands/env/marker-path.js +6 -0
- package/dist/commands/env/secret-cli.js +45 -61
- package/dist/commands/env/secret.js +32 -62
- package/dist/commands/feedback-cli.js +179 -85
- package/dist/commands/health/accept-rate.js +58 -0
- package/dist/commands/health/advisories.js +7 -8
- package/dist/commands/health/checks.js +279 -94
- package/dist/commands/health/html-report.js +197 -578
- package/dist/commands/health/improve-metrics.js +277 -246
- package/dist/commands/health/llm-usage.js +19 -19
- package/dist/commands/health/md-report.js +16 -7
- package/dist/commands/health/metrics.js +67 -32
- package/dist/commands/health/renderers.js +47 -0
- package/dist/commands/health/report-view-model.js +508 -0
- package/dist/commands/health/stash-exposure.js +1 -1
- package/dist/commands/health/surfaces.js +16 -56
- package/dist/commands/health/task-runs.js +3 -67
- package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
- package/dist/commands/health/types-improve.js +29 -0
- package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
- package/dist/commands/health/types-result.js +7 -0
- package/dist/commands/health/types-runs.js +4 -0
- package/dist/commands/health/types-session-log.js +4 -0
- package/dist/commands/health/types-windows.js +4 -0
- package/dist/commands/health/types.js +26 -21
- package/dist/commands/health/windows.js +2 -3
- package/dist/commands/health.js +296 -167
- package/dist/commands/improve/anti-collapse.js +5 -5
- package/dist/commands/improve/autonomy-gate.js +68 -0
- package/dist/commands/improve/collapse-detector.js +65 -52
- package/dist/commands/improve/consolidate/chunking.js +9 -7
- package/dist/commands/improve/consolidate/eligibility.js +1 -23
- package/dist/commands/improve/consolidate/merge.js +4 -0
- package/dist/commands/improve/consolidate.js +454 -1354
- package/dist/commands/improve/content-hash.js +39 -0
- package/dist/commands/improve/distill/content-repair.js +4 -10
- package/dist/commands/improve/distill/promote-memory.js +89 -64
- package/dist/commands/improve/distill/quality-gate.js +118 -42
- package/dist/commands/improve/distill-guards.js +1 -1
- package/dist/commands/improve/distill-promotion-policy.js +33 -888
- package/dist/commands/improve/distill.js +607 -363
- package/dist/commands/improve/eligibility.js +165 -79
- package/dist/commands/improve/extract-cli.js +35 -126
- package/dist/commands/improve/extract-prompt.js +6 -35
- package/dist/commands/improve/extract.js +640 -391
- package/dist/commands/improve/feedback-valence.js +2 -12
- package/dist/commands/improve/improve-cli.js +134 -135
- package/dist/commands/improve/improve-result-file.js +30 -50
- package/dist/commands/improve/improve-run-types.js +4 -0
- package/dist/commands/improve/improve-strategies.js +135 -0
- package/dist/commands/improve/improve.js +904 -701
- package/dist/commands/improve/locks.js +64 -111
- package/dist/commands/improve/loop-stages.js +1110 -923
- package/dist/commands/improve/memory/derived-ref.js +124 -0
- package/dist/commands/improve/memory/memory-belief.js +79 -7
- package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
- package/dist/commands/improve/memory/memory-improve.js +25 -37
- package/dist/commands/improve/outcome-loop.js +25 -88
- package/dist/commands/improve/preparation.js +1034 -813
- package/dist/commands/improve/proactive-maintenance.js +34 -9
- package/dist/commands/improve/proposal-envelope.js +31 -0
- package/dist/commands/improve/reflect.js +983 -794
- package/dist/commands/improve/run-context.js +119 -0
- package/dist/commands/improve/salience.js +24 -127
- package/dist/commands/improve/session-asset.js +7 -3
- package/dist/commands/improve/shared.js +14 -34
- package/dist/commands/improve/source-identity.js +28 -0
- package/dist/commands/improve/triage.js +20 -17
- package/dist/commands/lint/base-linter.js +340 -313
- package/dist/commands/lint/env-key-rules.js +31 -47
- package/dist/commands/lint/index.js +185 -30
- package/dist/commands/{events.js → log.js} +28 -38
- package/dist/commands/migrate-cli.js +54 -0
- package/dist/commands/migration-tool.js +55 -0
- package/dist/commands/observability-cli.js +70 -208
- package/dist/commands/proposal/diff-format.js +50 -0
- package/dist/commands/proposal/drain-policies.js +0 -6
- package/dist/commands/proposal/drain.js +91 -40
- package/dist/commands/proposal/proposal-cli.js +134 -132
- package/dist/commands/proposal/proposal-types.js +56 -0
- package/dist/commands/proposal/proposal.js +83 -65
- package/dist/commands/proposal/propose-cli.js +88 -0
- package/dist/commands/proposal/propose.js +105 -88
- package/dist/commands/proposal/repository.js +1303 -278
- package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
- package/dist/commands/proposal/validators/proposal-validators.js +61 -12
- package/dist/commands/proposal/validators/proposals.js +6 -8
- package/dist/commands/read/curate.js +78 -73
- package/dist/commands/read/knowledge.js +510 -13
- package/dist/commands/read/registry-search.js +2 -2
- package/dist/commands/read/remember-cli.js +84 -15
- package/dist/commands/read/search-cli.js +203 -96
- package/dist/commands/read/search.js +126 -94
- package/dist/commands/read/show.js +226 -250
- package/dist/commands/registry-cli.js +34 -60
- package/dist/commands/remember.js +18 -57
- package/dist/commands/sources/add-cli.js +104 -49
- package/dist/commands/sources/bundle-cli.js +166 -0
- package/dist/commands/sources/bundle-config-ops.js +63 -0
- package/dist/commands/sources/info.js +27 -15
- package/dist/commands/sources/init.js +30 -40
- package/dist/commands/sources/installed-stashes.js +469 -172
- package/dist/commands/sources/migration-help.js +7 -4
- package/dist/commands/sources/schema-repair.js +10 -9
- package/dist/commands/sources/self-update.js +182 -121
- package/dist/commands/sources/source-add.js +169 -178
- package/dist/commands/sources/source-clone.js +144 -41
- package/dist/commands/sources/source-manage.js +94 -59
- package/dist/commands/sources/sources-cli.js +64 -205
- package/dist/commands/sources/stash-cli.js +91 -54
- package/dist/commands/sources/stash-skeleton.js +1 -1
- package/dist/commands/tasks/tasks-cli.js +106 -104
- package/dist/commands/tasks/tasks.js +445 -262
- package/dist/commands/workflow-cli.js +232 -121
- package/dist/core/action-contributors.js +1 -1
- package/dist/core/activation-policy.js +49 -0
- package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
- package/dist/core/adapter/adapters/akm-adapter.js +528 -0
- package/dist/core/adapter/adapters/akm-lint.js +392 -0
- package/dist/core/adapter/adapters/akm-metadata.js +387 -0
- package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
- package/dist/core/adapter/adapters/claude-adapter.js +61 -0
- package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
- package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
- package/dist/core/adapter/adapters/index.js +80 -0
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
- package/dist/core/adapter/adapters/okf-adapter.js +391 -0
- package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
- package/dist/core/adapter/adapters/shared.js +286 -0
- package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
- package/dist/core/adapter/bundle-adapter.js +4 -0
- package/dist/core/adapter/detect-adapter.js +17 -0
- package/dist/core/adapter/recognize-match.js +44 -0
- package/dist/core/adapter/registry.js +56 -0
- package/dist/core/adapter/types.js +4 -0
- package/dist/core/asset/akm-markdown.js +30 -0
- package/dist/core/asset/asset-placement.js +243 -0
- package/dist/core/asset/asset-ref.js +110 -79
- package/dist/core/asset/asset-serialize.js +20 -0
- package/dist/core/asset/frontmatter.js +28 -12
- package/dist/core/asset/markdown.js +40 -51
- package/dist/core/asset/resolve-ref.js +274 -0
- package/dist/core/asset/stash-meta.js +2 -2
- package/dist/core/bundle-id.js +51 -0
- package/dist/core/common.js +281 -86
- package/dist/core/config/config-io.js +42 -128
- package/dist/core/config/config-schema.js +233 -834
- package/dist/core/config/config-sources.js +162 -39
- package/dist/core/config/config-types.js +16 -11
- package/dist/core/config/config-version.js +29 -0
- package/dist/core/config/config-walker.js +126 -37
- package/dist/core/config/config.js +154 -331
- package/dist/core/config/deep-merge.js +41 -0
- package/dist/core/config/engine-semantics.js +28 -0
- package/dist/core/config/experimental.js +21 -0
- package/dist/core/config/schema/embedding.js +38 -0
- package/dist/core/config/schema/engines.js +116 -0
- package/dist/core/config/schema/experimental.js +47 -0
- package/dist/core/config/schema/feedback.js +31 -0
- package/dist/core/config/schema/improve-processes.js +389 -0
- package/dist/core/config/schema/improve.js +94 -0
- package/dist/core/config/schema/index-config.js +176 -0
- package/dist/core/config/schema/output.js +18 -0
- package/dist/core/config/schema/primitives.js +94 -0
- package/dist/core/config/schema/search.js +30 -0
- package/dist/core/config/schema/setup.js +18 -0
- package/dist/core/config/schema/sources-bundles.js +169 -0
- package/dist/core/config/schema/workflow.js +29 -0
- package/dist/core/env-secret-ref.js +155 -20
- package/dist/core/errors.js +17 -15
- package/dist/core/events-types.js +4 -0
- package/dist/core/events.js +46 -128
- package/dist/core/extra-params.js +62 -0
- package/dist/core/file-change.js +17 -0
- package/dist/core/file-lock.js +202 -57
- package/dist/core/fs-txn.js +392 -0
- package/dist/core/git-message.js +59 -0
- package/dist/core/improve-result.js +167 -0
- package/dist/core/json-schema.js +142 -0
- package/dist/core/lesson-lint.js +1 -17
- package/dist/core/logs-db.js +1 -1
- package/dist/core/maintenance-barrier.js +135 -0
- package/dist/core/migration-operation.js +44 -0
- package/dist/core/mutation-target.js +78 -0
- package/dist/core/paths.js +22 -25
- package/dist/core/platform.js +10 -0
- package/dist/core/recognition-util.js +128 -0
- package/dist/core/redaction.js +392 -0
- package/dist/core/standards/resolve-standards-context.js +36 -65
- package/dist/core/standards/resolve-stash-standards.js +2 -2
- package/dist/core/standards/resolve-type-conventions.js +5 -5
- package/dist/core/state/migrations.js +242 -11
- package/dist/core/state-db.js +98 -10
- package/dist/core/structured.js +1 -1
- package/dist/core/subprocess.js +303 -0
- package/dist/core/text-truncation.js +9 -5
- package/dist/core/time.js +20 -0
- package/dist/core/type-presentation.js +130 -0
- package/dist/core/warn.js +0 -3
- package/dist/core/write-source.js +834 -118
- package/dist/indexer/bundle-identity-guard.js +92 -0
- package/dist/indexer/db/graph-db.js +1 -25
- package/dist/indexer/db/llm-cache.js +1 -1
- package/dist/indexer/ensure-index.js +30 -9
- package/dist/indexer/graph/graph-boost.js +9 -30
- package/dist/indexer/graph/graph-extraction.js +41 -27
- package/dist/indexer/graph/graph-types.js +4 -0
- package/dist/indexer/index-writer-lock.js +93 -49
- package/dist/indexer/index-written-assets.js +100 -53
- package/dist/indexer/indexer.js +746 -329
- package/dist/indexer/init.js +18 -25
- package/dist/indexer/installations.js +142 -0
- package/dist/indexer/passes/dir-staleness.js +18 -10
- package/dist/indexer/passes/memory-inference.js +25 -15
- package/dist/indexer/passes/metadata.js +412 -243
- package/dist/indexer/scan/doc-to-entry.js +160 -0
- package/dist/indexer/scan/drain-dir.js +134 -0
- package/dist/indexer/search/db-search.js +292 -108
- package/dist/indexer/search/fts-query.js +64 -0
- package/dist/indexer/search/ranking-contributors.js +145 -25
- package/dist/indexer/search/ranking-types.js +4 -0
- package/dist/indexer/search/ranking.js +28 -71
- package/dist/indexer/search/search-attribution.js +67 -0
- package/dist/indexer/search/search-fields.js +18 -3
- package/dist/indexer/search/search-hit-enrichers.js +30 -40
- package/dist/indexer/search/search-source.js +157 -111
- package/dist/indexer/search/semantic-status.js +4 -1
- package/dist/indexer/usage/usage-events.js +10 -30
- package/dist/indexer/walk/file-context.js +3 -45
- package/dist/indexer/walk/matchers.js +42 -34
- package/dist/indexer/walk/path-resolver.js +11 -5
- package/dist/indexer/walk/walker.js +42 -14
- package/dist/integrations/agent/builder-shared.js +7 -0
- package/dist/integrations/agent/builders.js +5 -56
- package/dist/integrations/agent/config.js +3 -143
- package/dist/integrations/agent/detect.js +17 -2
- package/dist/integrations/agent/engine-resolution.js +231 -0
- package/dist/integrations/agent/index.js +1 -2
- package/dist/integrations/agent/model-aliases.js +16 -2
- package/dist/integrations/agent/profiles.js +36 -62
- package/dist/integrations/agent/prompts.js +46 -18
- package/dist/integrations/agent/runner-dispatch.js +93 -4
- package/dist/integrations/agent/runner.js +76 -208
- package/dist/integrations/agent/spawn.js +88 -196
- package/dist/integrations/harnesses/aider/agent-builder.js +114 -0
- package/dist/integrations/harnesses/aider/index.js +48 -0
- package/dist/integrations/harnesses/aider/result-extractor.js +53 -0
- package/dist/integrations/harnesses/amazonq/agent-builder.js +147 -0
- package/dist/integrations/harnesses/amazonq/index.js +45 -0
- package/dist/integrations/harnesses/amazonq/result-extractor.js +48 -0
- package/dist/integrations/harnesses/claude/agent-builder.js +46 -8
- package/dist/integrations/harnesses/claude/config-import.js +1 -3
- package/dist/integrations/harnesses/claude/index.js +24 -35
- package/dist/integrations/harnesses/claude/result-extractor.js +52 -0
- package/dist/integrations/harnesses/claude/session-log.js +27 -75
- package/dist/integrations/harnesses/codex/agent-builder.js +138 -0
- package/dist/integrations/harnesses/codex/index.js +52 -0
- package/dist/integrations/harnesses/codex/result-extractor.js +73 -0
- package/dist/integrations/harnesses/copilot/agent-builder.js +122 -0
- package/dist/integrations/harnesses/copilot/index.js +48 -0
- package/dist/integrations/harnesses/copilot/result-extractor.js +151 -0
- package/dist/integrations/harnesses/gemini/agent-builder.js +120 -0
- package/dist/integrations/harnesses/gemini/index.js +48 -0
- package/dist/integrations/harnesses/gemini/result-extractor.js +121 -0
- package/dist/integrations/harnesses/ids.js +24 -0
- package/dist/integrations/harnesses/index.js +54 -34
- package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
- package/dist/integrations/harnesses/opencode/config-import.js +1 -3
- package/dist/integrations/harnesses/opencode/index.js +14 -32
- package/dist/integrations/harnesses/opencode/session-log.js +67 -125
- package/dist/integrations/harnesses/opencode-sdk/harness.js +51 -0
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +681 -108
- package/dist/integrations/harnesses/openhands/agent-builder.js +128 -0
- package/dist/integrations/harnesses/openhands/index.js +48 -0
- package/dist/integrations/harnesses/openhands/result-extractor.js +103 -0
- package/dist/integrations/harnesses/pi/agent-builder.js +97 -0
- package/dist/integrations/harnesses/pi/index.js +45 -0
- package/dist/integrations/harnesses/pi/result-extractor.js +135 -0
- package/dist/integrations/harnesses/shared.js +17 -0
- package/dist/integrations/harnesses/types.js +43 -32
- package/dist/integrations/lockfile.js +211 -24
- package/dist/integrations/session-logs/index.js +36 -39
- package/dist/integrations/session-logs/provider-base.js +113 -0
- package/dist/llm/client.js +182 -110
- package/dist/llm/embedders/deterministic.js +2 -2
- package/dist/llm/embedders/remote.js +21 -9
- package/dist/llm/feature-gate.js +17 -57
- package/dist/llm/graph-extract.js +12 -13
- package/dist/llm/index-passes.js +8 -42
- package/dist/llm/memory-infer.js +144 -1
- package/dist/llm/metadata-enhance.js +45 -30
- package/dist/llm/structured-call.js +16 -8
- package/dist/llm/usage-persist.js +30 -5
- package/dist/llm/usage-telemetry.js +59 -6
- package/dist/output/cli-hints.js +1 -2
- package/dist/output/command-registry.js +27 -0
- package/dist/output/context.js +22 -7
- package/dist/output/format-exempt.js +80 -0
- package/dist/output/generic-render.js +251 -0
- package/dist/output/html-render.js +11 -16
- package/dist/output/render-registry.js +57 -0
- package/dist/output/renderers.js +14 -279
- package/dist/output/shapes/curate.js +10 -1
- package/dist/output/shapes/events.js +12 -7
- package/dist/output/shapes/helpers.js +58 -84
- package/dist/output/shapes/passthrough.js +11 -39
- package/dist/output/shapes/proposal/producer.js +15 -7
- package/dist/output/shapes/registry.js +12 -6
- package/dist/output/shapes.js +0 -9
- package/dist/output/text/{init.js → bundle-create.js} +3 -1
- package/dist/output/text/bundle-show.js +7 -0
- package/dist/output/text/command-format.js +562 -0
- package/dist/output/text/env.js +1 -3
- package/dist/output/text/events.js +8 -7
- package/dist/output/text/helpers.js +15 -1164
- package/dist/output/text/proposal/producer.js +4 -2
- package/dist/output/text/proposal-format.js +202 -0
- package/dist/output/text/registry-commands.js +1 -2
- package/dist/output/text/registry.js +12 -6
- package/dist/output/text/show-directives.js +117 -0
- package/dist/output/text/show-format.js +103 -0
- package/dist/output/text/sync.js +5 -0
- package/dist/output/text/workflow-format.js +332 -0
- package/dist/output/text/workflow.js +3 -2
- package/dist/output/text.js +10 -19
- package/dist/registry/factory.js +4 -6
- package/dist/registry/origin-resolve.js +16 -27
- package/dist/registry/providers/skills-sh.js +3 -3
- package/dist/registry/providers/static-index.js +15 -25
- package/dist/registry/resolve.js +43 -94
- package/dist/registry/semver.js +43 -0
- package/dist/runtime.js +81 -12
- package/dist/scripts/akm-migrate.js +35529 -0
- package/dist/setup/detect.js +5 -7
- package/dist/setup/detected-engines.js +136 -0
- package/dist/setup/engine-config.js +100 -0
- package/dist/setup/registry-stash-loader.js +3 -3
- package/dist/setup/semantic-assets.js +12 -9
- package/dist/setup/setup.js +444 -208
- package/dist/setup/steps/connection-shared.js +120 -0
- package/dist/setup/steps/connection.js +108 -305
- package/dist/setup/steps/platforms.js +13 -12
- package/dist/setup/steps/semantic.js +15 -3
- package/dist/setup/steps/sources.js +21 -15
- package/dist/setup/steps/stashdir.js +6 -4
- package/dist/setup/steps/tasks.js +236 -119
- package/dist/setup/steps.js +3 -2
- package/dist/sources/freshness.js +39 -0
- package/dist/sources/provider-factory.js +11 -17
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +278 -34
- package/dist/sources/providers/git-provider.js +54 -56
- package/dist/sources/providers/git-stash.js +420 -91
- package/dist/sources/providers/git.js +2 -2
- package/dist/sources/providers/npm.js +16 -19
- package/dist/sources/providers/provider-utils.js +47 -22
- package/dist/sources/providers/sync-from-ref.js +3 -9
- package/dist/sources/providers/website.js +2 -2
- package/dist/sources/resolve.js +11 -10
- package/dist/sources/snapshot-fetchers/types.js +4 -0
- package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
- package/dist/storage/database.js +60 -4
- package/dist/storage/engines/sqlite-migrations.js +156 -5
- package/dist/storage/locations.js +1 -2
- package/dist/storage/repositories/canaries-repository.js +1 -1
- package/dist/storage/repositories/events-repository.js +51 -11
- package/dist/storage/repositories/improve-runs-repository.js +6 -32
- package/dist/storage/repositories/index-connection.js +79 -0
- package/dist/storage/repositories/index-db.js +4 -3
- package/dist/storage/repositories/index-entries-repository.js +863 -0
- package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
- package/dist/storage/repositories/index-entry-types.js +4 -0
- package/dist/storage/repositories/index-fts-repository.js +167 -0
- package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
- package/dist/storage/repositories/index-meta-repository.js +49 -0
- package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
- package/dist/storage/repositories/index-sql.js +12 -0
- package/dist/storage/repositories/index-utility-repository.js +356 -0
- package/dist/storage/repositories/index-vec-repository.js +250 -0
- package/dist/storage/repositories/outcome-repository.js +119 -0
- package/dist/storage/repositories/proposals-repository.js +317 -75
- package/dist/storage/repositories/registry-cache.js +1 -1
- package/dist/storage/repositories/salience-repository.js +172 -0
- package/dist/storage/repositories/task-history-repository.js +110 -3
- package/dist/storage/repositories/workflow-runs-repository.js +240 -19
- package/dist/tasks/backends/cron.js +169 -46
- package/dist/tasks/backends/exec-utils.js +76 -3
- package/dist/tasks/backends/index.js +6 -9
- package/dist/tasks/backends/launchd.js +292 -55
- package/dist/tasks/backends/schtasks.js +557 -70
- package/dist/tasks/backends/types.js +4 -0
- package/dist/tasks/command-executable.js +93 -0
- package/dist/tasks/embedded.js +56 -38
- package/dist/tasks/parser.js +156 -64
- package/dist/tasks/resolve-akm-bin.js +144 -51
- package/dist/tasks/runner.js +377 -209
- package/dist/tasks/schedule.js +108 -19
- package/dist/tasks/scheduler-invocation.js +296 -0
- package/dist/tasks/schema.js +1 -1
- package/dist/tasks/task-id.js +35 -0
- package/dist/tasks/validator.js +30 -16
- package/dist/text-import-hook.mjs +1 -1
- package/dist/workflows/authoring/authoring.js +104 -43
- package/dist/workflows/authoring/scope-key.js +1 -1
- package/dist/workflows/cli.js +0 -16
- package/dist/workflows/concurrency-policy.js +15 -0
- package/dist/workflows/exec/brief.js +450 -0
- package/dist/workflows/exec/frozen-judge.js +47 -0
- package/dist/workflows/exec/native-executor.js +1038 -0
- package/dist/workflows/exec/param-secrets.js +115 -0
- package/dist/workflows/exec/report.js +1460 -0
- package/dist/workflows/exec/run-workflow.js +602 -0
- package/dist/workflows/exec/scheduler.js +71 -0
- package/dist/workflows/exec/step-work.js +1190 -0
- package/dist/workflows/exec/unit-writer.js +23 -0
- package/dist/workflows/exec/workflow-engine-gate.js +67 -0
- package/dist/workflows/exec/worktree.js +171 -0
- package/dist/workflows/ir/compile.js +246 -0
- package/dist/workflows/ir/freeze.js +233 -0
- package/dist/workflows/ir/params.js +54 -0
- package/dist/workflows/ir/plan-hash.js +68 -0
- package/dist/workflows/ir/schema.js +540 -0
- package/dist/workflows/parser.js +878 -304
- package/dist/workflows/program/expressions.js +181 -0
- package/dist/workflows/program/schema.js +51 -0
- package/dist/workflows/renderer.js +100 -45
- package/dist/workflows/resource-limits.js +22 -0
- package/dist/workflows/runtime/agent-identity.js +59 -14
- package/dist/workflows/runtime/checkin.js +1 -1
- package/dist/workflows/runtime/plan-classifier.js +131 -0
- package/dist/workflows/runtime/runs.js +376 -119
- package/dist/workflows/runtime/unit-checkin.js +45 -0
- package/dist/workflows/runtime/unit-phases.js +20 -0
- package/dist/workflows/runtime/workflow-asset-loader.js +241 -40
- package/dist/workflows/schema.js +1 -11
- package/dist/workflows/validate-summary.js +2 -3
- package/dist/workflows/validator.js +52 -30
- package/docs/README.md +42 -78
- package/docs/migration/README.md +8 -0
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +9 -8
- package/docs/migration/release-notes/0.9.0.md +158 -14
- package/docs/migration/v0.7-to-v0.8.md +46 -47
- package/docs/migration/v0.8-to-v0.9.md +844 -0
- package/docs/reference/README.md +12 -0
- package/docs/reference/data-and-telemetry.md +333 -0
- package/package.json +21 -17
- package/schemas/akm-asset-envelope.json +93 -0
- package/schemas/akm-config.json +4636 -0
- package/schemas/akm-task.json +87 -0
- package/schemas/akm-workflow.json +373 -0
- package/dist/akm-migrate-storage +0 -38
- package/dist/assets/help/help-accept.md +0 -12
- package/dist/assets/help/help-improve.md +0 -84
- package/dist/assets/help/help-proposals.md +0 -17
- package/dist/assets/help/help-propose.md +0 -17
- package/dist/assets/help/help-reject.md +0 -11
- package/dist/assets/profiles/frequent.json +0 -13
- package/dist/assets/profiles/recombine-only.json +0 -21
- package/dist/assets/profiles/reflect-distill.json +0 -30
- package/dist/assets/profiles/synthesize.json +0 -15
- package/dist/assets/prompts/procedural-system.md +0 -44
- package/dist/assets/prompts/recombine-system.md +0 -40
- package/dist/assets/prompts/staleness-detect-system.md +0 -6
- package/dist/assets/tasks/core/backup.yml +0 -4
- package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
- package/dist/assets/templates/html/default.html +0 -78
- package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
- package/dist/assets/wiki/index-template.md +0 -12
- package/dist/assets/wiki/ingest-workflow-template.md +0 -83
- package/dist/assets/wiki/log-template.md +0 -8
- package/dist/assets/wiki/schema-template.md +0 -61
- package/dist/cli/config-migrate.js +0 -150
- package/dist/cli/config-validate.js +0 -39
- package/dist/commands/graph/graph-cli.js +0 -124
- package/dist/commands/graph/graph.js +0 -487
- package/dist/commands/improve/calibration.js +0 -161
- package/dist/commands/improve/dedup.js +0 -482
- package/dist/commands/improve/extract-watch.js +0 -140
- package/dist/commands/improve/hot-probation.js +0 -45
- package/dist/commands/improve/improve-auto-accept.js +0 -276
- package/dist/commands/improve/improve-profiles.js +0 -168
- package/dist/commands/improve/procedural.js +0 -398
- package/dist/commands/improve/recombine.js +0 -818
- package/dist/commands/improve/schema-similarity-gate.js +0 -168
- package/dist/commands/lint/agent-linter.js +0 -44
- package/dist/commands/lint/command-linter.js +0 -44
- package/dist/commands/lint/default-linter.js +0 -16
- package/dist/commands/lint/fact-linter.js +0 -39
- package/dist/commands/lint/knowledge-linter.js +0 -16
- package/dist/commands/lint/memory-linter.js +0 -61
- package/dist/commands/lint/registry.js +0 -41
- package/dist/commands/lint/skill-linter.js +0 -45
- package/dist/commands/lint/task-linter.js +0 -50
- package/dist/commands/lint/workflow-linter.js +0 -81
- package/dist/commands/proposal/legacy-import.js +0 -115
- package/dist/commands/sources/history.js +0 -196
- package/dist/commands/tasks/default-tasks.js +0 -186
- package/dist/commands/wiki-cli.js +0 -292
- package/dist/core/asset/asset-registry.js +0 -76
- package/dist/core/asset/asset-spec.js +0 -259
- package/dist/core/config/config-migration.js +0 -602
- package/dist/core/deep-merge.js +0 -38
- package/dist/core/eval/rank-metrics.js +0 -113
- package/dist/core/ripgrep/install.js +0 -163
- package/dist/core/ripgrep/resolve.js +0 -81
- package/dist/indexer/db/db.js +0 -1413
- package/dist/indexer/manifest.js +0 -170
- package/dist/indexer/passes/metadata-contributors.js +0 -31
- package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
- package/dist/integrations/harnesses/opencode-sdk/index.js +0 -49
- package/dist/llm/call-ai.js +0 -62
- package/dist/llm/memory-infer-impl.js +0 -138
- package/dist/output/shapes/distill.js +0 -14
- package/dist/output/shapes/history.js +0 -11
- package/dist/output/text/distill.js +0 -6
- package/dist/output/text/enable-disable.js +0 -8
- package/dist/output/text/history.js +0 -6
- package/dist/output/text/wiki.js +0 -16
- package/dist/registry/build-index.js +0 -386
- package/dist/scripts/migrate-storage.js +0 -19108
- package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -9411
- package/dist/scripts/migrations/v16-to-v17.js +0 -141
- package/dist/setup/legacy-config.js +0 -106
- package/dist/storage/repositories/consolidation-repository.js +0 -38
- package/dist/storage/repositories/recombine-repository.js +0 -213
- package/dist/wiki/wiki-templates.js +0 -15
- package/dist/wiki/wiki.js +0 -1012
- package/dist/workflows/db.js +0 -215
- package/docs/data-and-telemetry.md +0 -226
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
- /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
export const ENGINE_NAME_PATTERN_SOURCE = "^(?!akm-)[a-z][a-z0-9]*(?:-[a-z0-9]+)*$";
|
|
5
|
+
export const BUILTIN_IMPROVE_STRATEGY_NAMES = [
|
|
6
|
+
"default",
|
|
7
|
+
"quick",
|
|
8
|
+
"thorough",
|
|
9
|
+
"memory-focus",
|
|
10
|
+
"graph-refresh",
|
|
11
|
+
"frequent",
|
|
12
|
+
"consolidate",
|
|
13
|
+
"catchup",
|
|
14
|
+
"reflect-distill",
|
|
15
|
+
"proactive-maintenance",
|
|
16
|
+
];
|
|
17
|
+
/** Engine capability required by each configured improve process. `null` means engine-free. */
|
|
18
|
+
export const IMPROVE_PROCESS_ENGINE_CAPABILITIES = {
|
|
19
|
+
reflect: "llm",
|
|
20
|
+
distill: "llm",
|
|
21
|
+
consolidate: "llm",
|
|
22
|
+
memoryInference: "llm",
|
|
23
|
+
graphExtraction: "llm",
|
|
24
|
+
extract: "llm",
|
|
25
|
+
validation: "llm",
|
|
26
|
+
triage: "runner",
|
|
27
|
+
proactiveMaintenance: null,
|
|
28
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* True only when the user has explicitly opted into autonomous `akm improve`
|
|
6
|
+
* mutation.
|
|
7
|
+
*
|
|
8
|
+
* Accepts a partial config so callers holding a plain object (tests, the
|
|
9
|
+
* strategy resolver) do not need a fully-parsed one.
|
|
10
|
+
*/
|
|
11
|
+
export function isImproveAutonomyEnabled(config) {
|
|
12
|
+
return config?.experimental?.improveAutonomy === true;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The config key an operator sets to enable a gated lane.
|
|
16
|
+
*
|
|
17
|
+
* Named rather than inlined because it is user-facing text: it goes into the
|
|
18
|
+
* `improve_skipped` event metadata, the `akm task doctor` output, and the
|
|
19
|
+
* health advisory, and those three must name the same key as the schema.
|
|
20
|
+
*/
|
|
21
|
+
export const IMPROVE_AUTONOMY_CONFIG_KEY = "experimental.improveAutonomy";
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* Embedding connection config (`embedding`). Extracted verbatim from the former
|
|
6
|
+
* `config-schema.ts` monolith — no behavior change.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { ENV_REFERENCE_PATTERN, positiveInt } from "./primitives.js";
|
|
10
|
+
const EmbeddingOllamaOptionsSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
num_ctx: positiveInt.optional(),
|
|
13
|
+
})
|
|
14
|
+
.passthrough();
|
|
15
|
+
/**
|
|
16
|
+
* Embedding connection config. Both `endpoint` and `model` are optional:
|
|
17
|
+
* - Remote: provide `endpoint` (http/https URL) + `model`.
|
|
18
|
+
* - Local-only: omit `endpoint`/`model`; set `localModel` (or fall back to
|
|
19
|
+
* {@link DEFAULT_LOCAL_MODEL}).
|
|
20
|
+
*
|
|
21
|
+
* Consumers route via `hasRemoteEndpoint()` which checks for an http(s)
|
|
22
|
+
* endpoint — absent fields take the local path naturally, no sentinels needed.
|
|
23
|
+
*/
|
|
24
|
+
export const EmbeddingConnectionConfigSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
provider: z.string().optional(),
|
|
27
|
+
endpoint: z.string().optional(),
|
|
28
|
+
model: z.string().optional(),
|
|
29
|
+
apiKey: z.string().regex(ENV_REFERENCE_PATTERN, `apiKey must be $VAR or \${VAR}`).optional(),
|
|
30
|
+
dimension: positiveInt.optional(),
|
|
31
|
+
localModel: z.string().min(1).optional(),
|
|
32
|
+
maxTokens: positiveInt.optional(),
|
|
33
|
+
batchSize: positiveInt.optional(),
|
|
34
|
+
chunkSize: positiveInt.optional(),
|
|
35
|
+
contextLength: positiveInt.optional(),
|
|
36
|
+
ollamaOptions: EmbeddingOllamaOptionsSchema.optional(),
|
|
37
|
+
})
|
|
38
|
+
.passthrough();
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* OpenAI-compatible LLM connection configs + named agent/LLM engine schemas
|
|
6
|
+
* (`engines`). Extracted verbatim from the former `config-schema.ts` monolith —
|
|
7
|
+
* no behavior change.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
// Harness ids come straight from the dependency-free `harnesses/ids` leaf (the
|
|
11
|
+
// same source `config-types.ts` re-exports them from). Importing them here
|
|
12
|
+
// rather than via `../config-types` keeps `schema/*` free of any edge to
|
|
13
|
+
// `config-types`, which type-derives from this barrel via
|
|
14
|
+
// `typeof import("./config-schema")` — routing through config-types would mint
|
|
15
|
+
// a config-schema ↔ config-types type cycle that collapses inference.
|
|
16
|
+
import { HARNESS_AGENT_DISPATCH_IDS, VALID_HARNESS_IDS } from "../../../integrations/harnesses/ids.js";
|
|
17
|
+
import { chatCompletionsEndpoint, ENV_REFERENCE_PATTERN, ExtraParamsSchema, engineName, LlmCapabilitiesSchema, ModelAliasMapSchema, nonEmptyString, positiveInt, } from "./primitives.js";
|
|
18
|
+
// ── Connection configs (LLM) ────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* OpenAI-compatible connection fields shared by named LLM engines and bounded
|
|
21
|
+
* internal call helpers. `model` is required at schema level — partial entries
|
|
22
|
+
* created by `akm config set llm.endpoint <url>` (where model is left absent)
|
|
23
|
+
* are normalized to `model: ""` *before* Zod sees them by the load-time
|
|
24
|
+
* pre-Zod migrator hook, so this strict shape gates CLI writes without
|
|
25
|
+
* breaking legacy load-time partial configs.
|
|
26
|
+
*/
|
|
27
|
+
export const LlmConnectionConfigSchema = z
|
|
28
|
+
.object({
|
|
29
|
+
provider: z.string().optional(),
|
|
30
|
+
endpoint: z.string(),
|
|
31
|
+
model: z.string(),
|
|
32
|
+
apiKey: z.string().optional(),
|
|
33
|
+
temperature: z.number().finite().optional(),
|
|
34
|
+
maxTokens: positiveInt.optional(),
|
|
35
|
+
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
36
|
+
concurrency: positiveInt.optional(),
|
|
37
|
+
capabilities: LlmCapabilitiesSchema.optional(),
|
|
38
|
+
extraParams: ExtraParamsSchema.optional(),
|
|
39
|
+
contextLength: positiveInt.optional(),
|
|
40
|
+
enableThinking: z.boolean().optional(),
|
|
41
|
+
})
|
|
42
|
+
.passthrough();
|
|
43
|
+
export const LlmProfileConfigSchema = LlmConnectionConfigSchema.extend({
|
|
44
|
+
supportsJsonSchema: z.boolean().optional(),
|
|
45
|
+
}).passthrough();
|
|
46
|
+
// ── Agent engines ───────────────────────────────────────────────────────────
|
|
47
|
+
// Derives from the canonical VALID_HARNESS_IDS (#565) so the Zod gate cannot
|
|
48
|
+
// drift from the TS union / parse check / setup detection.
|
|
49
|
+
const AgentPlatformSchema = z.enum(VALID_HARNESS_IDS);
|
|
50
|
+
const LlmEngineSchema = z
|
|
51
|
+
.object({
|
|
52
|
+
kind: z.literal("llm"),
|
|
53
|
+
provider: z.string().optional(),
|
|
54
|
+
endpoint: chatCompletionsEndpoint,
|
|
55
|
+
model: nonEmptyString,
|
|
56
|
+
apiKey: z.string().regex(ENV_REFERENCE_PATTERN, `apiKey must be $VAR or \${VAR}`).optional(),
|
|
57
|
+
temperature: z.number().finite().optional(),
|
|
58
|
+
maxTokens: positiveInt.optional(),
|
|
59
|
+
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
60
|
+
concurrency: positiveInt.optional(),
|
|
61
|
+
supportsJsonSchema: z.boolean().optional(),
|
|
62
|
+
extraParams: ExtraParamsSchema.optional(),
|
|
63
|
+
contextLength: positiveInt.optional(),
|
|
64
|
+
enableThinking: z.boolean().optional(),
|
|
65
|
+
})
|
|
66
|
+
.passthrough()
|
|
67
|
+
.superRefine((value, ctx) => {
|
|
68
|
+
for (const key of ["platform", "bin", "args", "workspace", "modelAliases", "llmEngine"]) {
|
|
69
|
+
if (key in value)
|
|
70
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, path: [key], message: `${key} is not valid on an LLM engine` });
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
const AgentEngineSchema = z
|
|
74
|
+
.object({
|
|
75
|
+
kind: z.literal("agent"),
|
|
76
|
+
platform: AgentPlatformSchema.refine((platform) => HARNESS_AGENT_DISPATCH_IDS.has(platform), {
|
|
77
|
+
message: "platform does not support agent dispatch",
|
|
78
|
+
}),
|
|
79
|
+
bin: nonEmptyString.optional(),
|
|
80
|
+
args: z.array(z.string()).optional(),
|
|
81
|
+
workspace: nonEmptyString.optional(),
|
|
82
|
+
model: nonEmptyString.optional(),
|
|
83
|
+
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
84
|
+
modelAliases: ModelAliasMapSchema.optional(),
|
|
85
|
+
llmEngine: engineName.optional(),
|
|
86
|
+
})
|
|
87
|
+
.passthrough()
|
|
88
|
+
.superRefine((value, ctx) => {
|
|
89
|
+
for (const key of [
|
|
90
|
+
"provider",
|
|
91
|
+
"endpoint",
|
|
92
|
+
"apiKey",
|
|
93
|
+
"temperature",
|
|
94
|
+
"maxTokens",
|
|
95
|
+
"concurrency",
|
|
96
|
+
"supportsJsonSchema",
|
|
97
|
+
"extraParams",
|
|
98
|
+
"contextLength",
|
|
99
|
+
"enableThinking",
|
|
100
|
+
]) {
|
|
101
|
+
if (key in value)
|
|
102
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, path: [key], message: `${key} is not valid on an agent engine` });
|
|
103
|
+
}
|
|
104
|
+
if (value.platform !== "opencode-sdk" && value.llmEngine !== undefined) {
|
|
105
|
+
ctx.addIssue({
|
|
106
|
+
code: z.ZodIssueCode.custom,
|
|
107
|
+
path: ["llmEngine"],
|
|
108
|
+
message: "llmEngine is only valid on opencode-sdk",
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (value.platform === "opencode-sdk" && value.args !== undefined) {
|
|
112
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["args"], message: "args is not valid on opencode-sdk" });
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
export const EngineConfigSchema = z.union([LlmEngineSchema, AgentEngineSchema]);
|
|
116
|
+
export const EnginesSchema = z.record(engineName, EngineConfigSchema);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* `experimental` config section — explicit opt-ins for behaviour that is not
|
|
6
|
+
* covered by the stability contract (D8).
|
|
7
|
+
*
|
|
8
|
+
* An entry here exists so a user can turn something ON deliberately. Every key
|
|
9
|
+
* defaults to OFF, and the runtime must treat "absent" and "false" identically:
|
|
10
|
+
* autonomy is never inferred from a partially-written config.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
export const ExperimentalConfigSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
/**
|
|
16
|
+
* Allow `akm improve` to mutate assets without review.
|
|
17
|
+
*
|
|
18
|
+
* OFF by default. Gates memory-cleanup, memory-inference writes, and triage
|
|
19
|
+
* `applyMode: "promote"`. Consolidation stays enabled because destructive
|
|
20
|
+
* operations are advisory and promotion emits a reviewable proposal.
|
|
21
|
+
* `akm improve` itself stays on either way — what this gates is autonomy,
|
|
22
|
+
* not the feature.
|
|
23
|
+
*
|
|
24
|
+
* `sync.push` is deliberately NOT gated by this key: it publishes
|
|
25
|
+
* already-committed content to a remote the user configured for that
|
|
26
|
+
* purpose, and it has its own `sync.push: false` / `--no-push` controls.
|
|
27
|
+
*/
|
|
28
|
+
improveAutonomy: z.boolean().optional(),
|
|
29
|
+
/**
|
|
30
|
+
* Allow the `akm workflow` native engine to run (Q-05).
|
|
31
|
+
*
|
|
32
|
+
* OFF by default. Gates `akm workflow run` (the native step-execution
|
|
33
|
+
* engine) and `akm workflow brief`/`report` (the harness-neutral driver
|
|
34
|
+
* protocol).
|
|
35
|
+
*
|
|
36
|
+
* Deliberately NOT gated: authoring/linting the unified markdown format
|
|
37
|
+
* and the manual workflow CLI contract (`start`/`next`/`complete`/
|
|
38
|
+
* `status`/`list`/`create`/`resume`/`abandon`) remain stable regardless of
|
|
39
|
+
* this key.
|
|
40
|
+
*
|
|
41
|
+
* Unlike `improveAutonomy`, a gated call here REFUSES outright rather than
|
|
42
|
+
* degrading: a workflow step either executes or it does not, so there is
|
|
43
|
+
* no safe partial-execution fallback to fall back to.
|
|
44
|
+
*/
|
|
45
|
+
workflowEngine: z.boolean().optional(),
|
|
46
|
+
})
|
|
47
|
+
.passthrough();
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* Feedback taxonomy + `feedback` config section. Extracted verbatim from the
|
|
6
|
+
* former `config-schema.ts` monolith — no behavior change.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { nonEmptyString } from "./primitives.js";
|
|
10
|
+
// ── Feedback failure modes (F-3 / #384) ─────────────────────────────────────
|
|
11
|
+
/**
|
|
12
|
+
* Curated taxonomy of failure modes for negative feedback.
|
|
13
|
+
*
|
|
14
|
+
* Structured failure modes enable aggregation across feedback events so the
|
|
15
|
+
* distill pipeline can detect that "5 assets failed for the same reason" and
|
|
16
|
+
* act on it — free-text strings about the same issue are not aggregatable.
|
|
17
|
+
*/
|
|
18
|
+
export const FEEDBACK_FAILURE_MODES = [
|
|
19
|
+
"incorrect", // Factually wrong or logically flawed content
|
|
20
|
+
"outdated", // Correct at some point but now stale
|
|
21
|
+
"dangerous", // Could cause harm if followed (security, safety)
|
|
22
|
+
"incomplete", // Missing key steps, context, or caveats
|
|
23
|
+
"redundant", // Duplicates another asset without adding value
|
|
24
|
+
];
|
|
25
|
+
// ── Feedback ────────────────────────────────────────────────────────────────
|
|
26
|
+
export const FeedbackConfigSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
requireReason: z.boolean().optional(),
|
|
29
|
+
allowedFailureModes: z.array(nonEmptyString).optional(),
|
|
30
|
+
})
|
|
31
|
+
.passthrough();
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
/**
|
|
5
|
+
* Improve profile + per-process (WI-9.6) discriminated schemas. Extracted
|
|
6
|
+
* verbatim from the former `config-schema.ts` monolith — no behavior change.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { IMPROVE_PROCESS_ENGINE_CAPABILITIES } from "../engine-semantics.js";
|
|
10
|
+
import { engineName, LlmInvocationOverridesSchema, nonEmptyString, positiveInt } from "./primitives.js";
|
|
11
|
+
// ── Improve profile / process ──────────────────────────────────────────────
|
|
12
|
+
//
|
|
13
|
+
// WI-9.6 (§4.2/§10.2): each of the 9 improve processes (reflect, distill,
|
|
14
|
+
// consolidate, memoryInference, graphExtraction, extract, validation, triage,
|
|
15
|
+
// proactiveMaintenance) gets its OWN schema below — a shared base (engine,
|
|
16
|
+
// model, llm, enabled, timeoutMs) extended with only the fields meaningful on
|
|
17
|
+
// that process — replacing the prior single ImproveProcessConfigSchema reused
|
|
18
|
+
// via `.optional()` for all 9 keys (which accepted, and silently ignored, any
|
|
19
|
+
// field on any process). Field→process assignment is derived from each
|
|
20
|
+
// field's original "only meaningful on X" doc comment, cross-checked against
|
|
21
|
+
// its actual runtime consumers and the built-in strategy assets
|
|
22
|
+
// (src/assets/improve-strategies/*.json).
|
|
23
|
+
//
|
|
24
|
+
// `ImproveProcessConfigSchema` ITSELF STAYS (unnarrowed — the union of every
|
|
25
|
+
// field across every process): it backs (a) the wide `ImproveProcessConfig`
|
|
26
|
+
// TS type that generic dynamic-process-name code needs (getImproveProcessConfig,
|
|
27
|
+
// ResolvedImproveProcess.config, agent/runner.ts's cast — the process name
|
|
28
|
+
// isn't known at the type level there, so the type must be a supertype every
|
|
29
|
+
// process's narrow output is assignable to), and (b) two existing tests that
|
|
30
|
+
// parse fields from multiple processes against it directly with no process
|
|
31
|
+
// context (tests/integration/extract-command.test.ts,
|
|
32
|
+
// tests/config-triage-process.test.ts). Real per-config validation for
|
|
33
|
+
// `processes.<name>` uses the NARROW per-process schemas via
|
|
34
|
+
// {@link ImproveProfileProcessesSchema} below — setting a field on the wrong
|
|
35
|
+
// process there is now rejected (the intended §4.2 improvement).
|
|
36
|
+
const IMPROVE_PROCESS_BASE_FIELDS = {
|
|
37
|
+
engine: engineName.optional(),
|
|
38
|
+
model: nonEmptyString.optional(),
|
|
39
|
+
llm: LlmInvocationOverridesSchema.optional(),
|
|
40
|
+
enabled: z.boolean().optional(),
|
|
41
|
+
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
42
|
+
};
|
|
43
|
+
/** Reflect/distill/consolidate: process-level asset-type filter (see improve-strategies.ts shouldSkipRef/DEFAULT_ALLOWED_TYPES). */
|
|
44
|
+
const allowedTypesField = z.array(z.string().min(1)).optional();
|
|
45
|
+
/**
|
|
46
|
+
* Consolidate process: hard cap on memories processed per pass.
|
|
47
|
+
* Reflect/distill: max refs processed (same as profile-level `limit`).
|
|
48
|
+
* proactiveMaintenance: fallback when `maxPerRun` is absent.
|
|
49
|
+
*/
|
|
50
|
+
const processLimitField = positiveInt.optional();
|
|
51
|
+
/**
|
|
52
|
+
* Distill process: LLM-as-judge lesson quality gate. Default ON (R3);
|
|
53
|
+
* fail-open — judge failure/timeout/parse errors pass through. Set
|
|
54
|
+
* `enabled: false` on the distill process to opt out. Also read on the
|
|
55
|
+
* `reflect` process (proposal-side quality gate; see reflect.ts).
|
|
56
|
+
*/
|
|
57
|
+
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
|
+
/**
|
|
61
|
+
* WS-3b: CLS (Complementary Learning System) interleaving (step 9).
|
|
62
|
+
* distill/memoryInference prompts include embedding-retrieved existing adjacent
|
|
63
|
+
* lessons/knowledge to prevent catastrophic interference with prior generalizations.
|
|
64
|
+
* Default OFF. Only meaningful on `distill` and `memoryInference` processes.
|
|
65
|
+
*/
|
|
66
|
+
const clsField = z
|
|
67
|
+
.object({
|
|
68
|
+
enabled: z.boolean().optional(),
|
|
69
|
+
// Number of adjacent lessons/knowledge to include in prompts (default 3).
|
|
70
|
+
adjacentCount: z.number().int().min(1).optional(),
|
|
71
|
+
})
|
|
72
|
+
.passthrough()
|
|
73
|
+
.optional();
|
|
74
|
+
/**
|
|
75
|
+
* WS-3b: Distill→source fidelity check (step 10). After a distill proposal,
|
|
76
|
+
* check it against its cited source memories; a contradiction flag forces
|
|
77
|
+
* human review. Default OFF. Distill process only.
|
|
78
|
+
*/
|
|
79
|
+
const fidelityCheckField = z.object({ enabled: z.boolean().optional() }).passthrough().optional();
|
|
80
|
+
/**
|
|
81
|
+
* #639 — semantic value-floor filter for the `reflect` process. When
|
|
82
|
+
* enabled, proposals classified as "low-value" by the deterministic noise
|
|
83
|
+
* gate are deferred. DEFAULT OFF (absent / { enabled: false } = pre-#639
|
|
84
|
+
* byte-identical behaviour). Reflect process only.
|
|
85
|
+
*/
|
|
86
|
+
const lowValueFilterField = z.object({ enabled: z.boolean().optional() }).passthrough().optional();
|
|
87
|
+
/**
|
|
88
|
+
* #626 — extract process: pre-LLM heuristic triage gate. When enabled, a
|
|
89
|
+
* deterministic scorer decides BEFORE the extraction LLM call whether a
|
|
90
|
+
* session carries enough signal to be worth extracting; low-signal sessions
|
|
91
|
+
* are skipped at zero LLM cost. Default OFF. `minScore` is the minimum total
|
|
92
|
+
* heuristic score to PASS (default 2). Extract process only — NOTE: unrelated
|
|
93
|
+
* to the `triage` PROCESS (`processes.triage`); this is a nested object under
|
|
94
|
+
* `processes.extract.triage` that happens to share the name.
|
|
95
|
+
*/
|
|
96
|
+
const extractTriageGateField = z
|
|
97
|
+
.object({
|
|
98
|
+
enabled: z.boolean().optional(),
|
|
99
|
+
minScore: z.number().min(0).optional(),
|
|
100
|
+
})
|
|
101
|
+
.passthrough()
|
|
102
|
+
.optional();
|
|
103
|
+
/** Triage process: LLM-as-judge triage-apply decision engine override. */
|
|
104
|
+
const triageJudgmentField = z
|
|
105
|
+
.object({
|
|
106
|
+
engine: engineName.optional(),
|
|
107
|
+
model: nonEmptyString.optional(),
|
|
108
|
+
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
109
|
+
llm: LlmInvocationOverridesSchema.optional(),
|
|
110
|
+
})
|
|
111
|
+
.passthrough()
|
|
112
|
+
.optional();
|
|
113
|
+
/**
|
|
114
|
+
* WS-3b: Anti-collapse guards (step 8). Prevents the consolidation pipeline
|
|
115
|
+
* from collapsing too aggressively and losing diversity. Consolidate process
|
|
116
|
+
* only. Default ON since R5 (opt out via enabled: false).
|
|
117
|
+
* - maxGeneration: refuse to merge two assets both above this generation (default 2).
|
|
118
|
+
* - lexicalDiversityCheck: low n-gram diversity ⇒ raise merge threshold.
|
|
119
|
+
* - randomClusterFraction: occasional random (non-similar) cluster in pool (default 0.05).
|
|
120
|
+
* - mergeInformationFloor: LIVE gate (anti-collapse.ts:143) — NOT a
|
|
121
|
+
* decorative/inert knob. `false` skips the merge-information-floor
|
|
122
|
+
* measurement entirely (no counting, no warning) for every merge;
|
|
123
|
+
* true/absent (default) measures it on every merge. The MEASUREMENT's
|
|
124
|
+
* outcome is advisory in v1: a failing merge is counted
|
|
125
|
+
* (`merge_floor_violations`) and warned but never refused (promotion path:
|
|
126
|
+
* docs/architecture/specs/improve-collapse-churn-detector-design.md §7). In short:
|
|
127
|
+
* this field gates whether the check runs at all (a real code path), not
|
|
128
|
+
* whether a merge is allowed.
|
|
129
|
+
* - minSpecificityRetention: distinct-token retention floor for merges (default 0.6).
|
|
130
|
+
* (WS-3b step 0a `homeostaticDemotion` was removed — R4. Continuous decay is
|
|
131
|
+
* now part of the always-applied salience recency term.)
|
|
132
|
+
*/
|
|
133
|
+
const antiCollapseField = z
|
|
134
|
+
.object({
|
|
135
|
+
enabled: z.boolean().optional(),
|
|
136
|
+
maxGeneration: z.number().int().min(1).optional(),
|
|
137
|
+
lexicalDiversityCheck: z.boolean().optional(),
|
|
138
|
+
randomClusterFraction: z.number().min(0).max(1).optional(),
|
|
139
|
+
mergeInformationFloor: z.boolean().optional(),
|
|
140
|
+
minSpecificityRetention: z.number().min(0).max(1).optional(),
|
|
141
|
+
})
|
|
142
|
+
.passthrough()
|
|
143
|
+
.optional();
|
|
144
|
+
const REFLECT_PROCESS_FIELDS = {
|
|
145
|
+
allowedTypes: allowedTypesField,
|
|
146
|
+
limit: processLimitField,
|
|
147
|
+
qualityGate: qualityGateField,
|
|
148
|
+
lowValueFilter: lowValueFilterField,
|
|
149
|
+
};
|
|
150
|
+
const DISTILL_PROCESS_FIELDS = {
|
|
151
|
+
allowedTypes: allowedTypesField,
|
|
152
|
+
limit: processLimitField,
|
|
153
|
+
qualityGate: qualityGateField,
|
|
154
|
+
// Skip distill entirely when reflect produced zero planned refs.
|
|
155
|
+
requirePlannedRefs: z.boolean().optional(),
|
|
156
|
+
cls: clsField,
|
|
157
|
+
fidelityCheck: fidelityCheckField,
|
|
158
|
+
};
|
|
159
|
+
const CONSOLIDATE_PROCESS_FIELDS = {
|
|
160
|
+
allowedTypes: allowedTypesField,
|
|
161
|
+
limit: processLimitField,
|
|
162
|
+
// Minimum eligible-memory pool size below which the consolidation pass skips
|
|
163
|
+
// entirely (emits `pool_below_min_size`). 0 disables the guard. Default 500.
|
|
164
|
+
minPoolSize: z.number().int().min(0).optional(),
|
|
165
|
+
maxChunkSize: z.number().int().min(1).max(50).optional(),
|
|
166
|
+
// Narrow candidate pool to memories modified within this duration window
|
|
167
|
+
// plus their graph neighbours. Absent = full-pool sweep.
|
|
168
|
+
incrementalSince: z.string().optional(),
|
|
169
|
+
// Graph neighbours per changed memory during incremental consolidation.
|
|
170
|
+
// Default 5. Only meaningful with incrementalSince.
|
|
171
|
+
neighborsPerChanged: z.number().int().min(1).optional(),
|
|
172
|
+
// Fallback p90 wall-clock time per consolidation chunk in seconds, used for
|
|
173
|
+
// cold-start budget estimation when no telemetry history exists. The actual
|
|
174
|
+
// p90 is derived from observed run durations once sufficient history
|
|
175
|
+
// accumulates; this value is only used on the very first run. Default 30s.
|
|
176
|
+
p90ChunkSecondsDefault: z.number().finite().positive().optional(),
|
|
177
|
+
antiCollapse: antiCollapseField,
|
|
178
|
+
contradictionDetection: contradictionDetectionField,
|
|
179
|
+
};
|
|
180
|
+
const MEMORY_INFERENCE_PROCESS_FIELDS = {
|
|
181
|
+
// Minimum pending memory count to run the pass.
|
|
182
|
+
minPendingCount: z.number().int().min(0).optional(),
|
|
183
|
+
cls: clsField,
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* GraphExtraction process fields: improve-owned graph extraction scope and
|
|
187
|
+
* batching. Passed to the invocation directly and never inherited from
|
|
188
|
+
* standalone index.graph.
|
|
189
|
+
*/
|
|
190
|
+
const GRAPH_EXTRACTION_PROCESS_FIELDS = {
|
|
191
|
+
// #624 P2: when set, rank eligible files by utility_scores DESC and process
|
|
192
|
+
// only the top-N per run (incremental high-signal-first sweep). Unset =
|
|
193
|
+
// process all eligible (current behavior).
|
|
194
|
+
topN: positiveInt.optional(),
|
|
195
|
+
includeTypes: z.array(z.string().min(1)).min(1).optional(),
|
|
196
|
+
batchSize: positiveInt.optional(),
|
|
197
|
+
// Full-corpus scan. When true, graph extraction runs on ALL stash files
|
|
198
|
+
// instead of only files touched by actionable refs in the current run.
|
|
199
|
+
// Used by the `graph-refresh` built-in profile / a scheduled weekly task.
|
|
200
|
+
fullScan: z.boolean().optional(),
|
|
201
|
+
};
|
|
202
|
+
const EXTRACT_PROCESS_FIELDS = {
|
|
203
|
+
defaultSince: z.string().min(1).optional(),
|
|
204
|
+
maxTotalChars: positiveInt.optional(),
|
|
205
|
+
// Minimum raw session size (pre-filter inputCount) below which the extract
|
|
206
|
+
// LLM call is skipped (#595/#596). 0 disables the gate. Absent = default 10
|
|
207
|
+
// (skip only truly empty sessions).
|
|
208
|
+
minContentChars: z.number().int().min(0).optional(),
|
|
209
|
+
triage: extractTriageGateField,
|
|
210
|
+
// Minimum number of new (unseen, in-window) candidate sessions below which
|
|
211
|
+
// the extract pass skips entirely (emits an `improve_skipped` event with
|
|
212
|
+
// `reason: "below_min_new_sessions"`). 0 disables the guard. Default 0
|
|
213
|
+
// (disabled) so existing behaviour is preserved; only opted-in profiles set it.
|
|
214
|
+
minNewSessions: z.number().int().min(0).optional(),
|
|
215
|
+
// Cap on NEW sessions processed (LLM-called) per run; the rest roll to the
|
|
216
|
+
// next run (still unseen). 0 disables. Absent = default 25.
|
|
217
|
+
maxSessionsPerRun: z.number().int().min(0).optional(),
|
|
218
|
+
// #561 — index agent sessions as a searchable `session` asset. Absent =
|
|
219
|
+
// on-when-an-LLM-is-available (fail-open when offline). COST: when on, each
|
|
220
|
+
// processed session makes a SECOND LLM call (the session summary) on top of
|
|
221
|
+
// the extraction call — i.e. ~2 LLM calls/session. Set to false to halve
|
|
222
|
+
// per-session extract cost at the price of unsearchable sessions.
|
|
223
|
+
// (Unchanged/skip sessions still cost zero — the content-hash ledger gates
|
|
224
|
+
// both calls upstream.)
|
|
225
|
+
indexSessions: z.boolean().optional(),
|
|
226
|
+
// #561 — minimum session duration in minutes for session indexing. 0
|
|
227
|
+
// disables the gate. Absent = default 5.
|
|
228
|
+
minSessionDuration: z.number().min(0).optional(),
|
|
229
|
+
};
|
|
230
|
+
const TRIAGE_PROCESS_FIELDS = {
|
|
231
|
+
applyMode: z.enum(["queue", "promote"]).optional(),
|
|
232
|
+
policy: z.string().min(1).optional(),
|
|
233
|
+
maxAcceptsPerRun: positiveInt.optional(),
|
|
234
|
+
maxDiffLines: positiveInt.optional(),
|
|
235
|
+
rejectEmpty: z.boolean().optional(),
|
|
236
|
+
judgment: triageJudgmentField,
|
|
237
|
+
};
|
|
238
|
+
/** proactiveMaintenance process fields (Layer 2). */
|
|
239
|
+
const PROACTIVE_MAINTENANCE_PROCESS_FIELDS = {
|
|
240
|
+
// Staleness gate + rotation cooldown in days (default 30).
|
|
241
|
+
dueDays: z.number().int().min(0).optional(),
|
|
242
|
+
// Top-N bound per run (default 25). Alias for `limit`; `maxPerRun` wins
|
|
243
|
+
// when both are set.
|
|
244
|
+
maxPerRun: positiveInt.optional(),
|
|
245
|
+
limit: processLimitField,
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Shared cross-process superRefine: rejects the retired `mode`/`profile`
|
|
249
|
+
* knobs (top-level and inside a `judgment` sub-object) in favour of `engine`.
|
|
250
|
+
* Applied identically to every per-process schema and to the wide
|
|
251
|
+
* ImproveProcessConfigSchema.
|
|
252
|
+
*/
|
|
253
|
+
function checkRetiredProcessKeys(value, ctx) {
|
|
254
|
+
for (const key of ["mode", "profile"]) {
|
|
255
|
+
if (key in value) {
|
|
256
|
+
ctx.addIssue({ code: z.ZodIssueCode.custom, path: [key], message: `${key} is retired; use engine` });
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
const judgment = value.judgment;
|
|
260
|
+
if (judgment) {
|
|
261
|
+
for (const key of ["mode", "profile"]) {
|
|
262
|
+
if (key in judgment) {
|
|
263
|
+
ctx.addIssue({
|
|
264
|
+
code: z.ZodIssueCode.custom,
|
|
265
|
+
path: ["judgment", key],
|
|
266
|
+
message: `${key} is retired; use engine`,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
export const ImproveProcessConfigSchema = z
|
|
273
|
+
.object({
|
|
274
|
+
...IMPROVE_PROCESS_BASE_FIELDS,
|
|
275
|
+
...REFLECT_PROCESS_FIELDS,
|
|
276
|
+
...DISTILL_PROCESS_FIELDS,
|
|
277
|
+
...CONSOLIDATE_PROCESS_FIELDS,
|
|
278
|
+
...MEMORY_INFERENCE_PROCESS_FIELDS,
|
|
279
|
+
...GRAPH_EXTRACTION_PROCESS_FIELDS,
|
|
280
|
+
...EXTRACT_PROCESS_FIELDS,
|
|
281
|
+
...TRIAGE_PROCESS_FIELDS,
|
|
282
|
+
...PROACTIVE_MAINTENANCE_PROCESS_FIELDS,
|
|
283
|
+
})
|
|
284
|
+
.passthrough()
|
|
285
|
+
.superRefine(checkRetiredProcessKeys);
|
|
286
|
+
/** `processes.reflect` — narrow per-process schema (WI-9.6). */
|
|
287
|
+
export const ReflectProcessConfigSchema = z
|
|
288
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...REFLECT_PROCESS_FIELDS })
|
|
289
|
+
.passthrough()
|
|
290
|
+
.superRefine(checkRetiredProcessKeys);
|
|
291
|
+
/** `processes.distill` — narrow per-process schema (WI-9.6). */
|
|
292
|
+
export const DistillProcessConfigSchema = z
|
|
293
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...DISTILL_PROCESS_FIELDS })
|
|
294
|
+
.passthrough()
|
|
295
|
+
.superRefine(checkRetiredProcessKeys);
|
|
296
|
+
/** `processes.consolidate` — narrow per-process schema (WI-9.6). */
|
|
297
|
+
export const ConsolidateProcessConfigSchema = z
|
|
298
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...CONSOLIDATE_PROCESS_FIELDS })
|
|
299
|
+
.passthrough()
|
|
300
|
+
.superRefine(checkRetiredProcessKeys);
|
|
301
|
+
/** `processes.memoryInference` — narrow per-process schema (WI-9.6). */
|
|
302
|
+
export const MemoryInferenceProcessConfigSchema = z
|
|
303
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...MEMORY_INFERENCE_PROCESS_FIELDS })
|
|
304
|
+
.passthrough()
|
|
305
|
+
.superRefine(checkRetiredProcessKeys);
|
|
306
|
+
/** `processes.graphExtraction` — narrow per-process schema (WI-9.6). */
|
|
307
|
+
export const GraphExtractionProcessConfigSchema = z
|
|
308
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...GRAPH_EXTRACTION_PROCESS_FIELDS })
|
|
309
|
+
.passthrough()
|
|
310
|
+
.superRefine(checkRetiredProcessKeys);
|
|
311
|
+
/** `processes.extract` — narrow per-process schema (WI-9.6). */
|
|
312
|
+
export const ExtractProcessConfigSchema = z
|
|
313
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...EXTRACT_PROCESS_FIELDS })
|
|
314
|
+
.passthrough()
|
|
315
|
+
.superRefine(checkRetiredProcessKeys);
|
|
316
|
+
/** `processes.validation` — narrow per-process schema (WI-9.6); no extra fields beyond the shared base. */
|
|
317
|
+
export const ValidationProcessConfigSchema = z
|
|
318
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS })
|
|
319
|
+
.passthrough()
|
|
320
|
+
.superRefine(checkRetiredProcessKeys);
|
|
321
|
+
/** `processes.triage` — narrow per-process schema (WI-9.6). */
|
|
322
|
+
export const TriageProcessConfigSchema = z
|
|
323
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...TRIAGE_PROCESS_FIELDS })
|
|
324
|
+
.passthrough()
|
|
325
|
+
.superRefine(checkRetiredProcessKeys);
|
|
326
|
+
/** `processes.proactiveMaintenance` — narrow per-process schema (WI-9.6). */
|
|
327
|
+
export const ProactiveMaintenanceProcessConfigSchema = z
|
|
328
|
+
.object({ ...IMPROVE_PROCESS_BASE_FIELDS, ...PROACTIVE_MAINTENANCE_PROCESS_FIELDS })
|
|
329
|
+
.passthrough()
|
|
330
|
+
.superRefine(checkRetiredProcessKeys);
|
|
331
|
+
const ImproveProfileProcessesSchema = z
|
|
332
|
+
.object({
|
|
333
|
+
reflect: ReflectProcessConfigSchema.optional(),
|
|
334
|
+
distill: DistillProcessConfigSchema.optional(),
|
|
335
|
+
consolidate: ConsolidateProcessConfigSchema.optional(),
|
|
336
|
+
memoryInference: MemoryInferenceProcessConfigSchema.optional(),
|
|
337
|
+
graphExtraction: GraphExtractionProcessConfigSchema.optional(),
|
|
338
|
+
extract: ExtractProcessConfigSchema.optional(),
|
|
339
|
+
validation: ValidationProcessConfigSchema.optional(),
|
|
340
|
+
triage: TriageProcessConfigSchema.optional(),
|
|
341
|
+
proactiveMaintenance: ProactiveMaintenanceProcessConfigSchema.optional(),
|
|
342
|
+
})
|
|
343
|
+
.passthrough()
|
|
344
|
+
.superRefine((val, ctx) => {
|
|
345
|
+
// 0.8.0 removed the duplicated `feedbackDistillation` process key — it was
|
|
346
|
+
// a thin wrapper around `processes.distill.enabled`. Keep the migration
|
|
347
|
+
// hint so a stale config gets an actionable message rather than silently
|
|
348
|
+
// doing nothing. Other unknown process keys remain preserved for
|
|
349
|
+
// cross-version compatibility, but an enabled one is rejected below because
|
|
350
|
+
// this version cannot execute it.
|
|
351
|
+
if ("feedbackDistillation" in val) {
|
|
352
|
+
ctx.addIssue({
|
|
353
|
+
code: z.ZodIssueCode.custom,
|
|
354
|
+
message: "feedbackDistillation was removed in 0.8.0 — use processes.distill.enabled instead. " +
|
|
355
|
+
"It now controls both the orchestration gate and the LLM-call gate.",
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
for (const [name, process] of Object.entries(val)) {
|
|
359
|
+
if (!(name in IMPROVE_PROCESS_ENGINE_CAPABILITIES) &&
|
|
360
|
+
process !== null &&
|
|
361
|
+
typeof process === "object" &&
|
|
362
|
+
process.enabled === true) {
|
|
363
|
+
ctx.addIssue({
|
|
364
|
+
code: z.ZodIssueCode.custom,
|
|
365
|
+
path: [name],
|
|
366
|
+
message: `Unknown enabled improve process "${name}"`,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
export const ImproveProfileConfigSchema = z
|
|
372
|
+
.object({
|
|
373
|
+
engine: engineName.optional(),
|
|
374
|
+
model: nonEmptyString.optional(),
|
|
375
|
+
timeoutMs: z.union([positiveInt, z.null()]).optional(),
|
|
376
|
+
llm: LlmInvocationOverridesSchema.optional(),
|
|
377
|
+
description: z.string().min(1).optional(),
|
|
378
|
+
processes: ImproveProfileProcessesSchema.optional(),
|
|
379
|
+
limit: positiveInt.optional(),
|
|
380
|
+
sync: z
|
|
381
|
+
.object({
|
|
382
|
+
enabled: z.boolean().optional(),
|
|
383
|
+
push: z.boolean().optional(),
|
|
384
|
+
message: z.string().min(1).optional(),
|
|
385
|
+
})
|
|
386
|
+
.passthrough()
|
|
387
|
+
.optional(),
|
|
388
|
+
})
|
|
389
|
+
.passthrough();
|