fix: restore coding history and quota feedback
This commit is contained in:
@@ -143,6 +143,12 @@ async function installCodingFirstChatHost(
|
||||
: null,
|
||||
modelResolution: featureComplete ? 'resolved' : 'required',
|
||||
};
|
||||
const historyConversation = {
|
||||
...conversation,
|
||||
id: 'conversation-pi-history',
|
||||
title: 'History and quota',
|
||||
updatedAt: '2026-08-23T23:58:00.000Z',
|
||||
};
|
||||
const snapshot = {
|
||||
schemaVersion: 1,
|
||||
conversation: {
|
||||
@@ -353,6 +359,39 @@ async function installCodingFirstChatHost(
|
||||
error: { code: 'CODING_RUNTIME_START_FAILED', message: 'Worker stopped', recoverable: true },
|
||||
},
|
||||
};
|
||||
const historySnapshot = {
|
||||
...snapshot,
|
||||
conversation: {
|
||||
...snapshot.conversation,
|
||||
id: historyConversation.id,
|
||||
title: historyConversation.title,
|
||||
},
|
||||
nodes: [
|
||||
...Array.from({ length: 150 }, (_, index) => ({
|
||||
kind: 'message',
|
||||
id: `history-message-${index}`,
|
||||
role: 'user',
|
||||
status: 'complete',
|
||||
blocks: [{
|
||||
kind: 'text',
|
||||
id: `history-message-${index}:content:0`,
|
||||
text: `History message ${index}`,
|
||||
status: 'complete',
|
||||
}],
|
||||
})),
|
||||
{
|
||||
kind: 'notice',
|
||||
id: 'history-quota-notice',
|
||||
code: 'CODING_PROVIDER_QUOTA_EXHAUSTED',
|
||||
level: 'error',
|
||||
message: '词元点数余额不足,请充值后重试。',
|
||||
},
|
||||
],
|
||||
run: { status: 'idle' },
|
||||
queue: { items: [] },
|
||||
pendingInteractions: [],
|
||||
worker: { status: 'ready', generation: 1 },
|
||||
};
|
||||
const respond = (json: unknown, status = 200) => ({
|
||||
ok: true,
|
||||
data: { status, ok: status >= 200 && status < 300, json },
|
||||
@@ -453,7 +492,7 @@ async function installCodingFirstChatHost(
|
||||
if (path === `/api/coding/projects/conversations?projectId=${project.id}`) {
|
||||
return respond({
|
||||
conversations: featureComplete
|
||||
? [conversation, secondConversation]
|
||||
? [conversation, secondConversation, historyConversation]
|
||||
: state.conversationCreated
|
||||
? [conversation]
|
||||
: [],
|
||||
@@ -478,6 +517,9 @@ async function installCodingFirstChatHost(
|
||||
if (path === `/api/coding/conversations/${secondConversation.id}/snapshot`) {
|
||||
return respond({ snapshot: secondSnapshot });
|
||||
}
|
||||
if (path === `/api/coding/conversations/${historyConversation.id}/snapshot`) {
|
||||
return respond({ snapshot: historySnapshot });
|
||||
}
|
||||
if (path === `/api/coding/conversations/${conversation.id}/prompt` && method === 'POST') {
|
||||
return respond({
|
||||
acceptance: {
|
||||
@@ -890,6 +932,29 @@ test('PI feature UI isolates Conversations and exposes queue, interaction, model
|
||||
await expect(page.getByRole('textbox')).toHaveValue('');
|
||||
await page.getByRole('button', { name: '恢复' }).click();
|
||||
|
||||
await builderConversations.getByRole('button', { name: 'History and quota' }).click();
|
||||
const historyProcess = page.getByTestId('coding-process-group');
|
||||
await expect(historyProcess.locator('summary').first())
|
||||
.toContainText('词元点数余额不足,请充值后重试。');
|
||||
await expect(page.getByText('History message 0')).toHaveCount(0);
|
||||
await expect(page.getByText('History message 31')).toHaveCount(1);
|
||||
const historyTimeline = page.getByTestId('coding-conversation-timeline');
|
||||
const beforeHeight = await historyTimeline.evaluate((element) => {
|
||||
element.scrollTop = 0;
|
||||
const height = element.scrollHeight;
|
||||
element.dispatchEvent(new Event('scroll', { bubbles: true }));
|
||||
return height;
|
||||
});
|
||||
await expect(page.getByText('History message 0')).toHaveCount(1);
|
||||
const anchoredScroll = await historyTimeline.evaluate((element) => ({
|
||||
scrollHeight: element.scrollHeight,
|
||||
scrollTop: element.scrollTop,
|
||||
}));
|
||||
expect(anchoredScroll.scrollTop).toBeGreaterThan(0);
|
||||
expect(Math.abs(
|
||||
anchoredScroll.scrollTop - (anchoredScroll.scrollHeight - beforeHeight),
|
||||
)).toBeLessThanOrEqual(2);
|
||||
|
||||
await expect(page.getByText(/编程工具|分享|取消分享|回滚|恢复回滚|待办|全局运行时/)).toHaveCount(0);
|
||||
const state = await readState(electronApp);
|
||||
expect(state.captured.some((request) => request.path.endsWith('/model') && request.method === 'POST')).toBe(true);
|
||||
|
||||
Reference in New Issue
Block a user