@cloudbase/agent-examples-agkit-agents-manga-creator 0.0.2 → 0.0.6
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/CHANGELOG.md +70 -0
- package/dist/index.js +51 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +51 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/agent.ts +65 -20
- package/src/tools.ts +5 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/comic-style.ts","../src/volcengine-api.ts","../src/tools.ts","../src/agent.ts"],"names":["lines","tool","z","OpenAIProvider","Agent"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Type definitions for Manga Creator Agent\n */\n\nexport class MangaCreationState {\n storyIdea: string = \"\";\n scriptParams?: {\n storyIdea: string;\n // Comic style parameters\n culturalOrigin?: string; // e.g., \"Japanese Manga\", \"American Comics\", \"Korean Manhwa\", \"Chinese Manhua\", \"European Bande Dessinée\"\n targetAudience?: string; // e.g., \"Shōnen\", \"Shōjo\", \"Seinen\", \"Josei\", \"Kodomo\"\n artStyle?: string; // e.g., \"Realistic\", \"Cartoonish/Exaggerated\", \"Abstract/Experimental\"\n themeType?: string; // e.g., \"Action/Adventure\", \"Romance\", \"Horror/Suspense\", \"Sci-Fi/Fantasy\", \"Comedy\"\n // Visual adjustments\n lineStyle?: string; // e.g., \"thick lines\", \"thin lines\", \"smooth\", \"ink brush\"\n colorScheme?: string; // e.g., \"black and white\", \"monochrome\", \"full color\", \"vibrant\", \"muted\"\n panelLayout?: string; // e.g., \"grid format\", \"free-flowing\", \"vertical scroll\"\n // Character and element adjustments\n characterProportion?: string; // e.g., \"realistic\", \"chibi\", \"exaggerated\"\n backgroundComplexity?: string; // e.g., \"minimalist\", \"detailed\"\n // Narrative adjustments\n textIntegration?: string; // e.g., \"dialogue bubbles\", \"narrative boxes\"\n // Basic parameters\n numPages?: number;\n userConfirmed?: boolean;\n };\n characterDesignParams?: {\n characters: Array<{\n name: string;\n description: string;\n }>;\n userConfirmed?: boolean;\n };\n script: {\n title: string;\n pages: Array<{\n pageNumber: number;\n panels: Array<{\n panelNumber: number;\n description: string;\n dialogue?: string;\n characters?: string[];\n }>;\n }>;\n } | null = null;\n characters: Array<{\n name: string;\n description: string;\n }> = [];\n styleGuide: string = \"\";\n generatedPanels: Array<{\n pageNumber: number;\n panelNumber: number;\n imageUrl: string;\n }> = [];\n completedPages: Array<{\n pageNumber: number;\n imageUrl: string;\n }> = [];\n\n [key: string]: unknown;\n}\n\n","/**\n * Comic style helper functions\n */\n\nimport { MangaCreationState } from \"./types\";\n\n/**\n * Build comic style prompt from confirmed script parameters\n */\nexport function buildComicStylePrompt(state: MangaCreationState | undefined): string {\n if (!state?.scriptParams?.userConfirmed) {\n return \"\";\n }\n\n const params = state.scriptParams;\n const styleParts: string[] = [];\n\n // Cultural origin and target audience\n if (params.culturalOrigin) {\n styleParts.push(`${params.culturalOrigin} style`);\n }\n if (params.targetAudience) {\n styleParts.push(`target audience: ${params.targetAudience}`);\n }\n\n // Art style\n if (params.artStyle) {\n styleParts.push(`art style: ${params.artStyle}`);\n }\n\n // Theme type\n if (params.themeType) {\n styleParts.push(`theme: ${params.themeType}`);\n }\n\n // Visual adjustments\n if (params.lineStyle) {\n styleParts.push(`line style: ${params.lineStyle}`);\n }\n if (params.colorScheme) {\n styleParts.push(`color scheme: ${params.colorScheme}`);\n }\n if (params.panelLayout) {\n styleParts.push(`panel layout: ${params.panelLayout}`);\n }\n\n // Character and element adjustments\n if (params.characterProportion) {\n styleParts.push(`character proportion: ${params.characterProportion}`);\n }\n if (params.backgroundComplexity) {\n styleParts.push(`background: ${params.backgroundComplexity}`);\n }\n\n // Text integration\n if (params.textIntegration) {\n styleParts.push(`text integration: ${params.textIntegration}`);\n }\n\n if (styleParts.length === 0) {\n return \"\";\n }\n\n // Add explicit multi-panel comic format description\n let panelLayoutDesc = \"\";\n if (params.panelLayout) {\n // Translate common panel layout terms to explicit descriptions\n const layoutMap: Record<string, string> = {\n \"网格格式\": \"grid layout with multiple panels arranged in rows and columns, each panel is a separate frame with borders\",\n \"grid format\": \"grid layout with multiple panels arranged in rows and columns, each panel is a separate frame with borders\",\n \"自由流动\": \"free-flowing layout with multiple panels of varying sizes, each panel is a separate frame\",\n \"free-flowing\": \"free-flowing layout with multiple panels of varying sizes, each panel is a separate frame\",\n \"垂直滚动\": \"vertical scroll layout with multiple panels stacked vertically, each panel is a separate frame\",\n \"vertical scroll\": \"vertical scroll layout with multiple panels stacked vertically, each panel is a separate frame\",\n };\n panelLayoutDesc = layoutMap[params.panelLayout] || `panel layout: ${params.panelLayout}`;\n } else {\n panelLayoutDesc = \"grid layout with multiple panels arranged in rows and columns\";\n }\n\n return `Multi-panel comic format (多格漫画): ${styleParts.join(\", \")}. ${panelLayoutDesc}.`;\n}\n\n","/**\n * Volcengine Seedream API integration\n */\n\n/**\n * Parse SSE (Server-Sent Events) stream\n */\nexport async function* parseSSEStream(\n stream: ReadableStream<Uint8Array>\n): AsyncGenerator<{ event: string; data: string }> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let currentEvent = \"message\";\n let currentData = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n // Process remaining buffer before breaking\n if (buffer.trim()) {\n const lines = buffer.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"event:\")) {\n currentEvent = line.slice(6).trim();\n } else if (line.startsWith(\"data:\")) {\n currentData = line.slice(5).trim();\n } else if (line === \"\" && currentData) {\n yield { event: currentEvent, data: currentData };\n currentData = \"\";\n currentEvent = \"message\";\n }\n }\n // Yield any remaining data\n if (currentData) {\n yield { event: currentEvent, data: currentData };\n }\n }\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n // Keep the last incomplete line in buffer\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"event:\")) {\n currentEvent = line.slice(6).trim();\n } else if (line.startsWith(\"data:\")) {\n // If we have previous data, yield it first\n if (currentData) {\n yield { event: currentEvent, data: currentData };\n currentData = \"\";\n currentEvent = \"message\";\n }\n currentData = line.slice(5).trim();\n } else if (line === \"\") {\n // Empty line indicates end of event\n if (currentData) {\n yield { event: currentEvent, data: currentData };\n currentData = \"\";\n currentEvent = \"message\";\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n/**\n * Generate image using Volcengine Seedream API with SSE streaming\n */\nexport async function generateImageWithVolcengine(\n prompt: string,\n size: string = \"2048x2048\",\n imageCount: number = 1,\n referenceImages?: Array<{ Url: string; BucketName?: string; ObjectKey?: string }>\n): Promise<{ success: boolean; imageUrl?: string; error?: string }> {\n try {\n const cookie = process.env.VOLCENGINE_COOKIE;\n if (!cookie) {\n throw new Error(\"VOLCENGINE_COOKIE environment variable is not set\");\n }\n\n // Extract tokens from cookie\n const csrfTokenMatch = cookie.match(/csrfToken=([^;]+)/);\n const csrfToken = csrfTokenMatch ? csrfTokenMatch[1] : \"\";\n const webIdMatch = cookie.match(/x-web-id[^=]*=([^;]+)/);\n const webId = webIdMatch ? webIdMatch[1] : \"\";\n\n // Prepare reference images for API\n const imagesForAPI: Array<{\n Url: string;\n BucketName?: string;\n ObjectKey?: string;\n }> = [];\n\n if (referenceImages && referenceImages.length > 0) {\n for (const refImg of referenceImages) {\n const urlMatch = refImg.Url.match(/https:\\/\\/([^\\.]+)\\.tos-cn-beijing\\.volces\\.com\\/([^?]+)/);\n if (urlMatch) {\n const bucketName = urlMatch[1];\n const objectKey = urlMatch[2];\n imagesForAPI.push({\n Url: refImg.Url,\n BucketName: refImg.BucketName || bucketName,\n ObjectKey: refImg.ObjectKey || objectKey,\n });\n console.log(` Added image - BucketName: ${bucketName}, ObjectKey: ${objectKey}`);\n } else {\n const altMatch = refImg.Url.match(/https:\\/\\/[^\\/]+\\/([^\\/]+)\\/([^?]+)/);\n if (altMatch) {\n imagesForAPI.push({\n Url: refImg.Url,\n BucketName: refImg.BucketName || altMatch[1],\n ObjectKey: refImg.ObjectKey || altMatch[2],\n });\n } else {\n console.warn(` Could not parse URL: ${refImg.Url}`);\n }\n }\n }\n }\n\n const requestBody: {\n ProjectName: string;\n From: string;\n Model: string;\n EndpointId: string;\n Type: \"normal\" | \"group\";\n Images: Array<{ Url: string; BucketName?: string; ObjectKey?: string }>;\n Prompt: string;\n Size: string;\n ImageCount?: number;\n ImageSequence?: number;\n Watermark: boolean;\n Seed: number;\n } = {\n ProjectName: \"\",\n From: \"pc\",\n Model: \"doubao-seedream-4-0\",\n EndpointId: \"doubao-seedream-4-0-250828\",\n Type: imagesForAPI.length > 0 ? \"group\" : \"normal\",\n Images: imagesForAPI,\n Prompt: prompt,\n Size: size,\n Watermark: false,\n Seed: -1,\n };\n\n if (imagesForAPI.length > 0) {\n requestBody.ImageSequence = 1;\n } else {\n requestBody.ImageCount = imageCount;\n }\n\n console.log(\"=== Volcengine API Request Debug ===\");\n console.log(\"Reference Images Input:\", JSON.stringify(referenceImages, null, 2));\n console.log(\"Images For API:\", JSON.stringify(imagesForAPI, null, 2));\n console.log(\"Request Body:\", JSON.stringify(requestBody, null, 2));\n console.log(\"Prompt:\", prompt);\n console.log(\"====================================\");\n\n const headers: Record<string, string> = {\n Accept: \"*/*\",\n \"Accept-Language\": \"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Content-Type\": \"application/json\",\n Cookie: cookie,\n Origin: \"https://www.volcengine.com\",\n \"Pragma\": \"no-cache\",\n Referer: \"https://www.volcengine.com/\",\n \"Sec-Fetch-Dest\": \"empty\",\n \"Sec-Fetch-Mode\": \"cors\",\n \"Sec-Fetch-Site\": \"same-site\",\n \"User-Agent\":\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36\",\n \"sec-ch-ua\": '\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"macOS\"',\n };\n\n if (csrfToken) {\n headers[\"X-Csrf-Token\"] = csrfToken;\n }\n if (webId) {\n headers[\"x-web-id\"] = webId;\n }\n\n console.log(\"=== Sending Request to API ===\");\n console.log(\"URL:\", \"https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024/CreateImageGeneration\");\n console.log(\"Request Body String:\", JSON.stringify(requestBody));\n \n const response = await fetch(\n \"https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024/CreateImageGeneration\",\n {\n method: \"POST\",\n headers,\n body: JSON.stringify(requestBody),\n }\n );\n\n console.log(\"Response Status:\", response.status);\n if (!response.ok) {\n const clonedResponse = response.clone();\n const errorText = await clonedResponse.text();\n console.error(\"Response Error:\", errorText);\n throw new Error(\n `Volcengine API error: ${response.status} ${response.statusText} - ${errorText}`\n );\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n // Parse SSE stream to get resource_id\n let resourceId: string | null = null;\n let reqId: string | null = null;\n let hasError = false;\n let errorMessage = \"\";\n\n for await (const sseEvent of parseSSEStream(response.body)) {\n console.log(\"SSE Event:\", sseEvent.event, \"Data:\", sseEvent.data?.substring(0, 200));\n\n if (sseEvent.event === \"error\") {\n try {\n const errorData = JSON.parse(sseEvent.data);\n hasError = true;\n errorMessage = errorData.msg || errorData.message || \"Image generation failed due to content restrictions\";\n console.error(\"SSE Error Event:\", errorData);\n \n if (errorData.type === \"block\" || errorData.code === 500) {\n return {\n success: false,\n error: errorMessage,\n };\n }\n } catch (parseError) {\n console.warn(\"Failed to parse error SSE data:\", parseError);\n hasError = true;\n errorMessage = \"Image generation failed\";\n }\n }\n\n if (sseEvent.event === \"image-generation\" || sseEvent.event === \"start\") {\n try {\n const data = JSON.parse(sseEvent.data);\n \n if (data.resource_id) {\n resourceId = data.resource_id;\n console.log(\"Found resource_id:\", resourceId);\n }\n \n if (data.req_id) {\n reqId = data.req_id;\n }\n \n if (data.status === \"finish\" || data.status === \"end\") {\n if (resourceId) {\n break;\n }\n }\n } catch (parseError) {\n console.warn(\"Failed to parse SSE data:\", parseError, \"Raw data:\", sseEvent.data);\n }\n } else if (sseEvent.event === \"end\") {\n if (resourceId) {\n break;\n }\n }\n }\n\n if (hasError && !resourceId) {\n return {\n success: false,\n error: errorMessage || \"Image generation failed\",\n };\n }\n\n if (!resourceId) {\n console.warn(\"No resource_id found in SSE stream, trying to find latest record...\");\n await new Promise((resolve) => setTimeout(resolve, 3000));\n const fallbackResult = await findLatestImageRecord(prompt, reqId || undefined);\n if (fallbackResult.success && fallbackResult.imageUrl) {\n return fallbackResult;\n }\n return {\n success: false,\n error: fallbackResult.error || \"Failed to get resource_id from SSE stream and could not find matching record\",\n };\n }\n\n await new Promise((resolve) => setTimeout(resolve, 2000));\n const imageResult = await queryImageGenerationRecords(resourceId);\n if (!imageResult.success || !imageResult.imageUrl) {\n return {\n success: false,\n error: imageResult.error || \"Failed to query image generation records\",\n };\n }\n\n return {\n success: true,\n imageUrl: imageResult.imageUrl,\n };\n } catch (error) {\n console.error(\"Error generating image with Volcengine:\", error);\n return {\n success: false,\n error:\n error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Find the latest image record (fallback when resource_id is not available)\n */\nasync function findLatestImageRecord(\n prompt: string,\n reqId?: string\n): Promise<{ success: boolean; imageUrl?: string; error?: string }> {\n try {\n const cookie = process.env.VOLCENGINE_COOKIE;\n if (!cookie) {\n throw new Error(\"VOLCENGINE_COOKIE environment variable is not set\");\n }\n\n const csrfTokenMatch = cookie.match(/csrfToken=([^;]+)/);\n const csrfToken = csrfTokenMatch ? csrfTokenMatch[1] : \"\";\n\n const headers: Record<string, string> = {\n Accept: \"application/json, text/plain, */*\",\n \"Accept-Language\": \"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Content-Type\": \"application/json\",\n Cookie: cookie,\n Origin: \"https://exp.volcengine.com\",\n \"Pragma\": \"no-cache\",\n Referer: \"https://exp.volcengine.com/\",\n \"Sec-Fetch-Dest\": \"empty\",\n \"Sec-Fetch-Mode\": \"cors\",\n \"Sec-Fetch-Site\": \"same-site\",\n \"User-Agent\":\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36\",\n \"sec-ch-ua\": '\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"macOS\"',\n };\n\n if (csrfToken) {\n headers[\"X-Csrf-Token\"] = csrfToken;\n }\n\n const response = await fetch(\n \"https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024-01-29/ListImageGenerationRecords?\",\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n PageIndex: 1,\n PageSize: 5,\n }),\n }\n );\n\n if (!response.ok) {\n return {\n success: false,\n error: `List API error: ${response.status}`,\n };\n }\n\n const result = (await response.json()) as {\n Result?: {\n Items?: Array<{\n Sid?: string;\n Status?: string;\n Prompt?: string;\n Output?: {\n Items?: Array<{\n Url?: string;\n }>;\n };\n CreateTime?: string;\n }>;\n };\n };\n\n if (result.Result?.Items) {\n const sortedItems = result.Result.Items.sort((a, b) => {\n const timeA = a.CreateTime ? new Date(a.CreateTime).getTime() : 0;\n const timeB = b.CreateTime ? new Date(b.CreateTime).getTime() : 0;\n return timeB - timeA;\n });\n \n const matchingItem = sortedItems.find(\n (item) => item.Status === \"Success\" && item.Output?.Items && item.Output.Items.length > 0\n );\n \n if (!matchingItem) {\n return {\n success: false,\n error: \"No successful image record found in recent history\",\n };\n }\n \n if (!reqId) {\n return {\n success: false,\n error: \"Cannot reliably match image without request ID. Generation may have failed.\",\n };\n }\n \n return {\n success: false,\n error: \"Cannot verify image match. The generation request may have failed or been blocked.\",\n };\n }\n\n return {\n success: false,\n error: \"No successful image record found in recent history\",\n };\n } catch (error) {\n console.error(\"Error finding latest image record:\", error);\n return {\n success: false,\n error:\n error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Query image generation records to get renderable image URLs\n */\nasync function queryImageGenerationRecords(\n resourceId: string\n): Promise<{ success: boolean; imageUrl?: string; error?: string }> {\n try {\n const cookie = process.env.VOLCENGINE_COOKIE;\n if (!cookie) {\n throw new Error(\"VOLCENGINE_COOKIE environment variable is not set\");\n }\n\n const csrfTokenMatch = cookie.match(/csrfToken=([^;]+)/);\n const csrfToken = csrfTokenMatch ? csrfTokenMatch[1] : \"\";\n\n const headers: Record<string, string> = {\n Accept: \"application/json, text/plain, */*\",\n \"Accept-Language\": \"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Content-Type\": \"application/json\",\n Cookie: cookie,\n Origin: \"https://exp.volcengine.com\",\n \"Pragma\": \"no-cache\",\n Referer: \"https://exp.volcengine.com/\",\n \"Sec-Fetch-Dest\": \"empty\",\n \"Sec-Fetch-Mode\": \"cors\",\n \"Sec-Fetch-Site\": \"same-site\",\n \"User-Agent\":\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36\",\n \"sec-ch-ua\": '\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"macOS\"',\n };\n\n if (csrfToken) {\n headers[\"X-Csrf-Token\"] = csrfToken;\n }\n\n for (let page = 1; page <= 5; page++) {\n const pageResponse = await fetch(\n `https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024-01-29/ListImageGenerationRecords?`,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n PageIndex: page,\n PageSize: 10,\n }),\n }\n );\n\n if (!pageResponse.ok) {\n continue;\n }\n\n const pageResult = (await pageResponse.json()) as {\n Result?: {\n Items?: Array<{\n Sid?: string;\n Status?: string;\n Output?: {\n Items?: Array<{\n Url?: string;\n }>;\n };\n }>;\n Total?: number;\n };\n };\n\n if (pageResult.Result?.Items) {\n for (const item of pageResult.Result.Items) {\n if (item.Sid === resourceId && item.Status === \"success\") {\n const outputItems = item.Output?.Items || [];\n if (outputItems.length > 0 && outputItems[0].Url) {\n return {\n success: true,\n imageUrl: outputItems[0].Url,\n };\n }\n }\n }\n }\n\n if (pageResult.Result?.Total && page > Math.ceil(pageResult.Result.Total / 10)) {\n break;\n }\n }\n\n return {\n success: false,\n error: \"Image record not found or not yet available\",\n };\n } catch (error) {\n console.error(\"Error querying image generation records:\", error);\n return {\n success: false,\n error:\n error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n","/**\n * Manga Creator Agent Tools\n */\n\nimport { tool } from \"@cloudbase/agent-tools\";\nimport { z } from \"zod\";\nimport { MangaCreationState } from \"./types\";\nimport { buildComicStylePrompt } from \"./comic-style\";\nimport { generateImageWithVolcengine } from \"./volcengine-api\";\n\n/**\n * Generate script with panel descriptions\n */\nexport const generateScriptTool = tool(\n async ({ \n culturalOrigin, \n targetAudience, \n artStyle, \n themeType,\n lineStyle,\n colorScheme,\n panelLayout,\n characterProportion,\n backgroundComplexity,\n textIntegration,\n numPages \n }, context) => {\n const state = context?.state as MangaCreationState | undefined;\n const storyIdea = state?.storyIdea || \"\";\n \n if (state) {\n state.scriptParams = {\n storyIdea,\n culturalOrigin,\n targetAudience,\n artStyle,\n themeType,\n lineStyle,\n colorScheme,\n panelLayout,\n characterProportion,\n backgroundComplexity,\n textIntegration,\n numPages: numPages || 4,\n userConfirmed: false,\n };\n }\n\n return {\n message: \"Comic style parameters proposed based on story analysis. Waiting for user confirmation or adjustments.\",\n status: \"pending_confirmation\",\n };\n },\n {\n name: \"generate_script\",\n description:\n \"IMMEDIATELY analyze the story idea (from the conversation context) and recommend appropriate comic style parameters. Based on the story characteristics (theme, genre, tone, cultural context), recommend specific comic style parameters. IMPORTANT: You MUST provide ALL style parameters based on the story analysis - do not leave them empty. If the user's input is in Chinese, generate all parameters in Chinese. If in English, use English. After calling this tool, explain your recommendations in the response. The tool will pause for user confirmation before proceeding to script generation.\",\n schema: z.object({\n culturalOrigin: z.string().min(1).describe(\"Cultural origin based on story analysis. REQUIRED. Examples: Japanese Manga (日本漫画), American Comics (美国漫画), Korean Manhwa (韩国漫画), Chinese Manhua (中国漫画), European Bande Dessinée (欧洲漫画). Use the language that matches the user's input.\"),\n targetAudience: z.string().min(1).describe(\"Target audience based on story analysis. REQUIRED. Examples: Shōnen (少年漫画), Shōjo (少女漫画), Seinen (青年漫画), Josei (女性漫画), Kodomo (儿童漫画). Use the language that matches the user's input.\"),\n artStyle: z.string().min(1).describe(\"Art style based on story analysis. REQUIRED. Examples: Realistic (写实风格), Cartoonish/Exaggerated (卡通/夸张风格), Abstract/Experimental (抽象/实验风格). Use the language that matches the user's input.\"),\n themeType: z.string().min(1).describe(\"Theme type based on story analysis. REQUIRED. Examples: Action/Adventure (动作/冒险), Romance (浪漫), Horror/Suspense (恐怖/悬疑), Sci-Fi/Fantasy (科幻/奇幻), Comedy (喜剧). Use the language that matches the user's input.\"),\n lineStyle: z.string().min(1).describe(\"Line style based on story analysis. REQUIRED. Examples: thick lines (粗线条), thin lines (细线条), smooth (流畅), ink brush (水墨笔触), digital pen (数字笔). Use the language that matches the user's input.\"),\n colorScheme: z.string().min(1).describe(\"Color scheme based on story analysis. REQUIRED. Examples: black and white (黑白), monochrome (单色), full color (全彩), vibrant (鲜艳), muted (柔和). Use the language that matches the user's input.\"),\n panelLayout: z.string().min(1).describe(\"Panel layout based on story analysis. REQUIRED. Examples: grid format (网格格式), free-flowing (自由流动), vertical scroll (垂直滚动). Use the language that matches the user's input.\"),\n characterProportion: z.string().min(1).describe(\"Character proportion based on story analysis. REQUIRED. Examples: realistic (写实), chibi (Q版), exaggerated (夸张). Use the language that matches the user's input.\"),\n backgroundComplexity: z.string().min(1).describe(\"Background complexity based on story analysis. REQUIRED. Examples: minimalist (简约), detailed (详细). Use the language that matches the user's input.\"),\n textIntegration: z.string().min(1).describe(\"Text integration based on story analysis. REQUIRED. Examples: dialogue bubbles (对话气泡), narrative boxes (叙述框). Use the language that matches the user's input.\"),\n numPages: z.number().int().min(1).max(10).optional().describe(\"Number of pages to generate (default: 4)\"),\n }),\n }\n);\n\n/**\n * Generate character design descriptions\n */\nexport const generateCharacterDesignTool = tool(\n async ({ characters }, context) => {\n if (context?.state) {\n const state = context.state as MangaCreationState;\n state.characterDesignParams = {\n characters: characters.map(c => ({\n name: c.name,\n description: c.description,\n })),\n userConfirmed: false,\n };\n \n // Also immediately update state.characters with the proposed designs\n for (const char of characters) {\n const existingIndex = state.characters.findIndex((c) => c.name === char.name);\n if (existingIndex >= 0) {\n state.characters[existingIndex].description = char.description;\n } else {\n state.characters.push({\n name: char.name,\n description: char.description,\n });\n }\n }\n \n console.log(\"=== Character Design Tool Called ===\");\n console.log(\"Characters proposed:\", characters.map(c => c.name));\n console.log(\"State.characters updated:\", state.characters.map(c => ({ name: c.name, hasDescription: !!c.description })));\n console.log(\"===================================\");\n }\n \n return {\n message: \"Character designs proposed. Waiting for user confirmation or adjustments.\",\n status: \"pending_confirmation\",\n };\n },\n {\n name: \"generate_character_design\",\n description:\n \"Generate VERY DETAILED character design descriptions. Each description must include: background context (country/region, time period/era, cultural setting, historical context), exact physical appearance (hair color, style, length, eye color, facial features, body type, height), detailed clothing (colors, patterns, styles, accessories) matching the historical/cultural period, and distinctive features. These descriptions will be used in ALL panel generation prompts to ensure character consistency.\",\n schema: z.object({\n characters: z.array(\n z.object({\n name: z.string().describe(\"Character name\"),\n description: z.string().describe(\n \"VERY DETAILED character description including: (1) Background context: country/region, time period/era, cultural setting, historical context; (2) Exact physical appearance: hair color, style, length, eye color, facial features, body type, height; (3) Detailed clothing description: colors, patterns, styles, accessories that match the historical/cultural period; (4) Distinctive features and characteristics. This description will be used in all panel generation prompts.\"\n ),\n })\n ).describe(\"List of characters with detailed descriptions\"),\n }),\n }\n);\n\n/**\n * Generate panel image using Volcengine Seedream API\n */\nexport const generatePanelImageTool = tool(\n async ({ panelDescription, characterReferences, styleGuide }, context) => {\n try {\n const state = context?.state as MangaCreationState | undefined;\n let prompt = `This is a single panel from a multi-panel comic page. ${panelDescription}`;\n\n const comicStylePrompt = buildComicStylePrompt(state);\n if (comicStylePrompt) {\n prompt = `${comicStylePrompt}, ${prompt}`;\n }\n\n if (styleGuide) {\n prompt = `${styleGuide}, ${prompt}`;\n }\n\n const characterDescriptions: Array<{ name: string; description: string }> = [];\n if (characterReferences && characterReferences.length > 0) {\n for (const ref of characterReferences) {\n const stateCharacter = state?.characters.find((c) => c.name === ref.name);\n if (stateCharacter) {\n characterDescriptions.push({\n name: ref.name,\n description: stateCharacter.description,\n });\n } else if (ref.description) {\n characterDescriptions.push({\n name: ref.name,\n description: ref.description,\n });\n }\n }\n }\n\n if (characterDescriptions.length > 0) {\n const characterDetails = characterDescriptions\n .map((char) => `character \"${char.name}\": ${char.description}`)\n .join(\"; \");\n prompt = `${prompt}. CRITICAL: Maintain strict character consistency. Characters must match their detailed descriptions exactly: ${characterDetails}. Ensure facial features, hair style, clothing, body proportions, and all distinctive features remain identical across all panels.`;\n }\n\n const result = await generateImageWithVolcengine(\n prompt,\n \"1728x2304\",\n 1,\n undefined\n );\n\n if (!result.success || !result.imageUrl) {\n throw new Error(result.error || \"Failed to generate image\");\n }\n\n return {\n success: true,\n imageUrl: result.imageUrl,\n prompt,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"generation_error\",\n };\n }\n },\n {\n name: \"generate_panel_image\",\n description:\n \"Generate a single panel image from a multi-panel comic page using Volcengine Seedream API. IMPORTANT: This generates ONE panel frame with clear borders, not a full page. The image should match the panel description and maintain character consistency using detailed character descriptions.\",\n schema: z.object({\n panelDescription: z.string().describe(\"Detailed visual description of the panel, including composition, characters, setting, and mood\"),\n characterReferences: z.array(\n z.object({\n name: z.string().describe(\"Character name (must match the name used in generate_character_design)\"),\n description: z.string().describe(\"Character description (will be replaced with detailed description from state if available)\"),\n })\n ).optional().describe(\"Character references that appear in this panel. The tool will automatically use detailed character descriptions from state to ensure consistency.\"),\n styleGuide: z.string().optional().describe(\"Overall art style guide to apply\"),\n }),\n }\n);\n\n/**\n * Generate a complete comic page with all panels\n */\nexport const generateComicPageTool = tool(\n async ({ pageNumber, panels, styleGuide }, context) => {\n try {\n const state = context?.state as MangaCreationState | undefined;\n \n if (!panels || panels.length === 0) {\n throw new Error(\"No panels provided for page generation\");\n }\n\n // Collect all unique characters from all panels in this page\n const allCharacterNames = new Set<string>();\n for (const panel of panels) {\n if (panel.characterReferences) {\n for (const ref of panel.characterReferences) {\n allCharacterNames.add(ref.name);\n }\n }\n }\n\n // Get detailed character descriptions from state\n const characterDescriptions: Array<{ name: string; description: string }> = [];\n \n // First, add characters explicitly mentioned in panels\n for (const charName of allCharacterNames) {\n const stateCharacter = state?.characters.find((c) => c.name === charName);\n if (stateCharacter && stateCharacter.description) {\n characterDescriptions.push({\n name: charName,\n description: stateCharacter.description,\n });\n }\n }\n \n // Then, add ALL other characters from state that have descriptions\n if (state?.characters) {\n for (const stateChar of state.characters) {\n if (!allCharacterNames.has(stateChar.name) && stateChar.description) {\n characterDescriptions.push({\n name: stateChar.name,\n description: stateChar.description,\n });\n }\n }\n }\n\n // Build page description with all panels\n const panelDescriptions = panels.map((panel, index) => {\n let desc = `Panel ${index + 1}: ${panel.description}`;\n if (panel.dialogue) {\n desc += ` (Dialogue: \"${panel.dialogue}\")`;\n }\n if (panel.narrative) {\n desc += ` (Narrative: \"${panel.narrative}\")`;\n }\n return desc;\n }).join('\\n');\n\n const isCoverPage = pageNumber === 1;\n let prompt = \"\";\n\n if (isCoverPage) {\n prompt = `COMIC BOOK COVER PAGE. This is the cover page (page 1) of the comic. Design a striking, eye-catching cover that showcases the main characters and story theme. `;\n if (panels.length === 1) {\n prompt += `Generate a single, impactful cover image. `;\n } else {\n prompt += `Generate a cover design with ${panels.length} panels/elements arranged artistically. `;\n }\n prompt += `The cover should be visually compelling and represent the essence of the story. `;\n const title = state?.script?.title || \"\";\n if (title) {\n prompt += `Title: \"${title}\". `;\n }\n prompt += `Cover design descriptions:\\n${panelDescriptions}`;\n } else {\n prompt = `Complete multi-panel comic page. Generate the ENTIRE page with ALL ${panels.length} panels arranged in the specified layout. `;\n prompt += `Each panel must have clear borders/frames. Panel descriptions:\\n${panelDescriptions}`;\n }\n\n // Add confirmed comic style parameters from state\n const comicStylePrompt = buildComicStylePrompt(state);\n if (comicStylePrompt) {\n prompt = `${comicStylePrompt}, ${prompt}`;\n } else {\n prompt = `Multi-panel comic format (多格漫画), ${prompt}`;\n }\n\n if (styleGuide) {\n prompt = `${styleGuide}, ${prompt}`;\n }\n\n // Add detailed character descriptions\n if (characterDescriptions.length > 0) {\n const characterDetails = characterDescriptions\n .map((char) => `character \"${char.name}\": ${char.description}`)\n .join(\"; \");\n prompt = `${prompt}. CRITICAL: Maintain strict character consistency across ALL panels on this page. Characters must match their detailed descriptions exactly: ${characterDetails}. Ensure facial features, hair style, clothing, body proportions, and all distinctive features remain identical across all panels.`;\n }\n\n // Add explicit layout instructions\n const panelLayout = state?.scriptParams?.panelLayout || \"grid format\";\n if (isCoverPage) {\n if (panels.length === 1) {\n prompt = `${prompt}. CRITICAL: This is a COMIC BOOK COVER PAGE. Generate a single, impactful cover image that is visually striking and showcases the main characters and story theme. The cover should be designed to attract readers and represent the essence of the story.`;\n } else {\n prompt = `${prompt}. CRITICAL: This is a COMIC BOOK COVER PAGE. Generate a cover design with ${panels.length} panels/elements arranged artistically. The cover should be visually compelling, with creative layout that showcases the main characters and story theme. Panels can be arranged in a dynamic, eye-catching composition suitable for a cover page.`;\n }\n } else {\n if (panelLayout.includes(\"网格\") || panelLayout.includes(\"grid\")) {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels in a grid format (rows and columns) with clear borders/frames between each panel. Each panel must be a separate, clearly defined frame with visible borders. The entire page should show all panels together in one cohesive layout.`;\n } else if (panelLayout.includes(\"自由\") || panelLayout.includes(\"free-flowing\")) {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels in a free-flowing layout with varying sizes, each panel clearly separated with visible borders/frames. The entire page should show all panels together in one cohesive layout.`;\n } else if (panelLayout.includes(\"垂直\") || panelLayout.includes(\"vertical\")) {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels vertically stacked, each panel clearly separated with visible borders/frames. The entire page should show all panels together in one cohesive vertical layout.`;\n } else {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels with clear borders/frames between each panel, creating a cohesive multi-panel comic page layout. The entire page should show all panels together.`;\n }\n }\n\n console.log(\"=== Generating Comic Page ===\");\n console.log(`Page ${pageNumber}${isCoverPage ? \" (COVER PAGE)\" : \"\"} with ${panels.length} panels`);\n console.log(\"Character names from panels:\", Array.from(allCharacterNames));\n console.log(\"All characters in state:\", state?.characters?.map(c => ({ name: c.name, hasDescription: !!c.description })) || []);\n console.log(\"Character descriptions to include:\", characterDescriptions.map(c => c.name));\n console.log(\"Character References Count:\", characterDescriptions.length);\n if (characterDescriptions.length === 0) {\n console.warn(\"⚠️ WARNING: No character descriptions found! This may cause character inconsistency.\");\n console.log(\"Available characters in state:\", state?.characters?.map(c => c.name) || []);\n }\n console.log(\"Panel Layout:\", panelLayout);\n console.log(\"Final Prompt (first 500 chars):\", prompt.substring(0, 500));\n console.log(\"=================================\");\n\n const result = await generateImageWithVolcengine(\n prompt,\n \"1728x2304\",\n 1,\n undefined\n );\n\n if (!result.success || !result.imageUrl) {\n throw new Error(result.error || \"Failed to generate page image\");\n }\n\n return {\n success: true,\n pageNumber,\n imageUrl: result.imageUrl,\n panels: panels.map((panel, index) => ({\n panelNumber: index + 1,\n dialogue: panel.dialogue || \"\",\n narrative: panel.narrative || \"\",\n })),\n prompt,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"generation_error\",\n };\n }\n },\n {\n name: \"generate_comic_page\",\n description:\n \"Generate a complete multi-panel comic page with ALL panels in ONE image. IMPORTANT: Page 1 (pageNumber=1) is the COVER PAGE and should be designed as a striking, eye-catching cover showcasing main characters and story theme. It may have a special layout (e.g., single large panel or special cover design) different from regular pages. For regular pages (page 2 onwards), this tool generates the entire page layout with all panels arranged according to the specified panel layout style (grid, free-flowing, or vertical scroll). Each panel should have clear borders/frames. CRITICAL: You MUST provide characterReferences for EACH panel that contains characters. The tool automatically uses detailed character descriptions from state to ensure character consistency across all panels on the page. Returns the page image URL and all panel texts (dialogue/narrative).\",\n schema: z.object({\n pageNumber: z.number().describe(\"Page number in the comic\"),\n panels: z.array(\n z.object({\n panelNumber: z.number().describe(\"Panel number within the page\"),\n description: z.string().describe(\"Detailed visual description of this panel, including composition, characters, setting, and mood\"),\n dialogue: z.string().optional().describe(\"Dialogue text for this panel (if any)\"),\n narrative: z.string().optional().describe(\"Narrative text for this panel (if any)\"),\n characterReferences: z.array(\n z.object({\n name: z.string().describe(\"Character name\"),\n description: z.string().optional().describe(\"Character description (will be replaced with detailed description from state if available)\"),\n })\n ).optional().describe(\"Characters that appear in this panel\"),\n })\n ).min(1).describe(\"All panels on this page. The tool will generate ONE image containing all these panels arranged in the specified layout.\"),\n styleGuide: z.string().optional().describe(\"Overall art style guide to apply\"),\n }),\n }\n);\n\n/**\n * Generate panel with story text (backup tool)\n */\nexport const generatePanelWithStoryTool = tool(\n async ({ panelNumber, panelDescription, storyText, characterReferences, styleGuide }, context) => {\n try {\n const state = context?.state as MangaCreationState | undefined;\n const characterDescriptions: Array<{ name: string; description: string }> = [];\n\n if (characterReferences && characterReferences.length > 0) {\n for (const ref of characterReferences) {\n const stateCharacter = state?.characters.find((c) => c.name === ref.name);\n if (stateCharacter) {\n characterDescriptions.push({\n name: ref.name,\n description: stateCharacter.description,\n });\n } else if (ref.description) {\n characterDescriptions.push({\n name: ref.name,\n description: ref.description,\n });\n }\n }\n }\n\n let prompt = `This is a single panel from a multi-panel comic page. ${panelDescription}`;\n\n const comicStylePrompt = buildComicStylePrompt(state);\n if (comicStylePrompt) {\n prompt = `${comicStylePrompt}, ${prompt}`;\n }\n\n if (styleGuide) {\n prompt = `${styleGuide}, ${prompt}`;\n }\n\n if (characterDescriptions.length > 0) {\n const characterDetails = characterDescriptions\n .map((char) => `character \"${char.name}\": ${char.description}`)\n .join(\"; \");\n prompt = `${prompt}. CRITICAL: Maintain strict character consistency. Characters must match their detailed descriptions exactly: ${characterDetails}. Ensure facial features, hair style, clothing, body proportions, and all distinctive features remain identical across all panels.`;\n }\n\n console.log(\"=== Generating Panel with Character Descriptions ===\");\n console.log(\"Character References:\", JSON.stringify(characterDescriptions, null, 2));\n if (state) {\n console.log(\"State characters:\", state.characters.map(c => ({ \n name: c.name, \n hasDescription: !!c.description,\n descriptionLength: c.description?.length || 0\n })));\n }\n console.log(\"=================================\");\n\n const result = await generateImageWithVolcengine(\n prompt,\n \"1728x2304\",\n 1,\n undefined\n );\n\n if (!result.success || !result.imageUrl) {\n throw new Error(result.error || \"Failed to generate image\");\n }\n\n return {\n success: true,\n panelNumber,\n imageUrl: result.imageUrl,\n storyText: storyText || \"\",\n prompt,\n characterReferencesUsed: characterDescriptions.map((r) => ({\n name: r.name,\n description: r.description,\n })),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"generation_error\",\n };\n }\n },\n {\n name: \"generate_panel_with_story\",\n description:\n \"Generate a single panel from a multi-panel comic page (image + dialogue/narrative text). IMPORTANT: This generates ONE panel frame with clear borders, not a full page. Each panel is part of a larger multi-panel comic page layout. This tool will automatically use detailed character descriptions from state to ensure character consistency. Returns both the image URL and the text content. IMPORTANT: Always provide characterReferences parameter with ALL character names that appear in this panel, including their detailed descriptions from generate_character_design.\",\n schema: z.object({\n panelNumber: z.number().describe(\"Panel number in the sequence\"),\n panelDescription: z.string().describe(\"Detailed visual description of the panel, including composition, characters, setting, and mood\"),\n storyText: z.string().describe(\"The story paragraph/text that accompanies this panel image\"),\n characterReferences: z.array(\n z.object({\n name: z.string().describe(\"Character name (must match the name used in generate_character_design)\"),\n description: z.string().describe(\"Character description (will be replaced with detailed description from state if available)\"),\n })\n ).optional().describe(\"Character references that appear in this panel. The tool will automatically use detailed character descriptions from state to ensure consistency.\"),\n styleGuide: z.string().optional().describe(\"Overall art style guide to apply\"),\n }),\n }\n);\n\n","/**\n * AI Manga Creator Agent using AG-Kit Agents\n * \n * This agent creates multi-panel comics (多格漫画) by:\n * 1. Generating script with panel descriptions\n * 2. Creating detailed character designs with very specific descriptions\n * 3. Generating comic pages with character consistency using detailed text descriptions\n * 4. Each page includes both an image and accompanying story text\n */\n\nimport { Agent, OpenAIProvider, ControlFlowDecision } from \"@cloudbase/agent-agents\";\nimport { MangaCreationState } from \"./types\";\nimport {\n generateScriptTool,\n generateCharacterDesignTool,\n generateComicPageTool,\n generatePanelImageTool,\n generatePanelWithStoryTool,\n} from \"./tools\";\n\n/**\n * Create Manga Creator Agent\n */\nexport function createMangaCreatorAgent(): Agent<MangaCreationState> {\n if (!process.env.OPENAI_API_KEY) {\n throw new Error(\"OPENAI_API_KEY is required\");\n }\n\n if (!process.env.VOLCENGINE_COOKIE) {\n throw new Error(\"VOLCENGINE_COOKIE is required. Please set it in your environment variables.\");\n }\n\n const provider = new OpenAIProvider({\n apiKey: process.env.OPENAI_API_KEY!,\n defaultModel: process.env.OPENAI_MODEL || \"gpt-4o\",\n baseURL: process.env.OPENAI_BASE_URL,\n });\n\n return new Agent<MangaCreationState>({\n name: \"manga-creator-agent\",\n description: \"Creates multi-panel comics (多格漫画) from story ideas\",\n model: provider,\n stateType: MangaCreationState,\n instructions: `You are a professional comic book creator assistant. Your job is to create multi-panel comics (多格漫画) from story ideas, where each panel is part of a cohesive comic page.\n\n**Workflow:**\n1. **Immediate style recommendation**: IMMEDIATELY after receiving a story idea, analyze the story characteristics and use generate_script tool to recommend appropriate comic style parameters. The recommendation should be based on:\n - Story theme and genre (action, romance, horror, sci-fi, comedy, etc.)\n - Cultural context and setting\n - Target audience\n - Narrative tone\n - Visual requirements\n \n **CRITICAL**: You MUST provide ALL style parameters - do not leave any empty. If the user's input is in Chinese, generate all parameters in Chinese. If in English, use English.\n \n Recommend specific parameters including:\n - Cultural origin (Japanese Manga/日本漫画, American Comics/美国漫画, Korean Manhwa/韩国漫画, Chinese Manhua/中国漫画, European Bande Dessinée/欧洲漫画)\n - Target audience (Shōnen/少年漫画, Shōjo/少女漫画, Seinen/青年漫画, Josei/女性漫画, Kodomo/儿童漫画)\n - Art style (Realistic/写实风格, Cartoonish/Exaggerated/卡通/夸张风格, Abstract/Experimental/抽象/实验风格)\n - Theme type (Action/Adventure/动作/冒险, Romance/浪漫, Horror/Suspense/恐怖/悬疑, Sci-Fi/Fantasy/科幻/奇幻, Comedy/喜剧)\n - Visual adjustments (line style/线条风格, color scheme/色彩方案, panel layout/面板布局)\n - Character proportions (realistic/写实, chibi/Q版, exaggerated/夸张) and background complexity (minimalist/简约, detailed/详细)\n - Text integration style (dialogue bubbles/对话气泡, narrative boxes/叙述框)\n\n2. **Wait for user confirmation**: After calling generate_script, wait for user to confirm or adjust the recommended comic style parameters.\n\n3. **Generate script**: Once parameters are confirmed, generate a structured comic script with pages and panels. \n - **IMPORTANT: Page 1 is the COVER PAGE**. The cover page should be designed as a striking, eye-catching cover that showcases the main characters and story theme. It may have a different layout than regular pages (e.g., single large panel, or special cover design).\n - For regular pages (page 2 onwards), each panel should have:\n - A detailed visual description for image generation that matches the confirmed comic style\n - Dialogue and/or narrative text\n - Panel composition and layout information\n - When describing panels, emphasize that each is a separate frame/panel in a multi-panel layout\n\n4. **Design characters**: Use generate_character_design tool to create VERY DETAILED character descriptions that match the confirmed comic style. The descriptions must include:\n - **Background context**: Country/region, time period/era, cultural setting, historical context\n - Exact physical appearance (hair color, style, length, eye color, facial features, body type, height) matching the character proportion style\n - Detailed clothing description (colors, patterns, styles, accessories) matching the color scheme and historical/cultural period\n - Distinctive features and characteristics\n - These detailed descriptions will be used in ALL subsequent panel generation prompts to maintain character consistency\n - **CRITICAL**: You MUST call generate_character_design tool BEFORE generating any comic pages. Character designs are essential for maintaining consistency across all panels.\n\n5. **Generate comic pages**: For each page in the script:\n - **IMPORTANT**: Only generate pages AFTER character designs have been confirmed by the user. Do not skip character design step.\n - **Page 1 (Cover Page)**: Use generate_comic_page tool with pageNumber=1. The cover page should be designed as a striking, eye-catching cover showcasing main characters and story theme. It may have a special layout (e.g., single large panel or special cover design) different from regular pages.\n - **Regular pages (page 2 onwards)**: Use generate_comic_page tool to generate the ENTIRE page with ALL panels on that page in ONE image\n - IMPORTANT: Generate the complete multi-panel comic page layout with all panels arranged according to the panel layout style\n - Provide all panels from the page with their descriptions, dialogue, and character references\n - The tool will generate ONE image containing all panels of the page, arranged in the specified layout (grid, free-flowing, or vertical scroll)\n - The tool returns the page image URL and all panel texts\n - Display each page as: [Page Image] followed by all panel texts\n\n6. **Final output**: After all panels are generated, output the complete comic in Markdown format with all images and text combined, maintaining the comic book layout.\n\n**Key Principles:**\n- Each panel is part of a multi-panel comic page (多格漫画)\n- Keep the story engaging and visually interesting\n- Ensure character consistency across all panels\n- Create clear, readable images that tell the story\n- Maintain a consistent comic style throughout based on confirmed parameters\n- Dialogue and narrative text should complement the images naturally\n- Follow comic book conventions: panel layout, dialogue bubbles, sound effects, etc.\n\n**Output Format:**\n- During generation: Show each panel as it's created (image + story paragraph)\n- Final output: Use Markdown format with all images and story text combined into a complete picture book, like:\n \\`\\`\\`markdown\n # Story Title\n \n \n \n Story paragraph for panel 1...\n \n \n \n Story paragraph for panel 2...\n \n ...\n \\`\\`\\``,\n modelSettings: {\n temperature: 0.8,\n maxTokens: 16000,\n },\n tools: [\n generateScriptTool,\n generateCharacterDesignTool,\n generateComicPageTool,\n generatePanelImageTool, // Keep as backup\n generatePanelWithStoryTool, // Keep as backup\n ],\n controlFlow: {\n maxSteps: 100,\n errorRetryLimit: 0,\n customHandler: {\n async handleNextStep(_context: any, state?: MangaCreationState, userMessage?: string) {\n if (!state) {\n return { action: \"continue\", nextStep: null } as const;\n }\n\n // Set storyIdea from user message if not already set and this is not a confirmation message\n if (userMessage && !state.storyIdea && !userMessage.includes('\"userConfirmed\"') && !userMessage.includes('\"type\"')) {\n state.storyIdea = userMessage;\n }\n\n const scriptParams = state.scriptParams;\n const characterDesignParams = state.characterDesignParams;\n\n // If user message contains confirmed script parameters, update state\n if (userMessage && scriptParams && !scriptParams.userConfirmed) {\n try {\n const confirmedParams = JSON.parse(userMessage);\n if (confirmedParams.userConfirmed && confirmedParams.type === \"script_params\") {\n // Update state with confirmed parameters\n if (state.scriptParams) {\n state.scriptParams.userConfirmed = true;\n state.scriptParams.culturalOrigin = confirmedParams.culturalOrigin;\n state.scriptParams.targetAudience = confirmedParams.targetAudience;\n state.scriptParams.artStyle = confirmedParams.artStyle;\n state.scriptParams.themeType = confirmedParams.themeType;\n state.scriptParams.lineStyle = confirmedParams.lineStyle;\n state.scriptParams.colorScheme = confirmedParams.colorScheme;\n state.scriptParams.panelLayout = confirmedParams.panelLayout;\n state.scriptParams.characterProportion = confirmedParams.characterProportion;\n state.scriptParams.backgroundComplexity = confirmedParams.backgroundComplexity;\n state.scriptParams.textIntegration = confirmedParams.textIntegration;\n state.scriptParams.numPages = confirmedParams.numPages;\n }\n // Continue execution\n return { action: \"continue\", nextStep: null } as const;\n }\n } catch {\n // If parsing fails, treat as regular message and continue\n }\n }\n\n // If user message contains confirmed character design parameters, update state\n if (userMessage && characterDesignParams && !characterDesignParams.userConfirmed) {\n try {\n const confirmedParams = JSON.parse(userMessage);\n if (confirmedParams.userConfirmed && confirmedParams.type === \"character_design\") {\n // Update state with confirmed character designs\n if (state.characterDesignParams && confirmedParams.characters) {\n state.characterDesignParams.userConfirmed = true;\n // Update characters in state with confirmed designs\n for (const char of confirmedParams.characters) {\n const existingIndex = state.characters.findIndex((c) => c.name === char.name);\n if (existingIndex >= 0) {\n state.characters[existingIndex].description = char.description;\n } else {\n state.characters.push({\n name: char.name,\n description: char.description,\n });\n }\n }\n }\n // Continue execution\n return { action: \"continue\", nextStep: null } as const;\n }\n } catch {\n // If parsing fails, treat as regular message and continue\n }\n }\n\n // If script parameters are proposed but not confirmed, wait for user\n if (scriptParams && !scriptParams.userConfirmed) {\n return {\n action: \"interrupt\",\n reason: \"waiting_for_script_params_confirmation\",\n payload: {\n storyIdea: scriptParams.storyIdea,\n culturalOrigin: scriptParams.culturalOrigin || \"\",\n targetAudience: scriptParams.targetAudience || \"\",\n artStyle: scriptParams.artStyle || \"\",\n themeType: scriptParams.themeType || \"\",\n lineStyle: scriptParams.lineStyle || \"\",\n colorScheme: scriptParams.colorScheme || \"\",\n panelLayout: scriptParams.panelLayout || \"\",\n characterProportion: scriptParams.characterProportion || \"\",\n backgroundComplexity: scriptParams.backgroundComplexity || \"\",\n textIntegration: scriptParams.textIntegration || \"\",\n numPages: scriptParams.numPages || 4,\n },\n } as ControlFlowDecision;\n }\n\n // If character design parameters are proposed but not confirmed, wait for user\n if (characterDesignParams && !characterDesignParams.userConfirmed) {\n return {\n action: \"interrupt\",\n reason: \"waiting_for_character_design_confirmation\",\n payload: {\n characters: characterDesignParams.characters,\n },\n } as ControlFlowDecision;\n }\n\n return { action: \"continue\", nextStep: null } as const;\n },\n\n async handleToolCall(toolCall: any, _context: any, state?: MangaCreationState) {\n // Tool execution is handled by the tool handler itself\n return { action: \"execute\", immediate: true } as const;\n },\n\n async handleError(error: any) {\n return { action: \"abort\", reason: error.message } as const;\n },\n },\n },\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/comic-style.ts","../src/volcengine-api.ts","../src/tools.ts","../src/agent.ts"],"names":["lines","tool","z","OpenAIProvider","Agent"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Type definitions for Manga Creator Agent\n */\n\nexport class MangaCreationState {\n storyIdea: string = \"\";\n scriptParams?: {\n storyIdea: string;\n // Comic style parameters\n culturalOrigin?: string; // e.g., \"Japanese Manga\", \"American Comics\", \"Korean Manhwa\", \"Chinese Manhua\", \"European Bande Dessinée\"\n targetAudience?: string; // e.g., \"Shōnen\", \"Shōjo\", \"Seinen\", \"Josei\", \"Kodomo\"\n artStyle?: string; // e.g., \"Realistic\", \"Cartoonish/Exaggerated\", \"Abstract/Experimental\"\n themeType?: string; // e.g., \"Action/Adventure\", \"Romance\", \"Horror/Suspense\", \"Sci-Fi/Fantasy\", \"Comedy\"\n // Visual adjustments\n lineStyle?: string; // e.g., \"thick lines\", \"thin lines\", \"smooth\", \"ink brush\"\n colorScheme?: string; // e.g., \"black and white\", \"monochrome\", \"full color\", \"vibrant\", \"muted\"\n panelLayout?: string; // e.g., \"grid format\", \"free-flowing\", \"vertical scroll\"\n // Character and element adjustments\n characterProportion?: string; // e.g., \"realistic\", \"chibi\", \"exaggerated\"\n backgroundComplexity?: string; // e.g., \"minimalist\", \"detailed\"\n // Narrative adjustments\n textIntegration?: string; // e.g., \"dialogue bubbles\", \"narrative boxes\"\n // Basic parameters\n numPages?: number;\n userConfirmed?: boolean;\n };\n characterDesignParams?: {\n characters: Array<{\n name: string;\n description: string;\n }>;\n userConfirmed?: boolean;\n };\n script: {\n title: string;\n pages: Array<{\n pageNumber: number;\n panels: Array<{\n panelNumber: number;\n description: string;\n dialogue?: string;\n characters?: string[];\n }>;\n }>;\n } | null = null;\n characters: Array<{\n name: string;\n description: string;\n }> = [];\n styleGuide: string = \"\";\n generatedPanels: Array<{\n pageNumber: number;\n panelNumber: number;\n imageUrl: string;\n }> = [];\n completedPages: Array<{\n pageNumber: number;\n imageUrl: string;\n }> = [];\n\n [key: string]: unknown;\n}\n\n","/**\n * Comic style helper functions\n */\n\nimport { MangaCreationState } from \"./types\";\n\n/**\n * Build comic style prompt from confirmed script parameters\n */\nexport function buildComicStylePrompt(state: MangaCreationState | undefined): string {\n if (!state?.scriptParams?.userConfirmed) {\n return \"\";\n }\n\n const params = state.scriptParams;\n const styleParts: string[] = [];\n\n // Cultural origin and target audience\n if (params.culturalOrigin) {\n styleParts.push(`${params.culturalOrigin} style`);\n }\n if (params.targetAudience) {\n styleParts.push(`target audience: ${params.targetAudience}`);\n }\n\n // Art style\n if (params.artStyle) {\n styleParts.push(`art style: ${params.artStyle}`);\n }\n\n // Theme type\n if (params.themeType) {\n styleParts.push(`theme: ${params.themeType}`);\n }\n\n // Visual adjustments\n if (params.lineStyle) {\n styleParts.push(`line style: ${params.lineStyle}`);\n }\n if (params.colorScheme) {\n styleParts.push(`color scheme: ${params.colorScheme}`);\n }\n if (params.panelLayout) {\n styleParts.push(`panel layout: ${params.panelLayout}`);\n }\n\n // Character and element adjustments\n if (params.characterProportion) {\n styleParts.push(`character proportion: ${params.characterProportion}`);\n }\n if (params.backgroundComplexity) {\n styleParts.push(`background: ${params.backgroundComplexity}`);\n }\n\n // Text integration\n if (params.textIntegration) {\n styleParts.push(`text integration: ${params.textIntegration}`);\n }\n\n if (styleParts.length === 0) {\n return \"\";\n }\n\n // Add explicit multi-panel comic format description\n let panelLayoutDesc = \"\";\n if (params.panelLayout) {\n // Translate common panel layout terms to explicit descriptions\n const layoutMap: Record<string, string> = {\n \"网格格式\": \"grid layout with multiple panels arranged in rows and columns, each panel is a separate frame with borders\",\n \"grid format\": \"grid layout with multiple panels arranged in rows and columns, each panel is a separate frame with borders\",\n \"自由流动\": \"free-flowing layout with multiple panels of varying sizes, each panel is a separate frame\",\n \"free-flowing\": \"free-flowing layout with multiple panels of varying sizes, each panel is a separate frame\",\n \"垂直滚动\": \"vertical scroll layout with multiple panels stacked vertically, each panel is a separate frame\",\n \"vertical scroll\": \"vertical scroll layout with multiple panels stacked vertically, each panel is a separate frame\",\n };\n panelLayoutDesc = layoutMap[params.panelLayout] || `panel layout: ${params.panelLayout}`;\n } else {\n panelLayoutDesc = \"grid layout with multiple panels arranged in rows and columns\";\n }\n\n return `Multi-panel comic format (多格漫画): ${styleParts.join(\", \")}. ${panelLayoutDesc}.`;\n}\n\n","/**\n * Volcengine Seedream API integration\n */\n\n/**\n * Parse SSE (Server-Sent Events) stream\n */\nexport async function* parseSSEStream(\n stream: ReadableStream<Uint8Array>\n): AsyncGenerator<{ event: string; data: string }> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let currentEvent = \"message\";\n let currentData = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n // Process remaining buffer before breaking\n if (buffer.trim()) {\n const lines = buffer.split(\"\\n\");\n for (const line of lines) {\n if (line.startsWith(\"event:\")) {\n currentEvent = line.slice(6).trim();\n } else if (line.startsWith(\"data:\")) {\n currentData = line.slice(5).trim();\n } else if (line === \"\" && currentData) {\n yield { event: currentEvent, data: currentData };\n currentData = \"\";\n currentEvent = \"message\";\n }\n }\n // Yield any remaining data\n if (currentData) {\n yield { event: currentEvent, data: currentData };\n }\n }\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n // Keep the last incomplete line in buffer\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"event:\")) {\n currentEvent = line.slice(6).trim();\n } else if (line.startsWith(\"data:\")) {\n // If we have previous data, yield it first\n if (currentData) {\n yield { event: currentEvent, data: currentData };\n currentData = \"\";\n currentEvent = \"message\";\n }\n currentData = line.slice(5).trim();\n } else if (line === \"\") {\n // Empty line indicates end of event\n if (currentData) {\n yield { event: currentEvent, data: currentData };\n currentData = \"\";\n currentEvent = \"message\";\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n/**\n * Generate image using Volcengine Seedream API with SSE streaming\n */\nexport async function generateImageWithVolcengine(\n prompt: string,\n size: string = \"2048x2048\",\n imageCount: number = 1,\n referenceImages?: Array<{ Url: string; BucketName?: string; ObjectKey?: string }>\n): Promise<{ success: boolean; imageUrl?: string; error?: string }> {\n try {\n const cookie = process.env.VOLCENGINE_COOKIE;\n if (!cookie) {\n throw new Error(\"VOLCENGINE_COOKIE environment variable is not set\");\n }\n\n // Extract tokens from cookie\n const csrfTokenMatch = cookie.match(/csrfToken=([^;]+)/);\n const csrfToken = csrfTokenMatch ? csrfTokenMatch[1] : \"\";\n const webIdMatch = cookie.match(/x-web-id[^=]*=([^;]+)/);\n const webId = webIdMatch ? webIdMatch[1] : \"\";\n\n // Prepare reference images for API\n const imagesForAPI: Array<{\n Url: string;\n BucketName?: string;\n ObjectKey?: string;\n }> = [];\n\n if (referenceImages && referenceImages.length > 0) {\n for (const refImg of referenceImages) {\n const urlMatch = refImg.Url.match(/https:\\/\\/([^\\.]+)\\.tos-cn-beijing\\.volces\\.com\\/([^?]+)/);\n if (urlMatch) {\n const bucketName = urlMatch[1];\n const objectKey = urlMatch[2];\n imagesForAPI.push({\n Url: refImg.Url,\n BucketName: refImg.BucketName || bucketName,\n ObjectKey: refImg.ObjectKey || objectKey,\n });\n console.log(` Added image - BucketName: ${bucketName}, ObjectKey: ${objectKey}`);\n } else {\n const altMatch = refImg.Url.match(/https:\\/\\/[^\\/]+\\/([^\\/]+)\\/([^?]+)/);\n if (altMatch) {\n imagesForAPI.push({\n Url: refImg.Url,\n BucketName: refImg.BucketName || altMatch[1],\n ObjectKey: refImg.ObjectKey || altMatch[2],\n });\n } else {\n console.warn(` Could not parse URL: ${refImg.Url}`);\n }\n }\n }\n }\n\n const requestBody: {\n ProjectName: string;\n From: string;\n Model: string;\n EndpointId: string;\n Type: \"normal\" | \"group\";\n Images: Array<{ Url: string; BucketName?: string; ObjectKey?: string }>;\n Prompt: string;\n Size: string;\n ImageCount?: number;\n ImageSequence?: number;\n Watermark: boolean;\n Seed: number;\n } = {\n ProjectName: \"\",\n From: \"pc\",\n Model: \"doubao-seedream-4-0\",\n EndpointId: \"doubao-seedream-4-0-250828\",\n Type: imagesForAPI.length > 0 ? \"group\" : \"normal\",\n Images: imagesForAPI,\n Prompt: prompt,\n Size: size,\n Watermark: false,\n Seed: -1,\n };\n\n if (imagesForAPI.length > 0) {\n requestBody.ImageSequence = 1;\n } else {\n requestBody.ImageCount = imageCount;\n }\n\n console.log(\"=== Volcengine API Request Debug ===\");\n console.log(\"Reference Images Input:\", JSON.stringify(referenceImages, null, 2));\n console.log(\"Images For API:\", JSON.stringify(imagesForAPI, null, 2));\n console.log(\"Request Body:\", JSON.stringify(requestBody, null, 2));\n console.log(\"Prompt:\", prompt);\n console.log(\"====================================\");\n\n const headers: Record<string, string> = {\n Accept: \"*/*\",\n \"Accept-Language\": \"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Content-Type\": \"application/json\",\n Cookie: cookie,\n Origin: \"https://www.volcengine.com\",\n \"Pragma\": \"no-cache\",\n Referer: \"https://www.volcengine.com/\",\n \"Sec-Fetch-Dest\": \"empty\",\n \"Sec-Fetch-Mode\": \"cors\",\n \"Sec-Fetch-Site\": \"same-site\",\n \"User-Agent\":\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36\",\n \"sec-ch-ua\": '\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"macOS\"',\n };\n\n if (csrfToken) {\n headers[\"X-Csrf-Token\"] = csrfToken;\n }\n if (webId) {\n headers[\"x-web-id\"] = webId;\n }\n\n console.log(\"=== Sending Request to API ===\");\n console.log(\"URL:\", \"https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024/CreateImageGeneration\");\n console.log(\"Request Body String:\", JSON.stringify(requestBody));\n \n const response = await fetch(\n \"https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024/CreateImageGeneration\",\n {\n method: \"POST\",\n headers,\n body: JSON.stringify(requestBody),\n }\n );\n\n console.log(\"Response Status:\", response.status);\n if (!response.ok) {\n const clonedResponse = response.clone();\n const errorText = await clonedResponse.text();\n console.error(\"Response Error:\", errorText);\n throw new Error(\n `Volcengine API error: ${response.status} ${response.statusText} - ${errorText}`\n );\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n // Parse SSE stream to get resource_id\n let resourceId: string | null = null;\n let reqId: string | null = null;\n let hasError = false;\n let errorMessage = \"\";\n\n for await (const sseEvent of parseSSEStream(response.body)) {\n console.log(\"SSE Event:\", sseEvent.event, \"Data:\", sseEvent.data?.substring(0, 200));\n\n if (sseEvent.event === \"error\") {\n try {\n const errorData = JSON.parse(sseEvent.data);\n hasError = true;\n errorMessage = errorData.msg || errorData.message || \"Image generation failed due to content restrictions\";\n console.error(\"SSE Error Event:\", errorData);\n \n if (errorData.type === \"block\" || errorData.code === 500) {\n return {\n success: false,\n error: errorMessage,\n };\n }\n } catch (parseError) {\n console.warn(\"Failed to parse error SSE data:\", parseError);\n hasError = true;\n errorMessage = \"Image generation failed\";\n }\n }\n\n if (sseEvent.event === \"image-generation\" || sseEvent.event === \"start\") {\n try {\n const data = JSON.parse(sseEvent.data);\n \n if (data.resource_id) {\n resourceId = data.resource_id;\n console.log(\"Found resource_id:\", resourceId);\n }\n \n if (data.req_id) {\n reqId = data.req_id;\n }\n \n if (data.status === \"finish\" || data.status === \"end\") {\n if (resourceId) {\n break;\n }\n }\n } catch (parseError) {\n console.warn(\"Failed to parse SSE data:\", parseError, \"Raw data:\", sseEvent.data);\n }\n } else if (sseEvent.event === \"end\") {\n if (resourceId) {\n break;\n }\n }\n }\n\n if (hasError && !resourceId) {\n return {\n success: false,\n error: errorMessage || \"Image generation failed\",\n };\n }\n\n if (!resourceId) {\n console.warn(\"No resource_id found in SSE stream, trying to find latest record...\");\n await new Promise((resolve) => setTimeout(resolve, 3000));\n const fallbackResult = await findLatestImageRecord(prompt, reqId || undefined);\n if (fallbackResult.success && fallbackResult.imageUrl) {\n return fallbackResult;\n }\n return {\n success: false,\n error: fallbackResult.error || \"Failed to get resource_id from SSE stream and could not find matching record\",\n };\n }\n\n await new Promise((resolve) => setTimeout(resolve, 2000));\n const imageResult = await queryImageGenerationRecords(resourceId);\n if (!imageResult.success || !imageResult.imageUrl) {\n return {\n success: false,\n error: imageResult.error || \"Failed to query image generation records\",\n };\n }\n\n return {\n success: true,\n imageUrl: imageResult.imageUrl,\n };\n } catch (error) {\n console.error(\"Error generating image with Volcengine:\", error);\n return {\n success: false,\n error:\n error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Find the latest image record (fallback when resource_id is not available)\n */\nasync function findLatestImageRecord(\n prompt: string,\n reqId?: string\n): Promise<{ success: boolean; imageUrl?: string; error?: string }> {\n try {\n const cookie = process.env.VOLCENGINE_COOKIE;\n if (!cookie) {\n throw new Error(\"VOLCENGINE_COOKIE environment variable is not set\");\n }\n\n const csrfTokenMatch = cookie.match(/csrfToken=([^;]+)/);\n const csrfToken = csrfTokenMatch ? csrfTokenMatch[1] : \"\";\n\n const headers: Record<string, string> = {\n Accept: \"application/json, text/plain, */*\",\n \"Accept-Language\": \"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Content-Type\": \"application/json\",\n Cookie: cookie,\n Origin: \"https://exp.volcengine.com\",\n \"Pragma\": \"no-cache\",\n Referer: \"https://exp.volcengine.com/\",\n \"Sec-Fetch-Dest\": \"empty\",\n \"Sec-Fetch-Mode\": \"cors\",\n \"Sec-Fetch-Site\": \"same-site\",\n \"User-Agent\":\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36\",\n \"sec-ch-ua\": '\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"macOS\"',\n };\n\n if (csrfToken) {\n headers[\"X-Csrf-Token\"] = csrfToken;\n }\n\n const response = await fetch(\n \"https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024-01-29/ListImageGenerationRecords?\",\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n PageIndex: 1,\n PageSize: 5,\n }),\n }\n );\n\n if (!response.ok) {\n return {\n success: false,\n error: `List API error: ${response.status}`,\n };\n }\n\n const result = (await response.json()) as {\n Result?: {\n Items?: Array<{\n Sid?: string;\n Status?: string;\n Prompt?: string;\n Output?: {\n Items?: Array<{\n Url?: string;\n }>;\n };\n CreateTime?: string;\n }>;\n };\n };\n\n if (result.Result?.Items) {\n const sortedItems = result.Result.Items.sort((a, b) => {\n const timeA = a.CreateTime ? new Date(a.CreateTime).getTime() : 0;\n const timeB = b.CreateTime ? new Date(b.CreateTime).getTime() : 0;\n return timeB - timeA;\n });\n \n const matchingItem = sortedItems.find(\n (item) => item.Status === \"Success\" && item.Output?.Items && item.Output.Items.length > 0\n );\n \n if (!matchingItem) {\n return {\n success: false,\n error: \"No successful image record found in recent history\",\n };\n }\n \n if (!reqId) {\n return {\n success: false,\n error: \"Cannot reliably match image without request ID. Generation may have failed.\",\n };\n }\n \n return {\n success: false,\n error: \"Cannot verify image match. The generation request may have failed or been blocked.\",\n };\n }\n\n return {\n success: false,\n error: \"No successful image record found in recent history\",\n };\n } catch (error) {\n console.error(\"Error finding latest image record:\", error);\n return {\n success: false,\n error:\n error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Query image generation records to get renderable image URLs\n */\nasync function queryImageGenerationRecords(\n resourceId: string\n): Promise<{ success: boolean; imageUrl?: string; error?: string }> {\n try {\n const cookie = process.env.VOLCENGINE_COOKIE;\n if (!cookie) {\n throw new Error(\"VOLCENGINE_COOKIE environment variable is not set\");\n }\n\n const csrfTokenMatch = cookie.match(/csrfToken=([^;]+)/);\n const csrfToken = csrfTokenMatch ? csrfTokenMatch[1] : \"\";\n\n const headers: Record<string, string> = {\n Accept: \"application/json, text/plain, */*\",\n \"Accept-Language\": \"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Content-Type\": \"application/json\",\n Cookie: cookie,\n Origin: \"https://exp.volcengine.com\",\n \"Pragma\": \"no-cache\",\n Referer: \"https://exp.volcengine.com/\",\n \"Sec-Fetch-Dest\": \"empty\",\n \"Sec-Fetch-Mode\": \"cors\",\n \"Sec-Fetch-Site\": \"same-site\",\n \"User-Agent\":\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36\",\n \"sec-ch-ua\": '\"Google Chrome\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"macOS\"',\n };\n\n if (csrfToken) {\n headers[\"X-Csrf-Token\"] = csrfToken;\n }\n\n for (let page = 1; page <= 5; page++) {\n const pageResponse = await fetch(\n `https://ml-platform-api.console.volcengine.com/ark/bff/api_seedream/cn-beijing/2024-01-29/ListImageGenerationRecords?`,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n PageIndex: page,\n PageSize: 10,\n }),\n }\n );\n\n if (!pageResponse.ok) {\n continue;\n }\n\n const pageResult = (await pageResponse.json()) as {\n Result?: {\n Items?: Array<{\n Sid?: string;\n Status?: string;\n Output?: {\n Items?: Array<{\n Url?: string;\n }>;\n };\n }>;\n Total?: number;\n };\n };\n\n if (pageResult.Result?.Items) {\n for (const item of pageResult.Result.Items) {\n if (item.Sid === resourceId && item.Status === \"success\") {\n const outputItems = item.Output?.Items || [];\n if (outputItems.length > 0 && outputItems[0].Url) {\n return {\n success: true,\n imageUrl: outputItems[0].Url,\n };\n }\n }\n }\n }\n\n if (pageResult.Result?.Total && page > Math.ceil(pageResult.Result.Total / 10)) {\n break;\n }\n }\n\n return {\n success: false,\n error: \"Image record not found or not yet available\",\n };\n } catch (error) {\n console.error(\"Error querying image generation records:\", error);\n return {\n success: false,\n error:\n error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n","/**\n * Manga Creator Agent Tools\n */\n\nimport { tool } from \"@cloudbase/agent-tools\";\nimport { z } from \"zod\";\nimport { MangaCreationState } from \"./types\";\nimport { buildComicStylePrompt } from \"./comic-style\";\nimport { generateImageWithVolcengine } from \"./volcengine-api\";\n\n/**\n * Generate script with panel descriptions\n */\nexport const generateScriptTool = tool(\n async ({ \n culturalOrigin, \n targetAudience, \n artStyle, \n themeType,\n lineStyle,\n colorScheme,\n panelLayout,\n characterProportion,\n backgroundComplexity,\n textIntegration,\n numPages \n }, context) => {\n const state = context?.state as MangaCreationState | undefined;\n const storyIdea = state?.storyIdea || \"\";\n \n if (state) {\n state.scriptParams = {\n storyIdea,\n culturalOrigin,\n targetAudience,\n artStyle,\n themeType,\n lineStyle,\n colorScheme,\n panelLayout,\n characterProportion,\n backgroundComplexity,\n textIntegration,\n numPages: numPages || 4,\n userConfirmed: false,\n };\n }\n\n return {\n message: \"Comic style parameters proposed based on story analysis. Waiting for user confirmation or adjustments.\",\n status: \"pending_confirmation\",\n };\n },\n {\n name: \"generate_script\",\n description:\n \"IMMEDIATELY analyze the story idea (from the conversation context) and recommend appropriate comic style parameters. Based on the story characteristics (theme, genre, tone, cultural context), recommend specific comic style parameters. IMPORTANT: You MUST provide ALL style parameters based on the story analysis - do not leave them empty. If the user's input is in Chinese, generate all parameters in Chinese. If in English, use English. After calling this tool, explain your recommendations in the response. The tool will pause for user confirmation before proceeding to script generation.\",\n schema: z.object({\n culturalOrigin: z.string().min(1).describe(\"Cultural origin based on story analysis. REQUIRED. Examples: Japanese Manga (日本漫画), American Comics (美国漫画), Korean Manhwa (韩国漫画), Chinese Manhua (中国漫画), European Bande Dessinée (欧洲漫画). Use the language that matches the user's input.\"),\n targetAudience: z.string().min(1).describe(\"Target audience based on story analysis. REQUIRED. Examples: Shōnen (少年漫画), Shōjo (少女漫画), Seinen (青年漫画), Josei (女性漫画), Kodomo (儿童漫画). Use the language that matches the user's input.\"),\n artStyle: z.string().min(1).describe(\"Art style based on story analysis. REQUIRED. Examples: Realistic (写实风格), Cartoonish/Exaggerated (卡通/夸张风格), Abstract/Experimental (抽象/实验风格). Use the language that matches the user's input.\"),\n themeType: z.string().min(1).describe(\"Theme type based on story analysis. REQUIRED. Examples: Action/Adventure (动作/冒险), Romance (浪漫), Horror/Suspense (恐怖/悬疑), Sci-Fi/Fantasy (科幻/奇幻), Comedy (喜剧). Use the language that matches the user's input.\"),\n lineStyle: z.string().min(1).describe(\"Line style based on story analysis. REQUIRED. Examples: thick lines (粗线条), thin lines (细线条), smooth (流畅), ink brush (水墨笔触), digital pen (数字笔). Use the language that matches the user's input.\"),\n colorScheme: z.string().min(1).describe(\"Color scheme based on story analysis. REQUIRED. Examples: black and white (黑白), monochrome (单色), full color (全彩), vibrant (鲜艳), muted (柔和). Use the language that matches the user's input.\"),\n panelLayout: z.string().min(1).describe(\"Panel layout based on story analysis. REQUIRED. Examples: grid format (网格格式), free-flowing (自由流动), vertical scroll (垂直滚动). Use the language that matches the user's input.\"),\n characterProportion: z.string().min(1).describe(\"Character proportion based on story analysis. REQUIRED. Examples: realistic (写实), chibi (Q版), exaggerated (夸张). Use the language that matches the user's input.\"),\n backgroundComplexity: z.string().min(1).describe(\"Background complexity based on story analysis. REQUIRED. Examples: minimalist (简约), detailed (详细). Use the language that matches the user's input.\"),\n textIntegration: z.string().min(1).describe(\"Text integration based on story analysis. REQUIRED. Examples: dialogue bubbles (对话气泡), narrative boxes (叙述框). Use the language that matches the user's input.\"),\n numPages: z.number().int().min(1).max(10).optional().describe(\"Number of pages to generate (default: 4)\"),\n }),\n }\n);\n\n/**\n * Generate character design descriptions\n */\nexport const generateCharacterDesignTool = tool(\n async ({ characters }, context) => {\n if (context?.state) {\n const state = context.state as MangaCreationState;\n state.characterDesignParams = {\n characters: characters.map(c => ({\n name: c.name,\n description: c.description,\n })),\n userConfirmed: false,\n };\n \n // Also immediately update state.characters with the proposed designs\n for (const char of characters) {\n const existingIndex = state.characters.findIndex((c) => c.name === char.name);\n if (existingIndex >= 0) {\n state.characters[existingIndex].description = char.description;\n } else {\n state.characters.push({\n name: char.name,\n description: char.description,\n });\n }\n }\n \n console.log(\"=== Character Design Tool Called ===\");\n console.log(\"Characters proposed:\", characters.map(c => c.name));\n console.log(\"State.characters updated:\", state.characters);\n console.log(\"===================================\");\n }\n \n return {\n message: \"Character designs proposed. Waiting for user confirmation or adjustments.\",\n status: \"pending_confirmation\",\n };\n },\n {\n name: \"generate_character_design\",\n description:\n \"Generate VERY DETAILED character design descriptions. Each description must include: background context (country/region, time period/era, cultural setting, historical context), exact physical appearance (hair color, style, length, eye color, facial features, body type, height), detailed clothing (colors, patterns, styles, accessories) matching the historical/cultural period, and distinctive features. These descriptions will be used in ALL panel generation prompts to ensure character consistency.\",\n schema: z.object({\n characters: z.array(\n z.object({\n name: z.string().describe(\"Character name\"),\n description: z.string().describe(\n \"VERY DETAILED character description including: (1) Background context: country/region, time period/era, cultural setting, historical context; (2) Exact physical appearance: hair color, style, length, eye color, facial features, body type, height; (3) Detailed clothing description: colors, patterns, styles, accessories that match the historical/cultural period; (4) Distinctive features and characteristics. This description will be used in all panel generation prompts.\"\n ),\n })\n ).describe(\"List of characters with detailed descriptions\"),\n }),\n }\n);\n\n/**\n * Generate panel image using Volcengine Seedream API\n */\nexport const generatePanelImageTool = tool(\n async ({ panelDescription, characterReferences, styleGuide }, context) => {\n try {\n const state = context?.state as MangaCreationState | undefined;\n let prompt = `This is a single panel from a multi-panel comic page. ${panelDescription}`;\n\n const comicStylePrompt = buildComicStylePrompt(state);\n if (comicStylePrompt) {\n prompt = `${comicStylePrompt}, ${prompt}`;\n }\n\n if (styleGuide) {\n prompt = `${styleGuide}, ${prompt}`;\n }\n\n const characterDescriptions: Array<{ name: string; description: string }> = [];\n if (characterReferences && characterReferences.length > 0) {\n for (const ref of characterReferences) {\n const stateCharacter = state?.characters.find((c) => c.name === ref.name);\n if (stateCharacter) {\n characterDescriptions.push({\n name: ref.name,\n description: stateCharacter.description,\n });\n } else if (ref.description) {\n characterDescriptions.push({\n name: ref.name,\n description: ref.description,\n });\n }\n }\n }\n\n if (characterDescriptions.length > 0) {\n const characterDetails = characterDescriptions\n .map((char) => `character \"${char.name}\": ${char.description}`)\n .join(\"; \");\n prompt = `${prompt}. CRITICAL: Maintain strict character consistency. Characters must match their detailed descriptions exactly: ${characterDetails}. Ensure facial features, hair style, clothing, body proportions, and all distinctive features remain identical across all panels.`;\n }\n\n const result = await generateImageWithVolcengine(\n prompt,\n \"1728x2304\",\n 1,\n undefined\n );\n\n if (!result.success || !result.imageUrl) {\n throw new Error(result.error || \"Failed to generate image\");\n }\n\n return {\n success: true,\n imageUrl: result.imageUrl,\n prompt,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"generation_error\",\n };\n }\n },\n {\n name: \"generate_panel_image\",\n description:\n \"Generate a single panel image from a multi-panel comic page using Volcengine Seedream API. IMPORTANT: This generates ONE panel frame with clear borders, not a full page. The image should match the panel description and maintain character consistency using detailed character descriptions.\",\n schema: z.object({\n panelDescription: z.string().describe(\"Detailed visual description of the panel, including composition, characters, setting, and mood\"),\n characterReferences: z.array(\n z.object({\n name: z.string().describe(\"Character name (must match the name used in generate_character_design)\"),\n description: z.string().describe(\"Character description (will be replaced with detailed description from state if available)\"),\n })\n ).optional().describe(\"Character references that appear in this panel. The tool will automatically use detailed character descriptions from state to ensure consistency.\"),\n styleGuide: z.string().optional().describe(\"Overall art style guide to apply\"),\n }),\n }\n);\n\n/**\n * Generate a complete comic page with all panels\n */\nexport const generateComicPageTool = tool(\n async ({ pageNumber, panels, styleGuide }, context) => {\n try {\n const state = context?.state as MangaCreationState | undefined;\n\n console.log(\"=== Generate Comic Page Tool Called ===\");\n console.log(\"State:\", state);\n console.log(\"===================================\");\n \n if (!panels || panels.length === 0) {\n throw new Error(\"No panels provided for page generation\");\n }\n\n // Collect all unique characters from all panels in this page\n const allCharacterNames = new Set<string>();\n for (const panel of panels) {\n if (panel.characterReferences) {\n for (const ref of panel.characterReferences) {\n allCharacterNames.add(ref.name);\n }\n }\n }\n\n // Get detailed character descriptions from state\n const characterDescriptions: Array<{ name: string; description: string }> = [];\n \n // First, add characters explicitly mentioned in panels\n for (const charName of allCharacterNames) {\n const stateCharacter = state?.characters.find((c) => c.name === charName);\n if (stateCharacter && stateCharacter.description) {\n characterDescriptions.push({\n name: charName,\n description: stateCharacter.description,\n });\n }\n }\n \n // Then, add ALL other characters from state that have descriptions\n if (state?.characters) {\n for (const stateChar of state.characters) {\n if (!allCharacterNames.has(stateChar.name) && stateChar.description) {\n characterDescriptions.push({\n name: stateChar.name,\n description: stateChar.description,\n });\n }\n }\n }\n\n // Build page description with all panels\n const panelDescriptions = panels.map((panel, index) => {\n let desc = `Panel ${index + 1}: ${panel.description}`;\n if (panel.dialogue) {\n desc += ` (Dialogue: \"${panel.dialogue}\")`;\n }\n if (panel.narrative) {\n desc += ` (Narrative: \"${panel.narrative}\")`;\n }\n return desc;\n }).join('\\n');\n\n const isCoverPage = pageNumber === 1;\n let prompt = \"\";\n\n if (isCoverPage) {\n prompt = `COMIC BOOK COVER PAGE. This is the cover page (page 1) of the comic. Design a striking, eye-catching cover that showcases the main characters and story theme. `;\n if (panels.length === 1) {\n prompt += `Generate a single, impactful cover image. `;\n } else {\n prompt += `Generate a cover design with ${panels.length} panels/elements arranged artistically. `;\n }\n prompt += `The cover should be visually compelling and represent the essence of the story. `;\n const title = state?.script?.title || \"\";\n if (title) {\n prompt += `Title: \"${title}\". `;\n }\n prompt += `Cover design descriptions:\\n${panelDescriptions}`;\n } else {\n prompt = `Complete multi-panel comic page. Generate the ENTIRE page with ALL ${panels.length} panels arranged in the specified layout. `;\n prompt += `Each panel must have clear borders/frames. Panel descriptions:\\n${panelDescriptions}`;\n }\n\n // Add confirmed comic style parameters from state\n const comicStylePrompt = buildComicStylePrompt(state);\n if (comicStylePrompt) {\n prompt = `${comicStylePrompt}, ${prompt}`;\n } else {\n prompt = `Multi-panel comic format (多格漫画), ${prompt}`;\n }\n\n if (styleGuide) {\n prompt = `${styleGuide}, ${prompt}`;\n }\n\n // Add detailed character descriptions\n if (characterDescriptions.length > 0) {\n const characterDetails = characterDescriptions\n .map((char) => `character \"${char.name}\": ${char.description}`)\n .join(\"; \");\n prompt = `${prompt}. CRITICAL: Maintain strict character consistency across ALL panels on this page. Characters must match their detailed descriptions exactly: ${characterDetails}. Ensure facial features, hair style, clothing, body proportions, and all distinctive features remain identical across all panels.`;\n }\n\n // Add explicit layout instructions\n const panelLayout = state?.scriptParams?.panelLayout || \"grid format\";\n if (isCoverPage) {\n if (panels.length === 1) {\n prompt = `${prompt}. CRITICAL: This is a COMIC BOOK COVER PAGE. Generate a single, impactful cover image that is visually striking and showcases the main characters and story theme. The cover should be designed to attract readers and represent the essence of the story.`;\n } else {\n prompt = `${prompt}. CRITICAL: This is a COMIC BOOK COVER PAGE. Generate a cover design with ${panels.length} panels/elements arranged artistically. The cover should be visually compelling, with creative layout that showcases the main characters and story theme. Panels can be arranged in a dynamic, eye-catching composition suitable for a cover page.`;\n }\n } else {\n if (panelLayout.includes(\"网格\") || panelLayout.includes(\"grid\")) {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels in a grid format (rows and columns) with clear borders/frames between each panel. Each panel must be a separate, clearly defined frame with visible borders. The entire page should show all panels together in one cohesive layout.`;\n } else if (panelLayout.includes(\"自由\") || panelLayout.includes(\"free-flowing\")) {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels in a free-flowing layout with varying sizes, each panel clearly separated with visible borders/frames. The entire page should show all panels together in one cohesive layout.`;\n } else if (panelLayout.includes(\"垂直\") || panelLayout.includes(\"vertical\")) {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels vertically stacked, each panel clearly separated with visible borders/frames. The entire page should show all panels together in one cohesive vertical layout.`;\n } else {\n prompt = `${prompt}. CRITICAL: Layout this as a COMPLETE multi-panel comic page. Arrange all ${panels.length} panels with clear borders/frames between each panel, creating a cohesive multi-panel comic page layout. The entire page should show all panels together.`;\n }\n }\n\n console.log(\"=== Generating Comic Page ===\");\n console.log(`Page ${pageNumber}${isCoverPage ? \" (COVER PAGE)\" : \"\"} with ${panels.length} panels`);\n console.log(\"Character names from panels:\", Array.from(allCharacterNames));\n console.log(\"All characters in state:\", state?.characters?.map(c => ({ name: c.name, hasDescription: !!c.description })) || []);\n console.log(\"Character descriptions to include:\", characterDescriptions.map(c => c.name));\n console.log(\"Character References Count:\", characterDescriptions.length);\n if (characterDescriptions.length === 0) {\n console.warn(\"⚠️ WARNING: No character descriptions found! This may cause character inconsistency.\");\n console.log(\"Available characters in state:\", state?.characters?.map(c => c.name) || []);\n }\n console.log(\"Panel Layout:\", panelLayout);\n console.log(\"Final Prompt (first 500 chars):\", prompt.substring(0, 500));\n console.log(\"=================================\");\n\n const result = await generateImageWithVolcengine(\n prompt,\n \"1728x2304\",\n 1,\n undefined\n );\n\n if (!result.success || !result.imageUrl) {\n throw new Error(result.error || \"Failed to generate page image\");\n }\n\n return {\n success: true,\n pageNumber,\n imageUrl: result.imageUrl,\n panels: panels.map((panel, index) => ({\n panelNumber: index + 1,\n dialogue: panel.dialogue || \"\",\n narrative: panel.narrative || \"\",\n })),\n prompt,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"generation_error\",\n };\n }\n },\n {\n name: \"generate_comic_page\",\n description:\n \"Generate a complete multi-panel comic page with ALL panels in ONE image. IMPORTANT: Page 1 (pageNumber=1) is the COVER PAGE and should be designed as a striking, eye-catching cover showcasing main characters and story theme. It may have a special layout (e.g., single large panel or special cover design) different from regular pages. For regular pages (page 2 onwards), this tool generates the entire page layout with all panels arranged according to the specified panel layout style (grid, free-flowing, or vertical scroll). Each panel should have clear borders/frames. CRITICAL: You MUST provide characterReferences for EACH panel that contains characters. The tool automatically uses detailed character descriptions from state to ensure character consistency across all panels on the page. Returns the page image URL and all panel texts (dialogue/narrative).\",\n schema: z.object({\n pageNumber: z.number().describe(\"Page number in the comic\"),\n panels: z.array(\n z.object({\n panelNumber: z.number().describe(\"Panel number within the page\"),\n description: z.string().describe(\"Detailed visual description of this panel, including composition, characters, setting, and mood\"),\n dialogue: z.string().optional().describe(\"Dialogue text for this panel (if any)\"),\n narrative: z.string().optional().describe(\"Narrative text for this panel (if any)\"),\n characterReferences: z.array(\n z.object({\n name: z.string().describe(\"Character name\"),\n description: z.string().optional().describe(\"Character description (will be replaced with detailed description from state if available)\"),\n })\n ).optional().describe(\"Characters that appear in this panel\"),\n })\n ).min(1).describe(\"All panels on this page. The tool will generate ONE image containing all these panels arranged in the specified layout.\"),\n styleGuide: z.string().optional().describe(\"Overall art style guide to apply\"),\n }),\n }\n);\n\n/**\n * Generate panel with story text (backup tool)\n */\nexport const generatePanelWithStoryTool = tool(\n async ({ panelNumber, panelDescription, storyText, characterReferences, styleGuide }, context) => {\n try {\n const state = context?.state as MangaCreationState | undefined;\n const characterDescriptions: Array<{ name: string; description: string }> = [];\n\n if (characterReferences && characterReferences.length > 0) {\n for (const ref of characterReferences) {\n const stateCharacter = state?.characters.find((c) => c.name === ref.name);\n if (stateCharacter) {\n characterDescriptions.push({\n name: ref.name,\n description: stateCharacter.description,\n });\n } else if (ref.description) {\n characterDescriptions.push({\n name: ref.name,\n description: ref.description,\n });\n }\n }\n }\n\n let prompt = `This is a single panel from a multi-panel comic page. ${panelDescription}`;\n\n const comicStylePrompt = buildComicStylePrompt(state);\n if (comicStylePrompt) {\n prompt = `${comicStylePrompt}, ${prompt}`;\n }\n\n if (styleGuide) {\n prompt = `${styleGuide}, ${prompt}`;\n }\n\n if (characterDescriptions.length > 0) {\n const characterDetails = characterDescriptions\n .map((char) => `character \"${char.name}\": ${char.description}`)\n .join(\"; \");\n prompt = `${prompt}. CRITICAL: Maintain strict character consistency. Characters must match their detailed descriptions exactly: ${characterDetails}. Ensure facial features, hair style, clothing, body proportions, and all distinctive features remain identical across all panels.`;\n }\n\n console.log(\"=== Generating Panel with Character Descriptions ===\");\n console.log(\"Character References:\", JSON.stringify(characterDescriptions, null, 2));\n if (state) {\n console.log(\"State characters:\", state.characters.map(c => ({ \n name: c.name, \n hasDescription: !!c.description,\n descriptionLength: c.description?.length || 0\n })));\n }\n console.log(\"=================================\");\n\n const result = await generateImageWithVolcengine(\n prompt,\n \"1728x2304\",\n 1,\n undefined\n );\n\n if (!result.success || !result.imageUrl) {\n throw new Error(result.error || \"Failed to generate image\");\n }\n\n return {\n success: true,\n panelNumber,\n imageUrl: result.imageUrl,\n storyText: storyText || \"\",\n prompt,\n characterReferencesUsed: characterDescriptions.map((r) => ({\n name: r.name,\n description: r.description,\n })),\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n error_type: \"generation_error\",\n };\n }\n },\n {\n name: \"generate_panel_with_story\",\n description:\n \"Generate a single panel from a multi-panel comic page (image + dialogue/narrative text). IMPORTANT: This generates ONE panel frame with clear borders, not a full page. Each panel is part of a larger multi-panel comic page layout. This tool will automatically use detailed character descriptions from state to ensure character consistency. Returns both the image URL and the text content. IMPORTANT: Always provide characterReferences parameter with ALL character names that appear in this panel, including their detailed descriptions from generate_character_design.\",\n schema: z.object({\n panelNumber: z.number().describe(\"Panel number in the sequence\"),\n panelDescription: z.string().describe(\"Detailed visual description of the panel, including composition, characters, setting, and mood\"),\n storyText: z.string().describe(\"The story paragraph/text that accompanies this panel image\"),\n characterReferences: z.array(\n z.object({\n name: z.string().describe(\"Character name (must match the name used in generate_character_design)\"),\n description: z.string().describe(\"Character description (will be replaced with detailed description from state if available)\"),\n })\n ).optional().describe(\"Character references that appear in this panel. The tool will automatically use detailed character descriptions from state to ensure consistency.\"),\n styleGuide: z.string().optional().describe(\"Overall art style guide to apply\"),\n }),\n }\n);\n\n","/**\n * AI Manga Creator Agent using AG-Kit Agents\n * \n * This agent creates multi-panel comics (多格漫画) by:\n * 1. Generating script with panel descriptions\n * 2. Creating detailed character designs with very specific descriptions\n * 3. Generating comic pages with character consistency using detailed text descriptions\n * 4. Each page includes both an image and accompanying story text\n */\n\nimport { Agent, OpenAIProvider, ControlFlowDecision } from \"@cloudbase/agent-agents\";\nimport { MangaCreationState } from \"./types\";\nimport {\n generateScriptTool,\n generateCharacterDesignTool,\n generateComicPageTool,\n generatePanelImageTool,\n generatePanelWithStoryTool,\n} from \"./tools\";\n\n/**\n * Create Manga Creator Agent\n */\nexport function createMangaCreatorAgent(): Agent<MangaCreationState> {\n if (!process.env.OPENAI_API_KEY) {\n throw new Error(\"OPENAI_API_KEY is required\");\n }\n\n if (!process.env.VOLCENGINE_COOKIE) {\n throw new Error(\"VOLCENGINE_COOKIE is required. Please set it in your environment variables.\");\n }\n\n const provider = new OpenAIProvider({\n apiKey: process.env.OPENAI_API_KEY!,\n defaultModel: process.env.OPENAI_MODEL || \"gpt-4o\",\n baseURL: process.env.OPENAI_BASE_URL,\n });\n\n return new Agent<MangaCreationState>({\n name: \"manga-creator-agent\",\n description: \"Creates multi-panel comics (多格漫画) from story ideas\",\n model: provider,\n stateType: MangaCreationState,\n instructions: `You are a professional comic book creator assistant. Your job is to create multi-panel comics (多格漫画) from story ideas, where each panel is part of a cohesive comic page.\n\n**Workflow:**\n1. **Immediate style recommendation**: IMMEDIATELY after receiving a story idea, analyze the story characteristics and use generate_script tool to recommend appropriate comic style parameters. The recommendation should be based on:\n - Story theme and genre (action, romance, horror, sci-fi, comedy, etc.)\n - Cultural context and setting\n - Target audience\n - Narrative tone\n - Visual requirements\n \n **CRITICAL**: You MUST provide ALL style parameters - do not leave any empty. If the user's input is in Chinese, generate all parameters in Chinese. If in English, use English.\n \n Recommend specific parameters including:\n - Cultural origin (Japanese Manga/日本漫画, American Comics/美国漫画, Korean Manhwa/韩国漫画, Chinese Manhua/中国漫画, European Bande Dessinée/欧洲漫画)\n - Target audience (Shōnen/少年漫画, Shōjo/少女漫画, Seinen/青年漫画, Josei/女性漫画, Kodomo/儿童漫画)\n - Art style (Realistic/写实风格, Cartoonish/Exaggerated/卡通/夸张风格, Abstract/Experimental/抽象/实验风格)\n - Theme type (Action/Adventure/动作/冒险, Romance/浪漫, Horror/Suspense/恐怖/悬疑, Sci-Fi/Fantasy/科幻/奇幻, Comedy/喜剧)\n - Visual adjustments (line style/线条风格, color scheme/色彩方案, panel layout/面板布局)\n - Character proportions (realistic/写实, chibi/Q版, exaggerated/夸张) and background complexity (minimalist/简约, detailed/详细)\n - Text integration style (dialogue bubbles/对话气泡, narrative boxes/叙述框)\n\n2. **Wait for user confirmation**: After calling generate_script, wait for user to confirm or adjust the recommended comic style parameters.\n\n3. **Generate script**: Once parameters are confirmed, generate a structured comic script with pages and panels. \n - **IMPORTANT: Page 1 is the COVER PAGE**. The cover page should be designed as a striking, eye-catching cover that showcases the main characters and story theme. It may have a different layout than regular pages (e.g., single large panel, or special cover design).\n - For regular pages (page 2 onwards), each panel should have:\n - A detailed visual description for image generation that matches the confirmed comic style\n - Dialogue and/or narrative text\n - Panel composition and layout information\n - When describing panels, emphasize that each is a separate frame/panel in a multi-panel layout\n\n4. **Design characters**: Use generate_character_design tool to create VERY DETAILED character descriptions that match the confirmed comic style. The descriptions must include:\n - **Background context**: Country/region, time period/era, cultural setting, historical context\n - Exact physical appearance (hair color, style, length, eye color, facial features, body type, height) matching the character proportion style\n - Detailed clothing description (colors, patterns, styles, accessories) matching the color scheme and historical/cultural period\n - Distinctive features and characteristics\n - These detailed descriptions will be used in ALL subsequent panel generation prompts to maintain character consistency\n - **CRITICAL**: You MUST call generate_character_design tool BEFORE generating any comic pages. Character designs are essential for maintaining consistency across all panels.\n\n5. **Generate comic pages**: For each page in the script:\n - **IMPORTANT**: Only generate pages AFTER character designs have been confirmed by the user. Do not skip character design step.\n - **Page 1 (Cover Page)**: Use generate_comic_page tool with pageNumber=1. The cover page should be designed as a striking, eye-catching cover showcasing main characters and story theme. It may have a special layout (e.g., single large panel or special cover design) different from regular pages.\n - **Regular pages (page 2 onwards)**: Use generate_comic_page tool to generate the ENTIRE page with ALL panels on that page in ONE image\n - IMPORTANT: Generate the complete multi-panel comic page layout with all panels arranged according to the panel layout style\n - Provide all panels from the page with their descriptions, dialogue, and character references\n - The tool will generate ONE image containing all panels of the page, arranged in the specified layout (grid, free-flowing, or vertical scroll)\n - The tool returns the page image URL and all panel texts\n - Display each page as: [Page Image] followed by all panel texts\n\n6. **Final output**: After all panels are generated, output the complete comic in Markdown format with all images and text combined, maintaining the comic book layout.\n\n**Key Principles:**\n- Each panel is part of a multi-panel comic page (多格漫画)\n- Keep the story engaging and visually interesting\n- Ensure character consistency across all panels\n- Create clear, readable images that tell the story\n- Maintain a consistent comic style throughout based on confirmed parameters\n- Dialogue and narrative text should complement the images naturally\n- Follow comic book conventions: panel layout, dialogue bubbles, sound effects, etc.\n`,\n modelSettings: {\n temperature: 0.8,\n maxTokens: 16000,\n },\n tools: [\n generateScriptTool,\n generateCharacterDesignTool,\n generateComicPageTool,\n generatePanelImageTool, // Keep as backup\n generatePanelWithStoryTool, // Keep as backup\n ],\n controlFlow: {\n maxSteps: 100,\n errorRetryLimit: 0,\n customHandler: {\n async handleNextStep(_context: any, state?: MangaCreationState, userMessage?: string) {\n if (!state) {\n return { action: \"continue\", nextStep: null } as const;\n }\n\n // Set storyIdea from user message if not already set and this is not a confirmation message\n if (userMessage && !state.storyIdea && !userMessage.includes('\"userConfirmed\"') && !userMessage.includes('\"type\"')) {\n state.storyIdea = userMessage;\n }\n\n const scriptParams = state.scriptParams;\n const characterDesignParams = state.characterDesignParams;\n\n // If user message contains confirmed script parameters, update state\n if (userMessage && scriptParams && !scriptParams.userConfirmed) {\n try {\n const confirmedParams = JSON.parse(userMessage);\n if (confirmedParams.userConfirmed && confirmedParams.type === \"script_params\") {\n // Update state with confirmed parameters\n if (state.scriptParams) {\n state.scriptParams.userConfirmed = true;\n state.scriptParams.culturalOrigin = confirmedParams.culturalOrigin;\n state.scriptParams.targetAudience = confirmedParams.targetAudience;\n state.scriptParams.artStyle = confirmedParams.artStyle;\n state.scriptParams.themeType = confirmedParams.themeType;\n state.scriptParams.lineStyle = confirmedParams.lineStyle;\n state.scriptParams.colorScheme = confirmedParams.colorScheme;\n state.scriptParams.panelLayout = confirmedParams.panelLayout;\n state.scriptParams.characterProportion = confirmedParams.characterProportion;\n state.scriptParams.backgroundComplexity = confirmedParams.backgroundComplexity;\n state.scriptParams.textIntegration = confirmedParams.textIntegration;\n state.scriptParams.numPages = confirmedParams.numPages;\n }\n // Continue execution\n return { action: \"continue\", nextStep: null } as const;\n }\n } catch {\n // If parsing fails, treat as regular message and continue\n }\n }\n\n // If user message contains confirmed character design parameters, update state\n // Also check state.userResponse in case userMessage is not provided\n const confirmationMessage = userMessage || (state.userResponse && typeof state.userResponse === 'string' ? state.userResponse : JSON.stringify(state.userResponse || {}));\n \n // Check if this is a character design confirmation\n // IMPORTANT: Even if characterDesignParams doesn't exist (e.g., after state restore),\n // we should still update state.characters if userResponse contains confirmation\n if (confirmationMessage) {\n try {\n const confirmedParams = typeof confirmationMessage === 'string' ? JSON.parse(confirmationMessage) : confirmationMessage;\n if (confirmedParams.userConfirmed && confirmedParams.type === \"character_design\" && confirmedParams.characters) {\n // Update characters in state with confirmed designs\n // This works even if characterDesignParams doesn't exist\n for (const char of confirmedParams.characters) {\n const existingIndex = state.characters.findIndex((c) => c.name === char.name);\n if (existingIndex >= 0) {\n state.characters[existingIndex].description = char.description;\n } else {\n state.characters.push({\n name: char.name,\n description: char.description,\n });\n }\n }\n \n // Update characterDesignParams if it exists\n if (state.characterDesignParams) {\n state.characterDesignParams.userConfirmed = true;\n } else {\n // Create characterDesignParams if it doesn't exist (for consistency)\n state.characterDesignParams = {\n characters: confirmedParams.characters.map((c: any) => ({\n name: c.name,\n description: c.description,\n })),\n userConfirmed: true,\n };\n }\n \n console.log(\"=== Character Design Confirmed in handleNextStep ===\");\n console.log(\"Updated state.characters:\", state.characters);\n console.log(\"Character count:\", state.characters.length);\n console.log(\"===================================================\");\n \n // Clear userResponse after processing\n state.userResponse = undefined;\n // Continue execution\n return { action: \"continue\", nextStep: null } as const;\n }\n } catch (error) {\n // If parsing fails, treat as regular message and continue\n console.error(\"Failed to parse character design confirmation:\", error);\n }\n }\n \n // Legacy check: if characterDesignParams exists and is not confirmed\n if (confirmationMessage && characterDesignParams && !characterDesignParams.userConfirmed) {\n try {\n const confirmedParams = typeof confirmationMessage === 'string' ? JSON.parse(confirmationMessage) : confirmationMessage;\n if (confirmedParams.userConfirmed && confirmedParams.type === \"character_design\") {\n // Update state with confirmed character designs\n if (state.characterDesignParams && confirmedParams.characters) {\n state.characterDesignParams.userConfirmed = true;\n // Update characters in state with confirmed designs\n for (const char of confirmedParams.characters) {\n const existingIndex = state.characters.findIndex((c) => c.name === char.name);\n if (existingIndex >= 0) {\n state.characters[existingIndex].description = char.description;\n } else {\n state.characters.push({\n name: char.name,\n description: char.description,\n });\n }\n }\n console.log(\"=== Character Design Confirmed in handleNextStep (legacy) ===\");\n console.log(\"Updated state.characters:\", state.characters);\n console.log(\"===================================================\");\n }\n // Clear userResponse after processing\n state.userResponse = undefined;\n // Continue execution\n return { action: \"continue\", nextStep: null } as const;\n }\n } catch (error) {\n // If parsing fails, treat as regular message and continue\n console.error(\"Failed to parse character design confirmation:\", error);\n }\n }\n\n // If script parameters are proposed but not confirmed, wait for user\n if (scriptParams && !scriptParams.userConfirmed) {\n return {\n action: \"interrupt\",\n reason: \"waiting_for_script_params_confirmation\",\n payload: {\n storyIdea: scriptParams.storyIdea,\n culturalOrigin: scriptParams.culturalOrigin || \"\",\n targetAudience: scriptParams.targetAudience || \"\",\n artStyle: scriptParams.artStyle || \"\",\n themeType: scriptParams.themeType || \"\",\n lineStyle: scriptParams.lineStyle || \"\",\n colorScheme: scriptParams.colorScheme || \"\",\n panelLayout: scriptParams.panelLayout || \"\",\n characterProportion: scriptParams.characterProportion || \"\",\n backgroundComplexity: scriptParams.backgroundComplexity || \"\",\n textIntegration: scriptParams.textIntegration || \"\",\n numPages: scriptParams.numPages || 4,\n },\n } as ControlFlowDecision;\n }\n\n // If character design parameters are proposed but not confirmed, wait for user\n if (characterDesignParams && !characterDesignParams.userConfirmed) {\n return {\n action: \"interrupt\",\n reason: \"waiting_for_character_design_confirmation\",\n payload: {\n characters: characterDesignParams.characters,\n },\n } as ControlFlowDecision;\n }\n\n return { action: \"continue\", nextStep: null } as const;\n },\n\n async handleToolCall(toolCall: any, _context: any, state?: MangaCreationState) {\n // Tool execution is handled by the tool handler itself\n return { action: \"execute\", immediate: true } as const;\n },\n\n async handleError(error: any) {\n return { action: \"abort\", reason: error.message } as const;\n },\n },\n },\n });\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -538,7 +538,7 @@ var generateCharacterDesignTool = tool(
|
|
|
538
538
|
}
|
|
539
539
|
console.log("=== Character Design Tool Called ===");
|
|
540
540
|
console.log("Characters proposed:", characters.map((c) => c.name));
|
|
541
|
-
console.log("State.characters updated:", state.characters
|
|
541
|
+
console.log("State.characters updated:", state.characters);
|
|
542
542
|
console.log("===================================");
|
|
543
543
|
}
|
|
544
544
|
return {
|
|
@@ -635,6 +635,9 @@ var generateComicPageTool = tool(
|
|
|
635
635
|
async ({ pageNumber, panels, styleGuide }, context) => {
|
|
636
636
|
try {
|
|
637
637
|
const state = context?.state;
|
|
638
|
+
console.log("=== Generate Comic Page Tool Called ===");
|
|
639
|
+
console.log("State:", state);
|
|
640
|
+
console.log("===================================");
|
|
638
641
|
if (!panels || panels.length === 0) {
|
|
639
642
|
throw new Error("No panels provided for page generation");
|
|
640
643
|
}
|
|
@@ -958,23 +961,7 @@ function createMangaCreatorAgent() {
|
|
|
958
961
|
- Maintain a consistent comic style throughout based on confirmed parameters
|
|
959
962
|
- Dialogue and narrative text should complement the images naturally
|
|
960
963
|
- Follow comic book conventions: panel layout, dialogue bubbles, sound effects, etc.
|
|
961
|
-
|
|
962
|
-
**Output Format:**
|
|
963
|
-
- During generation: Show each panel as it's created (image + story paragraph)
|
|
964
|
-
- Final output: Use Markdown format with all images and story text combined into a complete picture book, like:
|
|
965
|
-
\`\`\`markdown
|
|
966
|
-
# Story Title
|
|
967
|
-
|
|
968
|
-

|
|
969
|
-
|
|
970
|
-
Story paragraph for panel 1...
|
|
971
|
-
|
|
972
|
-

|
|
973
|
-
|
|
974
|
-
Story paragraph for panel 2...
|
|
975
|
-
|
|
976
|
-
...
|
|
977
|
-
\`\`\``,
|
|
964
|
+
`,
|
|
978
965
|
modelSettings: {
|
|
979
966
|
temperature: 0.8,
|
|
980
967
|
maxTokens: 16e3
|
|
@@ -1024,9 +1011,47 @@ function createMangaCreatorAgent() {
|
|
|
1024
1011
|
} catch {
|
|
1025
1012
|
}
|
|
1026
1013
|
}
|
|
1027
|
-
|
|
1014
|
+
const confirmationMessage = userMessage || (state.userResponse && typeof state.userResponse === "string" ? state.userResponse : JSON.stringify(state.userResponse || {}));
|
|
1015
|
+
if (confirmationMessage) {
|
|
1028
1016
|
try {
|
|
1029
|
-
const confirmedParams = JSON.parse(
|
|
1017
|
+
const confirmedParams = typeof confirmationMessage === "string" ? JSON.parse(confirmationMessage) : confirmationMessage;
|
|
1018
|
+
if (confirmedParams.userConfirmed && confirmedParams.type === "character_design" && confirmedParams.characters) {
|
|
1019
|
+
for (const char of confirmedParams.characters) {
|
|
1020
|
+
const existingIndex = state.characters.findIndex((c) => c.name === char.name);
|
|
1021
|
+
if (existingIndex >= 0) {
|
|
1022
|
+
state.characters[existingIndex].description = char.description;
|
|
1023
|
+
} else {
|
|
1024
|
+
state.characters.push({
|
|
1025
|
+
name: char.name,
|
|
1026
|
+
description: char.description
|
|
1027
|
+
});
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
if (state.characterDesignParams) {
|
|
1031
|
+
state.characterDesignParams.userConfirmed = true;
|
|
1032
|
+
} else {
|
|
1033
|
+
state.characterDesignParams = {
|
|
1034
|
+
characters: confirmedParams.characters.map((c) => ({
|
|
1035
|
+
name: c.name,
|
|
1036
|
+
description: c.description
|
|
1037
|
+
})),
|
|
1038
|
+
userConfirmed: true
|
|
1039
|
+
};
|
|
1040
|
+
}
|
|
1041
|
+
console.log("=== Character Design Confirmed in handleNextStep ===");
|
|
1042
|
+
console.log("Updated state.characters:", state.characters);
|
|
1043
|
+
console.log("Character count:", state.characters.length);
|
|
1044
|
+
console.log("===================================================");
|
|
1045
|
+
state.userResponse = void 0;
|
|
1046
|
+
return { action: "continue", nextStep: null };
|
|
1047
|
+
}
|
|
1048
|
+
} catch (error) {
|
|
1049
|
+
console.error("Failed to parse character design confirmation:", error);
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
if (confirmationMessage && characterDesignParams && !characterDesignParams.userConfirmed) {
|
|
1053
|
+
try {
|
|
1054
|
+
const confirmedParams = typeof confirmationMessage === "string" ? JSON.parse(confirmationMessage) : confirmationMessage;
|
|
1030
1055
|
if (confirmedParams.userConfirmed && confirmedParams.type === "character_design") {
|
|
1031
1056
|
if (state.characterDesignParams && confirmedParams.characters) {
|
|
1032
1057
|
state.characterDesignParams.userConfirmed = true;
|
|
@@ -1041,10 +1066,15 @@ function createMangaCreatorAgent() {
|
|
|
1041
1066
|
});
|
|
1042
1067
|
}
|
|
1043
1068
|
}
|
|
1069
|
+
console.log("=== Character Design Confirmed in handleNextStep (legacy) ===");
|
|
1070
|
+
console.log("Updated state.characters:", state.characters);
|
|
1071
|
+
console.log("===================================================");
|
|
1044
1072
|
}
|
|
1073
|
+
state.userResponse = void 0;
|
|
1045
1074
|
return { action: "continue", nextStep: null };
|
|
1046
1075
|
}
|
|
1047
|
-
} catch {
|
|
1076
|
+
} catch (error) {
|
|
1077
|
+
console.error("Failed to parse character design confirmation:", error);
|
|
1048
1078
|
}
|
|
1049
1079
|
}
|
|
1050
1080
|
if (scriptParams && !scriptParams.userConfirmed) {
|