harnery 0.38.0 → 0.40.0
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/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +32 -8
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +97 -6
- package/dist/commands/backup.d.ts +16 -0
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +239 -33
- package/dist/commands/browse.d.ts +8 -0
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +466 -231
- package/dist/commands/diagnostics.d.ts.map +1 -1
- package/dist/commands/diagnostics.js +6 -3
- package/dist/commands/ledger-v3.d.ts.map +1 -1
- package/dist/commands/ledger-v3.js +20 -4
- package/dist/commands/qa-run.d.ts.map +1 -1
- package/dist/commands/qa-run.js +26 -3
- package/dist/commands/qa-status.d.ts.map +1 -1
- package/dist/commands/qa-status.js +7 -2
- package/dist/commands/resources.d.ts.map +1 -1
- package/dist/commands/resources.js +23 -3
- package/dist/commands/review-pack.d.ts.map +1 -1
- package/dist/commands/review-pack.js +98 -23
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +2 -2
- package/dist/core/adapters/profiles.d.ts +1 -1
- package/dist/core/agents/canonical-emit.d.ts +3 -2
- package/dist/core/agents/canonical-emit.d.ts.map +1 -1
- package/dist/core/agents/canonical-emit.js +2 -0
- package/dist/core/agents/cli.js +13 -6
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
- package/dist/core/agents/live-authority-v3.js +5 -3
- package/dist/core/agents/live-lifecycle-v3.d.ts +2 -2
- package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.d.ts +7 -5
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +63 -8
- package/dist/core/agents/session-finalizer-v3.d.ts +2 -2
- package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.d.ts +3 -3
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +2 -1
- package/dist/core/agents/state/names.d.ts +35 -2
- package/dist/core/agents/state/names.d.ts.map +1 -1
- package/dist/core/agents/state/names.js +80 -5
- package/dist/core/agents/state/stale-sweep.d.ts +2 -1
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +23 -6
- package/dist/core/agents/turn-elapsed.d.ts +51 -0
- package/dist/core/agents/turn-elapsed.d.ts.map +1 -0
- package/dist/core/agents/turn-elapsed.js +91 -0
- package/dist/core/artifacts/activity.d.ts +14 -0
- package/dist/core/artifacts/activity.d.ts.map +1 -0
- package/dist/core/artifacts/activity.js +52 -0
- package/dist/core/artifacts/delivery-card.d.ts +39 -0
- package/dist/core/artifacts/delivery-card.d.ts.map +1 -0
- package/dist/core/artifacts/delivery-card.js +282 -0
- package/dist/core/artifacts/index.d.ts +42 -7
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +288 -76
- package/dist/core/artifacts/mutation-lock.d.ts +2 -0
- package/dist/core/artifacts/mutation-lock.d.ts.map +1 -0
- package/dist/core/artifacts/mutation-lock.js +91 -0
- package/dist/core/backup/host-snapshot.d.ts +18 -0
- package/dist/core/backup/host-snapshot.d.ts.map +1 -0
- package/dist/core/backup/host-snapshot.js +64 -0
- package/dist/core/config.d.ts +20 -5
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +44 -10
- package/dist/core/diagnostics/advice.d.ts +38 -3
- package/dist/core/diagnostics/advice.d.ts.map +1 -1
- package/dist/core/diagnostics/advice.js +103 -99
- package/dist/core/diagnostics/bundle.d.ts.map +1 -1
- package/dist/core/diagnostics/bundle.js +111 -47
- package/dist/core/diagnostics/comparison.d.ts.map +1 -1
- package/dist/core/diagnostics/comparison.js +3 -2
- package/dist/core/diagnostics/contract.d.ts +15 -31
- package/dist/core/diagnostics/contract.d.ts.map +1 -1
- package/dist/core/diagnostics/contract.js +2 -5
- package/dist/core/diagnostics/index.d.ts +2 -0
- package/dist/core/diagnostics/index.d.ts.map +1 -1
- package/dist/core/diagnostics/index.js +2 -0
- package/dist/core/diagnostics/pressure-contract.d.ts +260 -0
- package/dist/core/diagnostics/pressure-contract.d.ts.map +1 -0
- package/dist/core/diagnostics/pressure-contract.js +70 -0
- package/dist/core/diagnostics/pressure.d.ts +25 -0
- package/dist/core/diagnostics/pressure.d.ts.map +1 -0
- package/dist/core/diagnostics/pressure.js +1138 -0
- package/dist/core/diagnostics/replay.d.ts.map +1 -1
- package/dist/core/diagnostics/replay.js +90 -10
- package/dist/core/events/v3/adapter-id.d.ts +6 -0
- package/dist/core/events/v3/adapter-id.d.ts.map +1 -0
- package/dist/core/events/v3/adapter-id.js +7 -0
- package/dist/core/events/v3/archive-retention.d.ts.map +1 -1
- package/dist/core/events/v3/archive-retention.js +3 -2
- package/dist/core/events/v3/bootstrap.d.ts +41 -4
- package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
- package/dist/core/events/v3/bootstrap.js +120 -17
- package/dist/core/events/v3/capabilities.d.ts +16 -9
- package/dist/core/events/v3/capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/capabilities.js +37 -2
- package/dist/core/events/v3/capability-drift.d.ts +2 -2
- package/dist/core/events/v3/capability-drift.d.ts.map +1 -1
- package/dist/core/events/v3/control-witness.d.ts +48 -5
- package/dist/core/events/v3/control-witness.d.ts.map +1 -1
- package/dist/core/events/v3/control-witness.js +91 -36
- package/dist/core/events/v3/control.d.ts.map +1 -1
- package/dist/core/events/v3/control.js +22 -2
- package/dist/core/events/v3/index.d.ts +2 -1
- package/dist/core/events/v3/index.d.ts.map +1 -1
- package/dist/core/events/v3/index.js +2 -1
- package/dist/core/events/v3/live-feed.d.ts +7 -1
- package/dist/core/events/v3/live-feed.d.ts.map +1 -1
- package/dist/core/events/v3/live-feed.js +21 -3
- package/dist/core/events/v3/live-routing.d.ts.map +1 -1
- package/dist/core/events/v3/live-routing.js +10 -2
- package/dist/core/events/v3/producers/command-recorder.d.ts +2 -2
- package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/command-recorder.js +2 -1
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +2 -2
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/coordination-recorder.js +2 -1
- package/dist/core/events/v3/producers/hook-base.d.ts +2 -2
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook-base.js +15 -5
- package/dist/core/events/v3/producers/hook.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook.js +17 -4
- package/dist/core/events/v3/producers/intake.d.ts +4 -4
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
- package/dist/core/events/v3/producers/intake.js +3 -2
- package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -1
- package/dist/core/events/v3/producers/producer-state-observer.js +2 -1
- package/dist/core/events/v3/producers/recorder.d.ts +16 -5
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +31 -9
- package/dist/core/events/v3/reader.d.ts.map +1 -1
- package/dist/core/events/v3/reader.js +10 -13
- package/dist/core/events/v3/runtime-build.d.ts.map +1 -1
- package/dist/core/events/v3/runtime-build.js +3 -2
- package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +2 -2
- package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/turn-telemetry.d.ts +2 -2
- package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
- package/dist/core/hooks/adapter/output.d.ts +16 -14
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/output.js +36 -38
- package/dist/core/hooks/backup-schedule.d.ts +34 -0
- package/dist/core/hooks/backup-schedule.d.ts.map +1 -0
- package/dist/core/hooks/backup-schedule.js +114 -0
- package/dist/core/hooks/cli.js +61 -18
- package/dist/core/hooks/codex-wsl-bridge.d.ts +2 -0
- package/dist/core/hooks/codex-wsl-bridge.d.ts.map +1 -1
- package/dist/core/hooks/codex-wsl-bridge.js +18 -4
- package/dist/core/hooks/index.d.ts +1 -0
- package/dist/core/hooks/index.d.ts.map +1 -1
- package/dist/core/hooks/index.js +1 -0
- package/dist/core/hooks/prompt-context/contract.d.ts +61 -0
- package/dist/core/hooks/prompt-context/contract.d.ts.map +1 -0
- package/dist/core/hooks/prompt-context/contract.js +102 -0
- package/dist/core/hooks/prompt-context/index.d.ts +5 -0
- package/dist/core/hooks/prompt-context/index.d.ts.map +1 -0
- package/dist/core/hooks/prompt-context/index.js +2 -0
- package/dist/core/hooks/prompt-context/runner.d.ts +24 -0
- package/dist/core/hooks/prompt-context/runner.d.ts.map +1 -0
- package/dist/core/hooks/prompt-context/runner.js +249 -0
- package/dist/core/qa-artifacts.d.ts +3 -0
- package/dist/core/qa-artifacts.d.ts.map +1 -1
- package/dist/core/qa-artifacts.js +25 -3
- package/dist/core/resources/contract.d.ts +69 -3
- package/dist/core/resources/contract.d.ts.map +1 -1
- package/dist/core/resources/contract.js +1 -1
- package/dist/core/resources/index.d.ts +1 -0
- package/dist/core/resources/index.d.ts.map +1 -1
- package/dist/core/resources/index.js +1 -0
- package/dist/core/resources/native.d.ts +36 -0
- package/dist/core/resources/native.d.ts.map +1 -0
- package/dist/core/resources/native.js +418 -0
- package/dist/core/resources/sampler.d.ts +2 -0
- package/dist/core/resources/sampler.d.ts.map +1 -1
- package/dist/core/resources/sampler.js +31 -1
- package/dist/core/resources/status.d.ts +61 -0
- package/dist/core/resources/status.d.ts.map +1 -0
- package/dist/core/resources/status.js +536 -0
- package/dist/core/resources/system.d.ts +27 -0
- package/dist/core/resources/system.d.ts.map +1 -0
- package/dist/core/resources/system.js +439 -0
- package/dist/core/semantic/contract.d.ts +13 -13
- package/dist/core/semantic/service.d.ts +2 -0
- package/dist/core/semantic/service.d.ts.map +1 -1
- package/dist/core/semantic/service.js +27 -4
- package/dist/core/storage/builtins.js +41 -0
- package/dist/core/supervisor/contract.d.ts +41 -3
- package/dist/core/supervisor/contract.d.ts.map +1 -1
- package/dist/core/supervisor/contract.js +3 -2
- package/dist/core/supervisor/findings.d.ts +3 -0
- package/dist/core/supervisor/findings.d.ts.map +1 -1
- package/dist/core/supervisor/findings.js +88 -0
- package/dist/core/supervisor/history.d.ts.map +1 -1
- package/dist/core/supervisor/history.js +14 -0
- package/dist/core/supervisor/ledger-state.d.ts +55 -0
- package/dist/core/supervisor/ledger-state.d.ts.map +1 -0
- package/dist/core/supervisor/ledger-state.js +0 -0
- package/dist/core/supervisor/service.d.ts.map +1 -1
- package/dist/core/supervisor/service.js +120 -7
- package/dist/core/supervisor/storage.d.ts +3 -1
- package/dist/core/supervisor/storage.d.ts.map +1 -1
- package/dist/core/supervisor/storage.js +4 -0
- package/dist/core/workflow/admission.d.ts +3 -0
- package/dist/core/workflow/admission.d.ts.map +1 -1
- package/dist/core/workflow/admission.js +28 -16
- package/dist/core/workflow/engine.js +2 -2
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
- package/dist/core/workflow/live-session-v3.js +6 -1
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +4 -3
- package/dist/lib/browser/capture-fidelity.d.ts +7 -0
- package/dist/lib/browser/capture-fidelity.d.ts.map +1 -1
- package/dist/lib/browser/capture-fidelity.js +17 -0
- package/dist/lib/browser/client.d.ts +9 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +85 -37
- package/dist/lib/browser/index.d.ts +3 -1
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +2 -1
- package/dist/lib/browser/page-review-budget.d.ts +13 -0
- package/dist/lib/browser/page-review-budget.d.ts.map +1 -0
- package/dist/lib/browser/page-review-budget.js +251 -0
- package/dist/lib/browser/page-review-contracts.d.ts +127 -0
- package/dist/lib/browser/page-review-contracts.d.ts.map +1 -0
- package/dist/lib/browser/page-review-contracts.js +5 -0
- package/dist/lib/browser/page-review-evidence.d.ts +48 -0
- package/dist/lib/browser/page-review-evidence.d.ts.map +1 -0
- package/dist/lib/browser/page-review-evidence.js +340 -0
- package/dist/lib/browser/page-review-judge.d.ts +1 -1
- package/dist/lib/browser/page-review-judge.d.ts.map +1 -1
- package/dist/lib/browser/page-review-judge.js +46 -38
- package/dist/lib/browser/page-review-pack.d.ts +44 -22
- package/dist/lib/browser/page-review-pack.d.ts.map +1 -1
- package/dist/lib/browser/page-review-pack.js +116 -36
- package/dist/lib/browser/page-review-source.d.ts +12 -0
- package/dist/lib/browser/page-review-source.d.ts.map +1 -0
- package/dist/lib/browser/page-review-source.js +22 -0
- package/dist/lib/browser/qa-run-contracts.d.ts +35 -9
- package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -1
- package/dist/lib/browser/qa-run-contracts.js +48 -14
- package/dist/lib/browser/qa-run.d.ts.map +1 -1
- package/dist/lib/browser/qa-run.js +215 -68
- package/dist/lib/browser/qa-snapshot.d.ts +6 -0
- package/dist/lib/browser/qa-snapshot.d.ts.map +1 -1
- package/dist/lib/browser/qa-snapshot.js +259 -48
- package/dist/lib/browser/review-capture-transaction.d.ts +13 -0
- package/dist/lib/browser/review-capture-transaction.d.ts.map +1 -0
- package/dist/lib/browser/review-capture-transaction.js +79 -0
- package/dist/lib/browser/standalone-html.d.ts.map +1 -1
- package/dist/lib/browser/standalone-html.js +4 -2
- package/dist/lib/browser/thumbnail-association.d.ts +34 -0
- package/dist/lib/browser/thumbnail-association.d.ts.map +1 -0
- package/dist/lib/browser/thumbnail-association.js +158 -0
- package/dist/lib/browser/tiling.d.ts +30 -0
- package/dist/lib/browser/tiling.d.ts.map +1 -1
- package/dist/lib/browser/tiling.js +38 -0
- package/dist/lib/docs-metadata-managed.d.ts.map +1 -1
- package/dist/lib/docs-metadata-managed.js +4 -1
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +7 -1
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +1 -0
- package/dist/lib/local-file-url.d.ts +12 -0
- package/dist/lib/local-file-url.d.ts.map +1 -1
- package/dist/lib/local-file-url.js +16 -2
- package/dist/lib/tunnel/state.d.ts +19 -4
- package/dist/lib/tunnel/state.d.ts.map +1 -1
- package/dist/lib/tunnel/state.js +53 -13
- package/package.json +7 -4
- package/schemas/config.schema.json +69 -2
- package/src/commands/agents.ts +42 -9
- package/src/commands/artifacts.ts +130 -6
- package/src/commands/backup.ts +287 -34
- package/src/commands/browse.ts +564 -267
- package/src/commands/diagnostics.ts +6 -3
- package/src/commands/ledger-v3.ts +20 -3
- package/src/commands/qa-run.ts +37 -3
- package/src/commands/qa-status.ts +11 -2
- package/src/commands/resources.ts +23 -3
- package/src/commands/review-pack.ts +165 -62
- package/src/commands/tunnel.ts +2 -1
- package/src/core/agents/canonical-emit.ts +4 -2
- package/src/core/agents/cli.ts +14 -6
- package/src/core/agents/live-authority-v3.ts +7 -3
- package/src/core/agents/live-lifecycle-v3.ts +2 -2
- package/src/core/agents/render/prompt-context.ts +68 -14
- package/src/core/agents/session-finalizer-v3.ts +2 -2
- package/src/core/agents/state/live-coordination-view.ts +4 -4
- package/src/core/agents/state/names.ts +92 -7
- package/src/core/agents/state/stale-sweep.ts +22 -8
- package/src/core/agents/turn-elapsed.ts +135 -0
- package/src/core/artifacts/activity.ts +71 -0
- package/src/core/artifacts/delivery-card.ts +375 -0
- package/src/core/artifacts/index.ts +385 -91
- package/src/core/artifacts/mutation-lock.ts +106 -0
- package/src/core/backup/host-snapshot.ts +76 -0
- package/src/core/config.ts +66 -13
- package/src/core/diagnostics/advice.ts +148 -120
- package/src/core/diagnostics/bundle.ts +138 -52
- package/src/core/diagnostics/comparison.ts +6 -2
- package/src/core/diagnostics/contract.ts +39 -42
- package/src/core/diagnostics/index.ts +2 -0
- package/src/core/diagnostics/pressure-contract.ts +294 -0
- package/src/core/diagnostics/pressure.ts +1361 -0
- package/src/core/diagnostics/replay.ts +116 -11
- package/src/core/events/v3/adapter-id.ts +12 -0
- package/src/core/events/v3/archive-retention.ts +3 -6
- package/src/core/events/v3/bootstrap.ts +163 -16
- package/src/core/events/v3/capabilities.ts +75 -25
- package/src/core/events/v3/capability-drift.ts +2 -2
- package/src/core/events/v3/control-witness.ts +172 -41
- package/src/core/events/v3/control.ts +34 -2
- package/src/core/events/v3/index.ts +3 -0
- package/src/core/events/v3/live-feed.ts +23 -5
- package/src/core/events/v3/live-routing.ts +14 -2
- package/src/core/events/v3/producers/command-recorder.ts +4 -4
- package/src/core/events/v3/producers/coordination-recorder.ts +4 -4
- package/src/core/events/v3/producers/hook-base.ts +21 -16
- package/src/core/events/v3/producers/hook.ts +21 -4
- package/src/core/events/v3/producers/intake.ts +6 -6
- package/src/core/events/v3/producers/producer-state-observer.ts +2 -1
- package/src/core/events/v3/producers/recorder.ts +50 -21
- package/src/core/events/v3/reader.ts +14 -13
- package/src/core/events/v3/runtime-build.ts +3 -2
- package/src/core/events/v3/runtime-telemetry-capabilities.ts +3 -3
- package/src/core/events/v3/turn-telemetry.ts +4 -4
- package/src/core/hooks/adapter/output.ts +50 -36
- package/src/core/hooks/backup-schedule.ts +147 -0
- package/src/core/hooks/cli.ts +65 -14
- package/src/core/hooks/codex-wsl-bridge.ts +21 -5
- package/src/core/hooks/index.ts +1 -0
- package/src/core/hooks/prompt-context/contract.ts +177 -0
- package/src/core/hooks/prompt-context/index.ts +22 -0
- package/src/core/hooks/prompt-context/runner.ts +303 -0
- package/src/core/qa-artifacts.ts +29 -3
- package/src/core/resources/contract.ts +76 -3
- package/src/core/resources/index.ts +1 -0
- package/src/core/resources/native.ts +481 -0
- package/src/core/resources/sampler.ts +46 -1
- package/src/core/resources/status.ts +717 -0
- package/src/core/resources/system.ts +530 -0
- package/src/core/semantic/service.ts +37 -3
- package/src/core/storage/builtins.ts +41 -0
- package/src/core/supervisor/contract.ts +45 -3
- package/src/core/supervisor/findings.ts +159 -0
- package/src/core/supervisor/history.ts +15 -0
- package/src/core/supervisor/ledger-state.ts +0 -0
- package/src/core/supervisor/service.ts +133 -5
- package/src/core/supervisor/storage.ts +7 -0
- package/src/core/workflow/admission.ts +33 -17
- package/src/core/workflow/engine.ts +2 -2
- package/src/core/workflow/live-session-v3.ts +6 -8
- package/src/core/workflow/proof.ts +4 -3
- package/src/lib/browser/capture-fidelity.ts +23 -0
- package/src/lib/browser/client.ts +96 -44
- package/src/lib/browser/index.ts +15 -1
- package/src/lib/browser/page-review-budget.ts +309 -0
- package/src/lib/browser/page-review-contracts.ts +129 -0
- package/src/lib/browser/page-review-evidence.ts +465 -0
- package/src/lib/browser/page-review-judge.ts +56 -40
- package/src/lib/browser/page-review-pack.ts +181 -43
- package/src/lib/browser/page-review-source.ts +30 -0
- package/src/lib/browser/qa-run-contracts.ts +62 -18
- package/src/lib/browser/qa-run.ts +259 -71
- package/src/lib/browser/qa-snapshot.ts +289 -48
- package/src/lib/browser/review-capture-transaction.ts +106 -0
- package/src/lib/browser/standalone-html.ts +4 -2
- package/src/lib/browser/thumbnail-association.ts +190 -0
- package/src/lib/browser/tiling.ts +63 -0
- package/src/lib/docs-metadata-managed.ts +4 -1
- package/src/lib/identities/assume.ts +12 -4
- package/src/lib/instructions/templates.ts +1 -0
- package/src/lib/local-file-url.ts +17 -2
- package/src/lib/tunnel/state.ts +70 -13
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pressure assessment: the one explained answer to "is this machine under
|
|
3
|
+
* contention, and what should an agent do about it?"
|
|
4
|
+
*
|
|
5
|
+
* Two rules are structural rather than advisory. State comes only from
|
|
6
|
+
* contention evidence the kernel reports (stall time, kills, reclaim rates,
|
|
7
|
+
* exhausted capacity); attribution findings name who is using a resource and
|
|
8
|
+
* are carried as contributors that can never raise or lower the state. And a
|
|
9
|
+
* dimension the platform does not expose is reported as unavailable, never
|
|
10
|
+
* silently read as healthy.
|
|
11
|
+
*/
|
|
12
|
+
import type { ResourceSnapshot } from "../resources/contract.js";
|
|
13
|
+
export declare const PRESSURE_ASSESSMENT_SCHEMA_VERSION: 1;
|
|
14
|
+
export type PressureState = "normal" | "elevated" | "critical" | "unknown";
|
|
15
|
+
export type PressureScope = "guest" | "native" | "windows-host";
|
|
16
|
+
export type PressureLimitingResource = "memory" | "cpu" | "io" | "storage" | "none" | "unknown";
|
|
17
|
+
export type PressureTrend = "rising" | "steady" | "falling" | "unknown";
|
|
18
|
+
export type PressureRecommendedAction = "proceed" | "limit-heavy-work" | "avoid-new-heavy-work" | "unknown";
|
|
19
|
+
/** What an agent is about to do, so guidance can differ by the resource it consumes. */
|
|
20
|
+
export type PressureWorkloadClass = "lightweight" | "cpu-heavy" | "memory-heavy" | "storage-heavy";
|
|
21
|
+
/** One measurable contention dimension. Each maps to exactly one snapshot field. */
|
|
22
|
+
export type PressureDimension = "memory_stall" | "io_stall" | "cpu_stall" | "oom_kills" | "swap_activity" | "direct_reclaim" | "memory_available" | "disk_available" | "host_memory";
|
|
23
|
+
export type PressureUnit = "percent" | "bytes" | "bytes-per-second" | "pages-per-second" | "count" | "milliseconds";
|
|
24
|
+
export interface PressureEvidenceDimension {
|
|
25
|
+
dimension: PressureDimension;
|
|
26
|
+
state: "supported" | "unavailable";
|
|
27
|
+
observed_value: number | null;
|
|
28
|
+
unit: PressureUnit | null;
|
|
29
|
+
/** Consecutive samples this dimension has held its current side of a threshold. */
|
|
30
|
+
sample_count: number;
|
|
31
|
+
reason_code?: string;
|
|
32
|
+
}
|
|
33
|
+
export type PressureReasonCode = "memory_full_stall_critical" | "memory_full_stall_elevated" | "io_full_stall_critical" | "io_full_stall_elevated" | "cpu_stall_elevated" | "new_oom_kill" | "swap_out_rate_critical" | "swap_out_rate_elevated" | "direct_reclaim_with_memory_signal" | "direct_reclaim_elevated" | "memory_and_swap_exhausted" | "memory_available_low" | "disk_space_critical" | "disk_space_low" | "host_memory_pressure" | "recovering_within_dwell" | "no_contention_evidence" | "evidence_unavailable" | "snapshot_stale";
|
|
34
|
+
export interface PressureReason {
|
|
35
|
+
code: PressureReasonCode;
|
|
36
|
+
dimension: PressureDimension | null;
|
|
37
|
+
summary: string;
|
|
38
|
+
observed_value: number | null;
|
|
39
|
+
threshold_value: number | null;
|
|
40
|
+
unit: PressureUnit | null;
|
|
41
|
+
sample_count: number;
|
|
42
|
+
contributes_to: PressureState;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A finding that names who is consuming a resource. Present so an operator can
|
|
46
|
+
* see the likely owner; never an input to `state`.
|
|
47
|
+
*/
|
|
48
|
+
export interface PressureContributor {
|
|
49
|
+
finding_id: string;
|
|
50
|
+
finding_kind: string;
|
|
51
|
+
finding_class: "contention" | "attribution" | "diagnostic";
|
|
52
|
+
severity: "info" | "warning" | "critical";
|
|
53
|
+
summary: string;
|
|
54
|
+
scope_kind: string;
|
|
55
|
+
scope_id: string;
|
|
56
|
+
occurrence_count: number;
|
|
57
|
+
attribution_state: "attributed" | "unattributed" | "unknown";
|
|
58
|
+
/** `exact` is the only value that may be rendered as a named owner. */
|
|
59
|
+
attribution_confidence: "exact" | "none";
|
|
60
|
+
owner_kind?: "agent" | "service";
|
|
61
|
+
owner_id?: string;
|
|
62
|
+
workload_relationship?: "active-work" | "unexpected-idle-growth" | "unknown";
|
|
63
|
+
}
|
|
64
|
+
export interface PressureWorkloadGuidance {
|
|
65
|
+
workload_class: PressureWorkloadClass;
|
|
66
|
+
recommendation: PressureRecommendedAction;
|
|
67
|
+
summary: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The carried-forward inputs a later sample needs to reproduce a hysteresis
|
|
71
|
+
* transition. Frozen in advice v2 and in diagnostic bundles so a replay is
|
|
72
|
+
* deterministic without the observer's memory.
|
|
73
|
+
*/
|
|
74
|
+
export interface PressureHysteresisState {
|
|
75
|
+
state: PressureState;
|
|
76
|
+
state_since: string;
|
|
77
|
+
/** Consecutive samples clear of every elevated threshold. */
|
|
78
|
+
consecutive_clear_samples: number;
|
|
79
|
+
/** Per-dimension consecutive samples above the elevated threshold. */
|
|
80
|
+
dimension_streaks: Readonly<Partial<Record<PressureDimension, number>>>;
|
|
81
|
+
/** Baseline for the OOM counter, so historical kills never open a finding. */
|
|
82
|
+
oom_baseline_total_kills: number | null;
|
|
83
|
+
/** While set, a new OOM kill holds `critical` until this instant. */
|
|
84
|
+
oom_hold_until: string | null;
|
|
85
|
+
/**
|
|
86
|
+
* Identity of the observer run that produced this state. A change resets
|
|
87
|
+
* every streak, because counters and PSI averages restart with it.
|
|
88
|
+
*/
|
|
89
|
+
observer_generation: string | null;
|
|
90
|
+
}
|
|
91
|
+
export interface PressureAssessment {
|
|
92
|
+
schema_version: typeof PRESSURE_ASSESSMENT_SCHEMA_VERSION;
|
|
93
|
+
observer_only: true;
|
|
94
|
+
state: PressureState;
|
|
95
|
+
scope: PressureScope;
|
|
96
|
+
limiting_resource: PressureLimitingResource;
|
|
97
|
+
trend: PressureTrend;
|
|
98
|
+
observed_at: string;
|
|
99
|
+
sample_age_ms: number | null;
|
|
100
|
+
evidence_state: "complete" | "partial" | "unavailable";
|
|
101
|
+
evidence: readonly PressureEvidenceDimension[];
|
|
102
|
+
reasons: readonly PressureReason[];
|
|
103
|
+
contributors: readonly PressureContributor[];
|
|
104
|
+
omitted_contributor_count: number;
|
|
105
|
+
/** Share of machine memory held by processes with no validated owner. */
|
|
106
|
+
unattributed_memory_percent: number | null;
|
|
107
|
+
recommended_action: PressureRecommendedAction;
|
|
108
|
+
summary: string;
|
|
109
|
+
guidance: readonly PressureWorkloadGuidance[];
|
|
110
|
+
/** The state this sample carries forward; also the replay input of the next. */
|
|
111
|
+
hysteresis: PressureHysteresisState;
|
|
112
|
+
policy_version: typeof PRESSURE_POLICY.policy_version;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Every numeric threshold the assessment uses. Included in the diagnostic
|
|
116
|
+
* bundle `threshold_digest`, so tuning any value invalidates a frozen replay
|
|
117
|
+
* instead of silently changing its expected result.
|
|
118
|
+
*/
|
|
119
|
+
export declare const PRESSURE_POLICY: {
|
|
120
|
+
readonly policy_version: 2;
|
|
121
|
+
/** A snapshot older than this cannot support any state but `unknown`. */
|
|
122
|
+
readonly sample_staleness_ms: 15000;
|
|
123
|
+
/**
|
|
124
|
+
* A snapshot may carry a sample time slightly ahead of the assessment clock,
|
|
125
|
+
* because the observer samples and then assesses. Within this tolerance the
|
|
126
|
+
* age reads as zero; beyond it the clock is untrustworthy and the state is
|
|
127
|
+
* `unknown`. A negative age is never published.
|
|
128
|
+
*/
|
|
129
|
+
readonly sample_future_tolerance_ms: 1000;
|
|
130
|
+
/** Samples of recent history the assessment may consider. */
|
|
131
|
+
readonly max_history_samples: 12;
|
|
132
|
+
readonly memory_stall: {
|
|
133
|
+
readonly critical_avg10: 50;
|
|
134
|
+
readonly elevated_avg10: 20;
|
|
135
|
+
readonly elevated_samples: 2;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Full I/O stalls are noisier than memory stalls on virtual disks, where a
|
|
139
|
+
* checkout or a bundler cache write alone can hold `avg10` in the twenties
|
|
140
|
+
* for several seconds. Elevated therefore needs a higher bar held across a
|
|
141
|
+
* longer streak than memory does.
|
|
142
|
+
*/
|
|
143
|
+
readonly io_stall: {
|
|
144
|
+
readonly critical_avg10: 50;
|
|
145
|
+
readonly elevated_avg10: 30;
|
|
146
|
+
readonly elevated_samples: 5;
|
|
147
|
+
};
|
|
148
|
+
readonly cpu_stall: {
|
|
149
|
+
readonly elevated_some_avg60: 40;
|
|
150
|
+
readonly elevated_samples: 3;
|
|
151
|
+
};
|
|
152
|
+
readonly oom: {
|
|
153
|
+
readonly critical_hold_ms: 60000;
|
|
154
|
+
};
|
|
155
|
+
readonly swap_activity: {
|
|
156
|
+
readonly critical_out_bytes_per_second: number;
|
|
157
|
+
readonly critical_samples: 3;
|
|
158
|
+
readonly elevated_out_bytes_per_second: number;
|
|
159
|
+
readonly elevated_samples: 3;
|
|
160
|
+
};
|
|
161
|
+
readonly direct_reclaim: {
|
|
162
|
+
readonly elevated_pages_per_second: 100000;
|
|
163
|
+
readonly elevated_samples: 3;
|
|
164
|
+
};
|
|
165
|
+
readonly memory_available: {
|
|
166
|
+
readonly critical_available_percent: 5;
|
|
167
|
+
readonly critical_swap_used_percent: 90;
|
|
168
|
+
readonly elevated_available_percent: 10;
|
|
169
|
+
readonly elevated_samples: 3;
|
|
170
|
+
};
|
|
171
|
+
readonly disk: {
|
|
172
|
+
readonly critical_available_bytes: number;
|
|
173
|
+
readonly critical_used_percent: 97;
|
|
174
|
+
readonly elevated_available_bytes: number;
|
|
175
|
+
readonly elevated_used_percent: 90;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* A state leaves only after this many consecutive samples in which no
|
|
179
|
+
* dimension sits at or above its entry threshold. The dwell is the whole of
|
|
180
|
+
* the exit hysteresis: there is no lower exit threshold, because one would
|
|
181
|
+
* hold a state open indefinitely on a reading the policy itself calls normal.
|
|
182
|
+
*/
|
|
183
|
+
readonly recovery: {
|
|
184
|
+
readonly critical_exit_samples: 3;
|
|
185
|
+
readonly elevated_exit_samples: 5;
|
|
186
|
+
};
|
|
187
|
+
readonly limits: {
|
|
188
|
+
readonly max_reasons: 6;
|
|
189
|
+
readonly max_contributors: 8;
|
|
190
|
+
readonly max_evidence: 12;
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* Everything the assessment is allowed to read. Pure input: no clock, no
|
|
195
|
+
* filesystem, no findings store. `now_ms` and `observer_generation` are
|
|
196
|
+
* supplied by the caller so a fixture can drive a fake clock and a restart.
|
|
197
|
+
*/
|
|
198
|
+
export interface AssessPressureInput {
|
|
199
|
+
/** The latest snapshot, or null when it is missing, corrupt, or too large. */
|
|
200
|
+
snapshot: ResourceSnapshot | null;
|
|
201
|
+
/** Why the snapshot is absent, when it is. */
|
|
202
|
+
snapshot_reason?: string | null;
|
|
203
|
+
/**
|
|
204
|
+
* Recent samples, oldest first, bounded by `PRESSURE_POLICY.max_history_samples`.
|
|
205
|
+
* Used only for trend; consecutive-sample streaks come from `prior`.
|
|
206
|
+
*/
|
|
207
|
+
history: readonly PressureHistorySample[];
|
|
208
|
+
/** Active findings, for contributors only. */
|
|
209
|
+
findings: readonly PressureFindingInput[];
|
|
210
|
+
findings_capability: PressureCapabilityInput;
|
|
211
|
+
/** The state the previous sample carried forward, or null on a cold start. */
|
|
212
|
+
prior: PressureHysteresisState | null;
|
|
213
|
+
observer_generation: string;
|
|
214
|
+
now_ms: number;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* The finding fields a contributor is built from. Structurally satisfied by
|
|
218
|
+
* `SupervisorFinding`; declared here so this module stays a leaf and so the
|
|
219
|
+
* assessment cannot reach any finding field that could set state.
|
|
220
|
+
*/
|
|
221
|
+
export interface PressureFindingInput {
|
|
222
|
+
id: string;
|
|
223
|
+
finding_kind: string;
|
|
224
|
+
finding_class: "contention" | "attribution" | "diagnostic";
|
|
225
|
+
severity: "info" | "warning" | "critical";
|
|
226
|
+
state: "opened" | "resolved";
|
|
227
|
+
summary: string;
|
|
228
|
+
scope_kind: string;
|
|
229
|
+
scope_id: string;
|
|
230
|
+
observed_at: string;
|
|
231
|
+
occurrence_count: number;
|
|
232
|
+
attribution?: {
|
|
233
|
+
state: "attributed" | "unattributed";
|
|
234
|
+
owner_kind?: "agent" | "service";
|
|
235
|
+
owner_id?: string;
|
|
236
|
+
};
|
|
237
|
+
workload_context?: {
|
|
238
|
+
relationship: "active-work" | "unexpected-idle-growth" | "unknown";
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
export interface PressureCapabilityInput {
|
|
242
|
+
source_kind: string;
|
|
243
|
+
state: string;
|
|
244
|
+
reason_code?: string;
|
|
245
|
+
}
|
|
246
|
+
/** The subset of a past sample the trend calculation needs. */
|
|
247
|
+
export interface PressureHistorySample {
|
|
248
|
+
sampled_at: string;
|
|
249
|
+
memory_full_avg10: number | null;
|
|
250
|
+
io_full_avg10: number | null;
|
|
251
|
+
cpu_some_avg60: number | null;
|
|
252
|
+
memory_available_percent: number | null;
|
|
253
|
+
swap_out_bytes_per_second: number | null;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Compute one explained assessment. Deterministic in its input: the same input
|
|
257
|
+
* always yields the same output, which is what makes a frozen bundle replayable.
|
|
258
|
+
*/
|
|
259
|
+
export type AssessPressure = (input: AssessPressureInput) => PressureAssessment;
|
|
260
|
+
//# sourceMappingURL=pressure-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressure-contract.d.ts","sourceRoot":"","sources":["../../../src/core/diagnostics/pressure-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pressure assessment: the one explained answer to "is this machine under
|
|
3
|
+
* contention, and what should an agent do about it?"
|
|
4
|
+
*
|
|
5
|
+
* Two rules are structural rather than advisory. State comes only from
|
|
6
|
+
* contention evidence the kernel reports (stall time, kills, reclaim rates,
|
|
7
|
+
* exhausted capacity); attribution findings name who is using a resource and
|
|
8
|
+
* are carried as contributors that can never raise or lower the state. And a
|
|
9
|
+
* dimension the platform does not expose is reported as unavailable, never
|
|
10
|
+
* silently read as healthy.
|
|
11
|
+
*/
|
|
12
|
+
export const PRESSURE_ASSESSMENT_SCHEMA_VERSION = 1;
|
|
13
|
+
const MIB = 1_024 * 1_024;
|
|
14
|
+
const GIB = 1_024 * MIB;
|
|
15
|
+
/**
|
|
16
|
+
* Every numeric threshold the assessment uses. Included in the diagnostic
|
|
17
|
+
* bundle `threshold_digest`, so tuning any value invalidates a frozen replay
|
|
18
|
+
* instead of silently changing its expected result.
|
|
19
|
+
*/
|
|
20
|
+
export const PRESSURE_POLICY = {
|
|
21
|
+
policy_version: 2,
|
|
22
|
+
/** A snapshot older than this cannot support any state but `unknown`. */
|
|
23
|
+
sample_staleness_ms: 15_000,
|
|
24
|
+
/**
|
|
25
|
+
* A snapshot may carry a sample time slightly ahead of the assessment clock,
|
|
26
|
+
* because the observer samples and then assesses. Within this tolerance the
|
|
27
|
+
* age reads as zero; beyond it the clock is untrustworthy and the state is
|
|
28
|
+
* `unknown`. A negative age is never published.
|
|
29
|
+
*/
|
|
30
|
+
sample_future_tolerance_ms: 1_000,
|
|
31
|
+
/** Samples of recent history the assessment may consider. */
|
|
32
|
+
max_history_samples: 12,
|
|
33
|
+
memory_stall: { critical_avg10: 50, elevated_avg10: 20, elevated_samples: 2 },
|
|
34
|
+
/**
|
|
35
|
+
* Full I/O stalls are noisier than memory stalls on virtual disks, where a
|
|
36
|
+
* checkout or a bundler cache write alone can hold `avg10` in the twenties
|
|
37
|
+
* for several seconds. Elevated therefore needs a higher bar held across a
|
|
38
|
+
* longer streak than memory does.
|
|
39
|
+
*/
|
|
40
|
+
io_stall: { critical_avg10: 50, elevated_avg10: 30, elevated_samples: 5 },
|
|
41
|
+
cpu_stall: { elevated_some_avg60: 40, elevated_samples: 3 },
|
|
42
|
+
oom: { critical_hold_ms: 60_000 },
|
|
43
|
+
swap_activity: {
|
|
44
|
+
critical_out_bytes_per_second: 50 * MIB,
|
|
45
|
+
critical_samples: 3,
|
|
46
|
+
elevated_out_bytes_per_second: 5 * MIB,
|
|
47
|
+
elevated_samples: 3,
|
|
48
|
+
},
|
|
49
|
+
direct_reclaim: { elevated_pages_per_second: 100_000, elevated_samples: 3 },
|
|
50
|
+
memory_available: {
|
|
51
|
+
critical_available_percent: 5,
|
|
52
|
+
critical_swap_used_percent: 90,
|
|
53
|
+
elevated_available_percent: 10,
|
|
54
|
+
elevated_samples: 3,
|
|
55
|
+
},
|
|
56
|
+
disk: {
|
|
57
|
+
critical_available_bytes: 1 * GIB,
|
|
58
|
+
critical_used_percent: 97,
|
|
59
|
+
elevated_available_bytes: 5 * GIB,
|
|
60
|
+
elevated_used_percent: 90,
|
|
61
|
+
},
|
|
62
|
+
/**
|
|
63
|
+
* A state leaves only after this many consecutive samples in which no
|
|
64
|
+
* dimension sits at or above its entry threshold. The dwell is the whole of
|
|
65
|
+
* the exit hysteresis: there is no lower exit threshold, because one would
|
|
66
|
+
* hold a state open indefinitely on a reading the policy itself calls normal.
|
|
67
|
+
*/
|
|
68
|
+
recovery: { critical_exit_samples: 3, elevated_exit_samples: 5 },
|
|
69
|
+
limits: { max_reasons: 6, max_contributors: 8, max_evidence: 12 },
|
|
70
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deterministic pressure assessment.
|
|
3
|
+
*
|
|
4
|
+
* Two rules shape everything below. State is derived only from contention
|
|
5
|
+
* dimensions the kernel measures, so a large process or a heavy hook can never
|
|
6
|
+
* make the machine look critical on its own; those findings are carried as
|
|
7
|
+
* contributors instead. And a dimension the platform does not expose is
|
|
8
|
+
* reported as unavailable rather than read as healthy, so an unavailable
|
|
9
|
+
* measurement can never pull a known critical signal down to normal.
|
|
10
|
+
*
|
|
11
|
+
* The module is pure. It reads no clock, no filesystem, and no findings store,
|
|
12
|
+
* and it imports only the frozen contract. `now_ms`, `observer_generation`, and
|
|
13
|
+
* `prior` come from the caller, which is what makes a frozen bundle replayable.
|
|
14
|
+
*
|
|
15
|
+
* Every numeric threshold is read from `PRESSURE_POLICY`. The only literals
|
|
16
|
+
* here are unit conversions used to phrase a summary in readable units.
|
|
17
|
+
*
|
|
18
|
+
* Exit is a dwell, not a second threshold. A sample counts as clear when no
|
|
19
|
+
* dimension sits at or above its entry threshold, and a state leaves after the
|
|
20
|
+
* policy's run of consecutive clear samples. A reading below the entry bar is
|
|
21
|
+
* normal by definition, so it can never hold a state open on its own.
|
|
22
|
+
*/
|
|
23
|
+
import { type AssessPressure } from "./pressure-contract.js";
|
|
24
|
+
export declare const assessPressure: AssessPressure;
|
|
25
|
+
//# sourceMappingURL=pressure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressure.d.ts","sourceRoot":"","sources":["../../../src/core/diagnostics/pressure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EACL,KAAK,cAAc,EAmBpB,MAAM,wBAAwB,CAAC;AAoFhC,eAAO,MAAM,cAAc,EAAE,cA0Z5B,CAAC"}
|