Merge branch 'pr-44' into feat/multi-gateway

# Conflicts:
#	packages/client/src/components/layout/AppSidebar.vue
This commit is contained in:
ekko
2026-04-18 13:12:42 +08:00
9 changed files with 719 additions and 40 deletions
@@ -11,7 +11,15 @@ const chatStore = useChatStore()
const message = useMessage()
const { t } = useI18n()
const showSessions = ref(true)
// Initialize synchronously from the media query so first paint is correct.
// On narrow viewports the session list is an absolute-positioned overlay
// (z-index 10) on top of the chat area; if we default to `true`, onMounted
// only flips it to `false` AFTER the first render, causing a visible flash
// where the session list covers the chat content ("auto-fixes after a
// moment" — that was the race).
const showSessions = ref(
typeof window === 'undefined' || !window.matchMedia('(max-width: 768px)').matches,
)
let mobileQuery: MediaQueryList | null = null
function handleSessionClick(sessionId: string) {
@@ -45,7 +45,7 @@ watch(
scrollToBottom,
);
watch(
() => chatStore.isStreaming,
() => chatStore.isRunActive,
(v) => {
if (v) scrollToBottom();
},
@@ -61,7 +61,7 @@ watch(currentToolCalls, scrollToBottom);
</div>
<MessageItem v-for="msg in displayMessages" :key="msg.id" :message="msg" />
<Transition name="fade">
<div v-if="chatStore.isStreaming" class="streaming-indicator">
<div v-if="chatStore.isRunActive" class="streaming-indicator">
<video
:src="isDark ? thinkingVideoDark : thinkingVideoLight"
autoplay