feat(coding): add renderer conversation store

This commit is contained in:
2026-08-23 22:04:55 +08:00
parent a0722574f3
commit 36626c88b5
14 changed files with 2703 additions and 1227 deletions

View File

@@ -0,0 +1,55 @@
import type {
ConversationSnapshot,
PromptAcceptance,
PromptMode,
} from '@/types/coding-conversation';
import {
createHostEventSource,
ensureHostApiToken,
hostApiFetch,
} from './host-api';
export interface SubmitCodingConversationPromptInput {
conversationId: string;
clientRequestId: string;
mode: PromptMode;
text: string;
attachments: Array<{ attachmentId: string }>;
}
export async function getCodingConversationSnapshot(
conversationId: string,
): Promise<ConversationSnapshot> {
const response = await hostApiFetch<{ snapshot: ConversationSnapshot }>(
`/api/coding/conversations/${encodeURIComponent(conversationId)}/snapshot`,
);
return response.snapshot;
}
export async function submitCodingConversationPrompt(
input: SubmitCodingConversationPromptInput,
): Promise<PromptAcceptance> {
const response = await hostApiFetch<{ acceptance: PromptAcceptance }>(
`/api/coding/conversations/${encodeURIComponent(input.conversationId)}/prompt`,
{
method: 'POST',
body: JSON.stringify({
clientRequestId: input.clientRequestId,
mode: input.mode,
text: input.text,
attachments: input.attachments,
}),
},
);
return response.acceptance;
}
export async function openCodingConversationEvents(
conversationId?: string,
): Promise<EventSource> {
await ensureHostApiToken();
const params = new URLSearchParams();
if (conversationId) params.set('conversationId', conversationId);
const query = params.toString();
return createHostEventSource(`/api/coding/events${query ? `?${query}` : ''}`);
}