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.
- package/dist/commands/server.d.ts +6 -0
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +115 -9
- package/dist/commands/server.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +6 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +24 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/TopicProfileOrchestrator.d.ts +4 -0
- package/dist/core/TopicProfileOrchestrator.d.ts.map +1 -1
- package/dist/core/TopicProfileOrchestrator.js +14 -1
- package/dist/core/TopicProfileOrchestrator.js.map +1 -1
- package/dist/core/TopicSpawnBriefStore.d.ts +48 -0
- package/dist/core/TopicSpawnBriefStore.d.ts.map +1 -0
- package/dist/core/TopicSpawnBriefStore.js +107 -0
- package/dist/core/TopicSpawnBriefStore.js.map +1 -0
- package/dist/core/componentCategories.d.ts.map +1 -1
- package/dist/core/componentCategories.js +1 -0
- package/dist/core/componentCategories.js.map +1 -1
- package/dist/core/devGatedFeatures.js +1 -1
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/data/llmBenchCoverage.d.ts.map +1 -1
- package/dist/data/llmBenchCoverage.js +5 -0
- package/dist/data/llmBenchCoverage.js.map +1 -1
- package/dist/data/provenanceCoverage.d.ts +2 -0
- package/dist/data/provenanceCoverage.d.ts.map +1 -1
- package/dist/data/provenanceCoverage.js +15 -0
- package/dist/data/provenanceCoverage.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/monitoring/MachineWedgeJudge.d.ts +28 -0
- package/dist/monitoring/MachineWedgeJudge.d.ts.map +1 -0
- package/dist/monitoring/MachineWedgeJudge.js +114 -0
- package/dist/monitoring/MachineWedgeJudge.js.map +1 -0
- package/dist/monitoring/MachineWedgeNotice.d.ts +38 -0
- package/dist/monitoring/MachineWedgeNotice.d.ts.map +1 -0
- package/dist/monitoring/MachineWedgeNotice.js +71 -0
- package/dist/monitoring/MachineWedgeNotice.js.map +1 -0
- package/dist/monitoring/guardManifest.d.ts.map +1 -1
- package/dist/monitoring/guardManifest.js +1 -0
- package/dist/monitoring/guardManifest.js.map +1 -1
- package/dist/monitoring/machineMaintenance/DrainRehearsal.d.ts +6 -0
- package/dist/monitoring/machineMaintenance/DrainRehearsal.d.ts.map +1 -1
- package/dist/monitoring/machineMaintenance/DrainRehearsal.js +7 -2
- package/dist/monitoring/machineMaintenance/DrainRehearsal.js.map +1 -1
- package/dist/monitoring/machineMaintenance/HostMaintenanceStore.d.ts +36 -0
- package/dist/monitoring/machineMaintenance/HostMaintenanceStore.d.ts.map +1 -1
- package/dist/monitoring/machineMaintenance/HostMaintenanceStore.js +54 -0
- package/dist/monitoring/machineMaintenance/HostMaintenanceStore.js.map +1 -1
- package/dist/monitoring/machineMaintenance/WedgeMonitor.d.ts +191 -0
- package/dist/monitoring/machineMaintenance/WedgeMonitor.d.ts.map +1 -0
- package/dist/monitoring/machineMaintenance/WedgeMonitor.js +489 -0
- package/dist/monitoring/machineMaintenance/WedgeMonitor.js.map +1 -0
- package/dist/monitoring/machineMaintenance/readings.d.ts +46 -0
- package/dist/monitoring/machineMaintenance/readings.d.ts.map +1 -1
- package/dist/monitoring/machineMaintenance/readings.js +71 -8
- package/dist/monitoring/machineMaintenance/readings.js.map +1 -1
- package/dist/monitoring/machineMaintenance/wedgeEvidence.d.ts +73 -0
- package/dist/monitoring/machineMaintenance/wedgeEvidence.d.ts.map +1 -0
- package/dist/monitoring/machineMaintenance/wedgeEvidence.js +111 -0
- package/dist/monitoring/machineMaintenance/wedgeEvidence.js.map +1 -0
- package/dist/monitoring/machineMaintenance/wedgeWindow.d.ts +94 -0
- package/dist/monitoring/machineMaintenance/wedgeWindow.d.ts.map +1 -0
- package/dist/monitoring/machineMaintenance/wedgeWindow.js +126 -0
- package/dist/monitoring/machineMaintenance/wedgeWindow.js.map +1 -0
- package/dist/monitoring/selfaction/policies.d.ts.map +1 -1
- package/dist/monitoring/selfaction/policies.js +15 -0
- package/dist/monitoring/selfaction/policies.js.map +1 -1
- package/dist/native/instar-desktop-host +0 -0
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +2 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/CapabilityIndex.js +1 -1
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +3 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +56 -12
- package/dist/server/routes.js.map +1 -1
- package/dist/server/sessionSpawnTopicBinding.d.ts +26 -0
- package/dist/server/sessionSpawnTopicBinding.d.ts.map +1 -1
- package/dist/server/sessionSpawnTopicBinding.js +50 -0
- package/dist/server/sessionSpawnTopicBinding.js.map +1 -1
- package/dist/testing/selfActionRegistry.d.ts.map +1 -1
- package/dist/testing/selfActionRegistry.js +63 -0
- package/dist/testing/selfActionRegistry.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +63 -63
- package/src/data/llmBenchCoverage.ts +7 -0
- package/src/data/provenanceCoverage.ts +18 -0
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/src/scaffold/templates.ts +2 -1
- package/upgrades/1.3.1620.md +26 -0
- package/upgrades/1.3.1621.md +27 -0
- package/upgrades/eli16/profile-restart-keeps-spawn-brief.md +24 -0
- package/upgrades/side-effects/machine-wedge-dryrun.eli16.md +15 -0
- package/upgrades/side-effects/machine-wedge-dryrun.md +146 -0
- package/upgrades/side-effects/profile-restart-keeps-spawn-brief.md +91 -0
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
* Increment 1 writes only rehearsal records. `watchOnly` is the literal `true` in
|
|
10
10
|
* the type: no reader may treat this record as a live drain, and no path in this
|
|
11
11
|
* build can write one that is not watch-only.
|
|
12
|
+
*
|
|
13
|
+
* The wedge sampler (Part E, dry-run) adds two host files under the same lock: the
|
|
14
|
+
* maintainer heartbeat, so only one agent per login samples and calls the judge,
|
|
15
|
+
* and the sampler's durable state, so a takeover inherits its budgets and episodes.
|
|
16
|
+
* Enrolment is not built, so the maintainer is whichever gated agent claims first;
|
|
17
|
+
* a heartbeat older than 10 minutes lets another take over.
|
|
12
18
|
*/
|
|
13
19
|
import fs from 'node:fs';
|
|
14
20
|
import os from 'node:os';
|
|
@@ -20,6 +26,8 @@ export function defaultHostMaintenanceDir() {
|
|
|
20
26
|
return path.join(os.homedir(), '.instar', 'host-maintenance');
|
|
21
27
|
}
|
|
22
28
|
const AGENT_FILE = /^[A-Za-z0-9._-]{1,120}$/;
|
|
29
|
+
/** A maintainer heartbeat older than this lets a co-resident agent take over. */
|
|
30
|
+
export const WEDGE_MAINTAINER_STALE_MS = 10 * 60_000;
|
|
23
31
|
export class HostMaintenanceStore {
|
|
24
32
|
dir;
|
|
25
33
|
now;
|
|
@@ -129,6 +137,52 @@ export class HostMaintenanceStore {
|
|
|
129
137
|
}
|
|
130
138
|
return out;
|
|
131
139
|
}
|
|
140
|
+
get wedgeMaintainerPath() { return path.join(this.dir, 'wedge-maintainer.json'); }
|
|
141
|
+
get wedgeStatePath() { return path.join(this.dir, 'wedge-state.json'); }
|
|
142
|
+
/**
|
|
143
|
+
* The wedge maintainer heartbeat. Holds or renews the role for `agent`, or takes it
|
|
144
|
+
* over from a heartbeat older than 10 minutes. Null when the lock cannot be taken,
|
|
145
|
+
* which the caller treats as "not the maintainer this tick".
|
|
146
|
+
*/
|
|
147
|
+
claimWedgeMaintainer(agent) {
|
|
148
|
+
if (!AGENT_FILE.test(agent))
|
|
149
|
+
return null;
|
|
150
|
+
return this.withLock(() => {
|
|
151
|
+
const now = this.now();
|
|
152
|
+
const current = this.readJsonFile(this.wedgeMaintainerPath);
|
|
153
|
+
const valid = current && typeof current.agent === 'string' && Number.isFinite(current.heartbeatAt) && Number.isFinite(current.generation);
|
|
154
|
+
if (valid && current.agent !== agent && now - current.heartbeatAt <= WEDGE_MAINTAINER_STALE_MS) {
|
|
155
|
+
return { self: false, maintainer: current.agent, heartbeatAt: current.heartbeatAt };
|
|
156
|
+
}
|
|
157
|
+
const tookOver = !valid || current.agent !== agent;
|
|
158
|
+
const generation = valid ? (tookOver ? current.generation + 1 : current.generation) : 1;
|
|
159
|
+
atomicWriteFileSync(this.wedgeMaintainerPath, JSON.stringify({ agent, heartbeatAt: now, generation }), { mode: 0o644, operation: 'HostMaintenanceStore.claimWedgeMaintainer' });
|
|
160
|
+
return { self: true, maintainer: agent, generation, tookOver };
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/** The maintainer's last published wedge state. Any agent, no lock. */
|
|
164
|
+
readWedgeState() {
|
|
165
|
+
return this.readJsonFile(this.wedgeStatePath);
|
|
166
|
+
}
|
|
167
|
+
/** Written only by the current maintainer generation; refused otherwise. */
|
|
168
|
+
writeWedgeState(agent, generation, state) {
|
|
169
|
+
return this.withLock(() => {
|
|
170
|
+
const current = this.readJsonFile(this.wedgeMaintainerPath);
|
|
171
|
+
if (!current || current.agent !== agent || current.generation !== generation)
|
|
172
|
+
return false;
|
|
173
|
+
atomicWriteFileSync(this.wedgeStatePath, JSON.stringify(state), { mode: 0o644, operation: 'HostMaintenanceStore.writeWedgeState' });
|
|
174
|
+
return true;
|
|
175
|
+
}) === true;
|
|
176
|
+
}
|
|
177
|
+
readJsonFile(file) {
|
|
178
|
+
try {
|
|
179
|
+
return JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// @silent-fallback-ok — an absent or unreadable host file reads as no record.
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
132
186
|
writePlan(plan) {
|
|
133
187
|
atomicWriteFileSync(this.planPath, JSON.stringify(plan, null, 2), { mode: 0o644, operation: 'HostMaintenanceStore.writePlan' });
|
|
134
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HostMaintenanceStore.js","sourceRoot":"","sources":["../../../src/monitoring/machineMaintenance/HostMaintenanceStore.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"HostMaintenanceStore.js","sourceRoot":"","sources":["../../../src/monitoring/machineMaintenance/HostMaintenanceStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/H,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AA6CpD,MAAM,UAAU,yBAAyB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAE7C,iFAAiF;AACjF,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,MAAM,CAAC;AASrD,MAAM,OAAO,oBAAoB;IACd,GAAG,CAAS;IACZ,GAAG,CAAe;IAEnC,YAAY,IAAI,GAAyC,EAAE;QACzD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,yBAAyB,EAAE,CAAC;QACnD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IAClC,CAAC;IAED,IAAY,QAAQ,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAY,MAAM,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEpE,sFAAsF;IACtF,QAAQ;QACN,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAgB,CAAC;YAClF,IAAI,MAAM,EAAE,SAAS,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjK,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,+EAA+E;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,sGAAsG;IACtG,UAAU,CAAC,SAAiB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;IAED,2FAA2F;IAC3F,OAAO,CAAC,KAAmB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI;gBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAgB;gBACxB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,UAAU,EAAE;gBACvB,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,UAAU;gBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,iBAAiB,EAAE,KAAK,CAAC,SAAS;gBAClC,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,YAAY,EAAE,EAAE;gBAChB,gBAAgB,EAAE,EAAE;gBACpB,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM;gBACpC,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,GAAG,MAAM;gBACzE,eAAe,EAAE,IAAI;gBACrB,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;aAClB,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kFAAkF;IAClF,MAAM,CAAC,SAAiB,EAAE,UAAkB,EAAE,MAA0C;QACtF,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YACzF,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAa,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;YAClF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,GAAa;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,+BAA+B,EAAE,CAAC,CAAC;YAC/I,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,iFAAiF;YACjF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,8FAA8F;IAC9F,QAAQ,CAAC,SAAiB,EAAE,UAAkB;QAC5C,MAAM,GAAG,GAA6B,EAAE,CAAC;QACzC,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,GAAG,CAAC;QAAC,CAAC;QAClE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACtC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAa,CAAC;gBAC3F,IAAI,GAAG,EAAE,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU;oBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;YAC/G,CAAC;YAAC,MAAM,CAAC,CAAC,8DAA8D,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAY,mBAAmB,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAClG,IAAY,cAAc,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAExF;;;;OAIG;IACH,oBAAoB,CAAC,KAAa;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAwB,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnF,MAAM,KAAK,GAAG,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC1I,IAAI,KAAK,IAAI,OAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,GAAG,OAAQ,CAAC,WAAW,IAAI,yBAAyB,EAAE,CAAC;gBACjG,OAAO,EAAE,IAAI,EAAE,KAAc,EAAE,UAAU,EAAE,OAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,OAAQ,CAAC,WAAW,EAAE,CAAC;YACjG,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,OAAQ,CAAC,KAAK,KAAK,KAAK,CAAC;YACpD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,OAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,2CAA2C,EAAE,CAAC,CAAC;YAChL,OAAO,EAAE,IAAI,EAAE,IAAa,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAI,IAAI,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC;IAED,4EAA4E;IAC5E,eAAe,CAAC,KAAa,EAAE,UAAkB,EAAE,KAAc;QAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAwB,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YAC3F,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,sCAAsC,EAAE,CAAC,CAAC;YACpI,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,KAAK,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAAI,IAAY;QAClC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAM,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,8EAA8E;YAC9E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,IAAiB;QACjC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC,CAAC;IAClI,CAAC;IAEO,QAAQ,CAAI,EAAW;QAC7B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,OAAO,CAAC;QACzC,mFAAmF;QACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;QAClC,SAAS,CAAC;YACR,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9F,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;gBACb,IAAI,CAAC;oBAAC,OAAO,EAAE,EAAE,CAAC;gBAAC,CAAC;wBAAS,CAAC;oBAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,uCAAuC,CAAC,CAAC;gBAAC,CAAC;YAC5G,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzC,IAAI,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAAE,SAAS;YAC5D,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,191 @@
|
|
|
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 type { HostMaintenanceStore } from './HostMaintenanceStore.js';
|
|
24
|
+
import type { ProbeRunner } from './readings.js';
|
|
25
|
+
import { type LoadReading, type WedgePlatform } from './wedgeEvidence.js';
|
|
26
|
+
import { type JudgeAction } from './wedgeWindow.js';
|
|
27
|
+
export declare const JUDGE_MAX_PER_DAY = 6;
|
|
28
|
+
export declare const CANDIDATE_BREAKER_PER_DAY = 3;
|
|
29
|
+
export interface WedgeSettings {
|
|
30
|
+
/** `machineMaintenance.wedgeRestart.dryRun`. Default true. Nothing acts either way in this build. */
|
|
31
|
+
dryRun: boolean;
|
|
32
|
+
/** `machineMaintenance.wedgeRestart.dryRunNotice`. Default false: rung 7's real notice. */
|
|
33
|
+
dryRunNotice: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare function normalizeWedgeSettings(raw: unknown): WedgeSettings;
|
|
36
|
+
/** What the judge sees: structured evidence only. Never window titles, dialog text or command output. */
|
|
37
|
+
export interface WedgeJudgeEvidence {
|
|
38
|
+
pair: string;
|
|
39
|
+
families: Record<string, {
|
|
40
|
+
result: string;
|
|
41
|
+
reason: string;
|
|
42
|
+
ageMinutes: number | null;
|
|
43
|
+
}>;
|
|
44
|
+
windowMinutes: number;
|
|
45
|
+
observations: number;
|
|
46
|
+
uptimeHours: number | null;
|
|
47
|
+
recentlyRestarted: boolean | null;
|
|
48
|
+
sessionsCount: number | null;
|
|
49
|
+
blockers: string[];
|
|
50
|
+
}
|
|
51
|
+
export type JudgeAnswer = {
|
|
52
|
+
action: JudgeAction;
|
|
53
|
+
reason: string;
|
|
54
|
+
} | null;
|
|
55
|
+
export interface WedgeNoticeInput {
|
|
56
|
+
episodeId: string;
|
|
57
|
+
machineId: string;
|
|
58
|
+
pair: string;
|
|
59
|
+
reasons: string[];
|
|
60
|
+
proposal: JudgeAction | null;
|
|
61
|
+
recentlyRestarted: boolean | null;
|
|
62
|
+
critical: boolean;
|
|
63
|
+
forcedDueAt: number | null;
|
|
64
|
+
}
|
|
65
|
+
export type WedgeNoticeOutcome = 'sent' | 'held-by-governor' | 'no-channel' | 'failed' | 'duplicate';
|
|
66
|
+
export interface WedgeMonitorDeps {
|
|
67
|
+
agentName: string;
|
|
68
|
+
machineId: () => string;
|
|
69
|
+
platform: WedgePlatform;
|
|
70
|
+
logPath: string;
|
|
71
|
+
store: HostMaintenanceStore;
|
|
72
|
+
/** The feature gate, read live. */
|
|
73
|
+
enabled: () => boolean;
|
|
74
|
+
settings: () => WedgeSettings;
|
|
75
|
+
probe: ProbeRunner;
|
|
76
|
+
readBootAt: () => Promise<number | null>;
|
|
77
|
+
/** The honest lock reading on macOS; null where it is not read. */
|
|
78
|
+
lockState?: () => Promise<string | null>;
|
|
79
|
+
loadReading: () => LoadReading | null;
|
|
80
|
+
/** Session spawns that failed for system reasons in the last 30 minutes; null when not counted. */
|
|
81
|
+
spawnSystemFailures30m: () => number | null;
|
|
82
|
+
sessionsCount: () => number | null;
|
|
83
|
+
/** The T-0 of the next restart window after `now`. */
|
|
84
|
+
nextWindowRestartAt: (now: number) => number;
|
|
85
|
+
/** The judge (bounded, attributed, provenance-enrolled by the caller). Null: no provider here. */
|
|
86
|
+
judge: ((evidence: WedgeJudgeEvidence) => Promise<JudgeAnswer>) | null;
|
|
87
|
+
/** The dry-run operator notice. Called only when its flag is on. */
|
|
88
|
+
raiseNotice: ((input: WedgeNoticeInput) => Promise<WedgeNoticeOutcome>) | null;
|
|
89
|
+
now?: () => number;
|
|
90
|
+
log?: (line: string) => void;
|
|
91
|
+
}
|
|
92
|
+
interface EpisodeRecord {
|
|
93
|
+
id: string;
|
|
94
|
+
pair: string;
|
|
95
|
+
openedAt: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* One wedge condition: opened by the first candidate after the evidence was last
|
|
99
|
+
* clear, closed only by a real negative observation of one of its families or by a
|
|
100
|
+
* new boot. A server restart or a maintainer takeover starts a fresh window and so
|
|
101
|
+
* a fresh episode, but it is the SAME condition: no second judge call, no second
|
|
102
|
+
* notice. That is what keeps the notice count flat under sustained pressure.
|
|
103
|
+
*/
|
|
104
|
+
interface WedgeCondition {
|
|
105
|
+
pair: string;
|
|
106
|
+
openedAt: number;
|
|
107
|
+
judgedAt: number | null;
|
|
108
|
+
proposal: JudgeAction | null;
|
|
109
|
+
verdictSource: 'judge' | 'fallback' | null;
|
|
110
|
+
notice: WedgeNoticeOutcome | 'disabled' | 'rate-limited' | 'pending' | null;
|
|
111
|
+
critical: boolean;
|
|
112
|
+
}
|
|
113
|
+
/** The sampler's durable state, kept in the host store so a takeover inherits it. */
|
|
114
|
+
export interface WedgeDurable {
|
|
115
|
+
version: 1;
|
|
116
|
+
bootAt: number | null;
|
|
117
|
+
forcedDueAt: number | null;
|
|
118
|
+
forcedDueReason: string | null;
|
|
119
|
+
f1PassedThisBoot: boolean;
|
|
120
|
+
uninterruptibleCounts: number[];
|
|
121
|
+
judgeCalls: number[];
|
|
122
|
+
/** When each condition opened (7 days kept). Three in 24 h trips the breaker: flapping. */
|
|
123
|
+
candidatesOpened: number[];
|
|
124
|
+
episodes: EpisodeRecord[];
|
|
125
|
+
condition: WedgeCondition | null;
|
|
126
|
+
noticesSent: {
|
|
127
|
+
normal: number[];
|
|
128
|
+
critical: number[];
|
|
129
|
+
};
|
|
130
|
+
singleFamilyRecorded: string | null;
|
|
131
|
+
}
|
|
132
|
+
/** Bounds on everything a sample awaits, so a sample always completes and `sampling` resets. */
|
|
133
|
+
export declare const WEDGE_PROBE_GUARD_MS = 2000;
|
|
134
|
+
export declare const WEDGE_READ_BOUND_MS = 10000;
|
|
135
|
+
export declare const WEDGE_JUDGE_BOUND_MS = 120000;
|
|
136
|
+
export declare const WEDGE_NOTICE_BOUND_MS = 60000;
|
|
137
|
+
/** Settles with `fallback` if `p` has not settled within `ms`. Never rejects. */
|
|
138
|
+
export declare function bounded<T>(p: Promise<T>, ms: number, fallback: T): Promise<T>;
|
|
139
|
+
export declare class WedgeMonitor {
|
|
140
|
+
private readonly deps;
|
|
141
|
+
private readonly now;
|
|
142
|
+
private timer;
|
|
143
|
+
private first;
|
|
144
|
+
private sampling;
|
|
145
|
+
private role;
|
|
146
|
+
private maintainer;
|
|
147
|
+
private generation;
|
|
148
|
+
private durable;
|
|
149
|
+
private window;
|
|
150
|
+
private families;
|
|
151
|
+
private lastSample;
|
|
152
|
+
private nextSampleAt;
|
|
153
|
+
private lastVerdict;
|
|
154
|
+
private samples;
|
|
155
|
+
private lastError;
|
|
156
|
+
private lastTickAt;
|
|
157
|
+
constructor(deps: WedgeMonitorDeps);
|
|
158
|
+
private freshFamilies;
|
|
159
|
+
/** Heartbeat every 60 s; samples when due. */
|
|
160
|
+
start(tickMs?: number): void;
|
|
161
|
+
stop(): void;
|
|
162
|
+
tick(): Promise<void>;
|
|
163
|
+
/**
|
|
164
|
+
* Every probe is bounded here as well as in the runner: a child stuck in the kernel
|
|
165
|
+
* never calls back, and a sample that never completes would stop the heartbeat. A
|
|
166
|
+
* probe that does not answer in time is a timed-out result: evidence, not missing.
|
|
167
|
+
*/
|
|
168
|
+
private runProbe;
|
|
169
|
+
private sample;
|
|
170
|
+
private prune;
|
|
171
|
+
private bringForward;
|
|
172
|
+
private considerCandidate;
|
|
173
|
+
/**
|
|
174
|
+
* Rung 7, real only when its own flag is on. One per condition (above), and at most
|
|
175
|
+
* one ordinary and one breaker notice per 24 hours across conditions, so a flapping
|
|
176
|
+
* machine cannot page the operator per flap.
|
|
177
|
+
*/
|
|
178
|
+
private sendNotice;
|
|
179
|
+
private considerSingleFamily;
|
|
180
|
+
private evidence;
|
|
181
|
+
private publish;
|
|
182
|
+
private localSnapshot;
|
|
183
|
+
/** `forcedDueAt` for the scheduled-restart planner: the next window is due early. */
|
|
184
|
+
forcedDueAt(): number | null;
|
|
185
|
+
status(): Record<string, unknown>;
|
|
186
|
+
private audit;
|
|
187
|
+
}
|
|
188
|
+
export declare function setActiveWedgeMonitor(m: WedgeMonitor | null): void;
|
|
189
|
+
export declare function getActiveWedgeMonitor(): WedgeMonitor | null;
|
|
190
|
+
export {};
|
|
191
|
+
//# sourceMappingURL=WedgeMonitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WedgeMonitor.d.ts","sourceRoot":"","sources":["../../../src/monitoring/machineMaintenance/WedgeMonitor.ts"],"names":[],"mappings":"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"}
|