{"version":3,"file":"events.cjs","names":[],"sources":["../../src/service-adapters/events.ts"],"sourcesContent":["import {\n  Action,\n  CopilotKitError,\n  CopilotKitErrorCode,\n  CopilotKitLowLevelError,\n  ensureStructuredError,\n  randomId,\n  Severity,\n} from \"@copilotkit/shared\";\nimport { plainToInstance } from \"class-transformer\";\nimport {\n  catchError,\n  concat,\n  concatMap,\n  EMPTY,\n  firstValueFrom,\n  from,\n  of,\n  ReplaySubject,\n  scan,\n  Subject,\n} from \"rxjs\";\nimport { ActionInput } from \"../graphql/inputs/action.input\";\nimport {\n  ActionExecutionMessage,\n  ResultMessage,\n  TextMessage,\n} from \"../graphql/types/converted\";\nimport { GuardrailsResult } from \"../graphql/types/guardrails-result.type\";\nimport { generateHelpfulErrorMessage } from \"../lib/streaming\";\nimport telemetry from \"../lib/telemetry-client\";\nimport { streamLangChainResponse } from \"./langchain/utils\";\n\nexport enum RuntimeEventTypes {\n  TextMessageStart = \"TextMessageStart\",\n  TextMessageContent = \"TextMessageContent\",\n  TextMessageEnd = \"TextMessageEnd\",\n  ActionExecutionStart = \"ActionExecutionStart\",\n  ActionExecutionArgs = \"ActionExecutionArgs\",\n  ActionExecutionEnd = \"ActionExecutionEnd\",\n  ActionExecutionResult = \"ActionExecutionResult\",\n  AgentStateMessage = \"AgentStateMessage\",\n  MetaEvent = \"MetaEvent\",\n  RunError = \"RunError\",\n}\n\nexport enum RuntimeMetaEventName {\n  LangGraphInterruptEvent = \"LangGraphInterruptEvent\",\n  LangGraphInterruptResumeEvent = \"LangGraphInterruptResumeEvent\",\n  CopilotKitLangGraphInterruptEvent = \"CopilotKitLangGraphInterruptEvent\",\n}\n\nexport type RunTimeMetaEvent =\n  | {\n      type: RuntimeEventTypes.MetaEvent;\n      name: RuntimeMetaEventName.LangGraphInterruptEvent;\n      value: string;\n    }\n  | {\n      type: RuntimeEventTypes.MetaEvent;\n      name: RuntimeMetaEventName.CopilotKitLangGraphInterruptEvent;\n      data: {\n        value: string;\n        messages: (TextMessage | ActionExecutionMessage | ResultMessage)[];\n      };\n    }\n  | {\n      type: RuntimeEventTypes.MetaEvent;\n      name: RuntimeMetaEventName.LangGraphInterruptResumeEvent;\n      data: string;\n    };\n\nexport type RuntimeErrorEvent = {\n  type: RuntimeEventTypes.RunError;\n  message: string;\n  code?: string;\n};\n\nexport type RuntimeEvent =\n  | {\n      type: RuntimeEventTypes.TextMessageStart;\n      messageId: string;\n      parentMessageId?: string;\n    }\n  | {\n      type: RuntimeEventTypes.TextMessageContent;\n      messageId: string;\n      content: string;\n    }\n  | { type: RuntimeEventTypes.TextMessageEnd; messageId: string }\n  | {\n      type: RuntimeEventTypes.ActionExecutionStart;\n      actionExecutionId: string;\n      actionName: string;\n      parentMessageId?: string;\n    }\n  | {\n      type: RuntimeEventTypes.ActionExecutionArgs;\n      actionExecutionId: string;\n      args: string;\n    }\n  | { type: RuntimeEventTypes.ActionExecutionEnd; actionExecutionId: string }\n  | {\n      type: RuntimeEventTypes.ActionExecutionResult;\n      actionName: string;\n      actionExecutionId: string;\n      result: string;\n    }\n  | {\n      type: RuntimeEventTypes.AgentStateMessage;\n      threadId: string;\n      agentName: string;\n      nodeName: string;\n      runId: string;\n      active: boolean;\n      role: string;\n      state: string;\n      running: boolean;\n    }\n  | RunTimeMetaEvent\n  | RuntimeErrorEvent;\n\ninterface RuntimeEventWithState {\n  event: RuntimeEvent | null;\n  callActionServerSide: boolean;\n  action: Action<any> | null;\n  actionExecutionId: string | null;\n  args: string;\n  actionExecutionParentMessageId: string | null;\n}\n\ntype EventSourceCallback = (eventStream$: RuntimeEventSubject) => Promise<void>;\n\nexport class RuntimeEventSubject extends ReplaySubject<RuntimeEvent> {\n  constructor() {\n    super();\n  }\n\n  sendTextMessageStart({\n    messageId,\n    parentMessageId,\n  }: {\n    messageId: string;\n    parentMessageId?: string;\n  }) {\n    this.next({\n      type: RuntimeEventTypes.TextMessageStart,\n      messageId,\n      parentMessageId,\n    });\n  }\n\n  sendTextMessageContent({\n    messageId,\n    content,\n  }: {\n    messageId: string;\n    content: string;\n  }) {\n    this.next({\n      type: RuntimeEventTypes.TextMessageContent,\n      content,\n      messageId,\n    });\n  }\n\n  sendTextMessageEnd({ messageId }: { messageId: string }) {\n    this.next({ type: RuntimeEventTypes.TextMessageEnd, messageId });\n  }\n\n  sendTextMessage(messageId: string, content: string) {\n    this.sendTextMessageStart({ messageId });\n    this.sendTextMessageContent({ messageId, content });\n    this.sendTextMessageEnd({ messageId });\n  }\n\n  sendActionExecutionStart({\n    actionExecutionId,\n    actionName,\n    parentMessageId,\n  }: {\n    actionExecutionId: string;\n    actionName: string;\n    parentMessageId?: string;\n  }) {\n    this.next({\n      type: RuntimeEventTypes.ActionExecutionStart,\n      actionExecutionId,\n      actionName,\n      parentMessageId,\n    });\n  }\n\n  sendActionExecutionArgs({\n    actionExecutionId,\n    args,\n  }: {\n    actionExecutionId: string;\n    args: string;\n  }) {\n    this.next({\n      type: RuntimeEventTypes.ActionExecutionArgs,\n      args,\n      actionExecutionId,\n    });\n  }\n\n  sendActionExecutionEnd({ actionExecutionId }: { actionExecutionId: string }) {\n    this.next({\n      type: RuntimeEventTypes.ActionExecutionEnd,\n      actionExecutionId,\n    });\n  }\n\n  sendActionExecution({\n    actionExecutionId,\n    actionName,\n    args,\n    parentMessageId,\n  }: {\n    actionExecutionId: string;\n    actionName: string;\n    args: string;\n    parentMessageId?: string;\n  }) {\n    this.sendActionExecutionStart({\n      actionExecutionId,\n      actionName,\n      parentMessageId,\n    });\n    this.sendActionExecutionArgs({ actionExecutionId, args });\n    this.sendActionExecutionEnd({ actionExecutionId });\n  }\n\n  sendActionExecutionResult({\n    actionExecutionId,\n    actionName,\n    result,\n    error,\n  }: {\n    actionExecutionId: string;\n    actionName: string;\n    result?: string;\n    error?: { code: string; message: string };\n  }) {\n    this.next({\n      type: RuntimeEventTypes.ActionExecutionResult,\n      actionName,\n      actionExecutionId,\n      result: ResultMessage.encodeResult(result, error),\n    });\n  }\n\n  sendAgentStateMessage({\n    threadId,\n    agentName,\n    nodeName,\n    runId,\n    active,\n    role,\n    state,\n    running,\n  }: {\n    threadId: string;\n    agentName: string;\n    nodeName: string;\n    runId: string;\n    active: boolean;\n    role: string;\n    state: string;\n    running: boolean;\n  }) {\n    this.next({\n      type: RuntimeEventTypes.AgentStateMessage,\n      threadId,\n      agentName,\n      nodeName,\n      runId,\n      active,\n      role,\n      state,\n      running,\n    });\n  }\n}\n\nexport class RuntimeEventSource {\n  private eventStream$ = new RuntimeEventSubject();\n  private callback!: EventSourceCallback;\n  private errorHandler?: (error: any, context: any) => Promise<void>;\n  private errorContext?: any;\n\n  constructor(params?: {\n    errorHandler?: (error: any, context: any) => Promise<void>;\n    errorContext?: any;\n  }) {\n    this.errorHandler = params?.errorHandler;\n    this.errorContext = params?.errorContext;\n  }\n\n  async stream(callback: EventSourceCallback): Promise<void> {\n    this.callback = callback;\n  }\n}\n\nfunction convertStreamingErrorToStructured(error: any): CopilotKitError {\n  // Determine a more helpful error message based on context\n  let helpfulMessage = generateHelpfulErrorMessage(\n    error,\n    \"event streaming connection\",\n  );\n\n  // For network-related errors, use CopilotKitLowLevelError to preserve the original error\n  if (\n    error?.message?.includes(\"fetch failed\") ||\n    error?.message?.includes(\"ECONNREFUSED\") ||\n    error?.message?.includes(\"ENOTFOUND\") ||\n    error?.message?.includes(\"ETIMEDOUT\") ||\n    error?.message?.includes(\"terminated\") ||\n    error?.cause?.code === \"UND_ERR_SOCKET\" ||\n    error?.message?.includes(\"other side closed\") ||\n    error?.code === \"UND_ERR_SOCKET\"\n  ) {\n    return new CopilotKitLowLevelError({\n      error: error instanceof Error ? error : new Error(String(error)),\n      url: \"event streaming connection\",\n      message: helpfulMessage,\n    });\n  }\n\n  // For all other errors, preserve the raw error in a basic CopilotKitError\n  return new CopilotKitError({\n    message: helpfulMessage,\n    code: CopilotKitErrorCode.UNKNOWN,\n    severity: Severity.CRITICAL,\n  });\n}\n"],"mappings":";;;;;AAiCA,IAAY,gEAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGF,IAAY,sEAAL;AACL;AACA;AACA"}