{"version":3,"sources":["/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/utils/message-content.cjs","../../../src/utils/message-content.ts"],"names":[],"mappings":"AAAA;ACmBO,SAAS,mBAAA,CAAoB,OAAA,EAAgC;AACnE,EAAA,MAAM,MAAA,kBAAQ,OAAA,2BAAS,OAAA,6BAAS,OAAA;AAChC,EAAA,GAAA,CAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,EAAA;AAElC,EAAA,MAAM,SAAA,EAAqB,CAAC,CAAA;AAC5B,EAAA,IAAA,CAAA,MAAW,KAAA,GAAQ,KAAA,EAAO;AACzB,IAAA,GAAA,CAAI,OAAO,KAAA,IAAS,QAAA,EAAU;AAC7B,MAAA,GAAA,CAAI,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC5B,MAAA,QAAA;AAAA,IACD;AACA,IAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,OAAO,KAAA,IAAS,QAAA,EAAU,QAAA;AAEvC,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,MAAM,EAAA,EAAI,IAAA;AAC1C,IAAA,GAAA,CAAI,KAAA,IAAS,OAAA,GAAU,OAAO,KAAA,IAAS,QAAA,EAAU;AAChD,MAAA,GAAA,CAAI,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC5B,MAAA,QAAA;AAAA,IACD;AACA,IAAA,GAAA,CAAI,KAAA,IAAS,WAAA,GAAc,OAAO,WAAA,IAAe,QAAA,EAAU;AAC1D,MAAA,MAAM,MAAA,EACL,OAAO,MAAA,IAAU,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,EAAA,EAAI,MAAA,EAAQ,UAAA;AACrD,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,eAAA,EAAQ,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IAC/B;AAAA,EAGD;AACA,EAAA,OAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC1B;ADtBA;AACE;AACF,kDAAC","file":"/Users/shyun/comcom/ain-enterprise/ain-adk/dist/cjs/utils/message-content.cjs","sourcesContent":[null,"import type { MessageObject } from \"@/types/memory\";\n\n/**\n * Flattens a stored message's content into prompt text.\n *\n * `MessageContentObject.parts` is `unknown[]` and its shape depends on\n * `content.type` — `\"text\"` holds plain strings, while `\"rich\"`/`\"document\"`\n * hold {@link MessagePart} OBJECTS. Model providers must never hand one of\n * those objects to a chat API as `content`: OpenAI-compatible endpoints reject\n * the whole request with `400 Invalid type for 'messages[N].content'`, which\n * breaks every later turn in the thread because the message is persisted.\n *\n * Document parts render as a short label only. The body is not inlined here —\n * `injectAttachedDocuments` resolves it to fresh text once per turn, so\n * embedding a (possibly stale) copy per history entry would duplicate it.\n *\n * Total function: returns `\"\"` for empty, unknown or malformed content rather\n * than leaking a non-string value.\n */\nexport function messageToPromptText(message: MessageObject): string {\n\tconst parts = message?.content?.parts;\n\tif (!Array.isArray(parts)) return \"\";\n\n\tconst rendered: string[] = [];\n\tfor (const part of parts) {\n\t\tif (typeof part === \"string\") {\n\t\t\tif (part) rendered.push(part);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!part || typeof part !== \"object\") continue;\n\n\t\tconst { type, text, documentId, title } = part as Record<string, unknown>;\n\t\tif (type === \"text\" && typeof text === \"string\") {\n\t\t\tif (text) rendered.push(text);\n\t\t\tcontinue;\n\t\t}\n\t\tif (type === \"document\" && typeof documentId === \"string\") {\n\t\t\tconst label =\n\t\t\t\ttypeof title === \"string\" && title.trim() ? title : documentId;\n\t\t\trendered.push(`[문서: ${label}]`);\n\t\t}\n\t\t// Unknown part shape: skipped on purpose — dropping a segment is\n\t\t// recoverable, emitting an object is a hard 400.\n\t}\n\treturn rendered.join(\"\\n\");\n}\n"]}