{"version":3,"file":"conversion.mjs","names":[],"sources":["../../src/client/conversion.ts"],"sourcesContent":["import {\n  GenerateCopilotResponseMutation,\n  MessageInput,\n  MessageStatusCode,\n} from \"../graphql/@generated/graphql\";\nimport {\n  ActionExecutionMessage,\n  AgentStateMessage,\n  Message,\n  ResultMessage,\n  TextMessage,\n  ImageMessage,\n} from \"./types\";\n\nimport untruncateJson from \"untruncate-json\";\nimport { parseJson } from \"@copilotkit/shared\";\n\nexport function filterAgentStateMessages(messages: Message[]): Message[] {\n  return messages.filter((message) => !message.isAgentStateMessage());\n}\n\nexport function convertMessagesToGqlInput(messages: Message[]): MessageInput[] {\n  return messages.map((message) => {\n    if (message.isTextMessage()) {\n      return {\n        id: message.id,\n        createdAt: message.createdAt,\n        textMessage: {\n          content: message.content,\n          role: message.role as any,\n          parentMessageId: message.parentMessageId,\n        },\n      };\n    } else if (message.isActionExecutionMessage()) {\n      return {\n        id: message.id,\n        createdAt: message.createdAt,\n        actionExecutionMessage: {\n          name: message.name,\n          arguments: JSON.stringify(message.arguments),\n          parentMessageId: message.parentMessageId,\n        },\n      };\n    } else if (message.isResultMessage()) {\n      return {\n        id: message.id,\n        createdAt: message.createdAt,\n        resultMessage: {\n          result: message.result,\n          actionExecutionId: message.actionExecutionId,\n          actionName: message.actionName,\n        },\n      };\n    } else if (message.isAgentStateMessage()) {\n      return {\n        id: message.id,\n        createdAt: message.createdAt,\n        agentStateMessage: {\n          threadId: message.threadId,\n          role: message.role,\n          agentName: message.agentName,\n          nodeName: message.nodeName,\n          runId: message.runId,\n          active: message.active,\n          running: message.running,\n          state: JSON.stringify(message.state),\n        },\n      };\n    } else if (message.isImageMessage()) {\n      return {\n        id: message.id,\n        createdAt: message.createdAt,\n        imageMessage: {\n          format: message.format,\n          bytes: message.bytes,\n          role: message.role as any,\n          parentMessageId: message.parentMessageId,\n        },\n      };\n    } else {\n      throw new Error(\"Unknown message type\");\n    }\n  });\n}\n\nexport function filterAdjacentAgentStateMessages(\n  messages: GenerateCopilotResponseMutation[\"generateCopilotResponse\"][\"messages\"],\n): GenerateCopilotResponseMutation[\"generateCopilotResponse\"][\"messages\"] {\n  const filteredMessages: GenerateCopilotResponseMutation[\"generateCopilotResponse\"][\"messages\"] =\n    [];\n\n  messages.forEach((message, i) => {\n    // keep all other message types\n    if (message.__typename !== \"AgentStateMessageOutput\") {\n      filteredMessages.push(message);\n    } else {\n      const prevAgentStateMessageIndex = filteredMessages.findIndex(\n        // TODO: also check runId\n        (m) =>\n          m.__typename === \"AgentStateMessageOutput\" &&\n          m.agentName === message.agentName,\n      );\n      if (prevAgentStateMessageIndex === -1) {\n        filteredMessages.push(message);\n      } else {\n        filteredMessages[prevAgentStateMessageIndex] = message;\n      }\n    }\n  });\n\n  return filteredMessages;\n}\n\nexport function convertGqlOutputToMessages(\n  messages: GenerateCopilotResponseMutation[\"generateCopilotResponse\"][\"messages\"],\n): Message[] {\n  return messages.map((message) => {\n    if (message.__typename === \"TextMessageOutput\") {\n      return new TextMessage({\n        id: message.id,\n        role: message.role,\n        content: message.content.join(\"\"),\n        parentMessageId: message.parentMessageId,\n        createdAt: new Date(),\n        status: message.status || { code: MessageStatusCode.Pending },\n      });\n    } else if (message.__typename === \"ActionExecutionMessageOutput\") {\n      return new ActionExecutionMessage({\n        id: message.id,\n        name: message.name,\n        arguments: getPartialArguments(message.arguments),\n        parentMessageId: message.parentMessageId,\n        createdAt: new Date(),\n        status: message.status || { code: MessageStatusCode.Pending },\n      });\n    } else if (message.__typename === \"ResultMessageOutput\") {\n      return new ResultMessage({\n        id: message.id,\n        result: message.result,\n        actionExecutionId: message.actionExecutionId,\n        actionName: message.actionName,\n        createdAt: new Date(),\n        status: message.status || { code: MessageStatusCode.Pending },\n      });\n    } else if (message.__typename === \"AgentStateMessageOutput\") {\n      return new AgentStateMessage({\n        id: message.id,\n        threadId: message.threadId,\n        role: message.role,\n        agentName: message.agentName,\n        nodeName: message.nodeName,\n        runId: message.runId,\n        active: message.active,\n        running: message.running,\n        state: parseJson(message.state, {}),\n        createdAt: new Date(),\n      });\n    } else if (message.__typename === \"ImageMessageOutput\") {\n      return new ImageMessage({\n        id: message.id,\n        format: message.format,\n        bytes: message.bytes,\n        role: message.role,\n        parentMessageId: message.parentMessageId,\n        createdAt: new Date(),\n        status: message.status || { code: MessageStatusCode.Pending },\n      });\n    }\n\n    throw new Error(\"Unknown message type\");\n  });\n}\n\nexport function loadMessagesFromJsonRepresentation(json: any[]): Message[] {\n  const result: Message[] = [];\n  for (const item of json) {\n    if (\"content\" in item) {\n      result.push(\n        new TextMessage({\n          id: item.id,\n          role: item.role,\n          content: item.content,\n          parentMessageId: item.parentMessageId,\n          createdAt: item.createdAt || new Date(),\n          status: item.status || { code: MessageStatusCode.Success },\n        }),\n      );\n    } else if (\"arguments\" in item) {\n      result.push(\n        new ActionExecutionMessage({\n          id: item.id,\n          name: item.name,\n          arguments: item.arguments,\n          parentMessageId: item.parentMessageId,\n          createdAt: item.createdAt || new Date(),\n          status: item.status || { code: MessageStatusCode.Success },\n        }),\n      );\n    } else if (\"result\" in item) {\n      result.push(\n        new ResultMessage({\n          id: item.id,\n          result: item.result,\n          actionExecutionId: item.actionExecutionId,\n          actionName: item.actionName,\n          createdAt: item.createdAt || new Date(),\n          status: item.status || { code: MessageStatusCode.Success },\n        }),\n      );\n    } else if (\"state\" in item) {\n      result.push(\n        new AgentStateMessage({\n          id: item.id,\n          threadId: item.threadId,\n          role: item.role,\n          agentName: item.agentName,\n          nodeName: item.nodeName,\n          runId: item.runId,\n          active: item.active,\n          running: item.running,\n          state: item.state,\n          createdAt: item.createdAt || new Date(),\n        }),\n      );\n    } else if (\"format\" in item && \"bytes\" in item) {\n      result.push(\n        new ImageMessage({\n          id: item.id,\n          format: item.format,\n          bytes: item.bytes,\n          role: item.role,\n          parentMessageId: item.parentMessageId,\n          createdAt: item.createdAt || new Date(),\n          status: item.status || { code: MessageStatusCode.Success },\n        }),\n      );\n    }\n  }\n  return result;\n}\n\nfunction getPartialArguments(args: string[]) {\n  try {\n    if (!args.length) return {};\n\n    const parsed = JSON.parse(untruncateJson(args.join(\"\")));\n    if (\n      typeof parsed !== \"object\" ||\n      parsed === null ||\n      Array.isArray(parsed)\n    ) {\n      console.warn(\n        `[CopilotKit] Tool arguments parsed to non-object (${typeof parsed}), falling back to empty object`,\n      );\n      return {};\n    }\n    return parsed;\n  } catch (e) {\n    // Incomplete JSON is expected during streaming — no warning needed\n    return {};\n  }\n}\n"],"mappings":"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"}