- 支持拖拽图片到窗口自动上传到输入栏 - 支持拖拽视频到窗口自动上传到输入栏 - 支持拖拽其他文件触发普通上传 - 多主题适配:经典色(橙色)、浅色(黑色)、深色(白色) - 修复浅色/经典色主题下提示文字看不清的问题
159 lines
4.7 KiB
TypeScript
159 lines
4.7 KiB
TypeScript
// @ts-nocheck
|
||
import { ICONS, TOOL_CATEGORY_ICON_MAP } from '../utils/icons';
|
||
|
||
export function dataState() {
|
||
return {
|
||
// 路由相关
|
||
initialRouteResolved: false,
|
||
dropToolEvents: false,
|
||
|
||
// 轮询模式标志(禁用 WebSocket 事件处理)
|
||
usePollingMode: true,
|
||
// 后台子智能体等待状态
|
||
waitingForSubAgent: false,
|
||
// 后台 run_command 等待状态(用于文案区分)
|
||
waitingForBackgroundCommand: false,
|
||
// 是否在对话区展示 system 消息
|
||
hideSystemMessages: true,
|
||
|
||
// 工具状态跟踪
|
||
preparingTools: new Map(),
|
||
activeTools: new Map(),
|
||
toolActionIndex: new Map(),
|
||
toolStacks: new Map(),
|
||
// 当前任务是否仍在进行中(用于保持输入区的"停止"状态)
|
||
taskInProgress: false,
|
||
// 等待后台通知期间,用于发现并接管新建任务的轮询定时器
|
||
waitingTaskProbeTimer: null,
|
||
// 记录上一次成功加载历史的对话ID,防止初始化阶段重复加载导致动画播放两次
|
||
lastHistoryLoadedConversationId: null,
|
||
|
||
// ==========================================
|
||
// 对话管理相关状态
|
||
// ==========================================
|
||
|
||
// 搜索功能
|
||
// ==========================================
|
||
searchRequestSeq: 0,
|
||
searchActiveQuery: '',
|
||
searchResultIdSet: new Set(),
|
||
searchPreviewCache: {},
|
||
|
||
// Token统计相关状态(修复版)
|
||
// ==========================================
|
||
|
||
// 对话压缩状态
|
||
compressing: false,
|
||
compressionInProgress: false,
|
||
compressionMode: '',
|
||
compressionStage: '',
|
||
compressionError: '',
|
||
compressionToastId: null,
|
||
skipConversationLoadedEvent: false,
|
||
skipConversationHistoryReload: false,
|
||
_scrollListenerReady: false,
|
||
historyLoading: false,
|
||
historyLoadingFor: null,
|
||
historyLoadSeq: 0,
|
||
blankHeroActive: false,
|
||
blankHeroExiting: false,
|
||
blankWelcomeText: '',
|
||
lastBlankConversationId: null,
|
||
// 对话标题打字效果
|
||
titleTypingText: '',
|
||
titleTypingTarget: '',
|
||
titleTypingTimer: null,
|
||
titleReady: false,
|
||
suppressTitleTyping: false,
|
||
headerMenuOpen: false,
|
||
blankWelcomePool: [
|
||
'有什么可以帮忙的?',
|
||
'想了解些热点吗?',
|
||
'要我帮你完成作业吗?',
|
||
'整点代码?',
|
||
'随便聊点什么?',
|
||
'想让我帮你整理一下思路吗?',
|
||
'要不要我帮你写个小工具?',
|
||
'发我一句话,我来接着做。'
|
||
],
|
||
mobileViewportQuery: null,
|
||
modeMenuOpen: false,
|
||
modelMenuOpen: false,
|
||
permissionMenuOpen: false,
|
||
currentPermissionMode: 'unrestricted',
|
||
versioningHostMode: false,
|
||
versioningEnabled: false,
|
||
newConversationVersioningEnabled: false,
|
||
versioningMode: 'overwrite',
|
||
versioningMismatch: false,
|
||
versioningWorkspaceMatched: true,
|
||
versioningDialogOpen: false,
|
||
versioningLoading: false,
|
||
versioningCheckpoints: [],
|
||
versioningSelectedSeq: null,
|
||
versioningSelectedDetail: null,
|
||
versioningDetailLoading: false,
|
||
versioningRestoring: false,
|
||
versioningRestoreMode: 'overwrite',
|
||
permissionModeOptions: [
|
||
{
|
||
value: 'readonly',
|
||
label: '只读',
|
||
description: '仅允许读取/搜索类工具,禁止修改工作区'
|
||
},
|
||
{
|
||
value: 'approval',
|
||
label: '批准',
|
||
description: '对工作区文件进行修改的工具需用户批准后才会执行'
|
||
},
|
||
{
|
||
value: 'unrestricted',
|
||
label: '无限制',
|
||
description: '保持当前默认行为,不额外拦截'
|
||
}
|
||
],
|
||
pendingToolApprovals: [],
|
||
decidingApprovalIds: [],
|
||
imageEntries: [],
|
||
imageLoading: false,
|
||
videoEntries: [],
|
||
videoLoading: false,
|
||
conversationHasImages: false,
|
||
conversationHasVideos: false,
|
||
conversationListRequestSeq: 0,
|
||
conversationListRefreshToken: 0,
|
||
connectionHeartbeatTimer: null,
|
||
connectionHeartbeatFailCount: 0,
|
||
connectionHeartbeatIntervalMs: 8000,
|
||
|
||
// 工具控制菜单
|
||
icons: ICONS,
|
||
toolCategoryIcons: TOOL_CATEGORY_ICON_MAP,
|
||
|
||
// 对话回顾
|
||
reviewDialogOpen: false,
|
||
reviewSelectedConversationId: null,
|
||
reviewSubmitting: false,
|
||
reviewPreviewLines: [],
|
||
reviewPreviewLoading: false,
|
||
reviewPreviewError: null,
|
||
reviewPreviewLimit: 20,
|
||
reviewSendToModel: true,
|
||
reviewGeneratedPath: null,
|
||
|
||
// 新手教程首次引导弹窗
|
||
tutorialPromptVisible: false,
|
||
tutorialPromptLoading: false,
|
||
tutorialPromptUsername: '',
|
||
|
||
// 拖拽上传状态
|
||
dragOverActive: false,
|
||
|
||
// 拖拽事件绑定函数(用于正确移除监听)
|
||
_boundDragEnter: null,
|
||
_boundDragOver: null,
|
||
_boundDragLeave: null,
|
||
_boundDrop: null
|
||
};
|
||
}
|