auto-save 2026-05-18 23:50 (~2, -1)
This commit is contained in:
@@ -117,6 +117,19 @@
|
||||
"type": "session-heartbeat",
|
||||
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 4 项未提交变更 · 最近提交:auto-save 2026-05-18 23:39 (~2, -1)",
|
||||
"files_changed": 4
|
||||
},
|
||||
{
|
||||
"ts": "2026-05-18T23:44:50+08:00",
|
||||
"type": "commit",
|
||||
"message": "auto-save 2026-05-18 23:44 (+6, ~5)",
|
||||
"hash": "31df279",
|
||||
"files_changed": 11
|
||||
},
|
||||
{
|
||||
"ts": "2026-05-18T15:46:50Z",
|
||||
"type": "session-heartbeat",
|
||||
"message": "Claude 会话活跃 · 最近命令:claude · 分支 master · 3 项未提交变更 · 最近提交:auto-save 2026-05-18 23:44 (+6, ~5)",
|
||||
"files_changed": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { generateAssetPack } from '@/lib/packGenerator';
|
||||
import { loadSession, saveSession } from '@/lib/storage';
|
||||
import type { GeneratePackRequest, GeneratePackResponse, PackKind } from '@/lib/types';
|
||||
|
||||
export const runtime = 'nodejs';
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
const PACK_KINDS: PackKind[] = ['patent', 'production', 'marketing'];
|
||||
|
||||
export async function POST(req: Request) {
|
||||
const body = (await req.json()) as GeneratePackRequest;
|
||||
const { sessionId, imageId, kind } = body;
|
||||
|
||||
if (!sessionId || !imageId || !PACK_KINDS.includes(kind)) {
|
||||
return NextResponse.json({ error: 'sessionId, imageId and valid kind required' }, { status: 400 });
|
||||
}
|
||||
|
||||
const session = await loadSession(sessionId);
|
||||
if (!session) return NextResponse.json({ error: 'session not found' }, { status: 404 });
|
||||
|
||||
const sourceImage = session.images.find(image => image.id === imageId);
|
||||
if (!sourceImage) return NextResponse.json({ error: 'image not found' }, { status: 404 });
|
||||
if (sourceImage.status !== 'selected') {
|
||||
return NextResponse.json({ error: 'image must be selected before generating packs' }, { status: 400 });
|
||||
}
|
||||
|
||||
try {
|
||||
const { pack, manifest, provider } = await generateAssetPack({ session, sourceImage, kind });
|
||||
session.characterSpec = pack.characterSpec;
|
||||
session.packs = [
|
||||
...(session.packs ?? []).filter(existing => !(existing.kind === kind && existing.sourceImageId === imageId)),
|
||||
pack,
|
||||
];
|
||||
session.exports = [
|
||||
...(session.exports ?? []).filter(existing => existing.packId !== pack.id),
|
||||
manifest,
|
||||
];
|
||||
await saveSession(session);
|
||||
|
||||
const response: GeneratePackResponse = { pack, manifest, provider };
|
||||
return NextResponse.json(response);
|
||||
} catch (error) {
|
||||
return NextResponse.json({ error: String(error) }, { status: 500 });
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user