This commit is contained in:
2026-05-08 11:44:42 +08:00
parent b08127031c
commit abf1f1ebea
249 changed files with 39411 additions and 887 deletions

View File

@@ -0,0 +1,99 @@
import type {
CompileVisualNovelWorkProfileRequest,
CreateVisualNovelSessionRequest,
ExecuteVisualNovelAgentActionRequest,
SendVisualNovelMessageRequest,
VisualNovelAgentSessionSnapshot,
VisualNovelCompileResponse,
VisualNovelSessionResponse,
} from '../../../packages/shared/src/contracts/visualNovel';
import type { TextStreamOptions } from '../aiTypes';
import { type ApiRetryOptions, requestJson } from '../apiClient';
import { createCreationAgentClient } from '../creation-agent';
const VISUAL_NOVEL_AGENT_API_BASE = '/api/creation/visual-novel/sessions';
const VISUAL_NOVEL_CREATION_WRITE_RETRY: ApiRetryOptions = {
maxRetries: 1,
baseDelayMs: 240,
maxDelayMs: 640,
retryUnsafeMethods: true,
};
const visualNovelAgentHttpClient = createCreationAgentClient<
CreateVisualNovelSessionRequest,
VisualNovelSessionResponse,
VisualNovelSessionResponse,
VisualNovelAgentSessionSnapshot,
SendVisualNovelMessageRequest,
VisualNovelSessionResponse,
ExecuteVisualNovelAgentActionRequest,
VisualNovelSessionResponse
>({
apiBase: VISUAL_NOVEL_AGENT_API_BASE,
messages: {
createSession: '创建视觉小说共创会话失败',
getSession: '读取视觉小说共创会话失败',
sendMessage: '发送视觉小说共创消息失败',
streamIncomplete: '视觉小说共创消息流式结果不完整',
executeAction: '执行视觉小说创作操作失败',
},
});
export function createVisualNovelSession(
payload: CreateVisualNovelSessionRequest,
) {
return visualNovelAgentHttpClient.createSession(payload);
}
export function getVisualNovelSession(sessionId: string) {
return visualNovelAgentHttpClient.getSession(sessionId);
}
export function sendVisualNovelMessage(
sessionId: string,
payload: SendVisualNovelMessageRequest,
) {
return visualNovelAgentHttpClient.sendMessage(sessionId, payload);
}
export function streamVisualNovelMessage(
sessionId: string,
payload: SendVisualNovelMessageRequest,
options: TextStreamOptions = {},
) {
return visualNovelAgentHttpClient.streamMessage(sessionId, payload, options);
}
export function executeVisualNovelAction(
sessionId: string,
payload: ExecuteVisualNovelAgentActionRequest,
) {
return visualNovelAgentHttpClient.executeAction(sessionId, payload);
}
export function compileVisualNovelWorkProfile(
sessionId: string,
payload: CompileVisualNovelWorkProfileRequest,
) {
return requestJson<VisualNovelCompileResponse>(
`${VISUAL_NOVEL_AGENT_API_BASE}/${encodeURIComponent(sessionId)}/compile`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
},
'编译视觉小说作品草稿失败',
{
retry: VISUAL_NOVEL_CREATION_WRITE_RETRY,
},
);
}
export const visualNovelCreationClient = {
compileWorkProfile: compileVisualNovelWorkProfile,
createSession: createVisualNovelSession,
executeAction: executeVisualNovelAction,
getSession: getVisualNovelSession,
sendMessage: sendVisualNovelMessage,
streamMessage: streamVisualNovelMessage,
};