diff --git a/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx b/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx
index e50e25560a7..169ecbba8f3 100644
--- a/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx
+++ b/packages/web-shell/client/components/QueuedPromptDisplay.test.tsx
@@ -73,6 +73,36 @@ describe('QueuedPromptDisplay', () => {
expect(container.textContent).toContain('排队消息二');
});
+ it('shows server queue status without an insert action', () => {
+ const onInsert = vi.fn();
+ const { container } = setup({
+ prompts: [{ id: 1, text: '等待处理', serverState: 'queued' }],
+ onInsert,
+ });
+
+ expect(container.textContent).toContain('服务器排队中...');
+ expect(container.querySelector('[role="status"]')).toBeTruthy();
+ expect(
+ container.querySelector('[class*="queuedPromptSpinner"]'),
+ ).toBeNull();
+ const buttons = [...container.querySelectorAll('button')];
+ expect(buttons).toHaveLength(2);
+ expect(buttons.every((button) => !button.disabled)).toBe(true);
+ expect(container.textContent).not.toContain('插入');
+ expect(onInsert).not.toHaveBeenCalled();
+ });
+
+ it('keeps the spinner while a prompt is still submitting', () => {
+ const { container } = setup({
+ prompts: [{ id: 1, text: '正在发送', serverState: 'submitting' }],
+ });
+
+ expect(container.textContent).toContain('提交中...');
+ expect(
+ container.querySelector('[class*="queuedPromptSpinner"]'),
+ ).toBeTruthy();
+ });
+
it('renders queued reference annotations as tags', () => {
const serialized = 'orders';
const text = `inspect ${serialized} now`;
diff --git a/packages/web-shell/client/components/QueuedPromptDisplay.tsx b/packages/web-shell/client/components/QueuedPromptDisplay.tsx
index 7e0bef08eb2..d68d45c893c 100644
--- a/packages/web-shell/client/components/QueuedPromptDisplay.tsx
+++ b/packages/web-shell/client/components/QueuedPromptDisplay.tsx
@@ -163,6 +163,7 @@ export function QueuedPromptDisplay({
const imageCount = prompt.images?.length ?? 0;
const isCommand = isCommandPrompt(prompt.text);
const isSubmitting = prompt.serverState === 'submitting';
+ const isQueued = prompt.serverState === 'queued';
const isRunning = prompt.serverState === 'running';
const isRemoving = prompt.isRemoving === true;
const isBusy =
@@ -208,19 +209,23 @@ export function QueuedPromptDisplay({
{imageCount > 0
? ` ${t('queue.imageCount', { count: imageCount })}`
: ''}
- {isSubmitting || prompt.isEditing || isRemoving ? (
-
-
+ {isSubmitting || isQueued || prompt.isEditing || isRemoving ? (
+
+ {(isSubmitting || prompt.isEditing || isRemoving) && (
+
+ )}
{isRemoving
? t('queue.removing')
: prompt.isEditing
? t('queue.editing')
- : t('queue.submitting')}
+ : isQueued
+ ? t('queue.serverQueued')
+ : t('queue.submitting')}
) : null}
- {imageCount === 0 && (
+ {imageCount === 0 && !isQueued && (