93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
import type {
|
||
PuzzleAgentActionRequest,
|
||
PuzzleAgentActionResponse,
|
||
} from '../../../packages/shared/src/contracts/puzzleAgentActions';
|
||
import type {
|
||
CreatePuzzleAgentSessionRequest,
|
||
CreatePuzzleAgentSessionResponse,
|
||
PuzzleAgentSessionSnapshot,
|
||
SendPuzzleAgentMessageRequest,
|
||
} from '../../../packages/shared/src/contracts/puzzleAgentSession';
|
||
import type { TextStreamOptions } from '../aiTypes';
|
||
import { createCreationAgentClient } from '../creation-agent';
|
||
|
||
const PUZZLE_AGENT_API_BASE = '/api/runtime/puzzle/agent/sessions';
|
||
const puzzleAgentHttpClient = createCreationAgentClient<
|
||
CreatePuzzleAgentSessionRequest,
|
||
CreatePuzzleAgentSessionResponse,
|
||
CreatePuzzleAgentSessionResponse,
|
||
PuzzleAgentSessionSnapshot,
|
||
SendPuzzleAgentMessageRequest,
|
||
{ session: PuzzleAgentSessionSnapshot },
|
||
PuzzleAgentActionRequest,
|
||
PuzzleAgentActionResponse
|
||
>({
|
||
apiBase: PUZZLE_AGENT_API_BASE,
|
||
messages: {
|
||
createSession: '创建拼图共创会话失败',
|
||
getSession: '读取拼图共创会话失败',
|
||
sendMessage: '发送拼图共创消息失败',
|
||
streamIncomplete: '拼图共创消息流式结果不完整',
|
||
executeAction: '执行拼图共创操作失败',
|
||
},
|
||
});
|
||
|
||
/**
|
||
* 创建拼图 Agent 共创会话。
|
||
* 首版继续走 Axum facade,前端不直连 SpacetimeDB。
|
||
*/
|
||
export async function createPuzzleAgentSession(
|
||
payload: CreatePuzzleAgentSessionRequest = {},
|
||
) {
|
||
return puzzleAgentHttpClient.createSession(payload);
|
||
}
|
||
|
||
/**
|
||
* 读取拼图 Agent 会话快照。
|
||
*/
|
||
export async function getPuzzleAgentSession(sessionId: string) {
|
||
return puzzleAgentHttpClient.getSession(sessionId);
|
||
}
|
||
|
||
/**
|
||
* 非流式发送拼图 Agent 消息。
|
||
* 当前 UI 主链使用 SSE,但保留普通接口便于后续降级。
|
||
*/
|
||
export async function sendPuzzleAgentMessage(
|
||
sessionId: string,
|
||
payload: SendPuzzleAgentMessageRequest,
|
||
) {
|
||
return puzzleAgentHttpClient.sendMessage(sessionId, payload);
|
||
}
|
||
|
||
/**
|
||
* 流式发送拼图 Agent 消息。
|
||
* 后端当前会先回传一段 assistant 文本,再附上最新 session 快照。
|
||
*/
|
||
export async function streamPuzzleAgentMessage(
|
||
sessionId: string,
|
||
payload: SendPuzzleAgentMessageRequest,
|
||
options: TextStreamOptions = {},
|
||
) {
|
||
return puzzleAgentHttpClient.streamMessage(sessionId, payload, options);
|
||
}
|
||
|
||
/**
|
||
* 执行拼图结果页相关操作。
|
||
* 后端会返回 operation 记录,前端再按需刷新 session 或 works/gallery。
|
||
*/
|
||
export async function executePuzzleAgentAction(
|
||
sessionId: string,
|
||
payload: PuzzleAgentActionRequest,
|
||
) {
|
||
return puzzleAgentHttpClient.executeAction(sessionId, payload);
|
||
}
|
||
|
||
export const puzzleAgentClient = {
|
||
createSession: createPuzzleAgentSession,
|
||
getSession: getPuzzleAgentSession,
|
||
sendMessage: sendPuzzleAgentMessage,
|
||
streamMessage: streamPuzzleAgentMessage,
|
||
executeAction: executePuzzleAgentAction,
|
||
};
|