@vercel/agent-runs 0.0.0-stage → 0.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/LICENSE +202 -0
- package/NOTICE +77 -0
- package/README.md +251 -2
- package/dist/src/adapters/agent-transport.d.ts +9 -0
- package/dist/src/adapters/agent-transport.d.ts.map +1 -0
- package/dist/src/adapters/agent-transport.js +87 -0
- package/dist/src/adapters/agent-transport.js.map +1 -0
- package/dist/src/adapters/ai-sdk-payload.d.ts +16 -0
- package/dist/src/adapters/ai-sdk-payload.d.ts.map +1 -0
- package/dist/src/adapters/ai-sdk-payload.js +30 -0
- package/dist/src/adapters/ai-sdk-payload.js.map +1 -0
- package/dist/src/adapters/ai-sdk-telemetry.d.ts +15 -0
- package/dist/src/adapters/ai-sdk-telemetry.d.ts.map +1 -0
- package/dist/src/adapters/ai-sdk-telemetry.js +151 -0
- package/dist/src/adapters/ai-sdk-telemetry.js.map +1 -0
- package/dist/src/adapters/otel-error.d.ts +4 -0
- package/dist/src/adapters/otel-error.d.ts.map +1 -0
- package/dist/src/adapters/otel-error.js +32 -0
- package/dist/src/adapters/otel-error.js.map +1 -0
- package/dist/src/adapters/otel-ids.d.ts +20 -0
- package/dist/src/adapters/otel-ids.d.ts.map +1 -0
- package/dist/src/adapters/otel-ids.js +74 -0
- package/dist/src/adapters/otel-ids.js.map +1 -0
- package/dist/src/adapters/otel.d.ts +34 -0
- package/dist/src/adapters/otel.d.ts.map +1 -0
- package/dist/src/adapters/otel.js +147 -0
- package/dist/src/adapters/otel.js.map +1 -0
- package/dist/src/adapters/serialization.d.ts +37 -0
- package/dist/src/adapters/serialization.d.ts.map +1 -0
- package/dist/src/adapters/serialization.js +318 -0
- package/dist/src/adapters/serialization.js.map +1 -0
- package/dist/src/agent-run.d.ts +85 -0
- package/dist/src/agent-run.d.ts.map +1 -0
- package/dist/src/agent-run.js +213 -0
- package/dist/src/agent-run.js.map +1 -0
- package/dist/src/ai-sdk.d.ts +8 -0
- package/dist/src/ai-sdk.d.ts.map +1 -0
- package/dist/src/ai-sdk.js +8 -0
- package/dist/src/ai-sdk.js.map +1 -0
- package/dist/src/capture.d.ts +6 -0
- package/dist/src/capture.d.ts.map +1 -0
- package/dist/src/capture.js +9 -0
- package/dist/src/capture.js.map +1 -0
- package/dist/src/core/activation.d.ts +4 -0
- package/dist/src/core/activation.d.ts.map +1 -0
- package/dist/src/core/activation.js +31 -0
- package/dist/src/core/activation.js.map +1 -0
- package/dist/src/core/attributes.d.ts +15 -0
- package/dist/src/core/attributes.d.ts.map +1 -0
- package/dist/src/core/attributes.js +76 -0
- package/dist/src/core/attributes.js.map +1 -0
- package/dist/src/core/content-policy.d.ts +29 -0
- package/dist/src/core/content-policy.d.ts.map +1 -0
- package/dist/src/core/content-policy.js +94 -0
- package/dist/src/core/content-policy.js.map +1 -0
- package/dist/src/core/context.d.ts +4 -0
- package/dist/src/core/context.d.ts.map +1 -0
- package/dist/src/core/context.js +28 -0
- package/dist/src/core/context.js.map +1 -0
- package/dist/src/core/delegation.d.ts +14 -0
- package/dist/src/core/delegation.d.ts.map +1 -0
- package/dist/src/core/delegation.js +7 -0
- package/dist/src/core/delegation.js.map +1 -0
- package/dist/src/core/mcp.d.ts +25 -0
- package/dist/src/core/mcp.d.ts.map +1 -0
- package/dist/src/core/mcp.js +33 -0
- package/dist/src/core/mcp.js.map +1 -0
- package/dist/src/core/scopes.d.ts +60 -0
- package/dist/src/core/scopes.d.ts.map +1 -0
- package/dist/src/core/scopes.js +574 -0
- package/dist/src/core/scopes.js.map +1 -0
- package/dist/src/core/snapshot.d.ts +8 -0
- package/dist/src/core/snapshot.d.ts.map +1 -0
- package/dist/src/core/snapshot.js +207 -0
- package/dist/src/core/snapshot.js.map +1 -0
- package/dist/src/core/span-kinds.d.ts +13 -0
- package/dist/src/core/span-kinds.d.ts.map +1 -0
- package/dist/src/core/span-kinds.js +338 -0
- package/dist/src/core/span-kinds.js.map +1 -0
- package/dist/src/core/types.d.ts +298 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +2 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/core/writer.d.ts +16 -0
- package/dist/src/core/writer.d.ts.map +1 -0
- package/dist/src/core/writer.js +77 -0
- package/dist/src/core/writer.js.map +1 -0
- package/dist/src/delegation.d.ts +3 -0
- package/dist/src/delegation.d.ts.map +1 -0
- package/dist/src/delegation.js +3 -0
- package/dist/src/delegation.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/operations.d.ts +97 -0
- package/dist/src/operations.d.ts.map +1 -0
- package/dist/src/operations.js +185 -0
- package/dist/src/operations.js.map +1 -0
- package/dist/src/otel.d.ts +13 -0
- package/dist/src/otel.d.ts.map +1 -0
- package/dist/src/otel.js +13 -0
- package/dist/src/otel.js.map +1 -0
- package/package.json +75 -3
- package/src/adapters/agent-transport.ts +113 -0
- package/src/adapters/ai-sdk-payload.ts +44 -0
- package/src/adapters/ai-sdk-telemetry.ts +179 -0
- package/src/adapters/otel-error.ts +34 -0
- package/src/adapters/otel-ids.ts +82 -0
- package/src/adapters/otel.ts +232 -0
- package/src/adapters/serialization.ts +338 -0
- package/src/agent-run.ts +341 -0
- package/src/ai-sdk.ts +7 -0
- package/src/capture.ts +13 -0
- package/src/core/activation.ts +42 -0
- package/src/core/attributes.ts +85 -0
- package/src/core/content-policy.ts +116 -0
- package/src/core/context.ts +34 -0
- package/src/core/delegation.ts +20 -0
- package/src/core/mcp.ts +60 -0
- package/src/core/scopes.ts +761 -0
- package/src/core/snapshot.ts +245 -0
- package/src/core/span-kinds.ts +406 -0
- package/src/core/types.ts +304 -0
- package/src/core/writer.ts +135 -0
- package/src/delegation.ts +2 -0
- package/src/index.ts +44 -0
- package/src/operations.ts +342 -0
- package/src/otel.ts +18 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function modelUsage(usage) {
|
|
2
|
+
return Object.freeze({
|
|
3
|
+
inputTokens: usage.inputTokens,
|
|
4
|
+
outputTokens: usage.outputTokens,
|
|
5
|
+
inputTokenDetails: Object.freeze({
|
|
6
|
+
cacheReadTokens: usage.inputTokenDetails?.cacheReadTokens,
|
|
7
|
+
cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens,
|
|
8
|
+
}),
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export function modelContent(content) {
|
|
12
|
+
return content.flatMap((part) => {
|
|
13
|
+
if (part === null || typeof part !== "object" || !("type" in part))
|
|
14
|
+
return [];
|
|
15
|
+
const value = part;
|
|
16
|
+
if ((value.type === "text" || value.type === "reasoning") && typeof value.text === "string")
|
|
17
|
+
return [{ type: value.type, text: value.text }];
|
|
18
|
+
if (typeof value.toolCallId !== "string" || typeof value.toolName !== "string")
|
|
19
|
+
return [];
|
|
20
|
+
const tool = { callId: value.toolCallId, toolName: value.toolName, input: value.input };
|
|
21
|
+
if (value.type === "tool-call")
|
|
22
|
+
return [{ type: value.type, ...tool }];
|
|
23
|
+
if (value.type === "tool-result")
|
|
24
|
+
return [{ type: value.type, ...tool, output: value.output }];
|
|
25
|
+
if (value.type === "tool-error")
|
|
26
|
+
return [{ type: value.type, ...tool, error: value.error }];
|
|
27
|
+
return [];
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ai-sdk-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-payload.js","sourceRoot":"","sources":["../../../src/adapters/ai-sdk-payload.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC;YAC/B,eAAe,EAAE,KAAK,CAAC,iBAAiB,EAAE,eAAe;YACzD,gBAAgB,EAAE,KAAK,CAAC,iBAAiB,EAAE,gBAAgB;SAC5D,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAA0B;IACrD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAiB,EAAE;QAC7C,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,IAQb,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YACzF,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC1F,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACxF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/F,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5F,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Telemetry } from "ai";
|
|
2
|
+
import type { AgentRun, TurnInput } from "../agent-run.js";
|
|
3
|
+
export interface AiSdkTelemetryOptions {
|
|
4
|
+
/** The turn a generation records. Called once per AI SDK call. */
|
|
5
|
+
readonly turn: TurnInput | ((call: {
|
|
6
|
+
readonly callId: string;
|
|
7
|
+
}) => TurnInput);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* An AI SDK telemetry integration that records each generation as a turn.
|
|
11
|
+
* Pass it to `telemetry.integrations` of `generateText`, `streamText`, or an
|
|
12
|
+
* agent such as `HarnessAgent`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function aiSdkTelemetry(run: AgentRun, options: AiSdkTelemetryOptions): Telemetry;
|
|
15
|
+
//# sourceMappingURL=ai-sdk-telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-telemetry.d.ts","sourceRoot":"","sources":["../../../src/adapters/ai-sdk-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAW3D,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,SAAS,CAAC,CAAC;CAC/E;AAYD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAkJvF"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { modelContent, modelUsage } from "./ai-sdk-payload.js";
|
|
2
|
+
const ABANDONED = { outcome: "abandoned" };
|
|
3
|
+
/**
|
|
4
|
+
* An AI SDK telemetry integration that records each generation as a turn.
|
|
5
|
+
* Pass it to `telemetry.integrations` of `generateText`, `streamText`, or an
|
|
6
|
+
* agent such as `HarnessAgent`.
|
|
7
|
+
*/
|
|
8
|
+
export function aiSdkTelemetry(run, options) {
|
|
9
|
+
const generations = new Map();
|
|
10
|
+
function generation(callId) {
|
|
11
|
+
let state = generations.get(callId);
|
|
12
|
+
if (state === undefined) {
|
|
13
|
+
state = { startTimeMs: Date.now(), tools: new Map() };
|
|
14
|
+
generations.set(callId, state);
|
|
15
|
+
}
|
|
16
|
+
return state;
|
|
17
|
+
}
|
|
18
|
+
async function closeStep(state, failure) {
|
|
19
|
+
const result = failure === undefined ? ABANDONED : { outcome: "abandoned", failed: true, error: failure };
|
|
20
|
+
await (await state.model)?.complete(result);
|
|
21
|
+
for (const tool of state.tools.values())
|
|
22
|
+
await (await tool).complete(result);
|
|
23
|
+
state.model = undefined;
|
|
24
|
+
state.tools.clear();
|
|
25
|
+
const attempt = await state.attempt;
|
|
26
|
+
state.attempt = undefined;
|
|
27
|
+
if (failure === undefined)
|
|
28
|
+
await attempt?.complete();
|
|
29
|
+
else
|
|
30
|
+
await attempt?.fail(failure);
|
|
31
|
+
}
|
|
32
|
+
async function finish(callId, end, failure) {
|
|
33
|
+
const state = generations.get(callId);
|
|
34
|
+
generations.delete(callId);
|
|
35
|
+
if (state === undefined)
|
|
36
|
+
return;
|
|
37
|
+
await closeStep(state, failure);
|
|
38
|
+
const turn = await state.turn;
|
|
39
|
+
if (turn !== undefined)
|
|
40
|
+
await end(turn);
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
onStart(event) {
|
|
44
|
+
generation(event.callId);
|
|
45
|
+
},
|
|
46
|
+
async onStepStart(event) {
|
|
47
|
+
const state = generation(event.callId);
|
|
48
|
+
await closeStep(state);
|
|
49
|
+
state.turn ??= run.turn({
|
|
50
|
+
startTimeMs: state.startTimeMs,
|
|
51
|
+
...(typeof options.turn === "function"
|
|
52
|
+
? options.turn({ callId: event.callId })
|
|
53
|
+
: options.turn),
|
|
54
|
+
});
|
|
55
|
+
const turn = await state.turn;
|
|
56
|
+
state.attempt = turn.attempt({ stepIndex: event.stepNumber, attempt: 0 });
|
|
57
|
+
},
|
|
58
|
+
async onLanguageModelCallStart(event) {
|
|
59
|
+
const attempt = await generations.get(event.callId)?.attempt;
|
|
60
|
+
if (attempt === undefined)
|
|
61
|
+
return;
|
|
62
|
+
generations.get(event.callId).model = attempt.modelCall({
|
|
63
|
+
provider: event.provider,
|
|
64
|
+
modelId: event.modelId,
|
|
65
|
+
messages: event.messages,
|
|
66
|
+
instructions: event.instructions,
|
|
67
|
+
tools: event.tools,
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
async executeLanguageModelCall({ callId, execute }) {
|
|
71
|
+
const model = await generations.get(callId)?.model;
|
|
72
|
+
if (model === undefined || model.finished)
|
|
73
|
+
return execute();
|
|
74
|
+
try {
|
|
75
|
+
return await model.run(execute);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
await model.fail(error);
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
async onLanguageModelCallEnd(event) {
|
|
83
|
+
const state = generations.get(event.callId);
|
|
84
|
+
const model = await state?.model;
|
|
85
|
+
if (state === undefined || model === undefined)
|
|
86
|
+
return;
|
|
87
|
+
state.model = undefined;
|
|
88
|
+
await model.complete({
|
|
89
|
+
outcome: "completed",
|
|
90
|
+
result: {
|
|
91
|
+
finishReason: event.finishReason,
|
|
92
|
+
usage: modelUsage(event.usage),
|
|
93
|
+
responseId: event.responseId,
|
|
94
|
+
responseModelId: event.modelId,
|
|
95
|
+
content: modelContent(event.content),
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
},
|
|
99
|
+
async onToolExecutionStart(event) {
|
|
100
|
+
const state = generations.get(event.callId);
|
|
101
|
+
const attempt = await state?.attempt;
|
|
102
|
+
if (state === undefined || attempt === undefined)
|
|
103
|
+
return;
|
|
104
|
+
const call = event.toolCall;
|
|
105
|
+
state.tools.set(call.toolCallId, attempt.tool({ callId: call.toolCallId, name: call.toolName, arguments: call.input }));
|
|
106
|
+
},
|
|
107
|
+
async executeTool({ callId, toolCallId, execute }) {
|
|
108
|
+
const tool = await generations.get(callId)?.tools.get(toolCallId);
|
|
109
|
+
return tool === undefined || tool.finished ? execute() : tool.run(execute);
|
|
110
|
+
},
|
|
111
|
+
async onToolExecutionEnd(event) {
|
|
112
|
+
const state = generations.get(event.callId);
|
|
113
|
+
const tool = await state?.tools.get(event.toolCall.toolCallId);
|
|
114
|
+
if (state === undefined || tool === undefined)
|
|
115
|
+
return;
|
|
116
|
+
state.tools.delete(event.toolCall.toolCallId);
|
|
117
|
+
const output = event.toolOutput;
|
|
118
|
+
const completion = output.type === "tool-error"
|
|
119
|
+
? {
|
|
120
|
+
outcome: "failed",
|
|
121
|
+
errorType: output.error instanceof Error ? output.error.name : "tool_error",
|
|
122
|
+
error: output.error,
|
|
123
|
+
}
|
|
124
|
+
: { outcome: "completed", output: "output" in output ? output.output : undefined };
|
|
125
|
+
await tool.complete(completion);
|
|
126
|
+
},
|
|
127
|
+
async onStepEnd(event) {
|
|
128
|
+
const state = generations.get(event.callId);
|
|
129
|
+
if (state !== undefined)
|
|
130
|
+
await closeStep(state);
|
|
131
|
+
},
|
|
132
|
+
async onEnd(event) {
|
|
133
|
+
await finish(event.callId, (turn) => turn.complete({
|
|
134
|
+
outcome: "completed",
|
|
135
|
+
usage: "totalUsage" in event ? modelUsage(event.totalUsage) : undefined,
|
|
136
|
+
}));
|
|
137
|
+
},
|
|
138
|
+
async onAbort(event) {
|
|
139
|
+
await finish(event.callId, (turn) => turn.complete({ outcome: "cancelled" }));
|
|
140
|
+
},
|
|
141
|
+
async onError(value) {
|
|
142
|
+
// Some agents report the bare error; it then belongs to every open call.
|
|
143
|
+
const { callId, error } = value !== null && typeof value === "object" && "callId" in value && "error" in value
|
|
144
|
+
? value
|
|
145
|
+
: { callId: undefined, error: value };
|
|
146
|
+
for (const id of callId === undefined ? [...generations.keys()] : [callId])
|
|
147
|
+
await finish(id, (turn) => turn.fail(error), error);
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=ai-sdk-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk-telemetry.js","sourceRoot":"","sources":["../../../src/adapters/ai-sdk-telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Span } from "@opentelemetry/api";
|
|
2
|
+
/** Call with policy-projected errors; undefined retains failure status without content. */
|
|
3
|
+
export declare function recordAgentSpanError(span: Span, error: unknown, errorType?: string): void;
|
|
4
|
+
//# sourceMappingURL=otel-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-error.d.ts","sourceRoot":"","sources":["../../../src/adapters/otel-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAK/D,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CA2BzF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
2
|
+
import { boundedTraceError } from "./serialization.js";
|
|
3
|
+
import { truncateTelemetryText } from "./serialization.js";
|
|
4
|
+
import { contentAttribute, textContentAttribute } from "./serialization.js";
|
|
5
|
+
/** Call with policy-projected errors; undefined retains failure status without content. */
|
|
6
|
+
export function recordAgentSpanError(span, error, errorType) {
|
|
7
|
+
span.setAttribute("error.type", truncateTelemetryText(errorType ?? (error instanceof Error ? error.name : "_OTHER"), 128));
|
|
8
|
+
// A thrown Error keeps its own name; a wrapped value takes the error type.
|
|
9
|
+
const wrapped = error !== undefined && !(error instanceof Error);
|
|
10
|
+
if (wrapped) {
|
|
11
|
+
const serialized = contentAttribute(error);
|
|
12
|
+
const message = typeof error === "object" && error !== null ? Reflect.get(error, "message") : undefined;
|
|
13
|
+
const detail = typeof error === "string"
|
|
14
|
+
? textContentAttribute(error)
|
|
15
|
+
: typeof message === "string"
|
|
16
|
+
? textContentAttribute(serialized === undefined ? message : `${message}\n${serialized}`)
|
|
17
|
+
: serialized;
|
|
18
|
+
if (detail !== undefined)
|
|
19
|
+
error = new Error(detail);
|
|
20
|
+
}
|
|
21
|
+
if (error instanceof Error) {
|
|
22
|
+
const bounded = boundedTraceError(error);
|
|
23
|
+
if (wrapped && errorType !== undefined)
|
|
24
|
+
bounded.name = truncateTelemetryText(errorType, 128);
|
|
25
|
+
span.recordException(bounded);
|
|
26
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: bounded.message });
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=otel-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-error.js","sourceRoot":"","sources":["../../../src/adapters/otel-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAa,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE5E,2FAA2F;AAC3F,MAAM,UAAU,oBAAoB,CAAC,IAAU,EAAE,KAAc,EAAE,SAAkB;IACjF,IAAI,CAAC,YAAY,CACf,YAAY,EACZ,qBAAqB,CAAC,SAAS,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAC1F,CAAC;IACF,2EAA2E;IAC3E,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC;IACjE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,OAAO,OAAO,KAAK,QAAQ;gBAC3B,CAAC,CAAC,oBAAoB,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,UAAU,EAAE,CAAC;gBACxF,CAAC,CAAC,UAAU,CAAC;QACnB,IAAI,MAAM,KAAK,SAAS;YAAE,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,OAAO,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7F,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ID generator installed by the host OTel provider for reserved-ID emission. A span
|
|
3
|
+
* whose lifetime crosses durable worker boundaries (`invoke_agent`) is emitted
|
|
4
|
+
* at its terminal; priming the next span id lets that span carry the
|
|
5
|
+
* pre-allocated id its descendants already parented to.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AgentSpanIdGenerator {
|
|
8
|
+
#private;
|
|
9
|
+
/** Reserves a span id for a span emitted later via {@link withSpanId}. */
|
|
10
|
+
allocateSpanId(): string;
|
|
11
|
+
/** Derives one span id for a replay-stable instrumentation event. */
|
|
12
|
+
deriveSpanId(key: string): string;
|
|
13
|
+
deriveTraceId(key: string): string;
|
|
14
|
+
generateSpanId(): string;
|
|
15
|
+
generateTraceId(): string;
|
|
16
|
+
/** Runs `startSpan` so the next span started carries `spanId`. */
|
|
17
|
+
withSpanId<T>(spanId: string, startSpan: () => T): T;
|
|
18
|
+
withTraceId<T>(traceId: string, startSpan: () => T): T;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=otel-ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-ids.d.ts","sourceRoot":"","sources":["../../../src/adapters/otel-ids.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,qBAAa,oBAAoB;;IAI/B,0EAA0E;IAC1E,cAAc,IAAI,MAAM,CAEvB;IAED,qEAAqE;IACrE,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhC;IAED,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGjC;IAED,cAAc,IAAI,MAAM,CAOvB;IAED,eAAe,IAAI,MAAM,CAOxB;IAED,kEAAkE;IAClE,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAOnD;IAED,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAOrD;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* ID generator installed by the host OTel provider for reserved-ID emission. A span
|
|
4
|
+
* whose lifetime crosses durable worker boundaries (`invoke_agent`) is emitted
|
|
5
|
+
* at its terminal; priming the next span id lets that span carry the
|
|
6
|
+
* pre-allocated id its descendants already parented to.
|
|
7
|
+
*/
|
|
8
|
+
export class AgentSpanIdGenerator {
|
|
9
|
+
#primedSpanId;
|
|
10
|
+
#primedTraceId;
|
|
11
|
+
/** Reserves a span id for a span emitted later via {@link withSpanId}. */
|
|
12
|
+
allocateSpanId() {
|
|
13
|
+
return randomHexId(16);
|
|
14
|
+
}
|
|
15
|
+
/** Derives one span id for a replay-stable instrumentation event. */
|
|
16
|
+
deriveSpanId(key) {
|
|
17
|
+
return deriveAgentSpanId(key);
|
|
18
|
+
}
|
|
19
|
+
deriveTraceId(key) {
|
|
20
|
+
const traceId = createHash("sha256").update(key).digest("hex").slice(0, 32);
|
|
21
|
+
return /^0+$/u.test(traceId) ? "00000000000000000000000000000001" : traceId;
|
|
22
|
+
}
|
|
23
|
+
generateSpanId() {
|
|
24
|
+
const primed = this.#primedSpanId;
|
|
25
|
+
if (primed !== undefined) {
|
|
26
|
+
this.#primedSpanId = undefined;
|
|
27
|
+
return primed;
|
|
28
|
+
}
|
|
29
|
+
return randomHexId(16);
|
|
30
|
+
}
|
|
31
|
+
generateTraceId() {
|
|
32
|
+
const primed = this.#primedTraceId;
|
|
33
|
+
if (primed !== undefined) {
|
|
34
|
+
this.#primedTraceId = undefined;
|
|
35
|
+
return primed;
|
|
36
|
+
}
|
|
37
|
+
return randomHexId(32);
|
|
38
|
+
}
|
|
39
|
+
/** Runs `startSpan` so the next span started carries `spanId`. */
|
|
40
|
+
withSpanId(spanId, startSpan) {
|
|
41
|
+
this.#primedSpanId = spanId;
|
|
42
|
+
try {
|
|
43
|
+
return startSpan();
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
this.#primedSpanId = undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
withTraceId(traceId, startSpan) {
|
|
50
|
+
this.#primedTraceId = traceId;
|
|
51
|
+
try {
|
|
52
|
+
return startSpan();
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
this.#primedTraceId = undefined;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function deriveAgentSpanId(key) {
|
|
60
|
+
const spanId = createHash("sha256").update(key).digest("hex").slice(0, 16);
|
|
61
|
+
return /^0+$/u.test(spanId) ? "0000000000000001" : spanId;
|
|
62
|
+
}
|
|
63
|
+
const HEX_DIGITS = "0123456789abcdef";
|
|
64
|
+
function randomHexId(length) {
|
|
65
|
+
let id;
|
|
66
|
+
do {
|
|
67
|
+
id = "";
|
|
68
|
+
for (let index = 0; index < length; index += 1) {
|
|
69
|
+
id += HEX_DIGITS[Math.trunc(Math.random() * 16)];
|
|
70
|
+
}
|
|
71
|
+
} while (!/[1-9a-f]/u.test(id));
|
|
72
|
+
return id;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=otel-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-ids.js","sourceRoot":"","sources":["../../../src/adapters/otel-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IAC/B,aAAa,CAAqB;IAClC,cAAc,CAAqB;IAEnC,0EAA0E;IAC1E,cAAc;QACZ,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,qEAAqE;IACrE,YAAY,CAAC,GAAW;QACtB,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,aAAa,CAAC,GAAW;QACvB,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9E,CAAC;IAED,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,eAAe;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,kEAAkE;IAClE,UAAU,CAAI,MAAc,EAAE,SAAkB;QAC9C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC;IACH,CAAC;IAED,WAAW,CAAI,OAAe,EAAE,SAAkB;QAChD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,EAAU,CAAC;IACf,GAAG,CAAC;QACF,EAAE,GAAG,EAAE,CAAC;QACR,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC/C,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;IAChC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Context as OtelContext, type TracerProvider } from "@opentelemetry/api";
|
|
2
|
+
import { AgentSpanIdGenerator } from "./otel-ids.js";
|
|
3
|
+
import type { Attributes, AgentTelemetry, OutputMapping, ActiveOperation } from "../core/types.js";
|
|
4
|
+
type Context = OtelContext;
|
|
5
|
+
export declare function withErrorContent<T extends {
|
|
6
|
+
setValue(key: symbol, value: unknown): T;
|
|
7
|
+
}>(context: T, allowed: boolean): T;
|
|
8
|
+
export declare function activeTraceOperation(host?: Pick<Context, "getValue">): ActiveOperation | undefined;
|
|
9
|
+
export interface OtelTelemetryOptions {
|
|
10
|
+
/** Defaults to the global tracer provider. */
|
|
11
|
+
readonly provider?: TracerProvider;
|
|
12
|
+
/**
|
|
13
|
+
* Generator installed on `provider`. Required for durable tracing so a span
|
|
14
|
+
* started in a later process carries the ID its children already reference.
|
|
15
|
+
*/
|
|
16
|
+
readonly idGenerator?: AgentSpanIdGenerator;
|
|
17
|
+
/** Defaults to recording every trace. */
|
|
18
|
+
readonly samplesTrace?: (traceId: string, operation: {
|
|
19
|
+
name: string;
|
|
20
|
+
attributes: Attributes;
|
|
21
|
+
}) => boolean;
|
|
22
|
+
/** Replaces the default mapping, which adds `vercel.session_id` on Vercel. */
|
|
23
|
+
readonly mapping?: OutputMapping;
|
|
24
|
+
readonly tracerName?: string;
|
|
25
|
+
/** Recorded as the spans' instrumentation scope version. */
|
|
26
|
+
readonly tracerVersion?: string;
|
|
27
|
+
/** Override the provider's lifecycle, for example to flush metric readers too. */
|
|
28
|
+
readonly forceFlush?: () => Promise<void>;
|
|
29
|
+
readonly shutdown?: () => Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
/** OpenTelemetry implementation of {@link AgentTelemetry}. */
|
|
32
|
+
export declare function otelTelemetry(options?: OtelTelemetryOptions): AgentTelemetry;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=otel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../src/adapters/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,OAAO,IAAI,WAAW,EAC3B,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,aAAa,EAKb,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAI1B,KAAK,OAAO,GAAG,WAAW,CAAC;AAI3B,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAAA;CAAE,EACrF,OAAO,EAAE,CAAC,EACV,OAAO,EAAE,OAAO,GACf,CAAC,CAEH;AAMD,wBAAgB,oBAAoB,CAClC,IAAI,GAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAoB,GACjD,eAAe,GAAG,SAAS,CAI7B;AAuDD,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAC5C,yCAAyC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,CACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,KAChD,OAAO,CAAC;IACb,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,kFAAkF;IAClF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,cAAc,CAwGhF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { ROOT_CONTEXT, SpanKind, SpanStatusCode, context, trace, createTraceState, createContextKey, } from "@opentelemetry/api";
|
|
2
|
+
import { recordAgentSpanError } from "./otel-error.js";
|
|
3
|
+
import { AgentSpanIdGenerator } from "./otel-ids.js";
|
|
4
|
+
import { activeOperation, intersectCapture } from "../core/activation.js";
|
|
5
|
+
import { withCapture } from "../capture.js";
|
|
6
|
+
const ACTIVE_OPERATION = createContextKey("agent.tracing.active-operation");
|
|
7
|
+
const SUPPRESS_TRACING_KEY = createContextKey("OpenTelemetry SDK Context Key SUPPRESS_TRACING");
|
|
8
|
+
export function withErrorContent(context, allowed) {
|
|
9
|
+
return withCapture(context, { emit: true, recordInputs: allowed, recordOutputs: allowed });
|
|
10
|
+
}
|
|
11
|
+
function suppressTracing(context) {
|
|
12
|
+
return context.setValue(SUPPRESS_TRACING_KEY, true);
|
|
13
|
+
}
|
|
14
|
+
export function activeTraceOperation(host = context.active()) {
|
|
15
|
+
return typeof host.getValue === "function"
|
|
16
|
+
? host.getValue(ACTIVE_OPERATION)
|
|
17
|
+
: undefined;
|
|
18
|
+
}
|
|
19
|
+
function parentContext(reference, host) {
|
|
20
|
+
const base = host ?? ROOT_CONTEXT;
|
|
21
|
+
return reference === undefined
|
|
22
|
+
? base
|
|
23
|
+
: trace.setSpan(base, trace.wrapSpanContext(otelReference(reference)));
|
|
24
|
+
}
|
|
25
|
+
function otelReference(reference) {
|
|
26
|
+
return {
|
|
27
|
+
...reference,
|
|
28
|
+
traceState: reference.tracestate === undefined ? undefined : createTraceState(reference.tracestate),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function portableReference(reference) {
|
|
32
|
+
return {
|
|
33
|
+
traceId: reference.traceId,
|
|
34
|
+
spanId: reference.spanId,
|
|
35
|
+
traceFlags: reference.traceFlags,
|
|
36
|
+
isRemote: reference.isRemote,
|
|
37
|
+
tracestate: reference.traceState?.serialize(),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function mappedAttributes(mapping, span, attributes) {
|
|
41
|
+
return mapping?.attributes(span, attributes) ?? attributes;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Applied when the host passes no mapping. On Vercel it adds the session ID
|
|
45
|
+
* Agent Runs uses to find a run's spans.
|
|
46
|
+
*/
|
|
47
|
+
const DEFAULT_MAPPING = {
|
|
48
|
+
attributes(_span, attributes) {
|
|
49
|
+
const runId = attributes["agent.run.id"];
|
|
50
|
+
return onVercel() && typeof runId === "string" && attributes["vercel.session_id"] === undefined
|
|
51
|
+
? { ...attributes, "vercel.session_id": runId }
|
|
52
|
+
: attributes;
|
|
53
|
+
},
|
|
54
|
+
link: (_span, link) => ({ "agent.link.type": link.relationship }),
|
|
55
|
+
};
|
|
56
|
+
function onVercel() {
|
|
57
|
+
const env = globalThis.process
|
|
58
|
+
?.env;
|
|
59
|
+
return env?.VERCEL_ENV !== undefined;
|
|
60
|
+
}
|
|
61
|
+
/** OpenTelemetry implementation of {@link AgentTelemetry}. */
|
|
62
|
+
export function otelTelemetry(options = {}) {
|
|
63
|
+
const provider = options.provider ?? trace.getTracerProvider();
|
|
64
|
+
const tracer = provider.getTracer(options.tracerName ?? "agent.tracing", options.tracerVersion);
|
|
65
|
+
const mapping = options.mapping ?? DEFAULT_MAPPING;
|
|
66
|
+
const idGenerator = options.idGenerator;
|
|
67
|
+
function lifecycle(method) {
|
|
68
|
+
return (options[method] ??
|
|
69
|
+
(async () => {
|
|
70
|
+
const callback = provider[method];
|
|
71
|
+
if (callback === undefined)
|
|
72
|
+
throw new Error(`The tracer provider does not support ${method}.`);
|
|
73
|
+
await callback.call(provider);
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
function start(span, executionContext) {
|
|
77
|
+
const recorded = tracer.startSpan(span.name, {
|
|
78
|
+
attributes: mappedAttributes(mapping, span, span.attributes),
|
|
79
|
+
kind: span.kind === undefined ? undefined : SpanKind[span.kind],
|
|
80
|
+
root: span.root,
|
|
81
|
+
startTime: span.startTimeMs,
|
|
82
|
+
links: span.links?.map((link) => ({
|
|
83
|
+
context: otelReference(link.context),
|
|
84
|
+
attributes: mapping?.link(span, link) ?? { "agent.link.type": link.relationship },
|
|
85
|
+
})),
|
|
86
|
+
}, parentContext(span.root ? undefined : span.parent, executionContext));
|
|
87
|
+
return {
|
|
88
|
+
reference: portableReference(recorded.spanContext()),
|
|
89
|
+
setAttribute(key, value) {
|
|
90
|
+
for (const [name, mapped] of Object.entries(mappedAttributes(mapping, span, { [key]: value }))) {
|
|
91
|
+
if (mapped !== undefined)
|
|
92
|
+
recorded.setAttribute(name, mapped);
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
addEvent: (name, attributes, timeMs) => {
|
|
96
|
+
recorded.addEvent(name, attributes, timeMs);
|
|
97
|
+
},
|
|
98
|
+
fail: (error, errorType) => recordAgentSpanError(recorded, error, errorType),
|
|
99
|
+
setStatus: (code) => {
|
|
100
|
+
recorded.setStatus({ code: SpanStatusCode[code] });
|
|
101
|
+
},
|
|
102
|
+
end: (timeMs) => {
|
|
103
|
+
recorded.end(timeMs);
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
startSpan(span, { reference, context: host } = {}) {
|
|
109
|
+
if (reference === undefined || idGenerator === undefined)
|
|
110
|
+
return start(span, host);
|
|
111
|
+
const writer = idGenerator.withTraceId(reference.traceId, () => idGenerator.withSpanId(reference.spanId, () => start(span, host)));
|
|
112
|
+
if (writer.reference.spanId !== reference.spanId ||
|
|
113
|
+
writer.reference.traceId !== reference.traceId) {
|
|
114
|
+
throw new Error("The tracer provider must use the telemetry's ID generator.");
|
|
115
|
+
}
|
|
116
|
+
return writer;
|
|
117
|
+
},
|
|
118
|
+
active: () => activeTraceOperation(),
|
|
119
|
+
suppressed(execute) {
|
|
120
|
+
return context.with(withErrorContent(suppressTracing(ROOT_CONTEXT), false), execute);
|
|
121
|
+
},
|
|
122
|
+
run(operation, execute, executionContext) {
|
|
123
|
+
let capture = intersectCapture(operation.capture, activeTraceOperation()?.capture);
|
|
124
|
+
// Retain baggage and host context while replacing the semantic parent span.
|
|
125
|
+
let active = trace.setSpan(executionContext ?? context.active(), trace.wrapSpanContext(otelReference(operation.reference)));
|
|
126
|
+
capture = intersectCapture(capture, active.getValue(ACTIVE_OPERATION)?.capture);
|
|
127
|
+
active = active.setValue(ACTIVE_OPERATION, activeOperation(operation, capture));
|
|
128
|
+
active = withCapture(active, capture);
|
|
129
|
+
if (!capture.emit || (operation.reference.traceFlags & 1) === 0)
|
|
130
|
+
active = suppressTracing(active);
|
|
131
|
+
return context.with(active, execute);
|
|
132
|
+
},
|
|
133
|
+
samples: (traceId, span) => options.samplesTrace?.(traceId, {
|
|
134
|
+
name: span.name,
|
|
135
|
+
attributes: mappedAttributes(mapping, span, span.attributes),
|
|
136
|
+
}) ?? true,
|
|
137
|
+
ids: idGenerator === undefined
|
|
138
|
+
? undefined
|
|
139
|
+
: {
|
|
140
|
+
traceId: (key) => idGenerator.deriveTraceId(key),
|
|
141
|
+
spanId: (key) => idGenerator.deriveSpanId(key),
|
|
142
|
+
},
|
|
143
|
+
forceFlush: lifecycle("forceFlush"),
|
|
144
|
+
shutdown: lifecycle("shutdown"),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=otel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../../../src/adapters/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,OAAO,EACP,KAAK,EACL,gBAAgB,EAChB,gBAAgB,GAIjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAWrD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,gCAAgC,CAAC,CAAC;AAC5E,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,gDAAgD,CAAC,CAAC;AAEhG,MAAM,UAAU,gBAAgB,CAC9B,OAAU,EACV,OAAgB;IAEhB,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB;IACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAI,GAA8B,OAAO,CAAC,MAAM,EAAE;IAElD,OAAO,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU;QACxC,CAAC,CAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAiC;QAClE,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,SAAqC,EAAE,IAAuB;IACnF,MAAM,IAAI,GAAI,IAA4B,IAAI,YAAY,CAAC;IAC3D,OAAO,SAAS,KAAK,SAAS;QAC5B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,SAAyB;IAC9C,OAAO;QACL,GAAG,SAAS;QACZ,UAAU,EACR,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC;KAC1F,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAsB;IAC/C,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAkC,EAClC,IAAkB,EAClB,UAAsB;IAEtB,OAAO,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,eAAe,GAAkB;IACrC,UAAU,CAAC,KAAK,EAAE,UAAU;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;QACzC,OAAO,QAAQ,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,mBAAmB,CAAC,KAAK,SAAS;YAC7F,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE;YAC/C,CAAC,CAAC,UAAU,CAAC;IACjB,CAAC;IACD,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;CAClE,CAAC;AAEF,SAAS,QAAQ;IACf,MAAM,GAAG,GAAI,UAAyE,CAAC,OAAO;QAC5F,EAAE,GAAG,CAAC;IACR,OAAO,GAAG,EAAE,UAAU,KAAK,SAAS,CAAC;AACvC,CAAC;AAyBD,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,OAAO,GAAyB,EAAE;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,IAAI,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IACnD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,SAAS,SAAS,CAAC,MAAiC;QAClD,OAAO,CACL,OAAO,CAAC,MAAM,CAAC;YACf,CAAC,KAAK,IAAI,EAAE;gBACV,MAAM,QAAQ,GACZ,QACD,CAAC,MAAM,CAAC,CAAC;gBACV,IAAI,QAAQ,KAAK,SAAS;oBACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,GAAG,CAAC,CAAC;gBACrE,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,SAAS,KAAK,CAAC,IAAkB,EAAE,gBAAmC;QACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAC/B,IAAI,CAAC,IAAI,EACT;YACE,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;YAC5D,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/D,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,WAAW;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;gBACpC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE;aAClF,CAAC,CAAC;SACJ,EACD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CACrE,CAAC;QACF,OAAO;YACL,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACpD,YAAY,CAAC,GAAG,EAAE,KAAK;gBACrB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CACzC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAClD,EAAE,CAAC;oBACF,IAAI,MAAM,KAAK,SAAS;wBAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;gBACrC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC;YAC5E,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClB,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;gBACd,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;YAC/C,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,CAC7D,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAClE,CAAC;YACF,IACE,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;gBAC5C,MAAM,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAC9C,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE;QACpC,UAAU,CAAI,OAAgB;YAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACvF,CAAC;QACD,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB;YACtC,IAAI,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,OAAO,CAAC,CAAC;YACnF,4EAA4E;YAC5E,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CACvB,gBAAwC,IAAI,OAAO,CAAC,MAAM,EAAE,EAC7D,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAC1D,CAAC;YACF,OAAO,GAAG,gBAAgB,CACxB,OAAO,EACN,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAiC,EAAE,OAAO,CAC5E,CAAC;YACF,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YAChF,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC7D,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CACzB,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;SAC7D,CAAC,IAAI,IAAI;QACZ,GAAG,EACD,WAAW,KAAK,SAAS;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC;gBAChD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC;aAC/C;QACP,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;QACnC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializes model and tool payloads into span content attributes for the
|
|
3
|
+
* local trace viewer: prompt messages, the system prompt, responses, and
|
|
4
|
+
* tool arguments/results. Everything is capped so a giant payload cannot
|
|
5
|
+
* bloat a span segment past the reader's per-file limit, and message
|
|
6
|
+
* payloads stay valid JSON through every truncation path.
|
|
7
|
+
*/
|
|
8
|
+
/** Content attributes are capped so a giant payload cannot bloat a span segment. */
|
|
9
|
+
export declare const CONTENT_ATTRIBUTE_LIMIT: number;
|
|
10
|
+
import type { ContentSerializer, InputMessagesContent } from "../core/types.js";
|
|
11
|
+
export declare const aiSdkContentSerializer: ContentSerializer;
|
|
12
|
+
export declare function telemetryByteLength(text: string): number;
|
|
13
|
+
export declare function truncateTelemetryText(text: string, maxBytes: number): string;
|
|
14
|
+
export declare function boundedPrincipalId(value: unknown): string | undefined;
|
|
15
|
+
export declare function boundedTraceError(value: Error): Error;
|
|
16
|
+
/** Serializes one payload value as capped JSON. */
|
|
17
|
+
export declare function contentAttribute(value: unknown): string | undefined;
|
|
18
|
+
/** Serializes model messages using the OpenTelemetry GenAI message schema. */
|
|
19
|
+
export declare function genAiInputMessagesAttribute(messages: unknown, messageKind?: (value: unknown) => string | undefined): InputMessagesContent | undefined;
|
|
20
|
+
/** Serializes the system prompt using the OpenTelemetry GenAI instruction schema. */
|
|
21
|
+
export declare function genAiSystemInstructionsAttribute(instructions: unknown): string | undefined;
|
|
22
|
+
/** Serializes one model response using the OpenTelemetry GenAI message schema. */
|
|
23
|
+
export declare function genAiOutputMessagesAttribute(content: readonly unknown[], finishReason: string): string | undefined;
|
|
24
|
+
/** Serializes memory records using the OpenTelemetry GenAI memory-records schema. */
|
|
25
|
+
export declare function genAiMemoryRecordsAttribute(records: readonly unknown[]): string | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Serializes provider-executed tool results, keeping the attribute valid
|
|
28
|
+
* JSON under the cap: when the full payload is too big, each entry's input
|
|
29
|
+
* and output collapse to capped text at progressively smaller budgets
|
|
30
|
+
* instead of cutting the JSON mid-string.
|
|
31
|
+
*/
|
|
32
|
+
export declare function toolResultsContentAttribute(results: readonly Record<string, unknown>[]): string | undefined;
|
|
33
|
+
/** Serializes tool definitions, dropping trailing entries to keep the JSON whole. */
|
|
34
|
+
export declare function genAiToolDefinitionsAttribute(tools: unknown): string | undefined;
|
|
35
|
+
/** Caps plain text, marking the cut. */
|
|
36
|
+
export declare function textContentAttribute(text: string): string | undefined;
|
|
37
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../../src/adapters/serialization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oFAAoF;AACpF,eAAO,MAAM,uBAAuB,QAAY,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,eAAO,MAAM,sBAAsB,EAAE,iBAWpC,CAAC;AAMF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOrE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAKrD;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUnE;AAED,8EAA8E;AAC9E,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EACjB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,GACnD,oBAAoB,GAAG,SAAS,CAoBlC;AAED,qFAAqF;AACrF,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI1F;AAED,kFAAkF;AAClF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAepB;AAED,qFAAqF;AACrF,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,GAAG,SAAS,CAE3F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC1C,MAAM,GAAG,SAAS,CASpB;AAaD,qFAAqF;AACrF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAsBhF;AAoBD,wCAAwC;AACxC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE"}
|