instar 1.3.1619 → 1.3.1621

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 (100) hide show
  1. package/dist/commands/server.d.ts +6 -0
  2. package/dist/commands/server.d.ts.map +1 -1
  3. package/dist/commands/server.js +115 -9
  4. package/dist/commands/server.js.map +1 -1
  5. package/dist/core/PostUpdateMigrator.d.ts +6 -0
  6. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  7. package/dist/core/PostUpdateMigrator.js +24 -0
  8. package/dist/core/PostUpdateMigrator.js.map +1 -1
  9. package/dist/core/TopicProfileOrchestrator.d.ts +4 -0
  10. package/dist/core/TopicProfileOrchestrator.d.ts.map +1 -1
  11. package/dist/core/TopicProfileOrchestrator.js +14 -1
  12. package/dist/core/TopicProfileOrchestrator.js.map +1 -1
  13. package/dist/core/TopicSpawnBriefStore.d.ts +48 -0
  14. package/dist/core/TopicSpawnBriefStore.d.ts.map +1 -0
  15. package/dist/core/TopicSpawnBriefStore.js +107 -0
  16. package/dist/core/TopicSpawnBriefStore.js.map +1 -0
  17. package/dist/core/componentCategories.d.ts.map +1 -1
  18. package/dist/core/componentCategories.js +1 -0
  19. package/dist/core/componentCategories.js.map +1 -1
  20. package/dist/core/devGatedFeatures.js +1 -1
  21. package/dist/core/devGatedFeatures.js.map +1 -1
  22. package/dist/data/llmBenchCoverage.d.ts.map +1 -1
  23. package/dist/data/llmBenchCoverage.js +5 -0
  24. package/dist/data/llmBenchCoverage.js.map +1 -1
  25. package/dist/data/provenanceCoverage.d.ts +2 -0
  26. package/dist/data/provenanceCoverage.d.ts.map +1 -1
  27. package/dist/data/provenanceCoverage.js +15 -0
  28. package/dist/data/provenanceCoverage.js.map +1 -1
  29. package/dist/data/standards-guard-index.json +1 -1
  30. package/dist/data/standards-guard-index.meta.json +2 -2
  31. package/dist/data/standards-registry.meta.json +1 -1
  32. package/dist/monitoring/MachineWedgeJudge.d.ts +28 -0
  33. package/dist/monitoring/MachineWedgeJudge.d.ts.map +1 -0
  34. package/dist/monitoring/MachineWedgeJudge.js +114 -0
  35. package/dist/monitoring/MachineWedgeJudge.js.map +1 -0
  36. package/dist/monitoring/MachineWedgeNotice.d.ts +38 -0
  37. package/dist/monitoring/MachineWedgeNotice.d.ts.map +1 -0
  38. package/dist/monitoring/MachineWedgeNotice.js +71 -0
  39. package/dist/monitoring/MachineWedgeNotice.js.map +1 -0
  40. package/dist/monitoring/guardManifest.d.ts.map +1 -1
  41. package/dist/monitoring/guardManifest.js +1 -0
  42. package/dist/monitoring/guardManifest.js.map +1 -1
  43. package/dist/monitoring/machineMaintenance/DrainRehearsal.d.ts +6 -0
  44. package/dist/monitoring/machineMaintenance/DrainRehearsal.d.ts.map +1 -1
  45. package/dist/monitoring/machineMaintenance/DrainRehearsal.js +7 -2
  46. package/dist/monitoring/machineMaintenance/DrainRehearsal.js.map +1 -1
  47. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.d.ts +36 -0
  48. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.d.ts.map +1 -1
  49. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.js +54 -0
  50. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.js.map +1 -1
  51. package/dist/monitoring/machineMaintenance/WedgeMonitor.d.ts +191 -0
  52. package/dist/monitoring/machineMaintenance/WedgeMonitor.d.ts.map +1 -0
  53. package/dist/monitoring/machineMaintenance/WedgeMonitor.js +489 -0
  54. package/dist/monitoring/machineMaintenance/WedgeMonitor.js.map +1 -0
  55. package/dist/monitoring/machineMaintenance/readings.d.ts +46 -0
  56. package/dist/monitoring/machineMaintenance/readings.d.ts.map +1 -1
  57. package/dist/monitoring/machineMaintenance/readings.js +71 -8
  58. package/dist/monitoring/machineMaintenance/readings.js.map +1 -1
  59. package/dist/monitoring/machineMaintenance/wedgeEvidence.d.ts +73 -0
  60. package/dist/monitoring/machineMaintenance/wedgeEvidence.d.ts.map +1 -0
  61. package/dist/monitoring/machineMaintenance/wedgeEvidence.js +111 -0
  62. package/dist/monitoring/machineMaintenance/wedgeEvidence.js.map +1 -0
  63. package/dist/monitoring/machineMaintenance/wedgeWindow.d.ts +94 -0
  64. package/dist/monitoring/machineMaintenance/wedgeWindow.d.ts.map +1 -0
  65. package/dist/monitoring/machineMaintenance/wedgeWindow.js +126 -0
  66. package/dist/monitoring/machineMaintenance/wedgeWindow.js.map +1 -0
  67. package/dist/monitoring/selfaction/policies.d.ts.map +1 -1
  68. package/dist/monitoring/selfaction/policies.js +15 -0
  69. package/dist/monitoring/selfaction/policies.js.map +1 -1
  70. package/dist/native/instar-desktop-host +0 -0
  71. package/dist/scaffold/templates.d.ts.map +1 -1
  72. package/dist/scaffold/templates.js +2 -1
  73. package/dist/scaffold/templates.js.map +1 -1
  74. package/dist/server/CapabilityIndex.js +1 -1
  75. package/dist/server/CapabilityIndex.js.map +1 -1
  76. package/dist/server/routes.d.ts +3 -0
  77. package/dist/server/routes.d.ts.map +1 -1
  78. package/dist/server/routes.js +56 -12
  79. package/dist/server/routes.js.map +1 -1
  80. package/dist/server/sessionSpawnTopicBinding.d.ts +26 -0
  81. package/dist/server/sessionSpawnTopicBinding.d.ts.map +1 -1
  82. package/dist/server/sessionSpawnTopicBinding.js +50 -0
  83. package/dist/server/sessionSpawnTopicBinding.js.map +1 -1
  84. package/dist/testing/selfActionRegistry.d.ts.map +1 -1
  85. package/dist/testing/selfActionRegistry.js +63 -0
  86. package/dist/testing/selfActionRegistry.js.map +1 -1
  87. package/package.json +1 -1
  88. package/src/data/builtin-manifest.json +63 -63
  89. package/src/data/llmBenchCoverage.ts +7 -0
  90. package/src/data/provenanceCoverage.ts +18 -0
  91. package/src/data/standards-guard-index.json +1 -1
  92. package/src/data/standards-guard-index.meta.json +2 -2
  93. package/src/data/standards-registry.meta.json +1 -1
  94. package/src/scaffold/templates.ts +2 -1
  95. package/upgrades/1.3.1620.md +26 -0
  96. package/upgrades/1.3.1621.md +27 -0
  97. package/upgrades/eli16/profile-restart-keeps-spawn-brief.md +24 -0
  98. package/upgrades/side-effects/machine-wedge-dryrun.eli16.md +15 -0
  99. package/upgrades/side-effects/machine-wedge-dryrun.md +146 -0
  100. package/upgrades/side-effects/profile-restart-keeps-spawn-brief.md +91 -0
@@ -0,0 +1,489 @@
1
+ /**
2
+ * Wedge detection, dry-run (docs/specs/machine-self-maintenance.md, Part E; CMT-1202).
3
+ *
4
+ * Samples the evidence families on this machine, forms wedge candidates under the
5
+ * window rules in `wedgeWindow.ts`, asks the judge once per candidate, and records
6
+ * what the ladder WOULD have done. It restarts nothing, closes nothing, dismisses
7
+ * nothing and stops no work: no rung exists in this build, and the dependencies
8
+ * below are reads plus two injected calls (the judge and the dry-run notice), each
9
+ * bounded here and gated by the caller.
10
+ *
11
+ * On a shared login only the host maintainer samples and calls the judge
12
+ * (HostMaintenanceStore heartbeat, 10-minute takeover). Its durable state (judge
13
+ * budget, episodes, `forcedDueAt`) lives in the host store so a takeover inherits it.
14
+ * The window itself is in memory: a takeover or a restart starts it fresh, which the
15
+ * gap rule would do anyway.
16
+ *
17
+ * Bounds: one sample at a time; at most one every 2 minutes (every 10 while nothing
18
+ * is positive); each probe has a hard timeout; at most one judge call per wedge
19
+ * condition and `JUDGE_MAX_PER_DAY` per 24 hours; at most one notice per condition,
20
+ * one ordinary and one breaker notice per 24 hours, and the notice is off unless its
21
+ * own flag is on.
22
+ */
23
+ import fs from 'node:fs';
24
+ import path from 'node:path';
25
+ import { readF1, readF2, readF4 } from './wedgeEvidence.js';
26
+ import { CANDIDATE_FAMILIES, JUDGE_ACTIONS, currentCandidate, emptyWindow, isFresh, nextSampleDelay, observe, recentlyRestarted, rungsFor, singleFamilyRun, WEDGE_FRESH_MS, WEDGE_MAX_GAP_MS, WEDGE_MIN_OBSERVATIONS, WEDGE_RECENT_BOOT_MS, WEDGE_SAMPLE_IDLE_MS, WEDGE_SAMPLE_POSITIVE_MS, WEDGE_SINGLE_FAMILY_MS, WEDGE_WINDOW_MS, } from './wedgeWindow.js';
27
+ const MIN = 60_000;
28
+ const DAY = 24 * 60 * MIN;
29
+ export const JUDGE_MAX_PER_DAY = 6;
30
+ export const CANDIDATE_BREAKER_PER_DAY = 3;
31
+ const PS_TIMEOUT_MS = 5_000;
32
+ const F1_TIMEOUT_MS = 10_000;
33
+ const MAX_EPISODES = 20;
34
+ const MAX_LOG_BYTES = 2 * 1024 * 1024;
35
+ /** A boot time this much later than the recorded one is a new boot. */
36
+ const NEW_BOOT_SLACK_MS = 60_000;
37
+ export function normalizeWedgeSettings(raw) {
38
+ const r = (raw && typeof raw === 'object' ? raw : {});
39
+ return { dryRun: r.dryRun !== false, dryRunNotice: r.dryRunNotice === true };
40
+ }
41
+ function emptyDurable() {
42
+ return {
43
+ version: 1, bootAt: null, forcedDueAt: null, forcedDueReason: null, f1PassedThisBoot: false, uninterruptibleCounts: [],
44
+ judgeCalls: [], candidatesOpened: [], episodes: [], condition: null, noticesSent: { normal: [], critical: [] }, singleFamilyRecorded: null,
45
+ };
46
+ }
47
+ function validDurable(raw) {
48
+ const d = raw;
49
+ return !!d && d.version === 1 && Array.isArray(d.judgeCalls) && Array.isArray(d.candidatesOpened) && Array.isArray(d.episodes)
50
+ && Array.isArray(d.uninterruptibleCounts) && !!d.noticesSent && Array.isArray(d.noticesSent.normal) && Array.isArray(d.noticesSent.critical);
51
+ }
52
+ /** Bounds on everything a sample awaits, so a sample always completes and `sampling` resets. */
53
+ export const WEDGE_PROBE_GUARD_MS = 2_000;
54
+ export const WEDGE_READ_BOUND_MS = 10_000;
55
+ export const WEDGE_JUDGE_BOUND_MS = 120_000;
56
+ export const WEDGE_NOTICE_BOUND_MS = 60_000;
57
+ /** Settles with `fallback` if `p` has not settled within `ms`. Never rejects. */
58
+ export function bounded(p, ms, fallback) {
59
+ return new Promise((resolve) => {
60
+ let done = false;
61
+ const timer = setTimeout(() => { if (!done) {
62
+ done = true;
63
+ resolve(fallback);
64
+ } }, ms);
65
+ timer.unref?.();
66
+ p.then((v) => { if (!done) {
67
+ done = true;
68
+ clearTimeout(timer);
69
+ resolve(v);
70
+ } }, () => { if (!done) {
71
+ done = true;
72
+ clearTimeout(timer);
73
+ resolve(fallback);
74
+ } });
75
+ });
76
+ }
77
+ const NOT_SAMPLED = { result: 'unknown', reason: 'not-sampled-yet' };
78
+ export class WedgeMonitor {
79
+ deps;
80
+ now;
81
+ timer = null;
82
+ first = null;
83
+ sampling = false;
84
+ role = 'unknown';
85
+ maintainer = null;
86
+ generation = null;
87
+ durable = emptyDurable();
88
+ window = emptyWindow();
89
+ families;
90
+ lastSample = null;
91
+ nextSampleAt = 0;
92
+ lastVerdict = null;
93
+ samples = 0;
94
+ lastError = null;
95
+ lastTickAt = null;
96
+ constructor(deps) {
97
+ this.deps = deps;
98
+ this.now = deps.now ?? Date.now;
99
+ this.families = this.freshFamilies();
100
+ }
101
+ freshFamilies() {
102
+ const f3 = this.deps.platform === 'linux'
103
+ ? { result: 'not-covered', reason: 'not-applicable-on-linux' }
104
+ : { result: 'not-covered', reason: 'dialog-probe-not-built' };
105
+ return { F1: { ...NOT_SAMPLED, at: null }, F2: { ...NOT_SAMPLED, at: null }, F4: { ...NOT_SAMPLED, at: null }, F3: { ...f3, at: null } };
106
+ }
107
+ /** Heartbeat every 60 s; samples when due. */
108
+ start(tickMs = 60_000) {
109
+ if (this.timer)
110
+ return;
111
+ this.first = setTimeout(() => { void this.tick(); }, 45_000);
112
+ this.first.unref?.();
113
+ this.timer = setInterval(() => { void this.tick(); }, tickMs);
114
+ this.timer.unref?.();
115
+ }
116
+ stop() {
117
+ if (this.first)
118
+ clearTimeout(this.first);
119
+ if (this.timer)
120
+ clearInterval(this.timer);
121
+ this.first = null;
122
+ this.timer = null;
123
+ }
124
+ async tick() {
125
+ if (this.sampling)
126
+ return;
127
+ this.sampling = true;
128
+ try {
129
+ this.lastTickAt = this.now();
130
+ if (!this.deps.enabled()) {
131
+ this.role = 'off';
132
+ return;
133
+ }
134
+ const claim = this.deps.store.claimWedgeMaintainer(this.deps.agentName);
135
+ if (claim === null) {
136
+ this.role = 'unknown';
137
+ this.maintainer = null;
138
+ return;
139
+ }
140
+ if (!claim.self) {
141
+ // Another agent on this login samples. Drop any window this agent held: it must not bridge a gap later.
142
+ if (this.role === 'maintainer') {
143
+ this.window = emptyWindow();
144
+ this.families = this.freshFamilies();
145
+ this.lastSample = null;
146
+ }
147
+ this.role = 'observer';
148
+ this.maintainer = claim.maintainer;
149
+ this.generation = null;
150
+ return;
151
+ }
152
+ if (this.role !== 'maintainer' || claim.tookOver || this.generation !== claim.generation) {
153
+ const host = this.deps.store.readWedgeState();
154
+ this.durable = host && validDurable(host.durable) ? host.durable : emptyDurable();
155
+ this.window = emptyWindow();
156
+ this.nextSampleAt = 0;
157
+ }
158
+ this.role = 'maintainer';
159
+ this.maintainer = claim.maintainer;
160
+ this.generation = claim.generation;
161
+ if (this.now() < this.nextSampleAt)
162
+ return;
163
+ await this.sample();
164
+ this.lastError = null;
165
+ }
166
+ catch (err) {
167
+ this.lastError = err instanceof Error ? err.message : String(err);
168
+ this.deps.log?.(`wedge tick failed: ${this.lastError}`);
169
+ }
170
+ finally {
171
+ this.sampling = false;
172
+ }
173
+ }
174
+ /**
175
+ * Every probe is bounded here as well as in the runner: a child stuck in the kernel
176
+ * never calls back, and a sample that never completes would stop the heartbeat. A
177
+ * probe that does not answer in time is a timed-out result: evidence, not missing.
178
+ */
179
+ async runProbe(name, timeoutMs) {
180
+ let started;
181
+ try {
182
+ started = this.deps.probe(name, timeoutMs);
183
+ }
184
+ catch {
185
+ // @silent-fallback-ok — a probe that could not even start reads as unreadable, never as healthy.
186
+ return { ok: false, stdout: null, ms: 0, timedOut: false, code: 'probe-error' };
187
+ }
188
+ const timedOut = { ok: false, stdout: null, ms: timeoutMs + WEDGE_PROBE_GUARD_MS, timedOut: true, code: 'no-exit' };
189
+ return bounded(started.catch(() => ({ ok: false, stdout: null, ms: 0, timedOut: false, code: 'probe-error' })), timeoutMs + WEDGE_PROBE_GUARD_MS, timedOut);
190
+ }
191
+ async sample() {
192
+ const platform = this.deps.platform;
193
+ const bootAt = await bounded(this.deps.readBootAt(), WEDGE_READ_BOUND_MS, null);
194
+ const now = this.now();
195
+ if (bootAt !== null && (this.durable.bootAt === null || bootAt > this.durable.bootAt + NEW_BOOT_SLACK_MS)) {
196
+ const wasKnown = this.durable.bootAt !== null;
197
+ // Any boot clears the forced-due mark and the per-boot readings.
198
+ this.durable = { ...this.durable, bootAt, forcedDueAt: null, forcedDueReason: null, f1PassedThisBoot: false, uninterruptibleCounts: [], singleFamilyRecorded: null, condition: null };
199
+ if (wasKnown) {
200
+ this.window = emptyWindow();
201
+ this.audit({ type: 'wedge-new-boot', bootAt });
202
+ }
203
+ }
204
+ const f1Name = platform === 'linux' ? 'userUnitProbe' : platform === 'wsl' ? 'interopProbe' : null;
205
+ const [ps, f1Probe, tasklist, lockState] = await Promise.all([
206
+ this.runProbe('processStates', PS_TIMEOUT_MS),
207
+ f1Name ? this.runProbe(f1Name, F1_TIMEOUT_MS) : Promise.resolve(null),
208
+ platform === 'wsl' ? this.runProbe('windowsTasks', F1_TIMEOUT_MS) : Promise.resolve(null),
209
+ platform === 'darwin' && this.deps.lockState ? bounded(this.deps.lockState(), WEDGE_READ_BOUND_MS, null) : Promise.resolve(null),
210
+ ]);
211
+ const at = this.now();
212
+ const f1 = readF1({ platform, probe: f1Probe, passedSinceBoot: this.durable.f1PassedThisBoot, lockState });
213
+ if (f1.passed)
214
+ this.durable.f1PassedThisBoot = true;
215
+ const f2 = readF2({ platform, ps, priorCounts: this.durable.uninterruptibleCounts, tasklist });
216
+ if (f2.count !== null)
217
+ this.durable.uninterruptibleCounts = [...this.durable.uninterruptibleCounts, f2.count].slice(-3);
218
+ const f4 = readF4({ load: this.deps.loadReading(), spawnSystemFailures30m: this.deps.spawnSystemFailures30m() });
219
+ const previous = this.lastSample;
220
+ this.families = { F1: { ...f1.reading, at }, F2: { ...f2.reading, at }, F4: { ...f4, at }, F3: this.families.F3 };
221
+ const sample = { at, results: { F1: f1.reading.result, F2: f2.reading.result, F4: f4.result } };
222
+ this.lastSample = sample;
223
+ this.samples += 1;
224
+ this.window = observe(this.window, sample);
225
+ if (!previous || CANDIDATE_FAMILIES.some((f) => previous.results[f] !== sample.results[f])) {
226
+ this.audit({ type: 'wedge-sample', results: sample.results, reasons: { F1: f1.reading.reason, F2: f2.reading.reason, F4: f4.reason } });
227
+ }
228
+ this.nextSampleAt = at + nextSampleDelay(sample);
229
+ const cond = this.durable.condition;
230
+ if (cond && cond.pair.split('+').some((f) => sample.results[f] === 'negative')) {
231
+ this.audit({ type: 'wedge-cleared', pair: cond.pair, openedAt: cond.openedAt, results: sample.results });
232
+ this.durable.condition = null;
233
+ }
234
+ await this.considerCandidate(at, bootAt);
235
+ this.considerSingleFamily(at);
236
+ this.publish();
237
+ }
238
+ prune(at) {
239
+ this.durable.judgeCalls = this.durable.judgeCalls.filter((t) => at - t < DAY);
240
+ this.durable.candidatesOpened = this.durable.candidatesOpened.filter((t) => at - t < 7 * DAY);
241
+ }
242
+ bringForward(at, reason) {
243
+ if (this.durable.forcedDueAt !== null)
244
+ return;
245
+ this.durable.forcedDueAt = this.deps.nextWindowRestartAt(at);
246
+ this.durable.forcedDueReason = reason;
247
+ }
248
+ async considerCandidate(at, bootAt) {
249
+ const candidate = currentCandidate(this.window);
250
+ if (!candidate)
251
+ return;
252
+ const machineId = this.deps.machineId();
253
+ const id = `${machineId}:${candidate.pair}:${candidate.startAt}`;
254
+ this.prune(at);
255
+ const recent = recentlyRestarted(at, bootAt);
256
+ if (!this.durable.episodes.some((e) => e.id === id)) {
257
+ this.durable.episodes = [...this.durable.episodes, { id, pair: candidate.pair, openedAt: at }].slice(-MAX_EPISODES);
258
+ const newCondition = this.durable.condition === null;
259
+ if (newCondition) {
260
+ this.durable.condition = { pair: candidate.pair, openedAt: at, judgedAt: null, proposal: null, verdictSource: null, notice: null, critical: false };
261
+ this.durable.candidatesOpened.push(at);
262
+ // Dry-run: a confirmed candidate reaches the operator rung at once and brings the restart forward.
263
+ this.bringForward(at, `two-family candidate ${candidate.pair}`);
264
+ }
265
+ this.audit({ type: 'wedge-candidate', episodeId: id, pair: candidate.pair, startAt: candidate.startAt, observations: candidate.observations, newCondition, recentlyRestarted: recent, forcedDueAt: this.durable.forcedDueAt });
266
+ }
267
+ const condition = this.durable.condition;
268
+ if (!condition || condition.judgedAt !== null)
269
+ return;
270
+ const run = this.window.pairs[candidate.pair];
271
+ if (!run || !isFresh(run, at))
272
+ return;
273
+ const critical = this.durable.candidatesOpened.filter((t) => at - t < DAY).length >= CANDIDATE_BREAKER_PER_DAY;
274
+ // Unknown boot time caps like a recent restart: a restart that may have just happened is not proposed again.
275
+ const capped = recent !== false;
276
+ let answer = null;
277
+ let fallbackReason = null;
278
+ if (!this.deps.judge)
279
+ fallbackReason = 'no-provider';
280
+ else if (this.durable.judgeCalls.length >= JUDGE_MAX_PER_DAY)
281
+ fallbackReason = 'judge-daily-cap';
282
+ else {
283
+ // Spend the call and close the condition to further calls, durably, BEFORE awaiting it:
284
+ // a crash or takeover mid-call must not ask the judge a second time.
285
+ this.durable.judgeCalls.push(at);
286
+ condition.judgedAt = at;
287
+ this.publish();
288
+ try {
289
+ const evidence = this.evidence(candidate.pair, candidate.observations, candidate.lastObsAt - candidate.startAt, at, bootAt, recent);
290
+ const raw = await bounded(this.deps.judge(evidence).then((a) => ({ answer: a }), () => 'error'), WEDGE_JUDGE_BOUND_MS, 'timeout');
291
+ if (raw === 'timeout')
292
+ fallbackReason = 'judge-timeout';
293
+ else if (raw === 'error')
294
+ fallbackReason = 'judge-error';
295
+ else {
296
+ answer = raw.answer;
297
+ if (!answer || !JUDGE_ACTIONS.includes(answer.action)) {
298
+ answer = null;
299
+ fallbackReason = 'unparseable';
300
+ }
301
+ }
302
+ }
303
+ catch {
304
+ // @silent-fallback-ok — model unavailable: no forced restart; the deterministic fallback is recorded instead.
305
+ fallbackReason = 'judge-error';
306
+ }
307
+ }
308
+ const proposal = answer?.action ?? null;
309
+ const plan = rungsFor(proposal, capped);
310
+ condition.judgedAt = at;
311
+ condition.proposal = proposal;
312
+ condition.verdictSource = answer ? 'judge' : 'fallback';
313
+ condition.critical = critical;
314
+ // Durable before the notice is awaited too: a crash mid-send must not send a second one.
315
+ condition.notice = 'pending';
316
+ this.publish();
317
+ condition.notice = await this.sendNotice(at, { episodeId: id, machineId, pair: candidate.pair, proposal, recent, critical });
318
+ this.lastVerdict = {
319
+ episodeId: id, at, pair: candidate.pair, source: condition.verdictSource, proposal, judgeReason: answer?.reason ?? null, fallbackReason,
320
+ cappedAtNotice: capped, cappedBecause: recent === true ? 'recently-restarted' : recent === null ? 'boot-time-unknown' : null,
321
+ bootTime: bootAt === null ? 'unknown' : bootAt, recentlyRestarted: recent, critical,
322
+ wouldRunRungs: plan.rungs, wouldRunIfStillUp: plan.conditional,
323
+ ranRungs: [], ranReason: 'dry-run: no rung exists in this build',
324
+ floor: { met: false, reasons: ['enrolment-not-built'] },
325
+ forcedDueAt: this.durable.forcedDueAt, notice: condition.notice,
326
+ };
327
+ this.audit({ type: 'wedge-verdict', ...this.lastVerdict });
328
+ }
329
+ /**
330
+ * Rung 7, real only when its own flag is on. One per condition (above), and at most
331
+ * one ordinary and one breaker notice per 24 hours across conditions, so a flapping
332
+ * machine cannot page the operator per flap.
333
+ */
334
+ async sendNotice(at, c) {
335
+ const settings = this.deps.settings();
336
+ if (!settings.dryRunNotice || !this.deps.raiseNotice)
337
+ return 'disabled';
338
+ const sent = this.durable.noticesSent;
339
+ sent.normal = sent.normal.filter((t) => at - t < DAY);
340
+ sent.critical = sent.critical.filter((t) => at - t < DAY);
341
+ if ((c.critical ? sent.critical : sent.normal).length > 0)
342
+ return 'rate-limited';
343
+ let outcome;
344
+ try {
345
+ outcome = await bounded(this.deps.raiseNotice({
346
+ episodeId: c.episodeId, machineId: c.machineId, pair: c.pair,
347
+ reasons: c.pair.split('+').map((f) => this.families[f]?.reason ?? 'unknown'),
348
+ proposal: c.proposal, recentlyRestarted: c.recent, critical: c.critical, forcedDueAt: this.durable.forcedDueAt,
349
+ }), WEDGE_NOTICE_BOUND_MS, 'failed');
350
+ }
351
+ catch {
352
+ // @silent-fallback-ok — recorded as failed in the verdict row; nothing half-sent is retried here.
353
+ outcome = 'failed';
354
+ }
355
+ if (outcome === 'sent')
356
+ (c.critical ? sent.critical : sent.normal).push(at);
357
+ return outcome;
358
+ }
359
+ considerSingleFamily(at) {
360
+ const sf = singleFamilyRun(this.window);
361
+ if (!sf)
362
+ return;
363
+ const key = `${sf.family}:${sf.run.startAt}`;
364
+ if (this.durable.singleFamilyRecorded === key)
365
+ return;
366
+ this.durable.singleFamilyRecorded = key;
367
+ this.bringForward(at, `${sf.family} positive for 2 hours`);
368
+ this.audit({ type: 'wedge-single-family', family: sf.family, startAt: sf.run.startAt, observations: sf.run.observations, forcedDueAt: this.durable.forcedDueAt });
369
+ }
370
+ evidence(pair, observations, spanMs, at, bootAt, recent) {
371
+ const families = {};
372
+ for (const f of ['F1', 'F2', 'F3', 'F4']) {
373
+ const r = this.families[f];
374
+ families[f] = { result: r.result, reason: r.reason, ageMinutes: r.at === null ? null : Math.round((at - r.at) / MIN) };
375
+ }
376
+ return {
377
+ pair, families, observations,
378
+ windowMinutes: Math.round(spanMs / MIN),
379
+ uptimeHours: bootAt === null ? null : Math.round(((at - bootAt) / 3_600_000) * 10) / 10,
380
+ recentlyRestarted: recent,
381
+ sessionsCount: this.deps.sessionsCount(),
382
+ blockers: ['enrolment-not-built'],
383
+ };
384
+ }
385
+ publish() {
386
+ if (this.role !== 'maintainer' || this.generation === null)
387
+ return;
388
+ const file = { durable: this.durable, snapshot: this.localSnapshot(), writtenAt: this.now(), agent: this.deps.agentName };
389
+ if (!this.deps.store.writeWedgeState(this.deps.agentName, this.generation, file)) {
390
+ this.deps.log?.('wedge state not published: this agent is no longer the maintainer');
391
+ }
392
+ }
393
+ localSnapshot() {
394
+ const at = this.now();
395
+ const candidate = currentCandidate(this.window);
396
+ const candidates24h = this.durable.candidatesOpened.filter((t) => at - t < DAY).length;
397
+ return {
398
+ platform: this.deps.platform,
399
+ lastSampleAt: this.lastSample?.at ?? null,
400
+ nextSampleAt: this.nextSampleAt || null,
401
+ samples: this.samples,
402
+ families: this.families,
403
+ window: {
404
+ pairs: Object.entries(this.window.pairs).map(([pair, run]) => ({ pair, ...run })),
405
+ singles: Object.entries(this.window.singles).map(([family, run]) => ({ family, ...run })),
406
+ },
407
+ candidate: candidate ? {
408
+ episodeId: `${this.deps.machineId()}:${candidate.pair}:${candidate.startAt}`, ...candidate,
409
+ fresh: isFresh(this.window.pairs[candidate.pair], at),
410
+ recentlyRestarted: recentlyRestarted(at, this.durable.bootAt),
411
+ } : null,
412
+ condition: this.durable.condition,
413
+ lastVerdict: this.lastVerdict,
414
+ forcedDueAt: this.durable.forcedDueAt,
415
+ forcedDueReason: this.durable.forcedDueReason,
416
+ bootAt: this.durable.bootAt,
417
+ f1PassedThisBoot: this.durable.f1PassedThisBoot,
418
+ brakes: {
419
+ candidates24h,
420
+ breaker: candidates24h >= CANDIDATE_BREAKER_PER_DAY ? 'critical' : 'normal',
421
+ judgeCalls24h: this.durable.judgeCalls.filter((t) => at - t < DAY).length,
422
+ judgeMaxPerDay: JUDGE_MAX_PER_DAY,
423
+ oneJudgeCallPerCondition: true,
424
+ noticesSent24h: { normal: this.durable.noticesSent.normal.filter((t) => at - t < DAY).length, critical: this.durable.noticesSent.critical.filter((t) => at - t < DAY).length },
425
+ },
426
+ episodes: this.durable.episodes.slice(-5),
427
+ };
428
+ }
429
+ /** `forcedDueAt` for the scheduled-restart planner: the next window is due early. */
430
+ forcedDueAt() {
431
+ if (this.role === 'maintainer')
432
+ return this.durable.forcedDueAt;
433
+ const host = this.deps.store.readWedgeState();
434
+ return host && validDurable(host.durable) ? host.durable.forcedDueAt : null;
435
+ }
436
+ status() {
437
+ const settings = this.deps.settings();
438
+ const base = {
439
+ enabled: this.deps.enabled(),
440
+ dryRun: settings.dryRun,
441
+ actuation: 'not-built',
442
+ canRestart: false,
443
+ canStopWork: false,
444
+ noticeEnabled: settings.dryRunNotice,
445
+ role: this.role,
446
+ maintainer: this.maintainer,
447
+ rules: {
448
+ windowMinutes: WEDGE_WINDOW_MS / MIN, minObservations: WEDGE_MIN_OBSERVATIONS, maxGapMinutes: WEDGE_MAX_GAP_MS / MIN,
449
+ freshMinutes: WEDGE_FRESH_MS / MIN, singleFamilyMinutes: WEDGE_SINGLE_FAMILY_MS / MIN, recentBootHours: WEDGE_RECENT_BOOT_MS / 3_600_000,
450
+ sampleEveryMinutes: WEDGE_SAMPLE_IDLE_MS / MIN, sampleEveryMinutesWhenPositive: WEDGE_SAMPLE_POSITIVE_MS / MIN,
451
+ },
452
+ limits: [
453
+ 'F1 is unread on macOS: the canary app is not shipped and the capture probe is not wired.',
454
+ 'F3 (stuck dialog) is not built; it never forms a candidate in any build.',
455
+ 'The kernel-zone reading for F2 on macOS is not wired.',
456
+ 'Enrolment is not built, so the maintainer is whichever gated agent on this login claims first.',
457
+ ],
458
+ auditPath: this.deps.logPath,
459
+ lastTickAt: this.lastTickAt,
460
+ lastError: this.lastError,
461
+ };
462
+ if (this.role === 'maintainer')
463
+ return { ...base, snapshotFrom: this.deps.agentName, snapshotAgeMs: 0, ...this.localSnapshot() };
464
+ // An observer shows the maintainer's published state, labelled with its source and age. Absent means unknown.
465
+ const host = this.role === 'observer' ? this.deps.store.readWedgeState() : null;
466
+ if (host && host.snapshot && typeof host.writtenAt === 'number') {
467
+ return { ...base, snapshotFrom: host.agent ?? null, snapshotAgeMs: Math.max(0, this.now() - host.writtenAt), ...host.snapshot };
468
+ }
469
+ return { ...base, snapshotFrom: null, snapshotAgeMs: null, lastSampleAt: null, families: null, candidate: null, condition: null, lastVerdict: null, forcedDueAt: null };
470
+ }
471
+ audit(row) {
472
+ try {
473
+ fs.mkdirSync(path.dirname(this.deps.logPath), { recursive: true });
474
+ try {
475
+ if (fs.statSync(this.deps.logPath).size > MAX_LOG_BYTES)
476
+ fs.renameSync(this.deps.logPath, `${this.deps.logPath}.1`);
477
+ }
478
+ catch { /* @silent-fallback-ok — no log yet */ }
479
+ fs.appendFileSync(this.deps.logPath, `${JSON.stringify({ ts: new Date(this.now()).toISOString(), agent: this.deps.agentName, machineId: this.deps.machineId(), feature: 'wedge', dryRun: true, ...row })}\n`);
480
+ }
481
+ catch (err) {
482
+ this.deps.log?.(`wedge audit write failed: ${err instanceof Error ? err.message : String(err)}`);
483
+ }
484
+ }
485
+ }
486
+ let active = null;
487
+ export function setActiveWedgeMonitor(m) { active = m; }
488
+ export function getActiveWedgeMonitor() { return active; }
489
+ //# sourceMappingURL=WedgeMonitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WedgeMonitor.js","sourceRoot":"","sources":["../../../src/monitoring/machineMaintenance/WedgeMonitor.ts"],"names":[],"mappings":"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"}
@@ -42,11 +42,57 @@ declare const READ_ONLY_CALLS: {
42
42
  readonly command: 'tmux';
43
43
  readonly args: readonly ['list-sessions', '-F', '#{session_name}'];
44
44
  };
45
+ readonly processStates: {
46
+ readonly command: 'ps';
47
+ readonly args: readonly ['-axo', 'stat='];
48
+ };
49
+ readonly userUnitProbe: {
50
+ readonly command: 'systemd-run';
51
+ readonly args: readonly ['--user', '--quiet', '--wait', '--collect', '/bin/true'];
52
+ };
53
+ readonly interopProbe: {
54
+ readonly command: 'cmd.exe';
55
+ readonly args: readonly ['/c', 'exit', '0'];
56
+ };
57
+ readonly windowsTasks: {
58
+ readonly command: 'tasklist.exe';
59
+ readonly args: readonly ['/NH', '/FO', 'CSV'];
60
+ };
45
61
  };
46
62
  export type ReadingName = keyof typeof READ_ONLY_CALLS;
47
63
  export type ReadOnlyRunner = (name: ReadingName) => Promise<string | null>;
64
+ /** One bounded run of a table entry: the output, how long it took, and how it ended. */
65
+ export interface ProbeResult {
66
+ ok: boolean;
67
+ stdout: string | null;
68
+ ms: number;
69
+ /** The hard timeout ended it. A completed result for the family that ran it, never "missing". */
70
+ timedOut: boolean;
71
+ /** The error code when it did not succeed: `ENOENT`, `EAGAIN`, an exit code, or null. */
72
+ code: string | number | null;
73
+ }
74
+ export type ProbeRunner = (name: ReadingName, timeoutMs: number) => Promise<ProbeResult>;
75
+ /** The process-spawning seam: execFile in production, a fake in tests. */
76
+ export type ExecLike = (command: string, args: string[], options: {
77
+ timeout: number;
78
+ killSignal: NodeJS.Signals;
79
+ maxBuffer: number;
80
+ env: NodeJS.ProcessEnv;
81
+ }, callback: (err: Error | null, stdout: string) => void) => unknown;
82
+ /**
83
+ * A child stuck in the kernel (uninterruptible sleep) ignores every signal, so
84
+ * execFile's own timeout never fires its callback. This guard settles the call
85
+ * anyway, a short grace after the timeout, as `timedOut` with code `no-exit`.
86
+ */
87
+ export declare const PROBE_EXIT_GRACE_MS = 500;
48
88
  /** `tmuxPath` replaces only the tmux executable, so a configured install is found. */
49
89
  export declare function makeReadOnlyRunner(tmuxPath?: string): ReadOnlyRunner;
90
+ /**
91
+ * The wedge sampler's runner: same table, its own timeout, the outcome kept, and a
92
+ * result guaranteed within the timeout plus a short grace even if the child never exits.
93
+ * At most one stuck child per probe name.
94
+ */
95
+ export declare function makeProbeRunner(runChild?: ExecLike): ProbeRunner;
50
96
  export interface MachineSignals {
51
97
  lastBootAt: number | null;
52
98
  /** Milliseconds since the last console input. Includes Instar's own driver input. */
@@ -1 +1 @@
1
- {"version":3,"file":"readings.d.ts","sourceRoot":"","sources":["../../../src/monitoring/machineMaintenance/readings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"readings.d.ts","sourceRoot":"","sources":["../../../src/monitoring/machineMaintenance/readings.ts"],"names":[],"mappings":"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"}