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.
Files changed (247) hide show
  1. package/.claude/hooks/instar/before-prompt-recall.js +90 -0
  2. package/dist/cli.js +28 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts +1 -0
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +14 -1
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/jobMigrate.d.ts +46 -0
  9. package/dist/commands/jobMigrate.d.ts.map +1 -0
  10. package/dist/commands/jobMigrate.js +292 -0
  11. package/dist/commands/jobMigrate.js.map +1 -0
  12. package/dist/commands/server.d.ts.map +1 -1
  13. package/dist/commands/server.js +88 -42
  14. package/dist/commands/server.js.map +1 -1
  15. package/dist/core/BackupManager.d.ts +27 -1
  16. package/dist/core/BackupManager.d.ts.map +1 -1
  17. package/dist/core/BackupManager.js +56 -1
  18. package/dist/core/BackupManager.js.map +1 -1
  19. package/dist/core/GitStateManager.d.ts +8 -0
  20. package/dist/core/GitStateManager.d.ts.map +1 -1
  21. package/dist/core/GitStateManager.js +31 -1
  22. package/dist/core/GitStateManager.js.map +1 -1
  23. package/dist/core/MigratorStepEngine.d.ts +170 -0
  24. package/dist/core/MigratorStepEngine.d.ts.map +1 -0
  25. package/dist/core/MigratorStepEngine.js +352 -0
  26. package/dist/core/MigratorStepEngine.js.map +1 -0
  27. package/dist/core/PostUpdateMigrator.d.ts +76 -0
  28. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  29. package/dist/core/PostUpdateMigrator.js +252 -1
  30. package/dist/core/PostUpdateMigrator.js.map +1 -1
  31. package/dist/core/PreCompactionFlush.d.ts +101 -0
  32. package/dist/core/PreCompactionFlush.d.ts.map +1 -0
  33. package/dist/core/PreCompactionFlush.js +282 -0
  34. package/dist/core/PreCompactionFlush.js.map +1 -0
  35. package/dist/core/PromptBuildRecall.d.ts +97 -0
  36. package/dist/core/PromptBuildRecall.d.ts.map +1 -0
  37. package/dist/core/PromptBuildRecall.js +152 -0
  38. package/dist/core/PromptBuildRecall.js.map +1 -0
  39. package/dist/core/selectIntelligenceProvider.d.ts +41 -0
  40. package/dist/core/selectIntelligenceProvider.d.ts.map +1 -0
  41. package/dist/core/selectIntelligenceProvider.js +89 -0
  42. package/dist/core/selectIntelligenceProvider.js.map +1 -0
  43. package/dist/lifeline/ServerSupervisor.d.ts +183 -0
  44. package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
  45. package/dist/lifeline/ServerSupervisor.js +443 -0
  46. package/dist/lifeline/ServerSupervisor.js.map +1 -1
  47. package/dist/memory/NativeModuleHealer.d.ts +89 -0
  48. package/dist/memory/NativeModuleHealer.d.ts.map +1 -1
  49. package/dist/memory/NativeModuleHealer.js +371 -1
  50. package/dist/memory/NativeModuleHealer.js.map +1 -1
  51. package/dist/memory/SemanticMemory.d.ts +131 -0
  52. package/dist/memory/SemanticMemory.d.ts.map +1 -1
  53. package/dist/memory/SemanticMemory.js +315 -0
  54. package/dist/memory/SemanticMemory.js.map +1 -1
  55. package/dist/messaging/DeliveryRetryManager.d.ts +60 -0
  56. package/dist/messaging/DeliveryRetryManager.d.ts.map +1 -1
  57. package/dist/messaging/DeliveryRetryManager.js +104 -0
  58. package/dist/messaging/DeliveryRetryManager.js.map +1 -1
  59. package/dist/monitoring/DegradationReporter.d.ts +164 -0
  60. package/dist/monitoring/DegradationReporter.d.ts.map +1 -1
  61. package/dist/monitoring/DegradationReporter.js +309 -1
  62. package/dist/monitoring/DegradationReporter.js.map +1 -1
  63. package/dist/monitoring/ErrorCodeExtractor.d.ts +69 -0
  64. package/dist/monitoring/ErrorCodeExtractor.d.ts.map +1 -0
  65. package/dist/monitoring/ErrorCodeExtractor.js +131 -0
  66. package/dist/monitoring/ErrorCodeExtractor.js.map +1 -0
  67. package/dist/monitoring/PromptGate.d.ts +34 -0
  68. package/dist/monitoring/PromptGate.d.ts.map +1 -1
  69. package/dist/monitoring/PromptGate.js +81 -1
  70. package/dist/monitoring/PromptGate.js.map +1 -1
  71. package/dist/monitoring/Redactor.d.ts +58 -0
  72. package/dist/monitoring/Redactor.d.ts.map +1 -0
  73. package/dist/monitoring/Redactor.js +143 -0
  74. package/dist/monitoring/Redactor.js.map +1 -0
  75. package/dist/monitoring/probes/LifelineProbe.d.ts +7 -0
  76. package/dist/monitoring/probes/LifelineProbe.d.ts.map +1 -1
  77. package/dist/monitoring/probes/LifelineProbe.js +7 -0
  78. package/dist/monitoring/probes/LifelineProbe.js.map +1 -1
  79. package/dist/monitoring/probes/__shared.d.ts +50 -0
  80. package/dist/monitoring/probes/__shared.d.ts.map +1 -0
  81. package/dist/monitoring/probes/__shared.js +51 -0
  82. package/dist/monitoring/probes/__shared.js.map +1 -0
  83. package/dist/remediation/IntentJournal.d.ts +64 -0
  84. package/dist/remediation/IntentJournal.d.ts.map +1 -0
  85. package/dist/remediation/IntentJournal.js +118 -0
  86. package/dist/remediation/IntentJournal.js.map +1 -0
  87. package/dist/remediation/MachineLock.d.ts +137 -0
  88. package/dist/remediation/MachineLock.d.ts.map +1 -0
  89. package/dist/remediation/MachineLock.js +314 -0
  90. package/dist/remediation/MachineLock.js.map +1 -0
  91. package/dist/remediation/PrimaryAggregatorLease.d.ts +205 -0
  92. package/dist/remediation/PrimaryAggregatorLease.d.ts.map +1 -0
  93. package/dist/remediation/PrimaryAggregatorLease.js +450 -0
  94. package/dist/remediation/PrimaryAggregatorLease.js.map +1 -0
  95. package/dist/remediation/RemediationContext.d.ts +63 -0
  96. package/dist/remediation/RemediationContext.d.ts.map +1 -0
  97. package/dist/remediation/RemediationContext.js +109 -0
  98. package/dist/remediation/RemediationContext.js.map +1 -0
  99. package/dist/remediation/RemediationKeyVault.d.ts +123 -0
  100. package/dist/remediation/RemediationKeyVault.d.ts.map +1 -0
  101. package/dist/remediation/RemediationKeyVault.js +564 -0
  102. package/dist/remediation/RemediationKeyVault.js.map +1 -0
  103. package/dist/remediation/Remediator.d.ts +288 -0
  104. package/dist/remediation/Remediator.d.ts.map +1 -0
  105. package/dist/remediation/Remediator.js +520 -0
  106. package/dist/remediation/Remediator.js.map +1 -0
  107. package/dist/remediation/RemediatorBootstrap.d.ts +141 -0
  108. package/dist/remediation/RemediatorBootstrap.d.ts.map +1 -0
  109. package/dist/remediation/RemediatorBootstrap.js +255 -0
  110. package/dist/remediation/RemediatorBootstrap.js.map +1 -0
  111. package/dist/remediation/TrustElevationSource.d.ts +153 -0
  112. package/dist/remediation/TrustElevationSource.d.ts.map +1 -0
  113. package/dist/remediation/TrustElevationSource.js +208 -0
  114. package/dist/remediation/TrustElevationSource.js.map +1 -0
  115. package/dist/remediation/audit/AuditProjection.d.ts +37 -0
  116. package/dist/remediation/audit/AuditProjection.d.ts.map +1 -0
  117. package/dist/remediation/audit/AuditProjection.js +118 -0
  118. package/dist/remediation/audit/AuditProjection.js.map +1 -0
  119. package/dist/remediation/audit/AuditWriter.d.ts +79 -0
  120. package/dist/remediation/audit/AuditWriter.d.ts.map +1 -0
  121. package/dist/remediation/audit/AuditWriter.js +132 -0
  122. package/dist/remediation/audit/AuditWriter.js.map +1 -0
  123. package/dist/remediation/channels/CliApprovalChannel.d.ts +37 -0
  124. package/dist/remediation/channels/CliApprovalChannel.d.ts.map +1 -0
  125. package/dist/remediation/channels/CliApprovalChannel.js +45 -0
  126. package/dist/remediation/channels/CliApprovalChannel.js.map +1 -0
  127. package/dist/remediation/channels/TelegramApprovalChannel.d.ts +37 -0
  128. package/dist/remediation/channels/TelegramApprovalChannel.d.ts.map +1 -0
  129. package/dist/remediation/channels/TelegramApprovalChannel.js +45 -0
  130. package/dist/remediation/channels/TelegramApprovalChannel.js.map +1 -0
  131. package/dist/remediation/runbooks/db-corruption.d.ts +86 -0
  132. package/dist/remediation/runbooks/db-corruption.d.ts.map +1 -0
  133. package/dist/remediation/runbooks/db-corruption.js +190 -0
  134. package/dist/remediation/runbooks/db-corruption.js.map +1 -0
  135. package/dist/remediation/runbooks/messaging-delivery-failed.d.ts +108 -0
  136. package/dist/remediation/runbooks/messaging-delivery-failed.d.ts.map +1 -0
  137. package/dist/remediation/runbooks/messaging-delivery-failed.js +172 -0
  138. package/dist/remediation/runbooks/messaging-delivery-failed.js.map +1 -0
  139. package/dist/remediation/runbooks/node-abi-mismatch.d.ts +70 -0
  140. package/dist/remediation/runbooks/node-abi-mismatch.d.ts.map +1 -0
  141. package/dist/remediation/runbooks/node-abi-mismatch.js +216 -0
  142. package/dist/remediation/runbooks/node-abi-mismatch.js.map +1 -0
  143. package/dist/remediation/runbooks/supervisor-preflight.d.ts +114 -0
  144. package/dist/remediation/runbooks/supervisor-preflight.d.ts.map +1 -0
  145. package/dist/remediation/runbooks/supervisor-preflight.js +299 -0
  146. package/dist/remediation/runbooks/supervisor-preflight.js.map +1 -0
  147. package/dist/scheduler/AgentMdAtomicSave.d.ts +85 -0
  148. package/dist/scheduler/AgentMdAtomicSave.d.ts.map +1 -0
  149. package/dist/scheduler/AgentMdAtomicSave.js +169 -0
  150. package/dist/scheduler/AgentMdAtomicSave.js.map +1 -0
  151. package/dist/scheduler/AgentMdReconcile.d.ts +62 -0
  152. package/dist/scheduler/AgentMdReconcile.d.ts.map +1 -0
  153. package/dist/scheduler/AgentMdReconcile.js +212 -0
  154. package/dist/scheduler/AgentMdReconcile.js.map +1 -0
  155. package/dist/scheduler/DisabledBodyDrift.d.ts +70 -0
  156. package/dist/scheduler/DisabledBodyDrift.d.ts.map +1 -0
  157. package/dist/scheduler/DisabledBodyDrift.js +149 -0
  158. package/dist/scheduler/DisabledBodyDrift.js.map +1 -0
  159. package/dist/scheduler/InstallBuiltinJobs.d.ts +53 -0
  160. package/dist/scheduler/InstallBuiltinJobs.d.ts.map +1 -0
  161. package/dist/scheduler/InstallBuiltinJobs.js +212 -0
  162. package/dist/scheduler/InstallBuiltinJobs.js.map +1 -0
  163. package/dist/scheduler/JobLoader.d.ts.map +1 -1
  164. package/dist/scheduler/JobLoader.js +48 -0
  165. package/dist/scheduler/JobLoader.js.map +1 -1
  166. package/dist/scheduler/MigrationInvariants.d.ts +62 -0
  167. package/dist/scheduler/MigrationInvariants.d.ts.map +1 -0
  168. package/dist/scheduler/MigrationInvariants.js +215 -0
  169. package/dist/scheduler/MigrationInvariants.js.map +1 -0
  170. package/dist/scheduler/MigrationLedger.d.ts +84 -0
  171. package/dist/scheduler/MigrationLedger.d.ts.map +1 -0
  172. package/dist/scheduler/MigrationLedger.js +114 -0
  173. package/dist/scheduler/MigrationLedger.js.map +1 -0
  174. package/dist/server/fileRoutes.d.ts.map +1 -1
  175. package/dist/server/fileRoutes.js +7 -0
  176. package/dist/server/fileRoutes.js.map +1 -1
  177. package/dist/server/routes.d.ts.map +1 -1
  178. package/dist/server/routes.js +141 -0
  179. package/dist/server/routes.js.map +1 -1
  180. package/package.json +3 -2
  181. package/scripts/classify-default-drift.mjs +238 -0
  182. package/scripts/eli16-overview-check.mjs +85 -0
  183. package/scripts/instar-dev-precommit.js +60 -1
  184. package/scripts/lint-degradation-emit-sites.js +116 -0
  185. package/scripts/lint-no-direct-destructive.js +12 -0
  186. package/scripts/protect-migration-guarantee.js +61 -0
  187. package/scripts/regen-default-job-templates.mjs +111 -0
  188. package/scripts/verify-runbook-pr-signature.js +366 -0
  189. package/src/data/builtin-manifest.json +93 -93
  190. package/src/scaffold/bootstrap.ts +138 -0
  191. package/src/scaffold/keys/instar-release-pub.pem +3 -0
  192. package/src/scaffold/templates/jobs/instar/.gitkeep +0 -0
  193. package/src/scaffold/templates/jobs/instar/commitment-detection.md +28 -0
  194. package/src/scaffold/templates/jobs/instar/evolution-overdue-check.md +28 -0
  195. package/src/scaffold/templates/jobs/instar/evolution-proposal-evaluate.md +30 -0
  196. package/src/scaffold/templates/jobs/instar/evolution-proposal-implement.md +25 -0
  197. package/src/scaffold/templates/jobs/instar/health-check.md +14 -0
  198. package/src/scaffold/templates/jobs/instar/identity-review.md +42 -0
  199. package/src/scaffold/templates/jobs/instar/insight-harvest.md +31 -0
  200. package/src/scaffold/templates/jobs/instar/overseer-development.md +23 -0
  201. package/src/scaffold/templates/jobs/instar/overseer-guardian.md +28 -0
  202. package/src/scaffold/templates/jobs/instar/overseer-infrastructure.md +26 -0
  203. package/src/scaffold/templates/jobs/instar/overseer-learning.md +28 -0
  204. package/src/scaffold/templates/jobs/instar/overseer-maintenance.md +27 -0
  205. package/src/scaffold/templates/jobs/instar/reflection-trigger.md +40 -0
  206. package/src/scaffold/templates/jobs/instar/relationship-maintenance.md +16 -0
  207. package/src/scaffold/templates.ts +1616 -0
  208. package/upgrades/0.28.102.md +6 -7
  209. package/upgrades/0.28.103.md +471 -0
  210. package/upgrades/side-effects/a47-primary-aggregator-lease.md +82 -0
  211. package/upgrades/side-effects/agentmd-atomic-save.md +66 -0
  212. package/upgrades/side-effects/agentmd-loader-200jobs-perf-benchmark.md +50 -0
  213. package/upgrades/side-effects/agentmd-reconcile-boot-lifecycle.md +66 -0
  214. package/upgrades/side-effects/api-safety-guard.md +80 -0
  215. package/upgrades/side-effects/c1-runbook-pr-gate.md +83 -0
  216. package/upgrades/side-effects/disabled-body-drift-detection.md +59 -0
  217. package/upgrades/side-effects/drift-classifier-release-time.md +71 -0
  218. package/upgrades/side-effects/eli16-overview-required-gate.md +77 -0
  219. package/upgrades/side-effects/f1-remediation-key-vault.md +195 -0
  220. package/upgrades/side-effects/f2-redactor-errorcode-extractor.md +130 -0
  221. package/upgrades/side-effects/f3-degradation-reporter-shim.md +105 -0
  222. package/upgrades/side-effects/f4-machine-locks-intent-journal-audit.md +117 -0
  223. package/upgrades/side-effects/f5-trust-elevation-source.md +258 -0
  224. package/upgrades/side-effects/f6-supervisor-handshake.md +234 -0
  225. package/upgrades/side-effects/f7-post-update-migrator-atomic-step.md +129 -0
  226. package/upgrades/side-effects/f8-remediator-skeleton.md +153 -0
  227. package/upgrades/side-effects/f8-rest-enforcement.md +72 -0
  228. package/upgrades/side-effects/file-viewer-jobs-instar-never-editable.md +41 -0
  229. package/upgrades/side-effects/frontmatter-interpolation-breakout-test.md +48 -0
  230. package/upgrades/side-effects/jobs-as-agentmd-phase-2.md +78 -0
  231. package/upgrades/side-effects/jobs-as-agentmd-phase-3.md +76 -0
  232. package/upgrades/side-effects/jobs-as-agentmd-phase-4-endpoints.md +62 -0
  233. package/upgrades/side-effects/jobs-as-agentmd-phase-5.md +67 -0
  234. package/upgrades/side-effects/jobs-as-agentmd-phase-6.md +53 -0
  235. package/upgrades/side-effects/jobs-endpoints-auth-verification.md +52 -0
  236. package/upgrades/side-effects/migration-guarantee-suite.md +61 -0
  237. package/upgrades/side-effects/migration-runtime-invariant-gate.md +59 -0
  238. package/upgrades/side-effects/migration-telemetry-invariant-8.md +68 -0
  239. package/upgrades/side-effects/npm-pack-templates-smoke.md +51 -0
  240. package/upgrades/side-effects/openclaw-import-before-prompt-build.md +84 -0
  241. package/upgrades/side-effects/openclaw-import-pre-compaction-flush.md +85 -0
  242. package/upgrades/side-effects/prompt-gate-no-prompt-cache.md +258 -0
  243. package/upgrades/side-effects/tier2-degradation-reporter-live-wire.md +146 -0
  244. package/upgrades/side-effects/w1-node-abi-mismatch-runbook.md +154 -0
  245. package/upgrades/side-effects/w2-supervisor-preflight-runbook.md +176 -0
  246. package/upgrades/side-effects/w3-messaging-delivery-failed-runbook.md +185 -0
  247. 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":"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"}