@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,318 @@
|
|
|
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 const CONTENT_ATTRIBUTE_LIMIT = 32 * 1024;
|
|
10
|
+
export const aiSdkContentSerializer = {
|
|
11
|
+
json: contentAttribute,
|
|
12
|
+
text: textContentAttribute,
|
|
13
|
+
inputMessages: (messages) => genAiInputMessagesAttribute(messages, (value) => typeof value === "string" ? value : undefined),
|
|
14
|
+
instructions: genAiSystemInstructionsAttribute,
|
|
15
|
+
toolDefinitions: genAiToolDefinitionsAttribute,
|
|
16
|
+
outputMessages: genAiOutputMessagesAttribute,
|
|
17
|
+
toolResults: toolResultsContentAttribute,
|
|
18
|
+
};
|
|
19
|
+
const encoder = new TextEncoder();
|
|
20
|
+
const decoder = new TextDecoder();
|
|
21
|
+
const MARKER = "... [truncated]";
|
|
22
|
+
export function telemetryByteLength(text) {
|
|
23
|
+
return encoder.encode(text).length;
|
|
24
|
+
}
|
|
25
|
+
export function truncateTelemetryText(text, maxBytes) {
|
|
26
|
+
const prefix = text.slice(0, maxBytes + 1);
|
|
27
|
+
const bytes = encoder.encode(prefix);
|
|
28
|
+
if (prefix.length === text.length && bytes.length <= maxBytes)
|
|
29
|
+
return text;
|
|
30
|
+
const marker = MARKER.slice(0, maxBytes);
|
|
31
|
+
let end = Math.max(0, maxBytes - marker.length);
|
|
32
|
+
while (end > 0 && (bytes[end] & 0xc0) === 0x80)
|
|
33
|
+
end -= 1;
|
|
34
|
+
return decoder.decode(bytes.subarray(0, end)) + marker;
|
|
35
|
+
}
|
|
36
|
+
export function boundedPrincipalId(value) {
|
|
37
|
+
return typeof value === "string" &&
|
|
38
|
+
value.length > 0 &&
|
|
39
|
+
value.length <= 1024 &&
|
|
40
|
+
telemetryByteLength(value) <= 1024
|
|
41
|
+
? value
|
|
42
|
+
: undefined;
|
|
43
|
+
}
|
|
44
|
+
export function boundedTraceError(value) {
|
|
45
|
+
const error = new Error(truncateTelemetryText(value.message, 4096));
|
|
46
|
+
error.name = truncateTelemetryText(value.name, 128);
|
|
47
|
+
error.stack = value.stack === undefined ? undefined : truncateTelemetryText(value.stack, 8192);
|
|
48
|
+
return error;
|
|
49
|
+
}
|
|
50
|
+
/** Serializes one payload value as capped JSON. */
|
|
51
|
+
export function contentAttribute(value) {
|
|
52
|
+
if (value === undefined)
|
|
53
|
+
return undefined;
|
|
54
|
+
let json;
|
|
55
|
+
try {
|
|
56
|
+
json = JSON.stringify(value);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (json === undefined)
|
|
62
|
+
return undefined;
|
|
63
|
+
return textContentAttribute(json);
|
|
64
|
+
}
|
|
65
|
+
/** Serializes model messages using the OpenTelemetry GenAI message schema. */
|
|
66
|
+
export function genAiInputMessagesAttribute(messages, messageKind) {
|
|
67
|
+
if (!Array.isArray(messages))
|
|
68
|
+
return undefined;
|
|
69
|
+
const formatted = messages.flatMap((message) => {
|
|
70
|
+
if (!isRecord(message) || message.role === "system" || typeof message.role !== "string") {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
const parts = semanticParts(message.content);
|
|
74
|
+
if (parts.length === 0)
|
|
75
|
+
return [];
|
|
76
|
+
const kind = message.role === "user" ? messageKind?.(message.kind) : undefined;
|
|
77
|
+
return [
|
|
78
|
+
kind === undefined ? { parts, role: message.role } : { kind, parts, role: message.role },
|
|
79
|
+
];
|
|
80
|
+
});
|
|
81
|
+
for (let start = 0; start < formatted.length; start += 1) {
|
|
82
|
+
const json = semanticJsonAttribute(formatted.slice(start));
|
|
83
|
+
if (json !== undefined)
|
|
84
|
+
return { json, omitted: start };
|
|
85
|
+
}
|
|
86
|
+
const newest = truncateSingleSemanticMessage(formatted);
|
|
87
|
+
if (newest !== undefined)
|
|
88
|
+
return { json: newest, omitted: formatted.length - 1 };
|
|
89
|
+
return { json: "[]", omitted: formatted.length };
|
|
90
|
+
}
|
|
91
|
+
/** Serializes the system prompt using the OpenTelemetry GenAI instruction schema. */
|
|
92
|
+
export function genAiSystemInstructionsAttribute(instructions) {
|
|
93
|
+
const text = systemPromptText(instructions);
|
|
94
|
+
if (text === undefined)
|
|
95
|
+
return undefined;
|
|
96
|
+
return fitSemanticText(text, (content) => [{ content, type: "text" }]);
|
|
97
|
+
}
|
|
98
|
+
/** Serializes one model response using the OpenTelemetry GenAI message schema. */
|
|
99
|
+
export function genAiOutputMessagesAttribute(content, finishReason) {
|
|
100
|
+
const parts = semanticParts(content);
|
|
101
|
+
const reason = finishReason === "tool-calls" ? "tool_call" : finishReason;
|
|
102
|
+
const message = (messageParts) => [
|
|
103
|
+
{ finish_reason: reason, parts: messageParts, role: "assistant" },
|
|
104
|
+
];
|
|
105
|
+
// An oversized response keeps a truncated text form, as an oversized prompt does.
|
|
106
|
+
return (semanticJsonAttribute(message(parts)) ??
|
|
107
|
+
fitSemanticText(semanticMessageText(parts), (text) => message([{ content: text, type: "text" }]), true));
|
|
108
|
+
}
|
|
109
|
+
/** Serializes memory records using the OpenTelemetry GenAI memory-records schema. */
|
|
110
|
+
export function genAiMemoryRecordsAttribute(records) {
|
|
111
|
+
return semanticJsonAttribute(records);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Serializes provider-executed tool results, keeping the attribute valid
|
|
115
|
+
* JSON under the cap: when the full payload is too big, each entry's input
|
|
116
|
+
* and output collapse to capped text at progressively smaller budgets
|
|
117
|
+
* instead of cutting the JSON mid-string.
|
|
118
|
+
*/
|
|
119
|
+
export function toolResultsContentAttribute(results) {
|
|
120
|
+
if (results.length === 0)
|
|
121
|
+
return undefined;
|
|
122
|
+
const full = stringifyContent(results);
|
|
123
|
+
if (full !== undefined && full.length <= CONTENT_ATTRIBUTE_LIMIT)
|
|
124
|
+
return full;
|
|
125
|
+
for (let cap = CONTENT_ATTRIBUTE_LIMIT; cap >= 0; cap = cap >= 256 ? Math.floor(cap / 2) : -1) {
|
|
126
|
+
const json = stringifyContent(results.map((entry) => cappedToolResult(entry, cap)));
|
|
127
|
+
if (json !== undefined && json.length <= CONTENT_ATTRIBUTE_LIMIT)
|
|
128
|
+
return json;
|
|
129
|
+
}
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
function cappedToolResult(entry, cap) {
|
|
133
|
+
const out = { toolName: entry.toolName };
|
|
134
|
+
for (const key of ["input", "output", "error"]) {
|
|
135
|
+
if (!(key in entry))
|
|
136
|
+
continue;
|
|
137
|
+
const value = entry[key];
|
|
138
|
+
const text = typeof value === "string" ? value : (stringifyContent(value) ?? "");
|
|
139
|
+
out[key] = text.length <= cap ? text : `${text.slice(0, cap)}… [truncated]`;
|
|
140
|
+
}
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
/** Serializes tool definitions, dropping trailing entries to keep the JSON whole. */
|
|
144
|
+
export function genAiToolDefinitionsAttribute(tools) {
|
|
145
|
+
if (!Array.isArray(tools))
|
|
146
|
+
return undefined;
|
|
147
|
+
const definitions = tools.flatMap((tool) => {
|
|
148
|
+
if (!isRecord(tool) || typeof tool.name !== "string")
|
|
149
|
+
return [];
|
|
150
|
+
const definition = { name: tool.name };
|
|
151
|
+
if (typeof tool.description === "string")
|
|
152
|
+
definition.description = tool.description;
|
|
153
|
+
if (tool.inputSchema !== undefined)
|
|
154
|
+
definition.parameters = tool.inputSchema;
|
|
155
|
+
return [definition];
|
|
156
|
+
});
|
|
157
|
+
if (definitions.length === 0)
|
|
158
|
+
return undefined;
|
|
159
|
+
const serialized = [];
|
|
160
|
+
let length = 2;
|
|
161
|
+
for (const definition of definitions) {
|
|
162
|
+
const json = stringifyContent(definition);
|
|
163
|
+
if (json === undefined)
|
|
164
|
+
break;
|
|
165
|
+
const nextLength = length + (serialized.length === 0 ? 0 : 1) + json.length;
|
|
166
|
+
if (nextLength > CONTENT_ATTRIBUTE_LIMIT)
|
|
167
|
+
break;
|
|
168
|
+
serialized.push(json);
|
|
169
|
+
length = nextLength;
|
|
170
|
+
}
|
|
171
|
+
return `[${serialized.join(",")}]`;
|
|
172
|
+
}
|
|
173
|
+
/** Normalizes the AI SDK's `instructions` prompt to plain text. */
|
|
174
|
+
function systemPromptText(instructions) {
|
|
175
|
+
if (typeof instructions === "string")
|
|
176
|
+
return instructions.length === 0 ? undefined : instructions;
|
|
177
|
+
if (!isRecord(instructions) && !Array.isArray(instructions))
|
|
178
|
+
return undefined;
|
|
179
|
+
const messages = Array.isArray(instructions) ? instructions : [instructions];
|
|
180
|
+
const texts = [];
|
|
181
|
+
for (const message of messages) {
|
|
182
|
+
if (!isRecord(message))
|
|
183
|
+
continue;
|
|
184
|
+
if (typeof message.content === "string")
|
|
185
|
+
texts.push(message.content);
|
|
186
|
+
else if (Array.isArray(message.content))
|
|
187
|
+
for (const part of message.content)
|
|
188
|
+
if (isRecord(part) && part.type === "text" && typeof part.text === "string")
|
|
189
|
+
texts.push(part.text);
|
|
190
|
+
}
|
|
191
|
+
const joined = texts.join("\n\n").trim();
|
|
192
|
+
return joined.length === 0 ? undefined : joined;
|
|
193
|
+
}
|
|
194
|
+
/** Caps plain text, marking the cut. */
|
|
195
|
+
export function textContentAttribute(text) {
|
|
196
|
+
if (text.length === 0)
|
|
197
|
+
return undefined;
|
|
198
|
+
return text.length <= CONTENT_ATTRIBUTE_LIMIT
|
|
199
|
+
? text
|
|
200
|
+
: `${text.slice(0, CONTENT_ATTRIBUTE_LIMIT)}… [truncated]`;
|
|
201
|
+
}
|
|
202
|
+
function stringifyContent(value) {
|
|
203
|
+
try {
|
|
204
|
+
return JSON.stringify(value);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function semanticJsonAttribute(value) {
|
|
211
|
+
const json = stringifyContent(value);
|
|
212
|
+
return json !== undefined && json.length <= CONTENT_ATTRIBUTE_LIMIT ? json : undefined;
|
|
213
|
+
}
|
|
214
|
+
function truncateSingleSemanticMessage(messages) {
|
|
215
|
+
const message = messages.at(-1);
|
|
216
|
+
if (message === undefined || typeof message.role !== "string")
|
|
217
|
+
return undefined;
|
|
218
|
+
const text = semanticMessageText(message.parts);
|
|
219
|
+
const base = typeof message.kind === "string"
|
|
220
|
+
? { kind: message.kind, role: message.role }
|
|
221
|
+
: { role: message.role };
|
|
222
|
+
return fitSemanticText(text, (content) => [{ ...base, parts: [{ content, type: "text" }] }], true);
|
|
223
|
+
}
|
|
224
|
+
function fitSemanticText(text, wrap, alwaysMark = false) {
|
|
225
|
+
if (!alwaysMark && text.length <= CONTENT_ATTRIBUTE_LIMIT) {
|
|
226
|
+
const full = semanticJsonAttribute(wrap(text));
|
|
227
|
+
if (full !== undefined)
|
|
228
|
+
return full;
|
|
229
|
+
}
|
|
230
|
+
for (let length = Math.min(text.length, CONTENT_ATTRIBUTE_LIMIT); length > 0; length -= 256) {
|
|
231
|
+
const json = semanticJsonAttribute(wrap(`${text.slice(0, length)}… [truncated]`));
|
|
232
|
+
if (json !== undefined)
|
|
233
|
+
return json;
|
|
234
|
+
}
|
|
235
|
+
return semanticJsonAttribute(wrap("… [truncated]"));
|
|
236
|
+
}
|
|
237
|
+
function semanticMessageText(parts) {
|
|
238
|
+
if (!Array.isArray(parts))
|
|
239
|
+
return "";
|
|
240
|
+
let text = "";
|
|
241
|
+
for (const part of parts) {
|
|
242
|
+
if (!isRecord(part) || part.type !== "text" || typeof part.content !== "string")
|
|
243
|
+
continue;
|
|
244
|
+
const separator = text.length === 0 ? "" : "\n";
|
|
245
|
+
const remaining = CONTENT_ATTRIBUTE_LIMIT + 1 - text.length - separator.length;
|
|
246
|
+
if (remaining <= 0)
|
|
247
|
+
break;
|
|
248
|
+
text += separator + part.content.slice(0, remaining);
|
|
249
|
+
}
|
|
250
|
+
return text;
|
|
251
|
+
}
|
|
252
|
+
function semanticParts(content) {
|
|
253
|
+
if (typeof content === "string")
|
|
254
|
+
return [{ content, type: "text" }];
|
|
255
|
+
if (!Array.isArray(content))
|
|
256
|
+
return [];
|
|
257
|
+
const parts = [];
|
|
258
|
+
for (const part of content) {
|
|
259
|
+
const formatted = semanticPart(part);
|
|
260
|
+
if (formatted !== undefined)
|
|
261
|
+
parts.push(formatted);
|
|
262
|
+
}
|
|
263
|
+
return parts;
|
|
264
|
+
}
|
|
265
|
+
function semanticPart(value) {
|
|
266
|
+
if (!isRecord(value) || typeof value.type !== "string")
|
|
267
|
+
return undefined;
|
|
268
|
+
switch (value.type) {
|
|
269
|
+
case "text":
|
|
270
|
+
case "reasoning": {
|
|
271
|
+
const content = typeof value.text === "string" ? value.text : value.content;
|
|
272
|
+
return typeof content === "string" ? { content, type: value.type } : undefined;
|
|
273
|
+
}
|
|
274
|
+
case "tool-call":
|
|
275
|
+
return {
|
|
276
|
+
arguments: value.input,
|
|
277
|
+
id: stringValue(value.toolCallId) ?? stringValue(value.callId) ?? null,
|
|
278
|
+
name: value.toolName,
|
|
279
|
+
type: "tool_call",
|
|
280
|
+
};
|
|
281
|
+
case "tool-result":
|
|
282
|
+
return {
|
|
283
|
+
id: stringValue(value.toolCallId) ?? stringValue(value.callId) ?? null,
|
|
284
|
+
response: toolResponse(value.output),
|
|
285
|
+
type: "tool_call_response",
|
|
286
|
+
};
|
|
287
|
+
case "tool-error":
|
|
288
|
+
return {
|
|
289
|
+
id: stringValue(value.toolCallId) ?? stringValue(value.callId) ?? null,
|
|
290
|
+
response: value.error instanceof Error ? value.error.message : value.error,
|
|
291
|
+
type: "tool_call_response",
|
|
292
|
+
};
|
|
293
|
+
default:
|
|
294
|
+
return { type: value.type };
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function toolResponse(output) {
|
|
298
|
+
if (!isRecord(output))
|
|
299
|
+
return output;
|
|
300
|
+
if ((output.type === "text" ||
|
|
301
|
+
output.type === "error-text" ||
|
|
302
|
+
output.type === "json" ||
|
|
303
|
+
output.type === "error-json") &&
|
|
304
|
+
"value" in output) {
|
|
305
|
+
return output.value;
|
|
306
|
+
}
|
|
307
|
+
if (output.type === "execution-denied") {
|
|
308
|
+
return { denied: true, reason: output.reason };
|
|
309
|
+
}
|
|
310
|
+
return output;
|
|
311
|
+
}
|
|
312
|
+
function stringValue(value) {
|
|
313
|
+
return typeof value === "string" ? value : undefined;
|
|
314
|
+
}
|
|
315
|
+
function isRecord(value) {
|
|
316
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../../src/adapters/serialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { type TurnOperation } from "./operations.js";
|
|
2
|
+
import type { AgentTelemetry, Attributes, CaptureDecision, ContentSerializer, ExecutionContext, FrameworkIdentity, RunIdentity, TraceCheckpointer, TraceErrorHandler, TraceLink, TraceReference } from "./core/types.js";
|
|
3
|
+
export interface AgentRunOptions {
|
|
4
|
+
/** Span output and context propagation. Defaults to the global OpenTelemetry provider. */
|
|
5
|
+
readonly telemetry?: AgentTelemetry;
|
|
6
|
+
/**
|
|
7
|
+
* Makes turns durable. Each in-flight turn is saved under a library-chosen
|
|
8
|
+
* key and removed when the turn and its open tool calls complete. Calling
|
|
9
|
+
* `turn()` again with the same identity, in this or a later process,
|
|
10
|
+
* continues the saved turn.
|
|
11
|
+
*/
|
|
12
|
+
readonly checkpointer?: TraceCheckpointer;
|
|
13
|
+
/** Defaults to the AI SDK content serializer. */
|
|
14
|
+
readonly serializer?: ContentSerializer;
|
|
15
|
+
readonly onError?: TraceErrorHandler;
|
|
16
|
+
}
|
|
17
|
+
export interface TurnInput {
|
|
18
|
+
readonly identity: RunIdentity;
|
|
19
|
+
/** Names the invocation span. Omit for an anonymous agent. */
|
|
20
|
+
readonly agentName?: string;
|
|
21
|
+
readonly sequence: number;
|
|
22
|
+
readonly framework?: FrameworkIdentity;
|
|
23
|
+
readonly capture?: CaptureDecision;
|
|
24
|
+
readonly attributes?: Attributes;
|
|
25
|
+
/**
|
|
26
|
+
* Adopts a trace and span ID reserved before the turn started, such as one
|
|
27
|
+
* already returned to a caller. Requires telemetry with stable `ids`.
|
|
28
|
+
*/
|
|
29
|
+
readonly reference?: TraceReference;
|
|
30
|
+
/**
|
|
31
|
+
* Nests the turn under a caller's span in the caller's trace. A local
|
|
32
|
+
* handoff sets this for the first turn; remote callees start their own trace.
|
|
33
|
+
*/
|
|
34
|
+
readonly parent?: TraceReference;
|
|
35
|
+
readonly links?: readonly TraceLink[];
|
|
36
|
+
readonly startTimeMs?: number;
|
|
37
|
+
/** Delegation lineage recorded by the host, when it is not carried by a handoff. */
|
|
38
|
+
readonly lineage?: {
|
|
39
|
+
readonly parentRunId?: string;
|
|
40
|
+
readonly parentCallId?: string;
|
|
41
|
+
readonly agentName?: string;
|
|
42
|
+
};
|
|
43
|
+
readonly channel?: {
|
|
44
|
+
readonly kind?: string;
|
|
45
|
+
readonly origin?: string;
|
|
46
|
+
};
|
|
47
|
+
/** Host context for spans this process starts, such as OpenTelemetry baggage. */
|
|
48
|
+
readonly context?: ExecutionContext;
|
|
49
|
+
}
|
|
50
|
+
export interface ResumeInput {
|
|
51
|
+
readonly identity: RunIdentity;
|
|
52
|
+
readonly context?: ExecutionContext;
|
|
53
|
+
}
|
|
54
|
+
interface MemoryInput<T> {
|
|
55
|
+
identity: RunIdentity;
|
|
56
|
+
storeId: string;
|
|
57
|
+
slot: string;
|
|
58
|
+
phase: string;
|
|
59
|
+
capture?: CaptureDecision;
|
|
60
|
+
/** Defaults to the active operation. */
|
|
61
|
+
parent?: TraceReference;
|
|
62
|
+
context?: ExecutionContext;
|
|
63
|
+
describe?: (value: T) => {
|
|
64
|
+
recordCount?: number;
|
|
65
|
+
records?: readonly {
|
|
66
|
+
id?: string;
|
|
67
|
+
content: string;
|
|
68
|
+
}[];
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export interface AgentRun {
|
|
72
|
+
turn: import("./operations.js").WrappedOperation<TurnInput, TurnOperation>;
|
|
73
|
+
/** Returns a saved durable turn, without starting one. */
|
|
74
|
+
resume(input: ResumeInput): Promise<TurnOperation | undefined>;
|
|
75
|
+
memory: AgentMemoryTracing;
|
|
76
|
+
forceFlush(): Promise<void>;
|
|
77
|
+
shutdown(): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
export interface AgentMemoryTracing {
|
|
80
|
+
search<T>(data: MemoryInput<T>, execute: () => T | PromiseLike<T>): Promise<T>;
|
|
81
|
+
write<T>(data: MemoryInput<T>, execute: () => T | PromiseLike<T>): Promise<T>;
|
|
82
|
+
}
|
|
83
|
+
export declare function createAgentRun(input: AgentRunOptions): AgentRun;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=agent-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../../src/agent-run.ts"],"names":[],"mappings":"AAOA,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EAEX,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IAC1C,iDAAiD;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,oFAAoF;IACpF,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,iFAAiF;IACjF,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,UAAU,WAAW,CAAC,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,wCAAwC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,SAAS;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,iBAAiB,EAAE,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC3E,0DAA0D;IAC1D,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAC/D,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AACD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E;AAYD,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,QAAQ,CAoO/D"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { otelTelemetry } from "./adapters/otel.js";
|
|
3
|
+
import { aiSdkContentSerializer } from "./adapters/serialization.js";
|
|
4
|
+
import { createScopes } from "./core/scopes.js";
|
|
5
|
+
import { currentAgentHandoff } from "./core/delegation.js";
|
|
6
|
+
import { intersectCapture } from "./core/activation.js";
|
|
7
|
+
import { traceSnapshot } from "./core/snapshot.js";
|
|
8
|
+
import { operationHandle, wrappedOperation } from "./operations.js";
|
|
9
|
+
const METADATA_ONLY = { emit: true, recordInputs: false, recordOutputs: false };
|
|
10
|
+
const LIVE_TURNS = 1000;
|
|
11
|
+
export function createAgentRun(input) {
|
|
12
|
+
const telemetry = input.telemetry ?? otelTelemetry();
|
|
13
|
+
const checkpointer = input.checkpointer;
|
|
14
|
+
if (checkpointer !== undefined && telemetry.ids === undefined)
|
|
15
|
+
throw new Error("Durable agent tracing needs stable span IDs. Pass the AgentSpanIdGenerator installed on your tracer provider to otelTelemetry({ idGenerator }).");
|
|
16
|
+
const report = (error, context) => {
|
|
17
|
+
try {
|
|
18
|
+
input.onError?.(error, context);
|
|
19
|
+
}
|
|
20
|
+
catch { }
|
|
21
|
+
};
|
|
22
|
+
const scopes = createScopes({
|
|
23
|
+
telemetry,
|
|
24
|
+
serializer: input.serializer ?? aiSdkContentSerializer,
|
|
25
|
+
durable: checkpointer !== undefined,
|
|
26
|
+
onError: input.onError,
|
|
27
|
+
});
|
|
28
|
+
// Turns hydrated in this process, so concurrent hooks share one tree. The
|
|
29
|
+
// checkpoint stays authoritative: another process's write replaces the entry.
|
|
30
|
+
const live = new Map();
|
|
31
|
+
function turnKey(identity) {
|
|
32
|
+
if (checkpointer === undefined)
|
|
33
|
+
return `turn:${randomUUID()}`;
|
|
34
|
+
return ["turn", identity.runId, identity.turnId].map(encodeURIComponent).join(":");
|
|
35
|
+
}
|
|
36
|
+
/** Writes are serialized so a slow store never persists an older tree last. */
|
|
37
|
+
function persistence(key, entry) {
|
|
38
|
+
let queue = Promise.resolve();
|
|
39
|
+
return () => {
|
|
40
|
+
const turn = entry();
|
|
41
|
+
if (checkpointer === undefined || turn === undefined)
|
|
42
|
+
return queue;
|
|
43
|
+
turn.writes++;
|
|
44
|
+
queue = queue.then(async () => {
|
|
45
|
+
try {
|
|
46
|
+
if (turn.root.settled) {
|
|
47
|
+
live.delete(key);
|
|
48
|
+
await checkpointer.delete(key);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const revision = randomUUID();
|
|
52
|
+
await checkpointer.set(key, traceSnapshot({ ...turn.root.record(), revision }));
|
|
53
|
+
turn.revision = revision;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
report(error, { phase: "checkpoint", operation: "activation" });
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
turn.writes--;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return queue;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
async function loadCheckpoint(key) {
|
|
67
|
+
try {
|
|
68
|
+
return await checkpointer.get(key);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
report(error, { phase: "restore", operation: "activation" });
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function hydrate(key, cached, open, context, capture) {
|
|
76
|
+
const ceiling = currentAgentHandoff()?.capture;
|
|
77
|
+
capture = capture === undefined ? ceiling : intersectCapture(capture, ceiling);
|
|
78
|
+
const saved = checkpointer === undefined ? undefined : await loadCheckpoint(key);
|
|
79
|
+
if (cached !== undefined &&
|
|
80
|
+
(cached.writes > 0 || saved?.revision === cached.revision)) {
|
|
81
|
+
if (context !== undefined)
|
|
82
|
+
cached.root.useContext(context);
|
|
83
|
+
// A re-entry may decline content the cached turn was allowed to record.
|
|
84
|
+
if (capture !== undefined)
|
|
85
|
+
cached.root.narrow(capture);
|
|
86
|
+
return cached;
|
|
87
|
+
}
|
|
88
|
+
let entry;
|
|
89
|
+
const onChange = persistence(key, () => entry);
|
|
90
|
+
const restored = saved === undefined ? undefined : await scopes.restore(saved, { capture, context, onChange });
|
|
91
|
+
const root = restored ?? (await open?.(onChange));
|
|
92
|
+
if (root === undefined)
|
|
93
|
+
return undefined;
|
|
94
|
+
entry = { root, revision: saved?.revision, writes: 0 };
|
|
95
|
+
if (restored === undefined)
|
|
96
|
+
await onChange();
|
|
97
|
+
return entry;
|
|
98
|
+
}
|
|
99
|
+
function cache(key, load) {
|
|
100
|
+
const previous = live.get(key);
|
|
101
|
+
const loading = (async () => load(previous === undefined ? undefined : await previous.catch(() => undefined)))();
|
|
102
|
+
live.set(key, loading);
|
|
103
|
+
void loading.then((turn) => {
|
|
104
|
+
if (turn === undefined || turn.root.settled)
|
|
105
|
+
live.delete(key);
|
|
106
|
+
}, () => live.delete(key));
|
|
107
|
+
if (live.size > LIVE_TURNS)
|
|
108
|
+
live.delete(live.keys().next().value);
|
|
109
|
+
return loading;
|
|
110
|
+
}
|
|
111
|
+
function startTurn(data, key) {
|
|
112
|
+
return (onChange) => {
|
|
113
|
+
const handoff = currentAgentHandoff();
|
|
114
|
+
const capture = intersectCapture(data.capture ?? METADATA_ONLY, handoff?.capture);
|
|
115
|
+
const first = handoff !== undefined && data.sequence === 0;
|
|
116
|
+
const parent = data.parent ?? (first && handoff?.remote !== true ? handoff?.caller : undefined);
|
|
117
|
+
const caller = first && handoff?.remote === true
|
|
118
|
+
? [{ relationship: "agent.dispatch", context: handoff.caller }]
|
|
119
|
+
: [];
|
|
120
|
+
const links = [...caller, ...(data.links ?? [])];
|
|
121
|
+
return scopes.start({
|
|
122
|
+
identity: {
|
|
123
|
+
...data.identity,
|
|
124
|
+
conversationId: handoff?.conversationId ?? data.identity.conversationId,
|
|
125
|
+
agentName: data.agentName,
|
|
126
|
+
framework: data.framework,
|
|
127
|
+
},
|
|
128
|
+
key,
|
|
129
|
+
capture,
|
|
130
|
+
parent,
|
|
131
|
+
reference: telemetry.ids === undefined ? undefined : data.reference,
|
|
132
|
+
startTimeMs: data.startTimeMs,
|
|
133
|
+
data: {
|
|
134
|
+
type: "activation",
|
|
135
|
+
options: {
|
|
136
|
+
sequence: data.sequence,
|
|
137
|
+
attributes: data.attributes,
|
|
138
|
+
channel: data.channel,
|
|
139
|
+
subagent: handoff !== undefined || data.lineage !== undefined,
|
|
140
|
+
subagentName: handoff?.agentName ?? data.lineage?.agentName,
|
|
141
|
+
parentRunId: handoff?.parentRunId ?? data.lineage?.parentRunId,
|
|
142
|
+
parentCallId: handoff?.parentCallId ?? data.lineage?.parentCallId,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
links: links.length === 0 ? undefined : links,
|
|
146
|
+
context: data.context,
|
|
147
|
+
onChange,
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function handle(root) {
|
|
152
|
+
return operationHandle(root, { type: "activation", options: { sequence: 0 } }, input.onError);
|
|
153
|
+
}
|
|
154
|
+
async function turnOperation(data) {
|
|
155
|
+
const key = turnKey(data.identity);
|
|
156
|
+
const turn = checkpointer === undefined
|
|
157
|
+
? await hydrate(key, undefined, startTurn(data, key), data.context)
|
|
158
|
+
: await cache(key, (cached) => hydrate(key, cached, startTurn(data, key), data.context, data.capture));
|
|
159
|
+
return handle(turn.root);
|
|
160
|
+
}
|
|
161
|
+
async function resume(data) {
|
|
162
|
+
if (checkpointer === undefined)
|
|
163
|
+
return undefined;
|
|
164
|
+
const key = turnKey(data.identity);
|
|
165
|
+
const turn = await cache(key, (cached) => hydrate(key, cached, undefined, data.context));
|
|
166
|
+
return turn === undefined ? undefined : handle(turn.root);
|
|
167
|
+
}
|
|
168
|
+
async function lifecycle(callback) {
|
|
169
|
+
try {
|
|
170
|
+
await callback();
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
report(error, { phase: "complete" });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async function memory(operation, data, execute) {
|
|
177
|
+
const active = telemetry.active();
|
|
178
|
+
const handle = await scopes.start({
|
|
179
|
+
identity: data.identity,
|
|
180
|
+
key: `memory:${randomUUID()}`,
|
|
181
|
+
capture: data.capture ?? active?.capture ?? METADATA_ONLY,
|
|
182
|
+
parent: data.parent ?? active?.reference,
|
|
183
|
+
context: data.context,
|
|
184
|
+
data: {
|
|
185
|
+
type: "memory",
|
|
186
|
+
options: { operation, phase: data.phase, slot: data.slot, storeId: data.storeId },
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
let value;
|
|
190
|
+
try {
|
|
191
|
+
value = await handle.run(execute);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
await handle.fail(error).catch((tracingError) => report(tracingError, { phase: "complete" }));
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
await handle
|
|
198
|
+
.complete({ outcome: "completed", ...data.describe?.(value) })
|
|
199
|
+
.catch((error) => report(error, { phase: "complete" }));
|
|
200
|
+
return value;
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
turn: wrappedOperation(turnOperation, undefined, input.onError),
|
|
204
|
+
resume,
|
|
205
|
+
memory: {
|
|
206
|
+
search: (data, execute) => memory("search_memory", data, execute),
|
|
207
|
+
write: (data, execute) => memory("upsert_memory", data, execute),
|
|
208
|
+
},
|
|
209
|
+
forceFlush: () => lifecycle(() => telemetry.forceFlush()),
|
|
210
|
+
shutdown: () => lifecycle(() => telemetry.shutdown()),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=agent-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../../src/agent-run.ts"],"names":[],"mappings":"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"}
|