@cleocode/core 2026.6.14 → 2026.6.17
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/check/pr-gate.d.ts +6 -2
- package/dist/check/pr-gate.d.ts.map +1 -1
- package/dist/check/pr-gate.js +14 -32
- package/dist/check/pr-gate.js.map +1 -1
- package/dist/config/config-repair.d.ts +70 -0
- package/dist/config/config-repair.d.ts.map +1 -0
- package/dist/config/config-repair.js +248 -0
- package/dist/config/config-repair.js.map +1 -0
- package/dist/config/registry.d.ts.map +1 -1
- package/dist/config/registry.js +4 -4
- package/dist/config/registry.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -10
- package/dist/config.js.map +1 -1
- package/dist/docs/export-document.js +58 -16
- package/dist/docs/export-document.js.map +2 -2
- package/dist/gc/cleanup.d.ts +23 -8
- package/dist/gc/cleanup.d.ts.map +1 -1
- package/dist/gc/cleanup.js +287 -22
- package/dist/gc/cleanup.js.map +1 -1
- package/dist/gc/janitor.d.ts +149 -0
- package/dist/gc/janitor.d.ts.map +1 -0
- package/dist/gc/janitor.js +760 -0
- package/dist/gc/janitor.js.map +1 -0
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -1
- package/dist/llm/cli-ops.d.ts +31 -4
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +110 -26
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/credential-pool.d.ts +62 -0
- package/dist/llm/credential-pool.d.ts.map +1 -1
- package/dist/llm/credential-pool.js +161 -0
- package/dist/llm/credential-pool.js.map +1 -1
- package/dist/llm/cross-provider-selector.d.ts +254 -0
- package/dist/llm/cross-provider-selector.d.ts.map +1 -0
- package/dist/llm/cross-provider-selector.js +635 -0
- package/dist/llm/cross-provider-selector.js.map +1 -0
- package/dist/llm/index.d.ts +2 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/local-model-fit.d.ts +260 -0
- package/dist/llm/local-model-fit.d.ts.map +1 -0
- package/dist/llm/local-model-fit.js +563 -0
- package/dist/llm/local-model-fit.js.map +1 -0
- package/dist/llm/plugin-facade.js +883 -231
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/provider-registry/builtin/ollama.d.ts +18 -0
- package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/ollama.js +20 -2
- package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +45 -10
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/transports/codex-responses.d.ts +111 -88
- package/dist/llm/transports/codex-responses.d.ts.map +1 -1
- package/dist/llm/transports/codex-responses.js +456 -258
- package/dist/llm/transports/codex-responses.js.map +1 -1
- package/dist/release/index.d.ts +2 -2
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +1 -1
- package/dist/release/index.js.map +1 -1
- package/dist/release/reconcile.d.ts +97 -0
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +412 -5
- package/dist/release/reconcile.js.map +1 -1
- package/dist/resources/backend.d.ts +155 -0
- package/dist/resources/backend.d.ts.map +1 -0
- package/dist/resources/backend.js +23 -0
- package/dist/resources/backend.js.map +1 -0
- package/dist/resources/linux-backend.d.ts +167 -0
- package/dist/resources/linux-backend.d.ts.map +1 -0
- package/dist/resources/linux-backend.js +259 -0
- package/dist/resources/linux-backend.js.map +1 -0
- package/dist/resources/monitor.d.ts +230 -0
- package/dist/resources/monitor.d.ts.map +1 -0
- package/dist/resources/monitor.js +255 -0
- package/dist/resources/monitor.js.map +1 -0
- package/dist/resources/spawn-wrapper.d.ts +265 -0
- package/dist/resources/spawn-wrapper.d.ts.map +1 -0
- package/dist/resources/spawn-wrapper.js +304 -0
- package/dist/resources/spawn-wrapper.js.map +1 -0
- package/dist/selfimprove/budget.d.ts +11 -2
- package/dist/selfimprove/budget.d.ts.map +1 -1
- package/dist/selfimprove/budget.js +11 -2
- package/dist/selfimprove/budget.js.map +1 -1
- package/dist/selfimprove/fix-gen-context.d.ts +172 -0
- package/dist/selfimprove/fix-gen-context.d.ts.map +1 -0
- package/dist/selfimprove/fix-gen-context.js +218 -0
- package/dist/selfimprove/fix-gen-context.js.map +1 -0
- package/dist/selfimprove/fix-gen.d.ts +285 -0
- package/dist/selfimprove/fix-gen.d.ts.map +1 -0
- package/dist/selfimprove/fix-gen.js +346 -0
- package/dist/selfimprove/fix-gen.js.map +1 -0
- package/dist/selfimprove/op-source-map.d.ts +92 -0
- package/dist/selfimprove/op-source-map.d.ts.map +1 -0
- package/dist/selfimprove/op-source-map.js +187 -0
- package/dist/selfimprove/op-source-map.js.map +1 -0
- package/dist/selfimprove/probe-helper.d.ts +61 -0
- package/dist/selfimprove/probe-helper.d.ts.map +1 -0
- package/dist/selfimprove/probe-helper.js +64 -0
- package/dist/selfimprove/probe-helper.js.map +1 -0
- package/dist/selfimprove/run-loop.d.ts +44 -4
- package/dist/selfimprove/run-loop.d.ts.map +1 -1
- package/dist/selfimprove/run-loop.js +73 -6
- package/dist/selfimprove/run-loop.js.map +1 -1
- package/dist/selfimprove/scenarios/seeded-code-regression/golden.json +18 -0
- package/dist/selfimprove/scenarios/seeded-code-regression/scenario.json +12 -0
- package/dist/sentient/cross-project-hygiene.d.ts +11 -2
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +73 -10
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +7 -2
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
- package/dist/sentient/worktree-dispatch.js +8 -1
- package/dist/sentient/worktree-dispatch.js.map +1 -1
- package/dist/setup/index.d.ts +1 -0
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +1 -0
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/sections/models-roles.d.ts +32 -1
- package/dist/setup/sections/models-roles.d.ts.map +1 -1
- package/dist/setup/sections/models-roles.js +118 -19
- package/dist/setup/sections/models-roles.js.map +1 -1
- package/dist/setup/whoami-summary.d.ts +34 -0
- package/dist/setup/whoami-summary.d.ts.map +1 -0
- package/dist/setup/whoami-summary.js +106 -0
- package/dist/setup/whoami-summary.js.map +1 -0
- package/dist/spawn/branch-lock.d.ts.map +1 -1
- package/dist/spawn/branch-lock.js +7 -1
- package/dist/spawn/branch-lock.js.map +1 -1
- package/dist/store/attachment-repair.d.ts +110 -0
- package/dist/store/attachment-repair.d.ts.map +1 -0
- package/dist/store/attachment-repair.js +326 -0
- package/dist/store/attachment-repair.js.map +1 -0
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +24 -7
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/tasks/evidence.d.ts +34 -2
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +293 -35
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/verification/verify-tools.d.ts.map +1 -1
- package/dist/verification/verify-tools.js +5 -6
- package/dist/verification/verify-tools.js.map +1 -1
- package/package.json +22 -12
- package/templates/workflows/release-prepare.yml.tmpl +48 -2
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linux ResourceMonitor backend.
|
|
3
|
+
*
|
|
4
|
+
* Reads:
|
|
5
|
+
* - `/proc/pressure/memory` — global PSI (some + full)
|
|
6
|
+
* - `<cgroupSlicePath>/memory.pressure` — cleo.slice scoped PSI
|
|
7
|
+
* - `/proc/meminfo` — MemAvailable
|
|
8
|
+
* - `<walPath>` size stat — WAL growth signal (DHQ-050 starvation class)
|
|
9
|
+
* - `/proc/<pid>/smaps_rollup` — per-child RSS (SEPARATE low-frequency path)
|
|
10
|
+
*
|
|
11
|
+
* ## Read-count discipline (Amendment 1)
|
|
12
|
+
*
|
|
13
|
+
* `sample()` calls the injected reader at most:
|
|
14
|
+
* - 1× for `/proc/pressure/memory`
|
|
15
|
+
* - 1× for the slice `memory.pressure` (if configured)
|
|
16
|
+
* - 1× for `/proc/meminfo`
|
|
17
|
+
* - N× stat calls for N configured WAL paths
|
|
18
|
+
*
|
|
19
|
+
* smaps_rollup reads are on a SEPARATE `sweepChildRss()` method and are
|
|
20
|
+
* structurally impossible to reach from the `sample()` hot path.
|
|
21
|
+
*
|
|
22
|
+
* ## oomd threshold facts (Amendment 4)
|
|
23
|
+
*
|
|
24
|
+
* systemd-oomd on Fedora defaults to 80%/20s on user@1000.service.
|
|
25
|
+
* Our hold/backoff thresholds (some avg10 >10% / full avg10 >5%) sit far
|
|
26
|
+
* below that line, ensuring cleo always throttles before oomd kills.
|
|
27
|
+
*
|
|
28
|
+
* @module resources/linux-backend
|
|
29
|
+
* @task T11994
|
|
30
|
+
* @epic T11992
|
|
31
|
+
*/
|
|
32
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Parsing helpers (tested in isolation)
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
/**
|
|
37
|
+
* Parse a single PSI line.
|
|
38
|
+
*
|
|
39
|
+
* Format: `some avg10=0.42 avg60=0.31 avg300=0.20 total=1234567`
|
|
40
|
+
*
|
|
41
|
+
* Returns `null` when the line does not match the expected format.
|
|
42
|
+
*/
|
|
43
|
+
export function parsePressureLine(line) {
|
|
44
|
+
const avg10Match = /avg10=([\d.]+)/.exec(line);
|
|
45
|
+
const avg60Match = /avg60=([\d.]+)/.exec(line);
|
|
46
|
+
const avg300Match = /avg300=([\d.]+)/.exec(line);
|
|
47
|
+
const totalMatch = /total=(\d+)/.exec(line);
|
|
48
|
+
if (!avg10Match?.[1] || !avg60Match?.[1] || !avg300Match?.[1] || !totalMatch?.[1]) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
avg10: parseFloat(avg10Match[1]),
|
|
53
|
+
avg60: parseFloat(avg60Match[1]),
|
|
54
|
+
avg300: parseFloat(avg300Match[1]),
|
|
55
|
+
totalUs: parseInt(totalMatch[1], 10),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse a PSI file (two lines: `some ...` and `full ...`).
|
|
60
|
+
*
|
|
61
|
+
* Returns `null` when the content is unreadable / unparseable — callers
|
|
62
|
+
* treat this as "pressure interface absent" (degraded mode).
|
|
63
|
+
*/
|
|
64
|
+
export function parsePsiFile(content) {
|
|
65
|
+
const lines = content
|
|
66
|
+
.split('\n')
|
|
67
|
+
.map((l) => l.trim())
|
|
68
|
+
.filter(Boolean);
|
|
69
|
+
let some = null;
|
|
70
|
+
let full = null;
|
|
71
|
+
for (const line of lines) {
|
|
72
|
+
if (line.startsWith('some ')) {
|
|
73
|
+
some = parsePressureLine(line);
|
|
74
|
+
}
|
|
75
|
+
else if (line.startsWith('full ')) {
|
|
76
|
+
full = parsePressureLine(line);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (!some) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return { some, full };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse `MemAvailable` from `/proc/meminfo`.
|
|
86
|
+
*
|
|
87
|
+
* Format: `MemAvailable: 42233788 kB`
|
|
88
|
+
*
|
|
89
|
+
* Returns `null` when the field is absent (non-Linux / old kernel).
|
|
90
|
+
* Reuses the same parsing pattern as `packages/core/src/llm/local-model-fit.ts:269`.
|
|
91
|
+
*/
|
|
92
|
+
export function parseMemAvailable(content) {
|
|
93
|
+
for (const line of content.split('\n')) {
|
|
94
|
+
if (line.startsWith('MemAvailable:')) {
|
|
95
|
+
// Format: "MemAvailable: 42233788 kB"
|
|
96
|
+
const match = /MemAvailable:\s+(\d+)\s+kB/.exec(line);
|
|
97
|
+
if (match?.[1]) {
|
|
98
|
+
return parseInt(match[1], 10) * 1024;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parse a `/proc/<pid>/smaps_rollup` file for RSS and PSS.
|
|
106
|
+
*
|
|
107
|
+
* Relevant fields:
|
|
108
|
+
* `Rss: 12345 kB`
|
|
109
|
+
* `Pss: 9876 kB`
|
|
110
|
+
*
|
|
111
|
+
* Returns `null` when either field is absent.
|
|
112
|
+
*/
|
|
113
|
+
export function parseSmapsRollup(content) {
|
|
114
|
+
let rssKb = null;
|
|
115
|
+
let pssKb = null;
|
|
116
|
+
for (const line of content.split('\n')) {
|
|
117
|
+
if (line.startsWith('Rss:')) {
|
|
118
|
+
const m = /Rss:\s+(\d+)\s+kB/.exec(line);
|
|
119
|
+
if (m?.[1])
|
|
120
|
+
rssKb = parseInt(m[1], 10);
|
|
121
|
+
}
|
|
122
|
+
else if (line.startsWith('Pss:')) {
|
|
123
|
+
const m = /Pss:\s+(\d+)\s+kB/.exec(line);
|
|
124
|
+
if (m?.[1])
|
|
125
|
+
pssKb = parseInt(m[1], 10);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (rssKb === null || pssKb === null)
|
|
129
|
+
return null;
|
|
130
|
+
return { rssBytes: rssKb * 1024, pssBytes: pssKb * 1024 };
|
|
131
|
+
}
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
133
|
+
// Default injectable implementations
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
const defaultReadFile = (path, encoding) => readFile(path, encoding);
|
|
136
|
+
const defaultStat = async (path) => {
|
|
137
|
+
try {
|
|
138
|
+
const s = await stat(path);
|
|
139
|
+
return { size: s.size };
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
// Linux backend
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
/**
|
|
149
|
+
* Linux implementation of {@link ResourceBackend}.
|
|
150
|
+
*
|
|
151
|
+
* Uses injected `readFileFn` / `statFileFn` so unit tests can:
|
|
152
|
+
* 1. Fake file contents (threshold-crossing, degraded mode)
|
|
153
|
+
* 2. Count reads to assert the bounded-read contract (Amendment 1)
|
|
154
|
+
*/
|
|
155
|
+
export class LinuxResourceBackend {
|
|
156
|
+
globalPressurePath;
|
|
157
|
+
cgroupSlicePressurePath;
|
|
158
|
+
walPaths;
|
|
159
|
+
readFileFn;
|
|
160
|
+
statFileFn;
|
|
161
|
+
constructor(opts = {}) {
|
|
162
|
+
this.globalPressurePath = opts.globalPressurePath ?? '/proc/pressure/memory';
|
|
163
|
+
this.cgroupSlicePressurePath = opts.cgroupSlicePressurePath ?? null;
|
|
164
|
+
this.walPaths = opts.walPaths ?? [];
|
|
165
|
+
this.readFileFn = opts.readFileFn ?? defaultReadFile;
|
|
166
|
+
this.statFileFn = opts.statFileFn ?? defaultStat;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Take a bounded point-in-time resource sample.
|
|
170
|
+
*
|
|
171
|
+
* Read-count (bounded by Amendment 1):
|
|
172
|
+
* - 1 read: `/proc/pressure/memory`
|
|
173
|
+
* - 0–1 reads: slice `memory.pressure` (if configured)
|
|
174
|
+
* - 1 read: `/proc/meminfo`
|
|
175
|
+
* - N stat calls: one per WAL path in `walPaths`
|
|
176
|
+
*
|
|
177
|
+
* Never spawns a child process.
|
|
178
|
+
*/
|
|
179
|
+
async sample() {
|
|
180
|
+
const sampledAtMs = Date.now();
|
|
181
|
+
// Read 1: global PSI
|
|
182
|
+
const globalPressure = await this._readPsi(this.globalPressurePath);
|
|
183
|
+
const pressureAvailable = globalPressure !== null;
|
|
184
|
+
// Read 2 (optional): slice PSI
|
|
185
|
+
let slicePressure = null;
|
|
186
|
+
if (this.cgroupSlicePressurePath) {
|
|
187
|
+
slicePressure = await this._readPsi(this.cgroupSlicePressurePath);
|
|
188
|
+
}
|
|
189
|
+
// Read 3: MemAvailable
|
|
190
|
+
const memAvailableBytes = await this._readMemAvailable();
|
|
191
|
+
// Read N: WAL stat observations
|
|
192
|
+
const walObservations = await this._readWalObservations();
|
|
193
|
+
return {
|
|
194
|
+
sampledAtMs,
|
|
195
|
+
pressureAvailable,
|
|
196
|
+
memAvailableBytes,
|
|
197
|
+
globalPressure,
|
|
198
|
+
slicePressure,
|
|
199
|
+
walObservations,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Sweep per-child RSS via `/proc/<pid>/smaps_rollup`.
|
|
204
|
+
*
|
|
205
|
+
* **STRUCTURALLY SEPARATED from sample()** — smaps_rollup reads are
|
|
206
|
+
* ms-scale per multi-GB process and must never appear in the hot path.
|
|
207
|
+
* Call on a separate low-frequency cadence (e.g. every 60s or on
|
|
208
|
+
* backoff→hold state transition).
|
|
209
|
+
*
|
|
210
|
+
* @param pids - PIDs to sweep. Dead/unknown PIDs are silently skipped.
|
|
211
|
+
*/
|
|
212
|
+
async sweepChildRss(pids) {
|
|
213
|
+
const sampledAtMs = Date.now();
|
|
214
|
+
const entries = [];
|
|
215
|
+
for (const pid of pids) {
|
|
216
|
+
try {
|
|
217
|
+
const content = await this.readFileFn(`/proc/${pid}/smaps_rollup`, 'utf-8');
|
|
218
|
+
const parsed = parseSmapsRollup(content);
|
|
219
|
+
if (parsed) {
|
|
220
|
+
entries.push({ pid, ...parsed });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Dead or inaccessible PID — skip silently
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return { sampledAtMs, entries };
|
|
228
|
+
}
|
|
229
|
+
// -------------------------------------------------------------------------
|
|
230
|
+
// Private helpers
|
|
231
|
+
// -------------------------------------------------------------------------
|
|
232
|
+
async _readPsi(path) {
|
|
233
|
+
try {
|
|
234
|
+
const content = await this.readFileFn(path, 'utf-8');
|
|
235
|
+
return parsePsiFile(content);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async _readMemAvailable() {
|
|
242
|
+
try {
|
|
243
|
+
const content = await this.readFileFn('/proc/meminfo', 'utf-8');
|
|
244
|
+
return parseMemAvailable(content);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async _readWalObservations() {
|
|
251
|
+
const results = [];
|
|
252
|
+
for (const walPath of this.walPaths) {
|
|
253
|
+
const info = await this.statFileFn(walPath);
|
|
254
|
+
results.push({ walPath, sizeBytes: info?.size ?? null });
|
|
255
|
+
}
|
|
256
|
+
return results;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=linux-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-backend.js","sourceRoot":"","sources":["../../src/resources/linux-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA8BlD,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,IAAI,GAAwB,IAAI,CAAC;IACrC,IAAI,IAAI,GAAwB,IAAI,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACrC,wCAAwC;YACxC,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACf,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,KAAK,GAAkB,IAAI,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC;AAC5D,CAAC;AAoDD,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,MAAM,eAAe,GAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAEjF,MAAM,WAAW,GAAe,KAAK,EAAE,IAAI,EAAE,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IACd,kBAAkB,CAAS;IAC3B,uBAAuB,CAAgB;IACvC,QAAQ,CAAoB;IAC5B,UAAU,CAAa;IACvB,UAAU,CAAa;IAExC,YAAY,OAA4B,EAAE;QACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;QAC7E,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC;QACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,eAAe,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC;IACnD,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/B,qBAAqB;QACrB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpE,MAAM,iBAAiB,GAAG,cAAc,KAAK,IAAI,CAAC;QAElD,+BAA+B;QAC/B,IAAI,aAAa,GAAmB,IAAI,CAAC;QACzC,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACjC,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpE,CAAC;QAED,uBAAuB;QACvB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzD,gCAAgC;QAChC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE1D,OAAO;YACL,WAAW;YACX,iBAAiB;YACjB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,eAAe;SAChB,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,aAAa,CAAC,IAAuB;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,eAAe,EAAE,OAAO,CAAC,CAAC;gBAC5E,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2CAA2C;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,4EAA4E;IAC5E,kBAAkB;IAClB,4EAA4E;IAEpE,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAChE,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResourceMonitor — PSI + MemAvailable sensing, daemon-off capable.
|
|
3
|
+
*
|
|
4
|
+
* Two operational modes:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Point-in-time sample** (`ResourceMonitor.sample()`): used inside the
|
|
7
|
+
* governor acquire path when the daemon is off. Single call, bounded reads.
|
|
8
|
+
*
|
|
9
|
+
* 2. **Continuous loop** (`ResourceMonitor.startContinuous()`): used by the
|
|
10
|
+
* daemon/supervisor. Polls at `pollIntervalMs` and emits `ok` → `hold` →
|
|
11
|
+
* `backoff` state transitions with hysteresis.
|
|
12
|
+
*
|
|
13
|
+
* ## State machine
|
|
14
|
+
*
|
|
15
|
+
* ok ──── pressure > holdThreshold ──────→ hold
|
|
16
|
+
* hold ─── pressure < holdThreshold - hyst ─→ ok
|
|
17
|
+
* hold ─── pressure > backoffThreshold ─────→ backoff
|
|
18
|
+
* backoff ─ pressure < holdThreshold - hyst ─→ ok
|
|
19
|
+
*
|
|
20
|
+
* Default thresholds (far below systemd-oomd's Fedora 80%/20s kill line):
|
|
21
|
+
* - hold: some avg10 > 10% OR full avg10 > 5%
|
|
22
|
+
* - backoff: some avg10 > 20% OR full avg10 > 10%
|
|
23
|
+
* - hysteresis: 3 percentage points (prevents thrash on threshold edge)
|
|
24
|
+
*
|
|
25
|
+
* ## Degraded mode
|
|
26
|
+
*
|
|
27
|
+
* When the PSI interface is absent (non-Linux, locked-down container,
|
|
28
|
+
* unprivileged environment), the monitor falls back to availability-only
|
|
29
|
+
* sampling: `pressureAvailable = false`, `state = 'ok'` unless
|
|
30
|
+
* `memAvailableBytes` is below `headroomMb`.
|
|
31
|
+
*
|
|
32
|
+
* ## oomd facts (Amendment 4)
|
|
33
|
+
*
|
|
34
|
+
* systemd-oomd on Fedora defaults to 80%/20s on user@1000.service (NOT
|
|
35
|
+
* the 50%/20s figure cited in older research). Our hold/backoff thresholds
|
|
36
|
+
* sit far below that line — cleo always throttles before oomd kills.
|
|
37
|
+
*
|
|
38
|
+
* ## WAL growth signal (Amendment 3)
|
|
39
|
+
*
|
|
40
|
+
* The monitor accepts an optional watch on SQLite `-wal` sidecar file sizes.
|
|
41
|
+
* A size above `walWarnThresholdBytes` is surfaced in the sample and can
|
|
42
|
+
* drive governor decisions independently of memory pressure.
|
|
43
|
+
*
|
|
44
|
+
* @module resources/monitor
|
|
45
|
+
* @task T11994
|
|
46
|
+
* @epic T11992
|
|
47
|
+
*/
|
|
48
|
+
import { EventEmitter } from 'node:events';
|
|
49
|
+
import type { ResourceBackend, ResourceSample } from './backend.js';
|
|
50
|
+
/**
|
|
51
|
+
* Memory pressure state transitions emitted by the continuous loop.
|
|
52
|
+
*
|
|
53
|
+
* - `ok`: pressure below hold threshold — normal operation
|
|
54
|
+
* - `hold`: pressure above hold threshold — slow down, avoid new allocs
|
|
55
|
+
* - `backoff`: pressure above backoff threshold — actively shed load
|
|
56
|
+
*/
|
|
57
|
+
export type PressureState = 'ok' | 'hold' | 'backoff';
|
|
58
|
+
/**
|
|
59
|
+
* Emitted by {@link ResourceMonitor} when the pressure state changes.
|
|
60
|
+
*/
|
|
61
|
+
export interface StateTransition {
|
|
62
|
+
readonly from: PressureState;
|
|
63
|
+
readonly to: PressureState;
|
|
64
|
+
readonly sample: ResourceSample;
|
|
65
|
+
readonly reason: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Thresholds for the `some avg10` dimension (percentage points, 0–100).
|
|
69
|
+
*/
|
|
70
|
+
export interface SomePressureThresholds {
|
|
71
|
+
/** Enter `hold` state when `some avg10` exceeds this value. Default: 10. */
|
|
72
|
+
readonly holdSomeAvg10: number;
|
|
73
|
+
/** Enter `backoff` state when `some avg10` exceeds this value. Default: 20. */
|
|
74
|
+
readonly backoffSomeAvg10: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Thresholds for the `full avg10` dimension (percentage points, 0–100).
|
|
78
|
+
*/
|
|
79
|
+
export interface FullPressureThresholds {
|
|
80
|
+
/** Enter `hold` state when `full avg10` exceeds this value. Default: 5. */
|
|
81
|
+
readonly holdFullAvg10: number;
|
|
82
|
+
/** Enter `backoff` state when `full avg10` exceeds this value. Default: 10. */
|
|
83
|
+
readonly backoffFullAvg10: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Configuration for {@link ResourceMonitor}.
|
|
87
|
+
*
|
|
88
|
+
* All fields are optional — the defaults are calibrated to sit well below
|
|
89
|
+
* systemd-oomd's Fedora kill line of 80%/20s.
|
|
90
|
+
*/
|
|
91
|
+
export interface ResourceMonitorConfig {
|
|
92
|
+
/**
|
|
93
|
+
* `some avg10` pressure thresholds (percentage points, 0–100).
|
|
94
|
+
*
|
|
95
|
+
* Maps to the `resources.psi` config namespace (Amendment 5).
|
|
96
|
+
*/
|
|
97
|
+
readonly psi?: Partial<SomePressureThresholds & FullPressureThresholds>;
|
|
98
|
+
/**
|
|
99
|
+
* Hysteresis band (percentage points).
|
|
100
|
+
*
|
|
101
|
+
* The monitor does NOT drop back to `ok` until pressure falls below
|
|
102
|
+
* `(holdThreshold - hysteresisPoints)` to prevent state thrashing.
|
|
103
|
+
*
|
|
104
|
+
* @defaultValue 3
|
|
105
|
+
*/
|
|
106
|
+
readonly hysteresisPoints?: number;
|
|
107
|
+
/**
|
|
108
|
+
* Minimum free memory to consider the system healthy (bytes).
|
|
109
|
+
*
|
|
110
|
+
* Used in degraded mode (PSI absent) as the sole availability signal.
|
|
111
|
+
* Maps to the `resources.headroomMb` config namespace.
|
|
112
|
+
*
|
|
113
|
+
* @defaultValue 256 * 1024 * 1024 (256 MiB)
|
|
114
|
+
*/
|
|
115
|
+
readonly headroomBytes?: number;
|
|
116
|
+
/**
|
|
117
|
+
* WAL file size above which a warning observation is surfaced.
|
|
118
|
+
*
|
|
119
|
+
* @defaultValue 256 * 1024 * 1024 (256 MiB)
|
|
120
|
+
*/
|
|
121
|
+
readonly walWarnThresholdBytes?: number;
|
|
122
|
+
/**
|
|
123
|
+
* Poll interval for continuous mode (milliseconds).
|
|
124
|
+
*
|
|
125
|
+
* @defaultValue 1500
|
|
126
|
+
*/
|
|
127
|
+
readonly pollIntervalMs?: number;
|
|
128
|
+
/**
|
|
129
|
+
* Platform backend. Defaults to {@link LinuxResourceBackend}.
|
|
130
|
+
*
|
|
131
|
+
* Inject a different backend for macOS parity or test fakes.
|
|
132
|
+
*/
|
|
133
|
+
readonly backend?: ResourceBackend;
|
|
134
|
+
}
|
|
135
|
+
interface ResolvedThresholds {
|
|
136
|
+
readonly holdSomeAvg10: number;
|
|
137
|
+
readonly backoffSomeAvg10: number;
|
|
138
|
+
readonly holdFullAvg10: number;
|
|
139
|
+
readonly backoffFullAvg10: number;
|
|
140
|
+
readonly hysteresisPoints: number;
|
|
141
|
+
readonly headroomBytes: number;
|
|
142
|
+
readonly walWarnThresholdBytes: number;
|
|
143
|
+
readonly pollIntervalMs: number;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Evaluate the pressure state given a sample and resolved thresholds.
|
|
147
|
+
*
|
|
148
|
+
* In degraded mode (PSI absent), the state is `hold` only when free memory
|
|
149
|
+
* falls below `headroomBytes`.
|
|
150
|
+
*
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
153
|
+
export declare function evaluateState(sample: ResourceSample, thresholds: ResolvedThresholds, currentState: PressureState): {
|
|
154
|
+
state: PressureState;
|
|
155
|
+
reason: string;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* ResourceMonitor event map for typed EventEmitter usage.
|
|
159
|
+
*/
|
|
160
|
+
interface ResourceMonitorEvents {
|
|
161
|
+
transition: [transition: StateTransition];
|
|
162
|
+
sample: [sample: ResourceSample];
|
|
163
|
+
error: [err: Error];
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* ResourceMonitor — PSI + MemAvailable sensing, daemon-off capable.
|
|
167
|
+
*
|
|
168
|
+
* @example Point-in-time (daemon-off governor acquire):
|
|
169
|
+
* ```ts
|
|
170
|
+
* const monitor = new ResourceMonitor();
|
|
171
|
+
* const sample = await monitor.sample();
|
|
172
|
+
* if (sample.memAvailableBytes !== null && sample.memAvailableBytes < 256 * 1024 * 1024) {
|
|
173
|
+
* throw new Error('insufficient memory');
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* @example Continuous mode (daemon supervisor):
|
|
178
|
+
* ```ts
|
|
179
|
+
* const monitor = new ResourceMonitor({ pollIntervalMs: 1500 });
|
|
180
|
+
* monitor.on('transition', ({ from, to, reason }) => {
|
|
181
|
+
* logger.warn(`pressure: ${from} → ${to} (${reason})`);
|
|
182
|
+
* });
|
|
183
|
+
* const stop = monitor.startContinuous();
|
|
184
|
+
* // later:
|
|
185
|
+
* stop();
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
export declare class ResourceMonitor extends EventEmitter<ResourceMonitorEvents> {
|
|
189
|
+
private readonly thresholds;
|
|
190
|
+
private readonly backend;
|
|
191
|
+
private _state;
|
|
192
|
+
private _timer;
|
|
193
|
+
private _running;
|
|
194
|
+
constructor(cfg?: ResourceMonitorConfig);
|
|
195
|
+
/**
|
|
196
|
+
* Current pressure state (only meaningful after at least one sample).
|
|
197
|
+
*/
|
|
198
|
+
get state(): PressureState;
|
|
199
|
+
/**
|
|
200
|
+
* `true` while the continuous loop is running.
|
|
201
|
+
*/
|
|
202
|
+
get running(): boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Take a single point-in-time resource sample.
|
|
205
|
+
*
|
|
206
|
+
* Safe to call with the daemon off (no child processes, bounded reads).
|
|
207
|
+
* Does NOT update `this.state` — use {@link startContinuous} for that.
|
|
208
|
+
*/
|
|
209
|
+
sample(): Promise<ResourceSample>;
|
|
210
|
+
/**
|
|
211
|
+
* Start the continuous polling loop.
|
|
212
|
+
*
|
|
213
|
+
* Returns a `stop()` function. Calling `stop()` is idempotent.
|
|
214
|
+
*
|
|
215
|
+
* Emits:
|
|
216
|
+
* - `'sample'` on every poll (even if state did not change)
|
|
217
|
+
* - `'transition'` when `PressureState` changes
|
|
218
|
+
* - `'error'` if the backend throws (loop continues regardless)
|
|
219
|
+
*/
|
|
220
|
+
startContinuous(): () => void;
|
|
221
|
+
/**
|
|
222
|
+
* Stop the continuous polling loop. Idempotent.
|
|
223
|
+
*/
|
|
224
|
+
stop(): void;
|
|
225
|
+
private _scheduleNext;
|
|
226
|
+
private _tick;
|
|
227
|
+
private _stopLoop;
|
|
228
|
+
}
|
|
229
|
+
export {};
|
|
230
|
+
//# sourceMappingURL=monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/resources/monitor.ts"],"names":[],"mappings":"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"}
|