@deepagents/context 4.3.0 → 5.0.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/README.md +31 -6
- package/dist/browser.d.ts +5 -3
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +69 -43
- package/dist/browser.js.map +3 -3
- package/dist/index.js +2221 -1892
- package/dist/index.js.map +4 -4
- package/dist/lib/advisor.d.ts +2 -2
- package/dist/lib/agent.d.ts +22 -10
- package/dist/lib/agent.d.ts.map +1 -1
- package/dist/lib/chain-summary.d.ts +8 -0
- package/dist/lib/chain-summary.d.ts.map +1 -1
- package/dist/lib/chat.d.ts +2 -2
- package/dist/lib/chat.d.ts.map +1 -1
- package/dist/lib/engine.d.ts +42 -70
- package/dist/lib/engine.d.ts.map +1 -1
- package/dist/lib/fragments/reminders/src/evaluate.d.ts +1 -1
- package/dist/lib/fragments/reminders/src/index.d.ts +1 -1
- package/dist/lib/fragments/reminders/src/index.d.ts.map +1 -1
- package/dist/lib/fragments/reminders/src/predicates/combinators.d.ts +8 -8
- package/dist/lib/fragments/reminders/src/predicates/combinators.d.ts.map +1 -1
- package/dist/lib/fragments/reminders/src/predicates/once.d.ts +1 -1
- package/dist/lib/fragments/reminders/src/predicates/once.d.ts.map +1 -1
- package/dist/lib/fragments/reminders/src/predicates/tool.d.ts +27 -2
- package/dist/lib/fragments/reminders/src/predicates/tool.d.ts.map +1 -1
- package/dist/lib/fragments/reminders/src/reminders.d.ts +9 -29
- package/dist/lib/fragments/reminders/src/reminders.d.ts.map +1 -1
- package/dist/lib/fragments/reminders/src/types.d.ts +39 -15
- package/dist/lib/fragments/reminders/src/types.d.ts.map +1 -1
- package/dist/lib/guardrail.d.ts +2 -2
- package/dist/lib/guardrail.d.ts.map +1 -1
- package/dist/lib/repair.d.ts +2 -2
- package/dist/lib/sandbox/agent-os-sandbox.d.ts +1 -1
- package/dist/lib/sandbox/agent-os-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/apple-container-sandbox.d.ts +2 -0
- package/dist/lib/sandbox/apple-container-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/bash-exception.d.ts +1 -1
- package/dist/lib/sandbox/bash-exception.d.ts.map +1 -1
- package/dist/lib/sandbox/bash-tool.d.ts +7 -42
- package/dist/lib/sandbox/bash-tool.d.ts.map +1 -1
- package/dist/lib/sandbox/container-sandbox.d.ts +2 -2
- package/dist/lib/sandbox/container-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/daytona-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/docker-sandbox.d.ts +2 -3
- package/dist/lib/sandbox/docker-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/index.d.ts +0 -3
- package/dist/lib/sandbox/index.d.ts.map +1 -1
- package/dist/lib/sandbox/installers/installer.d.ts +1 -1
- package/dist/lib/sandbox/installers/installer.d.ts.map +1 -1
- package/dist/lib/sandbox/microsandbox-sandbox.d.ts.map +1 -1
- package/dist/lib/sandbox/strace/file-changes.d.ts +4 -10
- package/dist/lib/sandbox/strace/file-changes.d.ts.map +1 -1
- package/dist/lib/sandbox/types.d.ts +79 -32
- package/dist/lib/sandbox/types.d.ts.map +1 -1
- package/dist/lib/skills/fragments.d.ts +11 -10
- package/dist/lib/skills/fragments.d.ts.map +1 -1
- package/dist/lib/skills/frontmatter.d.ts +16 -0
- package/dist/lib/skills/frontmatter.d.ts.map +1 -0
- package/dist/lib/skills/index.d.ts +11 -10
- package/dist/lib/skills/index.d.ts.map +1 -1
- package/dist/lib/skills/skill-reminder.d.ts +2 -2
- package/dist/lib/skills/skill-reminder.d.ts.map +1 -1
- package/dist/lib/skills/types.d.ts +5 -23
- package/dist/lib/skills/types.d.ts.map +1 -1
- package/dist/lib/store/postgres.store.d.ts +2 -2
- package/dist/lib/store/postgres.store.d.ts.map +1 -1
- package/dist/lib/store/sqlite.store.d.ts +2 -2
- package/dist/lib/store/sqlite.store.d.ts.map +1 -1
- package/dist/lib/store/sqlserver.store.d.ts +2 -2
- package/dist/lib/store/sqlserver.store.d.ts.map +1 -1
- package/dist/lib/store/store.d.ts +5 -4
- package/dist/lib/store/store.d.ts.map +1 -1
- package/dist/lib/stream/postgres.stream-store.d.ts +2 -1
- package/dist/lib/stream/postgres.stream-store.d.ts.map +1 -1
- package/dist/lib/stream/sqlite.stream-store.d.ts +2 -1
- package/dist/lib/stream/sqlite.stream-store.d.ts.map +1 -1
- package/dist/lib/stream/stream-manager.d.ts +4 -0
- package/dist/lib/stream/stream-manager.d.ts.map +1 -1
- package/dist/lib/stream/stream-store.d.ts +16 -0
- package/dist/lib/stream/stream-store.d.ts.map +1 -1
- package/dist/lib/telemetry/console-telemetry.d.ts +8 -0
- package/dist/lib/telemetry/console-telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry/create-telemetry-integration.d.ts +6 -0
- package/dist/lib/telemetry/create-telemetry-integration.d.ts.map +1 -0
- package/dist/lib/telemetry/file/file-telemetry.d.ts +9 -0
- package/dist/lib/telemetry/file/file-telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry/file/index.d.ts +2 -0
- package/dist/lib/telemetry/file/index.d.ts.map +1 -0
- package/dist/lib/telemetry/file/index.js +307 -0
- package/dist/lib/telemetry/file/index.js.map +7 -0
- package/dist/lib/telemetry/index.d.ts +3 -0
- package/dist/lib/telemetry/index.d.ts.map +1 -0
- package/dist/lib/telemetry/index.js +291 -0
- package/dist/lib/telemetry/index.js.map +7 -0
- package/dist/lib/telemetry/redact-telemetry-event.d.ts +2 -0
- package/dist/lib/telemetry/redact-telemetry-event.d.ts.map +1 -0
- package/dist/lib/telemetry/safe-serialize.d.ts +8 -0
- package/dist/lib/telemetry/safe-serialize.d.ts.map +1 -0
- package/dist/lib/tracing/index.js +47 -113
- package/dist/lib/tracing/index.js.map +2 -2
- package/dist/lib/tracing/openai-traces-integration.d.ts +2 -2
- package/dist/lib/tracing/openai-traces-integration.d.ts.map +1 -1
- package/dist/lib/tracing/serialization.d.ts.map +1 -1
- package/package.json +20 -9
- package/dist/lib/sandbox/abort.d.ts +0 -24
- package/dist/lib/sandbox/abort.d.ts.map +0 -1
- package/dist/lib/sandbox/bash-meta.d.ts +0 -10
- package/dist/lib/sandbox/bash-meta.d.ts.map +0 -1
- package/dist/lib/sandbox/upload-skills.d.ts +0 -20
- package/dist/lib/sandbox/upload-skills.d.ts.map +0 -1
- package/dist/lib/sandbox/walk.d.ts +0 -17
- package/dist/lib/sandbox/walk.d.ts.map +0 -1
- package/dist/lib/skills/loader.d.ts +0 -28
- package/dist/lib/skills/loader.d.ts.map +0 -1
- package/dist/spec/test/global-setup.d.ts +0 -4
- package/dist/spec/test/global-setup.d.ts.map +0 -1
- package/dist/spec/test/helpers/sqlite-container.d.ts +0 -19
- package/dist/spec/test/helpers/sqlite-container.d.ts.map +0 -1
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
// packages/context/src/lib/telemetry/file/file-telemetry.ts
|
|
2
|
+
import { appendFile, mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
|
|
5
|
+
// packages/context/src/lib/telemetry/redact-telemetry-event.ts
|
|
6
|
+
var REDACTED = "[Redacted]";
|
|
7
|
+
var INPUT_FIELDS = [
|
|
8
|
+
"system",
|
|
9
|
+
"prompt",
|
|
10
|
+
"instructions",
|
|
11
|
+
"messages",
|
|
12
|
+
"tools",
|
|
13
|
+
"toolChoice",
|
|
14
|
+
"activeTools",
|
|
15
|
+
"toolOrder",
|
|
16
|
+
"headers",
|
|
17
|
+
"providerOptions",
|
|
18
|
+
"runtimeContext",
|
|
19
|
+
"toolsContext",
|
|
20
|
+
"toolContext",
|
|
21
|
+
"promptMessages",
|
|
22
|
+
"stepTools",
|
|
23
|
+
"stepToolChoice",
|
|
24
|
+
"request",
|
|
25
|
+
"values",
|
|
26
|
+
"value",
|
|
27
|
+
"query",
|
|
28
|
+
"documents",
|
|
29
|
+
"schema",
|
|
30
|
+
"schemaDescription",
|
|
31
|
+
"schemaName"
|
|
32
|
+
];
|
|
33
|
+
var OUTPUT_FIELDS = [
|
|
34
|
+
"content",
|
|
35
|
+
"text",
|
|
36
|
+
"reasoning",
|
|
37
|
+
"reasoningText",
|
|
38
|
+
"files",
|
|
39
|
+
"sources",
|
|
40
|
+
"toolCalls",
|
|
41
|
+
"staticToolCalls",
|
|
42
|
+
"dynamicToolCalls",
|
|
43
|
+
"toolResults",
|
|
44
|
+
"staticToolResults",
|
|
45
|
+
"dynamicToolResults",
|
|
46
|
+
"response",
|
|
47
|
+
"responseMessages",
|
|
48
|
+
"providerMetadata",
|
|
49
|
+
"steps",
|
|
50
|
+
"finalStep",
|
|
51
|
+
"object",
|
|
52
|
+
"objectText",
|
|
53
|
+
"embedding",
|
|
54
|
+
"embeddings",
|
|
55
|
+
"ranking",
|
|
56
|
+
"rankings",
|
|
57
|
+
"results",
|
|
58
|
+
"error"
|
|
59
|
+
];
|
|
60
|
+
var OUTPUT_SPECIFICATION_EVENTS = /* @__PURE__ */ new Set([
|
|
61
|
+
"onStart",
|
|
62
|
+
"onStepStart",
|
|
63
|
+
"onObjectStepStart"
|
|
64
|
+
]);
|
|
65
|
+
function redactTelemetryEvent(event, data) {
|
|
66
|
+
if (!isRecord(data)) return data;
|
|
67
|
+
const recordInputs = data.recordInputs !== false;
|
|
68
|
+
const recordOutputs = data.recordOutputs !== false;
|
|
69
|
+
if (recordInputs && recordOutputs) return data;
|
|
70
|
+
const redacted = { ...data };
|
|
71
|
+
if (!recordInputs) {
|
|
72
|
+
redactFields(redacted, INPUT_FIELDS);
|
|
73
|
+
if (OUTPUT_SPECIFICATION_EVENTS.has(event) && Object.hasOwn(redacted, "output")) {
|
|
74
|
+
redacted.output = REDACTED;
|
|
75
|
+
}
|
|
76
|
+
if (Object.hasOwn(redacted, "toolCall")) {
|
|
77
|
+
redacted.toolCall = redactToolCallInput(redacted.toolCall);
|
|
78
|
+
}
|
|
79
|
+
if (Object.hasOwn(redacted, "toolOutput")) {
|
|
80
|
+
redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);
|
|
81
|
+
}
|
|
82
|
+
if (Object.hasOwn(redacted, "steps")) {
|
|
83
|
+
redacted.steps = redactStepInputs(redacted.steps);
|
|
84
|
+
}
|
|
85
|
+
if (Object.hasOwn(redacted, "finalStep")) {
|
|
86
|
+
redacted.finalStep = redactStepInputs(redacted.finalStep);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!recordOutputs) {
|
|
90
|
+
redactFields(redacted, OUTPUT_FIELDS);
|
|
91
|
+
if (!OUTPUT_SPECIFICATION_EVENTS.has(event) && Object.hasOwn(redacted, "output")) {
|
|
92
|
+
redacted.output = REDACTED;
|
|
93
|
+
}
|
|
94
|
+
if (Object.hasOwn(redacted, "toolOutput")) {
|
|
95
|
+
redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return redacted;
|
|
99
|
+
}
|
|
100
|
+
function redactFields(value, fields) {
|
|
101
|
+
for (const field of fields) {
|
|
102
|
+
if (Object.hasOwn(value, field)) value[field] = REDACTED;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function redactToolCallInput(value) {
|
|
106
|
+
if (!isRecord(value) || !Object.hasOwn(value, "input")) return value;
|
|
107
|
+
return { ...value, input: REDACTED };
|
|
108
|
+
}
|
|
109
|
+
function redactToolOutput(value, redactInput, redactOutput) {
|
|
110
|
+
if (!isRecord(value)) return value;
|
|
111
|
+
const redacted = { ...value };
|
|
112
|
+
if (redactInput && Object.hasOwn(redacted, "input")) {
|
|
113
|
+
redacted.input = REDACTED;
|
|
114
|
+
}
|
|
115
|
+
if (redactOutput) {
|
|
116
|
+
if (Object.hasOwn(redacted, "output")) redacted.output = REDACTED;
|
|
117
|
+
if (Object.hasOwn(redacted, "error")) redacted.error = REDACTED;
|
|
118
|
+
}
|
|
119
|
+
return redacted;
|
|
120
|
+
}
|
|
121
|
+
function redactStepInputs(value) {
|
|
122
|
+
if (Array.isArray(value)) return value.map(redactStepInputs);
|
|
123
|
+
if (!isRecord(value)) return value;
|
|
124
|
+
const redacted = { ...value };
|
|
125
|
+
redactFields(redacted, INPUT_FIELDS);
|
|
126
|
+
return redacted;
|
|
127
|
+
}
|
|
128
|
+
function isRecord(value) {
|
|
129
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// packages/context/src/lib/telemetry/create-telemetry-integration.ts
|
|
133
|
+
function createTelemetryIntegration(write) {
|
|
134
|
+
const emit = (level, event, data) => write(level, event, redactTelemetryEvent(event, data));
|
|
135
|
+
const log = (event, data) => emit("log", event, data);
|
|
136
|
+
return {
|
|
137
|
+
onStart: (event) => log("onStart", event),
|
|
138
|
+
onStepStart: (event) => log("onStepStart", event),
|
|
139
|
+
onLanguageModelCallStart: (event) => log("onLanguageModelCallStart", event),
|
|
140
|
+
onLanguageModelCallEnd: (event) => log("onLanguageModelCallEnd", event),
|
|
141
|
+
onToolExecutionStart: (event) => log("onToolExecutionStart", event),
|
|
142
|
+
onToolExecutionEnd: (event) => log("onToolExecutionEnd", event),
|
|
143
|
+
onStepEnd: (event) => log("onStepEnd", event),
|
|
144
|
+
onObjectStepStart: (event) => log("onObjectStepStart", event),
|
|
145
|
+
onObjectStepEnd: (event) => log("onObjectStepEnd", event),
|
|
146
|
+
onEmbedStart: (event) => log("onEmbedStart", event),
|
|
147
|
+
onEmbedEnd: (event) => log("onEmbedEnd", event),
|
|
148
|
+
onRerankStart: (event) => log("onRerankStart", event),
|
|
149
|
+
onRerankEnd: (event) => log("onRerankEnd", event),
|
|
150
|
+
onEnd: (event) => log("onEnd", event),
|
|
151
|
+
onAbort: (event) => log("onAbort", event),
|
|
152
|
+
onError: (error) => emit("error", "onError", error)
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// packages/context/src/lib/telemetry/safe-serialize.ts
|
|
157
|
+
function createTelemetryLogRecord(event, data, includeTimestamp) {
|
|
158
|
+
return {
|
|
159
|
+
...includeTimestamp ? { timestamp: (/* @__PURE__ */ new Date()).toISOString() } : {},
|
|
160
|
+
event,
|
|
161
|
+
data: normalizeTelemetryValue(data)
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
function stringifyTelemetryLogRecord(record, indentation) {
|
|
165
|
+
return JSON.stringify(record, null, indentation);
|
|
166
|
+
}
|
|
167
|
+
function normalizeTelemetryValue(value) {
|
|
168
|
+
return normalize(value, /* @__PURE__ */ new WeakSet());
|
|
169
|
+
}
|
|
170
|
+
function normalize(value, ancestors) {
|
|
171
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
if (typeof value === "number") {
|
|
175
|
+
if (Number.isNaN(value)) return "[NaN]";
|
|
176
|
+
if (value === Infinity) return "[Infinity]";
|
|
177
|
+
if (value === -Infinity) return "[-Infinity]";
|
|
178
|
+
if (Object.is(value, -0)) return "[-0]";
|
|
179
|
+
return value;
|
|
180
|
+
}
|
|
181
|
+
if (typeof value === "undefined") return "[Undefined]";
|
|
182
|
+
if (typeof value === "bigint") return `${value}n`;
|
|
183
|
+
if (typeof value === "symbol") return String(value);
|
|
184
|
+
if (typeof value === "function") {
|
|
185
|
+
return `[Function${value.name ? ` ${value.name}` : ""}]`;
|
|
186
|
+
}
|
|
187
|
+
if (ancestors.has(value)) return "[Circular]";
|
|
188
|
+
ancestors.add(value);
|
|
189
|
+
try {
|
|
190
|
+
if (value instanceof Error) return normalizeError(value, ancestors);
|
|
191
|
+
if (value instanceof Date) {
|
|
192
|
+
return Number.isNaN(value.getTime()) ? "[Invalid Date]" : value.toISOString();
|
|
193
|
+
}
|
|
194
|
+
if (value instanceof RegExp) return String(value);
|
|
195
|
+
if (value instanceof URL) return value.href;
|
|
196
|
+
if (value instanceof Map) {
|
|
197
|
+
return {
|
|
198
|
+
$type: "Map",
|
|
199
|
+
entries: [...value.entries()].map(([key, entryValue]) => [
|
|
200
|
+
normalize(key, ancestors),
|
|
201
|
+
normalize(entryValue, ancestors)
|
|
202
|
+
])
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (value instanceof Set) {
|
|
206
|
+
return {
|
|
207
|
+
$type: "Set",
|
|
208
|
+
values: [...value].map((entry) => normalize(entry, ancestors))
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
if (value instanceof ArrayBuffer) {
|
|
212
|
+
return {
|
|
213
|
+
$type: "ArrayBuffer",
|
|
214
|
+
values: [...new Uint8Array(value)]
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (ArrayBuffer.isView(value)) {
|
|
218
|
+
const bytes = new Uint8Array(
|
|
219
|
+
value.buffer,
|
|
220
|
+
value.byteOffset,
|
|
221
|
+
value.byteLength
|
|
222
|
+
);
|
|
223
|
+
return {
|
|
224
|
+
$type: value.constructor.name,
|
|
225
|
+
values: [...bytes]
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (Array.isArray(value)) {
|
|
229
|
+
return value.map((entry) => normalize(entry, ancestors));
|
|
230
|
+
}
|
|
231
|
+
return normalizeObject(value, ancestors);
|
|
232
|
+
} catch (error) {
|
|
233
|
+
return `[Unserializable: ${errorMessage(error)}]`;
|
|
234
|
+
} finally {
|
|
235
|
+
ancestors.delete(value);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function normalizeError(error, ancestors) {
|
|
239
|
+
const normalized = /* @__PURE__ */ Object.create(null);
|
|
240
|
+
normalized.name = error.name;
|
|
241
|
+
normalized.message = error.message;
|
|
242
|
+
if (error.stack != null) normalized.stack = error.stack;
|
|
243
|
+
if (error.cause !== void 0) {
|
|
244
|
+
normalized.cause = normalize(error.cause, ancestors);
|
|
245
|
+
}
|
|
246
|
+
for (const [key, descriptor] of Object.entries(
|
|
247
|
+
Object.getOwnPropertyDescriptors(error)
|
|
248
|
+
)) {
|
|
249
|
+
if (["name", "message", "stack", "cause"].includes(key)) continue;
|
|
250
|
+
normalized[key] = normalizeDescriptor(descriptor, ancestors);
|
|
251
|
+
}
|
|
252
|
+
return normalized;
|
|
253
|
+
}
|
|
254
|
+
function normalizeObject(value, ancestors) {
|
|
255
|
+
const normalized = /* @__PURE__ */ Object.create(null);
|
|
256
|
+
const prototype = Object.getPrototypeOf(value);
|
|
257
|
+
const typeName = prototype?.constructor?.name;
|
|
258
|
+
if (typeName && typeName !== "Object") normalized.$type = typeName;
|
|
259
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
260
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
261
|
+
if (descriptor == null) continue;
|
|
262
|
+
normalized[typeof key === "symbol" ? String(key) : key] = normalizeDescriptor(descriptor, ancestors);
|
|
263
|
+
}
|
|
264
|
+
return normalized;
|
|
265
|
+
}
|
|
266
|
+
function normalizeDescriptor(descriptor, ancestors) {
|
|
267
|
+
if ("value" in descriptor) return normalize(descriptor.value, ancestors);
|
|
268
|
+
const accessors = [
|
|
269
|
+
descriptor.get == null ? null : "Getter",
|
|
270
|
+
descriptor.set == null ? null : "Setter"
|
|
271
|
+
].filter(Boolean);
|
|
272
|
+
return `[${accessors.join("/")}]`;
|
|
273
|
+
}
|
|
274
|
+
function errorMessage(error) {
|
|
275
|
+
return error instanceof Error ? error.message : String(error);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// packages/context/src/lib/telemetry/file/file-telemetry.ts
|
|
279
|
+
function createFileTelemetry(options) {
|
|
280
|
+
const includeTimestamp = options.includeTimestamp ?? true;
|
|
281
|
+
const reportWriteError = async (error) => {
|
|
282
|
+
try {
|
|
283
|
+
await options.onWriteError?.(error);
|
|
284
|
+
} catch {
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
const initialize = mkdir(dirname(options.path), { recursive: true }).then(async () => {
|
|
288
|
+
if (options.append === false) await writeFile(options.path, "");
|
|
289
|
+
}).catch(reportWriteError);
|
|
290
|
+
let queue = initialize;
|
|
291
|
+
const write = (_level, event, data) => {
|
|
292
|
+
const record = createTelemetryLogRecord(event, data, includeTimestamp);
|
|
293
|
+
const line = `${stringifyTelemetryLogRecord(record)}
|
|
294
|
+
`;
|
|
295
|
+
const pendingWrite = queue.then(async () => {
|
|
296
|
+
await appendFile(options.path, line);
|
|
297
|
+
});
|
|
298
|
+
queue = pendingWrite.catch(() => {
|
|
299
|
+
});
|
|
300
|
+
return pendingWrite.catch(reportWriteError);
|
|
301
|
+
};
|
|
302
|
+
return createTelemetryIntegration(write);
|
|
303
|
+
}
|
|
304
|
+
export {
|
|
305
|
+
createFileTelemetry
|
|
306
|
+
};
|
|
307
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/lib/telemetry/file/file-telemetry.ts", "../../../../src/lib/telemetry/redact-telemetry-event.ts", "../../../../src/lib/telemetry/create-telemetry-integration.ts", "../../../../src/lib/telemetry/safe-serialize.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Telemetry } from 'ai';\nimport { appendFile, mkdir, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\n\nimport { createTelemetryIntegration } from '../create-telemetry-integration.ts';\nimport {\n createTelemetryLogRecord,\n stringifyTelemetryLogRecord,\n} from '../safe-serialize.ts';\n\nexport interface FileTelemetryOptions {\n path: string;\n includeTimestamp?: boolean;\n append?: boolean;\n onWriteError?: (error: unknown) => void | PromiseLike<void>;\n}\n\nexport function createFileTelemetry(options: FileTelemetryOptions): Telemetry {\n const includeTimestamp = options.includeTimestamp ?? true;\n const reportWriteError = async (error: unknown): Promise<void> => {\n try {\n await options.onWriteError?.(error);\n } catch {\n // Telemetry must never affect the observed operation.\n }\n };\n const initialize = mkdir(dirname(options.path), { recursive: true })\n .then(async () => {\n if (options.append === false) await writeFile(options.path, '');\n })\n .catch(reportWriteError);\n let queue: Promise<void> = initialize;\n\n const write = (\n _level: 'log' | 'error',\n event: string,\n data: unknown,\n ): Promise<void> => {\n const record = createTelemetryLogRecord(event, data, includeTimestamp);\n const line = `${stringifyTelemetryLogRecord(record)}\\n`;\n const pendingWrite = queue.then(async () => {\n await appendFile(options.path, line);\n });\n queue = pendingWrite.catch(() => {});\n return pendingWrite.catch(reportWriteError);\n };\n\n return createTelemetryIntegration(write);\n}\n", "const REDACTED = '[Redacted]';\n\nconst INPUT_FIELDS = [\n 'system',\n 'prompt',\n 'instructions',\n 'messages',\n 'tools',\n 'toolChoice',\n 'activeTools',\n 'toolOrder',\n 'headers',\n 'providerOptions',\n 'runtimeContext',\n 'toolsContext',\n 'toolContext',\n 'promptMessages',\n 'stepTools',\n 'stepToolChoice',\n 'request',\n 'values',\n 'value',\n 'query',\n 'documents',\n 'schema',\n 'schemaDescription',\n 'schemaName',\n] as const;\n\nconst OUTPUT_FIELDS = [\n 'content',\n 'text',\n 'reasoning',\n 'reasoningText',\n 'files',\n 'sources',\n 'toolCalls',\n 'staticToolCalls',\n 'dynamicToolCalls',\n 'toolResults',\n 'staticToolResults',\n 'dynamicToolResults',\n 'response',\n 'responseMessages',\n 'providerMetadata',\n 'steps',\n 'finalStep',\n 'object',\n 'objectText',\n 'embedding',\n 'embeddings',\n 'ranking',\n 'rankings',\n 'results',\n 'error',\n] as const;\n\nconst OUTPUT_SPECIFICATION_EVENTS = new Set([\n 'onStart',\n 'onStepStart',\n 'onObjectStepStart',\n]);\n\nexport function redactTelemetryEvent(event: string, data: unknown): unknown {\n if (!isRecord(data)) return data;\n const recordInputs = data.recordInputs !== false;\n const recordOutputs = data.recordOutputs !== false;\n if (recordInputs && recordOutputs) return data;\n\n const redacted = { ...data };\n if (!recordInputs) {\n redactFields(redacted, INPUT_FIELDS);\n if (\n OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolCall')) {\n redacted.toolCall = redactToolCallInput(redacted.toolCall);\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);\n }\n if (Object.hasOwn(redacted, 'steps')) {\n redacted.steps = redactStepInputs(redacted.steps);\n }\n if (Object.hasOwn(redacted, 'finalStep')) {\n redacted.finalStep = redactStepInputs(redacted.finalStep);\n }\n }\n if (!recordOutputs) {\n redactFields(redacted, OUTPUT_FIELDS);\n if (\n !OUTPUT_SPECIFICATION_EVENTS.has(event) &&\n Object.hasOwn(redacted, 'output')\n ) {\n redacted.output = REDACTED;\n }\n if (Object.hasOwn(redacted, 'toolOutput')) {\n redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);\n }\n }\n return redacted;\n}\n\nfunction redactFields(\n value: Record<string, unknown>,\n fields: readonly string[],\n): void {\n for (const field of fields) {\n if (Object.hasOwn(value, field)) value[field] = REDACTED;\n }\n}\n\nfunction redactToolCallInput(value: unknown): unknown {\n if (!isRecord(value) || !Object.hasOwn(value, 'input')) return value;\n return { ...value, input: REDACTED };\n}\n\nfunction redactToolOutput(\n value: unknown,\n redactInput: boolean,\n redactOutput: boolean,\n): unknown {\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n if (redactInput && Object.hasOwn(redacted, 'input')) {\n redacted.input = REDACTED;\n }\n if (redactOutput) {\n if (Object.hasOwn(redacted, 'output')) redacted.output = REDACTED;\n if (Object.hasOwn(redacted, 'error')) redacted.error = REDACTED;\n }\n return redacted;\n}\n\nfunction redactStepInputs(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactStepInputs);\n if (!isRecord(value)) return value;\n const redacted = { ...value };\n redactFields(redacted, INPUT_FIELDS);\n return redacted;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n", "import type { Telemetry } from 'ai';\n\nimport { redactTelemetryEvent } from './redact-telemetry-event.ts';\n\ntype TelemetryLogLevel = 'log' | 'error';\n\ntype TelemetryEventWriter = (\n level: TelemetryLogLevel,\n event: string,\n data: unknown,\n) => void | PromiseLike<void>;\n\nexport function createTelemetryIntegration(\n write: TelemetryEventWriter,\n): Telemetry {\n const emit = (level: TelemetryLogLevel, event: string, data: unknown) =>\n write(level, event, redactTelemetryEvent(event, data));\n const log = (event: string, data: unknown) => emit('log', event, data);\n\n return {\n onStart: (event) => log('onStart', event),\n onStepStart: (event) => log('onStepStart', event),\n onLanguageModelCallStart: (event) => log('onLanguageModelCallStart', event),\n onLanguageModelCallEnd: (event) => log('onLanguageModelCallEnd', event),\n onToolExecutionStart: (event) => log('onToolExecutionStart', event),\n onToolExecutionEnd: (event) => log('onToolExecutionEnd', event),\n onStepEnd: (event) => log('onStepEnd', event),\n onObjectStepStart: (event) => log('onObjectStepStart', event),\n onObjectStepEnd: (event) => log('onObjectStepEnd', event),\n onEmbedStart: (event) => log('onEmbedStart', event),\n onEmbedEnd: (event) => log('onEmbedEnd', event),\n onRerankStart: (event) => log('onRerankStart', event),\n onRerankEnd: (event) => log('onRerankEnd', event),\n onEnd: (event) => log('onEnd', event),\n onAbort: (event) => log('onAbort', event),\n onError: (error) => emit('error', 'onError', error),\n };\n}\n", "export interface TelemetryLogRecord {\n timestamp?: string;\n event: string;\n data: unknown;\n}\n\nexport function createTelemetryLogRecord(\n event: string,\n data: unknown,\n includeTimestamp: boolean,\n): TelemetryLogRecord {\n return {\n ...(includeTimestamp ? { timestamp: new Date().toISOString() } : {}),\n event,\n data: normalizeTelemetryValue(data),\n };\n}\n\nexport function stringifyTelemetryLogRecord(\n record: TelemetryLogRecord,\n indentation?: number,\n): string {\n return JSON.stringify(record, null, indentation);\n}\n\nfunction normalizeTelemetryValue(value: unknown): unknown {\n return normalize(value, new WeakSet());\n}\n\nfunction normalize(value: unknown, ancestors: WeakSet<object>): unknown {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return '[NaN]';\n if (value === Infinity) return '[Infinity]';\n if (value === -Infinity) return '[-Infinity]';\n if (Object.is(value, -0)) return '[-0]';\n return value;\n }\n if (typeof value === 'undefined') return '[Undefined]';\n if (typeof value === 'bigint') return `${value}n`;\n if (typeof value === 'symbol') return String(value);\n if (typeof value === 'function') {\n return `[Function${value.name ? ` ${value.name}` : ''}]`;\n }\n if (ancestors.has(value)) return '[Circular]';\n\n ancestors.add(value);\n try {\n if (value instanceof Error) return normalizeError(value, ancestors);\n if (value instanceof Date) {\n return Number.isNaN(value.getTime())\n ? '[Invalid Date]'\n : value.toISOString();\n }\n if (value instanceof RegExp) return String(value);\n if (value instanceof URL) return value.href;\n if (value instanceof Map) {\n return {\n $type: 'Map',\n entries: [...value.entries()].map(([key, entryValue]) => [\n normalize(key, ancestors),\n normalize(entryValue, ancestors),\n ]),\n };\n }\n if (value instanceof Set) {\n return {\n $type: 'Set',\n values: [...value].map((entry) => normalize(entry, ancestors)),\n };\n }\n if (value instanceof ArrayBuffer) {\n return {\n $type: 'ArrayBuffer',\n values: [...new Uint8Array(value)],\n };\n }\n if (ArrayBuffer.isView(value)) {\n const bytes = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n return {\n $type: value.constructor.name,\n values: [...bytes],\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalize(entry, ancestors));\n }\n return normalizeObject(value, ancestors);\n } catch (error) {\n return `[Unserializable: ${errorMessage(error)}]`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction normalizeError(\n error: Error,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n normalized.name = error.name;\n normalized.message = error.message;\n if (error.stack != null) normalized.stack = error.stack;\n if (error.cause !== undefined) {\n normalized.cause = normalize(error.cause, ancestors);\n }\n for (const [key, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(error),\n )) {\n if (['name', 'message', 'stack', 'cause'].includes(key)) continue;\n normalized[key] = normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeObject(\n value: object,\n ancestors: WeakSet<object>,\n): Record<string, unknown> {\n const normalized = Object.create(null) as Record<string, unknown>;\n const prototype = Object.getPrototypeOf(value) as {\n constructor?: { name?: string };\n } | null;\n const typeName = prototype?.constructor?.name;\n if (typeName && typeName !== 'Object') normalized.$type = typeName;\n\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor == null) continue;\n normalized[typeof key === 'symbol' ? String(key) : key] =\n normalizeDescriptor(descriptor, ancestors);\n }\n return normalized;\n}\n\nfunction normalizeDescriptor(\n descriptor: PropertyDescriptor,\n ancestors: WeakSet<object>,\n): unknown {\n if ('value' in descriptor) return normalize(descriptor.value, ancestors);\n const accessors = [\n descriptor.get == null ? null : 'Getter',\n descriptor.set == null ? null : 'Setter',\n ].filter(Boolean);\n return `[${accessors.join('/')}]`;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// packages/context/src/lib/telemetry/redact-telemetry-event.ts
|
|
2
|
+
var REDACTED = "[Redacted]";
|
|
3
|
+
var INPUT_FIELDS = [
|
|
4
|
+
"system",
|
|
5
|
+
"prompt",
|
|
6
|
+
"instructions",
|
|
7
|
+
"messages",
|
|
8
|
+
"tools",
|
|
9
|
+
"toolChoice",
|
|
10
|
+
"activeTools",
|
|
11
|
+
"toolOrder",
|
|
12
|
+
"headers",
|
|
13
|
+
"providerOptions",
|
|
14
|
+
"runtimeContext",
|
|
15
|
+
"toolsContext",
|
|
16
|
+
"toolContext",
|
|
17
|
+
"promptMessages",
|
|
18
|
+
"stepTools",
|
|
19
|
+
"stepToolChoice",
|
|
20
|
+
"request",
|
|
21
|
+
"values",
|
|
22
|
+
"value",
|
|
23
|
+
"query",
|
|
24
|
+
"documents",
|
|
25
|
+
"schema",
|
|
26
|
+
"schemaDescription",
|
|
27
|
+
"schemaName"
|
|
28
|
+
];
|
|
29
|
+
var OUTPUT_FIELDS = [
|
|
30
|
+
"content",
|
|
31
|
+
"text",
|
|
32
|
+
"reasoning",
|
|
33
|
+
"reasoningText",
|
|
34
|
+
"files",
|
|
35
|
+
"sources",
|
|
36
|
+
"toolCalls",
|
|
37
|
+
"staticToolCalls",
|
|
38
|
+
"dynamicToolCalls",
|
|
39
|
+
"toolResults",
|
|
40
|
+
"staticToolResults",
|
|
41
|
+
"dynamicToolResults",
|
|
42
|
+
"response",
|
|
43
|
+
"responseMessages",
|
|
44
|
+
"providerMetadata",
|
|
45
|
+
"steps",
|
|
46
|
+
"finalStep",
|
|
47
|
+
"object",
|
|
48
|
+
"objectText",
|
|
49
|
+
"embedding",
|
|
50
|
+
"embeddings",
|
|
51
|
+
"ranking",
|
|
52
|
+
"rankings",
|
|
53
|
+
"results",
|
|
54
|
+
"error"
|
|
55
|
+
];
|
|
56
|
+
var OUTPUT_SPECIFICATION_EVENTS = /* @__PURE__ */ new Set([
|
|
57
|
+
"onStart",
|
|
58
|
+
"onStepStart",
|
|
59
|
+
"onObjectStepStart"
|
|
60
|
+
]);
|
|
61
|
+
function redactTelemetryEvent(event, data) {
|
|
62
|
+
if (!isRecord(data)) return data;
|
|
63
|
+
const recordInputs = data.recordInputs !== false;
|
|
64
|
+
const recordOutputs = data.recordOutputs !== false;
|
|
65
|
+
if (recordInputs && recordOutputs) return data;
|
|
66
|
+
const redacted = { ...data };
|
|
67
|
+
if (!recordInputs) {
|
|
68
|
+
redactFields(redacted, INPUT_FIELDS);
|
|
69
|
+
if (OUTPUT_SPECIFICATION_EVENTS.has(event) && Object.hasOwn(redacted, "output")) {
|
|
70
|
+
redacted.output = REDACTED;
|
|
71
|
+
}
|
|
72
|
+
if (Object.hasOwn(redacted, "toolCall")) {
|
|
73
|
+
redacted.toolCall = redactToolCallInput(redacted.toolCall);
|
|
74
|
+
}
|
|
75
|
+
if (Object.hasOwn(redacted, "toolOutput")) {
|
|
76
|
+
redacted.toolOutput = redactToolOutput(redacted.toolOutput, true, false);
|
|
77
|
+
}
|
|
78
|
+
if (Object.hasOwn(redacted, "steps")) {
|
|
79
|
+
redacted.steps = redactStepInputs(redacted.steps);
|
|
80
|
+
}
|
|
81
|
+
if (Object.hasOwn(redacted, "finalStep")) {
|
|
82
|
+
redacted.finalStep = redactStepInputs(redacted.finalStep);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!recordOutputs) {
|
|
86
|
+
redactFields(redacted, OUTPUT_FIELDS);
|
|
87
|
+
if (!OUTPUT_SPECIFICATION_EVENTS.has(event) && Object.hasOwn(redacted, "output")) {
|
|
88
|
+
redacted.output = REDACTED;
|
|
89
|
+
}
|
|
90
|
+
if (Object.hasOwn(redacted, "toolOutput")) {
|
|
91
|
+
redacted.toolOutput = redactToolOutput(redacted.toolOutput, false, true);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return redacted;
|
|
95
|
+
}
|
|
96
|
+
function redactFields(value, fields) {
|
|
97
|
+
for (const field of fields) {
|
|
98
|
+
if (Object.hasOwn(value, field)) value[field] = REDACTED;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function redactToolCallInput(value) {
|
|
102
|
+
if (!isRecord(value) || !Object.hasOwn(value, "input")) return value;
|
|
103
|
+
return { ...value, input: REDACTED };
|
|
104
|
+
}
|
|
105
|
+
function redactToolOutput(value, redactInput, redactOutput) {
|
|
106
|
+
if (!isRecord(value)) return value;
|
|
107
|
+
const redacted = { ...value };
|
|
108
|
+
if (redactInput && Object.hasOwn(redacted, "input")) {
|
|
109
|
+
redacted.input = REDACTED;
|
|
110
|
+
}
|
|
111
|
+
if (redactOutput) {
|
|
112
|
+
if (Object.hasOwn(redacted, "output")) redacted.output = REDACTED;
|
|
113
|
+
if (Object.hasOwn(redacted, "error")) redacted.error = REDACTED;
|
|
114
|
+
}
|
|
115
|
+
return redacted;
|
|
116
|
+
}
|
|
117
|
+
function redactStepInputs(value) {
|
|
118
|
+
if (Array.isArray(value)) return value.map(redactStepInputs);
|
|
119
|
+
if (!isRecord(value)) return value;
|
|
120
|
+
const redacted = { ...value };
|
|
121
|
+
redactFields(redacted, INPUT_FIELDS);
|
|
122
|
+
return redacted;
|
|
123
|
+
}
|
|
124
|
+
function isRecord(value) {
|
|
125
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// packages/context/src/lib/telemetry/create-telemetry-integration.ts
|
|
129
|
+
function createTelemetryIntegration(write) {
|
|
130
|
+
const emit = (level, event, data) => write(level, event, redactTelemetryEvent(event, data));
|
|
131
|
+
const log = (event, data) => emit("log", event, data);
|
|
132
|
+
return {
|
|
133
|
+
onStart: (event) => log("onStart", event),
|
|
134
|
+
onStepStart: (event) => log("onStepStart", event),
|
|
135
|
+
onLanguageModelCallStart: (event) => log("onLanguageModelCallStart", event),
|
|
136
|
+
onLanguageModelCallEnd: (event) => log("onLanguageModelCallEnd", event),
|
|
137
|
+
onToolExecutionStart: (event) => log("onToolExecutionStart", event),
|
|
138
|
+
onToolExecutionEnd: (event) => log("onToolExecutionEnd", event),
|
|
139
|
+
onStepEnd: (event) => log("onStepEnd", event),
|
|
140
|
+
onObjectStepStart: (event) => log("onObjectStepStart", event),
|
|
141
|
+
onObjectStepEnd: (event) => log("onObjectStepEnd", event),
|
|
142
|
+
onEmbedStart: (event) => log("onEmbedStart", event),
|
|
143
|
+
onEmbedEnd: (event) => log("onEmbedEnd", event),
|
|
144
|
+
onRerankStart: (event) => log("onRerankStart", event),
|
|
145
|
+
onRerankEnd: (event) => log("onRerankEnd", event),
|
|
146
|
+
onEnd: (event) => log("onEnd", event),
|
|
147
|
+
onAbort: (event) => log("onAbort", event),
|
|
148
|
+
onError: (error) => emit("error", "onError", error)
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// packages/context/src/lib/telemetry/safe-serialize.ts
|
|
153
|
+
function createTelemetryLogRecord(event, data, includeTimestamp) {
|
|
154
|
+
return {
|
|
155
|
+
...includeTimestamp ? { timestamp: (/* @__PURE__ */ new Date()).toISOString() } : {},
|
|
156
|
+
event,
|
|
157
|
+
data: normalizeTelemetryValue(data)
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function stringifyTelemetryLogRecord(record, indentation) {
|
|
161
|
+
return JSON.stringify(record, null, indentation);
|
|
162
|
+
}
|
|
163
|
+
function normalizeTelemetryValue(value) {
|
|
164
|
+
return normalize(value, /* @__PURE__ */ new WeakSet());
|
|
165
|
+
}
|
|
166
|
+
function normalize(value, ancestors) {
|
|
167
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") {
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
if (typeof value === "number") {
|
|
171
|
+
if (Number.isNaN(value)) return "[NaN]";
|
|
172
|
+
if (value === Infinity) return "[Infinity]";
|
|
173
|
+
if (value === -Infinity) return "[-Infinity]";
|
|
174
|
+
if (Object.is(value, -0)) return "[-0]";
|
|
175
|
+
return value;
|
|
176
|
+
}
|
|
177
|
+
if (typeof value === "undefined") return "[Undefined]";
|
|
178
|
+
if (typeof value === "bigint") return `${value}n`;
|
|
179
|
+
if (typeof value === "symbol") return String(value);
|
|
180
|
+
if (typeof value === "function") {
|
|
181
|
+
return `[Function${value.name ? ` ${value.name}` : ""}]`;
|
|
182
|
+
}
|
|
183
|
+
if (ancestors.has(value)) return "[Circular]";
|
|
184
|
+
ancestors.add(value);
|
|
185
|
+
try {
|
|
186
|
+
if (value instanceof Error) return normalizeError(value, ancestors);
|
|
187
|
+
if (value instanceof Date) {
|
|
188
|
+
return Number.isNaN(value.getTime()) ? "[Invalid Date]" : value.toISOString();
|
|
189
|
+
}
|
|
190
|
+
if (value instanceof RegExp) return String(value);
|
|
191
|
+
if (value instanceof URL) return value.href;
|
|
192
|
+
if (value instanceof Map) {
|
|
193
|
+
return {
|
|
194
|
+
$type: "Map",
|
|
195
|
+
entries: [...value.entries()].map(([key, entryValue]) => [
|
|
196
|
+
normalize(key, ancestors),
|
|
197
|
+
normalize(entryValue, ancestors)
|
|
198
|
+
])
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
if (value instanceof Set) {
|
|
202
|
+
return {
|
|
203
|
+
$type: "Set",
|
|
204
|
+
values: [...value].map((entry) => normalize(entry, ancestors))
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
if (value instanceof ArrayBuffer) {
|
|
208
|
+
return {
|
|
209
|
+
$type: "ArrayBuffer",
|
|
210
|
+
values: [...new Uint8Array(value)]
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
if (ArrayBuffer.isView(value)) {
|
|
214
|
+
const bytes = new Uint8Array(
|
|
215
|
+
value.buffer,
|
|
216
|
+
value.byteOffset,
|
|
217
|
+
value.byteLength
|
|
218
|
+
);
|
|
219
|
+
return {
|
|
220
|
+
$type: value.constructor.name,
|
|
221
|
+
values: [...bytes]
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (Array.isArray(value)) {
|
|
225
|
+
return value.map((entry) => normalize(entry, ancestors));
|
|
226
|
+
}
|
|
227
|
+
return normalizeObject(value, ancestors);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
return `[Unserializable: ${errorMessage(error)}]`;
|
|
230
|
+
} finally {
|
|
231
|
+
ancestors.delete(value);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function normalizeError(error, ancestors) {
|
|
235
|
+
const normalized = /* @__PURE__ */ Object.create(null);
|
|
236
|
+
normalized.name = error.name;
|
|
237
|
+
normalized.message = error.message;
|
|
238
|
+
if (error.stack != null) normalized.stack = error.stack;
|
|
239
|
+
if (error.cause !== void 0) {
|
|
240
|
+
normalized.cause = normalize(error.cause, ancestors);
|
|
241
|
+
}
|
|
242
|
+
for (const [key, descriptor] of Object.entries(
|
|
243
|
+
Object.getOwnPropertyDescriptors(error)
|
|
244
|
+
)) {
|
|
245
|
+
if (["name", "message", "stack", "cause"].includes(key)) continue;
|
|
246
|
+
normalized[key] = normalizeDescriptor(descriptor, ancestors);
|
|
247
|
+
}
|
|
248
|
+
return normalized;
|
|
249
|
+
}
|
|
250
|
+
function normalizeObject(value, ancestors) {
|
|
251
|
+
const normalized = /* @__PURE__ */ Object.create(null);
|
|
252
|
+
const prototype = Object.getPrototypeOf(value);
|
|
253
|
+
const typeName = prototype?.constructor?.name;
|
|
254
|
+
if (typeName && typeName !== "Object") normalized.$type = typeName;
|
|
255
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
256
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
257
|
+
if (descriptor == null) continue;
|
|
258
|
+
normalized[typeof key === "symbol" ? String(key) : key] = normalizeDescriptor(descriptor, ancestors);
|
|
259
|
+
}
|
|
260
|
+
return normalized;
|
|
261
|
+
}
|
|
262
|
+
function normalizeDescriptor(descriptor, ancestors) {
|
|
263
|
+
if ("value" in descriptor) return normalize(descriptor.value, ancestors);
|
|
264
|
+
const accessors = [
|
|
265
|
+
descriptor.get == null ? null : "Getter",
|
|
266
|
+
descriptor.set == null ? null : "Setter"
|
|
267
|
+
].filter(Boolean);
|
|
268
|
+
return `[${accessors.join("/")}]`;
|
|
269
|
+
}
|
|
270
|
+
function errorMessage(error) {
|
|
271
|
+
return error instanceof Error ? error.message : String(error);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// packages/context/src/lib/telemetry/console-telemetry.ts
|
|
275
|
+
function createConsoleTelemetry(options = {}) {
|
|
276
|
+
const logger = options.logger ?? console;
|
|
277
|
+
const includeTimestamp = options.includeTimestamp ?? true;
|
|
278
|
+
const indentation = options.pretty ?? true ? 2 : void 0;
|
|
279
|
+
const write = (method, event, data) => {
|
|
280
|
+
const record = createTelemetryLogRecord(event, data, includeTimestamp);
|
|
281
|
+
try {
|
|
282
|
+
logger[method](stringifyTelemetryLogRecord(record, indentation));
|
|
283
|
+
} catch {
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
return createTelemetryIntegration(write);
|
|
287
|
+
}
|
|
288
|
+
export {
|
|
289
|
+
createConsoleTelemetry
|
|
290
|
+
};
|
|
291
|
+
//# sourceMappingURL=index.js.map
|