{"version":3,"file":"index.cjs","names":["ReadableStream","MessageList","MastraModelOutput","SpanType","EntityType","TransformStream","ChunkFrom","Agent","#mastra","RequestContext","#createdAgent","CursorAgent","ReadableStream","ChunkFrom"],"sources":["../src/utils.ts","../src/index.ts"],"sourcesContent":["import { ReadableStream, TransformStream } from 'node:stream/web';\nimport type { ReadableStreamDefaultController } from 'node:stream/web';\n\nimport type { AgentExecutionOptionsBase, MastraLanguageModel } from '@mastra/core/agent';\nimport { MessageList } from '@mastra/core/agent/message-list';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { EntityType, executeWithContext, getOrCreateSpan, SpanType } from '@mastra/core/observability';\nimport type {\n  AIModelGenerationSpan,\n  CostContext,\n  IModelSpanTracker,\n  Span,\n  UsageStats,\n} from '@mastra/core/observability';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { ChunkType, FullOutput, JSONValue, LanguageModelUsage, ProviderMetadata } from '@mastra/core/stream';\nimport { ChunkFrom, MastraModelOutput } from '@mastra/core/stream';\ntype MastraModelOutputOptions<OUTPUT = undefined> = ConstructorParameters<\n  typeof MastraModelOutput<OUTPUT>\n>[0]['options'];\n\nexport type SDKAgentRunOptions<OUTPUT = unknown> = AgentExecutionOptionsBase<OUTPUT> & {\n  signal?: AbortSignal;\n  [key: string]: unknown;\n};\n\nexport type V3Usage = {\n  inputTokens: {\n    total: number | undefined;\n    noCache?: number;\n    cacheRead?: number;\n    cacheWrite?: number;\n  };\n  outputTokens: {\n    total: number | undefined;\n    text?: number;\n  };\n};\n\nexport type SDKModelGenerateResult = {\n  content: Array<{ type: 'text'; text: string }>;\n  finishReason: { unified: 'stop'; raw: 'stop' };\n  usage: V3Usage;\n  response: {\n    id: string;\n    modelId: string;\n    timestamp: Date;\n  };\n  providerMetadata?: ProviderMetadata;\n  costContext?: CostContext;\n  object?: unknown;\n};\n\nexport function createNoopModel({ modelId, provider }: { modelId: string; provider: string }): MastraLanguageModel {\n  return {\n    modelId,\n    provider,\n    specificationVersion: 'v3',\n    supportedUrls: {},\n    doGenerate: async () => createNoopStreamResult(),\n    doStream: async () => createNoopStreamResult(),\n  } as MastraLanguageModel;\n}\n\nfunction createNoopStreamResult(): { stream: ReadableStream<never> } {\n  return {\n    stream: new ReadableStream<never>({\n      start: controller => controller.close(),\n    }),\n  };\n}\n\nexport function createCompletedMastraStream({\n  runId,\n  prompt,\n  text,\n  responseId,\n  modelId,\n  usage,\n  providerMetadata,\n  costContext,\n  object,\n}: {\n  runId: string;\n  prompt: string;\n  text: string;\n  responseId: string;\n  modelId: string;\n  usage: LanguageModelUsage;\n  providerMetadata?: ProviderMetadata;\n  costContext?: CostContext;\n  object?: unknown;\n}): ReadableStream<ChunkType> {\n  return new ReadableStream<ChunkType>({\n    start(controller) {\n      const textId = globalThis.crypto.randomUUID();\n      enqueueStartChunks(controller, {\n        runId,\n        prompt,\n        textId,\n        responseId,\n        modelId,\n        providerMetadata,\n      });\n      if (text) {\n        enqueueTextDelta(controller, runId, textId, text);\n      }\n      enqueueFinishChunks(controller, {\n        runId,\n        prompt,\n        textId,\n        text,\n        responseId,\n        modelId,\n        usage,\n        providerMetadata,\n        costContext,\n        object,\n      });\n      controller.close();\n    },\n  });\n}\n\nexport function createMastraOutput<OUTPUT>({\n  messages,\n  runId,\n  modelId,\n  provider,\n  stream,\n  options,\n}: {\n  messages: MessageListInput;\n  runId: string;\n  modelId: string;\n  provider: string;\n  stream: ReadableStream<ChunkType>;\n  options?: Partial<MastraModelOutputOptions<OUTPUT>>;\n}): MastraModelOutput<OUTPUT> {\n  const messageList = new MessageList();\n  messageList.add(messages, 'input');\n  messageList.add([{ role: 'assistant', content: '' }], 'response');\n\n  return new MastraModelOutput<OUTPUT>({\n    model: {\n      modelId,\n      provider,\n      version: 'v3',\n    },\n    stream: stream as ReadableStream<ChunkType<OUTPUT>>,\n    messageList,\n    messageId: globalThis.crypto.randomUUID(),\n    options: {\n      ...options,\n      runId,\n    },\n  });\n}\n\nexport function toFullOutput<OUTPUT>({\n  messages,\n  runId,\n  provider,\n  result,\n  options,\n}: {\n  messages: MessageListInput;\n  runId: string;\n  provider: string;\n  result: SDKModelGenerateResult;\n  options?: Partial<MastraModelOutputOptions<OUTPUT>>;\n}): Promise<FullOutput<OUTPUT>> {\n  const text = result.content.map(part => part.text).join('');\n  const stream = createCompletedMastraStream({\n    runId,\n    prompt: promptToText(messages),\n    text,\n    responseId: result.response.id,\n    modelId: result.response.modelId,\n    usage: toLanguageModelUsage(result.usage),\n    providerMetadata: result.providerMetadata,\n    costContext: result.costContext,\n    object: result.object,\n  });\n\n  return createMastraOutput<OUTPUT>({\n    messages,\n    runId,\n    modelId: result.response.modelId,\n    provider,\n    stream,\n    options,\n  }).getFullOutput();\n}\n\nexport type SDKAgentTelemetryOptions<OUTPUT = unknown> = {\n  agentId: string;\n  agentName: string;\n  provider: string;\n  modelId: string;\n  messages: MessageListInput;\n  prompt: string;\n  runId: string;\n  streaming: boolean;\n  method: 'generate' | 'stream';\n  requestContext: RequestContext;\n  instructions?: string;\n  maxSteps?: SDKAgentRunOptions<OUTPUT>['maxSteps'];\n  tracingOptions?: SDKAgentRunOptions<OUTPUT>['tracingOptions'];\n  tracingContext?: SDKAgentRunOptions<OUTPUT>['tracingContext'];\n  onFinish?: SDKAgentRunOptions<OUTPUT>['onFinish'];\n  onStepFinish?: SDKAgentRunOptions<OUTPUT>['onStepFinish'];\n  mastra?: Mastra;\n};\n\nexport type SDKAgentTelemetry<OUTPUT = unknown> = {\n  execute<T>(fn: () => Promise<T>): Promise<T>;\n  endGenerate(result: SDKModelGenerateResult): void;\n  fail(error: unknown): void;\n  startToolCall(input: SDKAgentToolCallInput): void;\n  endToolCall(output: SDKAgentToolCallOutput): void;\n  wrapStream(stream: ReadableStream<ChunkType>): ReadableStream<ChunkType>;\n  outputOptions(): Partial<MastraModelOutputOptions<OUTPUT>>;\n};\n\nexport type SDKAgentToolCallInput = {\n  toolCallId: string;\n  toolName: string;\n  input?: unknown;\n};\n\nexport type SDKAgentToolCallOutput = {\n  toolCallId: string;\n  output?: unknown;\n  isError?: boolean;\n};\n\nexport function createSDKAgentTelemetry<OUTPUT>({\n  agentId,\n  agentName,\n  provider,\n  modelId,\n  messages,\n  prompt,\n  runId,\n  streaming,\n  method,\n  requestContext,\n  instructions,\n  maxSteps,\n  tracingOptions,\n  tracingContext,\n  onFinish,\n  onStepFinish,\n  mastra,\n}: SDKAgentTelemetryOptions<OUTPUT>): SDKAgentTelemetry<OUTPUT> {\n  const agentSpan = getOrCreateSpan({\n    type: SpanType.AGENT_RUN,\n    name: `agent run: '${agentId}'`,\n    entityType: EntityType.AGENT,\n    entityId: agentId,\n    entityName: agentName,\n    input: messages,\n    attributes: {\n      prompt,\n      instructions,\n      maxSteps,\n    },\n    metadata: {\n      runId,\n      sdkAgent: true,\n      sdkProvider: provider,\n      sdkMethod: method,\n    },\n    tracingOptions,\n    tracingContext,\n    requestContext,\n    mastra,\n  });\n\n  const modelSpan = agentSpan?.createChildSpan({\n    type: SpanType.MODEL_GENERATION,\n    name: `llm: '${modelId}'`,\n    input: {\n      messages,\n    },\n    attributes: {\n      model: modelId,\n      provider,\n      streaming,\n    },\n    metadata: {\n      runId,\n      sdkAgent: true,\n      sdkProvider: provider,\n      sdkMethod: method,\n    },\n    requestContext,\n  });\n  const modelSpanTracker = getModelSpanTracker(modelSpan);\n  const toolSpans = new Map<string, Span<SpanType.TOOL_CALL> | Span<SpanType.MCP_TOOL_CALL>>();\n\n  let ended = false;\n\n  const startToolCall = ({ toolCallId, toolName, input }: SDKAgentToolCallInput) => {\n    if (toolSpans.has(toolCallId)) {\n      return;\n    }\n\n    const parentSpan = agentSpan ?? modelSpan;\n    if (!parentSpan) {\n      return;\n    }\n\n    const mcp = parseMcpToolName(toolName);\n    const span = mcp\n      ? parentSpan.createChildSpan({\n          type: SpanType.MCP_TOOL_CALL,\n          name: `mcp_tool: '${toolName}' on '${mcp.serverName}'`,\n          input,\n          entityType: EntityType.TOOL,\n          entityId: toolName,\n          entityName: toolName,\n          attributes: {\n            mcpServer: mcp.serverName,\n          },\n          metadata: {\n            runId,\n            sdkAgent: true,\n            sdkProvider: provider,\n            sdkMethod: method,\n            toolCallId,\n          },\n          requestContext,\n        })\n      : parentSpan.createChildSpan({\n          type: SpanType.TOOL_CALL,\n          name: `tool: '${toolName}'`,\n          input,\n          entityType: EntityType.TOOL,\n          entityId: toolName,\n          entityName: toolName,\n          attributes: {\n            toolType: 'tool',\n          },\n          metadata: {\n            runId,\n            sdkAgent: true,\n            sdkProvider: provider,\n            sdkMethod: method,\n            toolCallId,\n          },\n          requestContext,\n        });\n\n    toolSpans.set(toolCallId, span);\n  };\n\n  const endToolCall = ({ toolCallId, output, isError }: SDKAgentToolCallOutput) => {\n    const span = toolSpans.get(toolCallId);\n    if (!span) {\n      return;\n    }\n\n    toolSpans.delete(toolCallId);\n    if (isError) {\n      span.error({\n        error:\n          output instanceof Error ? output : new Error(typeof output === 'string' ? output : 'SDK tool call failed'),\n        attributes: { success: false },\n      });\n      return;\n    }\n\n    span.end({\n      output,\n      attributes: { success: true },\n    });\n  };\n\n  const closeOpenToolSpans = (success: boolean, error?: unknown) => {\n    for (const [toolCallId, span] of toolSpans) {\n      toolSpans.delete(toolCallId);\n      if (success) {\n        span.end({ attributes: { success: true } });\n        continue;\n      }\n\n      const normalized = error instanceof Error ? error : new Error(String(error ?? 'SDK agent run failed'));\n      span.error({ error: normalized, attributes: { success: false } });\n    }\n  };\n\n  const endModel = ({\n    text,\n    usage,\n    providerMetadata,\n    finishReason = 'stop',\n    responseId,\n    responseModel,\n    costContext,\n  }: {\n    text: string;\n    usage?: LanguageModelUsage;\n    providerMetadata?: ProviderMetadata;\n    finishReason?: string;\n    responseId?: string;\n    responseModel?: string;\n    costContext?: CostContext;\n  }) => {\n    if (modelSpanTracker) {\n      modelSpanTracker.endGeneration({\n        output: {\n          text,\n        },\n        attributes: {\n          finishReason,\n          responseId,\n          responseModel,\n          costContext,\n        },\n        usage,\n        providerMetadata,\n      });\n      return;\n    }\n\n    modelSpan?.end({\n      output: {\n        text,\n      },\n      attributes: {\n        finishReason,\n        responseId,\n        responseModel,\n        usage: usage ? toUsageStats(usage) : undefined,\n        costContext,\n      },\n    });\n  };\n\n  const end = (result: {\n    text: string;\n    usage?: LanguageModelUsage;\n    providerMetadata?: ProviderMetadata;\n    finishReason?: string;\n    responseId?: string;\n    responseModel?: string;\n    costContext?: CostContext;\n  }) => {\n    if (ended) {\n      return;\n    }\n\n    ended = true;\n    closeOpenToolSpans(true);\n    endModel(result);\n    agentSpan?.end({\n      output: {\n        text: result.text,\n      },\n    });\n  };\n\n  const fail = (error: unknown) => {\n    if (ended) {\n      return;\n    }\n\n    ended = true;\n    const normalized = error instanceof Error ? error : new Error(String(error));\n    closeOpenToolSpans(false, normalized);\n    if (modelSpanTracker) {\n      modelSpanTracker.reportGenerationError({ error: normalized });\n    } else {\n      modelSpan?.error({ error: normalized });\n    }\n    agentSpan?.error({ error: normalized });\n  };\n\n  return {\n    execute: fn => executeWithContext({ span: modelSpan ?? agentSpan, fn }),\n    endGenerate(result) {\n      end({\n        text: result.content.map(part => part.text).join(''),\n        usage: toLanguageModelUsage(result.usage),\n        providerMetadata: result.providerMetadata,\n        finishReason: result.finishReason.unified,\n        responseId: result.response.id,\n        responseModel: result.response.modelId,\n        costContext: result.costContext,\n      });\n    },\n    fail,\n    startToolCall,\n    endToolCall,\n    wrapStream(stream) {\n      const trackedStream = (modelSpanTracker?.wrapStream(stream) ?? stream) as ReadableStream<ChunkType>;\n      return wrapStreamForAgentSpan(trackedStream, {\n        end,\n        fail,\n      });\n    },\n    outputOptions() {\n      return {\n        onFinish,\n        onStepFinish,\n        requestContext,\n        tracingContext: agentSpan ? { currentSpan: agentSpan } : tracingContext,\n      };\n    },\n  };\n}\n\nfunction parseMcpToolName(toolName: string): { serverName: string; toolName: string } | undefined {\n  const match = /^mcp__([^_].*?)__(.+)$/.exec(toolName);\n  if (!match?.[1] || !match[2]) {\n    return undefined;\n  }\n\n  return {\n    serverName: match[1],\n    toolName: match[2],\n  };\n}\n\nfunction getModelSpanTracker(\n  modelSpan: Span<SpanType.MODEL_GENERATION> | AIModelGenerationSpan | undefined,\n): IModelSpanTracker | undefined {\n  if (!modelSpan || !('createTracker' in modelSpan)) {\n    return undefined;\n  }\n\n  return modelSpan.createTracker();\n}\n\nfunction wrapStreamForAgentSpan(\n  stream: ReadableStream<ChunkType>,\n  telemetry: {\n    end: (result: {\n      text: string;\n      usage?: LanguageModelUsage;\n      providerMetadata?: ProviderMetadata;\n      finishReason?: string;\n      responseId?: string;\n      responseModel?: string;\n      costContext?: CostContext;\n    }) => void;\n    fail: (error: unknown) => void;\n  },\n): ReadableStream<ChunkType> {\n  let text = '';\n\n  return stream.pipeThrough(\n    new TransformStream<ChunkType, ChunkType>({\n      transform(chunk, controller) {\n        if (chunk.type === 'text-delta') {\n          text += chunk.payload.text;\n        }\n\n        if (chunk.type === 'finish') {\n          telemetry.end({\n            text,\n            usage: chunk.payload.output.usage,\n            providerMetadata: chunk.payload.providerMetadata,\n            finishReason: chunk.payload.stepResult.reason,\n            responseId: chunk.payload.response?.id,\n            responseModel: chunk.payload.response?.modelId,\n            costContext: getCostContext(chunk.payload.metadata?.costContext),\n          });\n        }\n\n        if (chunk.type === 'error') {\n          telemetry.fail(chunk.payload.error);\n        }\n\n        controller.enqueue(chunk);\n      },\n      flush() {\n        telemetry.end({ text });\n      },\n    }),\n  );\n}\n\nfunction toUsageStats(usage: LanguageModelUsage): UsageStats {\n  return {\n    inputTokens: usage.inputTokens,\n    outputTokens: usage.outputTokens,\n    inputDetails: {\n      cacheRead: usage.cachedInputTokens,\n      cacheWrite: usage.cacheCreationInputTokens,\n    },\n    outputDetails: {\n      text: usage.outputTokens,\n      reasoning: usage.reasoningTokens,\n    },\n  };\n}\n\nfunction getCostContext(value: unknown): CostContext | undefined {\n  if (!value || typeof value !== 'object') {\n    return undefined;\n  }\n\n  return value as CostContext;\n}\n\nexport function enqueueStartChunks(\n  controller: ReadableStreamDefaultController<ChunkType>,\n  {\n    runId,\n    prompt,\n    textId,\n    responseId,\n    modelId,\n    providerMetadata,\n  }: {\n    runId: string;\n    prompt: string;\n    textId: string;\n    responseId: string;\n    modelId: string;\n    providerMetadata?: ProviderMetadata;\n  },\n): void {\n  controller.enqueue({\n    type: 'start',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {},\n  });\n  controller.enqueue({\n    type: 'step-start',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {\n      request: { body: prompt },\n    },\n  });\n  controller.enqueue({\n    type: 'response-metadata',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {\n      id: responseId,\n      modelId,\n      timestamp: new Date().toISOString(),\n    },\n  });\n  controller.enqueue({\n    type: 'text-start',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {\n      id: textId,\n      providerMetadata,\n    },\n  });\n}\n\nexport function enqueueTextDelta(\n  controller: ReadableStreamDefaultController<ChunkType>,\n  runId: string,\n  textId: string,\n  text: string,\n): void {\n  controller.enqueue({\n    type: 'text-delta',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {\n      id: textId,\n      text,\n    },\n  });\n}\n\nexport function enqueueFinishChunks(\n  controller: ReadableStreamDefaultController<ChunkType>,\n  {\n    runId,\n    prompt,\n    textId,\n    text,\n    responseId,\n    modelId,\n    usage,\n    providerMetadata,\n    costContext,\n    object,\n  }: {\n    runId: string;\n    prompt: string;\n    textId: string;\n    text: string;\n    responseId: string;\n    modelId: string;\n    usage: LanguageModelUsage;\n    providerMetadata?: ProviderMetadata;\n    costContext?: CostContext;\n    object?: unknown;\n  },\n): void {\n  const timestamp = new Date();\n  const response = {\n    id: responseId,\n    modelId,\n    timestamp,\n  };\n  const metadata = {\n    providerMetadata,\n    costContext,\n    request: { body: prompt },\n    modelId,\n    timestamp,\n  };\n\n  controller.enqueue({\n    type: 'text-end',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {\n      id: textId,\n      providerMetadata,\n    },\n  });\n  if (object !== undefined) {\n    controller.enqueue({\n      type: 'object-result',\n      runId,\n      from: ChunkFrom.AGENT,\n      object,\n    } as unknown as ChunkType);\n  }\n  controller.enqueue({\n    type: 'step-finish',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {\n      id: responseId,\n      providerMetadata,\n      totalUsage: usage,\n      response,\n      stepResult: {\n        reason: 'stop',\n        warnings: [],\n      },\n      output: {\n        text,\n        usage,\n        steps: [],\n      },\n      metadata,\n    },\n  });\n  controller.enqueue({\n    type: 'finish',\n    runId,\n    from: ChunkFrom.AGENT,\n    payload: {\n      stepResult: {\n        reason: 'stop',\n        warnings: [],\n      },\n      output: {\n        usage,\n        steps: [],\n      },\n      metadata,\n      providerMetadata,\n      messages: {\n        all: [],\n        user: [],\n        nonUser: [],\n      },\n      response,\n    },\n  });\n}\n\nexport function toLanguageModelUsage(usage: V3Usage): LanguageModelUsage {\n  const inputTokens = usage.inputTokens.total ?? 0;\n  const outputTokens = usage.outputTokens.total ?? 0;\n\n  return {\n    inputTokens,\n    outputTokens,\n    totalTokens: inputTokens + outputTokens,\n    cachedInputTokens: usage.inputTokens.cacheRead,\n    cacheCreationInputTokens: usage.inputTokens.cacheWrite,\n    raw: usage,\n  };\n}\n\nexport function createProviderMetadata(provider: string, metadata: Record<string, unknown>): ProviderMetadata {\n  return {\n    [provider]: toJsonRecord(metadata),\n  };\n}\n\nfunction toJsonRecord(record: Record<string, unknown>): Record<string, JSONValue> {\n  return Object.fromEntries(\n    Object.entries(record)\n      .filter((entry): entry is [string, Exclude<unknown, undefined>] => entry[1] !== undefined)\n      .map(([key, value]) => [key, toJsonValue(value)]),\n  );\n}\n\nfunction toJsonValue(value: unknown): JSONValue {\n  if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n    return value;\n  }\n\n  if (Array.isArray(value)) {\n    return value.filter(item => item !== undefined).map(toJsonValue);\n  }\n\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n\n  if (typeof value === 'object') {\n    return toJsonRecord(value as Record<string, unknown>);\n  }\n\n  return String(value);\n}\n\nexport function promptToText(prompt: unknown): string {\n  if (typeof prompt === 'string') {\n    return prompt;\n  }\n\n  if (Array.isArray(prompt)) {\n    return prompt.map(promptToText).filter(Boolean).join('\\n');\n  }\n\n  if (!prompt || typeof prompt !== 'object') {\n    return '';\n  }\n\n  const record = prompt as Record<string, unknown>;\n  if (typeof record.text === 'string') {\n    return record.text;\n  }\n  if (typeof record.content === 'string') {\n    return record.content;\n  }\n  if (record.content) {\n    return promptToText(record.content);\n  }\n\n  return '';\n}\n\nexport function sumDefined(...values: Array<number | undefined>): number | undefined {\n  const defined = values.filter((value): value is number => typeof value === 'number');\n  if (defined.length === 0) {\n    return undefined;\n  }\n\n  return defined.reduce((sum, value) => sum + value, 0);\n}\n","import { ReadableStream } from 'node:stream/web';\n\nimport { Agent as CursorAgent } from '@cursor/sdk';\nimport type {\n  AgentOptions as CursorCreateOptions,\n  InteractionUpdate,\n  ModelSelection,\n  Run,\n  SDKAgent,\n  SDKMessage,\n  SendOptions,\n} from '@cursor/sdk';\n\nimport { Agent } from '@mastra/core/agent';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { RequestContext } from '@mastra/core/request-context';\nimport type {\n  ChunkType,\n  FullOutput,\n  LanguageModelUsage,\n  ProviderMetadata,\n  MastraModelOutput,\n} from '@mastra/core/stream';\nimport { ChunkFrom } from '@mastra/core/stream';\nimport {\n  createMastraOutput,\n  createNoopModel,\n  createProviderMetadata,\n  createSDKAgentTelemetry,\n  enqueueFinishChunks,\n  enqueueStartChunks,\n  enqueueTextDelta,\n  promptToText,\n  sumDefined,\n  toFullOutput,\n  toLanguageModelUsage,\n} from './utils';\nimport type { SDKAgentRunOptions, SDKAgentTelemetry, SDKModelGenerateResult, V3Usage } from './utils';\n\nconst PROVIDER = '@cursor/sdk';\nconst MODEL_ID = 'cursor-agent-sdk';\n\ntype CursorUsageTotals = {\n  inputTokens?: number;\n  outputTokens?: number;\n  cacheReadTokens?: number;\n  cacheWriteTokens?: number;\n};\n\ntype CursorToolTelemetry = Pick<SDKAgentTelemetry, 'startToolCall' | 'endToolCall'>;\n\nexport type CursorAgentFactory = (options: CursorCreateOptions) => SDKAgent | Promise<SDKAgent>;\nexport type CursorAgentInput = SDKAgent | Promise<SDKAgent> | CursorAgentFactory;\n\nexport type CursorSDKAgentResumeData = {\n  /**\n   * Message to send while continuing the Cursor SDK agent.\n   */\n  message: MessageListInput;\n  /**\n   * Cursor SDK agent id to resume. If omitted, the wrapped SDK agent is reused.\n   */\n  agentId?: string;\n  /**\n   * Cursor SDK options used only when `agentId` is provided.\n   */\n  sdkOptions?: Partial<CursorCreateOptions>;\n};\n\ntype CursorSDKAgentBaseOptions = {\n  /**\n   * Mastra agent id used when registering this wrapper with Mastra.\n   */\n  id: string;\n  /**\n   * Optional display name for the Mastra agent. Defaults to `id`.\n   */\n  name?: string;\n  /**\n   * Description surfaced by Mastra when listing or selecting agents.\n   */\n  description: string;\n};\n\nexport type CursorAgentOptions = CursorSDKAgentBaseOptions &\n  (\n    | {\n        /**\n         * Pre-created Cursor SDK agent. Pass this when you manage the SDK\n         * agent lifecycle yourself.\n         */\n        agent: SDKAgent | Promise<SDKAgent>;\n        sdkOptions?: never;\n      }\n    | {\n        /**\n         * Cursor SDK agent factory. The wrapper calls it with `sdkOptions`,\n         * including defaults such as `process.env.CURSOR_API_KEY`.\n         */\n        agent: CursorAgentFactory;\n        sdkOptions?: CursorCreateOptions;\n      }\n    | {\n        agent?: never;\n        /**\n         * Cursor SDK options used to create an SDK agent. Defaults `apiKey` to\n         * `process.env.CURSOR_API_KEY` when not provided.\n         */\n        sdkOptions: CursorCreateOptions;\n      }\n  );\n\nexport class CursorSDKAgent extends Agent {\n  readonly options: CursorAgentOptions;\n  #mastra?: Mastra;\n  #createdAgent?: Promise<SDKAgent>;\n\n  constructor(options: CursorAgentOptions) {\n    super({\n      id: options.id,\n      name: options.name ?? options.id,\n      description: options.description,\n      instructions: '',\n      model: createNoopModel({\n        modelId: getModelId(getRequestedModel(options)),\n        provider: PROVIDER,\n      }),\n    });\n    this.options = options;\n  }\n\n  override __registerMastra(mastra: Mastra): void {\n    super.__registerMastra(mastra);\n    this.#mastra = mastra;\n  }\n\n  supportsMemory(): boolean {\n    return false;\n  }\n\n  async generate<OUTPUT = undefined>(\n    messages: MessageListInput,\n    options?: SDKAgentRunOptions<OUTPUT>,\n  ): Promise<FullOutput<OUTPUT>> {\n    assertStructuredOutputUnsupported(options);\n    const sdkAgent = await this.resolveCursorAgent();\n    return this.generateWithAgent(messages, sdkAgent, options);\n  }\n\n  private async generateWithAgent<OUTPUT = undefined>(\n    messages: MessageListInput,\n    sdkAgent: SDKAgent,\n    options?: SDKAgentRunOptions<OUTPUT>,\n  ): Promise<FullOutput<OUTPUT>> {\n    const prompt = promptToText(messages);\n    const runId = options?.runId ?? globalThis.crypto.randomUUID();\n    const modelId = getCursorModelId(this.options, sdkAgent);\n    const requestContext = options?.requestContext ?? new RequestContext();\n    const instructions = options?.instructions ? promptToText(options.instructions) : undefined;\n    const telemetry = createSDKAgentTelemetry({\n      agentId: this.id,\n      agentName: this.name,\n      provider: PROVIDER,\n      modelId,\n      messages,\n      prompt,\n      runId,\n      streaming: false,\n      method: 'generate',\n      requestContext,\n      instructions,\n      maxSteps: options?.maxSteps,\n      tracingOptions: options?.tracingOptions,\n      tracingContext: options?.tracingContext,\n      onFinish: options?.onFinish,\n      onStepFinish: options?.onStepFinish,\n      mastra: this.#mastra,\n    });\n    let result: SDKModelGenerateResult;\n    try {\n      result = await telemetry.execute(() => runCursorGenerate(prompt, this.options, sdkAgent, telemetry));\n      telemetry.endGenerate(result);\n    } catch (error) {\n      telemetry.fail(error);\n      throw error;\n    }\n\n    return toFullOutput<OUTPUT>({\n      messages,\n      runId,\n      provider: PROVIDER,\n      result,\n      options: telemetry.outputOptions(),\n    });\n  }\n\n  async stream<OUTPUT = undefined>(\n    messages: MessageListInput,\n    options?: SDKAgentRunOptions<OUTPUT>,\n  ): Promise<MastraModelOutput<OUTPUT>> {\n    assertStructuredOutputUnsupported(options);\n    const sdkAgent = await this.resolveCursorAgent();\n    return this.streamWithAgent(messages, sdkAgent, options);\n  }\n\n  private async streamWithAgent<OUTPUT = undefined>(\n    messages: MessageListInput,\n    sdkAgent: SDKAgent,\n    options?: SDKAgentRunOptions<OUTPUT>,\n  ): Promise<MastraModelOutput<OUTPUT>> {\n    const runId = options?.runId ?? globalThis.crypto.randomUUID();\n    const prompt = promptToText(messages);\n    const modelId = getCursorModelId(this.options, sdkAgent);\n    const requestContext = options?.requestContext ?? new RequestContext();\n    const instructions = options?.instructions ? promptToText(options.instructions) : undefined;\n    const telemetry = createSDKAgentTelemetry({\n      agentId: this.id,\n      agentName: this.name,\n      provider: PROVIDER,\n      modelId,\n      messages,\n      prompt,\n      runId,\n      streaming: true,\n      method: 'stream',\n      requestContext,\n      instructions,\n      maxSteps: options?.maxSteps,\n      tracingOptions: options?.tracingOptions,\n      tracingContext: options?.tracingContext,\n      onFinish: options?.onFinish,\n      onStepFinish: options?.onStepFinish,\n      mastra: this.#mastra,\n    });\n\n    return createMastraOutput<OUTPUT>({\n      messages,\n      runId,\n      modelId,\n      provider: PROVIDER,\n      stream: telemetry.wrapStream(runCursorAsMastraStream(prompt, this.options, sdkAgent, runId, telemetry)),\n      options: telemetry.outputOptions(),\n    });\n  }\n\n  async resumeGenerate<OUTPUT = undefined>(\n    resumeData: CursorSDKAgentResumeData,\n    options?: SDKAgentRunOptions<OUTPUT>,\n  ): Promise<FullOutput<OUTPUT>> {\n    assertStructuredOutputUnsupported(options);\n    const data = validateCursorResumeData(resumeData);\n    const sdkAgent = await this.resolveResumeCursorAgent(data);\n    return this.generateWithAgent(data.message, sdkAgent, options);\n  }\n\n  async resumeStream<OUTPUT = undefined>(\n    resumeData: CursorSDKAgentResumeData,\n    options?: SDKAgentRunOptions<OUTPUT>,\n  ): Promise<MastraModelOutput<OUTPUT>> {\n    assertStructuredOutputUnsupported(options);\n    const data = validateCursorResumeData(resumeData);\n    const sdkAgent = await this.resolveResumeCursorAgent(data);\n    return this.streamWithAgent(data.message, sdkAgent, options);\n  }\n\n  private resolveCursorAgent(): Promise<SDKAgent> {\n    this.#createdAgent ??= resolveCursorAgent(this.options.agent, this.options).catch(error => {\n      this.#createdAgent = undefined;\n      throw error;\n    });\n    return this.#createdAgent;\n  }\n\n  private async resolveResumeCursorAgent(resumeData: CursorSDKAgentResumeData): Promise<SDKAgent> {\n    if (!resumeData.agentId) {\n      return this.resolveCursorAgent();\n    }\n\n    return CursorAgent.resume(resumeData.agentId, {\n      ...toCursorCreateOptions(this.options),\n      ...resumeData.sdkOptions,\n    });\n  }\n}\n\nfunction validateCursorResumeData(resumeData: CursorSDKAgentResumeData): CursorSDKAgentResumeData {\n  if (!toRecord(resumeData) || !('message' in resumeData)) {\n    throw new Error('CursorSDKAgent resumeData must include a message.');\n  }\n\n  if (resumeData.agentId !== undefined && typeof resumeData.agentId !== 'string') {\n    throw new Error('CursorSDKAgent resumeData.agentId must be a string when provided.');\n  }\n\n  return resumeData;\n}\n\nfunction assertStructuredOutputUnsupported(options?: unknown): void {\n  const structuredOutput = toRecord(toRecord(options)?.structuredOutput);\n  if (structuredOutput && 'schema' in structuredOutput) {\n    throw new Error(\n      'CursorSDKAgent does not support structuredOutput because the Cursor TypeScript SDK does not expose a schema-constrained output API.',\n    );\n  }\n}\n\nasync function runCursorGenerate(\n  prompt: string,\n  options: CursorAgentOptions,\n  agent: SDKAgent,\n  telemetry: CursorToolTelemetry,\n): Promise<SDKModelGenerateResult> {\n  const usage = createCursorUsageCollector();\n  const run = await agent.send(prompt, createCursorSendOptions(options, usage, telemetry));\n  const result = await run.wait();\n\n  if (result.status === 'error' || result.status === 'cancelled') {\n    throw new Error(`Cursor run ${result.id} ended with status ${result.status}`);\n  }\n\n  const responseModel = getModelId(result.model ?? run.model ?? getRequestedModel(options) ?? agent.model);\n  const providerMetadata = getCursorProviderMetadata(\n    options,\n    agent.agentId,\n    result.id,\n    result.status,\n    result.durationMs,\n    usage.totals(),\n    responseModel,\n  );\n\n  return {\n    content: [{ type: 'text', text: result.result ?? '' }],\n    finishReason: { unified: 'stop', raw: 'stop' },\n    usage: usage.toV3Usage(),\n    response: {\n      id: result.id,\n      modelId: responseModel,\n      timestamp: new Date(),\n    },\n    providerMetadata,\n  };\n}\n\nfunction runCursorAsMastraStream(\n  prompt: string,\n  options: CursorAgentOptions,\n  agent: SDKAgent,\n  runId: string,\n  telemetry: CursorToolTelemetry,\n): ReadableStream<ChunkType> {\n  return new ReadableStream<ChunkType>({\n    start: async controller => {\n      const textId = globalThis.crypto.randomUUID();\n      const usage = createCursorUsageCollector();\n      let text = '';\n\n      try {\n        const run = await agent.send(prompt, createCursorSendOptions(options, usage, telemetry));\n        const responseId = run.id;\n        const responseModel = getModelId(run.model ?? getRequestedModel(options) ?? agent.model);\n\n        enqueueStartChunks(controller, {\n          runId,\n          prompt,\n          textId,\n          responseId,\n          modelId: responseModel,\n          providerMetadata: getCursorProviderMetadata(\n            options,\n            agent.agentId,\n            run.id,\n            run.status,\n            run.durationMs,\n            usage.totals(),\n            responseModel,\n          ),\n        });\n\n        let result: Awaited<ReturnType<Run['wait']>> | undefined;\n        if (run.supports('stream')) {\n          for await (const message of run.stream()) {\n            const delta = getTextFromCursorMessage(message);\n            if (delta) {\n              text += delta;\n              enqueueTextDelta(controller, runId, textId, delta);\n            }\n          }\n          result = await run.wait();\n        } else {\n          result = await run.wait();\n          if (result.status === 'error' || result.status === 'cancelled') {\n            throw new Error(`Cursor run ${result.id} ended with status ${result.status}`);\n          }\n          if (result.result) {\n            text += result.result;\n            enqueueTextDelta(controller, runId, textId, result.result);\n          }\n        }\n\n        if (result.status === 'error' || result.status === 'cancelled') {\n          throw new Error(`Cursor run ${result.id} ended with status ${result.status}`);\n        }\n\n        if (!text && result.result) {\n          text = result.result;\n          enqueueTextDelta(controller, runId, textId, result.result);\n        }\n\n        const providerMetadata = getCursorProviderMetadata(\n          options,\n          agent.agentId,\n          run.id,\n          result.status,\n          result.durationMs,\n          usage.totals(),\n          getModelId(result.model ?? run.model ?? getRequestedModel(options) ?? agent.model),\n        );\n        enqueueFinishChunks(controller, {\n          runId,\n          prompt,\n          textId,\n          text,\n          responseId,\n          modelId: getModelId(result.model ?? run.model ?? getRequestedModel(options) ?? agent.model),\n          usage: usage.toLanguageModelUsage(),\n          providerMetadata,\n        });\n        controller.close();\n      } catch (error) {\n        controller.enqueue({\n          type: 'error',\n          runId,\n          from: ChunkFrom.AGENT,\n          payload: { error },\n        });\n        controller.close();\n      }\n    },\n  });\n}\n\nasync function resolveCursorAgent(agent: CursorAgentInput | undefined, options: CursorAgentOptions): Promise<SDKAgent> {\n  if (!agent) {\n    return CursorAgent.create(toCursorCreateOptions(options));\n  }\n\n  return typeof agent === 'function' ? agent(toCursorCreateOptions(options)) : agent;\n}\n\nfunction toCursorCreateOptions(options: CursorAgentOptions): CursorCreateOptions {\n  const createOptions: CursorCreateOptions = { ...options.sdkOptions };\n  const apiKey = createOptions.apiKey ?? process.env['CURSOR_API_KEY'];\n\n  if (apiKey) createOptions.apiKey = apiKey;\n  if (options.name && !createOptions.name) createOptions.name = options.name;\n\n  return createOptions;\n}\n\nfunction createCursorSendOptions(\n  options: CursorAgentOptions,\n  usage: CursorUsageCollector,\n  telemetry: CursorToolTelemetry,\n): SendOptions {\n  return {\n    mcpServers: options.sdkOptions?.mcpServers,\n    onDelta: async args => {\n      usage.record(args.update);\n      recordCursorToolTelemetry(args.update, telemetry);\n    },\n  };\n}\n\ntype CursorUsageCollector = ReturnType<typeof createCursorUsageCollector>;\n\nfunction createCursorUsageCollector() {\n  const totals: Required<CursorUsageTotals> = {\n    inputTokens: 0,\n    outputTokens: 0,\n    cacheReadTokens: 0,\n    cacheWriteTokens: 0,\n  };\n\n  return {\n    record(update: InteractionUpdate) {\n      if (update.type !== 'turn-ended' || !update.usage) {\n        return;\n      }\n\n      totals.inputTokens += update.usage.inputTokens;\n      totals.outputTokens += update.usage.outputTokens;\n      totals.cacheReadTokens += update.usage.cacheReadTokens;\n      totals.cacheWriteTokens += update.usage.cacheWriteTokens;\n    },\n    totals(): CursorUsageTotals {\n      return {\n        inputTokens: totals.inputTokens || undefined,\n        outputTokens: totals.outputTokens || undefined,\n        cacheReadTokens: totals.cacheReadTokens || undefined,\n        cacheWriteTokens: totals.cacheWriteTokens || undefined,\n      };\n    },\n    toV3Usage(): V3Usage {\n      return toV3Usage(totals);\n    },\n    toLanguageModelUsage(): LanguageModelUsage {\n      return toLanguageModelUsage(toV3Usage(totals));\n    },\n  };\n}\n\nfunction toV3Usage(usage: CursorUsageTotals): V3Usage {\n  const noCache = usage.inputTokens;\n  const cacheRead = usage.cacheReadTokens;\n  const cacheWrite = usage.cacheWriteTokens;\n  const totalInputTokens = sumDefined(noCache, cacheRead, cacheWrite);\n  const outputTokens = usage.outputTokens;\n\n  return {\n    inputTokens: {\n      total: totalInputTokens,\n      noCache,\n      cacheRead,\n      cacheWrite,\n    },\n    outputTokens: {\n      total: outputTokens,\n      text: outputTokens,\n    },\n  };\n}\n\nfunction getRequestedModel(options: CursorAgentOptions): ModelSelection | undefined {\n  return options.sdkOptions?.model;\n}\n\nfunction getModelId(model: ModelSelection | undefined): string {\n  if (!model) {\n    return MODEL_ID;\n  }\n\n  return typeof model === 'string' ? model : model.id;\n}\n\nfunction getCursorModelId(options: CursorAgentOptions, agent: SDKAgent): string {\n  return getModelId(getRequestedModel(options) ?? agent.model);\n}\n\nfunction getCursorProviderMetadata(\n  options: CursorAgentOptions,\n  agentId: string,\n  runId: string,\n  status?: Run['status'],\n  durationMs?: number,\n  usage?: CursorUsageTotals,\n  requestedModel?: string,\n): ProviderMetadata {\n  return createProviderMetadata('cursor', {\n    agentId,\n    runId,\n    status,\n    requestedModel: requestedModel ?? getModelId(getRequestedModel(options)),\n    durationMs,\n    mcpServerNames: getMcpServerNames(options),\n    usage,\n  });\n}\n\nfunction getMcpServerNames(options: CursorAgentOptions): string[] | undefined {\n  const servers = options.sdkOptions?.mcpServers;\n  return servers ? Object.keys(servers) : undefined;\n}\n\nfunction getTextFromCursorMessage(message: SDKMessage): string {\n  if (message.type === 'assistant') {\n    return message.message.content\n      .map(block => {\n        if (block.type === 'text') {\n          return block.text;\n        }\n\n        return '';\n      })\n      .filter(Boolean)\n      .join('');\n  }\n\n  if (message.type === 'task') {\n    return message.text ?? '';\n  }\n\n  return '';\n}\n\nfunction recordCursorToolTelemetry(update: InteractionUpdate, telemetry: CursorToolTelemetry): void {\n  const updateRecord = toRecord(update);\n  if (!updateRecord) {\n    return;\n  }\n\n  const updateType = typeof updateRecord?.type === 'string' ? updateRecord.type : undefined;\n\n  if (\n    updateType !== 'tool-call-started' &&\n    updateType !== 'partial-tool-call' &&\n    updateType !== 'tool-call-completed'\n  ) {\n    return;\n  }\n\n  const toolCall = getCursorToolCall(updateRecord);\n  if (!toolCall) {\n    return;\n  }\n\n  if (updateType === 'tool-call-started' || updateType === 'partial-tool-call') {\n    telemetry.startToolCall({\n      toolCallId: toolCall.toolCallId,\n      toolName: toolCall.toolName,\n      input: toolCall.input,\n    });\n    return;\n  }\n\n  telemetry.startToolCall({\n    toolCallId: toolCall.toolCallId,\n    toolName: toolCall.toolName,\n    input: toolCall.input,\n  });\n  telemetry.endToolCall({\n    toolCallId: toolCall.toolCallId,\n    output: toolCall.output,\n    isError: toolCall.isError,\n  });\n}\n\nfunction getCursorToolCall(update: Record<string, unknown>):\n  | {\n      toolCallId: string;\n      toolName: string;\n      input?: unknown;\n      output?: unknown;\n      isError?: boolean;\n    }\n  | undefined {\n  const toolCallId = typeof update.callId === 'string' ? update.callId : undefined;\n  const toolCall = toRecord(update.toolCall);\n  if (!toolCallId || !toolCall) {\n    return undefined;\n  }\n\n  if (toolCall.type === 'mcp') {\n    const args = toRecord(toolCall.args);\n    if (!args) {\n      return undefined;\n    }\n\n    const providerIdentifier = typeof args?.providerIdentifier === 'string' ? args.providerIdentifier : undefined;\n    const toolName = typeof args?.toolName === 'string' ? args.toolName : undefined;\n    if (!providerIdentifier || !toolName) {\n      return undefined;\n    }\n\n    const result = toRecord(toolCall.result);\n\n    return {\n      toolCallId,\n      toolName: `mcp__${providerIdentifier}__${toolName}`,\n      input: args.args,\n      output: result?.value ?? toolCall.result,\n      isError: result?.status === 'error' || result?.status === 'failed',\n    };\n  }\n\n  const toolName =\n    typeof toolCall.name === 'string' ? toolCall.name : typeof toolCall.type === 'string' ? toolCall.type : undefined;\n  if (!toolName) {\n    return undefined;\n  }\n\n  return {\n    toolCallId,\n    toolName,\n    input: 'args' in toolCall ? toolCall.args : undefined,\n    output: 'result' in toolCall ? toolCall.result : undefined,\n    isError: toolCall.status === 'error',\n  };\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> | undefined {\n  return value !== null && typeof value === 'object' ? (value as Record<string, unknown>) : undefined;\n}\n"],"mappings":"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"}