@newrelic/preflight 1.4.47 → 1.5.0
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/dashboard/index.d.ts +1 -1
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/live-event-bus.d.ts +32 -0
- package/dist/dashboard/live-event-bus.d.ts.map +1 -1
- package/dist/dashboard/live-event-bus.js.map +1 -1
- package/dist/dashboard/routes/api-handler.d.ts +46 -0
- package/dist/dashboard/routes/api-handler.d.ts.map +1 -1
- package/dist/dashboard/routes/api-handler.js +188 -5
- package/dist/dashboard/routes/api-handler.js.map +1 -1
- package/dist/dashboard/subagent-timeline-store.d.ts +156 -0
- package/dist/dashboard/subagent-timeline-store.d.ts.map +1 -0
- package/dist/dashboard/subagent-timeline-store.js +674 -0
- package/dist/dashboard/subagent-timeline-store.js.map +1 -0
- package/dist/dashboard/workflow-store.d.ts +85 -0
- package/dist/dashboard/workflow-store.d.ts.map +1 -0
- package/dist/dashboard/workflow-store.js +330 -0
- package/dist/dashboard/workflow-store.js.map +1 -0
- package/dist/hooks/event-processor.d.ts +86 -1
- package/dist/hooks/event-processor.d.ts.map +1 -1
- package/dist/hooks/event-processor.js +182 -0
- package/dist/hooks/event-processor.js.map +1 -1
- package/dist/hooks/subagent-watcher.d.ts +182 -0
- package/dist/hooks/subagent-watcher.d.ts.map +1 -0
- package/dist/hooks/subagent-watcher.js +765 -0
- package/dist/hooks/subagent-watcher.js.map +1 -0
- package/dist/hooks/workflow-script-parser.d.ts +44 -0
- package/dist/hooks/workflow-script-parser.d.ts.map +1 -0
- package/dist/hooks/workflow-script-parser.js +255 -0
- package/dist/hooks/workflow-script-parser.js.map +1 -0
- package/dist/hooks/workflow-watcher.d.ts +65 -0
- package/dist/hooks/workflow-watcher.d.ts.map +1 -0
- package/dist/hooks/workflow-watcher.js +402 -0
- package/dist/hooks/workflow-watcher.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +315 -11
- package/dist/index.js.map +1 -1
- package/dist/metrics/cost-tracker.d.ts +113 -17
- package/dist/metrics/cost-tracker.d.ts.map +1 -1
- package/dist/metrics/cost-tracker.js +151 -8
- package/dist/metrics/cost-tracker.js.map +1 -1
- package/dist/metrics/workflow-run-tracker.d.ts +140 -0
- package/dist/metrics/workflow-run-tracker.d.ts.map +1 -0
- package/dist/metrics/workflow-run-tracker.js +306 -0
- package/dist/metrics/workflow-run-tracker.js.map +1 -0
- package/dist/storage/session-store.d.ts +8 -0
- package/dist/storage/session-store.d.ts.map +1 -1
- package/dist/storage/session-store.js +1 -1
- package/dist/storage/session-store.js.map +1 -1
- package/dist/storage/types.d.ts +40 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/transport/nr-ingest.d.ts +153 -2
- package/dist/transport/nr-ingest.d.ts.map +1 -1
- package/dist/transport/nr-ingest.js +276 -1
- package/dist/transport/nr-ingest.js.map +1 -1
- package/dist/web/assets/index-B4DkT4Go.css +2 -0
- package/dist/web/assets/index-CWwZdwYX.js +64 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/index-CrBs4WEp.js +0 -64
- package/dist/web/assets/index-DwBQxRYb.css +0 -2
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Watcher — polls `~/.claude/projects/<slug>/<sessionId>/workflows/wf_*.json`
|
|
3
|
+
* and emits one `mode:'workflow_run'` JSONL line per mtime change.
|
|
4
|
+
*
|
|
5
|
+
* The on-disk JSON is the only place per-workflow rollups (status, total
|
|
6
|
+
* tokens, agent count, declared topology via the sibling
|
|
7
|
+
* `workflows/scripts/<name>-wf_<runId>.js`) are persisted; hooks only see
|
|
8
|
+
* the parent's single Workflow tool_use.
|
|
9
|
+
*
|
|
10
|
+
* The watcher correlates with the SubagentWatcher's per-agent telemetry by
|
|
11
|
+
* the `wf_<runId>` filename suffix. Token-reconciliation delta is computed
|
|
12
|
+
* here so the dashboard can surface "rollup says X, sum-of-subagents says Y"
|
|
13
|
+
* without an NR-side join (the dashboard's reconciliation card).
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
18
|
+
import { createLogger } from '../shared/index.js';
|
|
19
|
+
import { parseWorkflowScript } from './workflow-script-parser.js';
|
|
20
|
+
const logger = createLogger('workflow-watcher');
|
|
21
|
+
const DEFAULT_POLL_INTERVAL_MS = 2_000;
|
|
22
|
+
const DEFAULT_DISCOVERY_HOURS = 24;
|
|
23
|
+
const PROJECTS_DIR_NAME = '.claude/projects';
|
|
24
|
+
const SESSION_ID_RE = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;
|
|
25
|
+
const WF_FILE_RE = /^wf_/; // match prefix only (no fixed-suffix-length assumption)
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// WorkflowWatcher
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export class WorkflowWatcher {
|
|
30
|
+
storagePath;
|
|
31
|
+
projectsDir;
|
|
32
|
+
pollIntervalMs;
|
|
33
|
+
discoveryHours;
|
|
34
|
+
parentSessionFilter;
|
|
35
|
+
getCostForRun;
|
|
36
|
+
getSubagentTokenSumForRun;
|
|
37
|
+
intervalId = null;
|
|
38
|
+
running = false;
|
|
39
|
+
seenMtime = new Map();
|
|
40
|
+
emittedRuns = new Set();
|
|
41
|
+
topologyCache = new Map();
|
|
42
|
+
// Health counters
|
|
43
|
+
filesWatched = 0;
|
|
44
|
+
linesRead = 0;
|
|
45
|
+
bytesRead = 0;
|
|
46
|
+
parseErrors = 0;
|
|
47
|
+
schemaDrifts = 0;
|
|
48
|
+
lastError = null;
|
|
49
|
+
// Callback wires (set after construction to avoid circular imports)
|
|
50
|
+
onRun = null;
|
|
51
|
+
onHealth = null;
|
|
52
|
+
constructor(options = {}) {
|
|
53
|
+
this.storagePath = options.storagePath ?? join(homedir(), '.newrelic-preflight');
|
|
54
|
+
this.projectsDir = options.projectsDir ?? join(homedir(), PROJECTS_DIR_NAME);
|
|
55
|
+
this.pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
56
|
+
const envHours = parseInt(process.env.NR_AI_WATCHER_DISCOVERY_HOURS ?? '', 10);
|
|
57
|
+
this.discoveryHours =
|
|
58
|
+
options.discoveryHours ??
|
|
59
|
+
(Number.isFinite(envHours) && envHours > 0 ? envHours : DEFAULT_DISCOVERY_HOURS);
|
|
60
|
+
this.parentSessionFilter = options.parentSessionId ?? null;
|
|
61
|
+
this.getCostForRun = options.getCostForRun;
|
|
62
|
+
this.getSubagentTokenSumForRun = options.getSubagentTokenSumForRun;
|
|
63
|
+
}
|
|
64
|
+
setOnRun(cb) {
|
|
65
|
+
this.onRun = cb;
|
|
66
|
+
}
|
|
67
|
+
setOnHealth(cb) {
|
|
68
|
+
this.onHealth = cb;
|
|
69
|
+
}
|
|
70
|
+
start() {
|
|
71
|
+
if (this.running)
|
|
72
|
+
return;
|
|
73
|
+
this.running = true;
|
|
74
|
+
if (!existsSync(this.storagePath)) {
|
|
75
|
+
mkdirSync(this.storagePath, { recursive: true, mode: 0o700 });
|
|
76
|
+
}
|
|
77
|
+
this.intervalId = setInterval(() => this.poll(), this.pollIntervalMs);
|
|
78
|
+
this.intervalId.unref();
|
|
79
|
+
logger.info('WorkflowWatcher started');
|
|
80
|
+
}
|
|
81
|
+
stop() {
|
|
82
|
+
if (!this.running)
|
|
83
|
+
return;
|
|
84
|
+
this.running = false;
|
|
85
|
+
if (this.intervalId !== null) {
|
|
86
|
+
clearInterval(this.intervalId);
|
|
87
|
+
this.intervalId = null;
|
|
88
|
+
}
|
|
89
|
+
logger.info('WorkflowWatcher stopped');
|
|
90
|
+
}
|
|
91
|
+
poll() {
|
|
92
|
+
try {
|
|
93
|
+
const files = this.discoverFiles();
|
|
94
|
+
this.filesWatched = files.length;
|
|
95
|
+
for (const file of files) {
|
|
96
|
+
let st;
|
|
97
|
+
try {
|
|
98
|
+
st = statSync(file.path);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const prev = this.seenMtime.get(file.path);
|
|
104
|
+
if (prev !== undefined && st.mtimeMs === prev)
|
|
105
|
+
continue;
|
|
106
|
+
this.seenMtime.set(file.path, st.mtimeMs);
|
|
107
|
+
this.processFile(file, st.mtimeMs);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
this.recordError(err);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// -------------------------------------------------------------------------
|
|
115
|
+
// Discovery
|
|
116
|
+
// -------------------------------------------------------------------------
|
|
117
|
+
discoverFiles() {
|
|
118
|
+
const out = [];
|
|
119
|
+
if (!existsSync(this.projectsDir))
|
|
120
|
+
return out;
|
|
121
|
+
const cutoffMs = Date.now() - this.discoveryHours * 60 * 60 * 1000;
|
|
122
|
+
let projectEntries;
|
|
123
|
+
try {
|
|
124
|
+
projectEntries = readdirSync(this.projectsDir);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
this.recordError(err);
|
|
128
|
+
return out;
|
|
129
|
+
}
|
|
130
|
+
for (const project of projectEntries) {
|
|
131
|
+
const projectPath = join(this.projectsDir, project);
|
|
132
|
+
let st;
|
|
133
|
+
try {
|
|
134
|
+
st = statSync(projectPath);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (!st.isDirectory())
|
|
140
|
+
continue;
|
|
141
|
+
let sessionEntries;
|
|
142
|
+
try {
|
|
143
|
+
sessionEntries = readdirSync(projectPath);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
for (const sessionId of sessionEntries) {
|
|
149
|
+
if (!SESSION_ID_RE.test(sessionId))
|
|
150
|
+
continue;
|
|
151
|
+
if (this.parentSessionFilter && sessionId !== this.parentSessionFilter)
|
|
152
|
+
continue;
|
|
153
|
+
const wfDir = join(projectPath, sessionId, 'workflows');
|
|
154
|
+
if (!existsSync(wfDir))
|
|
155
|
+
continue;
|
|
156
|
+
let wfEntries;
|
|
157
|
+
try {
|
|
158
|
+
wfEntries = readdirSync(wfDir);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
for (const name of wfEntries) {
|
|
164
|
+
if (!WF_FILE_RE.test(name) || !name.endsWith('.json'))
|
|
165
|
+
continue;
|
|
166
|
+
const path = join(wfDir, name);
|
|
167
|
+
let fst;
|
|
168
|
+
try {
|
|
169
|
+
fst = statSync(path);
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (fst.mtimeMs < cutoffMs && !this.emittedRuns.has(name.slice(0, -'.json'.length))) {
|
|
175
|
+
// Skip cold-scan of files older than the discovery budget. The
|
|
176
|
+
// first time we encounter such a file we emit a discovery_skipped
|
|
177
|
+
// health event so the operator can tell why a known run is absent
|
|
178
|
+
// from the dashboard.
|
|
179
|
+
if (!this.seenMtime.has(path)) {
|
|
180
|
+
this.seenMtime.set(path, fst.mtimeMs);
|
|
181
|
+
this.emitHealth({ event: 'discovery_skipped' });
|
|
182
|
+
}
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
out.push({ path, parentSessionId: sessionId, runId: name.slice(0, -'.json'.length) });
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return out;
|
|
190
|
+
}
|
|
191
|
+
// -------------------------------------------------------------------------
|
|
192
|
+
// Per-file processing
|
|
193
|
+
// -------------------------------------------------------------------------
|
|
194
|
+
processFile(file, mtimeMs) {
|
|
195
|
+
let raw;
|
|
196
|
+
try {
|
|
197
|
+
raw = readFileSync(file.path, 'utf-8');
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
this.recordError(err);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
this.bytesRead += raw.length;
|
|
204
|
+
let parsed;
|
|
205
|
+
try {
|
|
206
|
+
parsed = JSON.parse(raw);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Partial-write protection: re-stat and only count as parse error
|
|
210
|
+
// if mtime is stable.
|
|
211
|
+
try {
|
|
212
|
+
const st2 = statSync(file.path);
|
|
213
|
+
if (st2.mtimeMs !== mtimeMs)
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
this.parseErrors += 1;
|
|
220
|
+
logger.warn('JSON parse error on workflow file', { path: file.path });
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const runId = typeof parsed.runId === 'string' ? parsed.runId : file.runId;
|
|
224
|
+
const startTime = typeof parsed.startTime === 'number' ? parsed.startTime : 0;
|
|
225
|
+
const durationMs = typeof parsed.durationMs === 'number' ? parsed.durationMs : 0;
|
|
226
|
+
const status = typeof parsed.status === 'string' ? parsed.status : 'unknown';
|
|
227
|
+
const incomplete = status !== 'completed';
|
|
228
|
+
const wfName = typeof parsed.workflowName === 'string' ? parsed.workflowName : 'unknown';
|
|
229
|
+
const defaultModel = typeof parsed.defaultModel === 'string' ? parsed.defaultModel : 'unknown';
|
|
230
|
+
const agentCount = typeof parsed.agentCount === 'number' ? parsed.agentCount : 0;
|
|
231
|
+
const totalTokensRollup = typeof parsed.totalTokens === 'number' && parsed.totalTokens >= 0 ? parsed.totalTokens : 0;
|
|
232
|
+
const taskId = parsed.taskId === null || typeof parsed.taskId === 'string' ? parsed.taskId : null;
|
|
233
|
+
// Observed phases = unique phaseTitle values across workflow_agent entries
|
|
234
|
+
let observedPhases = 0;
|
|
235
|
+
const wp = Array.isArray(parsed.workflowProgress) ? parsed.workflowProgress : [];
|
|
236
|
+
const seenPhaseTitles = new Set();
|
|
237
|
+
for (const entry of wp) {
|
|
238
|
+
if (entry && typeof entry === 'object') {
|
|
239
|
+
const t = entry.type;
|
|
240
|
+
const title = entry.phaseTitle;
|
|
241
|
+
if (t === 'workflow_agent' && typeof title === 'string') {
|
|
242
|
+
seenPhaseTitles.add(title);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
observedPhases = seenPhaseTitles.size;
|
|
247
|
+
// Static topology from script
|
|
248
|
+
let topology = this.topologyCache.get(runId);
|
|
249
|
+
if (topology === undefined) {
|
|
250
|
+
let scriptPath = typeof parsed.scriptPath === 'string' ? parsed.scriptPath : null;
|
|
251
|
+
if (!scriptPath) {
|
|
252
|
+
// Fallback heuristic: the script lives in the sibling `scripts/`
|
|
253
|
+
// directory under the same workflows dir.
|
|
254
|
+
const wfDir = dirname(file.path);
|
|
255
|
+
const scriptsDir = join(wfDir, 'scripts');
|
|
256
|
+
if (existsSync(scriptsDir)) {
|
|
257
|
+
try {
|
|
258
|
+
for (const name of readdirSync(scriptsDir)) {
|
|
259
|
+
if (name.endsWith(`-${runId}.js`)) {
|
|
260
|
+
scriptPath = join(scriptsDir, name);
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
/* skip */
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Security: `parsed.scriptPath` is read verbatim from an untrusted
|
|
271
|
+
// on-disk wf_*.json. Before reading it, require the resolved path to
|
|
272
|
+
// stay under `projectsDir` (no traversal to /etc/passwd, ~/.ssh, or a
|
|
273
|
+
// sibling agent-*.meta.json prompt), and cap the read size. A path that
|
|
274
|
+
// escapes containment or exceeds the cap is treated as parser_skip.
|
|
275
|
+
//
|
|
276
|
+
// path.relative() + this escape check is the containment pattern
|
|
277
|
+
// CodeQL recognises as a path-injection sanitizer (see
|
|
278
|
+
// static-handler.ts's identical comment). It must stay inlined here,
|
|
279
|
+
// not delegated to a helper function — extracting it breaks CodeQL's
|
|
280
|
+
// recognition of the sanitizer even for a trivial wrapper, and a
|
|
281
|
+
// startsWith(root + '/') check (the previous approach) never covers
|
|
282
|
+
// Windows since resolve() there yields backslash-separated paths.
|
|
283
|
+
const SCRIPT_MAX_BYTES = 262_144; // 256 KiB
|
|
284
|
+
let scriptOk = false;
|
|
285
|
+
if (scriptPath && existsSync(scriptPath)) {
|
|
286
|
+
const root = resolve(this.projectsDir);
|
|
287
|
+
const resolved = resolve(scriptPath);
|
|
288
|
+
const rel = relative(root, resolved);
|
|
289
|
+
const contained = rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
|
|
290
|
+
if (contained) {
|
|
291
|
+
try {
|
|
292
|
+
scriptOk = statSync(resolved).size <= SCRIPT_MAX_BYTES;
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
scriptOk = false;
|
|
296
|
+
}
|
|
297
|
+
if (scriptOk)
|
|
298
|
+
scriptPath = resolved;
|
|
299
|
+
}
|
|
300
|
+
if (!scriptOk) {
|
|
301
|
+
this.emitHealth({ event: 'parser_skip' });
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
if (scriptOk && scriptPath) {
|
|
305
|
+
const result = parseWorkflowScript(scriptPath);
|
|
306
|
+
if (result.status === 'ok') {
|
|
307
|
+
topology = result.topology;
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
topology = null;
|
|
311
|
+
this.emitHealth({ event: 'parser_skip' });
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
topology = null;
|
|
316
|
+
}
|
|
317
|
+
this.topologyCache.set(runId, topology);
|
|
318
|
+
}
|
|
319
|
+
// Token reconciliation delta. `null` (not 0) when no subagent data has
|
|
320
|
+
// been collected yet for this run — otherwise every newly-discovered run
|
|
321
|
+
// would show a false "100% gap" (subagentSum === 0 is indistinguishable
|
|
322
|
+
// from "not collected yet" if we let it flow into the ratio below).
|
|
323
|
+
const subagentSum = this.getSubagentTokenSumForRun?.(runId) ?? 0;
|
|
324
|
+
const totalTokens = subagentSum > 0 ? subagentSum : totalTokensRollup;
|
|
325
|
+
const tokenReconciliationDelta = subagentSum > 0 && totalTokensRollup > 0
|
|
326
|
+
? (totalTokensRollup - subagentSum) / totalTokensRollup
|
|
327
|
+
: null;
|
|
328
|
+
// Cost (if available)
|
|
329
|
+
const usd = this.getCostForRun?.(runId) ?? 0;
|
|
330
|
+
const totalUsd = usd > 0 ? usd : null;
|
|
331
|
+
const declaredParallelWidthsJson = topology
|
|
332
|
+
? JSON.stringify(topology.declaredParallelWidths)
|
|
333
|
+
: '[]';
|
|
334
|
+
const metrics = {
|
|
335
|
+
workflow_run_id: runId,
|
|
336
|
+
parent_session_id: file.parentSessionId,
|
|
337
|
+
task_id: taskId ?? null,
|
|
338
|
+
workflow_name: topology?.workflowName ?? wfName,
|
|
339
|
+
status,
|
|
340
|
+
default_model: defaultModel,
|
|
341
|
+
started_at: startTime,
|
|
342
|
+
duration_ms: durationMs,
|
|
343
|
+
agent_count: agentCount,
|
|
344
|
+
total_tokens: totalTokens,
|
|
345
|
+
total_usd: totalUsd,
|
|
346
|
+
declared_phases: topology ? topology.declaredPhases : null,
|
|
347
|
+
observed_phases: observedPhases,
|
|
348
|
+
declared_parallel_widths: declaredParallelWidthsJson,
|
|
349
|
+
token_reconciliation_delta: tokenReconciliationDelta,
|
|
350
|
+
incomplete,
|
|
351
|
+
backfilled: false,
|
|
352
|
+
};
|
|
353
|
+
if (this.onRun) {
|
|
354
|
+
try {
|
|
355
|
+
this.onRun(metrics);
|
|
356
|
+
}
|
|
357
|
+
catch (err) {
|
|
358
|
+
this.recordError(err);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Keyed on file.runId (filename stem), matching exactly what
|
|
362
|
+
// discoverFiles()'s old-file cutoff guard checks — NOT the
|
|
363
|
+
// content-derived `runId` above, which can differ from the filename
|
|
364
|
+
// stem (rename, copy, older tool version) and would otherwise let that
|
|
365
|
+
// guard silently never fire for this file.
|
|
366
|
+
if (!this.emittedRuns.has(file.runId)) {
|
|
367
|
+
this.emittedRuns.add(file.runId);
|
|
368
|
+
this.emitHealth({ event: 'discovered_workflow', workflow_run_id: runId });
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// -------------------------------------------------------------------------
|
|
372
|
+
// Health
|
|
373
|
+
// -------------------------------------------------------------------------
|
|
374
|
+
emitHealth(extra = {}) {
|
|
375
|
+
if (!this.onHealth)
|
|
376
|
+
return;
|
|
377
|
+
try {
|
|
378
|
+
this.onHealth({
|
|
379
|
+
timestamp: Date.now(),
|
|
380
|
+
watcher: 'workflow',
|
|
381
|
+
files_watched: this.filesWatched,
|
|
382
|
+
lines_read: this.linesRead,
|
|
383
|
+
bytes_read: this.bytesRead,
|
|
384
|
+
parse_errors: this.parseErrors,
|
|
385
|
+
schema_drifts: this.schemaDrifts,
|
|
386
|
+
last_error: this.lastError,
|
|
387
|
+
...extra,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
this.recordError(err);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
recordError(err) {
|
|
395
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
396
|
+
const code = err.code ?? 'UNKNOWN';
|
|
397
|
+
const cls = err instanceof Error ? err.constructor.name : 'Error';
|
|
398
|
+
this.lastError = { code: String(code).slice(0, 80), class: String(cls).slice(0, 80) };
|
|
399
|
+
logger.warn('WorkflowWatcher error', { code, message: message.slice(0, 200) });
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=workflow-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-watcher.js","sourceRoot":"","sources":["../../src/hooks/workflow-watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAMvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAKvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAoChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|