🚀 生产力引擎:快速上手指南
V5.2.0: 🔧 视频预览卡片缺陷修复 — 去重 + 重试限制
- 修复:
fetchVideoTaskResult(null)无限重试循环 — 缺少重试上限,添加最多 10 次重试(20 秒后放弃并显示错误) - 修复:
fetchVideoTaskResult(taskId)状态为 running/pending 时的无限重试 — 改为最多容错 1 次(独立轮询会接管后续追踪) - 修复:
checkRunningTasks与startBackgroundTaskPolling使用独立去重集合导致重复注入 — 统一使用_seenVideoTasks+_lastNotifiedTaskIds双集合去重 - 修复:
renderVideoInPreviewCard渲染完成后未标记任务为已见 — 添加_seenVideoTasks.add()防止后台轮询再次注入相同视频
V5.2.0: 📋 侧边栏精简 — V5.0 系统工具迁移至总后台
- 移除:左侧用户侧边栏移除「V5.0 上下文监控」和「V5.0 会话管理」入口,减少普通用户视觉噪音
- 新增:管理后台 (admin.html) 新增「V5.0 系统工具」导航分组,包含上下文监控和会话管理入口
- 设计理由:上下文监控和会话管理属于运维/管理工具,不适合直接暴露给终端用户
V5.2.0: 🎬 即梦风格视频预览卡片 — 对话窗口内嵌实时进度 + 回访恢复
- 新增:视频预览卡片系统 — 仿即梦平台设计,提交视频/数字人后对话窗口自动插入预览卡片,显示深色渐变背景、脉动图标、实时进度条和耗时
- 新增:双通道进度轮询 — SSE video_progress 事件 + 独立 HTTP 轮询 (startVideoPreviewPolling),SSE 断开后仍持续追踪任务状态
- 新增:完成自动播放 — 任务完成后预览卡片直接切换为内嵌视频播放器,无需刷新页面
- 新增:失败提示 — 任务失败时卡片变为红色警告,5秒后自动淡出并显示错误原因
- 新增:页面回访恢复 — restoreVideoPreviewCard 检测未完成任务,用户重新打开对话窗口时自动恢复预览卡片和轮询
- 重构:Agent 路径统一任务管理 — generate_video / generate_digital_human Agent 工具现在创建内部 TaskRecord,统一走任务中心 + executeVideoTask 生命周期管理
V4.74.0: 🗂️ 聊天生成媒体一键跳转云盘位置
- 新增:查看云盘位置按钮 — 对话中生成图片/视频后,预览卡片下方新增「查看云盘位置」按钮(文件夹图标),点击直接打开个人云盘并自动定位、高亮滚动到对应文件
- 智能识别存储位置 — 自动从生成结果 URL 解析出云盘中的实际文件路径,无需用户手动翻找(对话生成/任务轮询/历史消息恢复全部覆盖)
- 定位高亮 — 云盘中目标文件卡片带蓝色描边脉冲高亮并自动滚动到视口中央,5 秒后恢复
- 变更文件: public/static/js/chat.js、public/static/css/main.css
V4.73.0: 🏢 企业管理后台系统化升级 — 成员信息完善 + 企业资料扩展
- 新增:成员资料字段 — 真实姓名、手机号、邮箱、职务、个人简介
- 新增:成员详情/编辑模态框 — 点击成员查看完整资料,支持在线编辑保存
- 新增:企业资料字段 — 所属行业、联系电话、联系邮箱、企业地址
- 优化:成员列表 — 显示姓名、职务、手机号,替代原有仅显示用户ID
- 优化:成员名片 — 展示完整信息(姓名/职务/部门/手机/邮箱/简介),hover 交互效果
- 优化:仪表盘 — 展示企业行业、联系方式、地址、介绍等完整信息
- 优化:企业设置 — 双列布局,新增行业/电话/邮箱/地址字段
- 优化:成员搜索 — 支持按姓名、手机号、职务、昵称多维度搜索
- 增强:成员详情 — 展示操作次数、本月消费、Token用量等统计
- 新增:API — PUT /api/enterprise/members/:userId/profile 更新成员资料
V4.72.0: 🎨 Agent 绘画提示词智能增强 — 大模型分析意图 + 多提示词生成
- 新增:Agent 绘画模式新增「大模型分析意图并优化提示词」步骤
- 优化:LLM(qwen3.7-plus)自动分析用户意图,输出优化后的英文绘画提示词
- 新增:支持多提示词生成 — LLM 输出多个增强提示词时,连续生成对应多张图片
- 新增:服务端 /api/agent/enhance-prompt 端点,专用于绘画提示词增强
- 优化:触发 Agent 绘画时显示「🧠 大模型正在分析意图并优化绘画提示词...」状态
- 增强:保留原始提示词作为保底,LLM 服务不可用时自动降级
V4.72.0: ComfyUI 自定义生图异步任务化 — 彻底消除超时错误
- 核心修复:ComfyUI 文生图(/api/comfyui/generate)与图生图(/api/comfyui/edit-image)从同步阻塞模式改为完全异步任务模式
- 同步模式下 ComfyUI 排队时 120 秒超时报错的问题已根治
- 提交生图请求后立即返回 taskId,后台无限轮询(不设超时)直到 ComfyUI 完成
- 支持排队感知:ComfyUI 繁忙时自动显示排队位置(前方N个任务)
- 任务中心集成:生图任务自动注册到用户任务中心,离开对话框后可随时查看进度
- 服务器重启恢复:任务状态持久化存储,重启后自动恢复轮询(不丢任务)
- 网络中断保护:每 2 分钟自动扫描丢失轮询的任务并恢复,30 秒无响应自动重连
- 取消支持:在任务中心可取消正在排队/执行中的生图任务
- 前端适配:生成中显示等待时长(分钟),不再假死卡住
- 技能端点同步升级:/api/skills/:skillId/comfyui/generate 也改为异步模式
- 文件变更:hyperframes-module.ts(新增 executeComfyUIGenerateTask 后台执行器)、skills-routes-module.ts(新增 executeSkillComfyUITask)、chat.js(三处异步轮询改造)、server.ts(恢复跳过+deps 透传)
V4.71.2: 🛠️ ComfyUI 工作流导入修复 + AI 增强 + 模型广场配置管理
- 新增:管理后台 → 模型管理 → 模型广场 支持修改 API 地址和密钥
- 优化:模型广场 URL 现在可从后台配置,不再硬编码
- 修复:导入 ComfyUI 工作流时自动将 UI 格式转换为 API 格式,确保生成功能可用
- 新增:导入工作流后自动调用大模型分析,自动生成技能名称、描述和使用说明
V4.71.1: 🗑️ 移除即梦(Jimeng)图片生成引擎
- 移除:即梦 4.0 文生图 / 图生图所有后端代码(generateJimengImage / generateJimengImg2Img)
- 移除:api-key.json 中的 volc_ak / volc_sk 密钥
- 移除:@volcengine/openapi npm 依赖
- 移除:模型广场中的「即梦 4.0」「即梦 图生图」内置模型
- 移除:即梦作为 ComfyUI 备选引擎的所有兜底路径
- 移除:前端模型图标中即梦的 SVG 图标
- 替代方案:图片生成仅通过 ComfyUI(qwen-image 技能)
V4.71.0: 🛠️ 技能路由修复 — 技能引用不再被跳过
- 修复:技能检测(detectSkill)改为评分制,匹配更精准的而非数组第一个
- 修复:技能检测结果实际影响路由(modelOverride + handlerName 绑定)
- 修复:意图关联技能(relatedSkills)反向查找,技能触发不依赖 sub-string 匹配
- 修复:前端技能引用卡片发送时不会被提前清除,_checkSkill 能正确检测
- 修复:技能引用文本包含 (id: xxx),regex 检查也能匹配
- 新增:SkillInfo 接口增加 modelOverride/handlerName 字段
- 新增:前端 SSE 处理 skill_detected 事件,thinking 区域显示技能激活消息
V4.64.1: 🎬 画面分析超时修复 + 封面兜底 + 状态匹配修复
- Phase2 超时修复:Promise.race 30s → 90s,3帧画面分析不会因超时被截断
- 封面兜底:无 og:image 时自动使用视频第一帧截图作为封面分析
- 状态匹配修复:卡片渲染兼容异步任务返回的
completed状态(之前只匹配complete)
V4.64.0: 🎬 视频分析异步化 — 彻底解决 Apache 代理超时
- 根因修复:Apache 代理默认 60s 超时导致视频分析返回 HTML 错误页 → 前端 JSON 解析报
Unexpected token '<' - 异步任务模式:POST /api/analyze/video 立即返回
{ taskId, status: 'pending' },后台执行分析 - 进度追踪:任务系统实时更新进度(0-100%),前端每 3s 轮询显示进度
- 结果查询:GET /api/analyze/video?taskId=xxx 查询完整分析结果
- 不影响现有功能:轮询结果结构与旧同步响应完全兼容
- 任务清理:Playwright 视频临时文件分析完成后自动删除
V4.63.2: 🎬 抖音视频分析 — Playwright 直接下载视频 + 本地音频提取
- 核心修复:yt-dlp无法下载抖音视频、ffmpeg无法从远程URL提取音频的问题
- Playwright 脚本增强:douyin_analyze.cjs 新增视频下载功能,利用浏览器上下文(含Cookie)直接下载视频到本地
- 视频文件:保存到任务目录 video.mp4,支持后续 ffmpeg 本地音频提取
- node:http/https 下载:使用 Node.js 原生模块,传递 Cookie + UA + Referer 头,支持重定向跟随
- ffprobe 时长探测:下载完成后自动探测视频时长,存入 info.duration
- server.ts 增强:Playwright 回退时用 ffprobe 探测本地视频文件的时长,确保 Phase 2 画面分析正常触发
- 错误处理:下载超时(120s)、HTTP 非 200、重定向、文件大小检查等全面覆盖
V4.57.0: 💰 后台管理系统 Phase 4 — 扣费集成 — 权限系统集成 — 用户管理完整UI — 基础设施
- 新增 admin-module.ts:SQLite 数据库(14张表) + 权限引擎 + 财务引擎 + 用户管理 + 统计
- 种子数据:39条权限定义 + 6个预设角色 + 4个会员计划 + 3个企业计划 + 10条定价
- 用户迁移:15618615453 → 超级管理员+高级会员,其余 → 免费会员
- 管理员认证:isAdmin() + requireAdmin 中间件
- 权限引擎:checkPermission(userId, permKey) + 角色权限通配符
- 财务引擎:charge() 扣费 + 交易记录 + 消费明细 + 月度账单
- 充值系统:管理员手动充值 + 订单管理 + 审计日志
- 36 个管理 API:企业CRUD/会员管理/部门管理/角色权限/交易记录/定价/系统设置
- admin.html:独立管理后台页面(SPA),含仪表盘+8个子页面
- 登录同步:用户登录时自动同步到后台系统 + 更新最后登录时间
V4.54.1: 💰 扣费系统全面修复
- 修 BUG:9处 .catch(() => {}) 全部改为检查 success 返回值,扣费失败不再静默吞掉
- 补漏点:非流式聊天(stream:false)、画布生图(批量+单张+img2img)、画布分析、ComfyUI视频/编辑、阿里云TTS — 9个缺失点全部补齐
- 新增支付:Omni实时通话(按分钟)、文件解析、KB知识嵌入 — 3种幽灵资源全部落地
- 免费限制:执行30次对话/天限制(429拦截) + 生图次数限制,超出即拒绝
- 余额预检:非免费用户聊天前检查余额,不足返回402拦截(无需等调用完AI再失败)
- 每日用量:新增 daily_usage 表自动记录,charge()内部自动增量,无需各处手写
- 扣费点总计:24处覆盖9种资源类型(image_gen×9, tts×4, token_input×4, token_output×3, video_gen×2, hyperframes×2, plan.upgrade×1, omni_realtime×1, file_parse×1)
V4.54.0: 👥 用户等级体系全面升级
- 注册升级:新增用户类型选择(普通用户/企业用户),注册时同步到数据库
- 等级系统:免费版/普通会员/中级会员/高级会员 四档套餐,含月度价格和权益列表
- 会员中心:侧边栏等级徽章 + 余额显示,点击进入会员中心查看套餐和升级
- 充值系统:支持¥10-1000六档预设金额+自定义金额,创建充值订单
- 后端API:新增 GET /api/user/profile、GET /api/plans、POST /api/user/recharge、POST /api/user/upgrade-plan、GET /api/user/transactions
- 登录增强:登录响应返回用户等级信息,前端自动加载完整资料
V4.53.1: 🔒 安全漏洞修复 + 🐛 布局修复
- 修复 Body username 认证绕过:移除通过 body/query 参数直接认证的宽松回退机制
- 修复邮件内部调用绕过:x-internal-call 头现在仅允许本机 localhost 调用
- 修复 TTS 端点无认证:/api/tts 和 /api/tts/edge 现在需要登录认证
- 修复 HyperFrames 渲染路径遍历+无认证:强制使用已认证用户身份,拒绝 body 传入的 username
- 收紧 WebSocket 认证:移除同源浏览器无条件放行规则,仅允许 Token/Session 认证
- 修复聊天窗口布局崩坏:content-wrapper 从 flex:0 0 auto 改为 flex:1 1 0%,修复输入框位置漂移、对话无法滚动、元素重叠三大问题
V4.53.0: 会议全屏音波动画 + 停止回复
- 🎵 实时音波动画:会议全屏模式输入框上方新增中心对称条形波动画,根据麦克风音量实时律动,无麦克风时显示优雅空闲动画
- ⏹ 发送→停止按钮:发送消息后发送按钮自动变为红色停止按钮,点击即止所有 AI 回复
- 🔄 无限循环讨论:停止后可立即输入新议题进入下一轮,无需退出会议
- 支持多模型会议和 Agent 会议两种模式
V4.52.4: 自定义模型能力开关
- 能力开关按钮: 自定义模型添加/编辑时,每行模型新增「文字」「视觉」「语音」「工具调用」四个可点击切换的标签按钮
- 视觉识别: 勾选「视觉」后,该模型可正常上传和识别图片(之前自定义模型被写死无法传图)
- 能力持久化: 每行模型的能力设置保存到 localStorage,编辑时自动回显
- 服务端支持: 图片消息路由时也会检查自定义模型的 vision 能力字段
- 变更文件: public/static/js/custom-provider.js、public/static/js/chat.js、public/static/css/main.css、server.ts、public/index.html、public/user-manual.html
V4.52.3: 会议/对比模式全屏按钮
- 对比模式全屏: 面板操作栏新增全屏按钮(展开箭头图标),点击后全屏显示对比网格,右上角红色圆形关闭按钮
- 会议模式全屏: 会议顶栏新增全屏按钮,全屏后获得更大聊天空间,同样支持右上角关闭
- 全屏同步: 全屏状态下响应面板的内容变更,关闭时同步回原始面板
- 变更文件: public/static/css/main.css、public/static/js/chat.js、public/index.html、public/user-manual.html
V4.52.0: Phase 1 需求分析深度升级
- Phase 1 拆分为两步: 1a 需求理解(搜集上下文+技能+智能体+模型+附件)→ 1b 方案设计(基于分析报告输出JSON Plan)
- 资源感知: 自动收集可用技能、智能体、模型,注入分析prompt供AI参考调用
- 附件理解: 从消息中提取图片URL和文本附件内容,纳入需求分析
- 分析报告: 输出6维度分析(需求本质、目标用户、核心功能、资源匹配、技术建议、风险点)
- 变更文件: server.ts、lens-orchestrator.ts、public/index.html
🔖 V4.51.0 里程碑: 编排引擎全链路可用版本
- 全链路生成: 需求分析 → 素材生成(qwen-image) → 前端代码 → 后端代码,一个请求完成
- 续写机制: 标准 messages 格式,从截断点精确接续(max_tokens 16384 默认够用)
- 流式代码块: 前后端代码均在对话窗口以代码块实时流式展示
- 文件名修复: 单 ===FILE: 标记正确解析,中文标题自动 fallback
- 全屏预览修复: top-nav 随全屏预览正确隐藏
- 色彩统一: body/main-content/content-wrapper 统一 var(--bg-main)
- 变更文件: server.ts、lens-orchestrator.ts、public/static/css/main.css、public/index.html
V4.50.5: 编排引擎续写机制重构 + 稳定性修复
- 续写改为标准 messages 格式: 复制完整对话历史 + 半截输出 + "继续",从截断点精确接续
- Prompt 消除矛盾指令: 移除多文件/单文件冲突,强制单文件内联输出
- max_tokens 提升: 代码生成从 8192 → 16384,支持完整应用生成
- 文件名安全增强: 纯中文标题自动 fallback 到 application.html
- 续写 markdown 清理: 自动剥离续写输出中的 ``` 标记
- body/toast padding 禁止: Prompt 明确禁止 body 和 toast 的 padding
- 变更文件: server.ts、lens-orchestrator.ts、public/index.html
V4.48.0: 云盘缩略图模式
- 显示方式切换: 批量操作按钮后新增视图切换按钮,支持卡片模式/缩略图模式切换
- 缩略图模式: 图片/视频/音频以大缩略图方式展示,更直观地浏览媒体文件
- 悬停操作: 媒体文件的操作按钮鼠标悬停时才显示,不遮挡缩略图内容
- 视图偏好记忆: 视图模式保存在 localStorage,下次打开自动恢复
- 变更文件: public/index.html、public/static/js/chat.js
V4.24.1: 工作流编辑器全面修复(第二轮) — 内联编辑 + 属性面板 + 画布平移
- _wfInlineField 缺失修复: 节点内嵌输入框/下拉框编辑不保存的 bug,新增完整 inline field 同步函数
- 属性面板冲突修复: 所有内嵌 input/select 添加 stopPropagation,点击编辑不再误开属性面板
- 画布平移体系: 新建/编辑统一画布中心定位 + 滚轮翻页 + 方向键微调 + 右键/Space拖拽 + 双指触控
- 变更文件: public/static/js/chat.js
V4.23.4: 智能 padding — 平衡节点可见与平移空间
- 自适应公式: pad = min(25%视口, max(0, 最左节点-30px)),节点靠左时用小padding保可见,靠右时用大padding保平移
- 变更文件: public/static/js/chat.js
V4.23.3: 编辑时节点可见 + 足量平移空间
- 修复: _wfFitView padding 从 25% 提升到 66% 视口 (1200px宽屏=792px padding),兼顾节点可见与四向平移
- 变更文件: public/static/js/chat.js
V4.23.2: 编辑工作流智能体画布居中 — 与新建统一
- 根因: 编辑已有工作流时 _wfFitView 将 scrollLeft/Top 覆盖为靠近节点的位置,导致右/下平移空间不足
- 修复: 移除 _wfLoadWorkflowV2 中的 _wfFitView 自动调用,编辑和新建统一使用画布中心定位 (scrollLeft=3400, scrollTop=3602)
- 用户仍可通过「自适应」按钮手动居中节点
- 变更文件: public/static/js/chat.js
V4.23.1: _wfFitView 最小滚动 padding — 编辑内置智能体时右/下平移修复
- 根因: _wfFitView 用 Math.max(0, ...) 计算 scrollLeft/scrollTop, 节点靠左时 clamp 到 0 导致无向右/下拖拽空间
- 修复: 自适应视图底部添加 25% 视口最小 padding (scrollLeft≥vw*0.25, scrollTop≥vh*0.25)
- 变更文件: public/static/js/chat.js (_wfFitView)
V4.23.0: 工作流画布初始居中 — 修复无法向右/向下平移
- 根因: 打开工作流编辑器时 scrollLeft/scrollTop = 0, 平移公式 drag-right → scrollLeft 负数 → 浏览器clamp到0 → 感知"无法向右/下移动"
- 新建工作流: 初始滚动到 8000x8000 画布中心, 四个方向均可自由平移
- 编辑已有工作流: 加载后自动调用 _wfFitView 自适应居中
- 变更文件: public/static/js/chat.js
V4.22.22: 10大企业工作流智能体(工作流模式重构)
- 全部切换为工作流模式:每个Agent包含完整的DAG节点图(nodes+edges)
- 智能客服 🎧 (4节点3边): Start→意图分类LLM→专业回复LLM→Answer
- 数据分析专家 📈 (4节点3边): Start→Python代码探索→AI报告生成→Answer
- 代码审查官 🔍 (4节点3边): Start→代码文件扫描→安全/性能审查→Answer
- 文档撰写助手 📝 (4节点3边): Start→文档类型分类→模板化撰写→Answer
- 邮件管家 📧 (4节点3边): Start→场景分类→商务邮件撰写→Answer
- 会议纪要生成器 🎙️ (3节点2边): Start→LLM提取纪要→Answer
- 竞品分析师 🔎 (4节点3边): Start→HTTP搜索→LLM分析→Answer
- 合同审查助手 ⚖️ (3节点2边): Start→LLM审查→Answer
- 社交媒体运营 📱 (4节点3边): Start→平台识别→多平台内容→Answer
- IT运维助手 🖥️ (4节点3边): Start→Bash诊断脚本→AI排障→Answer
- 工作流引擎DAG拓扑排序执行,同层节点并行,VariablePool跨节点传参
- 测试通过:SSE事件流完整(workflow_start→node_start→node_end→workflow_done→done)
V4.22.21: 10大企业智能体内置上线
- 智能客服助手 🎧:处理客户咨询、投诉、售后,支持多轮对话理解意图
- 数据分析专家 📈:CSV/JSON/Excel数据读取,Python分析,可视化图表,洞察报告
- 代码审查官 🔍:安全漏洞、性能瓶颈、代码规范、架构设计全面审查
- 文档撰写助手 📝:PRD、技术方案、项目报告、产品手册、周报月报
- 邮件管家 📧:商务邮件撰写、回复、摘要、分类整理
- 会议纪要生成器 🎙️:从录音/记录生成结构化纪要,自动分配行动项
- 竞品分析师 🔎:SWOT分析、功能对比、定价策略,输出竞品报告
- 合同审查助手 ⚖️:识别风险条款、法律漏洞,给出修改建议和谈判策略
- 社交媒体运营 📱:公众号/小红书/微博/LinkedIn多平台内容创作
- IT运维助手 🖥️:故障诊断、Shell脚本、性能优化、安全加固
- 全部内置为public智能体,所有用户可直接使用
- 每个Agent包含专业SystemPrompt、合理工具集、行业最佳实践
V4.22.20: iPad 工作流编辑器触控全面优化
- 触控手势系统: 为工作流画布(V2全屏编辑器)添加完整的 touchstart/touchmove/touchend 事件处理
- 双指平移: iPad 双指拖动画布,替代鼠标右键/空格+拖拽的桌面操作
- 双指缩放: 捏合手势实时缩放画布,自动同步缩放百分比显示
- 节点触控拖拽: 单指触摸节点标题栏拖拽移动,单击选中,双击打开配置
- 面板→画布放置: 触控设备上节点面板改为点击选中+点击画布放置(替代不兼容的HTML5拖拽)
- 触摸拖拽模拟: 从面板长按拖拽节点到画布放置(带跟随预览)
- 面板拖拽: 节点面板和缩放控件支持触摸拖拽移动位置
- V1内联编辑器: 创建Agent弹窗中的工作流编辑器也支持触控
- iPad样式优化: 44px最小触摸目标、放大按钮/文字、safe-area感知、@media(pointer:coarse)精准匹配触控设备
- 输出端口触控连线: 触摸端口拖拽创建连线,与鼠标操作对等
- 长按取消选择: 长按空白区域取消所有节点选中
V4.22.16: 云盘密码保护 + 工具/技能节点修复
- 云盘密码保护: 文件和文件夹可设置访问密码
- scrypt 加密哈希,与知识库密码保护同等级安全
- 密码提示功能:设置提示帮助记忆
- 锁图标标识:加密项目显示🔒黄色锁图标
- 解锁 token:2小时有效期,自动附加到后续请求
- 限速保护:5次错误后封禁5分钟
- 工具节点修复:require() → ESM import
- 技能节点修复:列表加载 + 配置面板 + 保存逻辑
V4.22.15: 云盘文件引用节点 + 工作流中文化
- 云盘文件节点: 工作流编辑器新增「云盘文件」和「云盘批量」两种节点
- 「云盘文件」: 选择云盘中的单个文件,内容自动注入下游节点
- 「云盘批量」: 支持多文件选择 + 文件夹选择,批量读取文件内容
- 文件选择器: 弹窗式浏览云盘文件,支持图片/文档/代码等全类型
- 服务端 CloudFileNode + CloudFilesNode 节点实现
- 工作流所有节点标签中文化 (Start→开始, LLM→大模型, Code→代码 等)
- WebSocket 语音/视频通话认证修复
V4.22.0: Agent 引擎重构 + 工作流模式内核
- 引擎层重构:engine.ts (587行单体) 拆分为6个模块化文件
- Layer 中间件系统:AOP 横切关注点(执行限制/可观测性),参考 Dify 设计
- 工作流引擎内核:DAG 拓扑排序调度 + 串行/并行节点执行
- VariablePool 数据总线:节点间通过 {{nodeId.varName}} 语法共享变量
- 首批工作流节点:Start / LLM / Code / Answer 四个核心节点
- 双模式路由:AgentConfig.mode 自动切换对话式 Agent 与工作流 Agent
- 图验证与拓扑排序:循环依赖检测 + Kahn BFS 分层算法
V4.22.9: 智能体工作流模式隔离优化
- 模式分流:编辑工作流智能体时直接进入工作流编辑器(独立全屏 overlay),不再先闪现对话表单
- 模式隔离:`switchAgentMode` 切换时保存/恢复各模式独立状态(对话表单 ↔ 工作流画布数据不互串)
- 智能体卡片:工作流类型智能体卡片显示紫色「🔀 工作流」标签
- 对话面板编辑按钮:Agent 对话页新增「⚙️ 编辑」按钮,点击后根据智能体类型定向到正确编辑器
- 代码简化:移除重复的 editAgent monkey-patch(_origEditAgent/_origEdit3 合并为单一清晰入口)
V4.22.8: 全系统安全审计修复
- 严重:移除全局 TLS 验证禁用,改为白名单按需跳过(E5EAI_TLS_INSECURE_HOSTS)
- 严重:移除硬编码管理员手机号,改为环境变量 E5EAI_ADMIN_USERS 配置
- 严重:CORS 策略收紧 — 仅允许内网+白名单来源,非浏览器客户端需 Origin 头
- 严重:dev-login/quick-login 端点保护 — 需要 E5EAI_DEV_MODE/E5EAI_DEV_SECRET
- 严重:移除 Model Plaza 硬编码后备密钥
- 高危:Agent execute_command 添加危险命令拦截模式
- 高危:文件路径安全校验增强 — 符号链接解析防绕过
- 高危:CSP 策略增强 — 添加 frame-ancestors/base-uri/form-action 指令
- 高危:知识库解锁密钥独立存储(data/.kb-secret),移除 config.json 明文密钥
- 高危:前端 XSS 防护 — 添加 escapeHTML 函数,消毒错误信息输出
- 中危:登录接口改为 HTTPS(可配置 AUTH_API_BASE)
- 中危:代码沙箱危险模式增强(ctypes/socket/codecs/builtins 等检测)
- 中危:上传限制收紧(Express 50MB→10MB,KB 50MB→20MB)
- 中危:空 catch 块添加错误日志
- 低危:手机号日志脱敏、WebSocket 连接认证、fs.watch 防抖、.env 配置完善
- 文档:.env.example 新增全部安全环境变量说明
V4.22.7: 思考模式文字排列修复
- 根因:thinkingText += data + '\n',每个 SSE chunk 末尾强制追加换行符,模型逐词流式输出时每个词都被切成独立行
- 修复:移除 SSE 思考数据累积时的强制换行,让文本自然拼接,仅保留模型原始输出中的自然换行
V4.22.6: CSP 策略全面开放 — 解决所有外部 CDN 资源加载问题
- styleSrc:白名单域名 → https: 通配,任意 HTTPS CDN 样式表均可加载
- fontSrc:白名单域名 → https: + data: 通配,任意 HTTPS 字体和 data URI 字体均可加载
- scriptSrc:白名单域名 → https: + blob: 通配,任意 HTTPS CDN 脚本均可执行
- 策略:与 imgSrc / connectSrc 保持一致,defaultSrc 仍为 'self',仅对明确需要的资源类型放宽
V4.22.5: 对话窗口弹高修复 — content-wrapper 独立布局
- 根因:chat-container 与 content-wrapper 同为 main-content 的 flex 子元素且都设 flex:1,导致可用空间被平分,chat-container 仅获 323px(应为 646px)
- 修复:content-wrapper 默认为 flex: 0 0 auto + overflow: hidden,仅在 app 页面模式(apps/kb/cloud/skills/agent/talk)下启用 flex: 1
- 效果:聊天模式下 content-wrapper 不占空间,chat-container 获得全部剩余高度
V4.22.4: CSP 外部资源策略修复 — 预览 Google Fonts 等外部资源加载
- CSP fontSrc 扩展:新增 https://fonts.googleapis.com 和 https://fonts.gstatic.com,允许 Google Fonts 字体文件加载
- CSP styleSrc 扩展:新增 https://fonts.googleapis.com,允许 Google Fonts CSS 样式表加载
- CSP scriptSrc 扩展:新增 https://cdn.tailwindcss.com、https://code.iconify.design、https://api.iconify.design
- CSP frameSrc 扩展:新增 https: 通配符,允许 iframe 嵌入任何 HTTPS 内容
- 根因:CSP 策略中 fontSrc/styleSrc/scriptSrc 白名单缺失外部 CDN 域名,导致 Google Fonts、Tailwind CDN、Iconify 等资源在预览 iframe 中被浏览器安全策略阻止加载
V4.22.3: 对话窗口高度挤压修复
- content-wrapper 高度修复:将 height: 100% 改为 min-height: 0,消除 flex 布局中 height 百分比与 flex: 1 的冲突
- 根因:flex 容器中 height: 100% 在父元素高度未解析时导致子元素塌缩,表现为 304px 而非撑满可用空间
V4.22.2: 编程模式预览渲染引擎修复
- 预览引擎升级:将 iframe 渲染从 doc.write() 改为 srcdoc,彻底解决 CDN 外部资源(Tailwind CSS/Iconify/Google Fonts)加载时序错乱问题
- Inspector 注入适配:srcdoc 异步加载机制下,改为 onload 事件注入 Inspector,不再依赖 setTimeout 猜测
- CSS 预览同步修复:CSS 文件预览也改用 srcdoc,确保样式正确渲染
V4.22.1: 任务中心 + 弹窗交互修复
- 任务删除修复:任务卡片所有操作按钮添加 event.stopPropagation(),防止点击删除/取消/重试时误触发任务详情弹窗
- 弹窗遮罩关闭:任务中心和任务详情弹窗支持点击遮罩层外部关闭,不再只能通过按钮关闭
- 遮罩点击监听清理:关闭弹窗时自动移除 click 事件监听,避免内存泄漏
V4.21.2: 全栈性能与稳定性优化
- JS Minify:chat.js 853KB→562KB (-34%),esbuild 压缩
- CSS 外提:7885行内联 CSS 提取为 main.css,HTML 581KB→224KB (-61%)
- 静态资源长缓存:/static 路径 maxAge 改为 365天 + immutable
- NLS WebSocket 重连:断线自动指数退避重连 (最多5次)
- 滚动节流:主聊天滚动加 RAF 节流 + passive 监听器
- 聊天历史 LRU:内存中最长保留 30 个会话,自动淘汰最旧
- 页面隐藏清理:切后台时取消 RAF 渲染,节省资源
- CSS Contain:8个关键组件添加 contain: layout style paint
- Bug 修复:3处 const 赋值错误 (dataurl 解码 + SSE 流读取)
V4.21.1: Agent 模块安全加固
- 审批端点认证:approve/reject 端点添加用户认证和会话所有权验证
- 关键文件保护:write_file 拒绝写入配置/依赖/入口文件,防止误覆盖
- 模型 API 重试:指数退避重试 (最多3次),缓解网络抖动导致的失败
- SSE 心跳与超时:30秒心跳保持连接 + 5分钟执行超时自动关闭
- 工具结果注入检测:对 web_fetch 等外部来源内容进行注入评分
- AgentConfig 缓存:30秒 TTL 内存缓存,减少重复文件读取
- 工作区遍历优化:限制文件遍历数量 (5000),防止大项目性能问题
V4.21.0: 主聊天 Agent 引擎集成
- Agent 选择器:top-nav 模型选择器旁新增 Agent 下拉菜单
- 主聊天 Agent 引擎:选中 Agent 后消息走真实 Agent 引擎,不再使用 prompt 注入
- 工具调用卡片:主聊天中流式展示 Agent 工具调用状态(执行中/完成/失败)
- 审批流程:主聊天中批准/拒绝危险操作,审批后自动续接执行
- Agent 状态栏:聊天区域顶部显示 Agent 名称、步数、用时统计
- 模型锁定:Agent 模式下自动锁定模型选择器,防止意外切换
- 停止执行:一键终止 Agent 执行,恢复聊天输入
- 产出保存:Agent 完成自动保存产出文件到云盘 agent-output 目录
V4.20.0: Agent 智能体模块落地
- Agent 引擎:独立执行引擎,状态机驱动的异步循环
- 工具注册系统:插件式工具中心,4类工具(文件/Shell/网络/知识库)
- 配置持久化:JSON 文件 CRUD + 克隆 + 导出(.e5eagent) + 导入
- 6个内置Agent:编程/写作/数据分析/研究/创意/通用
- 左侧边栏入口:独立 Agent 管理页面
- Agent 页面:卡片网格 + 分类过滤 + 搜索 + 创建/编辑弹窗
- 卡片操作:编辑(✏️)/克隆(📋)/删除(🗑️)/导出(📤)
- Agent 对话面板:SSE流式通信,工具调用卡片 + 状态栏
- 导入导出:.e5eagent 格式打包,一键分享和安装
- 新增:
server/agents/*(8文件),data/builtin-agents/*(6文件)
V4.19.4: 图片识别质量全面修复
- 图片压缩大幅优化:JPEG 质量从 0.70 提升至 0.88,最大宽度从 1200px 提升至 1920px,确保模型能识别图片细节
- 保持原始格式:PNG/WebP 图片不再强制转换为 JPEG,保留透明通道和原始画质
- 小图智能跳过:宽度 ≤1920px 的图片自动跳过压缩,避免已优化图片重复劣化
- 服务端图片过滤:不支持视觉(Vision)的模型自动移除图片并注入提示,避免图片被忽略或报错
- 死代码清理:移除 OpenAI 通用路径中重复的图片处理逻辑,统一由前置转换处理
- 变更文件:
public/static/js/chat.js、server.ts
V4.19.3: 知识库文档在线阅读体验升级
- PDF 在线阅读:点击文档标题或双击卡片,弹窗内嵌浏览器 PDF 阅读器,底部提供下载和新窗口打开按钮
- HTML 渲染预览:HTML 文件弹窗支持「渲染预览」和「源码」双 Tab 切换
- 图片在线预览:图片文件弹窗居中显示 + 下载按钮
- Word/Excel 等二进制文件:弹窗显示解析后的文字内容 + 下载原文按钮
- 不再直接下载:所有文件类型点击均为在线阅读,需下载时点击底部按钮
- 修复 db is not defined 错误:下载端点不再直接访问 kb-module 内部变量
V4.19.2: 知识库查看原文功能
- 新增查看原文功能:文档卡片新增"查看"按钮(绿色),点击可查看文档完整原文内容
- 弹窗查看器:现代化弹窗显示文档内容,支持文件类型图标、分块数、字符数统计
- 一键复制:底部提供"复制全文"按钮,方便快速提取内容
- 右键菜单:右键文档卡片新增"查看原文"选项
- 服务端 API:新增 GET /api/kb/documents/:id/content 端点,返回文档完整原文和分块信息
- kb-module.ts:新增 getDocumentContent() 函数,获取文档原文和分块列表
1. 像专家一样调度模型 (Auto-Router)
操作: 在对话框右侧的模型下拉菜单中,选择第一项 “🌟 智能意图路由 (推荐)”。
原理: 这是一个自动调度器。当您写代码时,它会切到 Coder 模型;当您处理复杂逻辑时,它会切到 Reasoner (思考) 模型。您不需要再手动纠结该选哪个模型了。
2. 让 AI 动起手来 (Agentic Execution)
操作: 让 AI 处理数据(如:“帮我生成一份今年的模拟销售数据并导出为表格”)。
魔法: AI 会自动在后台生成 Python 代码,并在代码首行加上 # @sandbox。对话结束后,系统会 自动触发执行,并直接把执行结果(图表、表格文件)返回到对话中。您可以直接点击链接下载生成的成果。
3. Notion 风格的块级编辑 (In-line Rewrite)
操作: 点击底部导航的 “写作模式” 进入双栏画布。在右侧文档流中,使用鼠标 选中一段文字。
魔法: 选中文字后,上方会立即浮现 “✨ AI 润色” 菜单。点击它或输入您的指令(如“扩写这段话”),AI 将只针对这一块内容进行重插,而不会刷新全文。这极大提高了复杂文案的协作效率。
4. 您的个人网盘与记忆 (Workspace)
操作: 您可以直接把文件(Excel, 图片, 文档)拖入输入框,或者点击左下角头像设置“永久记忆”。
原理: 我们为您在服务器建立了专享的 assets 网盘目录。所有沙盒生成的文件、您上传的文件都会被隔离保护在这里。AI 拥有读写这个目录的权限,这意味着它能“看到”您放入其中的所有数据模型。
大模型对话系统 (Omni Chat)
功能亮点
- 动态 Markdown 渲染: 支持极速增量渲染,长文生成自动启用 LRU 缓存避免卡顿。
- <think> 推理折叠: 针对 DeepSeek-R1 / Qwen-Max 等深度思考模型,底层自动解析 `reasoning_content`,并在前端转化为“思考中”折叠动效。
- 智能自修复网络: 高级错误捕获机制,遇到 404、401、402 等状态码会给出清晰的中文指引(如余额不足、路径错误建议等)。
任务命令模式
在主输入框输入 / 会打开结构化任务菜单。它不是提示词快捷方式:选择命令后,系统会按固定参数协议采集信息,由后端重新校验登录、企业归属和权限,再调用真实业务能力。
- 首批命令:
/写日报、/写周报、/待办工作、/安排工作、/通知人员、/查询日程、/添加日程、/会议纪要。 - 真实数据:日报、周报和待办会聚合任务中心、工作安排与日程;安排工作复用组织计划与 IM 投递;日程直接读写日程库。
- 安全确认:影响他人的命令先显示执行预览,确认后才执行;取消不会产生业务动作。每次执行都有稳定执行编号、请求哈希、重复提交防护和持久化审计。
- 通知边界:
/通知人员当前只生成明确标注“尚未发送”的通知草稿,不会冒充已经通知。 - 键盘操作:上下键选择、Enter 打开、Esc 关闭;Shift+Enter 仍用于输入换行,中文输入法组合期间不会误触发。
使用场景
适用于日常问答、指令生成、基础代码编写,以及日报、待办、日程和组织工作安排等结构化任务。
OpenCode 原生代码沙盒
功能逻辑
当 AI 生成了 python 或 nodejs 代码块时,代码右上角会高亮显示一个“运行(沙盒)”按钮。
- 真实运行环境: 点击后,代码将被直接发送至后端的隔离文件系统中真实执行,而不是在前端局限的 JS 引擎中 eval。
- 超时熔断: 为了保护服务器资源,代码执行上限设定为 10 秒,超时即自动阻断。
- 复杂算力释放: 利用此功能可以直接让 AI 编写 Pandas 处理 CSV、或跑一段数据分析脚本并直接拿回统计结果输出。
使用场景
财务报表处理、本地文本批量清洗、复杂算法验证与执行。
VFS 代码块智能提取 (2026-07-17 更新)
AI 生成的代码块自动提取到工作区时,系统已升级智能文件名识别:
- 裸文件名识别: 自动检测代码前几行的
# hunter.py/// app.js/<!-- index.html -->等注释,无需手动标注 filename - 非代码块智能跳过: 目录结构树 (├──)、终端输出等不会再被误写为 index.html 导致代码文件缺失
- 同名冲突保护: 同一批次多文件自动编号(如 main-2.py),防止相互覆盖
自主联网搜索 (Web Browsing)
平台通过集成 Bocha AI 搜索网关,赋予了模型获取实时信息的能力。
如何触发?
在输入框右下方点亮“联网搜索”图标。发送问题后,后端引擎会优先去整个互联网拉取最新的前8条有效文献,并连同原始问题打包送给模型处理。
使用场景
查询当日热点资讯、获取最新开源库文档、校验时效性强的数据报告。
⭐ e5e-Lens(玄镜)使用手册
📌 第一步:怎么开始用
- 打开思洋主界面,顶部模型选择器默认显示 “e5e-Lens”(即智能路由模式),保持这个选择就是最佳用法。
- 在输入框里直接说需求,比如“帮我把这段文字润色一下”“画一只戴眼镜的猫”“分析这份数据的变化趋势”。
- 发送后,e5e-Lens 会自动判断你的需求类型(写作?画图?查资料?写代码?),挑一个合适的模型来回答,全程你不用操心。
🧠 第二步:它能帮你做什么(常见用法)
| 你只需要说 | 它会做什么 |
|---|---|
| “写一篇小红书种草文案” | 识别为写作任务,自动挑选擅长写作的模型生成文案 |
| “分析一下这个复杂问题的影响” | 识别为深度推理,交给推理能力最强的模型 |
| “写个 Python 脚本处理 Excel” | 识别为编程,写代码并可能直接运行验证 |
| “画一张夏日海滩图” | 进入智能体协作,自动调图片生成工具出图 |
| “做一段产品介绍短视频” | 调视频生成工具,产出视频(完成后可在消息里预览/下载) |
| “查一下公司制度里关于请假的规定” | 调知识库搜索,基于企业知识回答 |
| “把这段文字读出来” | 语音合成,生成可播放的音频 |
💡 第三步:几个让结果更好的小技巧
- 把需求说具体:“写一封给客户的回信”比“写封信”效果好;能带上对象、语气、长度要求更佳。
- 连续追问不用重复说:生成图片后再输入“再来一张”“改成竖屏”,5 分钟内它会自动延续刚才的任务类型,不用重新描述。
- 遇到多步任务会展示“计划卡”:比如“帮我做一份竞品分析报告”,它会先拆步骤(收集资料→整理框架→撰写),每一步状态都看得见,可暂停、可重试。
- 它拿不准时会问你:如果系统判断不了你要图还是文字(比如“帮我分析这张图”),会弹选项让你点一下,不会瞎猜浪费你的时间。
- 可以说人话:“帮我”“把…改一下”“跟…一样风格”这类日常说法它都听得懂。
👍👎 第四步:觉得不对?告诉它(重要!)
每条 AI 回复下方都有一行小字,格式像:写作 → 某模型 👍 👎,这是 e5e-Lens 的“路由反馈行”:
- 回答满意 → 点 👍:帮它确认“这条路选对了”,它以后会更倾向这么干。
- 不满意 → 点 👎:会弹出小面板让你选原因(没理解需求/选错模型/内容不准确/太啰嗦等),还能手动挑一个正确的任务类型。它会把这次纠正记下来,下次遇到类似的话优先走对的路。
- 为什么要这么做:e5e-Lens 会学习每个用户的偏好,你纠正得越多,它越懂你。这是它“越用越聪明”的来源。
🛡️ 第五步:出故障了怎么办(它会自己扛)
- 某个模型挂了:系统自动切换到备用模型继续回答,你基本无感知;只有连续多次故障时才会看到短暂停顿。
- 某个能力不可用:比如视频生成暂时不可用,它会直接告诉你,不会硬撑。
- 权限不够:需要企业授权的能力(如某些模型),会提示联系管理员开通。
- 想换固定模型:点击顶部模型选择器,可以从 e5e-Lens 切换为具体模型(如 deepseek-v4-pro)。建议日常保持 e5e-Lens,个别专业场景再手动指定。
🚀 进阶玩法(可选)
- 让多个专业智能体协作:系统内置 16 个专业角色(代码审查、数据分析、合同审查、文档撰写等),复杂任务它会自动分派给合适的“专家”干活。
- 任务审批:企业可配置重要操作(如发通知、改文件)需人工审批后才执行,e5e-Lens 会在执行前停下来等确认。
- 技能与红线:企业可预设技能规则和写作红线,e5e-Lens 调用前会自动校验,违规操作会被拦截并说明原因。
- 每一步都留痕:它干了什么、调了哪个模型、执行了什么工具,都有记录可查(管理员可在观测面板查看),出了问题能追根溯源。
想看更技术化的细节(意图识别表/模型健康监控/路由生命周期)?跳到下方「e5e-Lens 智能路由引擎」章节。
e5e-Lens 智能路由引擎
🎯 智能意图识别 (Auto-Router)
当用户选择 auto-router 模型时,e5e-Lens 自动分析用户输入,匹配 16 种内置意图:
| 意图 | 触发示例 | 默认模型 |
|---|---|---|
| reasoning 复杂推理 | "分析量子计算对密码学的影响" | deepseek-v4-pro |
| writing 写作创作 | "写一篇小红书文案"、"作一首诗" | Doubao-Seed-2.1-pro |
| code 编程开发 | "写一个 Python 快排实现" | deepseek-v4-flash |
| general 快速响应 | "你好"、日常闲聊 | deepseek-v4-flash |
| image 图片生成 | "画一只猫" | Kimi-K2.5 → Agent |
| video 视频生成 | "生成一个短视频" | Kimi-K2.5 → Agent |
| tts 语音合成 | "把这段话读出来" | Kimi-K2.5 → Agent |
| agent_create 创建智能体 | "帮我创建一个客服机器人" | Kimi-K2.5 → Agent |
| kb_query 知识库查询 | "根据公司制度回答..." | Kimi-K2.5 → Agent |
更多意图:voice_clone(语音克隆)、asr(语音识别)、sketch(涂鸦转图)、face_swap(视频换脸)、video_edit(视频编辑)、ref_video(参考生视频)、3d_gen(3D 生成)、cloud_query(云端查询)
🏗️ 模型选择流水线
每次路由经过严格的多层决策,确保选出的模型有能力、健康、且符合偏好:
- ① 能力门控: 候选模型必须支持意图所需的能力(如 vision 意图拒收纯文本模型),硬约束不可绕过。
- ② 健康检查: 熔断器自动排除近期频繁失败的模型(详见下文)。
- ③ 用户偏好: 用户手动纠正或长期行为形成的偏好,在安全模型子集内优先。
- ④ A/B 实验: 按流量比例随机分配变体模型,观察不同模型对满意度的影响。
🔁 会话上下文继承
同一会话中的短指令(如"再来一张""改成竖屏""换一个")会自动继承上一轮的意图和模型,无需重复指定:
- 继承窗口: 5 分钟内同一会话的连续请求。
- 会话隔离: 不同浏览器标签页/设备的会话 严格隔离,不会互相串意图。
- 反误触发: "为什么""怎么用""可以吗"等独立问句不会触发继承,走正常意图识别。
- 延续标记: 前端 SSE 收到
route_info中的continuationFrom字段时,可感知当前路由的来源。
🤔 歧义澄清
当两个意图得分接近(差距 ≤ 1 分)时,系统不会盲目选择,而是:
- 暂停首次请求: 发送
route_clarify事件给前端(如"你想生成图片还是分析图片?")。 - 等用户选择: 前端展示可选意图按钮,用户点击后带
route_override重发。 - 不消耗 Token: 澄清状态不会调用模型,避免无效消耗。
⚡ 熔断器与模型健康监控
- 三态熔断:
ok(正常)→degraded(降级)→down(熔断)→half_open(探测恢复)。 - 自动恢复: 冷却 60 秒后自动发送探测请求;探测成功则恢复,失败则继续熔断。
- 错误分类: 用户主动取消 (
abort) 不计入模型失败;超时和 HTTP 错误分别归类。 - 质量独立: 用户 👍👎 评分 (
recordModelQuality) 与模型实际运行健康 (updateModelHealth) 分开存储,点踩不污染成功率。 - 健康 API:
GET /api/lens/health返回所有模型的实时健康状态、成功率、平均延迟和用户评分。
👍👎 反馈闭环与自学习
每次 AI 回复完成后,消息下方会显示路由反馈行(意图 → 模型 + 👍👎),用户可:
- 点赞: 确认路由正确,计入模型质量评分。
- 点踩 + 纠正: 选择正确的意图和模型,系统自动学习偏好并写入纠正样本库。
- 反哺路由: 多次纠正同一模式后,系统通过 bigram 相似度匹配历史样本,在弱信号场景自动给正确意图加分。
🔬 路由生命周期追踪
每次路由的完整决策和执行过程被记录为事件流,存储在 data/lens/route_lifecycle.jsonl:
started → intent_selected → model_selected → failed / aborted
首 Token 延迟 (first_token)、降级触发、失败原因全程可定位;客户端主动断连也会正确闭合为 aborted,不产生悬空记录。
📊 观测面板
平台「主动感知」页面提供「🎯 Lens 观测」面板,实时展示:
- 总路由次数、24h 路由量、意图分布柱状图
- 模型分布、纠正率、平均置信度
- AI 兜底使用率、延续继承次数、歧义澄清次数
- 所有模型的健康状态和用户评分
数据源来自 GET /api/lens/insights(需登录),仅返回当前认证用户的数据,管理员可查看全站统计。
🔒 安全与隔离
- 用户级数据边界: 路由历史、统计、反馈建议均按当前认证用户过滤,未登录返回 401。
- 纠正样本隔离: 反馈纠正样本只影响提交者本人的路由反哺,不会跨用户污染。
- 路由反馈校验: 提交纠正时必须携带本人真实 routeId,系统从长期历史验证归属权。
🔌 自定义模型节点(高级)
除了内置的智能路由,平台同样支持高级用户接入私有模型:
- 预置模型库: 后端
config.json支持灵活扩展模型池,内置不同领域最强开源及闭源模型。 - 自定义信道: 在左侧边栏底部的"设置"中,填入私有 OpenAI 兼容格式 API(如 vLLM 实例或企业网关)。
- 自定义模型可参与路由: 接入后在模型列表中可选,亦可作为特定意图的默认模型。
快速查找模型
- 思洋助手置顶:
e5e-思洋助手固定显示在菜单最上方、搜索框之前,不参与搜索、类型筛选和折叠,任何筛选状态下都可以直接切回智能意图路由;底层仍使用auto-router,仅调整界面名称。 - 名称搜索:在置顶意图模型下方,可按模型名称、模型 ID、供应商或描述直接搜索普通模型。
- 类型标签:搜索框下方提供“文本、图像、视频、数字人、音频、3D、识图、工具调用”八类快捷筛选;标签区域支持触屏左右滑动、鼠标拖动及滚轮横向浏览,横向滚动条保持隐藏,选择“全部”可恢复完整列表。
- 常用优先:系统按当前账号在当前浏览器中的真实模型切换次数排序,次数相同时最近使用的模型优先,常用模型会自动靠前。
- 单选与多选分离:点击模型条目空白区域会直接切换普通聊天模型;点击左侧圆形复选框只加入多选候选,不会自动进入对比或会议模式。选择两个以上模型后,必须点击菜单底部“对比”或“会议”按钮才会正式进入相应模式。
- 按需折叠:当前搜索或类型筛选结果达到 5 个模型时才显示折叠按钮,少于 5 个时自动隐藏;按钮下方不再绘制装饰横线。
- 类型分类:模型广场的分类标签依据上游实时返回的
request_type字段分组(对话/视频/图像/音频/工具/3D),每个模型名称前配有对应类型的 SVG 图标,便于按功能类型快速筛选。
智能写作模式 (Writer Mode)
智能路由加持: 使用
auto-router 时,写作类请求自动分配 Doubao-Seed-2.1-pro 模型,获得最佳的创意文案和文章生成效果。
核心体验
- 双栏对照: 左侧聊天引导,右侧直接展示 A4 纸质感的正文。
- 弹性分屏: 支持拖拽聊天区域右边缘的竖线,自由调整对话框与创作区的比例。
- 自动同步: AI 生成完成后内容自动同步到右侧写作区(含标题自动提取),无需手动点卡片;若你在生成期间手动修改过写作区,系统不覆盖,提示你一键同步。
- 指令真实生效: 「更改语气 / 调整长度 / 全文润色」会携带写作区当前内容作为上下文交给 AI 执行,不再是无效果的提示词;写作区为空时会明确提示。
- 草稿自动保存: 写作内容输入后自动保存为草稿,刷新、切走、关闭页面都不会丢;重新进入时提示「恢复 / 丢弃」。
- 选中文段 AI 改写: 选中一段文字即可润色 / 扩写 / 缩写或输入自定义指令,AI 返回后直接替换选中内容。
- 一键导出: 支持所见即所得导出为 `.docx`、`.pdf` 或 `.md`,满足体制内公文落印标准。
AI PPT 智能生成 (v10.5)
入口: 侧边栏 "AI PPT" 按钮,或输入框底部工具栏 "AI PPT" 图标按钮。
v10.4 新特性: 右侧结构化编辑面板(按元素编辑)、图表数据编辑抽屉、快速输入与4步创作简报双模式、6种新版式、生成后质量检测、主题多页预览、AI操作可解释性。
工作流程(两阶段生成)
- 描述需求: 默认可在快速模式直接输入完整需求;也可切换到4步引导模式,依次选择场景、补充主题、设置受众与表达方式。两种模式共享视觉风格、页数、模型与参考资料配置。
- AI 策划大纲: 系统生成结构化大纲,展示标题、每页标题、版式类型和内容概述。支持:点击页面循环切换版式、双击编辑页面标题、上下移动/删除/添加页面。
- 审阅与确认: 大纲确认卡在右侧工作区中央显示;在左侧检查大纲后确认,系统自动进入逐页内容生成阶段。
- AI 撰写内容: 系统按确认的大纲为每页撰写详细内容,逐页推送到预览区。
- 预览与调整: 左侧缩略图列表展示所有页面,右侧大图预览单页内容。支持键盘左右箭头翻页。
- 上线后编辑: 可切换主题、单页重新生成、增删页面、导出 PPTX 或 HTML。
核心特性
- 智脑全自动设计(默认): 视觉风格保持「智脑自动」时,大模型全权负责设计:先为整稿制定《设计简报》(情绪/九宫色板/字号体系/装饰母题/页面节奏/宜忌清单),再逐页直接设计 1920×1080 自由 HTML——光晕、幽灵序号、斜切色块、SVG 图表等真实设计语言,拒绝“标题+项目符号”的模板感。安全校验自动过滤危险内容,单页设计失败自动回退模板渲染,整稿不受影响。
- 模板约束规则(选模板时生效): 手动选择模板后,该模板的专属设计规则(用色范围、字重层级、装饰边界、点缀色频率、禁用行为)全程约束内容生成,成品严格贴合模板气质。
- 模板变体引擎: 模板模式下同版式不同页的构图自动变化(标题三种构图、章节页居中变体、三列卡色带变体、幽灵编号列表、图文左右轮换等),页面节奏由大纲策划强制保证(同版式不连续、呼吸点穿插),不再千页一面。
- 上传 PPT 学习风格: 上传 .pptx 即可学习其设计风格——除色板/字体/用色/对齐外,还提取标题位置、字号分布、圆角占比、背景色、配图密度等版面特征,并自动总结该模板的设计约束规则。学习结果注册为新主题,可随时选用。
- 5套内置主题: 商务深蓝、科技紫、极简黑白、活力橙、森林绿,一键切换整体视觉。
- 17种语义版式: 封面、目录、章节页、纯文本、图文混排、全图、图表洞察、数字大字、时间轴、对比、三列卡片、引言、总结、致谢、SWOT分析、路线图、团队介绍。目录页采用单列层级布局——章节条目顶格、内容页条目缩进,父子归属一目了然,12 条以内自适应密度完整展示。AI 根据内容语义自动选择最合适的版式。
- 图表内嵌渲染: 柱状图、折线图、饼图、环形图等图表直接渲染在页面中,无需额外工具。
- 三种画面比例: 16:9 宽屏、4:3 标准、9:16 竖屏。
- 生成演讲备注: 可选生成每页的演讲者备注,辅助宣讲准备。
- 单页重生成: 对不满意的页面,鼠标悬停缩略图点击刷新按钮,输入修改指令即可重新生成(智脑自动文稿会按设计简报重新设计该页)。
- 历史管理: 自动保存所有生成的演示文稿,支持浏览、加载和删除。
编辑能力(v10.5 线上制作)
- 顶部药丸工具栏:白底悬浮居中,插入文字/图片/形状/媒体/表格/图表,紧凑精致。右侧功能组包含主题切换、下载导出、关闭操作。
- 自由元素层:所有手插元素支持 1920x1080 坐标自由定位,可拖拽移动、双击编辑文字、四角 resize 手柄调整尺寸。Delete/Backspace 键直接删除。
- 右键上下文菜单:选中元素右键弹出:编辑文本/复制/格式刷/上移/下移/置顶/置底/重置位置/删除,按上下文智能启用。
- 选中浮动操作条:选中元素后右上方显示删除/复制/层级调整迷你工具栏,点击空白自动隐藏。
- 默认编辑模式:打开文稿即进入可视编辑,无需手动开启开关。
- 所见即所得表格编辑:双击单元格进入编辑,失焦自动保存——不再整表进入编辑态。
- 新增空白页:圆形加号按钮位于折叠箭头右侧,点击在当前选中页下方插入空白页并自动选中。
- 删除确认:删除页面在编辑区中央弹窗二次确认,防误操作。
- 自动保存与恢复:生成开始即保存,中断后文稿标记"未完成"——历史列表橙色标签显示 N/MP,点击继续生成入口恢复编辑。
全系统软件化光标(v10.5)
- 普通界面区域:箭头指针
- 按钮和可点击控件:手型指针
- 输入框和正在编辑的文字:文字光标
- 表格默认箭头,仅双击编辑的当前单元格才显示文字光标
技术架构
- 统一 Presentation AST: 所有演示文稿使用结构化中间表示(JSON),确保 HTML 预览和未来 PPTX 导出的一致性。
- 五阶段异步生成: 需求分析 → 大纲策划 → 内容撰写 → 资源生成 → 排版渲染,实时显示进度。
- 约束式设计系统: 版式组件绑定设计令牌(颜色/字体/间距),AI 选择版式后由程序自动排版,确保20+页面的视觉一致性。
- 模型调用: 使用 deepseek-v4-pro 进行策划和内容生成,统一通过模型广场 Key 调用。
API 接口
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/ppt/generate-outline | 新增 v10.3 — 两阶段生成第一步:仅生成大纲(非流式 JSON 返回) |
| POST | /api/ppt/generate-stream | SSE 流式生成内容(支持携带确认大纲跳过规划阶段) |
| POST | /api/ppt/generate | 兼容:提交生成任务,返回 taskId 轮询进度 |
| GET | /api/ppt/tasks/:taskId | 查询任务状态和进度 |
| GET | /api/ppt/presentations | 获取历史演示文稿列表 |
| GET | /api/ppt/presentations/:id/preview-data | 获取结构化预览数据 |
| GET | /api/ppt/presentations/:id/preview | 获取公开只读 HTML 演示页(无需登录,随机文稿 ID 即分享令牌;禁止搜索引擎收录) |
| GET | /api/ppt/presentations/:id/native-preview-data | 获取登录用户的 PPTX 原生对象预览模型(英寸坐标、shape ID、动画计划) |
| POST | /api/ppt/presentations/:id/slides/:slideId/regenerate | AI 重新生成单页内容 |
| PUT | /api/ppt/presentations/:id/slides/:slideId | 编辑单页内容 |
| DELETE | /api/ppt/presentations/:id/slides/:slideId | 删除单页 |
| POST | /api/ppt/presentations/:id/reorder | 调整页面顺序 |
| PUT | /api/ppt/presentations/:id/theme | 切换主题 |
| GET | /api/ppt/themes | 获取可用主题列表 |
| POST | /api/ppt/presentations/:id/slides | v10.5 — 当前页下方新增空白页(blank:true+afterSlideId 参数) |
| GET | /api/ppt/presentations | v10.5 增强 — 返回 generationStatus/generatedCount/totalCount,未完成文稿可恢复 |
| GET | /api/ppt/layouts | 获取可用版式列表 |
后续规划
- PPTX 原生文件导出(可编辑的 .pptx 下载)
- PDF 导出和 MP4 视频导出
- 在线编辑器:点击元素在右侧面板直接修改文本、图片、图表数据
- 智能配图:自动搜索和插入匹配的图片素材
- 上传参考资料(Word/PDF/Excel)自动提取内容生成 PPT
- 企业品牌模板上传和品牌色/Logo/字体定制
- 多人协同编辑和评论
平行工作带与无限画布 (Co-Pilot Canvas)
未来升级方向:
- 块级动态编辑: 不再全文重新生成,用户高亮一段文字,即可指令 AI 只重写此段落。
- 版本树追溯: 每一次 AI 的改写都可以像 Git 一样进行版本回滚。
代码动态可视化 (Artifacts)
当 AI 返回 HTML/JS/CSS 混合的前端代码时,系统无需离开当前界面,即可在右侧边栏即时渲染为一个所见即所得的 Web 视窗。设计师和工程师可以快速调优按钮样式与交互动效。
全双工硬件级语音对讲
- 无缝打断: 用户说话时,AI 会立刻停止当前的生成并倾听新的指令。
- 视觉动效: 基于 Canvas 绘制声压粒子光晕,直观反馈 AI 倾听与表达的心跳状态。
- 低配设备自动降载: 老旧 iPad(iOS 15 以下或双核芯片)会自动启用低性能模式——音频块合并播放(减少 WebAudio 对象创建)+ 采样率修正(24kHz 真实声明)+ 音量动画节流 200ms + 跳过重动画,通话流畅不卡顿;新设备不受影响,动画照常全速。
实时视觉摄像头交互
唤起设备摄像头,以较低抽帧率(1 FPS)将环境画面转化为 Base64 图片流,源源不断输送给多模态大模型。模型可以"看着"你眼前的草图、会议白板、甚至实物商品进行解答。
文档生成引擎 (v10.0 新增)
支持格式
| 格式 | 能力 | 示例 |
|---|---|---|
| Word (.docx) | 标题/段落/项目符号/表格/代码块/中文排版 | "帮我生成一份本周工作总结的 Word 文档" |
| Excel (.xlsx) | 多 Sheet/表头样式/数据表格/柱状图/折线图/饼图 | "把上个月的销售数据做成 Excel 表格,带图表" |
| PPT (.pptx) | 封面页/内容页/双栏对比/专业配色模板 | "帮我做一份产品介绍的PPT" |
| 中文排版/表格/项目符号/页眉页脚 | "把项目方案导出为 PDF" |
使用方式
- 对话生成: 在聊天中直接说"帮我生成一份 XXX 的 Word 文档",AI 会自动理解需求、结构化内容并生成文档。
- Agent 工具: Agent 模式下可通过 generate_document 工具调用,自动完成复杂文档生成任务。
- API 接口: POST /api/document/generate (结构化数据) / POST /api/document/generate-from-chat (自然语言)。
- 自动保存: 生成的文档自动保存到资产目录,可通过资产中心或对话下载。
- 下载卡片: 对话内显示紧凑型文档卡片;点击卡片或“下载”按钮即可保存。历史中文文件名链接也会自动转换为兼容 HTTPS 反代的安全下载地址。
数据分析引擎 (v10.0)
- 自动解析: 支持 CSV/Excel 文件,自动识别数值列、分类列、日期列。
- 统计摘要: 均值、标准差、最大值、最小值、中位数、缺失值等。
- 相关性分析: 自动检测数值列之间的相关性,标注强/中/弱相关。
- 交互仪表盘: ECharts 驱动的 HTML 页面,柱状图/折线图/直方图,支持缩放/悬停。
- 使用方式: 在对话中上传 CSV/Excel 文件,说「帮我分析这份数据」,或通过 Agent 工具 analyze_data 调用。
PDF 工具箱 (v10.0)
| 操作 | 说明 | 示例 |
|---|---|---|
| 合并 | 多个 PDF 合成一个 | 「把这三个 PDF 合并成一个」 |
| 拆分 | 按页拆成独立文件 | 「把这个 PDF 拆成单页」 |
| 提取文字 | 提取全文文本 | 「提取这份 PDF 的文字内容」 |
| 添加水印 | 对角线水印 | 「给合同加水印『机密』」 |
| 提取页面 | 指定页码提取 | 「提取第 2-5 页」 |
| 查看信息 | 页数/标题/作者 | 「这个 PDF 有多少页」 |
- 使用方式: 先上传 PDF 到云盘,然后在对话中说「把这个 PDF 加水印」或通过 Agent 工具 pdf_tool 调用。
- API: POST /api/pdf/tool
项目管理看板 (v10.0)
- 访问入口: 直接访问 /kanban 进入独立看板页面。
- 默认三列: 待办/进行中/已完成,可自定义添加列。
- 任务卡片: 标题/描述/优先级(高/中/低),拖拽到不同列自动更新状态。
- 数据持久化: 保存到用户空间 JSON 文件,刷新不丢失。
会议纪要 (v10.0)
- 录音转文字: 先通过语音识别(speech_to_text)将录音转为文本。
- AI 生成纪要: Agent 工具 meeting_minutes,自动提取摘要、关键讨论、决策、待办事项。
- 导出文档: 生成的 Markdown 纪要可直接导入文档引擎生成 Word/PDF。
- 自动保存: 纪要自动保存到资产目录。
- 使用方式: 上传会议录音文件,说「帮我把这段录音整理成会议纪要」。
多格式文档解析
输入框左侧支持直接上传本地文件格式:
- 支持格式: PDF、Word (.docx)、Excel (.xlsx)、图片 (png/jpg)、Markdown (.md)。
- 前端分拣: 对于纯文本文档会由前端 mammoth/pdf.js 进行清洗脱水;对图片格式则自动启用 1200px 级智能压缩策略再发送。
媒体生成(图片 / 视频 / 音频 / 数字人)
如何使用
- 第一步 · 选模型: 点击顶部模型选择器,带有「🎨 图像」「🎬 视频」「🧑🎤 数字人」「🔊 音频」角标的即为生成类模型(可在模型广场中勾选接入)。
- 第二步 · 调参数: 选中后输入框上方自动浮现参数条——图片模型支持比例(1:1/16:9/9:16/3:4/4:3)与数量(1-4 张);视频模型支持比例、时长(5/8/10 秒)与有声开关。
- 第三步 · 输提示词: 在输入框用自然语言描述想要的画面、视频或语音文本,回车即提交生成。
- 第四步 · 看结果: 生成中显示进度卡片,完成后自动渲染图片网格 / 视频播放器 / 音频播放器,支持点击放大与一键下载,同时自动保存到「数字资产」。
数字人与参考输入
- 图片数字人(如 OmniHuman1.5): 参数条中上传一张人物照片 + 一段音频,照片即可开口说话。
- 视频数字人(如 e5e_Human2.5): 上传一段人物视频 + 一段音频,生成对口型的播报视频。
- 语音克隆: 选择克隆模型后上传 3-10 秒清晰人声作为参考音频,输入文本即可合成该音色的语音。
- 图生视频 / 动作模仿: 按参数条提示上传参考图或模板视频即可。
拖拽上传
- 加高拖拽区: 选中任意媒体模型后,参数条下方显示一个加高的虚线拖拽区,支持将文件直接拖拽至此上传。
- 多文件拖拽: 支持同时拖拽多个文件。系统自动按文件类型(图片/视频/音频)分拣到对应参考槽位。
- 模型限制提示: 图片参考最多 10 张,视频和音频各 1 个。超出限制时自动提示可上传数量。
- 类型校验: 拖拽不支持的文件类型时提示可接受的文件类型,图片/视频/音频各有对应接受范围。
任务中心联动
所有生成任务均接入任务中心:视频与数字人渲染耗时较长(几分钟到几十分钟),提交后可随时在「任务中心」查看进度,不影响继续对话。
多用户云端工作区 (User Workspace)
核心机制
- 脱离 localStorage 的束缚: 旧版系统中对话记录保存在本地浏览器缓存中,一旦更换电脑、手机或清理缓存,数据便会丢失。
- 云端独立数据仓: 系统现已为每一位登录用户在后端建立专有的虚拟个人数据中心 (VFS)。
- 无缝漫游: 当您在手机端与 AI 交流完,回到公司电脑登录账号,所有历史对话与生成记录毫秒级双向同步。
永久记忆设定 (Permanent Memory)
功能入口
点击平台左下角的个人头像,在弹出的菜单中选择 “永久记忆设定”。
运作原理
在这个独立设置面板中输入您的长效人设或者回答准则(例如:我是架构师,请多用图表思维;不要使用繁冗的客套话;我的公司是跨国企业,优先输出中英双语)。
这些长期记忆与偏好通过私有的 RAG (检索增强) 隧道,会在您发起每一次对话的底层悄然注入,从而潜移默化地规范 AI 的思考模型,并与其他用户的数据绝对隔离。
PII 数据合规防火墙
运行机制
在用户点击发送瞬间,系统底层中间件自动启动正则审查引擎,识别文本中的个人敏感数据并用占位符安全替换掉。
- 手机号脱敏: 主动侦测连续 11 位号码,替换为
[PHONE_REDACTED]。 - 身份证脱敏: 主动核验 15 位及 18 位身份代码,替换为
[ID_CARD_REDACTED]。
这一拦截发生在代码数据到达请求层之前,确保无论外部大模型商是谁,都无法刺探到平台所属企业的机密隐私。
写作约束与红线审查
内嵌 6 大核心文本合规审计模板,辅助企业风控:
- 广告法绝对化用语排查
- 短视频(抖音/小红书)敏感违禁词审查
- 意识形态与政治敏感核查
- 体制内公文措辞与行文规范纠偏
组织智慧指挥中心(企业后台)
产品主次:组织智慧运行系统优先
企业后台采用双层产品架构:第一层是组织智慧运行系统,负责建立诊智、知识沉淀、决策、协同、反馈与学习机制;第二层是企业 AI 办公能力,负责把组织能力应用到写作、PPT、数据分析、会议、知识问答和编程等岗位任务。AI 办公成果必须经过人工复核并回流为组织资产。
指挥中心首页
默认首页展示组织智慧全景:
- 组织智慧成熟度:五阶段模型(个体经验型→知识沉淀型→流程协同型→人机共智型→持续进化型),含进度条与闭环综合评分
- 闭环健康度:感知 / 理解 / 判断 / 决策 / 行动 / 反馈 / 学习 七维环形指标
- 六层架构评分:智慧资源层 / 认知能力层 / 智能体层 / 流程协同层 / 组织治理层 / 智慧进化层
- 三重判定:能力形成(诊断覆盖率+成熟度分布)/ 机制改变(复盘率+假设验证+审批处理)/ 结果持续(教训提炼+组织记忆+知识文档)
- 智慧损耗预警:8类自动检测(未诊断成员/逾期复盘/决策无复盘计划/知识沉淀不足/组织记忆薄弱/无90天工程/关键人依赖/沉默成员),按高危/中危/低危分级
- 六步法快捷入口:诊智→聚智→赋智→融智→增智→跃升 一键跳转
六步法导航体系
诊智(智慧诊断):成熟度测评 — 十大维度 20 题锚定式量表,产出雷达图+短板+建议+90天路径。90天工程 — 1-15天诊断定标 / 16-30天聚智设计 / 31-60天上线运行 / 61-90天验证复盘。
聚智(智慧汇聚):知识库中心 — 企业文档上传/检索/管理。组织记忆 — 经验/规则/方法沉淀为 AI 可调用的组织资产。知识图谱 — 资产即节点、引用即边,17 类节点可视化(覆盖成员/部门/会话/文件/技能/笔记/诊断/集成/模板/工作流/决策/记忆/工程/知识/智能体/审批),另有个人版「我的图谱」(记忆/笔记/文件/会话/智能体/知识文档六类),支持记忆升格为组织记忆。查看知识图谱完整介绍 → 决策留痕 — 重要决策方案/依据/假设/复盘全链路记录。
赋智(岗位赋能):Agent 中心 — 企业智能体创建与管理。流程模板 — 工作流/审批模板库。
融智(流程协同):审批中心 — 跨部门审批流。成本分摊 — 按部门/成员的资源消耗分摊。
增智(持续进化):提智看板 — 三重判定度量+成员智慧排名。BI 看板 — 经营数据分析。智能报表 — 自动生成周期报告。
治理(组织治理层):成员管理 / 部门管理 / 模型策略 / API密钥 / SSO集成 / 活动日志
运营(平台运营):账单套餐 / 用量看板 / 企业公告 / 企业市场 / Webhooks / 发票管理 / 资产浏览 / 企业设置
🔐 权限管理体系(页面 → 功能 → 按钮 三级)
思洋权限体系覆盖总后台、企业后台、用户角色、单个用户、主站前端五个层面,统一按「页面 → 页面功能 → 按钮」三级组织:进入页面权限控制菜单显隐,页面内操作权限控制按钮显隐,服务端 API 同步拦截(越权直调返回 403)。
1. 总后台(系统管理后台)
- 超级管理员:平台最高权限(is_platform_admin),全部页面与按钮可用,不可被覆盖
- 平台管理角色(细分管理员):「权限管理 → 管理员」页可把平台管理角色分配给指定用户:财务管理员(仅财务/充值/定价)、运营管理员(用户/内容)、系统管理员(系统/模型/权限)。被分配后该用户可登录总后台,但页面菜单与按钮按其角色权限自动显隐
- 角色管理:「权限管理 → 角色管理」可新建/编辑角色并勾选权限(权限树按页面分组:用户管理页/财务管理页/模型管理页/系统设置页…),每个页面区分「进入页面」与「删除用户/手动充值/定价管理」等按钮权限
- 单个用户覆盖:会员详情「权限覆盖」——在角色权限之外额外授予或强制移除单个功能权限(如禁某用户联网搜索/放开 PPT),覆盖优先于角色;管理角色仅超级管理员可分配/撤销(防提权)
2. 企业后台(组织智慧指挥中心)
- 企业管理员(owner):默认拥有企业后台全部模块权限
- 成员授权:成员列表每行「权限」按钮 → 三级树弹窗,可给成员按模块/按钮授权(如只给财务岗开「财务页 + 充值」,只给人事岗开「成员页 + 邀请成员」);被授权成员可进入企业后台但只能看到授权页面与按钮
- 权限点:33 个后台模块(工作台/AI办公/知识库/智能体/审批/财务/公告/市场/发票/设置…)+ 19 个核心操作(邀请成员/发布公告/审批处理/上传文档/创建智能体/充值…)
3. 主站前端(用户侧)
- 侧栏功能入口(知识库/技能/云盘)与联网搜索等按钮按账号权限自动显隐,登录或刷新后即时生效
- 权限由会员角色决定:总后台「角色管理」编辑会员角色(免费/普通/中级/高级/企业)时勾选的权限点即控制前端功能显隐
⚠️ 安全说明
前端隐藏仅为体验层;所有后台写操作 API 已挂细粒度权限点校验(requireAdminPerm / requireEntPerm),直接调用接口越权同样返回 403。企业管理员(is_admin)不拥有总后台权限,总后台/企业后台严格分离。
🛡️ 字段白名单与数据安全
所有用户/企业/部门的更新操作均经过 sanitizeUpdates 字段白名单过滤,禁止客户端提交以下敏感字段:
balance(余额)— 仅通过财务引擎修改is_admin(管理员标记)— 仅超级管理员可操作created_at(创建时间)— 系统自动维护password_hash(密码)— 专用密码修改接口
📝 统一审计日志(writeAuditLog)
覆盖所有关键操作,记录完整的审计追踪信息:
- 覆盖范围:充值、定价调整、系统设置变更、模型配置、用户角色变更等
- 记录字段:操作人、操作目标、详情、分类、安全等级、源 IP 地址
- 查询方式:管理后台审计日志页面支持按时间、操作人、分类筛选
📎 媒体上传安全加固
网站媒体上传新增 MIME 类型魔数校验,确保文件类型与后缀一致:
- 图片类:只接受真实 image/* 类型,校验文件头魔数
- SVG 文件:增加安全标记,防止 XSS 注入
- 上传限制:单次最多 10 个文件,单个最大 20MB
⚠️ 高危操作二次确认
24+ 项危险操作增加前端二次确认弹窗,防止误操作:
- 删除用户/企业/部门
- 暂停/恢复用户账号
- 用户充值(需填写原因)
- 批量操作(批量充值、批量删除)
🔄 按钮防重复提交(withSubmitGuard)
覆盖 11 个关键提交函数,防止重复点击导致重复扣款或数据异常:
- 充值提交、订单创建、批量充值
- 用户/企业信息保存
- 模型配置保存、系统设置保存
💰 财务安全增强
- 金额上下限校验:单次充值 1-1,000,000 元
- 原因必填:所有充值操作必须填写原因,记录至审计日志
- 批量充值防护:限制每次批量操作的用户数和总金额
📋 系统开发日志
server.ts 约 19873 行)对能力型意图早已改为 fallbackLLMDefault()(全局兜底链里首个健康模型,flash 健康时即 flash、down 时取链上首选),但 autoEnterAgentMode(约 21460 行)与 autoEnterAgentMode2 的「媒体模型不可作执行模型」分支(约 21567 行)仍把执行模型硬编码成 deepseek-v4-pro,覆盖掉前面的取值 → 路由记录/决策链日志记 flash、实际执行跑 pro(09-04 那次修复只改了决策链、漏了这两处执行分支)。现按 09-04 定稿策略统一:两处执行分支改用 fallbackLLMDefault()(runAgentLoop 的 agentModelId 正取自该变量,改动真达执行层);后台「路由试算」面板经 registerLensAdminRoutes 注入同一个 fallbackLLMDefault,展示值与真实执行同源;lens-routes.html 三处「执行模型固定为 deepseek-v4-pro」文案同步改为「编排模型由全局兜底链运行时决定」。验证:npx tsc --noEmit 0 错、esbuild 0 错、页面内联 JS 语法通过;pm2 restart siyang-brain 后 /api/health 200;实拉 /api/admin/lens/simulate(能力型 image 意图)返回 targetModel=deepseek-v4-flash(改动前为 deepseek-v4-pro)。pub-wxminapi-index(小程序主接口),商品搜索改用 getnavgoodslist,结果仍以商品卡片展示。仍在测试阶段:uid/openid 暂用固定值,后续再改为动态获取。<工具名>{参数} 纯文本,此前解析不了、原文漏到页面(像报错)。现已支持识别该格式并正常执行(仅识别真实工具,不影响普通文本)。17:58 调整:按「只改该智能体、不影响全局」,撤回上述引擎级改动;改为该智能体换用更强模型 deepseek-v4-pro。
village_goods_search),按关键词搜索微家生活圈商品。演示了「写一个调第三方 API 的工具」的标准做法——独立工具文件 + 在引擎注册 + 密钥存服务器配置(不入库);含超时、错误处理、结果截断。已实测可返回商品列表。.e5eagent(自定义后缀,普通系统打不开),现改为直接导出 <智能体ID>.zip,任何解压工具都能直接打开;包内结构不变,导入端仍同时兼容旧的 .e5eagent 包。<智能体ID>.e5eagent 包(内含提示词、完整配置、关联技能),可用于备份或迁移到其它环境。此前该入口缺失(后端接口与前端函数都在,但按钮未接线)。① 现象:账号 15323827832(张国明)原属「湖南第五元素网络科技开发有限公司」,被邀请进「湖南创际文化传媒有限公司」后,员工档案仍显示原企业的职务、合同类型、在职状态、入职时间、岗位职责——本应是一名全新员工(这些字段为空)。
② 根因:这些 HR 字段一直存在用户全局档案里(单一值),2026-08-22「一人多企业」改造只隔离了部门/管理员/权限,HR 字段被遗漏。
③ 修复:HR 字段改为按企业隔离——每个人在每个企业各存一份,新加入企业即空(全新员工),原企业数据保持不变;切换企业时自动按当前企业显示。
④ 附带体验:员工档案里合同类型/在职状态下拉新增「未设置」选项,未填写时不再默认显示为「全职/正式」。
该修复已生效,无需人工操作。
- 实测:同一参考图组,4 种提示词写法对比——「特征锚点」最优:太后 8.5 分、林夏 9.5 分(原长段落仅 6 分翻车),追平 Seedream 5.0 Pro(9 分)。
- 成本:duo_image-rh 每张约 0.14 元,仅为 Pro(0.39 元)的 1/3——人物一致性达到同等可用水平。
- 落地:溶图默认模型改回 duo_image-rh,且提示词自动使用「特征锚点」结构(角色逐段锚定+参考图显式绑定+严格禁止改变);Seedream 5.0 Pro 保留为「质量优先」手动选项。
- 无需操作:默认已切换,重新生成底图即生效。
① 现象:生成网站等大任务时,AI 会反复整读同一个文件(一次官网任务首页读了 6 遍),对话上下文被文件内容塞满、频繁压缩,又慢又费。
② 优化:a) 同一文件同一内容本会话只读一次,重复读取会被自动跳过并提示直接使用已读内容(文件被修改后会正常重新读取);b) 大文件支持指定行号区间精读,并在工具说明中引导 AI「先用搜索定位、再按区间读取」,避免整读/扫读大文件。
③ 效果:长任务的读取次数与上下文占用显著下降。该优化重启服务后生效。
① 根因:企业登录时,工作台「未读通知」数字与通知中心读写的是两份不同的通知数据(个人目录 vs 企业目录),标了已读另一边看不见;
② 修复:工作台未读数与通知中心改为同一数据源(个人身份看个人通知、企业身份看企业通知);
③ 顺带修复:工作台「环境信号」里点单条「标为已读」之前会把全部通知标成已读,现在只标当前那条。
④ 强刷页面生效。
① 现象:打开「工作台」时,左侧导航栏右缘悬空压在工作台内容上(约 20px),1366×768 笔记本、1280、1024 等分辨率会出现,1440 及以上宽屏正常。
② 原因:工作台页面按「侧边栏宽度 260px」让位,但侧边栏在 769-1366px 区间实际宽度是 280px——写死与实际的偏差导致侧边栏压住工作台左缘。
③ 修复:让工作台让位宽度跟随侧边栏实际宽度(769-1366 为 280px、其余 260px),两种宽度下都精确对齐、不再重叠。刷新页面(或等待自动刷新提示)生效。
① 背景:uni-app 工程构建部署成功(/app/d63e4f854259c_mtr0zah6/)但预览报「连接服务器超时,点击屏幕重试」。
② 根因:AI 生成 uni-app 工程 vite.config.js 未设 base → 构建产物 router base="/",懒加载分包按根路径 /assets/xxx 请求 → 平台部署在子路径 /app/<id>/ 下资源全 404 → uni-app 运行时显示超时提示(puppeteer 复现实锤:分包 JS/CSS 请求 localhost:3002/assets/... 404 + CORS)。
③ 修复:a) vite.config.js 加 base: './'(相对路径)——构建后 base="./" 懒加载分包正常;b) 提示词固化 uni-app/Taro 铁律(base:'./' + manifest h5 router hash + 素材用本地 static/ 不用境外直链);c) 用户工程已改并重新构建部署。
④ 验证:puppeteer 旧产物(超时提示+CORS/404)→ 修复后页面完整渲染(轮播/推荐歌单全部显示,零错误);tsc 0。
① 背景:用户 18874942339 把微信小程序改 uni-app 工程(src/pages 5 页面 .vue 齐全)后点构建部署必失败。
② 根因两连:a) deploy-routes 执行构建硬编码 npm run build——uni-app/taro 只有 build:h5 脚本、无 build 时报 Missing script: build;b) 首次修复改裸跑 buildCmd(uni build)又被沙箱命令白名单拦截(uni 不在 ALLOWED_COMMANDS)。
③ 终版修复:解析 build 命令时记录来源脚本名(build→build:h5→build:web 依次 fallback),执行处统一 npm run <script>(npm 在白名单内,内部调 .bin/uni 不经过首 token 拦截);vite/tsc 等裸命令场景仍走 npm run build 兼容历史。
④ 验证:沙箱真实链路(复制工程→npm install→npm run build:h5)→ DONE Build complete → 产物 dist/build/h5/index.html;tsc 0。
⑤ 连带:服务重启会打断 coder 长任务——本次确认 pending 断点续接对 coder 分支生效(用户会话自动恢复续跑补全了 5 个页面)。
① 共享池分两套:企业身份登录看到本企业的共享池(企业A看不到企业B的);个人身份登录看到个人共享池;
② 企业成员的「企业个人知识库」文档现在也可以共享到本企业共享池(此前被禁止),共享后企业个人列表保留记录并打「已共享」标;
③ 搜索/引用同步按身份隔离:企业身份只命中本企业共享内容,个人身份只命中个人共享池;
④ 跨企业无法查看/下载他人企业的共享文档;企业知识库(管理员管理)的文档仍不可被成员共享。
① 背景:用户说「开发微信小程序」→AI 生成原生 wxml/wxss 工程(无 index.html)→平台预览器只认 HTML/构建型→预览区空白「暂无 HTML 预览」。
② 根因:平台预览=浏览器 iframe,原生小程序需微信开发者工具无法浏览器运行,系统零防护(提示词没说边界/框架检测只认 vite/兜底文案不解释)。
③ 修复:a) 生成物策略(coderPromptBase 新增「项目类型与预览能力边界」铁律)——小程序请求严禁直接生成原生 wxml 工程,默认生成移动端 H5 Web 应用(手机壳布局实时可预览);要可上架原生小程序则先告知无法预览,再生成 uni-app/Taro 工程(配 build:h5 可自动构建 H5 预览);b) 框架识别扩展——新增统一检测(vite/react-scripts/next/nuxt/vue-cli/taro/uni-app/svelte/astro/quasar 依赖 + build/build:h5/build:web 脚本),替换原两处仅 vite 系窄正则;c) 构建链适配——无 build 脚本时 fallback build:h5/build:web,产物目录递归下探(uni-app H5 在 dist/build/h5);d) 预览兜底升级——检测 wxml/wxss/app.json 工程提示「需下载后用微信开发者工具导入」+引导生成 H5/uni-app 版。
④ 验证:框架识别单测 8/8、提示分支 4/4、build 命令选择 4/4、产物下探 dist→dist/build/h5;真实端到端——用户发「做一个在线听音乐的微信小程序」→AI 产出手机壳 H5 音乐应用 index.html(50KB,含 TabBar/播放器/轮播)实时可预览,不再生成 wxml;tsc 0、health 200。
① 现在打开「共享知识库」页签,能看到所有人共享出来的文档和文件夹,每份文档标注共享者姓名;
② 他人共享的文档可以直接查看原文、下载、引用到对话(此前只能靠搜索碰运气,预览/下载还会报「文档不存在」);
③ 别人的共享文档对你只读——不能转私有/移动/删除;带密码的共享文件夹仍需输入密码;
④ 你自己共享的文档依旧显示在个人知识库(带「已共享」标),随时可转回私有。
① 症状:个人知识库把文档共享后文档从列表消失——个人页签只显示个人文档,聊天 @知识库引用选择器也看不到共享文档,且接口 total 与实回数不一致(total=5 实回 4)。
② 修复:a) 个人知识库保留共享记录——已共享文档继续显示在个人知识库并打紫色「已共享」标(悬停提示同步显示在「共享知识库」页签);b) 共享去向告知——共享成功提示「已共享:可在『共享知识库』页签查看,个人知识库保留记录」(批量共享同理),转私有提示「已从『共享知识库』移除」;c) 右键菜单与卡片按钮按文档当前状态显示「共享/转私有」(原按当前页签误判);d) 接口 total 修正,聊天 @引用恢复可见共享文档;企业文档仍不可共享/不混入个人列表(安全规则不变)。
③ 验证:测试账号实测共享后三处(个人页签/共享页签/聊天@引用列表)均可见,共享→转私有往返闭环通过;tsc 零错误。
① 症状:普通聊天发协议审查指令+粘贴协议全文,触发的是「网站生成」而非文档优化。
② 根因:编排分支的 isAppCreation 多页建站判定拿未剥离附件全文的 userRequest匹配——协议/合同全文自带「平台/系统/官网/小程序」等词+指令「生成一份」组合命中建站正则→启动 runOrchestrator 编排引擎;附件剥离 stripAttachments/pureRequest 定义在判定之后,只服务单页直出/isModifyPattern,建站判定本体漏剥(08-01 附件剥离改造遗留缺口)。
③ 修复:a) 附件剥离/文档审查判定上移至 isAppCreation 之前,建站词判定全部改用剥离后 pureRequest;b) 新增 _isDocReviewTask 相邻模式(审查/优化动词+文档名词≤10字)否定建站——不用全文扫匹配排除,因协议全文自带「开发官网/平台系统」描述句会误放行;c) document/writing 意图绝不进应用编排(_capSkipAppCreationDoc)。
④ 验证:行为测试 11/11(协议审查6场景不触发+后台管理系统/官网/单页/修改语义保持);真实 SSE 冒烟——该消息→document 意图→文档撰写助手 ask_user 要协议原文,不再启动编排引擎;tsc 零错误。
data/_system/_deploy/creation-center/(思洋 image.html 移植),模型列表接口改走思洋 /api/model-plaza/models 并按 capabilities 过滤仅图片模型;③入口:应用中心 → 应用广场 →「创作中心」;④安全:SYSTEM_APP_IDS 上锁(禁删/禁改),未登录 401、登录全链路可用;⑤验证:端到端真实生成(Doubao-Seedream 5.0 Pro 生成卡通猫图 1.2MB 落盘,任务 running→completed)。涉及 data/_system/_deploy/creation-center/、deploy-routes.ts。① 背景:上游模型广场现在对每次任务返回一个唯一编号
call_id(并附该次真实扣费),可用于逐笔比对「本地记了多少、上游实际扣了多少」。② 平台已全量接入:所有打往模型广场的请求(对话、图片、视频、音频、语音等)自动记录 call_id、模型、金额、耗时,并绑定到对应的消费记录(个人/企业/请求维度),后台可逐笔追溯。
③ 后台「用量统计 → 上游模型广场对账」新增「call_id 逐笔核对」区块:选 1/7/30 天即可核对——显示本地发起数、上游扣费明细数、命中匹配数/匹配率、本地单边、上游单边、匹配样本费用差,并列出异常明细与按类型汇总;另支持输入单个 call_id 直接查询该笔调用的本地费用与上游扣费。
④ 说明:上游「真实扣费明细」中带 call_id 的记录为近期新增,越新的数据核对越完整。
<工具名>{参数} 纯文本,此前解析不了、原文漏到页面(像报错)。现已支持识别该格式并正常执行(仅识别真实工具,不影响普通文本)。17:58 调整:按「只改该智能体、不影响全局」,撤回上述引擎级改动;改为该智能体换用更强模型 deepseek-v4-pro。
village_goods_search),按关键词搜索微家生活圈商品。演示了「写一个调第三方 API 的工具」的标准做法——独立工具文件 + 在引擎注册 + 密钥存服务器配置(不入库);含超时、错误处理、结果截断。已实测可返回商品列表。.e5eagent(自定义后缀,普通系统打不开),现改为直接导出 <智能体ID>.zip,任何解压工具都能直接打开;包内结构不变,导入端仍同时兼容旧的 .e5eagent 包。<智能体ID>.e5eagent 包(内含提示词、完整配置、关联技能),可用于备份或迁移到其它环境。此前该入口缺失(后端接口与前端函数都在,但按钮未接线)。① 现象:账号 15323827832(张国明)原属「湖南第五元素网络科技开发有限公司」,被邀请进「湖南创际文化传媒有限公司」后,员工档案仍显示原企业的职务、合同类型、在职状态、入职时间、岗位职责——本应是一名全新员工(这些字段为空)。
② 根因:这些 HR 字段一直存在用户全局档案里(单一值),2026-08-22「一人多企业」改造只隔离了部门/管理员/权限,HR 字段被遗漏。
③ 修复:HR 字段改为按企业隔离——每个人在每个企业各存一份,新加入企业即空(全新员工),原企业数据保持不变;切换企业时自动按当前企业显示。
④ 附带体验:员工档案里合同类型/在职状态下拉新增「未设置」选项,未填写时不再默认显示为「全职/正式」。
该修复已生效,无需人工操作。
- 实测:同一参考图组,4 种提示词写法对比——「特征锚点」最优:太后 8.5 分、林夏 9.5 分(原长段落仅 6 分翻车),追平 Seedream 5.0 Pro(9 分)。
- 成本:duo_image-rh 每张约 0.14 元,仅为 Pro(0.39 元)的 1/3——人物一致性达到同等可用水平。
- 落地:溶图默认模型改回 duo_image-rh,且提示词自动使用「特征锚点」结构(角色逐段锚定+参考图显式绑定+严格禁止改变);Seedream 5.0 Pro 保留为「质量优先」手动选项。
- 无需操作:默认已切换,重新生成底图即生效。
① 现象:生成网站等大任务时,AI 会反复整读同一个文件(一次官网任务首页读了 6 遍),对话上下文被文件内容塞满、频繁压缩,又慢又费。
② 优化:a) 同一文件同一内容本会话只读一次,重复读取会被自动跳过并提示直接使用已读内容(文件被修改后会正常重新读取);b) 大文件支持指定行号区间精读,并在工具说明中引导 AI「先用搜索定位、再按区间读取」,避免整读/扫读大文件。
③ 效果:长任务的读取次数与上下文占用显著下降。该优化重启服务后生效。
① 根因:企业登录时,工作台「未读通知」数字与通知中心读写的是两份不同的通知数据(个人目录 vs 企业目录),标了已读另一边看不见;
② 修复:工作台未读数与通知中心改为同一数据源(个人身份看个人通知、企业身份看企业通知);
③ 顺带修复:工作台「环境信号」里点单条「标为已读」之前会把全部通知标成已读,现在只标当前那条。
④ 强刷页面生效。
① 现象:打开「工作台」时,左侧导航栏右缘悬空压在工作台内容上(约 20px),1366×768 笔记本、1280、1024 等分辨率会出现,1440 及以上宽屏正常。
② 原因:工作台页面按「侧边栏宽度 260px」让位,但侧边栏在 769-1366px 区间实际宽度是 280px——写死与实际的偏差导致侧边栏压住工作台左缘。
③ 修复:让工作台让位宽度跟随侧边栏实际宽度(769-1366 为 280px、其余 260px),两种宽度下都精确对齐、不再重叠。刷新页面(或等待自动刷新提示)生效。
① 背景:uni-app 工程构建部署成功(/app/d63e4f854259c_mtr0zah6/)但预览报「连接服务器超时,点击屏幕重试」。
② 根因:AI 生成 uni-app 工程 vite.config.js 未设 base → 构建产物 router base="/",懒加载分包按根路径 /assets/xxx 请求 → 平台部署在子路径 /app/<id>/ 下资源全 404 → uni-app 运行时显示超时提示(puppeteer 复现实锤:分包 JS/CSS 请求 localhost:3002/assets/... 404 + CORS)。
③ 修复:a) vite.config.js 加 base: './'(相对路径)——构建后 base="./" 懒加载分包正常;b) 提示词固化 uni-app/Taro 铁律(base:'./' + manifest h5 router hash + 素材用本地 static/ 不用境外直链);c) 用户工程已改并重新构建部署。
④ 验证:puppeteer 旧产物(超时提示+CORS/404)→ 修复后页面完整渲染(轮播/推荐歌单全部显示,零错误);tsc 0。
① 背景:用户 18874942339 把微信小程序改 uni-app 工程(src/pages 5 页面 .vue 齐全)后点构建部署必失败。
② 根因两连:a) deploy-routes 执行构建硬编码 npm run build——uni-app/taro 只有 build:h5 脚本、无 build 时报 Missing script: build;b) 首次修复改裸跑 buildCmd(uni build)又被沙箱命令白名单拦截(uni 不在 ALLOWED_COMMANDS)。
③ 终版修复:解析 build 命令时记录来源脚本名(build→build:h5→build:web 依次 fallback),执行处统一 npm run <script>(npm 在白名单内,内部调 .bin/uni 不经过首 token 拦截);vite/tsc 等裸命令场景仍走 npm run build 兼容历史。
④ 验证:沙箱真实链路(复制工程→npm install→npm run build:h5)→ DONE Build complete → 产物 dist/build/h5/index.html;tsc 0。
⑤ 连带:服务重启会打断 coder 长任务——本次确认 pending 断点续接对 coder 分支生效(用户会话自动恢复续跑补全了 5 个页面)。
① 共享池分两套:企业身份登录看到本企业的共享池(企业A看不到企业B的);个人身份登录看到个人共享池;
② 企业成员的「企业个人知识库」文档现在也可以共享到本企业共享池(此前被禁止),共享后企业个人列表保留记录并打「已共享」标;
③ 搜索/引用同步按身份隔离:企业身份只命中本企业共享内容,个人身份只命中个人共享池;
④ 跨企业无法查看/下载他人企业的共享文档;企业知识库(管理员管理)的文档仍不可被成员共享。
① 背景:用户说「开发微信小程序」→AI 生成原生 wxml/wxss 工程(无 index.html)→平台预览器只认 HTML/构建型→预览区空白「暂无 HTML 预览」。
② 根因:平台预览=浏览器 iframe,原生小程序需微信开发者工具无法浏览器运行,系统零防护(提示词没说边界/框架检测只认 vite/兜底文案不解释)。
③ 修复:a) 生成物策略(coderPromptBase 新增「项目类型与预览能力边界」铁律)——小程序请求严禁直接生成原生 wxml 工程,默认生成移动端 H5 Web 应用(手机壳布局实时可预览);要可上架原生小程序则先告知无法预览,再生成 uni-app/Taro 工程(配 build:h5 可自动构建 H5 预览);b) 框架识别扩展——新增统一检测(vite/react-scripts/next/nuxt/vue-cli/taro/uni-app/svelte/astro/quasar 依赖 + build/build:h5/build:web 脚本),替换原两处仅 vite 系窄正则;c) 构建链适配——无 build 脚本时 fallback build:h5/build:web,产物目录递归下探(uni-app H5 在 dist/build/h5);d) 预览兜底升级——检测 wxml/wxss/app.json 工程提示「需下载后用微信开发者工具导入」+引导生成 H5/uni-app 版。
④ 验证:框架识别单测 8/8、提示分支 4/4、build 命令选择 4/4、产物下探 dist→dist/build/h5;真实端到端——用户发「做一个在线听音乐的微信小程序」→AI 产出手机壳 H5 音乐应用 index.html(50KB,含 TabBar/播放器/轮播)实时可预览,不再生成 wxml;tsc 0、health 200。
① 现在打开「共享知识库」页签,能看到所有人共享出来的文档和文件夹,每份文档标注共享者姓名;
② 他人共享的文档可以直接查看原文、下载、引用到对话(此前只能靠搜索碰运气,预览/下载还会报「文档不存在」);
③ 别人的共享文档对你只读——不能转私有/移动/删除;带密码的共享文件夹仍需输入密码;
④ 你自己共享的文档依旧显示在个人知识库(带「已共享」标),随时可转回私有。
① 症状:个人知识库把文档共享后文档从列表消失——个人页签只显示个人文档,聊天 @知识库引用选择器也看不到共享文档,且接口 total 与实回数不一致(total=5 实回 4)。
② 修复:a) 个人知识库保留共享记录——已共享文档继续显示在个人知识库并打紫色「已共享」标(悬停提示同步显示在「共享知识库」页签);b) 共享去向告知——共享成功提示「已共享:可在『共享知识库』页签查看,个人知识库保留记录」(批量共享同理),转私有提示「已从『共享知识库』移除」;c) 右键菜单与卡片按钮按文档当前状态显示「共享/转私有」(原按当前页签误判);d) 接口 total 修正,聊天 @引用恢复可见共享文档;企业文档仍不可共享/不混入个人列表(安全规则不变)。
③ 验证:测试账号实测共享后三处(个人页签/共享页签/聊天@引用列表)均可见,共享→转私有往返闭环通过;tsc 零错误。
① 症状:普通聊天发协议审查指令+粘贴协议全文,触发的是「网站生成」而非文档优化。
② 根因:编排分支的 isAppCreation 多页建站判定拿未剥离附件全文的 userRequest匹配——协议/合同全文自带「平台/系统/官网/小程序」等词+指令「生成一份」组合命中建站正则→启动 runOrchestrator 编排引擎;附件剥离 stripAttachments/pureRequest 定义在判定之后,只服务单页直出/isModifyPattern,建站判定本体漏剥(08-01 附件剥离改造遗留缺口)。
③ 修复:a) 附件剥离/文档审查判定上移至 isAppCreation 之前,建站词判定全部改用剥离后 pureRequest;b) 新增 _isDocReviewTask 相邻模式(审查/优化动词+文档名词≤10字)否定建站——不用全文扫匹配排除,因协议全文自带「开发官网/平台系统」描述句会误放行;c) document/writing 意图绝不进应用编排(_capSkipAppCreationDoc)。
④ 验证:行为测试 11/11(协议审查6场景不触发+后台管理系统/官网/单页/修改语义保持);真实 SSE 冒烟——该消息→document 意图→文档撰写助手 ask_user 要协议原文,不再启动编排引擎;tsc 零错误。
data/_system/_deploy/creation-center/(思洋 image.html 移植),模型列表接口改走思洋 /api/model-plaza/models 并按 capabilities 过滤仅图片模型;③入口:应用中心 → 应用广场 →「创作中心」;④安全:SYSTEM_APP_IDS 上锁(禁删/禁改),未登录 401、登录全链路可用;⑤验证:端到端真实生成(Doubao-Seedream 5.0 Pro 生成卡通猫图 1.2MB 落盘,任务 running→completed)。涉及 data/_system/_deploy/creation-center/、deploy-routes.ts。deploy-routes.ts、public/static/js/chat.js、public/static/css/main.css、public/index.html。deploy-routes.ts、public/static/js/chat.js、public/index.html。①安全止血(P0):后台会话 token 改哈希存储(DB 泄露不再直接接管后台)、敏感文件权限收紧(后台库/成员目录 600/700)、部署运行能力从免费档剥离到付费档+企业管理员。
②数据/性能(P1):任务驱逐只删终态不再静默删运行中任务(已计费任务不再成孤儿)、tasks.json 递归剥离 base64 大字段(61MB→约20MB,落盘不再阻塞)、每日快照接入自动恢复链、项目文件原子写入+损坏留档、短剧项目详情改走内存不再整读 61MB、收片/素材下载全部加超时。
③加固(P2):视频分析接口补鉴权防越权、诊断分享删除硬编码密钥、云盘分享码升级 128 位+7 天过期、匿名提交接口限流、SQLite 全线加 busy_timeout、前端任务轮询去重。
public/short-drama.html(extractAssets 支持 force 强制模式)。data/users/<u>/ppt/、企业 data/tenants/<tid>/members/<u>/ppt/),每个用户只能看到自己的历史,天然归属;②孤儿清理——旧版全局共享目录 data/ppt/ 下的 43 个历史演示文稿(2026-07-23~07-26 开发期生成,无 ownerId、无任务/对话/日志任何归属线索)已备份至 /root/backups/ppt-legacy-orphan-20260831/ 并删除;③防复发——无 ownerId 的兜底落盘隔离到 data/ppt/_orphan/ 子目录,不再产生根目录孤儿、不参与任何读取。涉及 ppt-module.ts。public/static/js/chat.js、public/index.html(bump chat.js?v)。- 长文案不再被截断:H3 音频驱动模型单段上限约 10 秒、图片数字人 2.0 约 30 秒。系统现在按中文句子/逗号边界把文案切成安全片段(每段留安全边),逐段生成数字人画面后用 ffmpeg 无缝拼接为整片;单个超长句会按字符硬切兜底;最多 8 段(超出提示精简文案或换模型)。
- 预生成配音同样处理:先试听再生成的流程中,若配音超过所选模型上限,服务端用 ffmpeg 静音检测在词句间隙找最接近均分点的切位切分,避免切断正在说的字词。
- 场景融合:创作台右栏新增「场景融合」面板——从素材库场景图点选 1-3 个(带序号角标),选版式(片头+片尾 / 仅片头 / 仅片尾)与单段时长(2-5 秒)。场景画面以 Ken Burns 缓推/缓拉运镜渲染后插到口播前后,口播配音整体延迟保持连续,成片从「干讲」变成有开场的完整叙事视频。
- 计费校准:H3 任务此前按默认 10 秒档计费,现按文案长度估算实际时长计费(约 4 字/秒)。
- 进度可视化:创作台进度条显示分段进度(第 X/Y 段)与「拼接分段画面」「融合场景画面」阶段。
- 涉及文件:
dh-audio-utils.ts(新增)、server.ts、media-routes.ts、public/short-drama.html、public/short-drama.css。
- 音色试听:创作台与批量页「音色」下拉右侧新增喇叭按钮(SVG 图标),点击调用 edge-tts 合成固定短句即时播放——合成结果以音频流直接返回,不占用云盘、不进素材库、不计费;播放中按钮变紫色实心,再点一次停止;每分钟限 12 次防滥用。
- 批量逐条进度:批量提交后左侧进度区实时列出每条文案的状态(排队中 / 配音中 / 数字人播报 / 完成 / 失败),顶部汇总「完成 X/Y · 失败 Z」,失败条目标题可看原因;数据复用作品列表接口,签名去重防闪烁,批次全部结束 30 分钟后自动收起。
- 稳定性修复:媒体路由模块为 ESM 模块但引用了
__dirname,首次触发会 500——已在模块内补齐定义(同时修复抖音分析路由的同款潜伏问题)。 - 涉及文件:
media-routes.ts、public/short-drama.html、public/short-drama.css。
- 克隆/设计音色一键到底:选择克隆或声音设计后直接点「生成成片」,系统自动先生成配音再提交成片——此前会静默回退标准音色生成,与用户所选声音不符。
- 配音失效保护:修改文案、切换配音方式/音色、更换参考音频后,已生成的试听配音自动作废,避免「新文案配旧声音」错位成片。
- 形象改名升级:由浏览器原生小弹窗改为应用内风格模态,支持 Enter 确认 / Esc 取消 / 点遮罩关闭。
- 弹窗关闭三件套:AI 生成形象、导入形象、AI 写稿三个弹窗补齐右上角关闭按钮(SVG 图标)、Esc 键与点击遮罩关闭,操作与其他弹窗一致。
- 批量页直接选形象:批量生成左侧形象区从只读展示改为迷你网格,可直接点选切换,无需切回创作台。
- 失败重试与删除:作品带中失败/取消的任务出现「重试」按钮(继承原参数重新生成);完成/失败的作品出现「删除」按钮清理记录(不影响云盘视频文件)。
- 进度恢复:刷新或离开页面后再回到数字人板块,进行中的任务自动恢复创作台进度条显示。
- H3 时长提示:选择 H3 音频驱动模型时禁用时长档位并悬浮提示(该模型成片时长跟随配音时长)。
- 涉及文件:
media-routes.ts、server.ts、public/short-drama.html、public/short-drama.css。
- 形象库:卡片统一固定比例展示,竖屏视频与方形人物不再互相拉伸变形,卡片等高整齐;编辑/删除按钮触控区加大,移动端更易点击。
- 提示与状态:右上角功能提示改为带图标的紫色提示条(清晰可读);「创作台 / 批量生成」切换激活态加紫色填充与阴影,一眼识别当前页面;空态增加图标引导。
- 细节规范:按钮圆角统一为圆角矩形;表单 hover/focus 增加品牌色光晕反馈;作品卡片增加 hover 提升效果;批量生成形象卡文本规范显示;数字编号使用等宽数字字体对齐。
- 验证:桌面、移动端、批量生成、暗色模式四态复核,无拉伸变形、无横向溢出、无白底残留,对比度达标。
- 涉及文件:
public/short-drama.css、public/short-drama.html。
- 优化:中间预览窗口不再固定横屏,改为跟随所选角色/成片方向——竖屏形象显示为竖屏预览窗口,横屏内容显示为横屏窗口,内容完整显示不裁切。
- 细节:预览窗口形状切换带平滑过渡;空态(未选形象)保持默认尺寸。
- 涉及文件:
public/short-drama.css、public/short-drama.html。
- 问题:点击数字人作品放大预览时,视频被挤在创作台小预览区内,竖屏几乎没放大。
- 优化:点击作品(视频画面或「预览」按钮)改为全屏深色浮层展示——视频按原始画幅完整显示、尺寸大幅放大,支持右上角关闭按钮、点击遮罩或 Esc 键关闭。
- 涉及文件:
public/short-drama.html。
- 问题:作品带中竖屏成片被裁切显示不完整。
- 优化:作品卡片按视频实际画幅自适应——横屏成片显示为宽扁卡片,竖屏成片显示为高瘦卡片,画面完整显示不裁切、不拉伸、不变形。
- 适用:数字人板块「数字人作品」作品带全部历史与新增成片。
- 涉及文件:
public/short-drama.html。
- 问题:数字人板块作品带中历史成片全部无法预览(视频黑屏)。
- 根因:历史成片文件保存在个人云盘目录,而企业模式下按企业成员目录查找,路径不一致导致文件读取 404。
- 修复:文件读取接口在企业目录找不到时自动回退到本人个人目录(仅同用户文件,不影响权限边界),历史作品恢复可预览。
- 验证:历史数字人作品播放器正常加载(元数据加载完成、无错误),零 JS 报错。
- 涉及文件:
server.ts。
- 结果取回:数字人口播成片任务支持断点续跑——服务异常中断后,已提交/已完成的子任务结果会自动回收并完成父任务收尾,不再出现「任务失败但视频实际已生成」的情况。
- 比例尺寸:MiniMax H3 图片数字人(e5e-minimax-h3-szr)此前未传递比例与清晰度参数,生成结果固定为 16:9 横屏;现已按创作台选择的比例(9:16/16:9/1:1 等)与清晰度档位生成,实测 9:16 输出 736×1280 竖屏。
- 说明:音频驱动数字人的视频时长跟随配音长度(对口型),文案短则成片短,属于模型特性。
- 验证:真实链路提交 h3-szr 9:16 任务出片成功且为竖屏;老板 20:12 失败的成片已恢复为已完成并可在作品区查看。
- 涉及文件:
server.ts。
- 问题修正:模型列表此前存在固定高度、默认行高、移动端触控规则和标签换行相互覆盖的问题,导致视觉上忽高忽窄。
- 统一规范:模型项统一 28px 高度,模型名称与能力标签保持同一行,标题行高 1.2,菜单宽度调整为 360px。
- 响应式:桌面、平板、手机分别校准;手机端不再套用导航项 44px 高度,菜单仍按视口自适应。
- 验证:生产 Puppeteer 实测桌面/平板/手机均加载 7 个模型项,实际行高均为 28px,标题高度约 15–16px。
- 模型项高度从 24px 调整为 27px,内边距同步调整,保持名称、图标、标签和复选框垂直居中。
- 模型简介继续隐藏,单行紧凑布局和交互逻辑不变。
- 模型项高度从 29px 调整为 24px,内边距同步收紧。
- 模型名称、图标、标签、复选框和选中交互保持不变,简介继续隐藏。
- 模型单行高度从 19px 增加 10px 至 29px,内边距同步调整,名称、图标、标签和复选框保持垂直居中。
- 简介仍保持隐藏,模型列表继续采用单行紧凑布局。
- 行高:模型项由 34px 压缩至 19px,内边距同步收紧,列表更紧凑。
- 保留:模型名称、类型图标、标签、选中态、多选复选框和点击交互不变。
- 版本:前端资源版本已更新。
- 列表密度:模型单行高度由 50px 压缩至 34px,上下内边距和模型项间距同步收紧。
- 复选框:对比/会议多选圆形复选框由 24px 缩小至 18px,内部勾选标记和右侧间距同步缩小。
- 可用性:保留模型项完整点击区域、hover、选中和键盘焦点反馈。
- 版本:前端资源版本已更新,避免旧 CSS 缓存影响显示。
- 显示规则修正:模型列表现在只显示模型名称、类型图标和能力标签,不再显示模型名称下面的简介文案。
- 适用范围:动态模型列表与 e5e-Lens 智能路由项统一处理,模型项保持单行紧凑布局。
- 修正原因:此前将「单行模式」误解为「简介单行省略」,本次改为正确的「简介不显示」。
- 版本:前端资源版本已更新,避免浏览器继续读取旧 CSS 缓存。
- 列表密度:所有模型名称下方的简介统一为单行显示。
- 超长处理:简介超过可用宽度时使用省略号,不再换行撑高模型列表。
- 保留信息:模型名称、类型图标、能力标签、当前选中态和对比/会议入口不受影响。
- 涉及文件:
public/static/css/main.css、public/index.html。
- 入口样式:模型菜单底部「对比」「会议」改为 SVG 图标在前、文字在后的横向布局。
- 去除双层外框:同时清除按钮外层操作容器与按钮自身的边框、背景、阴影,避免出现两层框体;对比中/会议中状态也保持无框,仅使用主题色表达状态。
- 交互保持:对比、会议的进入/切换逻辑不变,清除和多选确认按钮仍保留原有操作语义。
- 验证:chat.js node --check 通过,生产页面健康检查正常,版本号已更新。
- 审计范围:左上角模型触发器、模型菜单浮层、e5e-Lens 智能路由项、搜索与类型/厂商筛选、模型列表项、对比/会议多选态,以及亮色/暗色主题。
- 主要优化:触发器补齐键盘焦点与 aria-expanded 状态;菜单统一 336px 规范宽度、主题阴影与圆角;当前模型在列表内显示主题色对勾,默认单选与对比/会议多选层级更清晰;列表项补齐 hover/pressed/focus-visible 状态与统一高度;移除 e5e-Lens 项浅色硬编码,暗色模式不再出现白色补丁;底部主操作按钮统一使用主题色令牌。
- 使用规范:日常直接点击模型名称完成单选;对比/会议从菜单底部进入多选模式,列表仅显示语言模型;搜索、类型、厂商筛选可组合使用;键盘可通过 Tab 聚焦模型触发器与列表项。
- 验证:生产环境 3002 Puppeteer 覆盖关闭、打开、展开、多选、暗色五态,模型列表 7 项,菜单定位与主题状态正常;chat.js node --check 通过。
- 涉及文件:
public/index.html、public/static/css/main.css、public/static/js/chat.js。
- 灵猫后台分镜预览修复:素材管理「分镜」分类原只显示「无图」占位符(adapter 未提取分镜缩略图)。已补
listAllMaterialsstoryboards 分支的refImage(shot.thumb base64 缩略图)+ 新增viewImg大图预览函数,分镜卡片显示缩略图、点击打开大图(原点击跳项目详情/播视频)。 - 素材库场景默认大图:场景图片点击打开默认进全景(体验不对),改为默认
viewLibImg看大图,「360° 角标 / 全景」按钮才进openPanoViewer全景模式。 - 涉及文件:
lingmao-admin-adapter.ts / public/lingmao-admin.html / public/short-drama.html。
- 标签库:标签管理页可新建(名称+颜色+权重)/编辑/删除标签(唯一创建入口)。
- 批量分配:模型广场/内置模型列表勾选模型 → 批量设置/取消标签(多选框+颜色效果预览)。
- 展示:模型表格标签列(颜色徽标)、权重排序、首页/用户中心广场标签徽标+标签权重排序。
- 涉及:
admin-module.ts / admin-mgmt-module.ts / model-plaza-routes.ts / admin.js / admin.html / index.html / user-center.html / chat.js。
- 修复:chat.js 模型选择器标签从标题单行(nowrap+ellipsis 截断)移出为独立 .model-item-tags 行(flex-wrap 可换行完整展示);main.css 新增样式;index.html chat.js/main.css 版本号 1787410000 + BUILD 202608221616(触发 SW 缓存自动清理)。
- 验证:本地 3002 实测 chat.js 含新版代码、BUILD 生效、health 200。
- 涉及文件:
public/static/js/chat.js、public/static/css/main.css、public/index.html。
- 同步内容(思洋 25c91c2):①全局 LLM 兜底多级链——GLOBAL_LLM_FALLBACK_CHAIN=[deepseek-v4-flash, Doubao-Seed-2.0-lite, qwen3.7-plus] + fallbackLLMDefault()(返回链上首个广场可用模型,缓存 60s),callModelCore 配置缺省/Gemma 降级/Agent 流式降级/modifyLLM/gemma 代理改写/子代理默认等 16 处单兜底全部接入;callModelCore 主模型空内容时沿链换模型重试一次(无副作用);config MODELS 内置 flash 直连终极兜底保持。②index.html 删除 plazaSelectedIds.add("deepseek-chat") 死默认残留(已不在广场列表,_derivePlazaDefaults 推导替代)。
- 验证:tsc 0、node --check 0、服务重启 health 200。
- 涉及文件:
server.ts、public/index.html。
- 新模型:模型广场新增
e5e_MiniMax_H3_img2video(图生·全能参考_无损),GPU 工作流e5e_MiniMax_H3全能参考_无损,支持图片(最多 9 张)/视频(1)/音频(3)作为参考。 - 契约映射:137/139/142/324/325/326/327/328/329:image=参考图、330:video=参考视频、333/334/338:audio=参考音频、115:aspect_ratio=比例、115:megapixels=清晰度(0.4标清/0.9高清/2.0超清)、132:value=时长秒、138:value=提示词;清晰度/时长与文生视频一致(标清≤15s/高清≤10s/超清≤5s)。
- 部署:createVideoTask 新增 img2video 分支 + getMediaModelSpec 识别(至少 1 图必传)+ 短剧/短视频「全能参考」下拉新增 + model_tier_map 归入 tier_flagship。
- 测试:直连模型广场提交 + 系统 /api/media/generate 实测 ratio=9:16 (Portrait Widescreen) mp=0.4 sec=5 imgs=1 正确。
- ⚠️ 遗留(上游侧):完成返回 data 空(同文生视频),视频 URL 未回填,上游修复后思洋自动收片。
- 涉及文件:
server.ts / public/short-drama.html。
- 新模型:模型广场新增
e5e_MiniMax_H3_txt2video(文生视频·无损),GPU 工作流e5e_MiniMax_H3文生视频_无损,取值方式同 H3(input_values 节点字段)。 - 契约映射:
234:value=提示词、235:megapixels=清晰度(0.4标清480x864 / 0.9高清1280x736 / 2.0超清1920x1088)、236:value=时长秒;后端按清晰度钳制时长(标清≤15s / 高清≤10s / 超清≤5s),前端「清晰度」maxEdge(736/960/1280)自动映射 megapixels。 - 部署:createVideoTask 新增 txt2video 分支 + megapixels 透传;短剧/短视频「视频·文生视频」下拉新增该模型;模型档位归入 tier_flagship。
- 测试:直连模型广场提交(queued→processing→completed 约 40s)+ 系统 /api/media/generate 实测 mp=0.9/sec=5 正确。
- ⚠️ 遗留(上游侧):该模型(同 U03 文生)上游完成时返回 data 空(视频 URL 未回填),属模型广场收片层问题;上游修复后思洋轮询会自动收片,无需改代码。
- 涉及文件:
server.ts / public/short-drama.html。
- 根因:反推模型 2.1-turbo 生成六维描述需 73-100+ 秒,超上游网关超时返回 504,反推静默失败走图生,导致服装发型不对。
- 修复:反推模型优先 Doubao-Seed-2.0-mini(12 秒跑完六维,反推同样准)。
- 涉及文件:
server.ts。
- 需求(老板):历史记录页面增加发布按钮,点击可把对应视频发布到创意广场。
- 改动:历史卡片操作区(成片存在时)新增「发布到广场」按钮,复用现有发布弹窗与接口,审核通过后展示在首页用户案例。
- 涉及文件:
public/short-drama.html。
- 背景:用户中心公告板块(uc.announcements 页级权限点)早已上线,但企业主站前端权限(entweb.uc.announcement)在系统后台权限点池与员工「前端权限」弹窗分组清单中漏注册——企业管理员在后台找不到「公告」权限项。
- 修复:①系统后台权限种子补
entweb.uc.announcement(重启自动入库,实测 permissions 表已含);②员工「前端权限」弹窗用户中心分组补「公告」项;③相关版本号刷新。 - 效果:系统后台权限管理、企业权限中心、员工前端权限弹窗三处均可见「公告」权限点,可按角色/员工配置用户中心公告入口显隐。
- 涉及文件:
admin-module.ts / public/static/js/hr-module.js / public/static/js/enterprise.js。
- P1-1 企业文档禁转「全平台共享」:文档类型接口增加约束——企业文档(带企业标识)禁止转为
shared(403 拦截)。此前企业成员可把企业文档一键转为全平台可见(实测另一用户个人搜索命中全文),现已堵住;个人文档转共享不受影响。 - P1-2 文档预览补密码门控:office 在线预览接口补齐文件夹密码锁校验(原缺失——内容/下载接口均有,实测加密文件夹内文档可经预览接口绕过密码锁读取明文,现 423 拦截)。
- P2 四项:①移动文档校验目标文件夹归属(防移入他人/无效文件夹);②文件夹元信息接口对非归属者隐藏密码提示;③个人模式搜索排除企业文档(个人知识库语义修复,企业搜索不受影响);④OCR/解锁限流记录定期清理。
- 验证:TypeScript 零错误、16+ 项实测回归全过(权限拦截/密码门控/搜索三态/核心流程)、2026-08-07 基线修复复核全部有效、测试数据全部清理。
- 涉及文件:
kb-routes-module.ts / kb-module.ts。
- P0-1 路径穿越导出修复:技能导出接口补
validateSkillId校验 + 目录前缀白名单——原?id=../../可穿越导出任意用户技能甚至平台数据目录(实测 200 ZIP),现已 400 拦截;同时补异常兜底防请求挂起。 - P0-2 路径穿越删除修复:技能删除(body 版)补
validateSkillId——原{id:'../../xxx'}可递归删除任意目录(实测删除成功),现已拦截。 - P1-1 技能使用说明 XSS 修复:技能详情页 USE_GUIDE 改 sandbox iframe 渲染(原 innerHTML 直插,恶意技能的
onerror等事件属性可执行 = 存储型 XSS,Puppeteer 实测)。sandbox 无脚本权限,同源资源正常加载。 - P1-2 技能包 zip bomb 防护:导入补解压总大小 ≤200MB、单文件 ≤20MB 限制(原仅 200 条目限制,高压缩比炸弹可膨胀 GB 级内存/磁盘),实测超限 400 拦截且不落盘。
- P2 五项:①ComfyUI 技能任务重启后恢复(原恢复分支模型名不匹配被误标失败);②导出接口异常兜底;③ComfyUI 生成限流记录定期清理;④技能广场旧发布记录自动补快照(防作者删改后安装失效);⑤技能自带外部 ComfyUI 地址执行留审计日志。
- 验证:TypeScript 零错误、14 项实测回归全过(穿越拦截/正常操作回归/zip bomb/密码锁/列表详情保存)、测试数据全部清理。
- 涉及文件:
skills-routes-module.ts / server.ts / public/static/js/chat.js / public/index.html。
- P0-1 存储型 XSS(svg 内联预览)修复:预览白名单
CLOUD_INLINE_SAFE_EXT移除 svg——svg 可内嵌脚本,?preview=1时浏览器直接渲染执行(公开分享链接无需登录即可触发,Puppeteer 实测脚本执行)。修复后 svg 一律 attachment 下载,前端缩略图/预览用 img 标签不受影响。 - P0-2 企业个人云盘上传落错盘修复:①
scope=member兼容 query 参数(前端传 query、后端原只读 body 永不生效);②分支顺序修复(原被「无 tenant_id 提前返回个人盘」挡成死代码);③分片上传 init 存身份参数、complete 还原落盘目录。修复后企业个人盘文件正确落企业成员隔离盘,列表可见、不再「上传即消失」。 - P1-1 企业共享盘密码锁绕过修复:下载/预览路由的密码检查去掉「仅个人盘」前置条件,企业文件带 tenant_id 下载同样校验密码(实测 403 拦截 + 解锁放行)。
- P1-2 企业文件移动越权修复:移动接口补上传者/管理员所有权校验(原无校验,普通成员可移走他人文件),移动后同步所有权键防文件无主。
- P1-3 密码文件缩略图泄露修复:缩略图接口补密码锁检查。
- P2 四项:①分享链接记录企业上下文(token 登录企业用户分享不再 404);②云盘广场记录发布者身份,企业成员盘文件发布可正常下载(原恒读个人目录 404);③HEVC 转码缓存增加 30 天 TTL 清理;④上传去重同大小候选限量比对(大目录上传提速)。
- 附带修复:删除/批量删除/文件夹删除后清理企业所有权记录,防脏数据堆积。
- 验证:TypeScript 零错误、16 项实测回归全过(XSS 关闭/隔离落盘/密码锁/移动权限/缩略图/分享/广场/回收站)、测试数据全部清理。
- 涉及文件:
asset-routes.ts / server.ts。
- 决策(老板):实测对比后,两步方案(反推→文生图→图生)相似度 4 分,低于优化后纯文生 8 分,回退两步方案,定纯文生路线。
- 最终规则:真人照片(真实相机拍)→ Seedance 拒真人脸 → 反推六维描述 → 不传图走文生;AI 虚拟人物/动漫/卡通 → Seedance 接受 → 直接图生传图。
- 反推优化:外貌强调脸型轮廓/表情神态精确,描述末尾加负面约束(禁尖脸/露齿笑/薄刘海/改发色/改服装),纯文生相似度 5→8 分。
- 涉及文件:
server.ts。
- 需求(老板):参考 deepseek 经验,反推提示词要极其细致才能近乎 100% 还原人物。
- 改动:人物反推描述从简短外貌升级为六维完整描述:构图(景别/视角/机位)+ 外貌(脸型/五官/发型发色/气质)+ 服装(颜色/款式/材质)+ 光影(光源/软硬/色调)+ 背景(环境/虚化/氛围)+ 动作(呼吸/眨眼/发丝微动,全程一致不变形)。
- 涉及文件:
server.ts。
- 根因:原反推模型 kimi-k3 是推理模型,思考过程吃光 token 导致输出空或描述不准,反推人脸/发型/服装不对。
- 修复:视觉反推优先用 Doubao-Seed-2.1-turbo(兑底 2.1-pro / 其他豆包系),实测反推细致准确。
- 涉及文件:
server.ts。
- 根因:后端时长 clamp 下限写死 10 秒,选 5 秒/8 秒被强制抬到 10 秒(前端有 5/8 秒选项却不生效)。
- 修复:下限改 5 秒,对齐前端最小选项与 Seedance 4~15 秒支持范围。
- 涉及文件:
server.ts。
- 根因:任务完成落盘的
result.model硬编码写死为 H3 U06,用户选 Seedance 实际生效但结果/历史记录「模型」字段永远显示 H3 U06。 - 修复:改为记录实际镜头模型(阶段 4 选择的真实模型),兑底到用户选的视频模型。
- 涉及文件:
server.ts。
- 根因:识图反推把参考图转成公网 URL 喂给视觉模型,但首选视觉模型 kimi-k3 不支持 URL 读图(只支持 base64),返回 502「unsupported image url」→ 反推静默失败,真人图没被识别。
- 修复:新增
assetUrlToDataUri读本地图转 base64 data URI,识图反推改用 data URI 读图,任何视觉模型通用。 - 验证:kimi-k3 + base64 正确返回真人判定(
isRealPerson=true)+ 150-200 字细致外貌描述。 - 涉及文件:
server.ts。
- 需求(老板):Seedance 默认不支持真人形象,上传真人头像会被拒。方案:上传真人头像后用识图模型反推细致外貌描述,再编排文生视频完成任务。
- 实现:①识图反推升级——额外返回
isRealPerson真人脸判定,人物描述从 80 字升级到 150-200 字结构化(脸型/五官/发型/服装/配饰/妆容等);②上传图处理后:Seedance 系列遇真人图则反推成文字描述、不传真人图,非真人图正常作参考图;H3 系列保持原规则不动。 - 三条分支(仅 Seedance):只有真人图→反推→文生视频;真人+场景/卡通→真人图换提示词、非真人图走全能参考;无真人图→正常全能参考。
- 涉及文件:
server.ts。
- 根因:上游 Seedance 成功响应里视频地址在
content.video_url(对象形式),系统三处解析写成content[0].video_url(数组形式)→ URL 恒空 → 误判「completed 但 data 空」无限空轮询,视频永远收不到片。 - 修复:三处响应解析(主轮询/延迟回收/通用媒体)补
content.video_url对象形式优先,兼容对象 + 数组两种格式。 - 另排查:脚本生成失败根因是上游模型广场 429 余额不足(老板已充值恢复)。
- 验证:老板 Doubao-Seedance-2.0-mini 文生视频成功生成,10 秒成片落企业云盘、签名地址可下载。
- 涉及文件:
server.ts。
- 需求(老板):模型设置里「视频 · 文生视频」下拉增加 Doubao-Seedance-2.0-mini 系列模型。
- 修复:「文生视频」下拉补齐
Doubao-Seedance-2.0-mini(Seedance 2.0 Mini 文生)和Doubao-Seedance-2.0-fast(Seedance 2.0 Fast 文生)两个选项,与「全能参考」下拉的 Seedance 系列对齐。 - 说明:后端已支持 Seedance 文生视频(content 数组格式 + 旧模型名映射),无需改后端;纯前端选项新增。
- 涉及文件:
public/short-drama.html。
- 需求(老板):管理后台需要所有用户的数据,并且是所有数据,目前只显示了一部分。
- 缺口根因:原素材管理只读 5 个索引文件(全平台 186 条)——资产生成任务只落盘图片不写索引、根目录散文件、项目剧本、项目分镜、全景子图全部不可见。
- 全量化(现 619 条):①目录扫描合并(道具 1→149、场景 0→134);②根目录散文件;③项目剧本(标题/集数/进度/概念,点卡片进项目详情);④项目分镜(已生成视频的镜头 90 条:集/镜/景别/时长/台词,封面+可播放);⑤场景全景子图计数;分类 Tab 扩为 8 类(全部/剧本/分镜/角色/道具/场景/其他/音频)。
- 连带修复:分镜视频地址缺用户参数导致播放 401(36/90),签名逻辑加归属兜底,项目详情弹窗分镜签名同步修复;视频文件已被清理的分镜标注「文件已清理」(6 条)。
- 验证:TypeScript 零错误、Puppeteer 17/17、数据对账(道具=1 索引+148 散图)、存活分镜视频实测 200 可播。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html / tests/lingmao-admin-materials.cjs。
- 根因:上游模型广场提交视频任务超时后返回的任务 ID 无效,轮询时上游返回 HTML 404/502 页(而非 JSON),系统把 HTML 当 JSON 解析报
Unexpected token '<',技术错误原样展示给用户。 - 修复:①上游错误翻译函数识别 HTML/JSON 解析错误,统一翻译成「上游视频服务暂不可用或任务已过期,请稍后重试或重新生成」;②轮询响应前检查内容类型,HTML 响应直接判为任务过期并给出友好提示。
- 说明:根本原因是上游模型广场到 GPU 的代理/状态桥接层提交超时(今日已排查),本修复将技术报错转为人话,不影响「提交只执行一次」的幂等保护。
- 涉及文件:
server.ts。
- 需求(老板):素材管理增加分类——按时间排序、按角色/道具/场景/素材分类,不再「只按用户分了再进入」。
- 平铺画廊(新默认):全平台素材一页浏览——类型分类 Tab(全部/角色/道具/场景/其他素材/音频,带各类数量统计)+ 最新/最早时间排序 + 名称/用户搜索 + 用户 ID 筛选 + 分页;卡片显示类型徽标、所属用户、创建时间,角色显示多角度数、音频显示时长且可点击播放。
- 按用户分组(保留):原「有素材的用户列表」切换保留,点「查看素材」=平铺视图+自动带上该用户筛选。
- 数据修复:其他素材/音频条目本身不存图片/播放地址,现按素材 ID 推导并签名(实测图片/音频均 200 可访问);角色等无创建时间字段的用文件修改时间兑底,保证时间排序有效。
- 验证:TypeScript 零错误、Puppeteer 14/14 全过、接口实测 186 条素材的分类/排序/搜索/筛选全部正确。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html / tests/lingmao-admin-materials.cjs。
- P0 安全四项:①封禁用户真正生效——原封禁写 banned 但主站登录不拦截该状态(只拦 suspended/disabled/deleted),被封用户照常使用,现改写 suspended 并禁止封禁平台管理员;②删除权限收紧——删除作品/项目/分镜/素材原来用只读权限即可操作(审核员/只读角色都能删),现需 works.delete 管理权限(仅超管+运营);③存储型 XSS 修复——用户项目标题/素材名中的恶意代码可经后台页面注入执行,现全量安全编码;④封面接口不再阻塞——视频抽帧从同步改为异步+并发限制,作品列表加载不再卡全站。
- P1 运维八项:⑤密码登录修复——独立密码登录自上线起不可用(永远提示未设置密码),已根治;⑥密码加固——SHA-256 无盐改 scrypt+随机盐,旧账号登录后自动迁移;⑦SSO 不再冲掉手动分配的后台角色(如审核员/财务);⑧登录防爆破——同 IP+账号 5 次失败锁 10 分钟;⑨广场审核能看视频了(原来只能看封面盲审);⑩任务运维显示失败原因+任务详情弹窗+按用户筛选;⑪切菜单页码不再残留;⑫删除分镜后详情弹窗自动刷新。
- P2 体验六项:退出登录同时销毁服务端会话;调余额需二次确认;财务页支持日期范围+用户筛选;审计日志加分页;统计页进度条轨道显示修复;素材/作品删除按钮按权限显隐。
- 验证:TypeScript 零错误、Puppeteer 23/23 全过、权限/限流/密码迁移/封禁/封面抽帧全部实测通过。
- 涉及文件:
lingmao-admin-module.ts / lingmao-admin-routes.ts / lingmao-admin-adapter.ts / server.ts / public/lingmao-admin.html / tests/lingmao-admin-20260821.cjs。
- 系统排查:直接向 GPU 提交 U01/U02/U03/U06 均在 0.1-1 秒返回 prompt_id,result 正确返回
pending:true;同一请求经模型广场时,U01/U06 约 30 秒后返回等待响应头超时,U03 被提前标记 completed 但 data 为空,故障定位在模型广场到 GPU 的代理/状态桥接层。 - 思洋修正:模型广场提交等待保持 10 分钟;提交只执行一次,撤销超时后自动重新提交,避免上游已受理但响应丢失时重复生成和重复扣费;拿到外部任务 ID 后始终轮询原任务。
- 状态规则:completed 但 data 空、timeout、context deadline 类 failed 均不视为视频最终失败,继续等待原任务回传;只有明确取消、非超时失败或 24 小时总兑底才结束。
- 验证:GPU 四个 H3 工作流提交成功、pending 语义一致、TypeScript 检查 0 错误。
- 涉及文件:
server.ts。
- 问题:补图后自动复检/横幅使用全局脏标记,切集后可能沿用上一集风险状态。
- 修复:复检脏标记改为按「项目:集」存储;切集自动标记当前集需复检,横幅/提示只反映当前集。
- 验证:p1:1/p1:2 脏标记独立、前端语法 0 错误。
- 涉及文件:
public/short-drama.html。
- P1 四项修复:①连续长视频失败/取消时按已扣费子任务逐项幂等退款(不再「扣了钱没成片」);②一键短视频改为「预扣 ref 最高价 + 完成后按实际镜头模型/时长结算差额退款」,失败镜头不收费、非 U06 镜头差价退回;③抽
saveFinalVideo统一成片落盘,图文/口播/短视频企业模式都写企业云盘;④口播成片支持stripMode去字幕(复制数字人结果前先提交去字幕处理),subtitled标记改为真实状态。 - P2 四项修复:⑤通用媒体视频入口加并发闸;⑥quick-script 并发限制统一覆盖 5 类视频任务;⑦历史镜头重生成加同镜运行锁 + 稳定计费键;⑧企业作品删除按租户目录回收文件。
- P3 两项:广场列表对临时媒体文件做存在性校验防死链;同步更新两处历史回归断言。
- 验证:tsc 零错误、
sv-audit413/13、sv-brand-imgv13/13、服务重启 health 200。 - 涉及文件:
long-continuation-module.ts / media-routes.ts / server.ts / short-drama-routes.ts / tests/sv-*.cjs。
- 问题:横幅只能看到风险镜号,用户还要手动找对应分镜行。
- 修复:横幅里的风险镜号可点击——平滑滚动到对应分镜行并高亮聚焦,同时自动打开该镜参考图面板。
- 验证:风险镜头按钮渲染正确、前端语法 0 错误。
- 涉及文件:
public/short-drama.html。
- 审计范围:短视频一键生成、脚本先行、分镜批量生成、图文/口播成片、连续长视频、AI剪辑合成、历史/广场、任务恢复、权限/租户、计费/退款和素材资产。
- 结论:当前 HEAD
0fd69085未发现新的 P0;发现 P1=4、P2=5、P3=5。重点风险是连续长视频失败不退款、短视频多模型实际执行与单模型计费不一致、企业图文/口播成片落个人云盘、口播成片复制结果前未可靠去字幕。 - 健康项:认证、
drama.page能力点、本人素材白名单、企业目录归属校验、模型白名单、断点续跑防重入、取消前复查和 TypeScript 检查均在位。 - 验证:tsc 通过;两个历史回归脚本各有 1 项陈旧断言失败,其余接口冒烟/页面 JS 检查通过;完整报告见
AUDIT-REPORT-SHORT-VIDEO-20260820.md。 - 状态:本轮为只读审计,未修改业务逻辑;整改顺序已按“逐项退款→口播最终文件去字幕→企业落盘→模型分项计费/并发统一”排列。
- 问题:补图后自动复检只有 toast 瞬间提示,回到分镜页看不到整体状态。
- 修复:分镜页顶部新增参考图状态横幅——本集镜头数/就绪数/风险数;有风险时可一键打开风险处理弹窗;复检通过时显示「参考图全部就绪,可以生成视频」。
- 验证:就绪/风险两态横幅渲染正确、前端语法 0 错误。
- 涉及文件:
public/short-drama.html。
- 问题:补完场景/道具图后,用户不知道风险是否已清零。
- 修复:资产/分镜变更后自动重算本集风险;风险清零时提示「本集参考图已复检通过,可以生成视频」,否则提示剩余风险镜头数;「参考图偏少」只作提示不阻塞。
- 验证:good ready=true、bad ready=false、前端语法 0 错误。
- 涉及文件:
public/short-drama.html。
- 问题:提交前一致性检查只能列出风险镜头,用户还要回表里逐个找入口。
- 修复:一致性检查改风险镜头处理弹窗——每个风险镜头可直接打开对应参考图面板,或一键跳转资产库对应分类补图;保留「仍然生成」确认。
- 验证:缺场景跳 scenes、缺道具跳 props、前端语法 0 错误。
- 涉及文件:
public/short-drama.html。
- 问题:批量生成视频前,用户无法一眼看到哪些镜头参考图不足。
- 修复:每镜状态区新增参考一致性徽标(参考图数量/角色/场景/道具/归一/缺失);点「生成本集视频」前汇总风险镜头并确认,可选择「仍然生成」或「先处理参考图」。
- 验证:正常镜 warn、风险镜 bad、前端语法 0 错误。
- 涉及文件:
public/short-drama.html。
- 问题:系统自动归一资产名对用户不可见,无法确认是否“自作聪明”。
- 修复:后端记录
shot.assetNorm(原始值→归一值);前端分镜表显示「归一」徽标,参考图面板顶部说明系统自动归一了什么,参考图与提示词按归一后资产生成。 - 验证:
主角→林夏审计记录正常、前后端检查 0 错误。 - 涉及文件:
public/short-drama.html / short-drama-routes.ts。
- 问题:分镜表仍会输出「主角/女主/男主/配角」或泛场景词;历史项目「主角」兜底可能拿错角色。
- 修复:分镜表生成后自动归一化——角色按
role与唯一候选映射到具体资产名;场景/道具只在唯一命中时归一,不确定就保留缺失提示,不硬猜。 - 验证:
主角→林夏、男主不唯一时保持原样、具体场景保留、前后端检查 0 错误。 - 涉及文件:
public/short-drama.html / short-drama-routes.ts。
- 二次问题:①手动参考图空 URL 导致
<Picture N>序号错位;②缺资产时用本剧第一个角色图兜底,无关角色进本镜;③无参考图时提示词虚构<Picture 1>;④底图场景描述被截成「古代」。 - 修复:手动 refs 图片与身份标签成对过滤;取消无关角色图兜底、缺资产保持空并提示补图;无参考图明确省略
<Picture>;底图提示词保留完整场景描述。 - 验证:第 4 集 23 镜自动匹配 0 错配 0 缺失、前后端语法/类型检查 0 错误。
- 涉及文件:
public/short-drama.html / short-drama-routes.ts。
- 问题(老板):生成分镜时匹配参考图不准确、不匹配。
- 根因:场景名带「时代前缀」(如「古代:洛彦密室内,…」),旧匹配逻辑取冒号前=「古代」,所有同代场景核心名撞车,参考图全部错配到第一个同代场景(实测第4集 23 镜全错配)。
- 修复:①前端匹配去掉时代/朝代词前缀+描述后缀取真正场景主体,加双向包含兜底;②后端分镜表生成 prompt 强化场景/角色/道具「逐字复制」资产列表。
- 验证:7 个项目场景/角色/道具匹配 0 错配、前端冒烟 4/4 场景正确、tsc 零错误。
- 涉及文件:
public/short-drama.html / short-drama-routes.ts。
- 问题(老板):分镜生成→剪辑环节(Step5)全屏时,右上角固定浮动的「下一步:合成」按钮(
.studio-footposition:fixed top:24px right:20px)与全屏头部「导出/全屏」按钮重叠,遮挡全屏按钮,全屏显示错乱。 - 修复:全屏态(
#studio-step5.clip-fullscreen)隐藏「下一步」浮动按钮(display:none !important),退出全屏自动恢复。 - 验证:Puppeteer 实测全屏前后按钮坐标——修复前「下一步」按钮(x1295-1420)覆盖「全屏」按钮(x1302-1402),修复后 display:none、全屏/导出按钮清晰无遮挡。
- 涉及文件:
public/short-drama.html。
- 问题:删除提示框为原生浏览器弹窗(不居中、无紫金样式),跑顶部不符合设计铁律。
- 修复:新增紫金确认框(鎏金警示图标 + 取消/删除按钮,居中)+ 暗紫底亮金 toast,替换全部原生 confirm/alert。
- 验证:语法零错误、弹窗居中、删除按钮触发回调正常。
- 涉及文件:
public/lingmao-admin.html。
- 分镜废片:分镜卡片新增「预览/查看」+「删除」按钮(废片可查看详情、可删除);详情弹窗加宽至 1080px。
- 资产库居中:短剧页资产库空态「角色:暂无…」文字及图标横跨整行居中显示。
- 验证:tsc 零错误、删除接口实测、前端 79 分镜卡+宽窗口正常。
- 涉及文件:
lingmao-admin-routes.ts / public/lingmao-admin.html / public/short-drama.html。
- 需求:短剧应按「短剧名称→第几集→分镜」层级展示,分镜包含废片。
- 实现:项目详情弹窗改为层级展示——项目信息 + 分集(第 N 集·镜数·成片/废片数)+ 分镜网格(缩略图+镜号+景别+时长+台词),废片标红。
- 验证:tsc 零错误、详情弹窗分集 5 集+第 1 集 9 镜+9 缩略图正常。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html。
- 作品分类:新增类型分类 Tab(短剧项目/短视频/短剧/合成成片/分镜视频/其他)+ 作者下拉筛选 + 名称搜索。
- 删除:作品(成片/项目)与素材均支持删除(带二次确认),删除操作审计留痕。
- 验证:tsc 零错误、分类/删除接口实测、前端分类 Tab + 删除按钮正常。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html。
- 问题:素材管理默认空态「请输入用户手机号」,打开无内容。
- 修复:默认展示有素材的用户列表(角色/道具/场景/其他/音频数量),点击「查看素材」浏览该用户素材。
- 验证:tsc 零错误、用户列表 8 行、点击后素材卡正常。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html。
- 背景:14:07 因「无法注册新账号」关闭了注册短信验证(免短信本地建号),老板确认搞错。
- 恢复:注册重新要求短信验证码(必填),删除免短信本地注册与本地密码兑底逻辑,前端验证码恢复必填。
- 影响:恢复前无用户通过免短信注册,无用户受影响。
- 验证:tsc 零错误、注册/登录/改密/重置四处短信验证恢复、前端无「可跳过」残留。
- 涉及文件:
auth-routes.ts / admin-module.ts / public/static/js/auth.js / public/index.html。
- 问题:作品卡片只有封面缩略图,点击无播放入口。
- 修复:新增播放器弹窗(点成片卡片即播放);项目详情弹窗加「播放成片」按钮;顺带修复项目详情「项目不存在」(id 双重 proj_ 前缀)。
- 验证:tsc 零错误、点击播放→视频加载成功。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html。
- 根因:视频缩略图用
<video preload=metadata>,PC 正常但手机/微信内置浏览器首帧黑屏。 - 修复:新增封面抽帧接口(视频 ffmpeg 抽第一帧转 jpg + 缓存),作品/任务/广场返回封面图 URL,前端改
<img>加载(所有设备天然支持)。 - 验证:tsc 零错误、封面接口 200、前端封面图正常加载。
- 涉及文件:
lingmao-admin-routes.ts / public/lingmao-admin.html。
- 先审后发:发布到创意广场后进入待审核状态(status=pending),公开列表只展示审核通过的案例 + 用户本人自己的案例;后台审核通过后才公开。
- 后台审核:广场页新增「通过 / 拒绝 / 下架」三态操作 + 审核状态徽章,审核记录留痕(审核人 / 原因 / 时间)。
- 短剧页:发布文案改「提交后进入审核」,本人待审案例显示「审核中」标记。
- 验证:发布→待审、本人可见/他人不可见、通过→公开、拒绝→不公开、下架→删除 全链路实测通过。
- 涉及文件:
short-drama-routes.ts / lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html / public/short-drama.html。
- 素材管理:后台新增按用户查看素材库(角色定妆照 / 道具 / 场景 / 其他 / 音频),缩略图网格展示,签名 URL 跨用户加载。
- 数据统计:新增任务类型 / 状态 / 视频模型 / 行业模板分布(横条分布图)。
- 审核记录:新增内容审核历史表(广场案例下架等)。
- 菜单:10 → 13 个模块。
- 验证:tsc 零错误、接口实测、Puppeteer 冒烟零 JS 错误。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / public/lingmao-admin.html。
- 设计铁律:灵猫紫金五色(深主紫 #6A2F96 / 浅柔紫 #9857BC / 缭金 #D4AF37 / 亮金 #F2D489 / 暗调紫 #542378)+ 宋体标题 Noto Serif SC + 暖白底 #FDFBF7 + 编辑风。
- 重做后台 UI:深紫墨侧边栏+缭金选中态、宋体大标题、指标改「大数字+分割线」无卡片框、作品/任务/广场改「视频封面帧缩略图网格」(gallery 感无边框)、用户改圆形头像、去 emoji 改 SVG 线性图标。
- 跨用户缩略图:作品/任务/广场三接口返回 signAssetUrl 签名 URL(assets 路由强制 ?user=本人,否则 401)。
- 自动 SSO:主站平台管理员访问 /lingmao-admin 自动签 token 进入(免手动点按钮)。
- 验证:tsc 零错误、签名 URL 实测 200、Puppeteer 冒烟零 JS 错误。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-routes.ts / server.ts / public/lingmao-admin.html。
- 需求(老板):无法注册新账号,暂时关闭短信验证功能。
- 后端:
/register短信验证码smscode改为可选——缺失时本地注册(创建本地用户目录 +syncUserFromCloud+ scrypt 密码哈希存user_profiles.password_hash);有验证码仍走上游注册;/login上游登录失败时本地密码兑底(hasLocalPassword/verifyPasswordLocal,个人/企业/总后台登录分支复用)。 - 数据库:admin-module.ts 加
setLocalPassword/verifyPasswordLocal/hasLocalPassword+_migrateCol('user_profiles','password_hash')。 - 前端:auth.js 注册校验去掉验证码必填;index.html 注册弹窗验证码 placeholder 改「可跳过」+ 提示「短信服务暂不可用时可直接注册,登录将校验本机密码」。
- 验证:tsc 0;本地注册→登录→错误密码拦截→handshake 全链路通过(思洋/思洋双仓库);测试用户已清理。
- 涉及文件:
admin-module.ts、auth-routes.ts、public/static/js/auth.js、public/index.html。
- 需求(老板):选择 H3 模型后属性面板时长设置最长只有 10 秒,增加 15 秒档位,全部调整。
- 前端:
public/static/js/chat.js两处时长 chips 数组[5, 8, 10]→[5, 8, 10, 15](H3 视频模型分支 U01/U03 + 普通视频模型分支),点击 15 秒即_setMediaParam('duration',15);public/index.htmlchat.js?v bump(1787134263→1787199925)。 - 后端确认(无需改动):执行侧 server.ts
u01Sec = Math.max(1, Math.round(Number(params.duration) || 5))无上限、media-routes.ts 路由上限 60 秒——15 秒参数原样透传上游,链路已支持。 - 数字人不受影响:数字人(dhMode)分支不渲染时长档位,时长由配音决定(既有设计)。
- 同步:思洋同源同步(chat.js 两处 + index.html?v=1787199936)。
- 验证:node --check 两仓 chat.js 语法 0、两处档位均已含 15。
- 涉及文件:
public/static/js/chat.js、public/index.html(思洋 + 思洋)。
- 背景:为灵猫AI短剧平台(对标小云雀的 AI 短剧创作产品)开发一套独立后台管理系统,架构预留「后期从思洋主站剥离为独立产品」能力。
- 功能模块(10 个):运营总览 / 用户管理(封禁·余额调整)/ 作品管理(项目·成片)/ 任务运维(失败重试)/ 创意广场(下架审核)/ 财务计费(收入·成本·毛利对账)/ 模型定价 / 后台账号 / 审计日志 / 系统配置(品牌·参数)。
- 剥离独立设计(四层解耦):数据(Adapter 适配层,独立库不双写业务数据)、鉴权(独立后台账号 + 首期主站超管 SSO 导入,可设独立密码)、服务(
/api/lingmao-admin/*独立前缀)、品牌(品牌配置表换皮即用)。 - 登录:主站超管 SSO 一键登录 + 独立账号密码登录(剥离后主入口)。
- 验证:tsc 零错误、后端全接口实测(SSO 全链路/总览/财务毛利口径修正)、前端冒烟零 JS 错误。
- 涉及文件:
lingmao-admin-adapter.ts / lingmao-admin-module.ts / lingmao-admin-routes.ts / public/lingmao-admin*.html / server.ts。方案:docs/lingmao-admin-console-plan-20260820.md。
- 问题(老板):思洋上面是否也存在一样的问题?先排查下。
- 确认存在(且比思洋多一处):①
/api/media/generate扣费传未解析的原始 body.model——调用方未传模型时执行侧兑底默认模型干活,但扣费侧 modelId 为空 → 动态定价(广场成本×上浮)跳过 → 回退 pricing 固定兑底价;②思洋 task.params.model 也存原始 model(思洋 8-19 已修为解析后 m,思洋未同步),执行侧同样可能用错模型。 - 修复 3 处:①media-routes.ts task.params.model 改存解析后 m;②同文件扣费改用 m;③server.ts audio_gen/3d_gen 任务完成扣费补 task.params?.model(原传 null 永远走固定价)。
- 存量 generic 数据归因(非 bug 部分):image_gen 375 条中 374 条为 z-image(内置 workflow 聚合模型,不进广场无成本概念,固定 0.5 元/张属合理兑底);7-29 Seedance-mini 20 元为 8-09 广场价格脏数据修正前历史;omni_realtime 固定 0.3 元/分钟(不在动态白名单,设计如此)。
- 验证:tsc 零错误、pm2 重启 health 200。
- 涉及文件:
media-routes.ts / server.ts。
- 根因:模型对比直接请求具体模型(不走 agent loop),模型按系统提示输出
{"tool_call":{"id":"ask_user",...}}JSON 文本时原样流入内容区,显示成不友好的提示框(如输入「帮我写一份AI趋势分析报告」触发模型反问确认)。 - 修复:新增
sanitizeCompareContent协议清洗——ask_user 提问提取为引用样式友好展示,其余工具调用 JSON(含 ```json 围栏、任意嵌套)整段剥离,正常 JSON 代码块不受影响。应用到模型对比(首次发送/追加提问/重新生成)与多模型会议的全部内容渲染与历史保存。 - 验证:语法检查零错误、9 用例单测全过、Puppeteer 页面注入无 JS 错误。
- 涉及文件:
public/static/js/chat.js、public/index.html。
- 根因:qwen3.7-plus 等模型流式输出 tool_call JSON 时,首个内容块就是
```json围栏,JSON 完整前所有内容块渲染成未闭合代码块(黑色框),直到最后一块才消失。 - 修复(渐进遮蔽):检测到未闭合的 tool_call JSON 时先显示友好占位(「模型正在确认需求...」/「正在生成内容...」),JSON 完整后自动替换为提取出的真实提问(引用样式);其余工具调用 JSON 整段剥离;正常 JSON 代码块不受影响。
- 验证:语法零错误、13 用例全过(含 qwen 真实 62 块流式逐块模拟全程无黑色框)、Puppeteer 真实请求零 JS 错误。
- 涉及文件:
public/static/js/chat.js、public/index.html。
- 根因:语音识别结果由后端以「内联 HTML 卡片」形式发送,复制按钮的
onclick属性里用了\"转义双引号——HTML 属性语法不认这种转义,浏览器解析时属性值提前终止,后半段 JS 和样式残片变成可见文本(「html 代码」)。 - 修复:后端改为发送结构化事件
asr_result(纯文本),前端用 DOM API 安全构建「语音识别结果」卡片(含复制按钮),历史以 markdown 引用形式保存。 - 验证:tsc 零错误、SSE 实测输出 asr_result 事件、Puppeteer 完整对话流程实测卡片正常渲染、无任何 html 代码残留。
- 涉及文件:
server.ts、public/static/js/chat.js、public/index.html。
- 云端同步:自定义音色、历史记录从纯本地 localStorage 改为云端同步(后端
/api/audio/user-data读写),换设备/清缓存不再丢失。 - 涉及文件:
audio-process-module.ts、server.ts、app/e5eaudio/src/lib/xkAudioApi.ts、app/e5eaudio/src/App.tsx+ 重新构建产物。
- P1 音色/历史 URL 过期:克隆/合成/设计结果改返回稳定 URL(去签名),播放/下载带 cookie 访问,根治 24h 签名失效。
- 鉴权补齐:
/api/media/voices和/api/audio/process/actions加登录鉴权。 - 校验补齐:工具箱字幕
charsPerLine限 1-100。 - 清理:删除未引用的死代码(音乐创作/人声提取)+ 移除「声贝消耗」假计费显示。
- 涉及文件:
audio-process-module.ts、media-routes.ts、app/e5eaudio/src/*、public/app/e5eaudio/。报告:docs/AUDIT-LINGQUE-AUDIO-2026-08-19.md。
- 根因:灵雀音频的语音克隆结果卡片只有试听/合成试听/保存到音色库,缺下载入口。
- 修复:结果卡片改为「下载音频 + 保存」两按钮,点击下载克隆音频到本地 .mp3。
- 涉及文件:
app/e5eaudio/src/components/VoiceCloningView.tsx+ 重新构建的public/app/e5eaudio/。
- 优化:首尾帧图生视频(U02)需要首帧+尾帧两张图,此前只校验「有没有图」不校验「几张」→ 现在按 refsMin 校验数量,不足时提示「需上传 2 张参考图(首帧 + 尾帧)」。
- 涉及文件:
public/static/js/chat.js、public/index.html。
- 根因:视频数字人(e5e_human2.5/e5e_digitalhuman)要求参考视频+参考音频,但前端校验同样只认「参考附件入口」,不认对话窗口通用附件的视频/音频。
- 修复:把「语音克隆音频兑底」泛化为「spec.refs 要求的 audio+video 都从聊天附件兑底」——音频 base64 上传转 URL、视频用 videoUrl 直接同步。覆盖所有需参考附件的模型(语音克隆/视频数字人/图生视频等)。
- 涉及文件:
public/static/js/chat.js、public/index.html。
- 根因:语音克隆走媒体生成 API,前端 refs 校验只认「参考音频入口」上传的 URL,不认对话窗口通用附件的音频(base64)→ 点发送被前端拦截提示「请上传参考音频」,根本到不了后端。
- 修复:语音克隆时若未通过参考音频入口上传,自动把聊天附件的 base64 音频上传到云盘得到 URL 作为参考音频,校验即通过。
- 涉及文件:
public/static/js/chat.js、public/index.html。
- 根因:语音克隆模型(voice_clone 工具)参考音频提取只认「音频URL:」文本标记,漏掉对话窗口上传的
input_audio(base64)和video_url(视频)附件 → 总提示「请上传参考音频」。 - 修复① 上传音频自动启用:
input_audio内联音频 → 写 temp_media 转公网 URL 作为参考音频,不再需要额外「音频URL」标记。 - 修复② 视频无感提取:对话窗口上传视频 → 自动 ffmpeg 提取音频并截取前 10 秒(16kHz 单声道 wav)→ 作为参考音频,用户无感。
- 修复③ 附件支持音频:对话窗口附件上传 accept 白名单补
.mp3/.wav/.m4a/.ogg/.flac/.aac/.amr(此前文件选择器挡住音频,后端 handleFiles 本就支持)。 - 验证:tsc 零错误、node --check chat.js 零错误、重启 health 200。
- 涉及文件:
server.ts、public/index.html、public/static/js/chat.js。
- 根因:上游模型 API(api.e5e.cn)09:30-09:40 拥堵,多个模型(deepseek-v4-flash/pro、Doubao、GLM)全部首字节超时(120s),主站对话 agent loop 也超时,前端显示技术错误「The operation was aborted due to timeout」。
- 修复:
callModelStream首字节超时(非用户主动 abort)时抛友好提示「上游服务繁忙,请稍后重试」,保留 name=AbortError 不影响上层 abort 判断。 - 验证:tsc 零错误、重启 health 200、上游已恢复(实测 chat completions 0.79s)。
- 涉及文件:
server.ts。
- 画质词升级:【画面规格】「电影级画质,画面干净通透」→「电影级画质,超写实质感,光影层次自然,画面干净通透」;【画面呈现】「干净通透的电影画面」→「干净通透的电影画面,色彩真实自然,光影柔和,细节锐利」。
- 按景别注入细节词:特写=面部细节真实皮肤质感自然 / 近景=人物细节清晰质感真实 / 中景=人物与场景层次分明 / 远景=场景空间层次丰富环境细节清晰。
- 原则:保持纯正面描述(不写负面指令),H3 对否定词反向强化。
- 验证:tsc 零错误、四景别+默认+呈现行输出正确、pm2 重启 health 200。
- 涉及文件:
server.ts。
- 背景:老板明确「先优化灵猫AI短剧平台,主站后面再考虑」,且「短剧/主站样式各自独立(短剧将来独立剥离)」——修正审计 P0-1 的「短剧基准回灌主站」方向。
- 字体自托管(零 Google 依赖):①Plus Jakarta Sans(西文/数字)自托管 27KB 可变字体(wght 200-800);②Noto Serif SC(中文标题)从 fontsource 下载 85 个 CJK 分片(700 字重)→ fonttools 合并 → 子集化 GB2312 一级字库 3755 字+标点 → woff2 1.5MB;③完全移除 Google Fonts 引用(preconnect + link 全清),
--font-display加 Songti SC/SimSun 宋体兑底(生僻字 fallback)。 - 自定义视频播放器(替换原生 controls):新增
short-drama-player.js全局播放器皮肤(零 HTML 改动)——居中播放/暂停大按钮、深色渐变控制条、鎏金进度条(拖拽/点击 seek)、时间显示、全屏、缓冲 loading,匹配短剧编辑风(深紫墨色+鎏金 #D4AF37);jsdom 8/8 PASS。 - 假按钮无障碍补齐:short-drama.html 引入 a11y-fake-button.js,覆盖 70 个 div/span+onclick 假按钮。
- 验证:字体/脚本 HTTP 200 + immutable、CSS 花括号平衡、node --check 零错误、health 200。
- 涉及文件:
public/static/fonts/PlusJakartaSans-latin.woff2、NotoSerifSC-l1-700.woff2、public/static/css/short-drama-fonts.css、public/static/js/short-drama-player.js、public/short-drama.html。
- 背景:全站 UI 设计审计(
docs/UI-AUDIT-2026-08-18.md,综合 5.5/10),识别 6 个 P0 硬伤,本次修复其中 4 个。 - P0 品牌字体落地:XuanKunSans-Bold 转 woff2(83KB)注册为
--font-display标题字体(32px+ 大标题用品牌定制字体);删除 main.css 从未加载的'Geist'幽灵引用;物理删除 misans/noto-sans-sc 9.9MB 死字体。 - P0 设计令牌统一:ui-font.css 成为唯一权威令牌源(
--xk-*主色/文字/背景/阴影/圆角),main.css/ui-kit.css 全部 alias 到--xk-*,消除三套冲突令牌(--xk-*/--primary-color/--primary)与暗黑模式主色漂移(#3b82f6 vs #5b8df5 统一 #5b8df5)。 - P0 蓝紫渐变指纹消除:body 三色柔渐变(蓝→紫→绿)改克制同色系;发送按钮/对比按钮/用户头像的紫蓝渐变(#a855f7/#6366f1)改纯主色
var(--primary-color);全站 focus 色 #6366f1 统一主色变量。 - P0 缓存策略修复:server.ts 静态资源按 URL 区分——带
?v=版本号/字体/图片 →Cache-Control: public, max-age=31536000, immutable(1 年长缓存);HTML 保持 no-cache。实测 main.css/chat.js/字体均返回 immutable,首页 no-store。 - 验证:tsc 零错误、server.ts 语法 OK、3 个 CSS 花括号平衡、pm2 重启 health 200、缓存头 5 项实测正确。
- 涉及文件:
server.ts、public/static/css/main.css、ui-font.css、ui-kit.css、public/static/fonts/(XuanKunSans-Bold.woff2 新增 + 死字体删除)、各页面 CSS 版本号 bump。
- 进度细化:生成阶段从「只有全景上下文」细化为:全景运镜上下文 → 角色定妆照 → 分段生成(第 N 段)→ 桥接过渡 → 拼接合成,父任务进度随子任务实时映射,前端按阶段显示当前动作。
- 人物一致性:复用短视频「角色定妆照」经验——视觉分析参考图提取人物/场景特征,生成多人定妆照,每一段都注入定妆照+原图+尾帧,提示词锁定人物外观,解决第二段人物漂移问题。
- 涉及文件:
long-continuation-module.ts、server.ts、public/short-drama.html。
- 根因:
pano-continuation.py的render()里nz用np.ones_like(uu)生成 int64 数组,与 float64 的norm做除法触发 numpy 类型错误(Cannot cast ufunc divide output from float64 to int64),全景环视任务在渲染阶段崩溃失败。 - 修复:
np.ones_like(uu)改为np.ones_like(uu, dtype=np.float64)。 - 验证:真实 2048×1024 全景图渲染 15 秒成片成功(h264 / 540×960 / 15.0s)。
- 涉及文件:
scripts/pano-continuation.py。
- 根因:手动获取成功只更新了分镜子任务,没有同步父短视频任务的
shotsMeta/result.shots,历史详情仍判断该镜「未生成」;同时旧入口错误触发 GPU 直查。 - 修复:有上游
extTaskId时,手动获取直接恢复同一个video/generations/:id轮询,最长 24 小时,不重新提交、不重复生成、不访问 GPU。 - 回写:上游返回视频后同步写入子任务、父任务分镜元数据和结果列表,前端刷新历史详情即可显示视频与缩略图。
- 涉及文件:
server.ts、public/short-drama.html、public/architecture.html。
- 问题:点击左侧「生成中」任务后,页面没有回到对应的执行状态,尤其是「AI短视频:图片1中的人」这类任务容易看不到实时阶段。
- 修复:点击运行中/失败记录会拉取任务最新详情,切回短视频创作页、隐藏首页输入区,重建对应进度卡片并显示任务标题、阶段和进度;运行中任务自动重新启动轮询,失败任务显示错误状态。
- 验证范围:覆盖刷新后恢复、从其他模块点击返回、已有进度卡片再次点击,以及任务不存在/已清理时的提示。
- 涉及文件:
public/short-drama.html、public/architecture.html、public/user-manual.html。
- 入口:从电脑文件管理器直接把视频、图片或音频拖到剪辑工作台时间轨道,轨道出现金色高亮和「松开导入到时间轨道」提示。
- 导入规则:视频/图片上传后进入视频轨,并按鼠标落点插入;音频上传后进入当前音轨,并以落点作为起点。支持一次拖入多个文件。
- 保持不变:原「插入素材」弹窗、素材库导入和音频上传入口继续可用;上传仍沿用现有素材接口与用户权限校验。
- 涉及文件:
public/short-drama.html、public/architecture.html、public/user-manual.html。
- 根因:轨道截帧固定 200×112、JPEG 质量 0.72,卡片放大后发糊。
- 优化:缩略图按卡片实际尺寸生成,最高 2x 像素比,最小 320×152,JPEG 质量 0.88。
- 范围:只调整轨道预览截帧,不修改源视频或导出质量。
- 涉及文件:
public/short-drama.html、public/architecture.html、public/user-manual.html。
- 需求:感知系统自动获取次数过多,大量消耗接口资源,正常情况一天默认两次。
- 改动:联网检索类感知器检查间隔统一改为 12 小时(一天两次)——①天气监测 30分钟→12小时;②RSS订阅 15分钟→12小时;③情报监测 30分钟→12小时;④工作关联情报 8小时→12小时。系统监控(本地磁盘/内存)与同事数据关联(本地扫描)不消耗外部接口,保持不变。
- 涉及文件:
server/services/sensors/builtin.ts、server/services/sensors/work-intel.ts。
- 老板经验:上游 API 有 extTaskId 即可精准获取数据,24 小时内都能轮询查到;只要向上游 API 获取,上游就会自己去 GPU 服务器取数据——根本无需直接跑 GPU。
- 修正:移除全部 GPU 直取兑底(recoverFromGpuNode 调用)——completed 但 data 空、上游 timeout、queued/processing 均改为持续轮询上游 API 不判失败(24 小时兑底);processing 超时判失败、failed 时 GPU 直取全部删除;scheduleVideoRecovery 也只轮询上游 API。
- 涉及文件:
server.ts。
- 补充:chaofen/shuiyin 视频处理任务,上游桥接层除 data 空外还会「排队中」状态丢失(GPU 已生成但 API 仍报 queued,延迟 6-7 分钟才回传);此前排队状态不做 GPU 直查(08-16 为防误取移除)→ 任务长时间卡 running。补上:视频处理任务排队/处理中状态每 2 分钟 GPU 直查一次(refVideo hash 精确匹配,不误取)。
- 验证:18:03 提交的 chaofen 画质修复,重启后恢复轮询 + 上游延迟回传完成,返回视频 5.04s 与原片一致✅。
- 涉及文件:
server.ts。
- 根因:①chaofen(M09B-LTX2.3视频修复)视频输入节点是 5102:file,此前与 shuiyin 共用 6102:file,上游收不到输入返回示例视频(内容错、时长翻倍);②上游 API 对 chaofen 返回 completed 但 data:[](桥接层不回传 GPU 输出),而 GPU 节点实际已生成视频。
- 修复:①视频输入节点按模型区分——chaofen→5102:file、shuiyin→6102:file;②上游 data 空时走 GPU 直取兑底(recoverFromGpuNode),并适配视频处理任务用 refVideo hash 匹配(不再因无台词跳过);③提交时存 gpuRefVideo(转 public 的 hash URL)。
- 验证:tsc 零错误、服务重启 health 200;端到端实测 chaofen 画质修复——上游 data 空 → GPU 直取回收成功,返回视频 5.04s 与原片时长/画面一致(涂口红画面)✅。
- 涉及文件:
server.ts。
- 根因:前端发布弹窗用
$('publish-video').src取视频地址,浏览器会把它解析成绝对 URL(https://host/api/user/assets/…)提交;后端白名单只认/api/user/assets/开头的相对路径 → 绝对 URL 被拒「视频地址不合法」。 - 修复:①前端 openPublishModal 存原始相对路径到 data 属性,confirmPublish 改用
dataset.videoUrl || getAttribute('src')(取原始字符串而非解析后的绝对 URL);②后端发布接口白名单校验前,把http(s)://绝对 URL 归一为 pathname+search,双保险。 - 验证:tsc 零错误、服务重启 health 200;端到端实测绝对 URL 与相对路径两种 videoUrl 均发布成功;测试数据已清理。
- 涉及文件:
public/short-drama.html、short-drama-routes.ts。
- 根因:企业模式生成的成片存企业云盘(
data/tenants/<tid>/assets),作品 videoUrl 带tenant_id参数;但发布接口(POST /api/short-drama/plaza)校验「文件是否存在」只查个人目录(data/users/xxx/assets),没处理 tenant_id → 个人目录找不到文件 → 误判「视频文件不存在」返回 400,企业作品全部无法发布。 - 修复:发布接口 + 广场列表(GET /api/short-drama/plaza)的死链过滤,都按 videoUrl 的 tenant_id 解析企业目录校验文件(带 tenant_id → 企业目录 + 租户归属校验;无 tenant_id → 个人目录)。
- 验证:tsc 零错误、服务重启 health 200;端到端实测企业作品(带 tenant_id)发布成功 + 广场列表正确显示(不再被死链过滤误杀);测试数据已清理。
- 涉及文件:
short-drama-routes.ts。
- 根因:前端已把「去水印/视频超分/画质修复」模型改为
e5e-ltx2_3_chaofen(3d7deec),但后端server.ts的模型识别正则只认shuiyin字样,chaofen未被识别为「视频处理」任务——走了普通视频生成路径,5099:value功能值根本没传上游,导致超分/去水印/修复提交失败。 - 修复:
executeVideoTask的isSubtitleStrip与getMediaModelSpec两处正则由/shuiyin/i扩为/shuiyin|chaofen/i,让 chaofen 走与 shuiyin 相同的 M09B workflow 提交链路(5099:value 正确透传)。 - 确认:老板确认
M09B-LTX2.3视频修复=M09B-LTX2.3去字幕去水印是同一 workflow,chaofen 复用该 workflow_id 正确。 - 验证:tsc 零错误、服务重启 health 200、shuiyin(去字幕)向后兼容不受影响。
- 涉及文件:
server.ts。
- 参数映射:去水印传
5099:value=去水印,视频超分传5099:value=视频超分,画质修复传5099:value=画质修复;去字幕仍传去字幕。 - 保持不变:模型名称、提示词、其他请求参数、轮询和片段替换流程均未修改。
- 验证:前端
stripMode: m.lb→ 后端白名单 → 上游5099:value透传链路确认完整,内联 JS 语法零错误。 - 涉及文件:
public/short-drama.html(本次只调整功能值映射链路确认)。
- 调整:剪辑工作台「去水印」「视频超分」「画质修复」三个工具统一改用模型
e5e-ltx2_3_chaofen。 - 保持不变:去字幕继续使用
e5e-ltx2_3_shuiyin;三个工具的提示词、参数、接口、轮询、替换片段和 UI 均未修改。 - 验证:内联 JS 4 个 script 块语法零错误,模型引用仅在剪辑工具栏处理入口更新。
- 涉及文件:
public/short-drama.html。
- 根因:轨道片段宽度/标尺/播放头分别使用旧的
s.duration/trimOut、额外 340px 尾部空白和片段间 6px gap,真实媒体时长与显示长度不一致,指针还可拖入轨道外虚拟 5 秒区域。 - 修复:视频 loadedmetadata 后读取真实 duration,回填
_mediaDuration/mediaDuration/duration;新增tlShotDuration统一计算「真实媒体时长 - 裁剪区间」,轨道宽度、标尺、播放头、播放、拆切、音轨起点全部复用;轨道/标尺统一实际内容宽度,移除额外尾部空白和片段 gap;指针不再越过总时长;裁剪/拆切按 25fps(1/25s)帧精度吸附。 - 验证:真实 1.72s + 2.32s 视频测试——真实时长回填成功、轨道/标尺宽度一致、播放头坐标误差 0px;内联 JS 语法零错误、tsc 零错误。
- 涉及文件:
public/short-drama.html。
- ① 导出任务可离开页面:
/api/short-drama/compose从同步合成改为任务化——提交即返回 taskId,后台异步合成(全局并发闸改排队等待),完成/失败写入任务 result;前端 composeNow 改「提交+轮询」,exportCompose 改「提交后立即返回+后台轮询」,弹窗文案改为「可离开页面」,解决 nginx 60s 超时 + 用户干等。 - ② 剪辑草稿云端保存:新增
GET/POST /api/short-drama/clip-draft,自由剪辑草稿除 localStorage 外同步存云端(防抖 500ms),进入剪辑工作台时云端优先加载——解决跨设备/清缓存丢失。 - 验证:tsc 零错误、内联 JS 语法零错误、端到端实测(compose 提交→running→completed+videoUrl、clip-draft POST/GET 正常)。
- 涉及文件:
short-drama-routes.ts、public/short-drama.html。
- 顶部上下文标识:剪辑区头部新增「当前项目 · 第 N 集」或「自由剪辑 · 本地草稿」标识,让用户清楚当前剪的是哪个项目/哪一集。
- 保存状态指示:头部新增保存状态(已保存/保存中/本机草稿/保存失败/更新冲突)——自由剪辑草稿存本机时明确标注「本机草稿」;409 冲突不再静默,明确标红提示。
- 移动端工具栏重新分组:主行只保留高频(撤销/重做/删除/播放),其余按「编辑/AI 生成/音频/画面/缩放」分组收纳到「更多」,不再一排图标难认。
- 关闭素材弹窗清理已选:关闭插入素材弹窗自动清空已选,防止上次选择残留误插入。
- 选中片段信息栏增强:显示时长/静音/转场;多选显示「已选 N 段 · 共 Xs」。
- 音轨操作优化:选中音轨片段后信息栏显示试听/淡入淡出/删除提示;新增音量循环调节按钮(100%→50%→25%→静音)。
- 空轨道三入口引导:自由剪辑空轨道显示「从素材库添加 / 上传本地视频」两个明确入口。
- AI 处理语义明确:超分/去字幕/数字人等提交时明确「完成后自动替换当前片段」。
- 插入素材优先排序:本集分镜/当前项目素材排最前,避免 431 个素材混杂难找。
- 涉及文件:
public/short-drama.html(纯前端 UI/状态,接口零改动)。
- 分段控件:模式切换从一排独立按钮改为统一圆角容器包裹的「分段控件」(4 个等宽分段),视觉更整体、更专业。
- 图标+选中态:每个模式带专属图标(视频/麦克风/图片/胶片),当前选中模式为紫色填充卡片(白字+紫色阴影),与发送按钮/侧边栏品牌色一致。
- 涉及文件:
public/short-drama.html(纯样式/图标重设计,功能逻辑不变)。
- 模式切换器:输入框下方新增「短视频/口播成片/图文成片/连续长视频」分段选择,替代原来「更多」面板里 4 个独立弹窗按钮——切模式只改输入框提示语、行业/时长显隐、属性面板专属参数,输入框/附件上传/比例/清晰度/发送按钮全模式共用。
- 发送统一路由:发送按钮按当前模式自动路由——口播→数字人播报、图文→图文成片、连续→连续长视频、短视频保持 AI 编导两步走。
- 属性面板随模式变化:口播模式显示「口播音色」、连续模式显示「目标时长+生成模式(普通/全景)」、画面规格(比例/清晰度)全模式共用;模板库(选模板填字段交互特殊)保留为独立入口。
- 涉及文件:
public/short-drama.html(纯前端 UI,后端接口零改动)。
- ① analyze-image 任意文件读取修复:识图接口仅允许本人云盘图片(?user= 必须等于当前用户)、拒绝路径遍历/反斜杠/控制字符、图片扩展名白名单、视觉模型白名单(未知模型回退默认)、新增用户级限流。
- ② douyin-analyze SSRF 修复:仅允许抖音官方域名(douyin.com/iesdouyin.com 等),禁止内网/环回/云元数据/私网 IP,新增用户级限流(防刷 Chromium 资源)。
- ③ 成片保存 tenant_id 不信任客户端:任务创建只从 session 企业上下文或本人档案推导;写企业目录前 canAccessTenant 归属校验,伪造/污染回退个人云盘。
- ④ 企业素材读取租户归属校验:带 tenant_id 的企业文件读取改用 canAccessTenant 三口径校验(超管/企业负责人/档案归属/角色成员),个人用户/越权一律 403。
- ⑤ 合成企业目录回退归属校验:从视频 URL 提取 tenant_id 读企业目录前校验归属,防跨企业素材读取。
- ⑥ 图文成片/数字人口播接入计费:两个入口新增幂等计费(图文按图片段数预估时长、口播按目标时长计 video_gen)+ 失败自动退款。
- ⑦ 取消后降级/重试不再扣费:分镜批量任务在降级/重试扣费前复查取消状态,取消后禁止再扣费/再提交;最终状态写回前复查,取消任务不被覆盖为 completed。
- ⑧ 资产生成超时退款:启动恢复扫描中超过 30 分钟的 running 资产任务标失败时同步退款(幂等)。
- ⑨ 项目完整性恢复修正:分集脚本补回取最新任务(原取最早)、分镜补回按任务真实集号(原硬编码 ep1)。
- 验证:tsc 零错误、pm2 重启 health 200;SSRF/路径遍历/跨租户读取实测 400/403 全拦截;commit b6cdaed 已推送。
- 涉及文件:
short-drama-routes.ts、media-routes.ts、server.ts。
- 输入框自动增高:「短视频」首页创意输入框从固定 2 行改为随内容自动扩展(最长约 190px 超出滚动),写长创意不再局促。
- 字数统计:发送按钮旁新增实时字数提示(x/500),聚焦或有内容时显示,发送后归零。
- 「更多」按钮升级:从弱文字链接改为带滑块图标的描边胶囊按钮,hover/展开金色高亮,更易发现高级功能。
- 高级面板分组重构:展开后从「一行混排」改为「创作方式(口播成片/模板/图文成片/连续长视频,各带图标)+ 画面规格(比例/清晰度)」两组标签分区,逻辑归类清晰不再拥挤。
- 涉及文件:
public/short-drama.html(纯前端 UI,不影响接口/权限/生成逻辑)。
- 入口:灵猫AI → 短视频 → 更多 → 连续长视频,新增「普通参考模式」和「360°全景环视」选择。
- 普通模式:上传普通场景图/人物图/参考视频,图片和视频作为U06人物与场景参考。
- 全景模式:第一张图片必须是接近2:1的360°等距全景图;系统先用确定性透视投影生成15秒环视背景上下文,再交给U06叠加人物表演和对白,后续继续沿用无损尾帧递进与U02桥接。
- 校验:服务端使用ffprobe校验全景图宽高比,非2:1图片直接拒绝;普通模式行为不变。全景投影脚本为
scripts/pano-continuation.py。
- 业务规则(老板):日报在次日 18:00 前提交的,基本都是补前一天的;当天 18:00 后提交的才是当天日报。
- 修正:①朱燕 4 条(8/12 09:10→8/11、8/13 09:02→8/12、8/14「8.13主要完成工作」→8/13、8/15「8.14号学习」→8/14)——朱燕 8/10~8/15 每天一条补齐;②王罗俊武 3 条(8/13 10:46→8/12、8/14 12:38→8/13、8/15 00:04→8/14)——链补齐但 8/15 变缺交(预期);③杨来婴 1 条(8/12 09:02→8/11)——链补齐。
- 排除:内容/标题明确写当天的记录(杨来婴 8/10、赵姝琳 8/10、邓铧成 8/15 补交等)尊重内容不动。
- 验证:团队统计 8/11-8/14 三人按时;8/13 王罗俊武 12:38 提交超截止 38 分钟判迟交;8/15 朱燕(周六补交)迟交、王罗俊武缺交。
- 涉及文件:数据库 work_reports 8 条记录 period 修正。
- 修正:①朱燕「8.10号日报」(8/11 08:49 提交)→ 归 8/10 周期(标题明确 8.10,且 8/10 周期原本空缺;归位后按时);②李春凤「8月12日日报」(8/12 18:16 提交)→ 归 8/12 周期(标题+内容均为 8/12,原挂 8/11 导致 8/11 双条、8/12 空;归位后按时)。
- 全量扫描排除项:「上午交当日日报」标题明确当天属正常;李春凤 8/11「8-10日报」标题手误但归属正确;8/12 彭晓平/杨小艳/熊立群、8/16 周日为真实缺交非错位。
- 遗留待确认:朱燕内容日期链(「8.13主要完成工作」「8.14号学习」)与王罗俊武 2 条(8/13 10:46、8/15 00:04)需业务确认后再动。
- 涉及文件:数据库 work_reports 2 条记录 period 修正。
- 背景:杨轩是「每天补昨天」模式(8/14 00:19 凌晨补 8/13、8/15 09:53 补 8/14、8/16 12:23 补 8/15),但此前规则把 8/15 09:53 那条归到了 8/15——导致 8/13 周期空缺、8/16(周日)多一条,整条链错位一天。
- 修正:三份日报整体后移一天——8/14 00:19 提交的「今日工作日报」→ 归 8/13(按时);8/15 09:53 提交的「今日日报」→ 归 8/14(按时,截止 8/15 12:00);8/16 12:23 提交的「8月16日日报」→ 归 8/15(迟交,超截止 23 分钟)。
- 验证:团队统计实测 8/13 on_time / 8/14 on_time / 8/15 late / 8/16 pending(周日无交),与老板判定一致。
- 涉及文件:数据库 work_reports 3 条记录 period 修正。
- ①企业隔离越权实锤修复:此前 GET /api/work-reports/settings 与 /rules 完全信任客户端 X-Tenant-Id 头且不校验归属——实测普通成员传其他企业 ID 即可读到对方企业成员名单(姓名+账号)。现在 X-Tenant-Id 仅当用户是该企业管理员、平台超管,或属于本人所属企业(含多企业角色关联)时才放行,越权请求返回 403;其余接口(详情/收到的/团队统计)本就隔离良好,实测不受影响。
- ②日报补交不再被强制改到今天:此前提交已过截止的日报会被静默改成「今天」(与「用户选哪天就提交哪天」的设计意图矛盾),导致补交历史日报归错天、昨天/前天的未提交统计永远补不上。现在日报保持用户选择的周期,迟交由团队统计按截止规则判定。
- ③连带修复月报截止判定失效:月报截止计算正则只认 YYYY-MM 格式,但系统内周期全部是 YYYY-MM-DD → 月报截止恒为空、永不判迟交;现已兼容两种格式。
- ④规则数据清理:已废弃的 start_time 字段从存量企业配置中清除,规则接口只返回已知字段(enabled/time/offset/day)。
- 验证:越权实测 5/5(他人企业 403/自己企业正常/超管特权正常);周期归属逻辑单测 10/10(日报补交保持、周报/月报缓冲期归属不受影响);团队统计冒烟正常;tsc 零错误;服务已重启 health 200。
- 涉及文件:
server/work-reports-module.ts、public/architecture.html、public/user-manual.html。
- 根因:未登录用户点邀请链接 → 302 到主站并存 localStorage.pending_join_enterprise → 但消费逻辑只在 onLoginSuccess(登录回调)执行——已登录/刷新恢复登录态走 performHandshake,不调用 onLoginSuccess → pending 永不消费 → 永远加不进企业。
- 修复:join 逻辑提取为独立函数
window.processPendingEnterpriseJoin(),在 onLoginSuccess + performHandshake(会话恢复)两个路径都调用——无论本次登录还是已登录刷新,邀请码都会被消费并自动加入。 - 验证:未登录点链接存 pending → 注入登录态刷新 → DB tenant_id 正确更新为邀请企业 ✅、pending 消费清除 ✅、零 JS 错误。
- 涉及文件:
public/static/js/chat.js、public/index.html。bump chat.js?v=1787024156。
- 问题:权限覆盖弹窗中「用户中心」「更多功能」等模块父节点(feat.* 虚拟节点)不在角色权限点集合里,虽由子节点算出勾选态,但父节点本身可点击取消——会级联把会员已含的子权限也取消。
- 修复:①renderPermTreeNode 父节点(含 children)若其后代有会员已含权限(disabledSet),父节点一并锁定(disabled 灰色);②onPermTreeNodeChange 增加 disabled 防护——锁定节点不级联子节点(防 JS 强制触发取消会员权限);③子节点仍可单独勾选/取消(额外授予的不受影响)。
- 验证:feat.用户中心/feat.更多功能/feat.用户中心.智能服务 全部锁定;含可授点的子模块(如「其他」)不锁定可整选;强制触发 disabled 父节点 change 后会员已含子权限不被取消;保存收集正常;零 JS 错误。bump admin.js?v=1787042000。
- 涉及文件:
public/static/js/admin.js、public/admin.html。
- 根因:权限覆盖弹窗保存收集用
document.querySelectorAll('#modalBody .grant-cb:checked')——但 showModal 生成的弹窗结构是#globalModal(无 modalBody id)→ 收集恒空数组 → 保存接口收到[],勾选的权限全部丢失(审计日志实锤 permissions:[])。 - 修复:选择器改
#globalModal .grant-cb:checked(真实弹窗容器)。 - 验证:真实 showModal 环境——修复后收集含 uc.reports ✅、旧代码收集空(复现 bug);uc.reports 落库正确、重开勾选正常。bump admin.js?v=1787042000。
- 涉及文件:
public/static/js/admin.js、public/admin.html。
- 展示:权限覆盖弹窗展示当前用户完整权限树——会员等级已含权限(灰色锁定 + 「会员已含」标记)与额外授予权限全部勾选态展示,未勾选权限点一目了然。
- 规则:①会员体系已有权限(角色权限点 rolePerms)disabled 不可取消;②可在会员等级以外的权限点额外勾选添加(补充式授予);③保存只收集非 disabled 且勾选的权限点写入 custom_permissions(角色权限不入 custom、不可取消)。
- 实现:GET custom-permissions 接口新增 rolePerms 字段(getUserRolePerms 纯角色权限);renderPermTreeNode/renderGenericTree 支持 disabledSet 参数(disabled checkbox + 灰色样式 .perm-check-disabled);showCustomPermModal checkedSet=角色∪额外、disabledSet=角色。
- 验证:角色权限(chat.page/writer.page)勾选+锁定不可取消、custom 授予(uc.memory)勾选可取消、会员外权限可勾选;保存只收集 uc.memory(角色权限不写入);零 JS 错误。bump admin.js?v=1787042000 + admin.css?v。
- 涉及文件:
public/static/js/admin.js、public/static/css/admin.css、public/admin.html、admin-module.ts、admin-audit-module.ts。
- 调整:权限覆盖弹窗的权限树从「分类平铺」改为与权限配置同构的「模块 → 页面 → 按钮」三级树(buildFeatTree + renderGenericTree,含父级勾选联动、feat.* 模块标签)——与角色编辑/权限列表展示完全一致。
- 保存过滤:doSaveCustomPerm 增加 feat.* 虚拟父节点过滤(与角色编辑保存一致,虚拟模块节点不入库)。
- 验证:树结构 ul.perm-tree + 模块标签正常;权限点为主站前端(无后台);保存只收集真实权限点(虚拟节点过滤);零 JS 错误。bump admin.js?v=1787042000。
- 涉及文件:
public/static/js/admin.js、public/admin.html。
- 调整:会员详情「权限覆盖」弹窗去掉强制移除区块,只保留额外授予——在会员角色权限基础上补充式添加主站前端权限(新增对话/工作台/智能体/写作/编程/AI PPT/应用中心/数字人/音频/日程/白板/知识库/技能/云盘/用户中心等);权限列表 = 主站前端权限列表配置(filterPermCats member,不含后台/企业权限点);权限剥夺通过调整会员等级/角色实现。
- 实现:弹窗只渲染 grant-cb(额外授予树),保存只收集正权限(不再收集 deny);存量库无 deny 数据需清理。
- 验证:弹窗无强制移除区、额外授予树勾选/保存正常;权限列表仅主站前端点(admin./ent. 过滤);零 JS 错误。bump admin.js?v=1787042000。
- 涉及文件:
public/static/js/admin.js、public/admin.html。
- ①去掉「计划」列:企业申请默认都是基础版(tenant_basic),计划列无信息量——列表列改为「公司名称/申请人/手机号/状态/拒绝理由/申请时间/操作」。
- ②新增「拒绝理由」列:enterprise_applications 表新增 reason 字段(迁移);拒绝接口保存理由(原只写审计日志不落库);历史已拒绝申请从 audit_logs 回填理由(「已有同名企业入驻」等);列表已拒绝行展示理由(未填写显示「未填写」)。
- 验证:列头 7 列正确(无计划列有理由列);rejected 申请返回 reason;tsc 零错误;零 JS 错误。bump admin.js?v=1787042000。
- 涉及文件:
admin-module.ts、admin-audit-module.ts、public/static/js/admin.js、public/admin.html。
- 根因:admin.js rejectEnterpriseApp 的拒绝原因弹层确认按钮内联 onclick 引用了 Promise 闭包局部变量
resolve——内联事件处理器作用域是全局,访问不到闭包变量 → 点击确认时 ReferenceError,弹层关闭但 Promise 永不 resolve,后续拒绝请求不发出(表现为「没反应」);取消按钮同理只 closeModal 不 resolve。 - 修复:改用全局暂存 resolve(window._rejectConfirm(v))——确认按钮调
window._rejectConfirm(原因)、取消按钮调window._rejectConfirm(null)(resolve null 中止流程),Promise 正常继续 → POST reject 接口 → 列表刷新。 - 验证:三种场景全过(空原因确认 resolve 空串 / 带原因 resolve 值 / 取消 resolve null);后端 reject 实测 pending→rejected;零 JS 错误。bump admin.js?v=1787042000。
- 涉及文件:
public/static/js/admin.js、public/admin.html。
- 根因:①前端提交企业申请硬编码
plan: 'free'——但企业套餐体系只有三档(企业基础版 tenant_basic ¥299/企业专业版 tenant_pro ¥999/企业旗舰版 tenant_enterprise ¥4999),不存在 free 档;②后端申请/审核建企业均不校验 plan 白名单,非法值直接落库。 - 修复:①前端企业申请改提交
tenant_basic(默认基础版);②后端 createEnterpriseApplication + approveEnterpriseApplication 双处加 plan 白名单校验(非三档值自动回退 tenant_basic);③存量数据——删除两个空壳「第五元素」free 企业(0 成员测试/重复数据),其余 3 个真实 free 企业统一改为 tenant_basic。 - 验证:企业套餐分布 free 清零(tenant_basic 7 家 + tenant_pro 2 家);白名单单测——非法 plan 回退基础版 ✅、合法 plan 保留 ✅;tsc 零错误、health 200。bump chat.js?v=1786947594。
- 涉及文件:
public/static/js/chat.js、admin-module.ts、public/index.html。
- 调整:「加载更多日志」按钮从一次性全量展开改为每次加载 15 条——点击一次渲染 15 条、按钮剩余数同步递减,全部加载完按钮自动隐藏;页面初始仍只渲染最新 15 条。
- 验证:初始 16 条 → 每次点击 +15 条(按钮剩余 1341→1326→…)→ 全部 1358 条加载完按钮隐藏;零 JS 错误;思洋同步(1329 条全量)。
- 涉及文件:
public/user-manual.html。
- 优化:开发日志从「静态全量渲染 1153 条」改为「初始仅渲染最新 15 条 + 点击「加载更多日志」一次性展开全量」——页面初始 DOM 节点 14826→1869(-87%),首屏加载大幅提速;同时清理历史遗留的结构坏数据(08-06~08-10 插入的扁平/嵌套/缺闭合 changelog 条目共 33 处),条目内容全部保留无丢失。
- 验证:25 个 tab 切换零失败;开发日志初始 15 条、加载后 1357 条全量归位(游离 0);零 JS 错误;思洋同步优化(DOM 14478→1843)。
- 涉及文件:
public/user-manual.html。
- 根因:2026-08-04 并行会话插入 changelog 时产生 5 处「双重闭合」坏数据(如
...日期</div> — 重复标题</div>)——changelog-date 被提前闭合,浏览器容错解析从该点起把其后全部 259 条 changelog-item 解析到 section 之外(body 直接子级),视觉上每个 tab/container 模块后面都出现 changelog 条目。 - 修复:删除 5 处多余的双重闭合标签(08-04 09:24/09:15/09:10/09:05/08:50 五个条目);浏览器 DOM 验证——1152 条 changelog 全部回到 sec-changelog,游离 0;加载更多后 1388 条全量在位,逐 tab 切换零混入、零 JS 错误;思洋同步修复。
- 涉及文件:
public/user-manual.html。
- 布局优化:每种报告类型的时间配置改为明确的两行色块——第一行「开始时间」(含「00:00 表示不限制」说明),第二行「截止时间 + 截止偏移」,两行用浅色底块+行间距区分,偏移量明确归属截止时间。
- 验证:渲染逻辑断言(开始行独立/两行块/偏移在截止行)通过;思洋同步。
- 布局优化:企业后台报告时间设置中,每种报告类型的时间配置改为两行——第一行显示类型与周期(周报含星期选择),第二行显示开始时间与截止时间(含偏移),更清晰。
- 思洋同步:同步修复。
- 原问题:注册时选「企业」类型会立即 createTenantAndLink 创建企业(注册即建,无审核);与已登录用户「升级为企业」申请流程(/api/enterprise/apply → 总后台审核 → 通过才建)不一致。
- 修复:auth-routes.ts /register 企业分支改为:注册成功但不再立即建企业——创建一条待审核申请(createEnterpriseApplication,plan=tenant_basic),返回 application_pending 标记;管理员在总后台「企业申请」审核通过(approveEnterpriseApplication)后才自动创建企业租户;已有 pending 申请则复用返回。前端 auth.js 注册成功分支:application_pending 时提示「注册成功!企业申请已提交,待管理员审核通过后自动创建」。
- 验证:状态机闭环(pending 不建企业 → approve 才建 → 清理);11 个现有企业为历史审核通过产物不受影响;tsc 零错误 + node --check 过 + health 200。bump auth.js?v=1786944044。
- 涉及文件:
auth-routes.ts、public/static/js/auth.js、public/index.html。
- 修正:开始时间固定为报告周期当天的时刻,不随截止偏移后移——「天偏移」只作为截止时间的补交缓冲(如日报开始 08:00 = 当天 08:00,截止 12:00 + 1 天 = 次日 12:00)。
- 验证:开始/截止计算分离正确;思洋同步修复。
- 排查:后端链路完整(/api/enterprise/apply 提交申请 + /api/enterprise/apply/status 查状态 + 管理员审核自动创建企业),申请弹窗(upgrade-enterprise-modal)也在 HTML 中——但入口按钮 #upgrade-enterprise-btn 只在 JS 里 getElementById(显示逻辑有),HTML 从未创建该按钮 → 个人用户看不到「升级为企业」入口。
- 修复:①index.html 用户设置下拉菜单「个人信息」下方新增「升级为企业」菜单项(id=upgrade-enterprise-btn,仅非企业用户显示,updateEnterpriseUI 控制);②chat.js 新增 openUpgradeEnterpriseModal()(打开申请弹窗 + 预填当前手机号 + 聚焦企业名称)。
- 验证:Puppeteer 全链路——个人用户设置菜单按钮 display:flex → 点击弹窗 active → 填表提交 POST /api/enterprise/apply {company_name,phone,description,plan:free} → 状态弹窗「申请已提交,管理员审核通过后将自动创建企业空间」;零 JS 错误。
- 涉及文件:
public/index.html、public/static/js/chat.js。bump chat.js?v=1786943203。
- 改名:企业后台报告管理「报告截止时间设置」改为「报告时间设置」。
- 新增开始时间:日报/周报/月报可分别设置开始时间与截止时间——早于开始时间提交记为「提前」,晚于截止时间记为「迟交」,中间为「按时」;开始时间设为 00:00 表示不限制。
- 团队统计:用户中心团队完成情况新增「提前」统计卡与成员状态标签(紫色),筛选支持提前状态。
- 验证:保存/统计/还原全链路通过;思洋同步修复。
- 问题:查罗晓帆 8/15 提交的日报时发现——之前「上午提交默认补昨天的日报」的规则有副作用:用户上午写的今日日报被误归到昨天(朱燕/杨来婴/王罗俊武/杨轩等多条「X月N日日报」被归到 N-1 日)。
- 修复:①写日报默认周期改为当天(不再自动回溯昨天)——用户写哪天的日报就提交哪天,补交昨天的日报由用户手动改日期;②周报/月报保留「截止缓冲期内归上一周期」的规则(老板此前要求);③已误归的 7 条日报历史数据全部修正回正确日期。
- 效果:日报归属不再受提交时刻影响——标题写哪天就是哪天的;思洋同步修复。
- 问题:8/17(周一)早上提交的周报,有的算上周、有的算本周——归属取决于谁先交,不合理。李春凤 08:48 和杨轩 02:29 提交的周报被归到了本周,实际应在第五元素上周截止(周一 12:00)缓冲期内、算上周的周报。
- 修复:①提交时按企业截止规则自动纠正周期归属——截止缓冲期内提交保持原周期(补交仍算按时),超截止才归当前周期;②企业截止规则下发给前端,写报告时默认周期也按缓冲期自动归属(周报截止前默认上周、月报截止前默认上月、日报截止前默认昨天);③已提交的两条错归属记录已修正为上周。
- 效果:同一时间窗口内提交的报告周期归属一致,补交在截止内不算迟交;思洋同步修复。
- 追问:既然企业管理员可以配置后台权限,为什么全企业都缺报告管理权限?——排查发现权限配置界面本身就有缺口,管理员想配也配不了。
- 三处漏挂:①hr-module.js ENT_MODULE_GROUPS 人力资源分组缺 report-settings(权限中心功能权限 Tab 不显示「报告管理」勾选框);②hr-module.js EMP_GROUP_MAP + admin.js ENT_GROUP_MAP 缺 ent.reports.* 六点(员工档案权限弹窗/总后台企业权限树归「其他」);③enterprise-module.ts ENT_MODULES 缺 report-settings(allModules 不含)。
- 另修长期潜伏 bug:权限中心模块勾选存裸模块 ID(dashboard)与 ent.* 权限点体系不匹配(后端只认 ent. 前缀,保存被丢弃、回显永不勾选)——新增 _entModToPerm/_entPermToMod 映射(report-settings→ent.reports.manage 与导航同源),勾选保存/回显双向打通。
- 验证:Puppeteer 权限中心 188 卡片「报告管理」勾选框 checked;映射单测 4/4;双文件 node --check 过;tsc 零错误。commit df6b310。bump hr-module.js?v=1786938991 + enterprise.js?v + admin.js?v。
- 涉及文件:
enterprise-module.ts、public/static/js/hr-module.js、public/static/js/admin.js、public/enterprise.html、public/admin.html。
- 报障:企业后台 18874942339 又少了权限——报告管理的权限。
- 根因:ent_permissions 是快照式存储(权限配置时落库的历史值),不跟随新增权限点自动更新;08-14 新增 ent.reports.* 六点后,全库 38 个企业用户 35 人快照缺失(基础点 35 人、管理点 5 人)——188 角色表有全部 6 点但快照缺 → 企业后台侧边栏「报告管理」入口隐藏。
- 修复:enterprise-module.ts getEntUserPerms 增加角色权限派生合并——user_roles→role_permissions 的 ent.* 点并入快照(角色是权限权威源),再走企业开放范围过滤;188 快照双保险直接补 6 点。此后新增权限点只要种子里补授角色即自动生效。
- 验证:逻辑合并验证 188 含 manage 等 6 点;Puppeteer enterprise.html 侧边栏「报告管理」显示;全库扫描确认唯一系统性缺口即 reports 6 点;tsc 零错误。commit b1aa777。
- 涉及文件:
enterprise-module.ts。
- 问题:聊天对话中上传音频让系统识别转文字,一直失败/无响应。
- 根因(三个叠加):①识别完成后响应流未正常关闭,前端一直等不到结束(即使识别成功也表现为失败);②服务器端口被旧进程占用,更新后的服务一直没真正生效(线上跑的是旧逻辑);③主识别引擎(e5e灵雀)上游服务节点不可用(503),需要备用引擎兜底。
- 修复:①识别完成后正常关闭响应流(前端能收到结果与结束信号);②清理端口占用、重启服务让最新代码真正上线;③备用引擎(qwen3-asr-flash)兜底链路验证可用并加日志。
- 验证:真实音频上传 → 识别成功输出文字(「逗你们的,不过各位姐姐…」)+ 正常结束;服务双端口健康、tsc 零错误;思洋同步修复。
- 需求:企业余额不足影响使用时,登录时给予引导——企业成员给提示,有企业后台充值权限的给快捷充值的提示和操作,点击弹出快捷充值页面直接充值到企业账户。
- 后端:
gapfill-module.ts/api/user/profile 新增 entBalance(余额+套餐)/entBalanceInsufficient(付费套餐余额<0.1,与 chat 402 拦截同口径)/entRechargePerm(企业负责人/平台超管/总后台权限/ent.billing.recharge 权限点);server.ts/api/user/enterprises-v2 企业列表补 balance 字段 + 每企业返回 balanceInsufficient/rechargePerm(覆盖多企业归属三口径:admin_user_id/档案 tenant_id/user_roles 关联)。 - 前端:
chat.jscheckEntBalanceGuide() 登录成功回调+页面刷新恢复登录态两处调用,遍历所有企业任一余额不足→顶部橙色横幅;有权限显示「快捷充值」按钮,无权限显示「请联系企业管理员充值」;openQuickEntRecharge() 快捷充值弹窗(¥50/100/200/500 快捷金额+自定义)→ POST /api/enterprise/recharge 建单 → 微信二维码 → 2s 轮询 /api/enterprise/recharge/status → 到账后刷新余额+移除横幅。 - 验证:Puppeteer 三场景全绿(负责人有权限→横幅+充值按钮+弹窗完整 / 普通成员无权限→横幅+联系管理员 / 余额充足→无横幅);提交链路金额100→POST recharge(amount:100)→二维码→轮询,零 JS 错误。commit 5ead877。bump chat.js?v=1786932784。
- 涉及文件:
gapfill-module.ts、server.ts、public/static/js/chat.js、public/index.html。 - ★ 10:19 手动关闭记忆补充:老板「登录企业后弹提示,也可以手动关闭提示框不进行充值」——✕ 关闭按钮现在记录关闭记忆(localStorage entBalanceGuideClosed:用户名:企业ID=日期,按用户+企业隔离),当天刷新/重新登录不再打扰;充值成功自动清除记忆并重新评估余额;自动消失(10 分钟)不记关闭,下次登录仍提示。bump chat.js?v=1786933256。
- ★ 10:21 每天只弹一次口径确认:老板「充值和公告不同,充值是每天只弹一次,只要未充值」——明确充值提示≠公告永久关闭:①手动关闭和 10 分钟自动消失都记当天记忆(严格每天最多弹一次);②未充值次日(日期变化)自动重新弹;③充值成功清除记忆并重新评估。验证:Puppeteer 3/3(自动消失→当天不再弹→模拟次日重弹)。bump chat.js?v=1786933392。
- 问题:智能体对话中上传附件后,页面没有任何显示;且附件实际没有随消息发送给智能体(之前只有一条「已选择」提示,文件并未带上)。
- 修复:①上传后输入框上方显示附件预览条(图片缩略图 + 文件名 + 大小 + 可移除),支持一次多选(最多 9 个);②发送时附件真实携带——图片转 base64 随消息传给模型(模型能看图),文本类文件(txt/md/json/js 等)内容直接注入消息供智能体阅读,其他文件带文件名提示;③用户消息气泡中显示附件(图片直显 + 📎 文件名);④服务端补齐图片透传(此前智能体消息里即使带图也被丢弃)。
- 验证:上传/预览/移除/图片转 base64/文本注入全链路通过;思洋同步修复。
- 问题:上传音频说「转成文字」时,系统路由显示进了语音识别,但实际却被文本模型(deepseek-v4-pro)接手——这个模型不具备语音识别能力,任务无法真正执行。
- 根因:①上传的音频在消息里以 base64 内联格式传递,但语音识别快速路径只认「音频 URL」标记,没识别 base64 内联音频 → 误判「未找到音频附件」→ 回退到文本模型;②非流式请求也被排除在快速路径外。
- 修复:语音识别快速路径现在直接提取 base64 内联音频 → 写临时文件 → 调用真正的识别引擎(e5e灵雀 → DashScope 兜底)输出文字,全程不经过文本模型;流式/非流式请求都直达识别引擎。
- 验证:上传音频消息实测进入识别引擎链路(识别引擎对空数据正确报错=链路已通);识别引擎 e5e灵雀当前服务节点不可用(503,环境问题),DashScope 兜底链正常;思洋同步修复。