Commit Graph

230 Commits

Author SHA1 Message Date
caoqianming 44b7df6f20 feat(external-systems): add generic MCP connector 2026-08-10 16:04:51 +08:00
caoqianming 2187c7f0d0 fix(preview): restore continuous document scrolling 2026-08-10 09:16:01 +08:00
caoqianming 8d741e4141 fix(preview): support document previews in app webviews 2026-08-10 08:55:44 +08:00
caoqianming 0e4bd0456a feat(external-systems): 重构连接治理与运行态缓存 2026-08-07 10:12:37 +08:00
caoqianming 5430379d76 fix(context): 按模型协议治理历史推理上下文 2026-08-06 16:43:20 +08:00
caoqianming d7cb88c7ba fix(files): consolidate toolbar actions 2026-08-06 15:14:59 +08:00
caoqianming 02e7d2cb14 feat(files): create folders from file panel 2026-08-06 15:04:15 +08:00
caoqianming e73521b3c9 fix(chat): keep model label on one line 2026-08-06 14:24:41 +08:00
caoqianming 4873dd0ae5 fix(chat): keep new conversation model controls inline 2026-08-06 14:14:38 +08:00
caoqianming 689059eb8e feat(chat): choose model for new conversations 2026-08-06 14:00:48 +08:00
caoqianming 7e544827c0 feat(files): toggle task hidden directories 2026-08-06 12:05:36 +08:00
caoqianming 80fbc7ab4a feat(external-systems): support generic OpenAPI integrations 2026-08-05 17:18:29 +08:00
caoqianming af0ad934bb feat(external-systems): guide MES aggregate queries 2026-08-05 15:01:43 +08:00
caoqianming cb9a39f33d feat(external-systems): add managed MES connections 2026-08-04 16:53:58 +08:00
caoqianming eedaf2c1fe feat(web): add compact message actions 2026-08-04 11:33:27 +08:00
caoqianming 8cf08c0f23 feat(web): widen artifact previews and refine file chips 2026-08-04 09:11:32 +08:00
caoqianming 57655984dd feat(web): add task-scoped artifact references 2026-08-03 13:49:20 +08:00
caoqianming 4ec2638d38 feat(web): embed interactive HTML artifacts 2026-08-03 11:34:35 +08:00
caoqianming 328607671a feat(web): preview HTML and source files 2026-08-03 11:16:40 +08:00
caoqianming f217672365 feat(web): render Mermaid diagrams in chat 2026-08-03 10:26:39 +08:00
caoqianming a00ebfe50e fix(markdown): repair nested code fences 2026-08-03 10:11:25 +08:00
caoqianming a8b84b1d6f feat(web): allow attachments to start conversations 2026-08-03 09:57:21 +08:00
caoqianming 13e3e50371 fix(web): sort tasks by recent activity 2026-07-31 15:02:13 +08:00
caoqianming afdcf46577 feat(tasks): streamline task creation and embedded entry 2026-07-31 14:31:50 +08:00
caoqianming da265b88d5 fix(web): open embedded task working directory 2026-07-31 13:54:22 +08:00
caoqianming 5c80fb202b fix(web): hide lifecycle actions for channel chats 2026-07-31 11:30:50 +08:00
caoqianming 61648f1114 Add context menus to task and file lists 2026-07-29 16:35:20 +08:00
caoqianming bcdbdd4738 Streamline conversation activity UI 2026-07-29 15:59:00 +08:00
caoqianming 02b278b175 Refine mobile conversation layout 2026-07-29 15:13:51 +08:00
caoqianming 369c74483c Refine workspace reading and mobile layout 2026-07-29 14:59:10 +08:00
caoqianming 07eba5c402 Polish web workspace visual foundation 2026-07-29 14:34:46 +08:00
caoqianming ff3bc75fed 合并工作目录新建入口 2026-07-29 14:00:04 +08:00
caoqianming 03ee37e201 改进工作目录可搜索选择 2026-07-29 13:48:16 +08:00
caoqianming d75df5a4b4 优化新对话目录选择 2026-07-29 13:38:20 +08:00
caoqianming cfc1d17af7 优化工具失败观测与重复保护 2026-07-29 09:29:44 +08:00
caoqianming c3a6f7deee Add workspace-first new conversation flow 2026-07-27 12:28:56 +08:00
caoqianming 85c918dc2f Add safe conversational workspace rename 2026-07-27 11:23:20 +08:00
caoqianming eab623d5b5 fix(web): kb 条目与单篇页补显原件文件名
已入库条目此前只把 source 用于查看/下载按钮,原件名(含后缀)无处显示。
标题后加灰色小字原件名(悬停提示同步带上),单篇页头部加「原件: xxx」,
新增 .kb-src-name 样式两处共用;不破坏单行精简版式。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 16:17:39 +08:00
caoqianming 0c74a44224 style(web): kb 已入库条目精简为标题+单行摘要
- 行内去掉关键词、摘要 CSS 单行省略(原 .sk-desc 省略规则只覆盖左栏
  .sk-item,右栏 kb-entry 整段换行铺开导致每条过高)
- 完整摘要+关键词挪进悬停 title,信息不丢

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 15:45:05 +08:00
caoqianming 0ceb4c5bd9 feat(web): kb 查看原件(复用文件预览弹框)+ 预览层级抬到 modal 之上
- kb.js: 已入库条目行/单篇页/待入库列表三处加「查看原件」,直接
  openFilePreview(.kb 相对路径,与下载同通道 /v1/files/download)
- dev.html: file-preview-modal z 90→114(盖过 kb/skills/memory 等 112 层
  modal,仍低于 app-dialog 130)、fp-open chat-form 95→115、mini 96→116
- main.js: Esc 关栈顺序同步(小预览→文件预览→各 112 层 modal→选入→新任务)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 15:38:37 +08:00
caoqianming 0cd5b07124 feat(web): kb 下载入口(原件+解析 Markdown)+ bump 0.59.3
- kb.js:已入库条目行「⬇ 下载原件」、单篇页头「下载原件/下载
  Markdown」、待入库列表逐项下载;复用 media.js downloadFile 走现成
  /v1/files/download(.kb 在 user_root 下,safe_join 天然放行),零后端改动
- dev.html:新按钮三行 CSS(hover 淡入同删除按钮、待入库行间距)
- 弃选:kb 专属下载端点(与 files 下载重复,公测期白养对外契约)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 21:33:23 +08:00
caoqianming 8751f71f5a feat(web): 移动端对话附件入口(拍照/照片库/选文件)+ bump 0.59.2
chat 输入区此前仅粘贴/拖拽两条附件路,移动端双双不可用。加 [附件] 按钮:
触屏弹三项菜单(拍照 capture=environment / 照片库 accept=image,video /
选取文件无 accept),桌面端直开文件选择器;三入口 change 统一走既有
uploadAttachFiles 链路,只读镜像随 applyChannelComposerLock 禁用。
纯前端改动,无后端/schema 变化。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 14:49:16 +08:00
caoqianming c6232d8325 feat(kb): 个人知识库——.kb/ 纯文件机制+/v1/kb* API+前端 modal+注入契约(bump 0.59.0)
- core/kb.py: 状态/视图层(INDEX 单行格式 parse/format、已入库判据=INDEX 有条目、
  删单篇连带原件与索引行、kb_block 注入——有库才注)
- core/kb_ingest.py: 入库管线 markitdown→扫描件 OCR 兜底(方舟)→flash 摘要(失败降级
  不阻塞)→追加 INDEX;编排 to_thread+per-(user,库) 锁,幂等可续跑
- 0022 迁移: usage_events.task_id 放宽可 NULL(kb 入库无 task 上下文);
  记账溯源 kind="kb_ingest"/"vision" + units {"kb","source"}
- web/app.py: /v1/kb* 8 端点(列/建/删库、详情带进度、上传即入库、手动 ingest、看/删单篇),
  不设 HTTP 检索端点(agent 走 fs 工具)
- 前端: kb.js 两栏 modal(上传 XHR/进度轮询/删除确认);rail 左下新增知识库入口,
  四按钮改图标+小字两行布局
- agent_builder 在 memory_block 后注 kb_block(docker/host 路径换算同 .memory);
  documents skill「何时不用」补自建资料路由行
- DESIGN §3.8 机制小节 / CHANGELOG 0.59.0 / PROGRESS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 15:20:43 +08:00
caoqianming fc53d21620 fix(web): 长对话点目录圆点首次跳不到位——重建窗口瞬时定位+跳转期抑制 sentinel 补载
根因链:loadMessagesAround 后 renderMessages 尾部无条件滚底,把视口钉到
新窗口末尾;底部 sentinel 落在视口内立刻触发 loadNewerMessages,其整窗
重渲染(innerHTML 清空)删掉平滑滚动的目标元素、再把 scrollTop 恢复到
fetch 前位置——首次点击停在窗口底部附近,第二次点击才能到位。

- renderMessages 加 stickBottom 参数(默认 true 保持首屏/发送行为);
  loadEarlier/loadNewer/loadMessagesAround 三个调窗口路径传 false
- jumpToMessage 重建窗口后用瞬时定位(auto),不给补载/图片异步撑高留
  动画窗口期;已在 DOM 的近距离跳转保留平滑
- _msgScrollObserver 在 _outlineJumpLock 期间不补载;解锁时
  _repokeMsgSentinels 对 sentinel unobserve+observe 补投一次交叉状态,
  避免 sentinel 停留在视口内时解锁后无人触发加载

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 16:42:41 +08:00
caoqianming 2e3a4db4e0 fix(web): 手机端文件预览改悬浮卡片——四边留边距、不压输入区(bump 0.58.54)
移动端预览弹框原为全屏贴边(100vw×100dvh、直角),观感差且糊在消息
输入框上。≤640px 下改为:遮罩层四边 10px 呼吸边距,底部在
--preview-bottom-inset(chat-form 让位)之上再加 10px;卡片尺寸改
100%(相对遮罩内容区,弃 100dvh,旧 WebView 兼容更稳),恢复默认圆角。
输入区仍由 body.fp-open #chat-form z-index 抬升保持可见可用;桌面端不动。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 15:20:08 +08:00
caoqianming c1508d0df0 feat(web,docs): App 套壳 embed app 变体(relogin_url + fragment 注入)+ APP.md 对接文档(bump 0.58.53)
移动 App 方案:原生壳(WebView)+ 原生登录页,登录走 platform 自有接口
(/api/login/token → /api/login/external-login,实测打通,后者服务端换 zcbot JWT)。
顶层 WebView 无父窗口,iframe 的 postMessage 协议失效,泛化企微免登为 app 变体:
?embed=1&relogin_url=<绝对地址>#token=..&user_id=.. —— fragment 注入读完即清,
401/logout 时 location.replace(relogin_url),原生壳拦自定义 scheme 换新 token 重进。

- state.js: EMBED_RELOGIN_URL 解析+消毒(拦 javascript:/data: 等可执行 scheme)
- embed.js: 抽共用 readFragmentToken/gotoInitialTask,加 embedAppInit/embedAppRelogin
- auth.js: logout 分支序 wecom → app → iframe
- APP.md 新增(进入契约 + platform 登录链路 + 原生壳杂活清单 + H5 备选)
- EMBED.md 精简 243→约 120 行,指向 APP.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 14:59:16 +08:00
caoqianming 62f3ddb658 fix(ui,loop): salvage 成功提示降噪——黄色警告降为灰色 info 行(bump 0.58.50)
用户反馈流内黄字「工具调用参数损坏但已就地抢救」吓人、疑影响后续对话。
核实零影响:salvage 只就地改写 arguments、当轮照常执行,对话历史与正常轮
无异;warn 是纯前端 SSE 展示事件,不入 messages、不回灌 LLM,刷新即消失。

处置取分级降噪而非全静默(上游返脏数据的事实要可见、可与 tool_salvaged
DB 留痕对上):
- core/loop.py:该 emit 加 level:"info",措辞软化为「已自动修复工具调用
  参数…继续执行」;
- web/static/js/chat.js:warn 渲染按 level 分流,info 走灰色 muted 行、
  不带 ⚠;黄色 ⚠ 只留给真打断本轮的路径(丢弃重试/熔断等)。

频发原因研究背书(DB 近7天,bad/chat 轮次):deepseek_v4.pro 14.5%、
flash 8.3%、unifyllm 5.9~7%,glm/sonnet 0 —— DeepSeek wire + unifyllm
网关两链路的流式 delta 乱序病,前缀实为同一调用自身内容的错位碎片
(与 0.58.24 定层一致);社区 opencode/goose/Cline/Roo-Code 同病且多数
closed-not-planned 未修,我方 salvage(85% 救回)+ 非流式重试已是最完整
处置 —— 频繁黄字本质是「救回成功」记录高频刷屏,降灰合理。

顺带:CLAUDE.md 文档节奏调整(bump/PROGRESS/CHANGELOG 改为一次 push
统一更新一次,不逐 commit;DESIGN 仍随触发它的 commit 走)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 08:47:44 +08:00
caoqianming ab55be4cde fix(ui): 文件预览背景撤回毛玻璃、改回半透明压暗遮罩(bump 0.58.46)
用户反馈 0.58.44 的毛玻璃虚化(rgba(20,22,28,.22) + blur(6px))"不行",
要求还是变暗、且背景仍看得到、注意度适中。改回半透明深色遮罩
rgba(0,0,0,0.45)(比 0.58.43 的 .5 略透、背景内容仍隐约可辨,不挡死),
去掉 backdrop-filter,chat-form 悬浮阴影恢复 0 -10px 28px/.22。
因 0.58.44 之上已叠 0.58.45(工具修复),不走 git revert(会冲突
版本/CHANGELOG),改为前向修复。只动 web/static/dev.html。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 13:42:58 +08:00
caoqianming d5854e3337 fix(ui): 文件预览背景改毛玻璃虚化——柔和聚焦替代硬深色遮罩、消除输入条突兀感(bump 0.58.44)
0.58.43 的整屏纯深色遮罩(rgba(0,0,0,.5))仍偏硬,亮着的悬浮输入条
浮在深黑上略突兀。改为毛玻璃:浅压暗 rgba(20,22,28,.22) + backdrop-filter
blur(6px)(带 -webkit- 前缀,老浏览器不支持则退化为纯浅压暗、不崩),
背景虚化把内容推远、聚焦到预览卡片又不刺眼;chat-form 悬浮阴影同步调柔
(0 -10px 28px/.22 → 0 -6px 20px/.12)。只动 web/static/dev.html。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 08:57:56 +08:00
caoqianming 9c39d0ba42 fix(ui): 文件预览遮罩改整屏、消除"上暗下亮"割裂——输入区上浮为悬浮活动条继续可用(bump 0.58.43)
旧实现用 #file-preview-modal { bottom: --preview-bottom-inset } 把遮罩顶到
chat-form 之上以便边看边打字,代价是底部整条(输入区+左栏入口+右栏+状态)
全不压暗,与上方压暗区形成硬边界的通亮带,视觉割裂。

改为遮罩铺满整屏(bottom → padding-bottom,仍让居中卡片停在输入区之上不遮挡),
底部随整屏统一压暗;仅 chat-form 由新 body.fp-open 类 position:relative;z-index:95
(压过遮罩 z90;#app/#pane-mid 均不建层叠上下文,已核)+ 上向阴影上浮为
"悬浮活动条",继续可打字。预览时点左栏/右栏/状态落到遮罩=关预览,符合
"背景不可用"预期。改 dev.html + preview.js(open/close 加/去 fp-open)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 21:05:15 +08:00