instar 0.28.102 → 0.28.103
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/.claude/hooks/instar/before-prompt-recall.js +90 -0
- package/dist/cli.js +28 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +14 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobMigrate.d.ts +46 -0
- package/dist/commands/jobMigrate.d.ts.map +1 -0
- package/dist/commands/jobMigrate.js +292 -0
- package/dist/commands/jobMigrate.js.map +1 -0
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +88 -42
- package/dist/commands/server.js.map +1 -1
- package/dist/core/BackupManager.d.ts +27 -1
- package/dist/core/BackupManager.d.ts.map +1 -1
- package/dist/core/BackupManager.js +56 -1
- package/dist/core/BackupManager.js.map +1 -1
- package/dist/core/GitStateManager.d.ts +8 -0
- package/dist/core/GitStateManager.d.ts.map +1 -1
- package/dist/core/GitStateManager.js +31 -1
- package/dist/core/GitStateManager.js.map +1 -1
- package/dist/core/MigratorStepEngine.d.ts +170 -0
- package/dist/core/MigratorStepEngine.d.ts.map +1 -0
- package/dist/core/MigratorStepEngine.js +352 -0
- package/dist/core/MigratorStepEngine.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts +76 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +252 -1
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/PreCompactionFlush.d.ts +101 -0
- package/dist/core/PreCompactionFlush.d.ts.map +1 -0
- package/dist/core/PreCompactionFlush.js +282 -0
- package/dist/core/PreCompactionFlush.js.map +1 -0
- package/dist/core/PromptBuildRecall.d.ts +97 -0
- package/dist/core/PromptBuildRecall.d.ts.map +1 -0
- package/dist/core/PromptBuildRecall.js +152 -0
- package/dist/core/PromptBuildRecall.js.map +1 -0
- package/dist/core/selectIntelligenceProvider.d.ts +41 -0
- package/dist/core/selectIntelligenceProvider.d.ts.map +1 -0
- package/dist/core/selectIntelligenceProvider.js +89 -0
- package/dist/core/selectIntelligenceProvider.js.map +1 -0
- package/dist/lifeline/ServerSupervisor.d.ts +183 -0
- package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
- package/dist/lifeline/ServerSupervisor.js +443 -0
- package/dist/lifeline/ServerSupervisor.js.map +1 -1
- package/dist/memory/NativeModuleHealer.d.ts +89 -0
- package/dist/memory/NativeModuleHealer.d.ts.map +1 -1
- package/dist/memory/NativeModuleHealer.js +371 -1
- package/dist/memory/NativeModuleHealer.js.map +1 -1
- package/dist/memory/SemanticMemory.d.ts +131 -0
- package/dist/memory/SemanticMemory.d.ts.map +1 -1
- package/dist/memory/SemanticMemory.js +315 -0
- package/dist/memory/SemanticMemory.js.map +1 -1
- package/dist/messaging/DeliveryRetryManager.d.ts +60 -0
- package/dist/messaging/DeliveryRetryManager.d.ts.map +1 -1
- package/dist/messaging/DeliveryRetryManager.js +104 -0
- package/dist/messaging/DeliveryRetryManager.js.map +1 -1
- package/dist/monitoring/DegradationReporter.d.ts +164 -0
- package/dist/monitoring/DegradationReporter.d.ts.map +1 -1
- package/dist/monitoring/DegradationReporter.js +309 -1
- package/dist/monitoring/DegradationReporter.js.map +1 -1
- package/dist/monitoring/ErrorCodeExtractor.d.ts +69 -0
- package/dist/monitoring/ErrorCodeExtractor.d.ts.map +1 -0
- package/dist/monitoring/ErrorCodeExtractor.js +131 -0
- package/dist/monitoring/ErrorCodeExtractor.js.map +1 -0
- package/dist/monitoring/PromptGate.d.ts +34 -0
- package/dist/monitoring/PromptGate.d.ts.map +1 -1
- package/dist/monitoring/PromptGate.js +81 -1
- package/dist/monitoring/PromptGate.js.map +1 -1
- package/dist/monitoring/Redactor.d.ts +58 -0
- package/dist/monitoring/Redactor.d.ts.map +1 -0
- package/dist/monitoring/Redactor.js +143 -0
- package/dist/monitoring/Redactor.js.map +1 -0
- package/dist/monitoring/probes/LifelineProbe.d.ts +7 -0
- package/dist/monitoring/probes/LifelineProbe.d.ts.map +1 -1
- package/dist/monitoring/probes/LifelineProbe.js +7 -0
- package/dist/monitoring/probes/LifelineProbe.js.map +1 -1
- package/dist/monitoring/probes/__shared.d.ts +50 -0
- package/dist/monitoring/probes/__shared.d.ts.map +1 -0
- package/dist/monitoring/probes/__shared.js +51 -0
- package/dist/monitoring/probes/__shared.js.map +1 -0
- package/dist/remediation/IntentJournal.d.ts +64 -0
- package/dist/remediation/IntentJournal.d.ts.map +1 -0
- package/dist/remediation/IntentJournal.js +118 -0
- package/dist/remediation/IntentJournal.js.map +1 -0
- package/dist/remediation/MachineLock.d.ts +137 -0
- package/dist/remediation/MachineLock.d.ts.map +1 -0
- package/dist/remediation/MachineLock.js +314 -0
- package/dist/remediation/MachineLock.js.map +1 -0
- package/dist/remediation/PrimaryAggregatorLease.d.ts +205 -0
- package/dist/remediation/PrimaryAggregatorLease.d.ts.map +1 -0
- package/dist/remediation/PrimaryAggregatorLease.js +450 -0
- package/dist/remediation/PrimaryAggregatorLease.js.map +1 -0
- package/dist/remediation/RemediationContext.d.ts +63 -0
- package/dist/remediation/RemediationContext.d.ts.map +1 -0
- package/dist/remediation/RemediationContext.js +109 -0
- package/dist/remediation/RemediationContext.js.map +1 -0
- package/dist/remediation/RemediationKeyVault.d.ts +123 -0
- package/dist/remediation/RemediationKeyVault.d.ts.map +1 -0
- package/dist/remediation/RemediationKeyVault.js +564 -0
- package/dist/remediation/RemediationKeyVault.js.map +1 -0
- package/dist/remediation/Remediator.d.ts +288 -0
- package/dist/remediation/Remediator.d.ts.map +1 -0
- package/dist/remediation/Remediator.js +520 -0
- package/dist/remediation/Remediator.js.map +1 -0
- package/dist/remediation/RemediatorBootstrap.d.ts +141 -0
- package/dist/remediation/RemediatorBootstrap.d.ts.map +1 -0
- package/dist/remediation/RemediatorBootstrap.js +255 -0
- package/dist/remediation/RemediatorBootstrap.js.map +1 -0
- package/dist/remediation/TrustElevationSource.d.ts +153 -0
- package/dist/remediation/TrustElevationSource.d.ts.map +1 -0
- package/dist/remediation/TrustElevationSource.js +208 -0
- package/dist/remediation/TrustElevationSource.js.map +1 -0
- package/dist/remediation/audit/AuditProjection.d.ts +37 -0
- package/dist/remediation/audit/AuditProjection.d.ts.map +1 -0
- package/dist/remediation/audit/AuditProjection.js +118 -0
- package/dist/remediation/audit/AuditProjection.js.map +1 -0
- package/dist/remediation/audit/AuditWriter.d.ts +79 -0
- package/dist/remediation/audit/AuditWriter.d.ts.map +1 -0
- package/dist/remediation/audit/AuditWriter.js +132 -0
- package/dist/remediation/audit/AuditWriter.js.map +1 -0
- package/dist/remediation/channels/CliApprovalChannel.d.ts +37 -0
- package/dist/remediation/channels/CliApprovalChannel.d.ts.map +1 -0
- package/dist/remediation/channels/CliApprovalChannel.js +45 -0
- package/dist/remediation/channels/CliApprovalChannel.js.map +1 -0
- package/dist/remediation/channels/TelegramApprovalChannel.d.ts +37 -0
- package/dist/remediation/channels/TelegramApprovalChannel.d.ts.map +1 -0
- package/dist/remediation/channels/TelegramApprovalChannel.js +45 -0
- package/dist/remediation/channels/TelegramApprovalChannel.js.map +1 -0
- package/dist/remediation/runbooks/db-corruption.d.ts +86 -0
- package/dist/remediation/runbooks/db-corruption.d.ts.map +1 -0
- package/dist/remediation/runbooks/db-corruption.js +190 -0
- package/dist/remediation/runbooks/db-corruption.js.map +1 -0
- package/dist/remediation/runbooks/messaging-delivery-failed.d.ts +108 -0
- package/dist/remediation/runbooks/messaging-delivery-failed.d.ts.map +1 -0
- package/dist/remediation/runbooks/messaging-delivery-failed.js +172 -0
- package/dist/remediation/runbooks/messaging-delivery-failed.js.map +1 -0
- package/dist/remediation/runbooks/node-abi-mismatch.d.ts +70 -0
- package/dist/remediation/runbooks/node-abi-mismatch.d.ts.map +1 -0
- package/dist/remediation/runbooks/node-abi-mismatch.js +216 -0
- package/dist/remediation/runbooks/node-abi-mismatch.js.map +1 -0
- package/dist/remediation/runbooks/supervisor-preflight.d.ts +114 -0
- package/dist/remediation/runbooks/supervisor-preflight.d.ts.map +1 -0
- package/dist/remediation/runbooks/supervisor-preflight.js +299 -0
- package/dist/remediation/runbooks/supervisor-preflight.js.map +1 -0
- package/dist/scheduler/AgentMdAtomicSave.d.ts +85 -0
- package/dist/scheduler/AgentMdAtomicSave.d.ts.map +1 -0
- package/dist/scheduler/AgentMdAtomicSave.js +169 -0
- package/dist/scheduler/AgentMdAtomicSave.js.map +1 -0
- package/dist/scheduler/AgentMdReconcile.d.ts +62 -0
- package/dist/scheduler/AgentMdReconcile.d.ts.map +1 -0
- package/dist/scheduler/AgentMdReconcile.js +212 -0
- package/dist/scheduler/AgentMdReconcile.js.map +1 -0
- package/dist/scheduler/DisabledBodyDrift.d.ts +70 -0
- package/dist/scheduler/DisabledBodyDrift.d.ts.map +1 -0
- package/dist/scheduler/DisabledBodyDrift.js +149 -0
- package/dist/scheduler/DisabledBodyDrift.js.map +1 -0
- package/dist/scheduler/InstallBuiltinJobs.d.ts +53 -0
- package/dist/scheduler/InstallBuiltinJobs.d.ts.map +1 -0
- package/dist/scheduler/InstallBuiltinJobs.js +212 -0
- package/dist/scheduler/InstallBuiltinJobs.js.map +1 -0
- package/dist/scheduler/JobLoader.d.ts.map +1 -1
- package/dist/scheduler/JobLoader.js +48 -0
- package/dist/scheduler/JobLoader.js.map +1 -1
- package/dist/scheduler/MigrationInvariants.d.ts +62 -0
- package/dist/scheduler/MigrationInvariants.d.ts.map +1 -0
- package/dist/scheduler/MigrationInvariants.js +215 -0
- package/dist/scheduler/MigrationInvariants.js.map +1 -0
- package/dist/scheduler/MigrationLedger.d.ts +84 -0
- package/dist/scheduler/MigrationLedger.d.ts.map +1 -0
- package/dist/scheduler/MigrationLedger.js +114 -0
- package/dist/scheduler/MigrationLedger.js.map +1 -0
- package/dist/server/fileRoutes.d.ts.map +1 -1
- package/dist/server/fileRoutes.js +7 -0
- package/dist/server/fileRoutes.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +141 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +3 -2
- package/scripts/classify-default-drift.mjs +238 -0
- package/scripts/eli16-overview-check.mjs +85 -0
- package/scripts/instar-dev-precommit.js +60 -1
- package/scripts/lint-degradation-emit-sites.js +116 -0
- package/scripts/lint-no-direct-destructive.js +12 -0
- package/scripts/protect-migration-guarantee.js +61 -0
- package/scripts/regen-default-job-templates.mjs +111 -0
- package/scripts/verify-runbook-pr-signature.js +366 -0
- package/src/data/builtin-manifest.json +93 -93
- package/src/scaffold/bootstrap.ts +138 -0
- package/src/scaffold/keys/instar-release-pub.pem +3 -0
- package/src/scaffold/templates/jobs/instar/.gitkeep +0 -0
- package/src/scaffold/templates/jobs/instar/commitment-detection.md +28 -0
- package/src/scaffold/templates/jobs/instar/evolution-overdue-check.md +28 -0
- package/src/scaffold/templates/jobs/instar/evolution-proposal-evaluate.md +30 -0
- package/src/scaffold/templates/jobs/instar/evolution-proposal-implement.md +25 -0
- package/src/scaffold/templates/jobs/instar/health-check.md +14 -0
- package/src/scaffold/templates/jobs/instar/identity-review.md +42 -0
- package/src/scaffold/templates/jobs/instar/insight-harvest.md +31 -0
- package/src/scaffold/templates/jobs/instar/overseer-development.md +23 -0
- package/src/scaffold/templates/jobs/instar/overseer-guardian.md +28 -0
- package/src/scaffold/templates/jobs/instar/overseer-infrastructure.md +26 -0
- package/src/scaffold/templates/jobs/instar/overseer-learning.md +28 -0
- package/src/scaffold/templates/jobs/instar/overseer-maintenance.md +27 -0
- package/src/scaffold/templates/jobs/instar/reflection-trigger.md +40 -0
- package/src/scaffold/templates/jobs/instar/relationship-maintenance.md +16 -0
- package/src/scaffold/templates.ts +1616 -0
- package/upgrades/0.28.102.md +6 -7
- package/upgrades/0.28.103.md +471 -0
- package/upgrades/side-effects/a47-primary-aggregator-lease.md +82 -0
- package/upgrades/side-effects/agentmd-atomic-save.md +66 -0
- package/upgrades/side-effects/agentmd-loader-200jobs-perf-benchmark.md +50 -0
- package/upgrades/side-effects/agentmd-reconcile-boot-lifecycle.md +66 -0
- package/upgrades/side-effects/api-safety-guard.md +80 -0
- package/upgrades/side-effects/c1-runbook-pr-gate.md +83 -0
- package/upgrades/side-effects/disabled-body-drift-detection.md +59 -0
- package/upgrades/side-effects/drift-classifier-release-time.md +71 -0
- package/upgrades/side-effects/eli16-overview-required-gate.md +77 -0
- package/upgrades/side-effects/f1-remediation-key-vault.md +195 -0
- package/upgrades/side-effects/f2-redactor-errorcode-extractor.md +130 -0
- package/upgrades/side-effects/f3-degradation-reporter-shim.md +105 -0
- package/upgrades/side-effects/f4-machine-locks-intent-journal-audit.md +117 -0
- package/upgrades/side-effects/f5-trust-elevation-source.md +258 -0
- package/upgrades/side-effects/f6-supervisor-handshake.md +234 -0
- package/upgrades/side-effects/f7-post-update-migrator-atomic-step.md +129 -0
- package/upgrades/side-effects/f8-remediator-skeleton.md +153 -0
- package/upgrades/side-effects/f8-rest-enforcement.md +72 -0
- package/upgrades/side-effects/file-viewer-jobs-instar-never-editable.md +41 -0
- package/upgrades/side-effects/frontmatter-interpolation-breakout-test.md +48 -0
- package/upgrades/side-effects/jobs-as-agentmd-phase-2.md +78 -0
- package/upgrades/side-effects/jobs-as-agentmd-phase-3.md +76 -0
- package/upgrades/side-effects/jobs-as-agentmd-phase-4-endpoints.md +62 -0
- package/upgrades/side-effects/jobs-as-agentmd-phase-5.md +67 -0
- package/upgrades/side-effects/jobs-as-agentmd-phase-6.md +53 -0
- package/upgrades/side-effects/jobs-endpoints-auth-verification.md +52 -0
- package/upgrades/side-effects/migration-guarantee-suite.md +61 -0
- package/upgrades/side-effects/migration-runtime-invariant-gate.md +59 -0
- package/upgrades/side-effects/migration-telemetry-invariant-8.md +68 -0
- package/upgrades/side-effects/npm-pack-templates-smoke.md +51 -0
- package/upgrades/side-effects/openclaw-import-before-prompt-build.md +84 -0
- package/upgrades/side-effects/openclaw-import-pre-compaction-flush.md +85 -0
- package/upgrades/side-effects/prompt-gate-no-prompt-cache.md +258 -0
- package/upgrades/side-effects/tier2-degradation-reporter-live-wire.md +146 -0
- package/upgrades/side-effects/w1-node-abi-mismatch-runbook.md +154 -0
- package/upgrades/side-effects/w2-supervisor-preflight-runbook.md +176 -0
- package/upgrades/side-effects/w3-messaging-delivery-failed-runbook.md +185 -0
- package/upgrades/side-effects/w4-db-corruption-runbook.md +114 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remediator — Tier-1 orchestrator skeleton for the Self-Healing Remediator v2.
|
|
3
|
+
*
|
|
4
|
+
* SELF-HEALING-REMEDIATOR-V2-SPEC §A1 (F-8), §A2 (lock-bound co-existence),
|
|
5
|
+
* §A3 (RemediationContext as capability token), §A4 (deadline enforcement),
|
|
6
|
+
* §A6 (errorCode provenance — free-text rejected at registry-load),
|
|
7
|
+
* §A21 (verify-failed strict typing — distinct from verify-inconclusive),
|
|
8
|
+
* §A36 (essential-runbook validator), §A57 (Tier-1 subset).
|
|
9
|
+
*
|
|
10
|
+
* Scope of this PR (Tier-1 subset per A57):
|
|
11
|
+
* - Match incoming `NormalizedDegradationEvent` against registered runbooks
|
|
12
|
+
* using `eventPrefilter` (errorCode + provenance) and `match()`.
|
|
13
|
+
* - Acquire in-flight `MachineLock` keyed by `tupleHash = sha256(runbookId +
|
|
14
|
+
* signatureHash)`. Detect existing in-flight lock with same tuple →
|
|
15
|
+
* `covered-by-inline`.
|
|
16
|
+
* - Issue a `RemediationContext` carrying:
|
|
17
|
+
* - attemptId (uuid),
|
|
18
|
+
* - runbookId,
|
|
19
|
+
* - lockHandle (from MachineLock),
|
|
20
|
+
* - auditToken (leaf key from RemediationKeyVault, audit context),
|
|
21
|
+
* - abortSignal wired to deadline via AbortController,
|
|
22
|
+
* - expiresAt + monotonicDeadline.
|
|
23
|
+
* - Declare intent via IntentJournal.
|
|
24
|
+
* - Audit-append `started` + final outcome via AuditWriter.
|
|
25
|
+
* - Enforce `expectedRuntimeMs` deadline. surfaceCallable that hangs past the
|
|
26
|
+
* deadline trips the AbortController and yields `aborted-deadline`.
|
|
27
|
+
* - On surfaceCallable success → call `runbook.verify(ctx)` and audit the
|
|
28
|
+
* result with the verified taxonomy (A21).
|
|
29
|
+
* - On surfaceCallable failure → audit `verify-failed` without calling
|
|
30
|
+
* `verify()` (a failed surface cannot return a healthy outcome).
|
|
31
|
+
*
|
|
32
|
+
* Explicitly OUT of scope (Tier-2 per A57):
|
|
33
|
+
* - Trust elevation source.
|
|
34
|
+
* - Probe authentication.
|
|
35
|
+
* - Capability token HMAC enforcement on the surface side.
|
|
36
|
+
* - Supervisor handshake.
|
|
37
|
+
* - Runbook registry validation against a signed manifest.
|
|
38
|
+
*
|
|
39
|
+
* Audit-token issuance per call uses `RemediationKeyVault.deriveLeafKey('audit',
|
|
40
|
+
* null)` (the audit context shares one machine-wide leaf per §A20). The actual
|
|
41
|
+
* verification of that token happens inside `AuditWriter.append()`'s injected
|
|
42
|
+
* `tokenVerifier` — the writer is the authority, the dispatcher merely issues.
|
|
43
|
+
*/
|
|
44
|
+
import type { NormalizedDegradationEvent } from '../monitoring/DegradationReporter.js';
|
|
45
|
+
import type { ErrorProvenance } from '../monitoring/ErrorCodeExtractor.js';
|
|
46
|
+
import type { RemediationKeyVault } from './RemediationKeyVault.js';
|
|
47
|
+
import type { MachineLock, InFlightHandle } from './MachineLock.js';
|
|
48
|
+
import type { IntentJournal } from './IntentJournal.js';
|
|
49
|
+
import type { AuditWriter } from './audit/AuditWriter.js';
|
|
50
|
+
import type { TrustElevationSource, RunbookTransition, CanTransitionContext } from './TrustElevationSource.js';
|
|
51
|
+
import type { ServerSupervisor, RegisteredRemediator, RestartRequestedReply } from '../lifeline/ServerSupervisor.js';
|
|
52
|
+
export type BlastRadius = 'process' | 'machine' | 'fleet';
|
|
53
|
+
export type Reversibility = 'reversible' | 'irreversible';
|
|
54
|
+
export interface RemediationContext {
|
|
55
|
+
attemptId: string;
|
|
56
|
+
runbookId: string;
|
|
57
|
+
lockHandle: InFlightHandle;
|
|
58
|
+
auditToken: Buffer;
|
|
59
|
+
abortSignal: AbortSignal;
|
|
60
|
+
/** Wall-clock expiry (informational; the monotonic deadline is authoritative). */
|
|
61
|
+
expiresAt: number;
|
|
62
|
+
/** `process.hrtime.bigint()` at issuance + expectedRuntimeMs converted to ns. */
|
|
63
|
+
monotonicDeadline: bigint;
|
|
64
|
+
/**
|
|
65
|
+
* §A3 capability-token HMAC over {attemptId, runbookId, expiresAt,
|
|
66
|
+
* monotonicDeadline}, signed with the per-runbook capability leaf. The
|
|
67
|
+
* surface MUST verify this via `verifyRemediationContext(ctx, keyVault)`
|
|
68
|
+
* before treating the call as Remediator-authorized.
|
|
69
|
+
*
|
|
70
|
+
* Optional on the type so unit tests that only need the structural shape
|
|
71
|
+
* (e.g. `RemediatorInvocationContext` in NativeModuleHealer) compile
|
|
72
|
+
* without re-deriving signatures. Production paths always set it.
|
|
73
|
+
*/
|
|
74
|
+
hmac?: Buffer;
|
|
75
|
+
}
|
|
76
|
+
export interface ExecutionResult {
|
|
77
|
+
outcome: 'success' | 'failure';
|
|
78
|
+
details: Record<string, unknown>;
|
|
79
|
+
}
|
|
80
|
+
export interface VerifyOutcome {
|
|
81
|
+
outcome: 'verified-healthy' | 'verify-failed' | 'verify-inconclusive';
|
|
82
|
+
reason: string;
|
|
83
|
+
}
|
|
84
|
+
export interface ApprovedRunbook {
|
|
85
|
+
id: string;
|
|
86
|
+
priority: number;
|
|
87
|
+
surface: string;
|
|
88
|
+
/**
|
|
89
|
+
* §A6: provenance MUST NOT include `'free-text'`. Validator at
|
|
90
|
+
* registerRunbook() refuses such matchers.
|
|
91
|
+
*/
|
|
92
|
+
eventPrefilter: {
|
|
93
|
+
errorCode: string[];
|
|
94
|
+
provenance: ErrorProvenance[];
|
|
95
|
+
};
|
|
96
|
+
match: (event: NormalizedDegradationEvent) => boolean;
|
|
97
|
+
preconditions: (event: NormalizedDegradationEvent) => Promise<boolean>;
|
|
98
|
+
surfaceCallable: (ctx: RemediationContext) => Promise<ExecutionResult>;
|
|
99
|
+
verify: (ctx: RemediationContext) => Promise<VerifyOutcome>;
|
|
100
|
+
blastRadius: BlastRadius;
|
|
101
|
+
reversibility: Reversibility;
|
|
102
|
+
expectedRuntimeMs: number;
|
|
103
|
+
/** §A36: only valid when blastRadius === 'machine'. */
|
|
104
|
+
essential?: boolean;
|
|
105
|
+
}
|
|
106
|
+
export type DispatchOutcome = {
|
|
107
|
+
outcome: 'no-matching-runbook';
|
|
108
|
+
} | {
|
|
109
|
+
outcome: 'covered-by-inline';
|
|
110
|
+
existingAttemptId: string;
|
|
111
|
+
} | {
|
|
112
|
+
outcome: 'verified-healthy';
|
|
113
|
+
attemptId: string;
|
|
114
|
+
} | {
|
|
115
|
+
outcome: 'verify-failed';
|
|
116
|
+
attemptId: string;
|
|
117
|
+
} | {
|
|
118
|
+
outcome: 'verify-inconclusive';
|
|
119
|
+
attemptId: string;
|
|
120
|
+
} | {
|
|
121
|
+
outcome: 'aborted-deadline';
|
|
122
|
+
attemptId: string;
|
|
123
|
+
};
|
|
124
|
+
export interface RemediatorOptions {
|
|
125
|
+
stateDir: string;
|
|
126
|
+
keyVault: RemediationKeyVault;
|
|
127
|
+
machineLock: MachineLock;
|
|
128
|
+
intentJournal: IntentJournal;
|
|
129
|
+
auditWriter: AuditWriter;
|
|
130
|
+
/**
|
|
131
|
+
* HMAC signer/verifier pair used to sign the in-flight lock envelope. In
|
|
132
|
+
* production the dispatcher derives these from
|
|
133
|
+
* `keyVault.deriveLeafKey('inflight', surfaceId)` per-runbook. Tests inject
|
|
134
|
+
* a fixed pair for determinism. If omitted, the dispatcher derives the
|
|
135
|
+
* pair at acquire-time using the keyVault's `inflight` context.
|
|
136
|
+
*/
|
|
137
|
+
lockSigner?: (payload: Buffer) => Buffer;
|
|
138
|
+
lockVerifier?: (payload: Buffer, signature: Buffer) => boolean;
|
|
139
|
+
/**
|
|
140
|
+
* F-5 trust-elevation source (Tier-2). When present, lifecycle-transition
|
|
141
|
+
* methods (e.g. promote/un-quarantine) consult it before mutating runbook
|
|
142
|
+
* state. Optional so existing Tier-1 tests + the Tier-1 dispatch path
|
|
143
|
+
* continue to work without wiring the source.
|
|
144
|
+
*/
|
|
145
|
+
trustSource?: TrustElevationSource;
|
|
146
|
+
/**
|
|
147
|
+
* F-6 supervisor handshake (Tier-2). When present, the Remediator
|
|
148
|
+
* registers itself with the supervisor at construction and uses it to
|
|
149
|
+
* issue planned restarts via `requestPlannedRestart()` below.
|
|
150
|
+
*/
|
|
151
|
+
serverSupervisor?: ServerSupervisor;
|
|
152
|
+
/**
|
|
153
|
+
* §A52 probe-source registry. Maps `probeId` → declared verify-scope
|
|
154
|
+
* (the list of subsystems the probe is allowed to report on) + the per-
|
|
155
|
+
* probe leaf-key verifier. Events whose provenance is `'probe-id'`
|
|
156
|
+
* MUST carry a signed envelope referencing a registered probe; events
|
|
157
|
+
* referencing an unregistered probe are routed to `audit-rejected.jsonl`.
|
|
158
|
+
*
|
|
159
|
+
* Tier-3 wires the full fleet; F-8-rest accepts the registry shape so
|
|
160
|
+
* one example probe (LifelineProbe) can flow end-to-end.
|
|
161
|
+
*/
|
|
162
|
+
probeSourceRegistry?: ProbeSourceRegistry;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* §A40 + §A52 — per-probe authentication + scope binding. Probes that
|
|
166
|
+
* emit `provenance: 'probe-id'` events MUST sign the envelope using their
|
|
167
|
+
* `probe`-context leaf key. The Remediator verifies the signature, then
|
|
168
|
+
* enforces that `event.subsystem ∈ scope` (the probe's declared
|
|
169
|
+
* `__verifyScope`).
|
|
170
|
+
*/
|
|
171
|
+
export interface ProbeSourceRegistry {
|
|
172
|
+
/**
|
|
173
|
+
* Returns the declared verify-scope for the given probeId. An empty
|
|
174
|
+
* scope means the probe has not been migrated to A52 enforcement
|
|
175
|
+
* (Tier-3 fleet work) — its events will be routed to audit-rejected
|
|
176
|
+
* on signed-probe-id flow.
|
|
177
|
+
*/
|
|
178
|
+
getScope(probeId: string): ReadonlyArray<string>;
|
|
179
|
+
/**
|
|
180
|
+
* Verifies the signature on a probe-signed envelope. `probeId` selects
|
|
181
|
+
* the leaf key (derived from the `probe`-context). `body` is the
|
|
182
|
+
* canonical envelope bytes — see `canonicalProbeEnvelopeBody()` below.
|
|
183
|
+
*
|
|
184
|
+
* Returns `false` (never throws) for any verification failure: unknown
|
|
185
|
+
* probe, length mismatch, HMAC mismatch.
|
|
186
|
+
*/
|
|
187
|
+
verify(probeId: string, body: Buffer, signature: Buffer): boolean;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* §A40 probe-envelope signed payload. The probe emits this on the
|
|
191
|
+
* `NormalizedDegradationEvent`'s `source.probeSignature` field (additive —
|
|
192
|
+
* unset for legacy emit-sites and for non-probe provenances).
|
|
193
|
+
*/
|
|
194
|
+
export interface ProbeSignatureEnvelope {
|
|
195
|
+
probeId: string;
|
|
196
|
+
subsystem: string;
|
|
197
|
+
outcome: string;
|
|
198
|
+
reason: string;
|
|
199
|
+
/** Monotonic timestamp (Number from performance.now()) at probe-side issuance. */
|
|
200
|
+
monotonicTs: number;
|
|
201
|
+
/** HMAC over `canonicalProbeEnvelopeBody(envelope)` using the probe leaf key. */
|
|
202
|
+
signature: Buffer;
|
|
203
|
+
}
|
|
204
|
+
export declare class Remediator implements RegisteredRemediator {
|
|
205
|
+
private readonly opts;
|
|
206
|
+
private readonly runbooks;
|
|
207
|
+
/** Pending restart requestIds → resolver fns awaiting `onRestartComplete`. */
|
|
208
|
+
private pendingRestartResolvers;
|
|
209
|
+
private lastRestartRequestRunbookId;
|
|
210
|
+
constructor(opts: RemediatorOptions);
|
|
211
|
+
/**
|
|
212
|
+
* Per-runbook capability leaf key used to sign `restart-requested`
|
|
213
|
+
* payloads. The supervisor verifies via the SAME leaf because both sides
|
|
214
|
+
* share the F-1 keyVault.
|
|
215
|
+
*/
|
|
216
|
+
getCapabilityLeafKey(): Buffer;
|
|
217
|
+
/**
|
|
218
|
+
* Supervisor → Remediator callback. Fires once per accepted
|
|
219
|
+
* `restart-requested` after the server recovers. Resolves any pending
|
|
220
|
+
* `requestPlannedRestart()` waiter.
|
|
221
|
+
*/
|
|
222
|
+
onRestartComplete(req: {
|
|
223
|
+
requestId: string;
|
|
224
|
+
}): void;
|
|
225
|
+
/**
|
|
226
|
+
* Issue a planned restart through the F-6 handshake. Signs the payload
|
|
227
|
+
* with the capability leaf for `runbookId`, hands to the supervisor.
|
|
228
|
+
* Returns the supervisor's reply.
|
|
229
|
+
*/
|
|
230
|
+
requestPlannedRestart(args: {
|
|
231
|
+
runbookId: string;
|
|
232
|
+
attemptId: string;
|
|
233
|
+
blastRadius: BlastRadius;
|
|
234
|
+
}): Promise<RestartRequestedReply | {
|
|
235
|
+
accepted: false;
|
|
236
|
+
reason: 'no-supervisor';
|
|
237
|
+
}>;
|
|
238
|
+
/**
|
|
239
|
+
* Consult the trust-elevation source for a lifecycle transition. When
|
|
240
|
+
* `trustSource` is unset, the Remediator falls back to `{allowed: true,
|
|
241
|
+
* reason: 'no-trust-source-wired'}` — Tier-1 behavior.
|
|
242
|
+
*/
|
|
243
|
+
canTransition(runbookId: string, transition: RunbookTransition, context?: CanTransitionContext): Promise<{
|
|
244
|
+
allowed: boolean;
|
|
245
|
+
reason: string;
|
|
246
|
+
}>;
|
|
247
|
+
/**
|
|
248
|
+
* Register a runbook. Enforces §A6 (no free-text prefilter) and §A36
|
|
249
|
+
* (essential ⇒ blastRadius === 'machine'). Rejection throws.
|
|
250
|
+
*/
|
|
251
|
+
registerRunbook(runbook: ApprovedRunbook): void;
|
|
252
|
+
/**
|
|
253
|
+
* Dispatch a normalized degradation event. Resolves to a `DispatchOutcome`
|
|
254
|
+
* describing the terminal state of the attempt (or the reason it never
|
|
255
|
+
* started).
|
|
256
|
+
*
|
|
257
|
+
* Note: this method never throws on policy-level rejections; it returns a
|
|
258
|
+
* structured outcome. It MAY throw on infrastructure failures (lock
|
|
259
|
+
* acquisition error, audit write error not classified as token-rejected).
|
|
260
|
+
*/
|
|
261
|
+
dispatch(event: NormalizedDegradationEvent): Promise<DispatchOutcome>;
|
|
262
|
+
private matchRunbook;
|
|
263
|
+
private resolveLockKey;
|
|
264
|
+
private auditAppend;
|
|
265
|
+
private auditAppendNoAttempt;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* §A40 canonical probe envelope serialization. Both the probe (signer) and
|
|
269
|
+
* the Remediator (verifier) MUST agree on this byte layout exactly.
|
|
270
|
+
*
|
|
271
|
+
* tag | probeId* | subsystem* | outcome* | reason* | monotonicTs(u64be)
|
|
272
|
+
*
|
|
273
|
+
* * = uint32be length prefix followed by utf-8 body.
|
|
274
|
+
*/
|
|
275
|
+
export declare function canonicalProbeEnvelopeBody(env: Pick<ProbeSignatureEnvelope, 'probeId' | 'subsystem' | 'outcome' | 'reason' | 'monotonicTs'>): Buffer;
|
|
276
|
+
/**
|
|
277
|
+
* §A52 default `ProbeSourceRegistry` impl backed by a keyVault + a
|
|
278
|
+
* `probeId → __verifyScope` map. Production callers wire one of these at
|
|
279
|
+
* Remediator construction; tests can pass an inline stub.
|
|
280
|
+
*/
|
|
281
|
+
export declare class DefaultProbeSourceRegistry implements ProbeSourceRegistry {
|
|
282
|
+
private readonly keyVault;
|
|
283
|
+
private readonly scopes;
|
|
284
|
+
constructor(keyVault: Pick<RemediationKeyVault, 'deriveLeafKey'>, scopes: Record<string, ReadonlyArray<string>>);
|
|
285
|
+
getScope(probeId: string): ReadonlyArray<string>;
|
|
286
|
+
verify(probeId: string, body: Buffer, signature: Buffer): boolean;
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=Remediator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Remediator.d.ts","sourceRoot":"","sources":["../../src/remediation/Remediator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,WAAW,EAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EAEpB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAMzC,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,kBAAkB,GAAG,eAAe,GAAG,qBAAqB,CAAC;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,EAAE,eAAe,EAAE,CAAC;KAC/B,CAAC;IACF,KAAK,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC;IACtD,aAAa,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,eAAe,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5D,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,OAAO,EAAE,qBAAqB,CAAA;CAAE,GAClC;IAAE,OAAO,EAAE,mBAAmB,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,OAAO,EAAE,qBAAqB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/D;;;;;OAKG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACnE;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,qBAAa,UAAW,YAAW,oBAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;IAC/D,8EAA8E;IAC9E,OAAO,CAAC,uBAAuB,CAA2D;IAC1F,OAAO,CAAC,2BAA2B,CAAuB;gBAE9C,IAAI,EAAE,iBAAiB;IAoBnC;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;IAQ9B;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAcnD;;;;OAIG;IACG,qBAAqB,CAAC,IAAI,EAAE;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,WAAW,CAAC;KAC1B,GAAG,OAAO,CAAC,qBAAqB,GAAG;QAAE,QAAQ,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC;IAkCjF;;;;OAIG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAOhD;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IA0B/C;;;;;;;;OAQG;IACG,QAAQ,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,CAAC;IA8P3E,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,cAAc;YAsBR,WAAW;YA0BX,oBAAoB;CAuBnC;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,IAAI,CACP,sBAAsB,EACtB,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAC/D,GACA,MAAM,CAqBR;AAED;;;;GAIG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IAIlE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAH3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGzC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,EACrE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAK/C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;CAgBlE"}
|