diff options
| author | Adam Malczewski <[email protected]> | 2026-10-24 16:55:38 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-10-24 16:55:38 +0900 |
| commit | 83442d00d9d9c7f0ca200d6a2e8b42195708493f (patch) | |
| tree | ebeeef6c49d4cc3f5974e59b1156de3e5e4c7c6d /src/app/views | |
| parent | a4aa86e66dad93f40bce640545d8903f7e6bcb64 (diff) | |
| parent | c8b2fb49835bde2f85d99a91b313e6a01ce1359c (diff) | |
| download | dispatch-web-83442d00d9d9c7f0ca200d6a2e8b42195708493f.tar.gz dispatch-web-83442d00d9d9c7f0ca200d6a2e8b42195708493f.zip | |
Merge local dev into feature/close-tab-cascade-subagents
Diffstat (limited to 'src/app/views')
| -rw-r--r-- | src/app/views/ChatPane.svelte | 13 | ||||
| -rw-r--r-- | src/app/views/ComposerPane.svelte | 10 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/app/views/ChatPane.svelte b/src/app/views/ChatPane.svelte index 636cd7c..d132fad 100644 --- a/src/app/views/ChatPane.svelte +++ b/src/app/views/ChatPane.svelte @@ -7,13 +7,18 @@ * preservation, the ScrollToBottom affordance, and the empty-state * watermark. Keyed on the active conversation exactly like today's ChatView. */ - import { ChatView } from "../../features/chat"; + import { ChatView, PendingInputs, isClaudeSubscriptionModel } from "../../features/chat"; import { createSmartScrollController, ScrollToBottom } from "../../features/smart-scroll"; import { preserveViewportAcross, type AppViewPorts } from "../view-ports"; let { ports }: { ports: AppViewPorts } = $props(); const store = $derived(ports.store); + // Cache timer: Claude Code subscription models only (5-minute prompt-cache expiry). + const cacheTimer = $derived( + isClaudeSubscriptionModel(store.activeModel) ? store.activeChat.cacheTimer : null, + ); + // One controller owns the chat scroll region; the effects below feed it the // edges (identical to the App.svelte wiring this moved out of). const smartScroll = createSmartScrollController(); @@ -75,17 +80,21 @@ {#key store.activeConversationId} <ChatView chunks={store.activeChat.chunks} + recovering={store.activeChat.recovering} turnMetrics={store.activeChat.turnMetrics} hasEarlier={store.activeChat.hasEarlier} onShowEarlier={handleShowEarlier} thinkingKeyBase={store.activeChat.thinkingKeyBase} providerRetry={store.activeChat.providerRetry} apiBaseUrl={store.httpBase} + cwd={store.cwd} + {cacheTimer} /> {/key} + <PendingInputs inputs={store.activeChat.pendingInputs} onDiscard={store.activeChat.discardPendingInput} /> </div> </div> - {#if store.activeChat.chunks.length === 0} + {#if store.activeChat.chunks.length === 0 && store.activeChat.pendingInputs.length === 0} <div class="pointer-events-none absolute inset-0 flex items-center justify-center" aria-hidden="true" diff --git a/src/app/views/ComposerPane.svelte b/src/app/views/ComposerPane.svelte index dcd5b47..00dbc9f 100644 --- a/src/app/views/ComposerPane.svelte +++ b/src/app/views/ComposerPane.svelte @@ -6,11 +6,18 @@ * is a persistent column fixture, exactly like today. */ import { Composer, type ComposerStatus } from "../../features/chat"; + import { MESSAGE_QUEUE_RENDERER_ID, messageQueueCount } from "../../features/surface-host"; import type { AppViewPorts } from "../view-ports"; let { ports }: { ports: AppViewPorts } = $props(); const store = $derived(ports.store); + const queuedMessageCount = $derived( + store.activeConversationId === null + ? undefined + : messageQueueCount(store.surface(MESSAGE_QUEUE_RENDERER_ID, store.activeConversationId)), + ); + // Priority: error > queued > running > idle. `queued` (the turn is in flight // but waiting for a concurrency slot — CR-13) wins over `running` so the // corner shows a ring, not dots, during the wait. `turn-start` fires before @@ -27,9 +34,10 @@ <Composer onSend={(text, images) => store.send(text, images)} - onQueue={(text) => store.queueMessage(text)} + onQueue={(text, images) => store.queueMessage(text, images)} onStop={() => store.stopGeneration()} contextSize={store.activeChat.currentContextSize} contextWindow={store.modelInfo[store.activeModel]?.contextWindow} + {queuedMessageCount} status={composerStatus} /> |
