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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { readEvents } from "../../core/events.js";
|
|
9
9
|
import { LLM_USAGE_EVENT } from "../../llm/usage-persist.js";
|
|
10
|
-
import {
|
|
10
|
+
import { decodeLlmUsageRecord } from "../../llm/usage-telemetry.js";
|
|
11
11
|
/** Stage key used for `llm_usage` events recorded outside any stage scope. */
|
|
12
12
|
const UNATTRIBUTED_STAGE = "unattributed";
|
|
13
13
|
function emptyLlmUsageStageAggregate() {
|
|
@@ -21,7 +21,7 @@ function emptyLlmUsageStageAggregate() {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
function emptyLlmUsageAggregate() {
|
|
24
|
-
return { ...emptyLlmUsageStageAggregate(), byStage: {} };
|
|
24
|
+
return { ...emptyLlmUsageStageAggregate(), byStage: {}, byProcess: {}, byEngine: {} };
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Aggregate `llm_usage` events (#576) into a window total plus a per-stage
|
|
@@ -32,25 +32,25 @@ function emptyLlmUsageAggregate() {
|
|
|
32
32
|
export function summarizeLlmUsage(events) {
|
|
33
33
|
const aggregate = emptyLlmUsageAggregate();
|
|
34
34
|
for (const event of events) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
aggregate.byStage
|
|
35
|
+
const record = decodeLlmUsageRecord(event.metadata);
|
|
36
|
+
if (!record)
|
|
37
|
+
continue;
|
|
38
|
+
const dimensions = [];
|
|
39
|
+
for (const [groups, key] of [
|
|
40
|
+
[aggregate.byStage, record.stage ?? UNATTRIBUTED_STAGE],
|
|
41
|
+
[aggregate.byProcess, record.process ?? UNATTRIBUTED_STAGE],
|
|
42
|
+
[aggregate.byEngine, record.engine ?? UNATTRIBUTED_STAGE],
|
|
43
|
+
]) {
|
|
44
|
+
groups[key] ??= emptyLlmUsageStageAggregate();
|
|
45
|
+
dimensions.push(groups[key]);
|
|
41
46
|
}
|
|
42
|
-
const
|
|
43
|
-
const promptTokens = toFiniteNumber(meta.promptTokens);
|
|
44
|
-
const completionTokens = toFiniteNumber(meta.completionTokens);
|
|
45
|
-
const totalTokens = toFiniteNumber(meta.totalTokens);
|
|
46
|
-
const reasoningTokens = toFiniteNumber(meta.reasoningTokens);
|
|
47
|
-
for (const target of [aggregate, stage]) {
|
|
47
|
+
for (const target of [aggregate, ...dimensions]) {
|
|
48
48
|
target.calls += 1;
|
|
49
|
-
target.totalDurationMs += durationMs;
|
|
50
|
-
target.promptTokens += promptTokens;
|
|
51
|
-
target.completionTokens += completionTokens;
|
|
52
|
-
target.totalTokens += totalTokens;
|
|
53
|
-
target.reasoningTokens += reasoningTokens;
|
|
49
|
+
target.totalDurationMs += record.durationMs;
|
|
50
|
+
target.promptTokens += record.promptTokens ?? 0;
|
|
51
|
+
target.completionTokens += record.completionTokens ?? 0;
|
|
52
|
+
target.totalTokens += record.totalTokens ?? 0;
|
|
53
|
+
target.reasoningTokens += record.reasoningTokens ?? 0;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
return aggregate;
|
|
@@ -16,9 +16,7 @@ function renderTable(headers, rows) {
|
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Render `--detail per-run` rows as a TSV-ish aligned table. The column
|
|
19
|
-
* shape
|
|
20
|
-
* `scripts/improve-stats/runs-detail` bash helper; keep the same shape
|
|
21
|
-
* so operator muscle memory carries over.
|
|
19
|
+
* shape is stable so repeated operator reports remain easy to compare.
|
|
22
20
|
*
|
|
23
21
|
* Columns: ts | ok | actions | refl_ok/fail/cd/skip |
|
|
24
22
|
* distill_q/llm-fail/qrej/cfg/skip | cons_proc/promo/merge/del |
|
|
@@ -28,14 +26,16 @@ export function renderRunsDetailMd(runs) {
|
|
|
28
26
|
const headers = [
|
|
29
27
|
"ts",
|
|
30
28
|
"ok",
|
|
29
|
+
"strategy",
|
|
31
30
|
"actions",
|
|
32
31
|
"refl_ok/fail/cd/skip",
|
|
33
|
-
"distill_q/llm-fail/
|
|
32
|
+
"distill_q/llm-fail/judge/validator/cfg/skip",
|
|
34
33
|
"cons_proc/promo/merge/del",
|
|
35
34
|
"mem_cons/written/skip",
|
|
36
35
|
"graph_f/e/r",
|
|
37
36
|
"orphans",
|
|
38
37
|
"lint_f/fl",
|
|
38
|
+
"result_status",
|
|
39
39
|
];
|
|
40
40
|
const rows = runs.map((r) => {
|
|
41
41
|
const totalActions = r.actions.reflect.ok +
|
|
@@ -44,7 +44,8 @@ export function renderRunsDetailMd(runs) {
|
|
|
44
44
|
r.actions.reflect.skipped +
|
|
45
45
|
r.actions.distill.queued +
|
|
46
46
|
r.actions.distill.llmFailed +
|
|
47
|
-
r.actions.distill.
|
|
47
|
+
r.actions.distill.judgeRejected +
|
|
48
|
+
r.actions.distill.validatorRejected +
|
|
48
49
|
r.actions.distill.configDisabled +
|
|
49
50
|
r.actions.distill.skipped +
|
|
50
51
|
r.actions.memoryPrune +
|
|
@@ -54,14 +55,16 @@ export function renderRunsDetailMd(runs) {
|
|
|
54
55
|
return [
|
|
55
56
|
r.startedAt,
|
|
56
57
|
String(r.ok),
|
|
58
|
+
r.strategy ?? "",
|
|
57
59
|
String(totalActions),
|
|
58
60
|
`${r.actions.reflect.ok}/${r.actions.reflect.failed}/${r.actions.reflect.cooldown}/${r.actions.reflect.skipped}`,
|
|
59
|
-
`${r.actions.distill.queued}/${r.actions.distill.llmFailed}/${r.actions.distill.
|
|
61
|
+
`${r.actions.distill.queued}/${r.actions.distill.llmFailed}/${r.actions.distill.judgeRejected}/${r.actions.distill.validatorRejected}/${r.actions.distill.configDisabled}/${r.actions.distill.skipped}`,
|
|
60
62
|
`${r.consolidation.processed}/${r.consolidation.promoted}/${r.consolidation.merged}/${r.consolidation.deleted}`,
|
|
61
63
|
`${r.memoryInference.considered}/${r.memoryInference.written}/${r.memoryInference.skippedNoFacts}`,
|
|
62
64
|
`${r.graphExtraction.extractedFiles}/${r.graphExtraction.entities}/${r.graphExtraction.relations}`,
|
|
63
65
|
String(r.orphansPurged),
|
|
64
66
|
`${r.lintFixed}/${r.lintFlagged}`,
|
|
67
|
+
r.resultStatus ?? "valid",
|
|
65
68
|
];
|
|
66
69
|
});
|
|
67
70
|
return renderTable(headers, rows);
|
|
@@ -85,7 +88,13 @@ export function renderWindowCompareMd(windows, deltas) {
|
|
|
85
88
|
"improve.memoryInference.skippedNoFacts",
|
|
86
89
|
]);
|
|
87
90
|
const rows = [];
|
|
88
|
-
|
|
91
|
+
const paths = [
|
|
92
|
+
"runs",
|
|
93
|
+
"improve.resultRows.included",
|
|
94
|
+
"improve.resultRows.skipped.invalid",
|
|
95
|
+
...INTERESTING_DELTA_PATHS,
|
|
96
|
+
];
|
|
97
|
+
for (const path of paths) {
|
|
89
98
|
const values = windows.map((w) => String(readNumericPath(w, path)));
|
|
90
99
|
const delta = deltas?.[path];
|
|
91
100
|
let deltaStr = "—";
|
|
@@ -3,38 +3,74 @@
|
|
|
3
3
|
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
/**
|
|
5
5
|
* State.db-backed health metrics for `akm health`: the round-trip probe,
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* denominator-fixed coverage, the enrichment-vs-minting rollup, and the WS-5
|
|
7
|
+
* per-run degradation metrics.
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { rethrowIfTestIsolationError } from "../../core/errors.js";
|
|
10
|
+
import { decodeImproveResult } from "../../core/improve-result.js";
|
|
11
|
+
import { withStateDb } from "../../core/state-db.js";
|
|
12
|
+
import { insertEvent } from "../../storage/repositories/events-repository.js";
|
|
10
13
|
import { queryImproveRuns } from "../../storage/repositories/improve-runs-repository.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
14
|
+
import { listStateProposals } from "../../storage/repositories/proposals-repository.js";
|
|
15
|
+
import { getTopRetrievalSalience } from "../../storage/repositories/salience-repository.js";
|
|
13
16
|
import { roundRate, toFiniteNumber } from "./improve-metrics.js";
|
|
14
17
|
import { ENRICHMENT_LANES, } from "./types.js";
|
|
15
18
|
/** Event type appended + read back by the state.db round-trip probe. */
|
|
16
19
|
const HEALTH_PROBE_EVENT = "health_probe";
|
|
20
|
+
/** Synthetic sentinel ref (ref-grammar decision D-R3): a colon-free
|
|
21
|
+
* `<subsystem>/_<marker>` label. `health` has no asset stash-subdir, so
|
|
22
|
+
* `health/_probe` names the subsystem. */
|
|
23
|
+
const HEALTH_PROBE_REF = "health/_probe";
|
|
24
|
+
/**
|
|
25
|
+
* Verify state.db can accept a write and read it back — WITHOUT leaving any
|
|
26
|
+
* permanent trace (R-030). Earlier versions appended a `health_probe` event
|
|
27
|
+
* on every `akm health` invocation and never removed it: a read-only health
|
|
28
|
+
* check ran on a cron would grow state.db without bound (the only purge is
|
|
29
|
+
* `improve`'s retention pass, which a health-only user never runs). The probe
|
|
30
|
+
* row inserted here is deleted again inside the SAME connection once the
|
|
31
|
+
* round trip is confirmed, so the net effect on the `events` table is always
|
|
32
|
+
* zero rows — the round trip still genuinely exercises append + read against
|
|
33
|
+
* the real table, it just doesn't accumulate.
|
|
34
|
+
*/
|
|
17
35
|
export function probeStateDbRoundTrip(stateDbPath) {
|
|
18
|
-
const before = readEvents({}, { dbPath: stateDbPath }).nextOffset;
|
|
19
36
|
const started = Date.now();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
37
|
+
try {
|
|
38
|
+
return withStateDb((db) => {
|
|
39
|
+
const ts = new Date().toISOString();
|
|
40
|
+
const insertedId = insertEvent(db, {
|
|
41
|
+
eventType: HEALTH_PROBE_EVENT,
|
|
42
|
+
ts,
|
|
43
|
+
ref: HEALTH_PROBE_REF,
|
|
44
|
+
metadata: { source: "akm health" },
|
|
45
|
+
});
|
|
46
|
+
const durationMs = Date.now() - started;
|
|
47
|
+
if (insertedId === undefined) {
|
|
48
|
+
return { ok: false, durationMs, error: "probe event insert did not return a row id" };
|
|
49
|
+
}
|
|
50
|
+
// The round-trip matches on the exact (id, eventType, ref) triple
|
|
51
|
+
// written above, then removes the row regardless of outcome — a
|
|
52
|
+
// failed round trip must not leak a row any more than a successful
|
|
53
|
+
// one should.
|
|
54
|
+
let roundTripOk = false;
|
|
55
|
+
try {
|
|
56
|
+
const row = db
|
|
57
|
+
.prepare("SELECT 1 AS present FROM events WHERE id = ? AND event_type = ? AND ref = ?")
|
|
58
|
+
.get(insertedId, HEALTH_PROBE_EVENT, HEALTH_PROBE_REF);
|
|
59
|
+
roundTripOk = row !== undefined;
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
db.prepare("DELETE FROM events WHERE id = ?").run(insertedId);
|
|
63
|
+
}
|
|
64
|
+
if (!roundTripOk) {
|
|
65
|
+
return { ok: false, durationMs, error: "probe event was not readable after append" };
|
|
66
|
+
}
|
|
67
|
+
return { ok: true, durationMs };
|
|
68
|
+
}, { path: stateDbPath });
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
rethrowIfTestIsolationError(err);
|
|
72
|
+
return { ok: false, durationMs: Date.now() - started, error: err instanceof Error ? err.message : String(err) };
|
|
25
73
|
}
|
|
26
|
-
return { ok: true, durationMs };
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Read the auto-accept gate calibration summary (#612) over `[since, until)`.
|
|
30
|
-
* Reads every proposal's `gateDecision` from the open state.db, projects the
|
|
31
|
-
* acted-on (auto-accepted / auto-rejected) decisions into calibration samples
|
|
32
|
-
* within the window, and aggregates them deterministically.
|
|
33
|
-
*/
|
|
34
|
-
export function readCalibration(db, since, until) {
|
|
35
|
-
const decisions = listProposalGateDecisions(db);
|
|
36
|
-
const samples = gateDecisionsToSamples(decisions, { since, ...(until !== undefined ? { until } : {}) });
|
|
37
|
-
return summarizeCalibration(samples);
|
|
38
74
|
}
|
|
39
75
|
// ── WS-5 Observability helpers ───────────────────────────────────────────────
|
|
40
76
|
/**
|
|
@@ -177,10 +213,10 @@ export function computeDegradationMetrics(db, since, until) {
|
|
|
177
213
|
let entrenchmentFlagged;
|
|
178
214
|
let salienceUniformityFlagged;
|
|
179
215
|
try {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
216
|
+
// Fail-open: the asset_salience table may not exist yet (pre-WS-1 install).
|
|
217
|
+
// getTopRetrievalSalience (storage/repositories/salience-repository.ts,
|
|
218
|
+
// #672 part 2) owns the raw SQL; this call site's try/catch is unchanged.
|
|
219
|
+
const rows = getTopRetrievalSalience(db, 100);
|
|
184
220
|
if (rows.length >= 5) {
|
|
185
221
|
const vals = rows.map((r) => r.retrieval_salience).sort((a, b) => a - b);
|
|
186
222
|
const n = vals.length;
|
|
@@ -188,12 +224,11 @@ export function computeDegradationMetrics(db, since, until) {
|
|
|
188
224
|
return acc + vals.slice(i + 1).reduce((a, xj) => a + Math.abs(xi - xj), 0);
|
|
189
225
|
}, 0);
|
|
190
226
|
const mean = vals.reduce((a, b) => a + b, 0) / n;
|
|
191
|
-
//
|
|
192
|
-
|
|
227
|
+
// `sumAbsDiff` contains each unordered pair once, so the standard Gini
|
|
228
|
+
// denominator is n² × mean (the equivalent ordered-pair formula has 2n²).
|
|
229
|
+
const gini = mean > 0 ? sumAbsDiff / (n * n * mean) : 0;
|
|
193
230
|
// Re-express as a diversity proxy in [0,1]: high gini = low diversity.
|
|
194
231
|
// corpusCentroidDistance approximation: gini is "distance from uniform".
|
|
195
|
-
// Note: retrieval_salience values are in [0,1], so the max achievable Gini
|
|
196
|
-
// with this formula is ~0.5 (when one asset dominates and others are near 0).
|
|
197
232
|
// Two-tailed: >0.35 flags entrenchment (robustly above the ~0.1 uniform
|
|
198
233
|
// baseline); <0.08 flags uniformity collapse — the distribution no longer
|
|
199
234
|
// discriminates between assets (live 2026-07 value 0.040 sat unflagged
|
|
@@ -221,7 +256,7 @@ export function computeDegradationMetrics(db, since, until) {
|
|
|
221
256
|
let totalProcessed = 0;
|
|
222
257
|
for (const row of runs) {
|
|
223
258
|
try {
|
|
224
|
-
const result =
|
|
259
|
+
const result = decodeImproveResult(row.result_json).envelope;
|
|
225
260
|
const cons = result.consolidation;
|
|
226
261
|
if (cons) {
|
|
227
262
|
totalContradicted += toFiniteNumber(cons.contradicted);
|
|
@@ -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
|
+
* `akm health` document renderers, registered rather than intercepted (D7).
|
|
6
|
+
*
|
|
7
|
+
* Both handlers are **pure functions of the shaped result**. Everything the
|
|
8
|
+
* rich report needs — per-run rows, window-compare deltas, the pending
|
|
9
|
+
* proposal queue, and the window labels — travels in the result itself
|
|
10
|
+
* (`runs`/`deltas`/`report`, populated by `akm health --report`). There is no
|
|
11
|
+
* out-of-band context: an earlier revision bound the proposal queue through
|
|
12
|
+
* module state set by the command right before `output()`, which coupled the
|
|
13
|
+
* renderer to call order and made the command branch on the output format to
|
|
14
|
+
* know when to bind it. Putting the data in the envelope removed both.
|
|
15
|
+
*
|
|
16
|
+
* Returning `null` falls through to the generic renderer, so a result without
|
|
17
|
+
* the report dataset still renders — generically — instead of erroring or
|
|
18
|
+
* emitting an empty table.
|
|
19
|
+
*/
|
|
20
|
+
import { renderHtml, resolveTemplatePath } from "../../output/html-render.js";
|
|
21
|
+
import { registerHtmlRenderer, registerMdRenderer } from "../../output/render-registry.js";
|
|
22
|
+
import { buildHealthHtmlReplacements } from "./html-report.js";
|
|
23
|
+
import { renderRunsDetailMd, renderWindowCompareMd } from "./md-report.js";
|
|
24
|
+
function isHealthResult(value) {
|
|
25
|
+
return value !== null && typeof value === "object" && "status" in value;
|
|
26
|
+
}
|
|
27
|
+
registerMdRenderer("health", (result) => {
|
|
28
|
+
if (!isHealthResult(result))
|
|
29
|
+
return null;
|
|
30
|
+
if (result.windows && result.windows.length > 0) {
|
|
31
|
+
return renderWindowCompareMd(result.windows, result.deltas);
|
|
32
|
+
}
|
|
33
|
+
if (result.runs)
|
|
34
|
+
return renderRunsDetailMd(result.runs);
|
|
35
|
+
return null;
|
|
36
|
+
});
|
|
37
|
+
registerHtmlRenderer("health", (result) => {
|
|
38
|
+
if (!isHealthResult(result) || !result.report)
|
|
39
|
+
return null;
|
|
40
|
+
return renderHtml(resolveTemplatePath("health"), buildHealthHtmlReplacements(result, {
|
|
41
|
+
window: result.report.window,
|
|
42
|
+
compare: result.report.compare,
|
|
43
|
+
comparisonMode: result.report.comparisonMode,
|
|
44
|
+
proposals: result.report.pendingProposals,
|
|
45
|
+
deltas: result.deltas,
|
|
46
|
+
}));
|
|
47
|
+
});
|