@respan/instrumentation-cursor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,56 @@
1
+ # Respan Cursor SDK Instrumentation
2
+
3
+ Native Respan instrumentation for the Cursor TypeScript SDK (`@cursor/sdk`).
4
+
5
+ The instrumentor patches the Cursor SDK module you provide and emits canonical Respan spans for:
6
+
7
+ - `Agent.prompt()`
8
+ - `Agent.create()` and `Agent.resume()`
9
+ - `SDKAgent.send()`
10
+ - `Run.stream()` and `Run.wait()`
11
+ - Cursor SDK message types: assistant, user, thinking, status, task, request, and tool calls
12
+ - per-run custom tools passed through `local.customTools`
13
+
14
+ ## Usage
15
+
16
+ ```ts
17
+ import * as CursorSDK from "@cursor/sdk";
18
+ import { Respan } from "@respan/respan";
19
+ import { CursorSDKInstrumentor } from "@respan/instrumentation-cursor";
20
+
21
+ const cursorSdkModule = { ...CursorSDK };
22
+
23
+ const respan = new Respan({
24
+ instrumentations: [
25
+ new CursorSDKInstrumentor({
26
+ sdkModule: cursorSdkModule,
27
+ agentName: "cursor-agent",
28
+ }),
29
+ ],
30
+ });
31
+
32
+ await respan.initialize();
33
+
34
+ const agent = await cursorSdkModule.Agent.create({
35
+ name: "Cursor docs agent",
36
+ model: { id: "gpt-4o" },
37
+ });
38
+
39
+ const run = await agent.send("Summarize this repository.");
40
+ for await (const event of run.stream()) {
41
+ console.log(event.type);
42
+ }
43
+
44
+ await respan.flush();
45
+ ```
46
+
47
+ ## Constant ownership
48
+
49
+ This package keeps Cursor SDK raw field names local and emits the public Respan span contract:
50
+
51
+ - Traceloop keys come from `@traceloop/ai-semantic-conventions`.
52
+ - GenAI keys come from `@opentelemetry/semantic-conventions/incubating`.
53
+ - Respan-owned keys come from `@respan/respan-sdk`.
54
+ - Tool definitions use `llm.request.functions`.
55
+ - This-turn tool calls use `gen_ai.completion.0.tool_calls`.
56
+ - Deprecated aliases such as `respan.span.tools`, `respan.span.tool_calls`, `tools`, and `tool_calls` are not emitted.
@@ -0,0 +1,64 @@
1
+ type AnyRecord = Record<string, any>;
2
+ export interface CursorRunState {
3
+ agentId?: string;
4
+ agentName: string;
5
+ agentSpanId: string;
6
+ callbackEvents: CursorTaskEvent[];
7
+ durationMs?: number;
8
+ emitted: boolean;
9
+ errorMessage?: string;
10
+ inputMessages: AnyRecord[];
11
+ model?: string;
12
+ operation: string;
13
+ outputTextParts: string[];
14
+ parentSpanId?: string;
15
+ pendingTools: Map<string, PendingToolState>;
16
+ requestId?: string;
17
+ result?: string;
18
+ runId?: string;
19
+ startTime: [number, number];
20
+ status: string;
21
+ statusCode: number;
22
+ taskEvents: CursorTaskEvent[];
23
+ toolCalls: AnyRecord[];
24
+ toolDefinitions: AnyRecord[];
25
+ traceId: string;
26
+ workflowName: string;
27
+ }
28
+ interface PendingToolState {
29
+ args: unknown;
30
+ callId: string;
31
+ name: string;
32
+ startTime: [number, number];
33
+ }
34
+ interface CursorTaskEvent {
35
+ input?: unknown;
36
+ name: string;
37
+ output?: unknown;
38
+ startTime: [number, number];
39
+ statusCode?: number;
40
+ errorMessage?: string;
41
+ }
42
+ export declare function createCursorRunState({ agent, agentName, agentOptions, message, operation, options, }: {
43
+ agent?: unknown;
44
+ agentName?: string;
45
+ agentOptions?: AnyRecord;
46
+ message?: unknown;
47
+ operation: string;
48
+ options?: AnyRecord;
49
+ }): CursorRunState;
50
+ export declare function registerCursorToolDefinitions(state: CursorRunState, tools: AnyRecord[]): void;
51
+ export declare function trackCursorMessage(state: CursorRunState, rawMessage: unknown): void;
52
+ export declare function trackCursorCallback(state: CursorRunState, callbackName: string, payload: unknown): void;
53
+ export declare function recordCursorRunResult(state: CursorRunState, result: unknown): void;
54
+ export declare function markCursorRunError(state: CursorRunState, error: unknown): void;
55
+ export declare function emitCursorToolExecution({ args, callId, error, result, state, toolName, }: {
56
+ args: unknown;
57
+ callId?: string;
58
+ error?: unknown;
59
+ result?: unknown;
60
+ state: CursorRunState;
61
+ toolName: string;
62
+ }): void;
63
+ export declare function emitFinalCursorRunSpans(state: CursorRunState): void;
64
+ export {};
@@ -0,0 +1,622 @@
1
+ import { context, trace } from "@opentelemetry/api";
2
+ import { hrTime } from "@opentelemetry/core";
3
+ import { ATTR_GEN_AI_COMPLETION, ATTR_GEN_AI_PROMPT, ATTR_GEN_AI_REQUEST_MODEL, ATTR_GEN_AI_SYSTEM, } from "@opentelemetry/semantic-conventions/incubating";
4
+ import { RespanLogType, RespanSpanAttributes } from "@respan/respan-sdk";
5
+ import { WORKFLOW_NAME_KEY, buildReadableSpan, ensureSpanId, ensureTraceId, getPropagatedAttributes, injectSpan, } from "@respan/tracing";
6
+ import { SpanAttributes } from "@traceloop/ai-semantic-conventions";
7
+ const PACKAGE_VERSION = "0.1.0";
8
+ const INSTRUMENTATION_NAME = "@respan/instrumentation-cursor";
9
+ const RESPAN_LOG_METHOD_TS_TRACING = "ts_tracing";
10
+ const CURSOR_SYSTEM = "cursor";
11
+ const TL = SpanAttributes;
12
+ const ATTR_TRACELOOP_ENTITY_NAME = TL.TRACELOOP_ENTITY_NAME ?? "traceloop.entity.name";
13
+ const ATTR_TRACELOOP_ENTITY_PATH = TL.TRACELOOP_ENTITY_PATH ?? "traceloop.entity.path";
14
+ const ATTR_TRACELOOP_ENTITY_INPUT = TL.TRACELOOP_ENTITY_INPUT ?? "traceloop.entity.input";
15
+ const ATTR_TRACELOOP_ENTITY_OUTPUT = TL.TRACELOOP_ENTITY_OUTPUT ?? "traceloop.entity.output";
16
+ const ATTR_TRACELOOP_WORKFLOW_NAME = TL.TRACELOOP_WORKFLOW_NAME ?? "traceloop.workflow.name";
17
+ const ATTR_LLM_REQUEST_TYPE = TL.LLM_REQUEST_TYPE ?? "llm.request.type";
18
+ const ATTR_LLM_REQUEST_FUNCTIONS = TL.LLM_REQUEST_FUNCTIONS ?? "llm.request.functions";
19
+ const GEN_AI_COMPLETION_PREFIX = `${ATTR_GEN_AI_COMPLETION}.0`;
20
+ const GEN_AI_COMPLETION_ROLE = `${GEN_AI_COMPLETION_PREFIX}.role`;
21
+ const GEN_AI_COMPLETION_CONTENT = `${GEN_AI_COMPLETION_PREFIX}.content`;
22
+ const GEN_AI_COMPLETION_TOOL_CALLS = `${GEN_AI_COMPLETION_PREFIX}.tool_calls`;
23
+ export function createCursorRunState({ agent, agentName, agentOptions, message, operation, options, }) {
24
+ const activeSpan = trace.getSpan(context.active());
25
+ const activeSpanContext = activeSpan?.spanContext();
26
+ const agentRecord = asRecord(agent);
27
+ const resolvedAgentName = stringValue(agentName) ??
28
+ stringValue(options?.name) ??
29
+ stringValue(agentOptions?.name) ??
30
+ stringValue(agentRecord?.name) ??
31
+ "cursor-agent";
32
+ const propagated = getPropagatedAttributes();
33
+ const propagatedMetadata = asRecord(propagated?.metadata);
34
+ const workflowName = stringValue(context.active().getValue(WORKFLOW_NAME_KEY)) ??
35
+ stringValue(propagatedMetadata?.workflow_name) ??
36
+ stringValue(propagated?.trace_group_identifier) ??
37
+ resolvedAgentName;
38
+ const inputMessages = message === undefined ? [] : [normalizeUserMessage(message)];
39
+ const toolDefinitions = dedupeObjects([
40
+ ...normalizeConfiguredTools(agentOptions),
41
+ ...normalizeConfiguredTools(options),
42
+ ]);
43
+ return {
44
+ agentId: stringValue(agentRecord?.agentId),
45
+ agentName: resolvedAgentName,
46
+ agentSpanId: ensureSpanId(),
47
+ callbackEvents: [],
48
+ emitted: false,
49
+ inputMessages,
50
+ model: resolveModel(options?.model ?? agentOptions?.model ?? agentRecord?.model),
51
+ operation,
52
+ outputTextParts: [],
53
+ parentSpanId: activeSpanContext?.spanId,
54
+ pendingTools: new Map(),
55
+ startTime: hrTime(),
56
+ status: "running",
57
+ statusCode: 200,
58
+ taskEvents: [],
59
+ toolCalls: [],
60
+ toolDefinitions,
61
+ traceId: ensureTraceId(activeSpanContext?.traceId),
62
+ workflowName,
63
+ };
64
+ }
65
+ export function registerCursorToolDefinitions(state, tools) {
66
+ state.toolDefinitions = dedupeObjects([
67
+ ...state.toolDefinitions,
68
+ ...tools,
69
+ ]);
70
+ }
71
+ export function trackCursorMessage(state, rawMessage) {
72
+ const message = asRecord(rawMessage);
73
+ if (!message)
74
+ return;
75
+ state.agentId = stringValue(message.agent_id) ?? state.agentId;
76
+ state.runId = stringValue(message.run_id) ?? state.runId;
77
+ switch (message.type) {
78
+ case "system":
79
+ state.model = resolveModel(message.model) ?? state.model;
80
+ if (Array.isArray(message.tools)) {
81
+ registerCursorToolDefinitions(state, message.tools
82
+ .map((toolName) => normalizeToolDefinition(toolName))
83
+ .filter((tool) => tool !== null));
84
+ }
85
+ break;
86
+ case "request":
87
+ state.requestId = stringValue(message.request_id) ?? state.requestId;
88
+ break;
89
+ case "user":
90
+ pushMessageIfUseful(state.inputMessages, normalizeSdkUserMessage(message.message));
91
+ break;
92
+ case "assistant":
93
+ trackAssistantMessage(state, message.message);
94
+ break;
95
+ case "tool_call":
96
+ trackToolCallMessage(state, message);
97
+ break;
98
+ case "thinking":
99
+ trackTaskEvent(state, {
100
+ name: "cursor.thinking",
101
+ output: message.text,
102
+ startTime: hrTime(),
103
+ });
104
+ break;
105
+ case "task":
106
+ trackTaskEvent(state, {
107
+ name: stringValue(message.status) ?? "cursor.task",
108
+ input: message.status,
109
+ output: message.text,
110
+ startTime: hrTime(),
111
+ });
112
+ break;
113
+ case "status":
114
+ state.status = stringValue(message.status) ?? state.status;
115
+ if (message.status === "ERROR" || message.status === "CANCELLED") {
116
+ state.statusCode = 500;
117
+ state.errorMessage = stringValue(message.message) ?? state.errorMessage;
118
+ }
119
+ trackTaskEvent(state, {
120
+ name: "cursor.status",
121
+ input: message.status,
122
+ output: message.message,
123
+ startTime: hrTime(),
124
+ statusCode: message.status === "ERROR" ? 500 : 200,
125
+ });
126
+ break;
127
+ }
128
+ }
129
+ export function trackCursorCallback(state, callbackName, payload) {
130
+ state.callbackEvents.push({
131
+ name: `cursor.${callbackName}`,
132
+ input: payload,
133
+ startTime: hrTime(),
134
+ });
135
+ const record = asRecord(payload);
136
+ const update = asRecord(record?.update);
137
+ if (update) {
138
+ trackCursorDeltaUpdate(state, update);
139
+ }
140
+ }
141
+ export function recordCursorRunResult(state, result) {
142
+ const record = asRecord(result);
143
+ if (!record)
144
+ return;
145
+ state.runId = stringValue(record.id) ?? state.runId;
146
+ state.requestId = stringValue(record.requestId) ?? state.requestId;
147
+ state.status = stringValue(record.status) ?? state.status;
148
+ state.result = stringValue(record.result) ?? state.result;
149
+ state.model = resolveModel(record.model) ?? state.model;
150
+ state.durationMs =
151
+ typeof record.durationMs === "number" ? record.durationMs : state.durationMs;
152
+ if (record.status === "error" || record.status === "cancelled") {
153
+ state.statusCode = 500;
154
+ state.errorMessage = state.result ?? state.errorMessage;
155
+ }
156
+ if (state.result && !state.outputTextParts.includes(state.result)) {
157
+ state.outputTextParts.push(state.result);
158
+ }
159
+ }
160
+ export function markCursorRunError(state, error) {
161
+ state.status = "error";
162
+ state.statusCode = 500;
163
+ state.errorMessage = error instanceof Error ? error.message : String(error);
164
+ }
165
+ export function emitCursorToolExecution({ args, callId, error, result, state, toolName, }) {
166
+ const statusCode = error ? 500 : 200;
167
+ const errorMessage = error instanceof Error ? error.message : error ? String(error) : undefined;
168
+ const toolCall = normalizeToolCall({ id: callId, name: toolName, args });
169
+ if (toolCall)
170
+ state.toolCalls.push(toolCall);
171
+ emitToolSpan({
172
+ args,
173
+ errorMessage,
174
+ result: error ? errorMessage : result,
175
+ startTime: hrTime(),
176
+ state,
177
+ statusCode,
178
+ toolName,
179
+ });
180
+ }
181
+ export function emitFinalCursorRunSpans(state) {
182
+ if (state.emitted)
183
+ return;
184
+ state.emitted = true;
185
+ for (const taskEvent of [...state.taskEvents, ...state.callbackEvents]) {
186
+ emitTaskSpan(state, taskEvent);
187
+ }
188
+ emitChatSpan(state);
189
+ emitAgentSpan(state);
190
+ }
191
+ function trackAssistantMessage(state, messagePayload) {
192
+ const message = asRecord(messagePayload);
193
+ if (!message)
194
+ return;
195
+ const content = Array.isArray(message.content) ? message.content : [];
196
+ const textParts = [];
197
+ const assistantToolCalls = [];
198
+ for (const block of content) {
199
+ const blockRecord = asRecord(block);
200
+ if (!blockRecord)
201
+ continue;
202
+ if (blockRecord.type === "text") {
203
+ const text = stringValue(blockRecord.text);
204
+ if (text) {
205
+ textParts.push(text);
206
+ state.outputTextParts.push(text);
207
+ }
208
+ }
209
+ if (blockRecord.type === "tool_use") {
210
+ const toolCall = normalizeToolCall(blockRecord);
211
+ if (toolCall) {
212
+ assistantToolCalls.push(toolCall);
213
+ state.toolCalls.push(toolCall);
214
+ }
215
+ }
216
+ }
217
+ state.inputMessages.push({
218
+ role: "assistant",
219
+ content: textParts.join(""),
220
+ ...(assistantToolCalls.length > 0 ? { tool_calls: dedupeObjects(assistantToolCalls) } : {}),
221
+ });
222
+ }
223
+ function trackToolCallMessage(state, message) {
224
+ const callId = stringValue(message.call_id) ?? ensureSpanId();
225
+ const toolName = stringValue(message.name) ?? "cursor_tool";
226
+ const status = stringValue(message.status) ?? "";
227
+ if (status === "running") {
228
+ state.pendingTools.set(callId, {
229
+ args: message.args,
230
+ callId,
231
+ name: toolName,
232
+ startTime: hrTime(),
233
+ });
234
+ return;
235
+ }
236
+ const pending = state.pendingTools.get(callId);
237
+ state.pendingTools.delete(callId);
238
+ const isError = status === "error";
239
+ const result = message.result;
240
+ const errorMessage = isError ? stringifyValue(result ?? "Cursor tool call failed") : undefined;
241
+ const toolCall = normalizeToolCall({
242
+ id: callId,
243
+ name: toolName,
244
+ args: pending?.args ?? message.args,
245
+ });
246
+ if (toolCall)
247
+ state.toolCalls.push(toolCall);
248
+ emitToolSpan({
249
+ args: pending?.args ?? message.args,
250
+ errorMessage,
251
+ result: isError ? errorMessage : result,
252
+ startTime: pending?.startTime ?? hrTime(),
253
+ state,
254
+ statusCode: isError ? 500 : 200,
255
+ toolName,
256
+ });
257
+ }
258
+ function trackCursorDeltaUpdate(state, update) {
259
+ if (update.type === "tool-call-started") {
260
+ const callId = stringValue(update.callId) ?? ensureSpanId();
261
+ const toolCall = asRecord(update.toolCall);
262
+ state.pendingTools.set(callId, {
263
+ args: toolCall?.args,
264
+ callId,
265
+ name: stringValue(toolCall?.type) ?? "cursor_tool",
266
+ startTime: hrTime(),
267
+ });
268
+ }
269
+ if (update.type === "tool-call-completed") {
270
+ const callId = stringValue(update.callId) ?? ensureSpanId();
271
+ const pending = state.pendingTools.get(callId);
272
+ state.pendingTools.delete(callId);
273
+ const toolCall = asRecord(update.toolCall);
274
+ const toolName = stringValue(toolCall?.type) ?? pending?.name ?? "cursor_tool";
275
+ const args = pending?.args ?? toolCall?.args;
276
+ emitCursorToolExecution({
277
+ args,
278
+ callId,
279
+ result: toolCall?.result,
280
+ state,
281
+ toolName,
282
+ });
283
+ }
284
+ }
285
+ function trackTaskEvent(state, event) {
286
+ state.taskEvents.push(event);
287
+ }
288
+ function emitAgentSpan(state) {
289
+ const attrs = baseAttrs(state.agentName, "", RespanLogType.AGENT);
290
+ attrs[ATTR_TRACELOOP_WORKFLOW_NAME] = state.workflowName;
291
+ attrs[ATTR_TRACELOOP_ENTITY_INPUT] = safeJson(state.inputMessages);
292
+ attrs[ATTR_TRACELOOP_ENTITY_OUTPUT] = state.result ?? state.outputTextParts.join("");
293
+ attrs[RespanSpanAttributes.RESPAN_METADATA_AGENT_NAME] = state.agentName;
294
+ attrs[RespanSpanAttributes.RESPAN_LOG_METHOD] = RESPAN_LOG_METHOD_TS_TRACING;
295
+ attrs[ATTR_TRACELOOP_WORKFLOW_NAME] = state.workflowName;
296
+ setIfPresent(attrs, RespanSpanAttributes.RESPAN_SESSION_ID, state.runId);
297
+ setMetadata(attrs, "cursor_agent_id", state.agentId);
298
+ setMetadata(attrs, "cursor_run_id", state.runId);
299
+ setMetadata(attrs, "cursor_request_id", state.requestId);
300
+ setMetadata(attrs, "cursor_operation", state.operation);
301
+ setMetadata(attrs, "cursor_status", state.status);
302
+ setIfPresent(attrs, ATTR_GEN_AI_REQUEST_MODEL, state.model);
303
+ const span = buildCursorReadableSpan({
304
+ name: `${state.agentName}.agent`,
305
+ traceId: state.traceId,
306
+ spanId: state.agentSpanId,
307
+ parentId: state.parentSpanId,
308
+ startTimeHr: state.startTime,
309
+ attributes: attrs,
310
+ statusCode: state.statusCode,
311
+ errorMessage: state.errorMessage,
312
+ });
313
+ injectSpan(span);
314
+ }
315
+ function emitChatSpan(state) {
316
+ const output = state.result ?? state.outputTextParts.join("");
317
+ const toolCalls = dedupeToolCalls(state.toolCalls);
318
+ const tools = dedupeToolDefinitions(state.toolDefinitions);
319
+ const attrs = baseAttrs("cursor.chat", "cursor.chat", RespanLogType.CHAT);
320
+ attrs[ATTR_LLM_REQUEST_TYPE] = RespanLogType.CHAT;
321
+ attrs[ATTR_GEN_AI_SYSTEM] = CURSOR_SYSTEM;
322
+ setIfPresent(attrs, ATTR_GEN_AI_REQUEST_MODEL, state.model);
323
+ attrs[ATTR_TRACELOOP_ENTITY_INPUT] = safeJson(state.inputMessages);
324
+ attrs[ATTR_TRACELOOP_ENTITY_OUTPUT] = output;
325
+ attrs[RespanSpanAttributes.RESPAN_LOG_METHOD] = RESPAN_LOG_METHOD_TS_TRACING;
326
+ attrs[ATTR_TRACELOOP_WORKFLOW_NAME] = state.workflowName;
327
+ setIfPresent(attrs, RespanSpanAttributes.RESPAN_SESSION_ID, state.runId);
328
+ state.inputMessages.forEach((message, index) => {
329
+ setIfPresent(attrs, `${ATTR_GEN_AI_PROMPT}.${index}.role`, message.role);
330
+ setIfPresent(attrs, `${ATTR_GEN_AI_PROMPT}.${index}.content`, stringifyMessageContent(message.content));
331
+ if (message.tool_calls) {
332
+ attrs[`${ATTR_GEN_AI_PROMPT}.${index}.tool_calls`] = safeJson(message.tool_calls);
333
+ }
334
+ });
335
+ attrs[GEN_AI_COMPLETION_ROLE] = "assistant";
336
+ attrs[GEN_AI_COMPLETION_CONTENT] = output;
337
+ if (toolCalls.length > 0)
338
+ attrs[GEN_AI_COMPLETION_TOOL_CALLS] = safeJson(toolCalls);
339
+ if (tools.length > 0)
340
+ attrs[ATTR_LLM_REQUEST_FUNCTIONS] = safeJson(tools);
341
+ const span = buildCursorReadableSpan({
342
+ name: "cursor.chat",
343
+ traceId: state.traceId,
344
+ parentId: state.agentSpanId,
345
+ startTimeHr: state.startTime,
346
+ attributes: attrs,
347
+ statusCode: state.statusCode,
348
+ errorMessage: state.errorMessage,
349
+ });
350
+ injectSpan(span);
351
+ }
352
+ function emitToolSpan({ args, errorMessage, result, startTime, state, statusCode, toolName, }) {
353
+ const attrs = baseAttrs(toolName, toolName, RespanLogType.TOOL);
354
+ attrs[ATTR_TRACELOOP_ENTITY_INPUT] = safeJson({
355
+ name: toolName,
356
+ arguments: toSerializableValue(args ?? {}),
357
+ });
358
+ attrs[ATTR_TRACELOOP_ENTITY_OUTPUT] = safeJson(toSerializableValue(result ?? ""));
359
+ attrs[RespanSpanAttributes.RESPAN_LOG_METHOD] = RESPAN_LOG_METHOD_TS_TRACING;
360
+ attrs[ATTR_TRACELOOP_WORKFLOW_NAME] = state.workflowName;
361
+ setIfPresent(attrs, RespanSpanAttributes.RESPAN_SESSION_ID, state.runId);
362
+ const span = buildCursorReadableSpan({
363
+ name: `${toolName}.tool`,
364
+ traceId: state.traceId,
365
+ parentId: state.agentSpanId,
366
+ startTimeHr: startTime,
367
+ attributes: attrs,
368
+ statusCode,
369
+ errorMessage,
370
+ });
371
+ injectSpan(span);
372
+ }
373
+ function emitTaskSpan(state, event) {
374
+ const attrs = baseAttrs(event.name, event.name, RespanLogType.TASK);
375
+ if (event.input !== undefined)
376
+ attrs[ATTR_TRACELOOP_ENTITY_INPUT] = safeJson(toSerializableValue(event.input));
377
+ if (event.output !== undefined)
378
+ attrs[ATTR_TRACELOOP_ENTITY_OUTPUT] = safeJson(toSerializableValue(event.output));
379
+ attrs[RespanSpanAttributes.RESPAN_LOG_METHOD] = RESPAN_LOG_METHOD_TS_TRACING;
380
+ attrs[ATTR_TRACELOOP_WORKFLOW_NAME] = state.workflowName;
381
+ setIfPresent(attrs, RespanSpanAttributes.RESPAN_SESSION_ID, state.runId);
382
+ const span = buildCursorReadableSpan({
383
+ name: `${event.name}.task`,
384
+ traceId: state.traceId,
385
+ parentId: state.agentSpanId,
386
+ startTimeHr: event.startTime,
387
+ attributes: attrs,
388
+ statusCode: event.statusCode,
389
+ errorMessage: event.errorMessage,
390
+ });
391
+ injectSpan(span);
392
+ }
393
+ function baseAttrs(entityName, entityPath, logType) {
394
+ return {
395
+ [ATTR_TRACELOOP_ENTITY_NAME]: entityName,
396
+ [ATTR_TRACELOOP_ENTITY_PATH]: entityPath,
397
+ [RespanSpanAttributes.RESPAN_LOG_TYPE]: logType,
398
+ };
399
+ }
400
+ function buildCursorReadableSpan(options) {
401
+ const span = buildReadableSpan(options);
402
+ span.instrumentationLibrary = { name: INSTRUMENTATION_NAME, version: PACKAGE_VERSION };
403
+ return span;
404
+ }
405
+ function normalizeConfiguredTools(options) {
406
+ if (!options)
407
+ return [];
408
+ const tools = [];
409
+ const local = asRecord(options.local);
410
+ const customTools = asRecord(local?.customTools);
411
+ if (customTools) {
412
+ for (const [toolName, tool] of Object.entries(customTools)) {
413
+ const toolRecord = asRecord(tool);
414
+ const normalized = normalizeToolDefinition({
415
+ name: toolName,
416
+ description: toolRecord?.description,
417
+ inputSchema: toolRecord?.inputSchema,
418
+ });
419
+ if (normalized)
420
+ tools.push(normalized);
421
+ }
422
+ }
423
+ const mcpServers = asRecord(options.mcpServers);
424
+ if (mcpServers) {
425
+ for (const serverName of Object.keys(mcpServers)) {
426
+ const normalized = normalizeToolDefinition({
427
+ name: `mcp__${serverName}`,
428
+ description: `Cursor MCP server ${serverName}`,
429
+ });
430
+ if (normalized)
431
+ tools.push(normalized);
432
+ }
433
+ }
434
+ return tools;
435
+ }
436
+ function normalizeToolDefinition(tool) {
437
+ if (typeof tool === "string" && tool) {
438
+ return { type: "function", function: { name: tool } };
439
+ }
440
+ const record = asRecord(tool);
441
+ if (!record)
442
+ return null;
443
+ const functionRecord = asRecord(record.function);
444
+ const name = stringValue(functionRecord?.name) ?? stringValue(record.name) ?? stringValue(record.type);
445
+ if (!name)
446
+ return null;
447
+ const description = stringValue(functionRecord?.description) ?? stringValue(record.description);
448
+ const parameters = functionRecord?.parameters ?? record.parameters ?? record.inputSchema ?? record.input_schema;
449
+ return {
450
+ type: "function",
451
+ function: {
452
+ name,
453
+ ...(description ? { description } : {}),
454
+ ...(parameters !== undefined ? { parameters: toSerializableValue(parameters) } : {}),
455
+ },
456
+ };
457
+ }
458
+ function normalizeToolCall(rawToolCall) {
459
+ const record = asRecord(rawToolCall);
460
+ if (!record)
461
+ return null;
462
+ const functionRecord = asRecord(record.function);
463
+ const toolName = stringValue(functionRecord?.name) ?? stringValue(record.name) ?? stringValue(record.toolName);
464
+ if (!toolName)
465
+ return null;
466
+ const args = functionRecord?.arguments ?? record.args ?? record.arguments ?? record.input ?? {};
467
+ return {
468
+ id: stringValue(record.id) ?? stringValue(record.call_id) ?? stringValue(record.callId) ?? "",
469
+ type: "function",
470
+ function: {
471
+ name: toolName,
472
+ arguments: typeof args === "string" ? args : safeJson(args),
473
+ },
474
+ };
475
+ }
476
+ function normalizeUserMessage(message) {
477
+ if (typeof message === "string")
478
+ return { role: "user", content: message };
479
+ const record = asRecord(message);
480
+ if (record && typeof record.text === "string") {
481
+ return {
482
+ role: "user",
483
+ content: record.text,
484
+ ...(Array.isArray(record.images) ? { images: toSerializableValue(record.images) } : {}),
485
+ };
486
+ }
487
+ return { role: "user", content: toSerializableValue(message) };
488
+ }
489
+ function normalizeSdkUserMessage(message) {
490
+ const record = asRecord(message);
491
+ const content = Array.isArray(record?.content) ? record?.content : [];
492
+ const text = content
493
+ .map((block) => {
494
+ const blockRecord = asRecord(block);
495
+ return stringValue(blockRecord?.text) ?? "";
496
+ })
497
+ .filter(Boolean)
498
+ .join("");
499
+ return { role: "user", content: text || toSerializableValue(message) };
500
+ }
501
+ function pushMessageIfUseful(messages, message) {
502
+ const serialized = safeJson(message);
503
+ if (messages.some((existing) => safeJson(existing) === serialized))
504
+ return;
505
+ messages.push(message);
506
+ }
507
+ function resolveModel(model) {
508
+ if (typeof model === "string" && model)
509
+ return model;
510
+ const record = asRecord(model);
511
+ return stringValue(record?.id) ?? stringValue(record?.model);
512
+ }
513
+ function setMetadata(attrs, key, value) {
514
+ if (value === undefined || value === null || value === "")
515
+ return;
516
+ attrs[`respan.metadata.${key}`] = String(value);
517
+ }
518
+ function setIfPresent(attrs, key, value) {
519
+ if (value === undefined || value === null || value === "")
520
+ return;
521
+ attrs[key] = typeof value === "object" ? safeJson(value) : value;
522
+ }
523
+ function stringifyMessageContent(content) {
524
+ if (content === undefined || content === null)
525
+ return "";
526
+ if (typeof content === "string")
527
+ return content;
528
+ return safeJson(content);
529
+ }
530
+ function stringifyValue(value) {
531
+ if (value === undefined || value === null)
532
+ return "";
533
+ if (typeof value === "string")
534
+ return value;
535
+ return safeJson(value);
536
+ }
537
+ function safeJson(value) {
538
+ try {
539
+ return JSON.stringify(toSerializableValue(value), (_key, innerValue) => typeof innerValue === "bigint" ? innerValue.toString() : innerValue);
540
+ }
541
+ catch {
542
+ return String(value);
543
+ }
544
+ }
545
+ function toSerializableValue(value) {
546
+ if (value === undefined || value === null)
547
+ return undefined;
548
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
549
+ return value;
550
+ if (typeof value === "bigint")
551
+ return value.toString();
552
+ if (value instanceof Date)
553
+ return value.toISOString();
554
+ if (Array.isArray(value)) {
555
+ return value.map((item) => toSerializableValue(item)).filter((item) => item !== undefined);
556
+ }
557
+ if (typeof value === "object") {
558
+ const normalizedObject = {};
559
+ Object.entries(value).forEach(([key, itemValue]) => {
560
+ if (typeof itemValue === "function" || typeof itemValue === "symbol")
561
+ return;
562
+ const normalizedValue = toSerializableValue(itemValue);
563
+ if (normalizedValue !== undefined)
564
+ normalizedObject[key] = normalizedValue;
565
+ });
566
+ return normalizedObject;
567
+ }
568
+ return String(value);
569
+ }
570
+ function asRecord(value) {
571
+ if (!value || typeof value !== "object" || Array.isArray(value))
572
+ return undefined;
573
+ return value;
574
+ }
575
+ function stringValue(value) {
576
+ if (value === undefined || value === null)
577
+ return undefined;
578
+ const text = String(value);
579
+ return text ? text : undefined;
580
+ }
581
+ function dedupeObjects(objects) {
582
+ const seen = new Set();
583
+ const deduped = [];
584
+ for (const object of objects) {
585
+ const signature = safeJson(object);
586
+ if (seen.has(signature))
587
+ continue;
588
+ seen.add(signature);
589
+ deduped.push(object);
590
+ }
591
+ return deduped;
592
+ }
593
+ function dedupeToolDefinitions(tools) {
594
+ const seen = new Set();
595
+ const deduped = [];
596
+ for (const tool of tools) {
597
+ const name = asRecord(tool.function)?.name ?? safeJson(tool);
598
+ if (seen.has(String(name)))
599
+ continue;
600
+ seen.add(String(name));
601
+ deduped.push(tool);
602
+ }
603
+ return deduped;
604
+ }
605
+ function dedupeToolCalls(toolCalls) {
606
+ const seen = new Set();
607
+ const deduped = [];
608
+ for (const toolCall of toolCalls) {
609
+ const functionRecord = asRecord(toolCall.function);
610
+ const signature = safeJson([
611
+ toolCall.id ?? "",
612
+ functionRecord?.name ?? "",
613
+ functionRecord?.arguments ?? "",
614
+ ]);
615
+ if (seen.has(signature))
616
+ continue;
617
+ seen.add(signature);
618
+ deduped.push(toolCall);
619
+ }
620
+ return deduped;
621
+ }
622
+ //# sourceMappingURL=_otel_emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_otel_emitter.js","sourceRoot":"","sources":["../src/_otel_emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Respan instrumentation plugin for the Cursor TypeScript SDK.
3
+ *
4
+ * Cursor SDK's ESM namespace is immutable, so pass a mutable module copy:
5
+ *
6
+ * ```ts
7
+ * import * as CursorSDK from "@cursor/sdk";
8
+ * const cursorSdkModule = { ...CursorSDK };
9
+ *
10
+ * new CursorSDKInstrumentor({ sdkModule: cursorSdkModule });
11
+ * ```
12
+ */
13
+ export interface CursorSDKInstrumentorOptions {
14
+ agentName?: string;
15
+ sdkModule: Record<string, unknown>;
16
+ }
17
+ export declare class CursorSDKInstrumentor {
18
+ readonly name = "cursor-sdk";
19
+ private readonly _agentName?;
20
+ private readonly _sdkModule;
21
+ private readonly _agentOptions;
22
+ private readonly _patchedAgents;
23
+ private _patchedRuns;
24
+ private _isInstrumented;
25
+ private _patches;
26
+ private _suppressNestedPromptInstrumentation;
27
+ constructor({ sdkModule, agentName }: CursorSDKInstrumentorOptions);
28
+ activate(): void;
29
+ deactivate(): void;
30
+ private _patchAgentStatics;
31
+ private _wrapAgent;
32
+ private _wrapRun;
33
+ private _wrapAgentOptions;
34
+ private _wrapSendOptions;
35
+ private _wrapOptions;
36
+ private _patchMethod;
37
+ }
package/dist/index.js ADDED
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Respan instrumentation plugin for the Cursor TypeScript SDK.
3
+ *
4
+ * Cursor SDK's ESM namespace is immutable, so pass a mutable module copy:
5
+ *
6
+ * ```ts
7
+ * import * as CursorSDK from "@cursor/sdk";
8
+ * const cursorSdkModule = { ...CursorSDK };
9
+ *
10
+ * new CursorSDKInstrumentor({ sdkModule: cursorSdkModule });
11
+ * ```
12
+ */
13
+ import { createCursorRunState, emitCursorToolExecution, emitFinalCursorRunSpans, markCursorRunError, recordCursorRunResult, registerCursorToolDefinitions, trackCursorCallback, trackCursorMessage, } from "./_otel_emitter.js";
14
+ const INSTRUMENTOR_LOG_PREFIX = "[respan] CursorSDKInstrumentor";
15
+ export class CursorSDKInstrumentor {
16
+ name = "cursor-sdk";
17
+ _agentName;
18
+ _sdkModule;
19
+ _agentOptions = new WeakMap();
20
+ _patchedAgents = new WeakSet();
21
+ _patchedRuns = new WeakMap();
22
+ _isInstrumented = false;
23
+ _patches = [];
24
+ _suppressNestedPromptInstrumentation = 0;
25
+ constructor({ sdkModule, agentName }) {
26
+ this._sdkModule = sdkModule;
27
+ this._agentName = agentName;
28
+ }
29
+ activate() {
30
+ if (this._isInstrumented)
31
+ return;
32
+ const Agent = this._sdkModule.Agent;
33
+ if (!Agent || (typeof Agent !== "function" && typeof Agent !== "object")) {
34
+ throw new Error("CursorSDKInstrumentor requires sdkModule.Agent from @cursor/sdk.");
35
+ }
36
+ this._patchAgentStatics(Agent);
37
+ this._isInstrumented = true;
38
+ }
39
+ deactivate() {
40
+ for (const undo of [...this._patches].reverse()) {
41
+ try {
42
+ undo();
43
+ }
44
+ catch { /* best effort */ }
45
+ }
46
+ this._patches = [];
47
+ this._patchedRuns = new WeakMap();
48
+ this._suppressNestedPromptInstrumentation = 0;
49
+ this._isInstrumented = false;
50
+ }
51
+ _patchAgentStatics(Agent) {
52
+ this._patchMethod(Agent, "create", (original) => {
53
+ const instrumentor = this;
54
+ return async function patchedCreate(options) {
55
+ if (instrumentor._suppressNestedPromptInstrumentation > 0) {
56
+ return await original.call(this, options);
57
+ }
58
+ const agent = await original.call(this, instrumentor._wrapAgentOptions(options));
59
+ return instrumentor._wrapAgent(agent, options);
60
+ };
61
+ });
62
+ this._patchMethod(Agent, "resume", (original) => {
63
+ const instrumentor = this;
64
+ return async function patchedResume(agentId, options) {
65
+ if (instrumentor._suppressNestedPromptInstrumentation > 0) {
66
+ return await original.call(this, agentId, options);
67
+ }
68
+ const agent = await original.call(this, agentId, instrumentor._wrapAgentOptions(options));
69
+ return instrumentor._wrapAgent(agent, { ...(options ?? {}), agentId });
70
+ };
71
+ });
72
+ this._patchMethod(Agent, "prompt", (original) => {
73
+ const instrumentor = this;
74
+ return async function patchedPrompt(message, options) {
75
+ const state = createCursorRunState({
76
+ agentName: instrumentor._agentName,
77
+ agentOptions: options,
78
+ message,
79
+ operation: "Agent.prompt",
80
+ options,
81
+ });
82
+ const wrappedOptions = instrumentor._wrapAgentOptions(options, state);
83
+ instrumentor._suppressNestedPromptInstrumentation += 1;
84
+ try {
85
+ const result = await original.call(this, message, wrappedOptions);
86
+ recordCursorRunResult(state, result);
87
+ return result;
88
+ }
89
+ catch (error) {
90
+ markCursorRunError(state, error);
91
+ throw error;
92
+ }
93
+ finally {
94
+ instrumentor._suppressNestedPromptInstrumentation -= 1;
95
+ emitFinalCursorRunSpans(state);
96
+ }
97
+ };
98
+ });
99
+ this._patchMethod(Agent, "getRun", (original) => {
100
+ const instrumentor = this;
101
+ return async function patchedGetRun(runId, options) {
102
+ const run = await original.call(this, runId, options);
103
+ const state = createCursorRunState({
104
+ agentName: instrumentor._agentName,
105
+ operation: "Agent.getRun",
106
+ });
107
+ state.runId = runId;
108
+ return instrumentor._wrapRun(run, state);
109
+ };
110
+ });
111
+ }
112
+ _wrapAgent(agent, agentOptions) {
113
+ if (!agent || typeof agent !== "object")
114
+ return agent;
115
+ const agentObject = agent;
116
+ if (this._patchedAgents.has(agentObject))
117
+ return agent;
118
+ this._patchedAgents.add(agentObject);
119
+ this._agentOptions.set(agentObject, agentOptions);
120
+ this._patchMethod(agentObject, "send", (original) => {
121
+ const instrumentor = this;
122
+ return async function patchedSend(message, options) {
123
+ if (instrumentor._suppressNestedPromptInstrumentation > 0) {
124
+ return await original.call(this, message, options);
125
+ }
126
+ const state = createCursorRunState({
127
+ agent: this,
128
+ agentName: instrumentor._agentName,
129
+ agentOptions: instrumentor._agentOptions.get(this),
130
+ message,
131
+ operation: "SDKAgent.send",
132
+ options,
133
+ });
134
+ const wrappedOptions = instrumentor._wrapSendOptions(options, state);
135
+ try {
136
+ const run = await original.call(this, message, wrappedOptions);
137
+ return instrumentor._wrapRun(run, state);
138
+ }
139
+ catch (error) {
140
+ markCursorRunError(state, error);
141
+ emitFinalCursorRunSpans(state);
142
+ throw error;
143
+ }
144
+ };
145
+ });
146
+ return agent;
147
+ }
148
+ _wrapRun(run, state) {
149
+ if (!run || typeof run !== "object")
150
+ return run;
151
+ const runObject = run;
152
+ if (this._patchedRuns.has(runObject))
153
+ return run;
154
+ this._patchedRuns.set(runObject, state);
155
+ state.runId = stringValue(runObject.id) ?? state.runId;
156
+ state.requestId = stringValue(runObject.requestId) ?? state.requestId;
157
+ state.agentId = stringValue(runObject.agentId) ?? state.agentId;
158
+ state.model = resolveModel(runObject.model) ?? state.model;
159
+ this._patchMethod(runObject, "stream", (original) => {
160
+ return function patchedStream() {
161
+ const stream = original.call(this);
162
+ return (async function* () {
163
+ try {
164
+ for await (const message of stream) {
165
+ try {
166
+ trackCursorMessage(state, message);
167
+ }
168
+ catch (error) {
169
+ console.warn(`${INSTRUMENTOR_LOG_PREFIX} message tracking failed:`, error);
170
+ }
171
+ yield message;
172
+ }
173
+ }
174
+ catch (error) {
175
+ markCursorRunError(state, error);
176
+ throw error;
177
+ }
178
+ finally {
179
+ emitFinalCursorRunSpans(state);
180
+ }
181
+ })();
182
+ };
183
+ });
184
+ this._patchMethod(runObject, "wait", (original) => {
185
+ return async function patchedWait() {
186
+ try {
187
+ const result = await original.call(this);
188
+ recordCursorRunResult(state, result);
189
+ return result;
190
+ }
191
+ catch (error) {
192
+ markCursorRunError(state, error);
193
+ throw error;
194
+ }
195
+ finally {
196
+ emitFinalCursorRunSpans(state);
197
+ }
198
+ };
199
+ });
200
+ return run;
201
+ }
202
+ _wrapAgentOptions(options, state) {
203
+ if (!options)
204
+ return options;
205
+ return this._wrapOptions(options, state);
206
+ }
207
+ _wrapSendOptions(options, state) {
208
+ if (!options)
209
+ return options;
210
+ return this._wrapOptions(options, state);
211
+ }
212
+ _wrapOptions(options, state) {
213
+ const wrapped = { ...options };
214
+ if (typeof options.onStep === "function" && state) {
215
+ const originalOnStep = options.onStep;
216
+ wrapped.onStep = async (...args) => {
217
+ trackCursorCallback(state, "onStep", args[0]);
218
+ return await originalOnStep(...args);
219
+ };
220
+ }
221
+ if (typeof options.onDelta === "function" && state) {
222
+ const originalOnDelta = options.onDelta;
223
+ wrapped.onDelta = async (...args) => {
224
+ trackCursorCallback(state, "onDelta", args[0]);
225
+ return await originalOnDelta(...args);
226
+ };
227
+ }
228
+ const local = asRecord(options.local);
229
+ const customTools = asRecord(local?.customTools);
230
+ if (customTools && state) {
231
+ const wrappedTools = {};
232
+ const toolDefinitions = [];
233
+ for (const [toolName, tool] of Object.entries(customTools)) {
234
+ const toolRecord = asRecord(tool);
235
+ if (!toolRecord || typeof toolRecord.execute !== "function") {
236
+ wrappedTools[toolName] = tool;
237
+ continue;
238
+ }
239
+ toolDefinitions.push({
240
+ type: "function",
241
+ function: {
242
+ name: toolName,
243
+ ...(typeof toolRecord.description === "string" ? { description: toolRecord.description } : {}),
244
+ ...(toolRecord.inputSchema !== undefined ? { parameters: toolRecord.inputSchema } : {}),
245
+ },
246
+ });
247
+ const originalExecute = toolRecord.execute;
248
+ wrappedTools[toolName] = {
249
+ ...toolRecord,
250
+ execute: async (...args) => {
251
+ const toolArgs = args[0];
252
+ const context = asRecord(args[1]);
253
+ try {
254
+ const result = await originalExecute.apply(toolRecord, args);
255
+ emitCursorToolExecution({
256
+ args: toolArgs,
257
+ callId: stringValue(context?.toolCallId),
258
+ result,
259
+ state,
260
+ toolName,
261
+ });
262
+ return result;
263
+ }
264
+ catch (error) {
265
+ emitCursorToolExecution({
266
+ args: toolArgs,
267
+ callId: stringValue(context?.toolCallId),
268
+ error,
269
+ state,
270
+ toolName,
271
+ });
272
+ throw error;
273
+ }
274
+ },
275
+ };
276
+ }
277
+ registerCursorToolDefinitions(state, toolDefinitions);
278
+ wrapped.local = { ...local, customTools: wrappedTools };
279
+ }
280
+ return wrapped;
281
+ }
282
+ _patchMethod(target, methodName, createWrapper) {
283
+ const original = target[methodName];
284
+ if (typeof original !== "function")
285
+ return;
286
+ const wrapped = createWrapper(original);
287
+ target[methodName] = wrapped;
288
+ this._patches.push(() => { target[methodName] = original; });
289
+ }
290
+ }
291
+ function asRecord(value) {
292
+ if (!value || typeof value !== "object" || Array.isArray(value))
293
+ return undefined;
294
+ return value;
295
+ }
296
+ function stringValue(value) {
297
+ if (value === undefined || value === null)
298
+ return undefined;
299
+ const text = String(value);
300
+ return text ? text : undefined;
301
+ }
302
+ function resolveModel(model) {
303
+ if (typeof model === "string" && model)
304
+ return model;
305
+ const record = asRecord(model);
306
+ return stringValue(record?.id) ?? stringValue(record?.model);
307
+ }
308
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@respan/instrumentation-cursor",
3
+ "type": "module",
4
+ "version": "0.1.0",
5
+ "description": "Respan instrumentation plugin for the Cursor TypeScript SDK",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "author": "Respan <team@respan.ai>",
9
+ "license": "Apache-2.0",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/respanai/respan",
13
+ "directory": "javascript-sdks/instrumentations/respan-instrumentation-cursor"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "test": "yarn build && node --test tests/*.test.mjs",
26
+ "publish:package": "yarn npm publish",
27
+ "release": "yarn build && yarn version patch && yarn publish:package"
28
+ },
29
+ "dependencies": {
30
+ "@opentelemetry/api": "^1.9.0",
31
+ "@opentelemetry/core": "^1.26.0",
32
+ "@opentelemetry/sdk-trace-base": "^1.26.0",
33
+ "@opentelemetry/semantic-conventions": "^1.40.0",
34
+ "@respan/respan-sdk": "workspace:^",
35
+ "@respan/tracing": "workspace:^",
36
+ "@traceloop/ai-semantic-conventions": "^0.13.0"
37
+ },
38
+ "peerDependencies": {
39
+ "@cursor/sdk": ">=1.0.0"
40
+ },
41
+ "peerDependenciesMeta": {
42
+ "@cursor/sdk": {
43
+ "optional": false
44
+ }
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^22.15.29",
48
+ "typescript": "^5.7.3"
49
+ }
50
+ }