Spaces:
Running
Running
| import crypto from 'node:crypto'; | |
| import fs from 'node:fs/promises'; | |
| import path from 'node:path'; | |
| import { readMobileSessionMessages, registerMobileSession } from './mobile-session-index.js'; | |
| import { GENERATED_ROOT, imageMimeToExt } from './image-generator-api.js'; | |
| export async function saveGeneratedImages(images) { | |
| const folder = GENERATED_ROOT; | |
| await fs.mkdir(folder, { recursive: true }); | |
| const saved = []; | |
| for (const image of images) { | |
| const mimeType = image.mimeType || 'image/png'; | |
| const ext = imageMimeToExt(mimeType); | |
| const id = crypto.randomUUID(); | |
| const fileName = `${id}.${ext}`; | |
| const filePath = path.join(folder, fileName); | |
| const buffer = Buffer.from(String(image.b64 || '').replace(/\s/g, ''), 'base64'); | |
| await fs.writeFile(filePath, buffer); | |
| saved.push({ | |
| id, | |
| mimeType, | |
| path: filePath, | |
| url: `/generated/${fileName}`, | |
| revisedPrompt: image.revisedPrompt || '' | |
| }); | |
| } | |
| return saved; | |
| } | |
| export function buildAssistantContent(savedImages) { | |
| const lines = savedImages.flatMap((image, index) => [ | |
| ``, | |
| image.revisedPrompt ? `优化提示词:${image.revisedPrompt}` : '' | |
| ]).filter(Boolean); | |
| return `已生成图片:\n\n${lines.join('\n\n')}`; | |
| } | |
| export function emitStatus(emit, { sessionId, turnId, kind, status = 'running', label, detail = '' }) { | |
| emit({ | |
| type: 'status-update', | |
| sessionId, | |
| turnId, | |
| kind, | |
| status, | |
| label, | |
| detail, | |
| timestamp: new Date().toISOString() | |
| }); | |
| } | |
| export async function appendMobileMessages({ sessionId, projectPath, title, summary, updatedAt, messages }) { | |
| const existingMessages = await readMobileSessionMessages(sessionId); | |
| const merged = [...existingMessages]; | |
| for (const message of messages) { | |
| if (!merged.some((item) => item.id === message.id)) { | |
| merged.push(message); | |
| } | |
| } | |
| await registerMobileSession({ | |
| id: sessionId, | |
| projectPath, | |
| title, | |
| summary, | |
| updatedAt, | |
| messages: merged | |
| }); | |
| } | |