akm-cli 0.9.17-alpha.3 → 0.9.17-alpha.4
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 +731 -0
- package/dist/akm +94 -196
- package/dist/cli/shared.js +6 -2
- package/dist/cli.js +22 -9
- package/dist/commands/agent/agent-dispatch.js +1 -1
- package/dist/commands/command/command-execution.js +24 -62
- package/dist/commands/feedback-cli.js +0 -1
- package/dist/commands/health/accept-rate.js +2 -2
- package/dist/commands/health/checks.js +30 -75
- package/dist/commands/health/config-skew.js +38 -0
- package/dist/commands/health/egress.js +54 -0
- package/dist/commands/health/html-report.js +0 -38
- package/dist/commands/health/improve-metrics.js +123 -562
- package/dist/commands/health/plugin-staleness.js +53 -3
- package/dist/commands/health/renderers.js +12 -4
- package/dist/commands/health/report-view-model.js +11 -106
- package/dist/commands/health/types-improve.js +4 -19
- package/dist/commands/health/windows.js +64 -73
- package/dist/commands/health.js +122 -143
- package/dist/commands/improve/consolidate/chunking.js +25 -100
- package/dist/commands/improve/consolidate/sanitize.js +54 -149
- package/dist/commands/improve/consolidate.js +538 -1075
- package/dist/commands/improve/content-hash.js +16 -24
- package/dist/commands/improve/distill/content-repair.js +18 -100
- package/dist/commands/improve/distill-guards.js +20 -81
- package/dist/commands/improve/distill-promotion-policy.js +23 -243
- package/dist/commands/improve/distill.js +608 -1075
- package/dist/commands/improve/eligibility.js +126 -400
- package/dist/commands/improve/execution.js +3 -5
- package/dist/commands/improve/extract.js +487 -1046
- package/dist/commands/improve/feedback-valence.js +0 -25
- package/dist/commands/improve/improve-cli.js +29 -166
- package/dist/commands/improve/improve-result-file.js +10 -66
- package/dist/commands/improve/improve-strategies.js +12 -7
- package/dist/commands/improve/improve-usage-report.js +18 -64
- package/dist/commands/improve/improve.js +443 -1063
- package/dist/commands/improve/ledger.js +114 -0
- package/dist/commands/improve/locks.js +2 -8
- package/dist/commands/improve/loop-stages.js +459 -1172
- package/dist/commands/improve/memory/derived-ref.js +12 -77
- package/dist/commands/improve/memory/memory-belief.js +14 -118
- package/dist/commands/improve/memory/memory-improve.js +4 -3
- package/dist/commands/improve/outcome-loop.js +28 -156
- package/dist/commands/improve/planner.js +5 -10
- package/dist/commands/improve/preparation.js +851 -2339
- package/dist/commands/improve/proactive-maintenance.js +34 -101
- package/dist/commands/improve/reflect-noise.js +104 -280
- package/dist/commands/improve/reflect.js +621 -1367
- package/dist/commands/improve/salience.js +46 -232
- package/dist/commands/improve/session-asset.js +19 -100
- package/dist/commands/improve/stage.js +323 -0
- package/dist/commands/proposal/drain.js +251 -644
- package/dist/commands/proposal/proposal-cli.js +3 -18
- package/dist/commands/proposal/proposal-types.js +20 -41
- package/dist/commands/proposal/proposal.js +1 -2
- package/dist/commands/proposal/propose.js +134 -160
- package/dist/commands/proposal/repository.js +502 -1487
- package/dist/commands/proposal/validators/proposal-quality-validators.js +71 -174
- package/dist/commands/proposal/validators/proposal-validators.js +1 -1
- package/dist/commands/proposal/validators/proposals.js +13 -89
- package/dist/commands/read/curate.js +63 -413
- package/dist/commands/read/search-cli.js +16 -33
- package/dist/commands/read/search.js +17 -23
- package/dist/commands/read/show.js +2 -13
- package/dist/commands/sources/bundle-cli.js +25 -2
- package/dist/commands/sources/bundle-config-ops.js +7 -0
- package/dist/commands/sources/dangerous-env-audit.js +1 -2
- package/dist/commands/sources/info.js +2 -11
- package/dist/commands/sources/installed-stashes.js +197 -746
- package/dist/commands/sources/schema-repair.js +98 -129
- package/dist/commands/sources/source-add.js +62 -12
- package/dist/commands/sources/stash-cli.js +1 -1
- package/dist/commands/tasks/explain.js +10 -13
- package/dist/commands/tasks/tasks-cli.js +9 -8
- package/dist/commands/tasks/tasks.js +326 -930
- package/dist/commands/tasks/validate.js +42 -21
- package/dist/commands/workflow/plan.js +22 -29
- package/dist/commands/workflow-cli.js +4 -4
- package/dist/core/adapter/adapters/akm-adapter.js +0 -1
- package/dist/core/adapter/adapters/akm-lint.js +2 -3
- package/dist/core/adapter/adapters/akm-metadata.js +11 -12
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +1 -1
- package/dist/core/adapter/execution-source.js +17 -29
- package/dist/core/asset/resolve-ref.js +1 -1
- package/dist/core/bundle-id.js +42 -5
- package/dist/core/bundle-rename.js +291 -0
- package/dist/core/config/config-io.js +1 -2
- package/dist/core/config/config-schema.js +1 -33
- package/dist/core/config/config-walker.js +1 -1
- package/dist/core/config/config.js +163 -68
- package/dist/core/config/legacy-source-shape-shim.js +38 -9
- package/dist/core/config/schema/embedding.js +20 -5
- package/dist/core/config/schema/engines.js +5 -0
- package/dist/core/config/schema/execution.js +1 -1
- package/dist/core/config/schema/experimental.js +1 -1
- package/dist/core/config/schema/improve-processes.js +21 -95
- package/dist/core/config/schema/improve.js +4 -42
- package/dist/core/config/schema/scheduler.js +12 -12
- package/dist/core/config/schema/search.js +6 -22
- package/dist/core/env-secret-ref.js +0 -1
- package/dist/core/errors.js +8 -9
- package/dist/core/file-lock.js +76 -173
- package/dist/core/logs-db.js +2 -2
- package/dist/core/paths.js +0 -27
- package/dist/core/redaction.js +109 -2
- package/dist/core/run-lock.js +2 -5
- package/dist/core/spawn-env.js +1 -1
- package/dist/core/state/migrations.js +108 -61
- package/dist/core/state-db-scope.js +2 -4
- package/dist/core/state-db.js +126 -692
- package/dist/core/type-presentation.js +1 -9
- package/dist/core/write-source.js +293 -1012
- package/dist/execution/input-contract.js +1 -1
- package/dist/execution/resolved-request.js +135 -689
- package/dist/execution/source.js +63 -257
- package/dist/execution/target-ref.js +1 -1
- package/dist/indexer/bundle-identity-guard.js +2 -2
- package/dist/indexer/db/graph-db.js +106 -46
- package/dist/indexer/ensure-index.js +44 -85
- package/dist/indexer/graph/graph-extraction.js +340 -562
- package/dist/indexer/graph/graph-related.js +130 -0
- package/dist/indexer/index-rebuild-lock.js +3 -11
- package/dist/indexer/index-writer-lock.js +8 -17
- package/dist/indexer/index-written-assets.js +139 -151
- package/dist/indexer/indexer.js +524 -846
- package/dist/indexer/materialize-embeddings.js +60 -397
- package/dist/indexer/passes/memory-inference.js +81 -90
- package/dist/indexer/passes/metadata.js +132 -200
- package/dist/indexer/read-preflight.js +0 -7
- package/dist/indexer/scan/doc-to-entry.js +1 -3
- package/dist/indexer/scan/drain-dir.js +1 -1
- package/dist/indexer/search/db-search.js +181 -590
- package/dist/indexer/search/fts-query.js +30 -41
- package/dist/indexer/search/ranking.js +28 -154
- package/dist/indexer/search/search-attribution.js +12 -32
- package/dist/indexer/search/search-fields.js +11 -15
- package/dist/indexer/search/search-hit-enrichers.js +54 -85
- package/dist/indexer/search/search-source.js +1 -4
- package/dist/indexer/usage/usage-events.js +2 -7
- package/dist/integrations/agent/engine-fallback.js +23 -40
- package/dist/integrations/agent/engine-resolution.js +93 -183
- package/dist/integrations/agent/execution.js +507 -0
- package/dist/integrations/agent/model-map.js +28 -156
- package/dist/integrations/agent/request-lowering.js +66 -141
- package/dist/integrations/agent/runner-dispatch.js +143 -321
- package/dist/integrations/agent/runner.js +54 -14
- package/dist/integrations/lockfile.js +53 -101
- package/dist/llm/embedders/deterministic.js +2 -3
- package/dist/llm/embedders/profile.js +71 -0
- package/dist/llm/embedders/remote.js +10 -15
- package/dist/llm/graph-extract.js +3 -12
- package/dist/llm/index-passes.js +3 -5
- package/dist/llm/memory-infer.js +1 -2
- package/dist/llm/metadata-enhance.js +1 -2
- package/dist/llm/structured-call.js +5 -24
- package/dist/output/generic-render.js +23 -11
- package/dist/output/html-render.js +13 -10
- package/dist/output/render-registry.js +3 -32
- package/dist/output/shapes/helpers.js +2 -34
- package/dist/output/shapes/passthrough.js +1 -9
- package/dist/{indexer/search/ranking-types.js → output/text/bundle-rename.js} +4 -1
- package/dist/output/text/command-format.js +60 -23
- package/dist/output/text/helpers.js +1 -1
- package/dist/output/text/migrate.js +5 -14
- package/dist/output/text/proposal-format.js +1 -2
- package/dist/output/text/workflow-format.js +0 -32
- package/dist/output/text.js +2 -0
- package/dist/registry/factory.js +4 -19
- package/dist/registry/network.js +66 -220
- package/dist/registry/providers/index.js +0 -2
- package/dist/registry/providers/skills-sh.js +3 -14
- package/dist/registry/providers/static-index.js +24 -26
- package/dist/registry/resolve.js +55 -131
- package/dist/scripts/akm-migrate-node.js +43937 -93313
- package/dist/scripts/akm-migrate.js +43697 -93071
- package/dist/setup/registry-stash-loader.js +4 -13
- package/dist/setup/semantic-assets.js +3 -44
- package/dist/setup/setup.js +1 -1
- package/dist/setup/steps/tasks.js +25 -15
- package/dist/sources/provider-factory.js +17 -18
- package/dist/sources/providers/filesystem.js +2 -3
- package/dist/sources/providers/git-install.js +7 -1
- package/dist/sources/providers/git-provider.js +0 -3
- package/dist/sources/providers/git-stash.js +0 -17
- package/dist/sources/providers/npm.js +2 -4
- package/dist/sources/providers/provider-utils.js +5 -10
- package/dist/sources/providers/website.js +0 -2
- package/dist/sources/snapshot-fetchers/website-ingest.js +1 -1
- package/dist/sources/website-url.js +2 -2
- package/dist/storage/database.js +9 -35
- package/dist/storage/repositories/improve-ledger-repository.js +168 -0
- package/dist/storage/repositories/index-connection.js +34 -70
- package/dist/storage/repositories/index-entries-repository.js +69 -111
- package/dist/storage/repositories/index-entry-mapper.js +1 -2
- package/dist/storage/repositories/index-entry-schema.js +83 -269
- package/dist/storage/repositories/index-fts-repository.js +86 -256
- package/dist/storage/repositories/index-llm-cache-repository.js +17 -0
- package/dist/storage/repositories/index-meta-repository.js +6 -4
- package/dist/storage/repositories/index-schema.js +192 -220
- package/dist/storage/repositories/index-utility-repository.js +8 -29
- package/dist/storage/repositories/index-vec-repository.js +133 -414
- package/dist/storage/repositories/outcome-repository.js +2 -1
- package/dist/storage/repositories/proposals-repository.js +35 -0
- package/dist/storage/repositories/registry-index-cache-repository.js +100 -0
- package/dist/storage/repositories/task-history-repository.js +26 -4
- package/dist/storage/repositories/workflow-runs-repository.js +53 -244
- package/dist/storage/sqlite-migrations.js +136 -0
- package/dist/storage/sqlite-pragmas.js +11 -9
- package/dist/storage/sqlite-transaction.js +170 -0
- package/dist/storage/state-db-integrity.js +34 -27
- package/dist/tasks/activation-config.js +134 -62
- package/dist/tasks/backends/cron.js +129 -277
- package/dist/tasks/backends/exec-utils.js +2 -5
- package/dist/tasks/backends/launchd.js +125 -745
- package/dist/tasks/backends/schtasks.js +101 -620
- package/dist/tasks/prepare/prepare-support.js +5 -15
- package/dist/tasks/prepare/prepare.js +0 -2
- package/dist/tasks/resolve-akm-bin.js +20 -79
- package/dist/tasks/run/attempt-lifecycle.js +0 -1
- package/dist/tasks/scheduler-binding.js +18 -238
- package/dist/tasks/scheduler-invocation.js +52 -52
- package/dist/tasks/scheduler-lock.js +53 -0
- package/dist/tasks/scheduler-sync.js +361 -751
- package/dist/tasks/source/parse-task-source.js +160 -10
- package/dist/tasks/source/task-source-v3-frozen.js +3 -4
- package/dist/tasks/source/task-to-v4.js +2 -2
- package/dist/workflows/authoring/authoring.js +3 -12
- package/dist/workflows/compile.js +211 -0
- package/dist/workflows/concurrency-policy.js +13 -74
- package/dist/workflows/exec/child-invocation.js +3 -17
- package/dist/workflows/exec/child-workflow.js +32 -141
- package/dist/workflows/exec/dispatch-redaction.js +13 -53
- package/dist/workflows/exec/environment.js +98 -0
- package/dist/workflows/exec/exec-unit.js +33 -140
- package/dist/workflows/exec/frozen-judge.js +7 -59
- package/dist/workflows/exec/native-executor.js +82 -341
- package/dist/workflows/exec/param-secrets.js +29 -47
- package/dist/workflows/exec/run-workflow.js +154 -387
- package/dist/workflows/exec/scheduler.js +9 -36
- package/dist/workflows/exec/step-work.js +127 -430
- package/dist/workflows/exec/unit-dispatch.js +11 -63
- package/dist/workflows/exec/unit-writer.js +8 -52
- package/dist/workflows/exec/worktree.js +39 -273
- package/dist/workflows/freeze/child-output-references.js +4 -15
- package/dist/workflows/freeze/environment.js +99 -92
- package/dist/workflows/freeze/freeze.js +172 -0
- package/dist/workflows/freeze/step-values.js +19 -21
- package/dist/workflows/freeze/targets/child-workflow.js +23 -92
- package/dist/workflows/freeze/targets/command.js +10 -33
- package/dist/workflows/freeze/targets/script.js +5 -12
- package/dist/workflows/freeze/targets/shell.js +3 -6
- package/dist/workflows/freeze/targets/task.js +25 -80
- package/dist/workflows/freeze/task-bindings.js +20 -67
- package/dist/workflows/{source-ir/github-yaml.js → github-yaml.js} +88 -206
- package/dist/workflows/ir/params.js +6 -51
- package/dist/workflows/ir/plan-hash.js +2 -34
- package/dist/workflows/parser.js +140 -43
- package/dist/{commands/improve/consolidate/types.js → workflows/plan.js} +2 -1
- package/dist/workflows/renderer.js +36 -69
- package/dist/workflows/resource-limits.js +12 -120
- package/dist/workflows/runtime/agent-identity.js +8 -40
- package/dist/workflows/runtime/run-outputs.js +3 -6
- package/dist/workflows/runtime/run-plan.js +316 -0
- package/dist/workflows/runtime/runs.js +48 -200
- package/dist/workflows/runtime/workflow-asset-loader.js +24 -57
- package/dist/workflows/{source-ir/semantics.js → source-semantics.js} +16 -20
- package/dist/workflows/validate-summary.js +2 -7
- package/docs/integration/bundling-akm.md +49 -42
- package/docs/migration/README.md +1 -0
- package/docs/migration/release-notes/0.9.17.md +41 -0
- package/docs/migration/v0.9.1-to-v0.9.2.md +19 -7
- package/docs/reference/cli.md +182 -125
- package/docs/reference/configuration.md +49 -56
- package/docs/reference/data-and-telemetry.md +19 -20
- package/docs/reference/tasks.md +86 -38
- package/docs/reference/workflow-schema.md +14 -18
- package/docs/reference/workflows.md +6 -9
- package/package.json +1 -1
- package/schemas/akm-config.json +87 -406
- package/dist/commands/health/advisories.js +0 -150
- package/dist/commands/health/metrics.js +0 -329
- package/dist/commands/health/surfaces.js +0 -102
- package/dist/commands/improve/anti-collapse.js +0 -83
- package/dist/commands/improve/collapse-detector.js +0 -432
- package/dist/commands/improve/consolidate/eligibility.js +0 -48
- package/dist/commands/improve/consolidate/merge.js +0 -146
- package/dist/commands/improve/distill/promote-memory.js +0 -329
- package/dist/commands/improve/distill/quality-gate.js +0 -500
- package/dist/commands/improve/memory/memory-contradiction-detect.js +0 -291
- package/dist/commands/improve/proposal-envelope.js +0 -31
- package/dist/commands/improve/run-context.js +0 -123
- package/dist/commands/improve/shared.js +0 -21
- package/dist/commands/improve/source-identity.js +0 -28
- package/dist/commands/improve/triage.js +0 -96
- package/dist/commands/proposal/drain-policies.js +0 -151
- package/dist/commands/sources/update-transaction.js +0 -220
- package/dist/core/action-contributors.js +0 -28
- package/dist/core/config/config-version-shim.js +0 -101
- package/dist/core/config/retired-experimental-keys-shim.js +0 -62
- package/dist/core/fs-txn.js +0 -405
- package/dist/core/lexical-score.js +0 -25
- package/dist/core/maintenance-barrier.js +0 -167
- package/dist/execution/executable-identity.js +0 -105
- package/dist/execution/guarded-source.js +0 -441
- package/dist/indexer/graph/graph-boost.js +0 -427
- package/dist/indexer/graph/graph-dedup.js +0 -95
- package/dist/indexer/search/name-match.js +0 -35
- package/dist/indexer/search/ranking-contributors.js +0 -515
- package/dist/indexer/walk/project-context.js +0 -192
- package/dist/integrations/agent/execution-cascade.js +0 -566
- package/dist/integrations/agent/execution-definitions.js +0 -202
- package/dist/integrations/agent/execution-lowering.js +0 -841
- package/dist/integrations/agent/execution-preparation.js +0 -98
- package/dist/integrations/agent/inline-execution.js +0 -74
- package/dist/registry/create-provider-registry.js +0 -29
- package/dist/registry/pinned-request-helper.js +0 -247
- package/dist/registry/pinned-transport.js +0 -717
- package/dist/sources/providers/index.js +0 -14
- package/dist/storage/engines/sqlite-migrations.js +0 -271
- package/dist/storage/repositories/canaries-repository.js +0 -107
- package/dist/storage/repositories/embedding-salvage-repository.js +0 -184
- package/dist/storage/repositories/registry-cache.js +0 -113
- package/dist/tasks/scheduler-sync-preview.js +0 -52
- package/dist/workflows/freeze/resolve-steps.js +0 -86
- package/dist/workflows/freeze/source-freeze.js +0 -64
- package/dist/workflows/ir/compile.js +0 -321
- package/dist/workflows/ir/environment-v4.js +0 -330
- package/dist/workflows/ir/freeze-v4.js +0 -153
- package/dist/workflows/ir/schema-v4.js +0 -745
- package/dist/workflows/ir/schema.js +0 -354
- package/dist/workflows/program/schema.js +0 -78
- package/dist/workflows/runtime/checkin.js +0 -57
- package/dist/workflows/runtime/plan-classifier.js +0 -196
- package/dist/workflows/runtime/unit-checkin.js +0 -45
- package/dist/workflows/runtime/unit-phases.js +0 -20
- package/dist/workflows/schema.js +0 -4
- package/dist/workflows/source-ir/compile.js +0 -200
- package/dist/workflows/source-ir/program.js +0 -50
- package/dist/workflows/source-ir/result.js +0 -26
- package/dist/workflows/source-ir/schema.js +0 -786
- package/dist/workflows/source-ir/triggers.js +0 -79
- package/dist/workflows/source-ir/uses.js +0 -40
- package/dist/workflows/validator.js +0 -60
|
@@ -10,7 +10,7 @@ import { EXTRACT_INFRASTRUCTURE_SKIP_REASONS } from "../../core/improve-types.js
|
|
|
10
10
|
import { listPendingStateMigrations } from "../../core/state-db.js";
|
|
11
11
|
import { withEngineFallback } from "../../integrations/agent/engine-fallback.js";
|
|
12
12
|
import { isLlmCredentialAvailable, resolveEngine, } from "../../integrations/agent/engine-resolution.js";
|
|
13
|
-
import { executionEngineDefinitionsFromConfig } from "../../integrations/agent/execution
|
|
13
|
+
import { executionEngineDefinitionsFromConfig } from "../../integrations/agent/execution.js";
|
|
14
14
|
import { loadModelMap, mergeModelMapLayers, parseModelMapLayer, readInstalledModelMapText, resolveModelMapAlias, userModelMapPath, } from "../../integrations/agent/model-map.js";
|
|
15
15
|
import { probeEndpointOnce } from "../../llm/client.js";
|
|
16
16
|
import { STATE_DB_FREELIST_WARN_RATIO, } from "../../storage/state-db-integrity.js";
|
|
@@ -784,16 +784,10 @@ export function runSelectedModelAliasesProbe(deps = {}) {
|
|
|
784
784
|
};
|
|
785
785
|
}
|
|
786
786
|
/**
|
|
787
|
-
*
|
|
788
|
-
*
|
|
789
|
-
*
|
|
790
|
-
*
|
|
791
|
-
* corresponding managed open would refuse outright because a pending
|
|
792
|
-
* migration is historical-destructive (see `beforeMigrationLocked` in
|
|
793
|
-
* `src/core/state/migrations.ts`). This is what lets `akm health` report that
|
|
794
|
-
* refusal as an ordinary `fail` check instead of crashing the whole command —
|
|
795
|
-
* and what replaces a bundler grepping akm's refusal error text
|
|
796
|
-
* to detect the same case.
|
|
787
|
+
* `state-db-migrations` when the open itself failed: the migrations still
|
|
788
|
+
* pending after a failed apply, from a read-only listing that never applies
|
|
789
|
+
* anything. A `fail` row, not a crash, is what a bundler watches for instead
|
|
790
|
+
* of grepping akm's error text.
|
|
797
791
|
*/
|
|
798
792
|
export function runPendingStateMigrationsCheck(stateDbPath, deps = {}) {
|
|
799
793
|
const pending = (deps.listPendingStateMigrations ?? listPendingStateMigrations)(stateDbPath);
|
|
@@ -817,6 +811,27 @@ export function runPendingStateMigrationsCheck(stateDbPath, deps = {}) {
|
|
|
817
811
|
evidence: { path: stateDbPath, pending },
|
|
818
812
|
};
|
|
819
813
|
}
|
|
814
|
+
/**
|
|
815
|
+
* Hard check: state.db's ledger is current. Every open applies the pending
|
|
816
|
+
* migrations (copying the file aside first when one drops schema), so after
|
|
817
|
+
* health's own open nothing is pending; this names what that open applied, so
|
|
818
|
+
* an upgrade that migrated state.db is visible in the report.
|
|
819
|
+
*/
|
|
820
|
+
export function appliedStateMigrationsCheck(stateDbPath, report) {
|
|
821
|
+
const { applied, backupPath } = report;
|
|
822
|
+
const range = applied.length > 1 ? `${applied[0]} … ${applied[applied.length - 1]}` : applied[0];
|
|
823
|
+
return {
|
|
824
|
+
name: "state-db-migrations",
|
|
825
|
+
kind: "deterministic",
|
|
826
|
+
status: "pass",
|
|
827
|
+
confidence: "high",
|
|
828
|
+
message: applied.length === 0
|
|
829
|
+
? "state.db has no pending migrations."
|
|
830
|
+
: `Applied ${applied.length} pending state.db migration(s) on open (${range})` +
|
|
831
|
+
(backupPath ? `; the pre-migration copy is ${backupPath}.` : "."),
|
|
832
|
+
evidence: { path: stateDbPath, pending: [], applied, ...(backupPath ? { backupPath } : {}) },
|
|
833
|
+
};
|
|
834
|
+
}
|
|
820
835
|
/**
|
|
821
836
|
* #943: name the dominant `detail.reason` behind `task-fail-rate`'s warning
|
|
822
837
|
* when one reason accounts for at least half of the window's command-task
|
|
@@ -890,7 +905,9 @@ export const HEALTH_CHECKS = [
|
|
|
890
905
|
status: "fail",
|
|
891
906
|
confidence: "high",
|
|
892
907
|
message: `state.db failed PRAGMA quick_check: ${detail}. Repair: back up state.db, then run ` +
|
|
893
|
-
`sqlite3 state.db ".
|
|
908
|
+
`sqlite3 state.db ".recover" | sqlite3 state.new.db, verify state.new.db passes quick_check, stop ` +
|
|
909
|
+
"every akm process, then delete state.db-wal and state.db-shm before swapping state.new.db in as " +
|
|
910
|
+
"state.db — a leftover WAL from the OLD database is replayed onto the new one and corrupts it.",
|
|
894
911
|
evidence: { path: ctx.stateDbPath, lines, freelistRatio },
|
|
895
912
|
};
|
|
896
913
|
}
|
|
@@ -925,7 +942,7 @@ export const HEALTH_CHECKS = [
|
|
|
925
942
|
{
|
|
926
943
|
name: "state-db-migrations",
|
|
927
944
|
channel: "hard",
|
|
928
|
-
run: (ctx) =>
|
|
945
|
+
run: (ctx) => appliedStateMigrationsCheck(ctx.stateDbPath, ctx.stateDbMigrations),
|
|
929
946
|
},
|
|
930
947
|
{
|
|
931
948
|
name: "task-history-read",
|
|
@@ -939,20 +956,6 @@ export const HEALTH_CHECKS = [
|
|
|
939
956
|
evidence: { rows: ctx.taskRowCount, since: ctx.since },
|
|
940
957
|
}),
|
|
941
958
|
},
|
|
942
|
-
{
|
|
943
|
-
name: "task-log-backing",
|
|
944
|
-
channel: "hard",
|
|
945
|
-
run: (ctx) => ({
|
|
946
|
-
name: "task-log-backing",
|
|
947
|
-
kind: "deterministic",
|
|
948
|
-
status: ctx.logBackingRate === 1 ? "pass" : "fail",
|
|
949
|
-
confidence: "high",
|
|
950
|
-
message: ctx.logBackingRate === 1
|
|
951
|
-
? "Every task_history log_path resolved on disk."
|
|
952
|
-
: `${ctx.taskRowsWithLogsCount - ctx.existingLogRowsCount} task log(s) referenced in task_history are missing.`,
|
|
953
|
-
evidence: { totalWithLogs: ctx.taskRowsWithLogsCount, existingLogs: ctx.existingLogRowsCount },
|
|
954
|
-
}),
|
|
955
|
-
},
|
|
956
959
|
{
|
|
957
960
|
name: "active-runs",
|
|
958
961
|
channel: "hard",
|
|
@@ -1127,54 +1130,6 @@ export const HEALTH_CHECKS = [
|
|
|
1127
1130
|
};
|
|
1128
1131
|
},
|
|
1129
1132
|
},
|
|
1130
|
-
{
|
|
1131
|
-
// #603: pool-saturation advisory. The raw `sessionsScanned` count fired on
|
|
1132
|
-
// normal cadence changes (the Jun 12 false alarm). Instead track the ratio
|
|
1133
|
-
// of NEW (unseen) sessions to the total session pool extract evaluated in
|
|
1134
|
-
// the window: a low ratio is the *expected* steady state, only a near-zero
|
|
1135
|
-
// ratio signals a possible discovery/dedup bug.
|
|
1136
|
-
//
|
|
1137
|
-
// unseen ≈ `sessionsScanned` (extract only processes new sessions; already-
|
|
1138
|
-
// seen ones are deduped into `sessionsSkipped`). total = scanned + skipped.
|
|
1139
|
-
// This is a heuristic approximation — `sessionsSkipped` also folds in
|
|
1140
|
-
// too-short skips — so the check is informational and never gates status.
|
|
1141
|
-
name: "pool-saturation",
|
|
1142
|
-
channel: "advisory",
|
|
1143
|
-
run: (ctx) => {
|
|
1144
|
-
const sx = ctx.sessionExtraction;
|
|
1145
|
-
const total = sx.sessionsScanned + sx.sessionsSkipped;
|
|
1146
|
-
const unseen = sx.sessionsScanned;
|
|
1147
|
-
const ratio = total > 0 ? unseen / total : null;
|
|
1148
|
-
const pct = ratio === null ? null : Math.round(ratio * 1000) / 10;
|
|
1149
|
-
let status = "pass";
|
|
1150
|
-
let confidence = "low";
|
|
1151
|
-
let message;
|
|
1152
|
-
if (!sx.ran || ratio === null) {
|
|
1153
|
-
message = "Pool saturation: no extract activity in the window — no signal.";
|
|
1154
|
-
}
|
|
1155
|
-
else if (ratio < 0.02) {
|
|
1156
|
-
status = "warn";
|
|
1157
|
-
confidence = "medium";
|
|
1158
|
-
message = `Session pool near-exhausted: only ${pct}% of the ${total}-session pool was new (<2%). Possible discovery/dedup bug — verify extract is still finding new sessions.`;
|
|
1159
|
-
}
|
|
1160
|
-
else if (ratio < 0.1) {
|
|
1161
|
-
confidence = "medium";
|
|
1162
|
-
message = `Session pool saturation: ${pct}% of ${total} sessions were new (<10%, steady-state expected — informational).`;
|
|
1163
|
-
}
|
|
1164
|
-
else {
|
|
1165
|
-
confidence = "medium";
|
|
1166
|
-
message = `Session pool healthy: ${pct}% of ${total} sessions were new.`;
|
|
1167
|
-
}
|
|
1168
|
-
return {
|
|
1169
|
-
name: "pool-saturation",
|
|
1170
|
-
kind: "heuristic",
|
|
1171
|
-
status,
|
|
1172
|
-
confidence,
|
|
1173
|
-
message,
|
|
1174
|
-
evidence: { totalSessions: total, unseenSessions: unseen, saturationRatio: ratio },
|
|
1175
|
-
};
|
|
1176
|
-
},
|
|
1177
|
-
},
|
|
1178
1133
|
{
|
|
1179
1134
|
name: "auto-accept-validation",
|
|
1180
1135
|
channel: "advisory",
|
|
@@ -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
|
+
* `binary-config-skew` advisory for `akm health`: warn when config.json
|
|
6
|
+
* carries a `configVersion` NEWER than (or unorderable against) this binary's
|
|
7
|
+
* CURRENT_CONFIG_VERSION — a newer akm wrote the shared config, so this
|
|
8
|
+
* install is stale. That is the proven multi-install incident class. Silent
|
|
9
|
+
* for current or older versions and for unreadable configs (config loading
|
|
10
|
+
* reports its own errors).
|
|
11
|
+
*/
|
|
12
|
+
import { readTextFile } from "../../core/common.js";
|
|
13
|
+
import { CURRENT_CONFIG_VERSION } from "../../core/config/config-schema.js";
|
|
14
|
+
import { compareConfigVersion } from "../../core/config/config-version.js";
|
|
15
|
+
export function collectConfigSkewAdvisory(configPath) {
|
|
16
|
+
let raw;
|
|
17
|
+
try {
|
|
18
|
+
raw = JSON.parse(readTextFile(configPath, "Config file"));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const onDisk = raw.configVersion;
|
|
24
|
+
const order = compareConfigVersion(onDisk, CURRENT_CONFIG_VERSION);
|
|
25
|
+
const skewed = order === 1 || (onDisk !== undefined && order === undefined);
|
|
26
|
+
if (!skewed)
|
|
27
|
+
return undefined;
|
|
28
|
+
return {
|
|
29
|
+
name: "binary-config-skew",
|
|
30
|
+
kind: "deterministic",
|
|
31
|
+
status: "warn",
|
|
32
|
+
confidence: "high",
|
|
33
|
+
message: `config.json has configVersion ${JSON.stringify(onDisk)} but this binary knows ${CURRENT_CONFIG_VERSION} — ` +
|
|
34
|
+
"a newer akm wrote the shared config, so this install is stale. Upgrade this install; do not keep a stale " +
|
|
35
|
+
"binary against the shared config/DBs.",
|
|
36
|
+
evidence: { onDiskConfigVersion: onDisk, binaryConfigVersion: CURRENT_CONFIG_VERSION },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
* `egress-endpoints` advisory for `akm health` (meta-review 08, surfaces 3/9):
|
|
6
|
+
* the remote-destination list, for eyeball diff. A pure projection over the
|
|
7
|
+
* effective config (no process.env reads); silent when nothing remote is
|
|
8
|
+
* configured, matching the `stash-git-exposure` / `binary-config-skew`
|
|
9
|
+
* advisories' pattern.
|
|
10
|
+
*/
|
|
11
|
+
import { formatRegistryUrl } from "../../core/registry-url.js";
|
|
12
|
+
/**
|
|
13
|
+
* `egress-endpoints` (08 surfaces 3/9): the full list of remote destinations
|
|
14
|
+
* akm can talk to under the effective config — registries, remote sources,
|
|
15
|
+
* LLM endpoints, embedding endpoint — as one pass-status informational entry
|
|
16
|
+
* for eyeball diff against expectations. Silent only when nothing remote is
|
|
17
|
+
* configured at all.
|
|
18
|
+
*/
|
|
19
|
+
export function collectEgressAdvisory(config) {
|
|
20
|
+
if (!config)
|
|
21
|
+
return undefined;
|
|
22
|
+
const endpoints = [];
|
|
23
|
+
for (const reg of config.registries ?? []) {
|
|
24
|
+
if (reg.enabled === false || !reg.url)
|
|
25
|
+
continue;
|
|
26
|
+
endpoints.push(`registry ${reg.name ?? "(unnamed)"}: ${formatRegistryUrl(reg.url)}`);
|
|
27
|
+
}
|
|
28
|
+
for (const [key, bundle] of Object.entries(config.bundles ?? {})) {
|
|
29
|
+
if (!bundle)
|
|
30
|
+
continue;
|
|
31
|
+
const url = bundle.git ?? bundle.website?.url;
|
|
32
|
+
if (!url)
|
|
33
|
+
continue;
|
|
34
|
+
endpoints.push(`source ${key} (${bundle.git ? "git" : "website"}): ${url}`);
|
|
35
|
+
}
|
|
36
|
+
for (const [name, engine] of Object.entries(config.engines ?? {})) {
|
|
37
|
+
if (engine?.kind !== "llm" || !engine.endpoint)
|
|
38
|
+
continue;
|
|
39
|
+
endpoints.push(`llm ${name}: ${engine.endpoint}`);
|
|
40
|
+
}
|
|
41
|
+
if (config.embedding?.endpoint)
|
|
42
|
+
endpoints.push(`embedding: ${config.embedding.endpoint}`);
|
|
43
|
+
if (endpoints.length === 0)
|
|
44
|
+
return undefined;
|
|
45
|
+
return {
|
|
46
|
+
name: "egress-endpoints",
|
|
47
|
+
kind: "deterministic",
|
|
48
|
+
status: "pass",
|
|
49
|
+
confidence: "high",
|
|
50
|
+
message: `${endpoints.length} remote endpoint(s) in the effective config (registries/sources/LLM/embedding) — ` +
|
|
51
|
+
"review the evidence list for unexpected destinations.",
|
|
52
|
+
evidence: { endpoints },
|
|
53
|
+
};
|
|
54
|
+
}
|
|
@@ -331,44 +331,6 @@ function renderActionItems(vm) {
|
|
|
331
331
|
descHtml: `Newest run is ${esc(latestRunHuman)} — older than the 6h freshness threshold. Check the improve scheduler/cron.`,
|
|
332
332
|
});
|
|
333
333
|
}
|
|
334
|
-
// WS-5: corpus entrenchment flag.
|
|
335
|
-
if (vm.degradation?.entrenchmentFlagged) {
|
|
336
|
-
pushItem({
|
|
337
|
-
key: "corpus-entrenchment",
|
|
338
|
-
prio: "P2",
|
|
339
|
-
cls: "warn",
|
|
340
|
-
title: "Corpus entrenchment risk: retrieval_salience Gini > 0.35",
|
|
341
|
-
descHtml: "A small set of assets dominates retrieval — retrieval diversity is low. " +
|
|
342
|
-
"Review top-ranked assets for stale or over-represented content. " +
|
|
343
|
-
`Corpus diversity proxy: ${esc(String(vm.degradation.corpusCentroidDistance))}.`,
|
|
344
|
-
remedy: "akm health --format json | jq '.improve.degradation'",
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
// Low-tail companion: salience distribution collapsed toward uniform.
|
|
348
|
-
if (vm.degradation?.salienceUniformityFlagged) {
|
|
349
|
-
pushItem({
|
|
350
|
-
key: "salience-uniformity-collapse",
|
|
351
|
-
prio: "P2",
|
|
352
|
-
cls: "warn",
|
|
353
|
-
title: "Salience distribution collapsed: retrieval_salience Gini < 0.08",
|
|
354
|
-
descHtml: `The ${vm.degradation.retrievalSalienceSampleSize} observed, resolvable salience scores are near-uniform — ` +
|
|
355
|
-
"ranking carries little discrimination among assets with retrieval evidence. " +
|
|
356
|
-
`Corpus diversity proxy: ${esc(String(vm.degradation.corpusCentroidDistance))}.`,
|
|
357
|
-
remedy: "akm health --format json | jq '.improve.degradation'",
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
// WS-5: over-budget consolidation advisory.
|
|
361
|
-
if (vm.perf.overBudgetRuns > 0) {
|
|
362
|
-
pushItem({
|
|
363
|
-
key: "over-budget-consolidation",
|
|
364
|
-
prio: "P2",
|
|
365
|
-
cls: "warn",
|
|
366
|
-
title: `${vm.perf.overBudgetRuns} consolidation run${vm.perf.overBudgetRuns === 1 ? "" : "s"} exceeded budget`,
|
|
367
|
-
descHtml: "Consolidation phase wall time exceeded the total run budget on these runs. " +
|
|
368
|
-
"Consider increasing the timeout or reducing the consolidation pool via strategy config.",
|
|
369
|
-
remedy: "akm config list",
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
334
|
items.sort((a, b) => PRIO_RANK[a.prio] - PRIO_RANK[b.prio]);
|
|
373
335
|
return items.length > 0
|
|
374
336
|
? items.map(actionItemCard).join("\n")
|