thzxx
|
ce930560f8
|
feat: RAG回复显示知识库来源,含文件名和相似度分数
|
2026-04-04 23:46:16 +08:00 |
|
Metona
|
c8bf90f64b
|
fix: 修复 chatAreaEl 重复声明报错
|
2026-04-04 21:43:32 +08:00 |
|
Metona
|
12843f09a5
|
feat: 智能滚动 - 流式回复时可向上查看历史,浮动按钮回到底部
- 流式输出时不再强制锁定底部,用户可自由滚动查看历史
- 滚动离开底部时显示「回到底部」浮动按钮(sticky 定位)
- 点击按钮平滑滚动并恢复自动跟踪
- 用户手动滚回底部时自动恢复跟踪
- 发送消息/新建会话时自动重置为跟踪状态
- 首次渲染(加载历史)强制滚到底部
|
2026-04-04 21:41:26 +08:00 |
|
Metona
|
35a3b5815f
|
fix: 文件图标按类型区分,统一两个组件的图标映射
|
2026-04-04 21:20:20 +08:00 |
|
Metona
|
5259b8017a
|
refactor: 文件上传展示与发送逻辑分离
- 消息对象新增 files 元数据数组(name/language/size)和 _fileContents 内容数组
- content 字段仅保留用户输入的纯文本
- 新增 buildApiMessages() 构建 API 消息时动态拼接文件内容
- chat-area 渲染时从 msg.files 取文件名+图标展示 chip,不暴露文件内容
- 用户消息气泡内文件 chip 用紫色主题区分于输入区的青色 chip
- 导出功能(MD/HTML/TXT)同步适配
|
2026-04-04 21:15:02 +08:00 |
|
thzxx
|
be4e7bf101
|
fix: 移除 safeMarkdown 中的 sanitize 调用,修复消息渲染问题
- safeMarkdown 不再调 sanitize,直接用 marked 输出
- marked 产出的 HTML 已经足够安全(代码块、列表等)
- sanitizer.js 保留供 marked-config.js 链接安全检查使用
- 修复 catch 块中改用 assistantContent 而非 DOM textContent
|
2026-04-03 12:54:17 +08:00 |
|
thzxx
|
17a818c3da
|
fix: 停止时消息内容显示 undefined — 彻底修复
根本原因:catch 块从 DOM 读 textContent 存在时序问题,改为直接用
assistantContent 变量(已在 try 外声明),完全绕过 DOM 读取。
改动:
- catch 块:不再读 contentDiv.textContent,直接用 assistantContent
- appendMessageDOM:空内容不调 safeMarkdown 避免生成空 <p>
- 通用错误处理同样改用 assistantContent
|
2026-04-03 12:46:30 +08:00 |
|
thzxx
|
38edaee0f0
|
refactor: 模块化架构重构
将单文件巨型 IIFE (1608行) 拆分为 14 个 ES Module:
核心层:
- js/state.js - 轻量级响应式状态管理 (发布-订阅)
- js/utils.js - 通用工具函数
- js/sanitizer.js - HTML XSS 净化器
- js/marked-config.js - Markdown 渲染器配置
组件层:
- js/components/chat-area.js - 消息渲染/流式更新/导出
- js/components/input-area.js - 文本输入/图片上传/发送
- js/components/history-modal.js - 历史记录面板/搜索/分页
- js/components/settings-modal.js - 设置面板/数据管理
- js/components/header.js - 顶部导航/连接状态
- js/components/model-bar.js - 模型选择栏
- js/components/toast.js - Toast 通知
- js/components/lightbox.js - 图片预览
入口层:
- js/app.js - 主入口/初始化协调
index.html: 1608行 → 204行纯模板
|
2026-04-03 11:34:24 +08:00 |
|