next-observer 0.3.31 → 0.3.33
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/README.md +11 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +120 -21
- package/dist/cli.js.map +1 -1
- package/dist/collector/budget.d.ts +28 -0
- package/dist/collector/budget.js +41 -0
- package/dist/collector/budget.js.map +1 -0
- package/dist/collector/chat-history.js +1 -1
- package/dist/collector/chat-history.js.map +1 -1
- package/dist/collector/chat.d.ts +10 -0
- package/dist/collector/server.d.ts +3 -0
- package/dist/collector/server.js +10 -2
- package/dist/collector/server.js.map +1 -1
- package/dist/ui/assets/index-t9GRyZmU.js +20 -0
- package/dist/ui/index.html +1 -1
- package/package.json +1 -1
- package/dist/ui/assets/index-BfLmeTpK.js +0 -20
package/README.md
CHANGED
|
@@ -156,7 +156,11 @@ export default [
|
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
Tools: `get_services`, `get_operation_stats`, `compare_versions`, `get_errors`, `search_traces`, `get_trace`.
|
|
159
|
-
`next-observer` validates the file and lists the loaded specialists on start.
|
|
159
|
+
`next-observer` validates the file and lists the loaded specialists on start. It also watches the app root: create or
|
|
160
|
+
change `observe.agents.*` (or `observe.checks.*`, below) while it runs and it reloads the file — no restart, so the
|
|
161
|
+
telemetry you already have stays. A file that does not load keeps what was running, with a line saying why. Only that
|
|
162
|
+
one file is reloaded (not modules it imports); reloaded agents start new chat conversations, reloaded checks start
|
|
163
|
+
with a fresh history.
|
|
160
164
|
|
|
161
165
|
## Scheduled checks
|
|
162
166
|
|
|
@@ -211,12 +215,18 @@ traffic: it appears in the chat, and the investigation starts from the trace of
|
|
|
211
215
|
- after an anomaly the same check — and, when nothing accepted the connection, the same address — is quiet for
|
|
212
216
|
5 minutes, whatever happens meanwhile; `OBSERVE_DETECTOR=off` switches this off too.
|
|
213
217
|
|
|
218
|
+
**The agents start at most 5 investigations on their own per 60 minutes** (`OBSERVE_AUTO_INVESTIGATIONS`), and at most
|
|
219
|
+
2 wait behind the running one: an investigation an hour after its anomaly is no use, and a real model left running
|
|
220
|
+
overnight must not spend a subscription. An anomaly over the budget still appears in the chat, marked as not
|
|
221
|
+
investigated. Questions you ask are not counted. `GET /api/chat` shows how much is used, per incident type.
|
|
222
|
+
|
|
214
223
|
## Configuration
|
|
215
224
|
|
|
216
225
|
| Variable | Default | |
|
|
217
226
|
|---|---|---|
|
|
218
227
|
| `OBSERVE_AI` | `mock` | `mock` \| `real` |
|
|
219
228
|
| `OBSERVE_DETECTOR` | on | `off` disables the anomaly detector |
|
|
229
|
+
| `OBSERVE_AUTO_INVESTIGATIONS` | `5/60m` | investigations the agents start on their own per period: `5`, `5/30m`, `5/2h`; `0` = only when asked |
|
|
220
230
|
| `OBSERVE_APP_URL` | `http://localhost:3000` | where the checks from `observe.checks.ts` are sent |
|
|
221
231
|
| `OBSERVE_MODEL_TIMEOUT_MS` | `90000` | how long one model call may take before it is started again |
|
|
222
232
|
| `OBSERVE_API_KEY` | — | require `x-api-key` on ingest (`/v1/traces`) |
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ChildProcess, SpawnOptions } from 'node:child_process';
|
|
2
2
|
import { init } from './init.js';
|
|
3
3
|
type AgentsModule = typeof import('./agents/index.js');
|
|
4
|
-
export declare const HELP = "Usage:\n next-observer init [--root <dir>] [--proxy]\n Connect a Next.js app to next-observe: install it, wrap next.config in withObserve(), add instrumentation.ts and\n instrumentation-client.ts, and an \"observe\" script. Safe to run again. --proxy also adds the runtime proxy route.\n\n next-observer dev [--root <dir>] [--port <n>] [-- <next dev args>]\n Start the collector and `next dev` for the app in <dir> (default: current directory).\n Example: next-observer dev --root apps/web -- -p 3100\n\n next-observer collector [--host <host>] [--port <n>] [--api-key <key>] [--ui-password <password>] [--demo]\n Start only the collector (e.g. on a server). Reads OBSERVE_HOST, OBSERVE_PORT, OBSERVE_API_KEY, OBSERVE_UI_PASSWORD.\n --api-key protects ingest (x-api-key); --ui-password protects the UI, API and chat (browser login).\n --demo preloads the workshop \"shop\" scenario (a regression in v2, 30% inventory errors, an N+1, an error new in v2).\n\nEnvironment: OBSERVE_ROOT, OBSERVE_PORT (default 4318), OBSERVE_HOST (default 127.0.0.1), OBSERVE_API_KEY,\n OBSERVE_AI (mock | real), OBSERVE_DETECTOR (off to disable the anomaly detector),\n OBSERVE_APP_URL (where the checks from observe.checks.ts are sent; default http://localhost:3000),\n OBSERVE_MODEL_TIMEOUT_MS (one model call; default 90000, a call that hangs is started again once)";
|
|
4
|
+
export declare const HELP = "Usage:\n next-observer init [--root <dir>] [--proxy]\n Connect a Next.js app to next-observe: install it, wrap next.config in withObserve(), add instrumentation.ts and\n instrumentation-client.ts, and an \"observe\" script. Safe to run again. --proxy also adds the runtime proxy route.\n\n next-observer dev [--root <dir>] [--port <n>] [-- <next dev args>]\n Start the collector and `next dev` for the app in <dir> (default: current directory).\n Example: next-observer dev --root apps/web -- -p 3100\n\n next-observer collector [--host <host>] [--port <n>] [--api-key <key>] [--ui-password <password>] [--demo]\n Start only the collector (e.g. on a server). Reads OBSERVE_HOST, OBSERVE_PORT, OBSERVE_API_KEY, OBSERVE_UI_PASSWORD.\n --api-key protects ingest (x-api-key); --ui-password protects the UI, API and chat (browser login).\n --demo preloads the workshop \"shop\" scenario (a regression in v2, 30% inventory errors, an N+1, an error new in v2).\n\nEnvironment: OBSERVE_ROOT, OBSERVE_PORT (default 4318), OBSERVE_HOST (default 127.0.0.1), OBSERVE_API_KEY,\n OBSERVE_AI (mock | real), OBSERVE_DETECTOR (off to disable the anomaly detector),\n OBSERVE_APP_URL (where the checks from observe.checks.ts are sent; default http://localhost:3000),\n OBSERVE_MODEL_TIMEOUT_MS (one model call; default 90000, a call that hangs is started again once),\n OBSERVE_AUTO_INVESTIGATIONS (investigations the agents start on their own: 5, 5/30m or 5/2h; default 5 per\n 60 min, 0 = only when asked)";
|
|
5
5
|
export declare class CliError extends Error {
|
|
6
6
|
}
|
|
7
7
|
export type Env = Record<string, string | undefined>;
|
package/dist/cli.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
1
|
+
import { existsSync, watch as watchDir } from 'node:fs';
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { dirname, join, resolve } from 'node:path';
|
|
4
4
|
import { pathToFileURL } from 'node:url';
|
|
@@ -10,6 +10,7 @@ import { CheckRunner } from './checks/runner.js';
|
|
|
10
10
|
import { CheckWatch } from './checks/watch.js';
|
|
11
11
|
import { validateChecks } from './checks/spec.js';
|
|
12
12
|
import { AnomalyDetector } from './debug/detector.js';
|
|
13
|
+
import { InvestigationBudget, parseBudget } from './collector/budget.js';
|
|
13
14
|
export const HELP = `Usage:
|
|
14
15
|
next-observer init [--root <dir>] [--proxy]
|
|
15
16
|
Connect a Next.js app to next-observe: install it, wrap next.config in withObserve(), add instrumentation.ts and
|
|
@@ -27,7 +28,9 @@ export const HELP = `Usage:
|
|
|
27
28
|
Environment: OBSERVE_ROOT, OBSERVE_PORT (default 4318), OBSERVE_HOST (default 127.0.0.1), OBSERVE_API_KEY,
|
|
28
29
|
OBSERVE_AI (mock | real), OBSERVE_DETECTOR (off to disable the anomaly detector),
|
|
29
30
|
OBSERVE_APP_URL (where the checks from observe.checks.ts are sent; default http://localhost:3000),
|
|
30
|
-
OBSERVE_MODEL_TIMEOUT_MS (one model call; default 90000, a call that hangs is started again once)
|
|
31
|
+
OBSERVE_MODEL_TIMEOUT_MS (one model call; default 90000, a call that hangs is started again once),
|
|
32
|
+
OBSERVE_AUTO_INVESTIGATIONS (investigations the agents start on their own: 5, 5/30m or 5/2h; default 5 per
|
|
33
|
+
60 min, 0 = only when asked)`;
|
|
31
34
|
export class CliError extends Error {
|
|
32
35
|
}
|
|
33
36
|
export function parseCliArgs(argv, env, cwd) {
|
|
@@ -87,8 +90,10 @@ function resolveNextBin(root) {
|
|
|
87
90
|
}
|
|
88
91
|
export const AGENTS_FILES = ['observe.agents.ts', 'observe.agents.mts', 'observe.agents.js', 'observe.agents.mjs'];
|
|
89
92
|
export const CHECKS_FILES = ['observe.checks.ts', 'observe.checks.mts', 'observe.checks.js', 'observe.checks.mjs'];
|
|
93
|
+
/** Bumped on every reload: the import URL must differ, or Node hands back the module it has cached. */
|
|
94
|
+
let reloads = 0;
|
|
90
95
|
/** The default export of the one file from `names` that exists in the app root; `{}` when there is none. */
|
|
91
|
-
async function importProjectFile(root, names) {
|
|
96
|
+
async function importProjectFile(root, names, fresh = false) {
|
|
92
97
|
const found = names.filter((name) => existsSync(join(root, name)));
|
|
93
98
|
if (found.length === 0)
|
|
94
99
|
return {};
|
|
@@ -104,7 +109,10 @@ async function importProjectFile(root, names) {
|
|
|
104
109
|
return emitWarning.call(process, warning, ...rest);
|
|
105
110
|
});
|
|
106
111
|
try {
|
|
107
|
-
|
|
112
|
+
// On a reload a fresh number goes in the URL: Node caches modules by URL (a file's mtime can repeat on coarse
|
|
113
|
+
// filesystems). Only this file is reloaded — modules it imports stay as first loaded.
|
|
114
|
+
const url = pathToFileURL(join(root, file)).href;
|
|
115
|
+
return { file, exported: (await import(fresh ? `${url}?v=${++reloads}` : url)).default };
|
|
108
116
|
}
|
|
109
117
|
catch (error) {
|
|
110
118
|
const e = error;
|
|
@@ -152,8 +160,8 @@ export function appUrl(env, nextArgs = []) {
|
|
|
152
160
|
return `http://${host}:${port && /^\d+$/.test(port) ? port : '3000'}`;
|
|
153
161
|
}
|
|
154
162
|
/** The checks from observe.checks.* in the app root (`export default [{ name, url, expect }]`), ready to run. */
|
|
155
|
-
async function loadChecks(root, env, nextArgs,
|
|
156
|
-
const { file, exported } = await importProjectFile(root, CHECKS_FILES);
|
|
163
|
+
async function loadChecks(root, env, nextArgs, watch, fresh = false) {
|
|
164
|
+
const { file, exported } = await importProjectFile(root, CHECKS_FILES, fresh);
|
|
157
165
|
if (!file)
|
|
158
166
|
return {};
|
|
159
167
|
let checks;
|
|
@@ -168,18 +176,16 @@ async function loadChecks(root, env, nextArgs, react) {
|
|
|
168
176
|
const own = checks.some((c) => c.url.startsWith('/'));
|
|
169
177
|
// Asked for only when a check needs it: a wrong OBSERVE_APP_URL nobody uses is not a reason to refuse to start.
|
|
170
178
|
const baseUrl = own ? appUrl(env, nextArgs) : '';
|
|
171
|
-
// The detector switched off means "no investigations on their own" — for failing checks too.
|
|
172
|
-
const watch = react ? new CheckWatch() : undefined;
|
|
173
179
|
const runner = new CheckRunner({ checks, baseUrl, onResult: (check, result, failures) => watch?.observe(check, result, failures, runner.urlOf(check)) });
|
|
174
180
|
const reaction = watch ? ` → agents investigate one that fails ${watch.options.failuresInRow} times in a row` : '';
|
|
175
|
-
return { runner,
|
|
181
|
+
return { runner, line: ` checks ${file}: ${checks.length} ${checks.length === 1 ? 'check' : 'checks'}${own ? ` against ${baseUrl}` : ''}${reaction}` };
|
|
176
182
|
}
|
|
177
183
|
/**
|
|
178
184
|
* The project's own specialists from observe.agents.* in the app root: `export default [defineSpecialist({…})]`.
|
|
179
185
|
* Same name as a built-in replaces it, a new name adds a specialist. Node ≥22.18 runs the .ts file as is (type stripping).
|
|
180
186
|
*/
|
|
181
|
-
async function loadProjectSpecialists(root, agents) {
|
|
182
|
-
const { file, exported } = await importProjectFile(root, AGENTS_FILES);
|
|
187
|
+
async function loadProjectSpecialists(root, agents, fresh = false) {
|
|
188
|
+
const { file, exported } = await importProjectFile(root, AGENTS_FILES, fresh);
|
|
183
189
|
if (!file)
|
|
184
190
|
return { specs: [] };
|
|
185
191
|
const list = Array.isArray(exported) ? exported : exported === undefined ? undefined : [exported];
|
|
@@ -206,25 +212,57 @@ function agentsLine(builtIn, file, project) {
|
|
|
206
212
|
const kept = builtIn.filter((s) => !project.some((p) => p.name === s.name)).map((s) => s.name);
|
|
207
213
|
return ` agents ${file}: ${own.join(', ')}${kept.length ? `; built-in: ${kept.join(', ')}` : ''}`;
|
|
208
214
|
}
|
|
209
|
-
async function loadChat(storage, root, deps) {
|
|
215
|
+
async function loadChat(storage, root, deps, fresh = false) {
|
|
210
216
|
const agents = await (deps.loadAgents ?? (() => import('./agents/index.js')))();
|
|
211
|
-
const project = await loadProjectSpecialists(root, agents);
|
|
217
|
+
const project = await loadProjectSpecialists(root, agents, fresh);
|
|
212
218
|
const specialists = agents.mergeSpecialists(agents.BUILT_IN_SPECIALISTS, project.specs);
|
|
213
219
|
try {
|
|
214
220
|
const chat = await agents.createChatHandler({ storage, env: deps.env, specialists });
|
|
215
221
|
const hint = chat.mode === 'mock' ? ' (OBSERVE_AI=real for a real model)' : '';
|
|
216
222
|
const line = ` chat ${chat.mode}${hint}`;
|
|
217
|
-
|
|
223
|
+
const own = project.file ? agentsLine(agents.BUILT_IN_SPECIALISTS, project.file, project.specs) : undefined;
|
|
224
|
+
return { chat, line: own ? `${line}\n${own}` : line, agents: own ?? ' agents built-in only (no observe.agents.*)' };
|
|
218
225
|
}
|
|
219
226
|
catch (error) {
|
|
220
227
|
throw new CliError(error.message);
|
|
221
228
|
}
|
|
222
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* Calls `onChange` when observe.checks.* or observe.agents.* in the app root is created, changed or removed — a moment
|
|
232
|
+
* after the last event, since editors save in several steps. People write these files while the observer runs.
|
|
233
|
+
*/
|
|
234
|
+
function watchProjectFiles(root, onChange) {
|
|
235
|
+
const timers = new Map();
|
|
236
|
+
let watcher;
|
|
237
|
+
try {
|
|
238
|
+
watcher = watchDir(root, (_event, name) => {
|
|
239
|
+
// Some platforms do not say which file changed: then both are looked at again.
|
|
240
|
+
const kinds = name == null ? ['checks', 'agents'] : CHECKS_FILES.includes(name) ? ['checks'] : AGENTS_FILES.includes(name) ? ['agents'] : [];
|
|
241
|
+
for (const kind of kinds) {
|
|
242
|
+
clearTimeout(timers.get(kind));
|
|
243
|
+
timers.set(kind, setTimeout(() => onChange(kind), 300));
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
return () => { }; // a root we cannot watch: the files are read at start, as before
|
|
249
|
+
}
|
|
250
|
+
watcher.on('error', () => { });
|
|
251
|
+
return () => {
|
|
252
|
+
watcher.close();
|
|
253
|
+
for (const timer of timers.values())
|
|
254
|
+
clearTimeout(timer);
|
|
255
|
+
};
|
|
256
|
+
}
|
|
223
257
|
async function start(args, deps) {
|
|
224
258
|
const storage = new MemoryStorage();
|
|
225
259
|
if (args.demo)
|
|
226
260
|
await seedDemo(storage);
|
|
227
|
-
const
|
|
261
|
+
const first = await loadChat(storage, args.root, deps);
|
|
262
|
+
const chatLine = first.line;
|
|
263
|
+
// The collector keeps this object; a reload of observe.agents.* swaps what is behind it.
|
|
264
|
+
let currentChat = first.chat;
|
|
265
|
+
const chat = currentChat && { mode: currentChat.mode, handle: (request, emit) => currentChat.handle(request, emit) };
|
|
228
266
|
const detector = deps.env.OBSERVE_DETECTOR === 'off' ? undefined : new AnomalyDetector();
|
|
229
267
|
const lines = [chatLine];
|
|
230
268
|
if (detector) {
|
|
@@ -233,22 +271,83 @@ async function start(args, deps) {
|
|
|
233
271
|
}
|
|
234
272
|
else
|
|
235
273
|
lines.push(' detector off (OBSERVE_DETECTOR=off)');
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
274
|
+
let budget;
|
|
275
|
+
try {
|
|
276
|
+
budget = new InvestigationBudget(parseBudget(deps.env.OBSERVE_AUTO_INVESTIGATIONS));
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
throw new CliError(error.message);
|
|
280
|
+
}
|
|
281
|
+
const { limit, periodMs } = budget.options;
|
|
282
|
+
lines.push(limit === 0 ? ' budget 0 — agents investigate only when asked (OBSERVE_AUTO_INVESTIGATIONS=0)' : ` budget ${limit} investigation${limit === 1 ? '' : 's'} on their own per ${periodMs / 60_000} min (OBSERVE_AUTO_INVESTIGATIONS)`);
|
|
283
|
+
// The detector switched off means "no investigations on their own" — for failing checks too. One watch for the whole
|
|
284
|
+
// run: a reload of observe.checks.* keeps its cooldowns.
|
|
285
|
+
const watch = detector ? new CheckWatch() : undefined;
|
|
286
|
+
let current = await loadChecks(args.root, deps.env, args.nextArgs, watch);
|
|
287
|
+
let previous;
|
|
288
|
+
if (current.line)
|
|
289
|
+
lines.push(current.line);
|
|
239
290
|
if (args.demo)
|
|
240
291
|
lines.push(' demo "shop" scenario: v1 → v2 regression, inventory errors, catalog N+1, an error new in v2 — live v2 traffic every 2 s');
|
|
241
292
|
const line = lines.join('\n');
|
|
242
293
|
try {
|
|
243
|
-
|
|
244
|
-
checks
|
|
294
|
+
// Read through `current` on every call, so the collector follows reloads of observe.checks.*.
|
|
295
|
+
const checks = {
|
|
296
|
+
list: () => current.runner?.list() ?? [],
|
|
297
|
+
// The previous runner's requests are still being exported for a few seconds after a reload — not traffic either.
|
|
298
|
+
isCheckTrace: (traceId) => Boolean(current.runner?.isCheckTrace(traceId) || previous?.isCheckTrace(traceId)),
|
|
299
|
+
get anomalies() {
|
|
300
|
+
return watch && current.runner ? () => watch.take() : undefined;
|
|
301
|
+
},
|
|
302
|
+
...(watch ? { rule: watch.rule } : {}),
|
|
303
|
+
};
|
|
304
|
+
const collector = await startCollector({ port: args.port, host: args.host, apiKey: args.apiKey, uiPassword: args.uiPassword, storage, chat, detector, budget, checks });
|
|
305
|
+
current.runner?.start();
|
|
245
306
|
const stopDemo = args.demo ? startLiveDemo({ storage, detector }) : undefined;
|
|
307
|
+
// Reloads, one at a time. A file that does not load keeps what was running — with a line saying why. Trade-offs,
|
|
308
|
+
// fine for a file people edit by hand: reloaded agents start new conversations; reloaded checks start a new runner
|
|
309
|
+
// (fresh history, the start-up grace again).
|
|
310
|
+
let stopped = false;
|
|
311
|
+
const reloadChecks = async () => {
|
|
312
|
+
try {
|
|
313
|
+
const next = await loadChecks(args.root, deps.env, args.nextArgs, watch, true);
|
|
314
|
+
if (stopped)
|
|
315
|
+
return; // finished loading after stop(): starting it now would leave a timer nobody stops
|
|
316
|
+
current.runner?.stop();
|
|
317
|
+
previous = current.runner ?? previous;
|
|
318
|
+
current = next;
|
|
319
|
+
next.runner?.start();
|
|
320
|
+
deps.log(next.line ? next.line.replace(' checks ', ' checks reloaded · ') : ' checks reloaded · none');
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
deps.log(` checks ${error.message} — the previous checks keep running`);
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
const reloadAgents = async () => {
|
|
327
|
+
try {
|
|
328
|
+
const next = await loadChat(storage, args.root, deps, true);
|
|
329
|
+
if (stopped)
|
|
330
|
+
return;
|
|
331
|
+
currentChat = next.chat;
|
|
332
|
+
deps.log(next.agents.replace(' agents ', ' agents reloaded · '));
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
deps.log(` agents ${error.message} — the previous specialists keep answering`);
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
// One queue for both files: two imports must not overlap (importProjectFile swaps process.emitWarning meanwhile).
|
|
339
|
+
let queue = Promise.resolve();
|
|
340
|
+
const stopWatching = watchProjectFiles(args.root, (kind) => {
|
|
341
|
+
queue = queue.then(kind === 'checks' ? reloadChecks : reloadAgents);
|
|
342
|
+
});
|
|
246
343
|
return {
|
|
247
344
|
collector,
|
|
248
345
|
chatLine: line,
|
|
249
346
|
stop: async () => {
|
|
347
|
+
stopped = true;
|
|
348
|
+
stopWatching();
|
|
250
349
|
stopDemo?.();
|
|
251
|
-
|
|
350
|
+
current.runner?.stop();
|
|
252
351
|
await collector.close();
|
|
253
352
|
},
|
|
254
353
|
};
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Anomaly } from '../debug/detector.js';
|
|
2
|
+
export interface BudgetLimit {
|
|
3
|
+
/** Investigations per period; 0 = the observer never starts one on its own. */
|
|
4
|
+
limit: number;
|
|
5
|
+
periodMs: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const DEFAULT_BUDGET: BudgetLimit;
|
|
8
|
+
/** Investigations waiting behind the running one; more would be stale by the time their turn comes. */
|
|
9
|
+
export declare const MAX_WAITING = 2;
|
|
10
|
+
export interface BudgetState extends BudgetLimit {
|
|
11
|
+
/** Started within the last period. */
|
|
12
|
+
used: number;
|
|
13
|
+
/** When the next one may start, if all are used now; null while there is room (or with a limit of 0: never). */
|
|
14
|
+
nextAtMs: number | null;
|
|
15
|
+
/** `used`, per incident type. */
|
|
16
|
+
byType: Partial<Record<Anomaly['type'], number>>;
|
|
17
|
+
}
|
|
18
|
+
export declare class InvestigationBudget {
|
|
19
|
+
private starts;
|
|
20
|
+
readonly options: BudgetLimit;
|
|
21
|
+
constructor(options?: BudgetLimit);
|
|
22
|
+
/** Takes one for an anomaly of this type; false when the period's budget is spent. */
|
|
23
|
+
take(type: Anomaly['type'], nowMs: number): boolean;
|
|
24
|
+
state(nowMs: number): BudgetState;
|
|
25
|
+
private prune;
|
|
26
|
+
}
|
|
27
|
+
/** OBSERVE_AUTO_INVESTIGATIONS: `5` (per 60 min), `5/30m`, `5/2h`, `0` (off). Unset → the default. */
|
|
28
|
+
export declare function parseBudget(value: string | undefined): BudgetLimit;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const DEFAULT_BUDGET = { limit: 5, periodMs: 60 * 60_000 };
|
|
2
|
+
/** Investigations waiting behind the running one; more would be stale by the time their turn comes. */
|
|
3
|
+
export const MAX_WAITING = 2;
|
|
4
|
+
export class InvestigationBudget {
|
|
5
|
+
starts = [];
|
|
6
|
+
options;
|
|
7
|
+
constructor(options = DEFAULT_BUDGET) {
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
/** Takes one for an anomaly of this type; false when the period's budget is spent. */
|
|
11
|
+
take(type, nowMs) {
|
|
12
|
+
this.prune(nowMs);
|
|
13
|
+
if (this.starts.length >= this.options.limit)
|
|
14
|
+
return false;
|
|
15
|
+
this.starts.push({ atMs: nowMs, type });
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
state(nowMs) {
|
|
19
|
+
this.prune(nowMs);
|
|
20
|
+
const byType = {};
|
|
21
|
+
for (const s of this.starts)
|
|
22
|
+
byType[s.type] = (byType[s.type] ?? 0) + 1;
|
|
23
|
+
const full = this.starts.length > 0 && this.starts.length >= this.options.limit;
|
|
24
|
+
return { ...this.options, used: this.starts.length, nextAtMs: full ? Math.min(...this.starts.map((s) => s.atMs)) + this.options.periodMs : null, byType };
|
|
25
|
+
}
|
|
26
|
+
// A clock set back (NTP, a laptop waking up) must not keep a slot taken for longer: a negative age frees it.
|
|
27
|
+
prune(nowMs) {
|
|
28
|
+
this.starts = this.starts.filter((s) => nowMs >= s.atMs && nowMs - s.atMs < this.options.periodMs);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** OBSERVE_AUTO_INVESTIGATIONS: `5` (per 60 min), `5/30m`, `5/2h`, `0` (off). Unset → the default. */
|
|
32
|
+
export function parseBudget(value) {
|
|
33
|
+
if (value === undefined || value.trim() === '')
|
|
34
|
+
return DEFAULT_BUDGET;
|
|
35
|
+
const match = /^(\d+)(?:\/(\d+)(m|h))?$/.exec(value.trim());
|
|
36
|
+
const periodMs = match?.[2] === undefined ? DEFAULT_BUDGET.periodMs : Number(match[2]) * (match[3] === 'h' ? 3_600_000 : 60_000);
|
|
37
|
+
if (!match || periodMs === 0)
|
|
38
|
+
throw new Error(`OBSERVE_AUTO_INVESTIGATIONS="${value}": expected a number per period, e.g. 5, 5/30m or 5/2h (0 turns them off)`);
|
|
39
|
+
return { limit: Number(match[1]), periodMs };
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/collector/budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const isEnd = (event) => event.type === 'report' || event.type === 'error' || event.type === 'stopped';
|
|
1
|
+
const isEnd = (event) => event.type === 'report' || event.type === 'error' || event.type === 'stopped' || event.type === 'noted';
|
|
2
2
|
export class ChatHistory {
|
|
3
3
|
turns = new Map();
|
|
4
4
|
maxTurns;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-history.js","sourceRoot":"","sources":["../../src/collector/chat-history.ts"],"names":[],"mappings":"AAuBA,MAAM,KAAK,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"chat-history.js","sourceRoot":"","sources":["../../src/collector/chat-history.ts"],"names":[],"mappings":"AAuBA,MAAM,KAAK,GAAG,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAA;AAE3I,MAAM,OAAO,WAAW;IACL,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAA;IACrC,QAAQ,CAAQ;IAChB,SAAS,CAAQ;IAElC,YAAY,OAAO,GAAuB,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAA;IACxD,CAAC;IAED,oGAAoG;IACpG,KAAK,CAAC,IAAqG;QACzG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,OAAM;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;QAClN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAA;IACrG,CAAC;IAED,8GAA8G;IAC9G,GAAG,CAAC,EAAU,EAAE,KAAgB;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,6GAA6G;QAC7G,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAM;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IACxC,CAAC;IAED,2GAA2G;IAC3G,GAAG,CAAC,EAAU;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,IAAI;YAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;IAChC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,uFAAuF;IACvF,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IACxF,CAAC;CACF"}
|
package/dist/collector/chat.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Anomaly } from '../debug/detector.js';
|
|
2
|
+
import type { BudgetState } from './budget.js';
|
|
2
3
|
export interface VersionStats {
|
|
3
4
|
version: string;
|
|
4
5
|
count: number;
|
|
@@ -98,6 +99,15 @@ export type ChatEvent = {
|
|
|
98
99
|
type: 'error';
|
|
99
100
|
message: string;
|
|
100
101
|
closed?: true;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The observer did not investigate this anomaly on its own: its budget for the period is spent (`budget`), or enough
|
|
105
|
+
* investigations are already waiting (`queue`). Ends the turn; somebody can still ask about it.
|
|
106
|
+
*/
|
|
107
|
+
| {
|
|
108
|
+
type: 'noted';
|
|
109
|
+
reason: 'budget' | 'queue';
|
|
110
|
+
budget: BudgetState;
|
|
101
111
|
};
|
|
102
112
|
export interface ChatRequest {
|
|
103
113
|
question: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Anomaly, type AnomalyDetector } from '../debug/detector.js';
|
|
2
2
|
import type { ChatHandler } from './chat.js';
|
|
3
|
+
import { InvestigationBudget } from './budget.js';
|
|
3
4
|
import type { CheckRunner } from '../checks/runner.js';
|
|
4
5
|
import { type CheckRule } from '../checks/types.js';
|
|
5
6
|
import type { StorageAdapter } from './types.js';
|
|
@@ -28,6 +29,8 @@ export interface CollectorOptions {
|
|
|
28
29
|
detector?: Pick<AnomalyDetector, 'observe' | 'check'>;
|
|
29
30
|
/** How often the detector window is checked. Default 5 s. */
|
|
30
31
|
detectorIntervalMs?: number;
|
|
32
|
+
/** How many investigations the observer starts on its own per period. Default 5 per 60 min. */
|
|
33
|
+
budget?: InvestigationBudget;
|
|
31
34
|
/** Scheduled checks (observe.checks.ts) whose results /api/checks reports; absent → none configured. */
|
|
32
35
|
checks?: Pick<CheckRunner, 'list'> & Partial<Pick<CheckRunner, 'isCheckTrace'>> & {
|
|
33
36
|
anomalies?: () => Anomaly[]; /** The thresholds behind `anomalies`, for the Checks page. */
|
package/dist/collector/server.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// GET /api/defects?windowMs&service&toMs errors grouped by where they originated and their message
|
|
11
11
|
// GET /api/checks { checks, nowMs, rule, investigates }: scheduled checks from observe.checks.ts with their latest results
|
|
12
12
|
// GET /api/regression?service&sinceMinutes { regression }: the latest version vs the previous one, or null
|
|
13
|
-
// GET /api/chat { enabled, mode }
|
|
13
|
+
// GET /api/chat { enabled, mode, budget }: budget = investigations the observer may still start on its own
|
|
14
14
|
// POST /api/chat { question, sessionId? } → NDJSON stream of ChatEvent (status, step…, card…, report | error | stopped); closing the request stops the investigation
|
|
15
15
|
// POST /api/chat/stop { turnId } → stops an investigation the observer started on its own
|
|
16
16
|
// GET /api/chat/history { seq, turns }: every chat turn so far — questions asked and the observer's own investigations
|
|
@@ -23,6 +23,7 @@ import { questionFor } from '../debug/detector.js';
|
|
|
23
23
|
import { createAgentQueries } from '../debug/queries.js';
|
|
24
24
|
import { findRegression } from '../debug/regression.js';
|
|
25
25
|
import { ChatHistory } from './chat-history.js';
|
|
26
|
+
import { InvestigationBudget, MAX_WAITING } from './budget.js';
|
|
26
27
|
import { gunzipSync } from 'node:zlib';
|
|
27
28
|
import { CHECK_RULE } from '../checks/types.js';
|
|
28
29
|
import { decodeOtlpJson } from './decode.js';
|
|
@@ -170,6 +171,7 @@ export async function startCollector(options = {}) {
|
|
|
170
171
|
/** Investigations the observer started itself and that are queued or running — each can be stopped by its turn id. */
|
|
171
172
|
const proactive = new Map();
|
|
172
173
|
let asked = 0;
|
|
174
|
+
const budget = options.budget ?? new InvestigationBudget();
|
|
173
175
|
const onAnomalies = () => {
|
|
174
176
|
for (const anomaly of [...(options.detector?.check() ?? []), ...(options.checks?.anomalies?.() ?? [])]) {
|
|
175
177
|
const turnId = anomaly.id;
|
|
@@ -177,6 +179,12 @@ export async function startCollector(options = {}) {
|
|
|
177
179
|
if (!options.chat)
|
|
178
180
|
continue;
|
|
179
181
|
const chat = options.chat;
|
|
182
|
+
// The queue is looked at first: an anomaly turned away because enough are waiting must not use up the budget.
|
|
183
|
+
const reason = proactive.size > MAX_WAITING ? 'queue' : budget.take(anomaly.type, Date.now()) ? undefined : 'budget';
|
|
184
|
+
if (reason) {
|
|
185
|
+
broadcast({ turnId, event: { type: 'noted', reason, budget: budget.state(Date.now()) } });
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
180
188
|
const controller = new AbortController();
|
|
181
189
|
proactive.set(turnId, controller);
|
|
182
190
|
// Queued: two investigations at once would double the model load and interleave in the UI.
|
|
@@ -301,7 +309,7 @@ export async function startCollector(options = {}) {
|
|
|
301
309
|
if (url.pathname === '/api/chat/history')
|
|
302
310
|
return send(res, 200, { seq, turns: history.list() });
|
|
303
311
|
if (url.pathname === '/api/chat') {
|
|
304
|
-
return send(res, 200, options.chat ? { enabled: true, mode: options.chat.mode } : { enabled: false, reason: CHAT_DISABLED });
|
|
312
|
+
return send(res, 200, options.chat ? { enabled: true, mode: options.chat.mode, budget: budget.state(Date.now()) } : { enabled: false, reason: CHAT_DISABLED });
|
|
305
313
|
}
|
|
306
314
|
if (url.pathname === '/health')
|
|
307
315
|
return send(res, 200, { status: 'ok', spans: await storage.count() });
|