feat(mindspace): 悬浮聊天勾选资料联动、UI 与交互优化

勾选单个文件时 Agent 获知上下文并主动问候;打开悬浮窗使用新会话。
统一弹窗浅色主题、固定高度与输入区布局,支持点击外部收起。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-06-30 02:17:36 +08:00
parent 2c91689692
commit 71e536eceb
10 changed files with 609 additions and 47 deletions
+14 -4
View File
@@ -1,8 +1,8 @@
import { useEffect } from 'react';
import { useEffect, useMemo } from 'react';
import { useChat } from '../context/ChatProvider';
import { INSUFFICIENT_BALANCE_NOTICE } from '../hooks/useTKMindChat';
import type { PageEditSubChatBridge } from '../hooks/usePageEditSubChat';
import type { MindSpaceChatContext, MindSpaceSaveCategory, PortalUser } from '../types';
import type { MindSpaceChatContext, MindSpaceSaveCategory, PortalUser, Message } from '../types';
import { formatContextChip } from '../utils/mindspaceChatContext';
import { ChatPanel } from './ChatPanel';
import { TKMindAvatar } from './TKMindAvatar';
@@ -17,6 +17,7 @@ export function SpaceChatPanel({
chatBridge,
hideOpenFullChat = false,
title = 'TKMind',
prefillMessages = [],
}: {
open: boolean;
context: MindSpaceChatContext;
@@ -31,6 +32,7 @@ export function SpaceChatPanel({
chatBridge?: PageEditSubChatBridge;
hideOpenFullChat?: boolean;
title?: string;
prefillMessages?: Message[];
}) {
const mainChat = useChat();
const chat = chatBridge ?? mainChat;
@@ -59,6 +61,15 @@ export function SpaceChatPanel({
return () => window.removeEventListener('keydown', handleKeyDown);
}, [open, onClose]);
const displayMessages = useMemo(() => {
if (!prefillMessages.length) return messages;
if (messages.some((message) => message.role === 'user')) return messages;
const extras = prefillMessages.filter(
(item) => !messages.some((message) => message.id && message.id === item.id),
);
return extras.length ? [...messages, ...extras] : messages;
}, [messages, prefillMessages]);
if (!open) return null;
const contextLabel = formatContextChip(context);
@@ -119,7 +130,7 @@ export function SpaceChatPanel({
<ChatPanel
variant="compact"
user={user}
messages={messages}
messages={displayMessages}
chatState={chatState}
pendingTool={pendingTool}
session={session}
@@ -132,7 +143,6 @@ export function SpaceChatPanel({
onStop={stop}
onApproveTool={approveTool}
onPageSaved={onPageSaved}
onClose={onClose}
/>
</div>
);