@mono-agent/observability 0.1.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.
@@ -0,0 +1,372 @@
1
+ import { readdir, readFile, stat } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { DEFAULT_MAX_EVENTS_PER_RUN, DEFAULT_MAX_RUNS, DEFAULT_MAX_STRING_BYTES, errorMessage, isErrno, isRecord, minInteger, normalizeRunId as normalizeRunIdGuard, positiveInteger, safeArtifactName, safeJoin as safeJoinGuard, stringField, } from "./artifact-fs.js";
4
+ import { classifyAssistantContent, compactString } from "./content.js";
5
+ import { redactJsonValue } from "./recorder.js";
6
+ const SUMMARY_SUFFIX = ".summary.json";
7
+ const EVENTS_SUFFIX = ".events.jsonl";
8
+ export class ObservabilityReadError extends Error {
9
+ code;
10
+ details;
11
+ constructor(code, message, details = {}) {
12
+ super(message);
13
+ this.name = "ObservabilityReadError";
14
+ this.code = code;
15
+ this.details = { ...details, code };
16
+ }
17
+ }
18
+ export async function listRecordedRuns(options) {
19
+ const normalized = normalizeReaderOptions(options);
20
+ const { summaries, warnings } = await loadSummaryFiles(normalized);
21
+ return {
22
+ runs: [...summaries]
23
+ .sort((a, b) => summaryUpdatedAtMs(b) - summaryUpdatedAtMs(a))
24
+ .slice(0, normalized.maxRuns)
25
+ .map((entry) => summaryToListItem(entry.summary, entry.updatedAt, normalized.maxStringBytes)),
26
+ warnings,
27
+ };
28
+ }
29
+ export async function readRecordedRun(options, runId) {
30
+ const normalized = normalizeReaderOptions(options);
31
+ const normalizedRunId = normalizeRunId(runId);
32
+ const baseName = safeArtifactName(normalizedRunId);
33
+ const summaryPath = safeJoin(normalized.artifactDir, `${baseName}${SUMMARY_SUFFIX}`);
34
+ const warnings = [];
35
+ const summary = await readSummaryFile(summaryPath, `${baseName}${SUMMARY_SUFFIX}`, normalized, warnings);
36
+ if (summary === undefined || summary.summary.runId !== normalizedRunId) {
37
+ return undefined;
38
+ }
39
+ const eventsPath = safeJoin(normalized.artifactDir, `${baseName}${EVENTS_SUFFIX}`);
40
+ const events = await readEventsFile(eventsPath, normalized, warnings);
41
+ return {
42
+ summary: summaryToListItem(summary.summary, summary.updatedAt, normalized.maxStringBytes),
43
+ events,
44
+ warnings,
45
+ };
46
+ }
47
+ export function classifyRecordedRunEvent(event) {
48
+ if (!isRecord(event)) {
49
+ return "runtime";
50
+ }
51
+ const type = stringField(event, "type")?.toLowerCase() ?? "";
52
+ if (type.includes("error") ||
53
+ type.includes("failure") ||
54
+ type.includes("failed") ||
55
+ event.error !== undefined ||
56
+ event.failureKind !== undefined) {
57
+ return "error";
58
+ }
59
+ if (type.includes("tool") ||
60
+ stringField(event, "toolName") !== undefined ||
61
+ stringField(event, "tool") !== undefined ||
62
+ stringField(event, "tool_call_id") !== undefined ||
63
+ stringField(event, "toolCallId") !== undefined) {
64
+ return "tool";
65
+ }
66
+ if (type.includes("thinking") || type.includes("reasoning") || type.includes("thought")) {
67
+ return "thinking";
68
+ }
69
+ if (assistantMessageContentKind(event) === "thinking") {
70
+ return "thinking";
71
+ }
72
+ if (type === "assistant" || type === "user" || type.includes("message") || event.message !== undefined) {
73
+ return "message";
74
+ }
75
+ return "runtime";
76
+ }
77
+ async function loadSummaryFiles(normalized) {
78
+ const warnings = [];
79
+ let entries;
80
+ try {
81
+ entries = await readdir(normalized.artifactDir, { withFileTypes: true });
82
+ }
83
+ catch (error) {
84
+ if (isErrno(error, "ENOENT")) {
85
+ return { summaries: [], warnings };
86
+ }
87
+ return {
88
+ summaries: [],
89
+ warnings: [`Unable to read artifact directory: ${errorMessage(error)}.`],
90
+ };
91
+ }
92
+ const summaries = [];
93
+ for (const entry of entries) {
94
+ if (!entry.isFile() || !entry.name.endsWith(SUMMARY_SUFFIX)) {
95
+ continue;
96
+ }
97
+ const filePath = safeJoin(normalized.artifactDir, entry.name);
98
+ const parsed = await readSummaryFile(filePath, entry.name, normalized, warnings);
99
+ if (parsed !== undefined) {
100
+ summaries.push(parsed);
101
+ }
102
+ }
103
+ return { summaries, warnings };
104
+ }
105
+ async function readSummaryFile(filePath, fileName, normalized, warnings) {
106
+ let raw;
107
+ try {
108
+ raw = await readFile(filePath, "utf8");
109
+ }
110
+ catch (error) {
111
+ if (isErrno(error, "ENOENT")) {
112
+ return undefined;
113
+ }
114
+ warnings.push(`Unable to read ${fileName}: ${errorMessage(error)}.`);
115
+ return undefined;
116
+ }
117
+ let parsed;
118
+ try {
119
+ parsed = JSON.parse(raw);
120
+ }
121
+ catch (error) {
122
+ warnings.push(`Skipping ${fileName}: invalid JSON (${errorMessage(error)}).`);
123
+ return undefined;
124
+ }
125
+ const summary = coerceRunSummary(parsed, fileName, warnings, normalized.maxStringBytes);
126
+ if (summary === undefined) {
127
+ return undefined;
128
+ }
129
+ let stats;
130
+ try {
131
+ stats = await stat(filePath);
132
+ }
133
+ catch (error) {
134
+ warnings.push(`Unable to stat ${fileName}: ${errorMessage(error)}.`);
135
+ return undefined;
136
+ }
137
+ return {
138
+ fileName,
139
+ summary,
140
+ updatedAt: stats.mtime.toISOString(),
141
+ mtimeMs: stats.mtimeMs,
142
+ };
143
+ }
144
+ async function readEventsFile(filePath, normalized, warnings) {
145
+ let raw;
146
+ try {
147
+ raw = await readFile(filePath, "utf8");
148
+ }
149
+ catch (error) {
150
+ if (isErrno(error, "ENOENT")) {
151
+ warnings.push("Event artifact is missing for this run.");
152
+ return [];
153
+ }
154
+ warnings.push(`Unable to read event artifact: ${errorMessage(error)}.`);
155
+ return [];
156
+ }
157
+ const events = [];
158
+ const lines = raw.split(/\r?\n/u);
159
+ for (let i = 0; i < lines.length; i += 1) {
160
+ const line = lines[i];
161
+ if (line === undefined || line.trim().length === 0) {
162
+ continue;
163
+ }
164
+ if (events.length >= normalized.maxEventsPerRun) {
165
+ warnings.push(`Event list was capped at ${normalized.maxEventsPerRun} events.`);
166
+ break;
167
+ }
168
+ try {
169
+ const parsed = JSON.parse(line);
170
+ events.push(toRecordedEvent(parsed, events.length, normalized.maxStringBytes));
171
+ }
172
+ catch (error) {
173
+ warnings.push(`Skipping malformed event line ${i + 1}: ${errorMessage(error)}.`);
174
+ }
175
+ }
176
+ return events;
177
+ }
178
+ function coerceRunSummary(value, fileName, warnings, maxStringBytes) {
179
+ if (!isRecord(value)) {
180
+ warnings.push(`Skipping ${fileName}: summary is not an object.`);
181
+ return undefined;
182
+ }
183
+ const runId = stringField(value, "runId");
184
+ const conversationId = stringField(value, "conversationId");
185
+ const status = runSummaryStatus(value.status);
186
+ const durationMs = finiteNumberField(value, "durationMs");
187
+ const eventCount = integerNumberField(value, "eventCount");
188
+ if (runId === undefined || conversationId === undefined || status === undefined || durationMs === undefined || eventCount === undefined) {
189
+ warnings.push(`Skipping ${fileName}: summary is missing required run metadata.`);
190
+ return undefined;
191
+ }
192
+ const failureKind = stringField(value, "failureKind");
193
+ const startedAt = stringField(value, "startedAt");
194
+ const endedAt = stringField(value, "endedAt");
195
+ const updatedAt = stringField(value, "updatedAt");
196
+ const providerSessionId = providerSessionIdField(value.providerSessionId);
197
+ const artifactPaths = Array.isArray(value.artifactPaths) ? value.artifactPaths.filter((entry) => typeof entry === "string") : [];
198
+ const summary = {
199
+ runId,
200
+ conversationId,
201
+ status,
202
+ ...(failureKind === undefined ? {} : { failureKind }),
203
+ ...(startedAt === undefined ? {} : { startedAt }),
204
+ ...(endedAt === undefined ? {} : { endedAt }),
205
+ ...(updatedAt === undefined ? {} : { updatedAt }),
206
+ durationMs,
207
+ ...(value.usage === undefined ? {} : { usage: redactJsonValue(value.usage, maxStringBytes) }),
208
+ ...(value.cost === undefined ? {} : { cost: redactJsonValue(value.cost, maxStringBytes) }),
209
+ ...(providerSessionId === undefined ? {} : { providerSessionId }),
210
+ eventCount,
211
+ artifactPaths,
212
+ ...(value.runtimeWarnings === undefined ? {} : { runtimeWarnings: redactJsonValue(value.runtimeWarnings, maxStringBytes) }),
213
+ ...(value.diagnostics === undefined ? {} : { diagnostics: redactJsonValue(value.diagnostics, maxStringBytes) }),
214
+ ...(value.capabilitiesUsed === undefined ? {} : { capabilitiesUsed: redactJsonValue(value.capabilitiesUsed, maxStringBytes) }),
215
+ };
216
+ return summary;
217
+ }
218
+ function summaryToListItem(summary, updatedAt, maxStringBytes) {
219
+ return {
220
+ runId: summary.runId,
221
+ conversationId: summary.conversationId,
222
+ status: summary.status,
223
+ ...(summary.failureKind === undefined ? {} : { failureKind: summary.failureKind }),
224
+ ...(summary.startedAt === undefined ? {} : { startedAt: summary.startedAt }),
225
+ ...(summary.endedAt === undefined ? {} : { endedAt: summary.endedAt }),
226
+ durationMs: summary.durationMs,
227
+ eventCount: summary.eventCount,
228
+ updatedAt: summary.updatedAt ?? updatedAt,
229
+ ...(summary.usage === undefined ? {} : { usage: redactJsonValue(summary.usage, maxStringBytes) }),
230
+ ...(summary.cost === undefined ? {} : { cost: redactJsonValue(summary.cost, maxStringBytes) }),
231
+ ...(summary.providerSessionId === undefined ? {} : { providerSessionId: summary.providerSessionId }),
232
+ ...(summary.runtimeWarnings === undefined ? {} : { runtimeWarnings: redactJsonValue(summary.runtimeWarnings, maxStringBytes) }),
233
+ ...(summary.diagnostics === undefined ? {} : { diagnostics: redactJsonValue(summary.diagnostics, maxStringBytes) }),
234
+ ...(summary.capabilitiesUsed === undefined ? {} : { capabilitiesUsed: redactJsonValue(summary.capabilitiesUsed, maxStringBytes) }),
235
+ };
236
+ }
237
+ function toRecordedEvent(raw, index, maxStringBytes) {
238
+ const payload = redactJsonValue(raw, maxStringBytes);
239
+ const category = classifyRecordedRunEvent(payload);
240
+ const record = isRecord(payload) ? payload : {};
241
+ const type = stringField(record, "type");
242
+ const timestamp = stringField(record, "timestamp") ?? stringField(record, "createdAt") ?? stringField(record, "time");
243
+ return {
244
+ index,
245
+ ...(type === undefined ? {} : { type }),
246
+ category,
247
+ ...(timestamp === undefined ? {} : { timestamp }),
248
+ label: eventLabel(record, category, type),
249
+ summary: eventSummary(record, category, payload, maxStringBytes),
250
+ payload,
251
+ };
252
+ }
253
+ function eventLabel(record, category, type) {
254
+ const toolName = stringField(record, "toolName") ?? stringField(record, "tool") ?? stringField(record, "name");
255
+ if (category === "tool" && toolName !== undefined) {
256
+ return `Tool: ${toolName}`;
257
+ }
258
+ const role = stringField(record, "role");
259
+ if (category === "message" && role !== undefined) {
260
+ return `Message: ${role}`;
261
+ }
262
+ if (category === "thinking") {
263
+ return type ?? "Reasoning event";
264
+ }
265
+ if (category === "error") {
266
+ return type ?? stringField(record, "failureKind") ?? "Error";
267
+ }
268
+ return type ?? "Runtime event";
269
+ }
270
+ function eventSummary(record, category, payload, maxStringBytes) {
271
+ const direct = stringField(record, "summary") ?? stringField(record, "text") ?? stringField(record, "delta") ?? stringField(record, "error");
272
+ if (direct !== undefined) {
273
+ return compactString(direct);
274
+ }
275
+ const messageText = textFromMessage(record.message);
276
+ if (messageText !== undefined) {
277
+ return compactString(messageText);
278
+ }
279
+ if (category === "tool") {
280
+ const status = stringField(record, "status") ?? stringField(record, "state");
281
+ const toolName = stringField(record, "toolName") ?? stringField(record, "tool") ?? stringField(record, "name");
282
+ if (toolName !== undefined && status !== undefined) {
283
+ return `${toolName} — ${status}`;
284
+ }
285
+ if (toolName !== undefined) {
286
+ return toolName;
287
+ }
288
+ }
289
+ if (category === "thinking") {
290
+ return "Runtime emitted a reasoning/thinking process event.";
291
+ }
292
+ return compactString(JSON.stringify(redactJsonValue(payload, maxStringBytes)));
293
+ }
294
+ function textFromMessage(value) {
295
+ if (typeof value === "string") {
296
+ return value;
297
+ }
298
+ if (!isRecord(value)) {
299
+ return undefined;
300
+ }
301
+ const content = value.content;
302
+ if (typeof content === "string") {
303
+ return content;
304
+ }
305
+ if (!Array.isArray(content)) {
306
+ return undefined;
307
+ }
308
+ const text = content
309
+ .map((block) => {
310
+ if (typeof block === "string") {
311
+ return block;
312
+ }
313
+ if (isRecord(block) && block.type === "text" && typeof block.text === "string") {
314
+ return block.text;
315
+ }
316
+ return "";
317
+ })
318
+ .join("");
319
+ return text.length > 0 ? text : undefined;
320
+ }
321
+ function assistantMessageContentKind(event) {
322
+ if (stringField(event, "type") !== "assistant") {
323
+ return undefined;
324
+ }
325
+ return classifyAssistantContent(event.message)?.kind;
326
+ }
327
+ function normalizeReaderOptions(options) {
328
+ if (typeof options.artifactDir !== "string" || options.artifactDir.trim().length === 0) {
329
+ throw new ObservabilityReadError("invalid_reader_options", "artifactDir must be a non-empty path.");
330
+ }
331
+ const raiseOptions = (message, field) => {
332
+ throw new ObservabilityReadError("invalid_reader_options", message, { field });
333
+ };
334
+ return {
335
+ artifactDir: resolve(options.artifactDir),
336
+ maxRuns: positiveInteger(options.maxRuns, DEFAULT_MAX_RUNS, "maxRuns", raiseOptions),
337
+ maxEventsPerRun: positiveInteger(options.maxEventsPerRun, DEFAULT_MAX_EVENTS_PER_RUN, "maxEventsPerRun", raiseOptions),
338
+ maxStringBytes: minInteger(options.maxStringBytes, DEFAULT_MAX_STRING_BYTES, 64, "maxStringBytes", raiseOptions),
339
+ };
340
+ }
341
+ function normalizeRunId(runId) {
342
+ return normalizeRunIdGuard(runId, (message) => {
343
+ throw new ObservabilityReadError("invalid_run_id", message);
344
+ });
345
+ }
346
+ function safeJoin(root, fileName) {
347
+ return safeJoinGuard(root, fileName, () => {
348
+ throw new ObservabilityReadError("invalid_run_id", "Resolved artifact path escapes artifactDir.");
349
+ });
350
+ }
351
+ function runSummaryStatus(value) {
352
+ return value === "running" || value === "succeeded" || value === "failed" || value === "cancelled" ? value : undefined;
353
+ }
354
+ function summaryUpdatedAtMs(entry) {
355
+ const parsed = entry.summary.updatedAt === undefined ? Number.NaN : Date.parse(entry.summary.updatedAt);
356
+ return Number.isFinite(parsed) ? parsed : entry.mtimeMs;
357
+ }
358
+ function providerSessionIdField(value) {
359
+ if (value === null) {
360
+ return null;
361
+ }
362
+ return typeof value === "string" ? value : undefined;
363
+ }
364
+ function finiteNumberField(record, key) {
365
+ const value = record[key];
366
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
367
+ }
368
+ function integerNumberField(record, key) {
369
+ const value = record[key];
370
+ return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : undefined;
371
+ }
372
+ //# sourceMappingURL=recorded-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorded-runs.js","sourceRoot":"","sources":["../src/recorded-runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { JsonlRunRecorderOptions, RunRecorder } from "./types.js";
2
+ export type ObservabilityErrorCode = "invalid_recorder_options" | "artifact_write_failed";
3
+ export type ObservabilityErrorDetails = Record<string, unknown> & {
4
+ readonly code: ObservabilityErrorCode;
5
+ };
6
+ export declare class ObservabilityError extends Error {
7
+ readonly code: ObservabilityErrorCode;
8
+ readonly details: ObservabilityErrorDetails;
9
+ constructor(code: ObservabilityErrorCode, message: string, details?: Record<string, unknown>);
10
+ }
11
+ export declare function createJsonlRunRecorder(options: JsonlRunRecorderOptions): RunRecorder;
12
+ export declare function redactJsonValue(value: unknown, maxStringBytes?: number): unknown;
13
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAmD,MAAM,YAAY,CAAC;AAIxH,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAAG,uBAAuB,CAAC;AAC1F,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE5G,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;gBAEhC,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAMjG;AAoGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,WAAW,CAEpF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,SAA2B,GAAG,OAAO,CAElG"}
@@ -0,0 +1,188 @@
1
+ import { join, resolve } from "node:path";
2
+ import { DEFAULT_MAX_STRING_BYTES, mkdir, safeArtifactName, writeJsonAtomic } from "./artifact-fs.js";
3
+ const SENSITIVE_KEY_PATTERN = /(token|secret|password|authorization|api[_-]?key|cookie)/iu;
4
+ export class ObservabilityError extends Error {
5
+ code;
6
+ details;
7
+ constructor(code, message, details = {}) {
8
+ super(message);
9
+ this.name = "ObservabilityError";
10
+ this.code = code;
11
+ this.details = { ...details, code };
12
+ }
13
+ }
14
+ class JsonlRunRecorder {
15
+ runId;
16
+ conversationId;
17
+ artifactDir;
18
+ clock;
19
+ maxStringBytes;
20
+ startedAt;
21
+ startedAtIso;
22
+ events = [];
23
+ constructor(options) {
24
+ this.runId = normalizeId(options.runId, "runId");
25
+ this.conversationId = normalizeId(options.conversationId, "conversationId");
26
+ if (typeof options.artifactDir !== "string" || options.artifactDir.trim().length === 0) {
27
+ throw new ObservabilityError("invalid_recorder_options", "artifactDir must be a non-empty path.");
28
+ }
29
+ if (options.maxStringBytes !== undefined && (!Number.isInteger(options.maxStringBytes) || options.maxStringBytes < 64)) {
30
+ throw new ObservabilityError("invalid_recorder_options", "maxStringBytes must be an integer of at least 64.");
31
+ }
32
+ this.artifactDir = resolve(options.artifactDir);
33
+ this.clock = options.clock ?? (() => Date.now());
34
+ this.maxStringBytes = options.maxStringBytes ?? DEFAULT_MAX_STRING_BYTES;
35
+ this.startedAt = this.clock();
36
+ this.startedAtIso = new Date(this.startedAt).toISOString();
37
+ }
38
+ async start() {
39
+ return await this.writeArtifacts(this.buildSummary("running", undefined, {}));
40
+ }
41
+ onEvent(event) {
42
+ this.events.push(redactJsonValue(event, this.maxStringBytes));
43
+ }
44
+ async finish(result) {
45
+ const status = result.cancelled === true ? "cancelled" : runtimeFailureKind(result) === undefined ? "succeeded" : "failed";
46
+ const baseSummary = this.buildSummary(status, runtimeFailureKind(result), result);
47
+ return await this.writeArtifacts(baseSummary);
48
+ }
49
+ async fail(error) {
50
+ const failureKind = errorFailureKind(error);
51
+ const summary = this.buildSummary("failed", failureKind, {
52
+ diagnostics: {
53
+ error: redactJsonValue(errorToJson(error), this.maxStringBytes),
54
+ },
55
+ });
56
+ return await this.writeArtifacts(summary);
57
+ }
58
+ buildSummary(status, failureKind, result) {
59
+ const now = this.clock();
60
+ const nowIso = new Date(now).toISOString();
61
+ const summary = {
62
+ runId: this.runId,
63
+ conversationId: this.conversationId,
64
+ status,
65
+ ...(failureKind === undefined ? {} : { failureKind }),
66
+ startedAt: this.startedAtIso,
67
+ ...(status === "running" ? {} : { endedAt: nowIso }),
68
+ updatedAt: nowIso,
69
+ durationMs: Math.max(0, now - this.startedAt),
70
+ ...(result.usage === undefined ? {} : { usage: redactJsonValue(result.usage, this.maxStringBytes) }),
71
+ ...(result.cost === undefined ? {} : { cost: redactJsonValue(result.cost, this.maxStringBytes) }),
72
+ ...(result.providerSessionId === undefined ? {} : { providerSessionId: result.providerSessionId }),
73
+ eventCount: this.events.length,
74
+ artifactPaths: this.artifactPaths(),
75
+ ...(result.runtimeWarnings === undefined ? {} : { runtimeWarnings: redactJsonValue(result.runtimeWarnings, this.maxStringBytes) }),
76
+ ...(result.diagnostics === undefined ? {} : { diagnostics: redactJsonValue(result.diagnostics, this.maxStringBytes) }),
77
+ ...(result.capabilitiesUsed === undefined ? {} : { capabilitiesUsed: redactJsonValue(result.capabilitiesUsed, this.maxStringBytes) }),
78
+ };
79
+ return summary;
80
+ }
81
+ artifactPaths() {
82
+ const base = safeArtifactName(this.runId);
83
+ return [join(this.artifactDir, `${base}.events.jsonl`), join(this.artifactDir, `${base}.summary.json`)];
84
+ }
85
+ async writeArtifacts(summary) {
86
+ const [eventsPath, summaryPath] = summary.artifactPaths;
87
+ if (eventsPath === undefined || summaryPath === undefined) {
88
+ throw new ObservabilityError("artifact_write_failed", "Recorder artifact paths were not generated.");
89
+ }
90
+ try {
91
+ await mkdir(this.artifactDir, { recursive: true });
92
+ const eventsJsonl = this.events.map((event) => JSON.stringify(event)).join("\n");
93
+ await writeJsonAtomic(eventsPath, eventsJsonl.length === 0 ? "" : `${eventsJsonl}\n`);
94
+ await writeJsonAtomic(summaryPath, `${JSON.stringify(summary, null, 2)}\n`);
95
+ return summary;
96
+ }
97
+ catch (error) {
98
+ throw new ObservabilityError("artifact_write_failed", "Unable to write run artifacts.", {
99
+ cause: error instanceof Error ? error.message : String(error),
100
+ });
101
+ }
102
+ }
103
+ }
104
+ export function createJsonlRunRecorder(options) {
105
+ return new JsonlRunRecorder(options);
106
+ }
107
+ export function redactJsonValue(value, maxStringBytes = DEFAULT_MAX_STRING_BYTES) {
108
+ return redact(value, maxStringBytes, 0, undefined, new WeakSet());
109
+ }
110
+ function redact(value, maxStringBytes, depth, key, seen) {
111
+ if (key !== undefined && SENSITIVE_KEY_PATTERN.test(key)) {
112
+ return "[redacted]";
113
+ }
114
+ if (value === null || typeof value === "boolean" || typeof value === "number") {
115
+ return value;
116
+ }
117
+ if (typeof value === "string") {
118
+ return truncateString(value, maxStringBytes);
119
+ }
120
+ if (typeof value === "bigint") {
121
+ return value.toString();
122
+ }
123
+ if (typeof value === "undefined" || typeof value === "function" || typeof value === "symbol") {
124
+ return String(value);
125
+ }
126
+ if (value instanceof Error) {
127
+ return errorToJson(value);
128
+ }
129
+ if (depth >= 12) {
130
+ return "[max-depth]";
131
+ }
132
+ if (seen.has(value)) {
133
+ return "[circular]";
134
+ }
135
+ seen.add(value);
136
+ if (Array.isArray(value)) {
137
+ return value.map((item) => redact(item, maxStringBytes, depth + 1, undefined, seen));
138
+ }
139
+ const out = {};
140
+ for (const [entryKey, entryValue] of Object.entries(value)) {
141
+ out[entryKey] = redact(entryValue, maxStringBytes, depth + 1, entryKey, seen);
142
+ }
143
+ return out;
144
+ }
145
+ function truncateString(value, maxStringBytes) {
146
+ const bytes = Buffer.byteLength(value, "utf8");
147
+ if (bytes <= maxStringBytes) {
148
+ return value;
149
+ }
150
+ return `${value.slice(0, maxStringBytes)}…[truncated ${bytes - maxStringBytes} bytes]`;
151
+ }
152
+ function normalizeId(value, field) {
153
+ if (typeof value !== "string" || value.trim().length === 0) {
154
+ throw new ObservabilityError("invalid_recorder_options", `${field} must be a non-empty string.`, { field });
155
+ }
156
+ return value.trim();
157
+ }
158
+ function runtimeFailureKind(result) {
159
+ if (typeof result.failureKind === "string" && result.failureKind.trim().length > 0) {
160
+ return result.failureKind;
161
+ }
162
+ if (typeof result.error === "string" && result.error.trim().length > 0) {
163
+ return "runtime_error";
164
+ }
165
+ return undefined;
166
+ }
167
+ function errorFailureKind(error) {
168
+ if (typeof error === "object" && error !== null && "failureKind" in error) {
169
+ const failureKind = error.failureKind;
170
+ if (typeof failureKind === "string" && failureKind.trim().length > 0) {
171
+ return failureKind;
172
+ }
173
+ }
174
+ if (error instanceof Error && error.name.length > 0) {
175
+ return error.name;
176
+ }
177
+ return "exception";
178
+ }
179
+ function errorToJson(error) {
180
+ if (error instanceof Error) {
181
+ return {
182
+ name: error.name,
183
+ message: error.message,
184
+ };
185
+ }
186
+ return { message: String(error) };
187
+ }
188
+ //# sourceMappingURL=recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGtG,MAAM,qBAAqB,GAAG,4DAA4D,CAAC;AAK3F,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAyB;IAC7B,OAAO,CAA4B;IAE5C,YAAY,IAA4B,EAAE,OAAe,EAAE,UAAmC,EAAE;QAC9F,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;CACF;AAED,MAAM,gBAAgB;IACH,KAAK,CAAS;IACd,cAAc,CAAS;IACvB,WAAW,CAAS;IACpB,KAAK,CAAe;IACpB,cAAc,CAAS;IACvB,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,MAAM,GAAuB,EAAE,CAAC;IAEjD,YAAY,OAAgC;QAC1C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAC5E,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,kBAAkB,CAAC,0BAA0B,EAAE,uCAAuC,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC;YACvH,MAAM,IAAI,kBAAkB,CAAC,0BAA0B,EAAE,mDAAmD,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,CAAC,KAAuB;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAqB,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAyB;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3H,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAc;QACvB,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE;YACvD,WAAW,EAAE;gBACX,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC;aAChE;SACF,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEO,YAAY,CAAC,MAA4B,EAAE,WAA+B,EAAE,MAAyB;QAC3G,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAe;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,MAAM;YACN,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;YACrD,SAAS,EAAE,IAAI,CAAC,YAAY;YAC5B,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YACpD,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACpG,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACjG,GAAG,CAAC,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAClG,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC9B,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;YACnC,GAAG,CAAC,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAClI,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACtH,GAAG,CAAC,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;SACtI,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,aAAa;QACnB,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC;IAC1G,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAmB;QAC9C,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;QACxD,IAAI,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC1D,MAAM,IAAI,kBAAkB,CAAC,uBAAuB,EAAE,6CAA6C,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjF,MAAM,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;YACtF,MAAM,eAAe,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5E,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAAC,uBAAuB,EAAE,gCAAgC,EAAE;gBACtF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,cAAc,GAAG,wBAAwB;IACvF,OAAO,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,OAAO,EAAU,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,cAAsB,EAAE,KAAa,EAAE,GAAuB,EAAE,IAAqB;IACnH,IAAI,GAAG,KAAK,SAAS,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7F,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QACtF,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,cAAsB;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,eAAe,KAAK,GAAG,cAAc,SAAS,CAAC;AACzF,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,kBAAkB,CAAC,0BAA0B,EAAE,GAAG,KAAK,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAyB;IACnD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnF,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,aAAa,IAAI,KAAK,EAAE,CAAC;QAC1E,MAAM,WAAW,GAAI,KAA4C,CAAC,WAAW,CAAC;QAC9E,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { RegisterTraceSourceOptions, TraceRunDetail, TraceRunListOptions, TraceRunListResult, TraceSourceHandle, TraceSourceListResult, TraceSourceRegistryOptions } from "./types.js";
2
+ export type TraceSourceRegistryErrorCode = "invalid_registry_options" | "invalid_source_id" | "invalid_run_id" | "manifest_write_failed";
3
+ export type TraceSourceRegistryErrorDetails = Record<string, unknown> & {
4
+ readonly code: TraceSourceRegistryErrorCode;
5
+ };
6
+ export declare class TraceSourceRegistryError extends Error {
7
+ readonly code: TraceSourceRegistryErrorCode;
8
+ readonly details: TraceSourceRegistryErrorDetails;
9
+ constructor(code: TraceSourceRegistryErrorCode, message: string, details?: Record<string, unknown>);
10
+ }
11
+ export declare function registerTraceSource(options: RegisterTraceSourceOptions): Promise<TraceSourceHandle>;
12
+ export declare function listTraceSources(options: TraceSourceRegistryOptions): Promise<TraceSourceListResult>;
13
+ export declare function listTraceRuns(options: TraceRunListOptions): Promise<TraceRunListResult>;
14
+ export declare function readTraceRun(options: TraceRunListOptions, sourceId: string, runId: string): Promise<TraceRunDetail | undefined>;
15
+ //# sourceMappingURL=trace-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-sources.d.ts","sourceRoot":"","sources":["../src/trace-sources.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,cAAc,EAEd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EAEjB,qBAAqB,EAErB,0BAA0B,EAG3B,MAAM,YAAY,CAAC;AAOpB,MAAM,MAAM,4BAA4B,GACpC,0BAA0B,GAC1B,mBAAmB,GACnB,gBAAgB,GAChB,uBAAuB,CAAC;AAC5B,MAAM,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAExH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;gBAEtC,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAMvG;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4DzG;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ1G;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0B7F;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAWrC"}