Skip to content

feat: 增强飞书会话卡片交互,统一聊天模型白名单,并优化 QQ/Session 管理体验#59

Open
yuling-000 wants to merge 100 commits intoHNGM-HP:betafrom
yuling-000:main
Open

feat: 增强飞书会话卡片交互,统一聊天模型白名单,并优化 QQ/Session 管理体验#59
yuling-000 wants to merge 100 commits intoHNGM-HP:betafrom
yuling-000:main

Conversation

@yuling-000
Copy link
Copy Markdown

@HNGM-HP 这个项目感觉是一个很不错的方向,我在当前项目的基础上做出了以下修改:

  1. 飞书交互体验整体升级
    这次把飞书侧很多原本偏“命令行式”的操作,改成了更适合飞书使用习惯的卡片交互。/help 改成 Markdown 卡片输出,补了 /qc 快捷命令卡和 /session_ctl 会话控制面板,/sessions / /sessions all 也支持更直观的会话切换入口。整体上,飞书从“能用命令做事”往“能直接点卡片完成操作”前进了一步。

  2. 会话管理能力补强
    会话相关这次做了两层增强:一层是飞书侧的会话列表、会话控制、按活跃时间排序、跨项目会话展示更完整;另一层是后台 Session 管理页补了最后修改时间、列排序、列显隐开关,并把钉钉也纳入了平台管理范围。同时,钉钉聊天侧也补齐了 /session <sessionId> 手动切换已有会话的能力。

  3. 聊天模型白名单正式做成全平台能力
    这次新增了 CHAT_MODEL_WHITELIST,把“聊天侧到底能看到哪些模型、能切换到哪些模型”统一收口了。覆盖各聊天入口。这个改动的核心价值,是解决像 OpenRouter 这类 provider 模型过多、聊天界面里不方便展示和选择的问题。

  4. OpenCode 管理面板补上模型白名单配置入口
    围绕模型白名单,Web 管理面板也做了对应增强。OpenCode 页面新增了“对话可选模型”配置区,支持按 provider 折叠、搜索、批量勾选和按筛选结果全选。与此同时,“刷新 OpenCode 配置”按钮的行为也做了调整,刷新只负责同步运行时配置和模型目录,不再自动改掉当前已经勾选的白名单结果。

  5. QQ 官方通道稳定性和输出体验做了专门收口
    QQ 是这次改动里另一块重点。后端补了 token 失效时的自动刷新和重试,降低偶发无回复的问题;前端表现上,支持了Markdown格式的消息显示,同时提供了 QQ 会话级的纯文本降级开关,用来规避 Windows 桌面 QQ 对 Markdown 渲染不稳定的问题;同时,QQ 的思考链和最终回答输出方式也做了重构,不再反复整段刷屏,而是改成更清晰的增量输出和最终结果分离;另外增强用户操作体验,支持点击命令、session id、模型名,自动输入输入框,避免了用户繁琐的输入。

  6. Windows 兼容性与运行稳定性修复
    这次还顺手修了一批更偏运行层的问题,包括 Windows 下 OpenCode 自动启动路径不正确、opencode models 调用兼容性差、审计日志在 Windows 上容易因为 rename 失败而报错等。这部分虽然不是直接面向聊天功能的改动,但对本地开发、启动和长期运行稳定性影响比较大。

详细的修改内容如下:

背景

这次分支相对 public-fork/main 主要集中在六类问题:

  1. 飞书命令输出和会话操作仍偏“手打命令”,操作体验不够顺,命令界面markdown文本未正常渲染。
  2. Web/OpenCode 管理面板也缺少直观的白名单配置入口。
  3. QQ 官方通道存在 token 过期导致偶发无回复、Markdown 在桌面端兼容性差、思考链刷屏等实际体验问题。
  4. Session 管理页缺少最后修改时间、排序能力、列显示控制,钉钉平台也没有完整纳入。
  5. Windows 下 OpenCode 相关命令和日志写入存在兼容性问题。
  6. /sessions all 输出不全,且不支持按活跃时间排序等问题。

变更总览

本次分支共涉及 29 个文件,核心修改点集中在:

  • 飞书命令卡片、快捷命令卡片、会话控制卡片、会话列表卡片
  • 全平台聊天模型白名单
  • OpenCode 管理面板模型目录与白名单配置 UI
  • QQ 官方通道发送、分页输出、纯文本降级、思考链输出
  • Session 管理页排序与字段透传
  • 钉钉手动切换会话
  • Windows 兼容性与审计日志写入稳定性

1. 飞书命令卡片与会话控制增强

功能表现

  • /help 不再是带markdown格式的纯文本说明,而是改成飞书 Markdown 卡片输出。
  • 新增 /qc 快捷命令卡,集中放常用入口。
  • 新增 /session_ctl 会话控制面板,可在卡片中完成:
    • 重命名当前会话
    • 新建 OpenCode 会话
    • 切换到已有会话
    • 切换后顺带重命名
  • /sessions/sessions all 在需要时可展示“切换至此 Session”按钮,而不是只给用户看列表(需要启用/config session session_with_change true)。

飞书 /help Markdown 卡片:
image

飞书 /qc 快捷命令卡:
image

飞书 /session_ctl 会话控制卡:
image

飞书 /sessions 带“切换至此Session”按钮的分页卡片:
image

关键代码修改

  • src/commands/parser.ts
    • 新增 configqcsession_ctl 命令类型。
    • /models all/config session .../config output onlyText ... 增加解析能力。
  • src/feishu/cards.ts
    • 新增 buildMarkdownCard(),统一承接 Markdown 卡片输出。
    • 新增 buildHelpCard() / buildShortcutCommandCard()
    • 新增 buildSessionControlCard()buildSessionListCard()buildSessionListActionCard()
    • 控制面板标题从“会话控制面板”调整为更准确的“模型与角色面板”。
  • src/handlers/command.ts
    • 增加 replyHelpCard()pushQcCard()buildSessionControlCard() 等飞书卡片输出链路。
    • 增加会话级配置读取:helpWithQcsessionWithCtlsessionWithChangesessionOrderMode
    • /help/sessions/sessions all 改为按 Markdown/卡片分页输出。
    • /sessionssession_with_change=true 时走带按钮卡片分页,否则走纯 Markdown 分页。
  • src/handlers/card-action.ts
    • 新增 help_run_commandsession_ctl_submitsession_list_switchcreate_chat 卡片动作处理。
    • 会话控制卡和快捷命令卡现在都有完整回调闭环。
  • src/handlers/p2p.ts
    • 首次私聊引导复用飞书帮助卡。
    • 建群卡中的已有会话列表排序改为读取当前聊天的 sessionOrderMode
  • src/store/chat-session.ts
    • 新增会话级持久配置字段:
      • sessionOrderMode
      • helpWithQc
      • sessionWithCtl
      • sessionWithChange
    • 这些配置会在会话重绑、新建会话、迁移绑定时继续继承。

需要特别说明的实际行为

  • help_with_qcsession_with_ctlsession_with_change 在当前分支默认都是 false,后续根据用户实际情况设置为 true启用。

2. 飞书会话列表准确性与流式卡片稳定性修复

功能表现

  • /sessions all 不再只依赖本地 store 已知目录,能列出更多真实存在的跨项目会话。
  • last_time 模式下,/sessions all/session_ctl/create_chat 都尽量按会话真实最后活跃时间排序,而不是简单按列表返回顺序。

关键代码修改

  • src/handlers/command.ts
    • 会话列表与会话控制排序支持 last_time
  • src/opencode/client.ts
    • 提供跨项目查询和最后活跃时间获取能力给上层排序使用。

3. 全平台聊天模型白名单统一落地

功能表现

  • 新增 CHAT_MODEL_WHITELIST,统一限制聊天侧“可见模型”和“可切换模型”。
  • 这个白名单对各渠道可使用的模型进行统一限制。
  • /models 展示的是当前允许范围,如OpenRouter 等提供较多模型的provider,可以调节是否可选模型,不再把 OpenRouter 等 provider 的全部模型一股脑铺出来。
  • /model xxx 如果指向白名单外模型,会被明确拒绝。

关键代码修改

  • src/config/platform.ts
    • modelConfig 中新增 chatModelWhitelist 解析逻辑,支持 JSON 数组和分隔符文本两种写法。
  • src/utils/chat-model-whitelist.ts
    • 新增统一工具层,负责:
      • 解析 provider/modelprovider:model
      • 收集允许模型集合
      • 校验单个模型是否允许
      • 按用户输入匹配允许模型
  • src/handlers/qq.ts
    • /models 改为只展示允许模型。
    • /model 改为先匹配白名单,再允许切换。
  • src/handlers/telegram.ts
  • src/handlers/wecom.ts
  • src/handlers/weixin.ts
  • src/handlers/platform-command.handler.ts
    • 共享平台命令链路统一接入白名单过滤与校验。
  • src/handlers/discord.ts
    • 模型下拉构建时过滤白名单。
    • 交互提交时二次校验,避免绕过前端选项。
  • src/handlers/card-action.ts
    • 飞书模型卡片提交时也会校验白名单。

4. OpenCode 管理面板新增“对话可选模型”配置区

功能表现

  • OpenCode 页面新增“对话可选模型”配置区,支持:
    • provider 折叠/展开
    • 模型搜索
    • 按 provider 全选
    • 按当前筛选结果全选
    • 清空当前勾选
  • “刷新 OpenCode 配置”按钮现在只负责重新读取运行时配置与模型目录,不再自动篡改当前勾选。

“对话可选模型”配置区:
image
image

关键代码修改

  • src/admin/admin-server.ts
    • 新增 /api/opencode/model-catalog,返回完整 provider -> model 目录。
    • 新增 /api/opencode/enabled-models-sync,读取 OpenCode 当前运行时配置中的启用模型。
  • web/src/api/index.ts
    • 增加 CHAT_MODEL_WHITELIST 字段透传。
    • 增加 getModelCatalog()syncEnabledModelsFromOpenCode() API。
  • web/src/views/OpenCode.vue
    • 增加白名单模型选择区域完整 UI。
    • selectedProvider 改为用 provider id,不再混用 name。
    • selectedModelKeys 持有最终白名单值,并回写到 CHAT_MODEL_WHITELIST
    • 刷新按钮改为保留当前勾选,仅刷新目录与运行时视图。

5. QQ 官方通道:发送重试、支持Markdown格式输出、纯文本降级、思考链输出重构

功能表现

  • QQ 官方发送接口遇到 11244 token not exist or expire 时,会自动清理 token、重新获取并重试一次。
  • QQ 会话新增 /config output onlyText true|false
    • false:默认 Markdown 输出
    • true:强制纯文本输出,规避Windows桌面 QQ Markdown 渲染缺陷
  • QQ 的 /help/sessions/models 等静态输出改为可点击命令*输入对话框形式,增强用户体验。
  • onlyText=true 时,消失会自动退回纯文本模式。
  • QQ 流式输出不再重复整段重发思考快照,而是改成:
    • 思考过程增量消息
    • 最终结果消息
  • QQ Markdown 模式下,思考过程改用更紧凑的代码块样式,降低界面占用。

QQ /help 带点击命令及点击效果:
image

QQ 纯文本输出效果:
image

QQ Markdown文本输出效果:
image

关键代码修改

  • src/platform/adapters/qq-adapter.ts
    • 将官方发送拆成 sendMarkdownMessage()sendPlainTextMessage()
    • 新增 resetAccessToken()isAccessTokenExpiredError()
    • 命中 11244 时自动刷新 token 并重试一次。
    • QQSender.sendCard() 支持 forcePlainText 与 markdown payload 分流。
  • src/handlers/qq.ts
    • 增加 onlyText 配置读取与设置。
    • /help/models/sessions/config 改为 QQ 卡片/分页输出。
    • /models/model 同时接入模型白名单。
    • 增加 session order 配置在 QQ 侧的读取与使用。
  • src/utils/text-builder.ts
    • 为 QQ 新增专用 qqText 负载。
    • 增加 QQ 专用 reasoning/text 去重与拼装逻辑,避免思考和正文重复。
    • 在 question 场景下也同步生成 QQ 专用输出文本。
  • src/index.ts
    • 为 QQ 增加 qqProgressState
    • 运行中只发送“新增思考增量”,最终完成时单独发送最终结果。

需要特别说明的实际行为

  • onlyText 默认为false,即使用markdown格式输出,若需关闭这需要设置/config output onlyText true

6. Session 管理页增强 + 钉钉会话切换补齐

功能表现

  • Session 管理页新增“最后修改时间”数据透传。
  • 表格支持点击列头排序。
  • 新增“显示列”面板,可按需控制列展示。
  • 平台下拉补齐“钉钉”。
  • 钉钉聊天侧新增 /session <sessionId> 手动切换已有会话能力。
image

关键代码修改

  • src/admin/routes/session.ts
    • OpenCodeSessionItem 新增 updatedAt
    • OpenCode 会话聚合接口透传 time.updated,并默认按更新时间倒序。
    • 平台列表新增 dingtalk
  • web/src/views/Sessions.vue
    • 新增自定义排序状态 sortState
    • 新增列显隐控制 columnVisibility
    • 新增“最后修改时间”列和格式化展示。
  • web/src/api/index.ts
    • 前端 Session 类型新增 updatedAt
  • src/handlers/platform-command.handler.ts
    • 补齐 session switch 分支。
    • 切换时会校验 ENABLE_MANUAL_SESSION_BIND,并通过 findSessionAcrossProjects() 查目标 session。

7. Windows 兼容性与日志稳定性修复

功能表现

  • Windows 开发模式下,OpenCode 自动启动时不再错误定位到项目外层目录。
  • Windows 下刷新 provider/model 列表时,对 opencode models 的调用更稳。
  • 可靠性审计日志不再通过“整文件重写 + rename”的方式写入,降低 Windows 的 EPERM rename 风险。
  • .codex-logs/ 加入忽略列表。

关键代码修改

  • src/index.ts
    • process-manager.mjs 路径从 ../../scripts 修正为 ../scripts
  • src/services/resources/providers/manager.ts
    • Windows 下改为 shell + windowsHide 调用 opencode models
    • 增加 child.on('error') 与超时收尾保护。
  • src/reliability/audit-log.ts
    • 删除原先 tmp + rename 的原子写入方案。
    • 改为单进程串行 appendFile 队列。
  • .gitignore
    • 新增 .codex-logs/

8. 其它同步修改

  • web/src/composables/chat-model.ts
    • 对聊天消息 turn 构建增加去重,减少前端重复消息拼装。
  • src/admin/routes/chat-meta.ts
    • 配合聊天侧模型与会话元信息透传做了同步调整。
  • src/opencode/client.ts
    • 为上层会话排序、跨项目查找、模型目录读取等能力提供支撑。

验证建议

由于这次是多功能合集,建议按功能块验证,而不是只跑单一测试:

  1. 飞书
    • /help
    • /qc
    • /session_ctl
    • /sessions
    • /sessions all
    • /compact
  2. 模型白名单
    • Web OpenCode 页面勾选白名单
    • 各平台 /models
    • 各平台 /model
  3. QQ
    • /help
    • /config output onlyText true|false
    • /models
    • /session
    • 长思考链输出
  4. Session 管理页
    • 排序
    • 显示列
    • 钉钉平台筛选
  5. 钉钉
    • /session <sessionId>

提交说明

  1. 飞书从“命令行式操作”明显向“卡片交互式操作”前进了一步。
  2. CHAT_MODEL_WHITELIST 现在可以全平台统一限制聊天模型的选择与显示。
  3. QQ 官方通道支持Markdown格式显示,思考链路分块输出。

HNGM-HP and others added 30 commits March 21, 2026 00:49
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
增加对“钉钉”的支持
1、扩容新增平台的思维链、工具链独立开关
修复windows exe下无法正常接收消息的BUG
1、停止服务时隐藏窗口 - stopBackend() 函数中调用 mainWindow?.hide() 替代原有的加载提示页面逻辑
- 企业微信、微信消息撤回标记从 ❌ 改为 ⚠️(部分支持)
- 添加说明:/undo 命令可撤回 OpenCode 侧会话并发送平台提示

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
从 SessionSidebar.vue 中删除了重复的"+新建"按钮,保留"新建项目"功能
2. ✅ 重新规划"新建项目"对话框逻辑
实现了完整的文件夹浏览流程:选择项目文件夹 → 自定义输入路径 → GO或按回车 → 展示文件夹列表 → 点击进入或选择
添加了路径输入框,支持输入路径后按回车或点击GO浏览
优化了文件夹浏览体验,点击文件夹可进入下一级,上方路径同步更新
3. ✅ 修复滚动BUG
在 ChatWorkspace.vue 的 .workspace-column--panel > :deep(*) CSS 规则中添加了 overflow-y: auto,使 git、文件、看板、终端 面板可以正常滚动
4. ✅ 重新设计UI
更新了 .panel-toggle 样式,采用更现代的设计,添加了边框、背景色和悬停效果
优化了激活状态的样式,使用浅灰色背景
5. ✅ 加载信息条数改为30条
在 useChatMessages.ts 中将 DEFAULT_LIMIT 从 10 改为 30
6. ✅ 修复点击复制出错
在 SessionTreeNode.vue 中添加了 if (!navigator.clipboard) return 安全检查
7. ✅ 修复发送消息时树状图自动展开
在 SessionSidebar.vue 的 watch 中添加了 skipAutoExpand 标志,只在首次加载时自动展开
8. ✅ 优化会话树状图时间显示
时间显示移到右侧,与 {···} 按钮共用位置
默认显示时间,鼠标悬停时显示 {···}
1天内的时间显示为 h(小时),1h内显示为 min(分钟)
9. ✅ 修复对话框引号问题
将 ChatWorkspace.vue 中的中文引号修复为标准英文引号
修复UNDO 部分BUG
🎉 重大更新
全新 Web 聊天界面
聊天工作区 - 全新的现代化聊天界面设计
消息系统 - 支持流式消息、消息列表、消息输入
会话管理 - 完整的会话创建、切换、树状图展示
侧边面板 - 集成文件浏览器、Git 面板、终端面板
AI 元素组件系统
新增多种 AI 响应元素组件:

Markdown 渲染 - 支持 Markdown 格式化显示
代码块 - 带语法高亮的代码展示
文件树 - 可视化文件结构展示
推理过程 - 显示 AI 推理过程
任务列表 - 任务进度和状态展示
工具调用 - 显示工具使用详情
终端输出 - 终端命令和结果展示
对话视图 - 多轮对话展示
后端 API 增强
新增完整的聊天 API 路由系统:

聊天事件流 (/api/admin/chat/events)
会话管理 (/api/admin/chat/sessions)
工作区文件 (/api/admin/workspace/files)
Git 操作 (/api/admin/workspace/git)
终端操作 (/api/admin/workspace/terminal)
权限控制 (/api/admin/chat/permission)
元数据管理 (/api/admin/chat/meta)
事件总线系统
新增聊天事件总线架构
事件标准化处理器
完整的 TypeScript 类型定义
✨ 新功能
会话管理
✅ 会话树状图展示,支持层级结构
✅ 会话时间智能显示(小时/分钟格式)
✅ 会话自动展开优化
✅ 会话复制功能
文件浏览器
✅ 完整的文件夹浏览流程
✅ 自定义路径输入支持
✅ 键盘快捷操作(回车键)
✅ 路径同步更新
Git 集成
✅ Git 状态查看
✅ 提交历史浏览
✅ 文件差异对比
终端集成
✅ Web 终端面板
✅ 命令执行
✅ 输出查看
🐛 Bug 修复
修复 Git 部分 BUG - 修复 Git 操作相关问题
修复 UNDO 部分 BUG - 修复撤销功能相关问题
修复滚动 BUG - 面板内容可正常滚动
修复点击复制出错 - 添加安全检查
修复对话框引号问题 - 统一使用标准英文引号
修复发送消息时树状图自动展开 - 优化展开逻辑
💡 优化改进
UI/UX 优化
重新设计面板切换按钮样式,采用现代化设计
优化激活状态样式,使用浅灰色背景
会话时间显示位置优化,移至右侧
删除重复的"+新建"按钮
性能优化
消息加载条数从 10 条提升至 30 条
优化组件渲染性能
代码质量
新增完整的 TypeScript 类型定义
新增单元测试覆盖
优化代码组织结构
📦 技术栈更新
前端依赖
更新 web/package.json 依赖
新增多个 Vue 组合式函数
新增 AI 元素组件库
后端增强
新增聊天事件处理系统
新增工作区管理路由
优化平台配置处理
📝 变更统计
87 个文件变更
新增 17,921 行代码
删除 155 行代码
6 个 commits
HNGM-HP and others added 30 commits April 25, 2026 19:46
2、修复部分BUG
- 删除 Web 端登录页与修改密码页(Login.vue / ChangePassword.vue)
- 移除路由守卫、token 拦截器、admin_token 存取与 401/410 跳转逻辑
- 移除登录超时、活动检测、退出/修改密码按钮等相关 UI 与逻辑
- 移除后端 /admin/password、/admin/login-timeout、/admin/reset-password 等接口
- chat-auth 中间件保留为空操作以兼容历史 import 路径
- configStore 中密码与登录超时相关方法整体下线
- electron 托盘菜单与 deploy 脚本不再提供"重置管理员密码"项
- 更新 .env.example,去除 ADMIN_PASSWORD 字段

后续管理面板访问无需登录,直接通过 Web 即可完成全部配置。

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
- 后端:configStore 新增 isOnboardingCompleted / setOnboardingCompleted;
  /api/admin/onboarding-status 提供 GET / PUT,作为权威源
- 前端:useOnboarding 组合式封装,localStorage 仅作缓存;启动时拉取
  后端状态,未完成则弹出 OnboardingWizard 三步式向导
  • Step 1:界面语言(中文 / English),即时切换并写回
  • Step 2:单选首个接入平台,可跳过;选择后自动跳到 /platforms?focus=
  • Step 3:基于 driver.js 高亮左侧栏每一项,逐项讲解
- 帮助菜单(HelpMenu)放在侧边栏底部,链接到仓库 README、平台 / OpenCode /
  高可用文档与 Issue 反馈页(按要求不再提供"重新查看引导"入口)
- 侧边栏菜单项加上 data-tour="nav-*" 锚点供 driver.js 定位
- i18n 词典补齐引导 / 帮助 / 平台说明 / 导览描述对应英文
- 新增 driver.js@^1.4 依赖

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
- bin/opencode-bridge.js 委托给 dist/cli/index.js 路由子命令
  (init / start / --help / --version / 默认智能入口)
- 新增 src/cli/tui-wizard.ts:基于 @inquirer/prompts 的轮询菜单,
  与 web 共用 ConfigStore,覆盖语言、初始接入平台、平台凭据、
  OpenCode 连接、群聊白名单、可靠性、输出显示、Web 管理面板启停、
  帮助文档等所有 web 可设置项
- 新增 src/cli/messages.ts 提供中文/英文 CLI 文案
- src/cli/index.ts 智能入口:Electron 不变,无头首次运行触发向导
- src/index.ts 在 main() 中读取 WEB_ADMIN_DISABLED / BRIDGE_DISABLE_ADMIN,
  支持仅停 web、保留接入平台运行(离线/纯 CLI 场景)
- 新增 BridgeSettings 字段:CLI_LANG / WEB_ADMIN_DISABLED / ADMIN_PORT
- BRIDGE_CLI_MODE=1 抑制 dist/index.js 自动 main(),由 CLI 显式驱动

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
- 新增"三套配置入口(Web / TUI / 配置文件)"小节,与新版无登录架构对齐
- 桌面应用:补充首次访问 Web 自动弹出引导(语言/平台/driver.js 高亮气泡)
- NPM 安装:替换不存在的 opencode-bridge-manage / -start / -stop 子命令,
  改为真实的 opencode-bridge / init / start / --help / --config-dir
- 增加 TUI 向导流程说明、与 SQLite 配置共享、Web 开关解耦(BRIDGE_DISABLE_ADMIN)
- 配置说明:补全 WEB_ADMIN_DISABLED / CLI_LANG,新增 TUI 配置入口行
- 故障排查:新增"Web 是否被 TUI 关闭"的排查步骤
- 移除 "首次访问时系统将提示设置管理员密码" 等过期描述
- README.md 与 README-en.md 同步更新

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
完成了 plan-v2.md 中定义的所有核心功能:

## 后端实现
- 资源路径管理:支持项目级和用户级两层配置覆盖
- Skill 加载器与注册表:扫描、解析、缓存、热载
- MCP 管理器:索引管理、热载、opencode 配置生成
- Agent 管理器:CRUD 操作、与 opencode 字段对齐
- Provider 管理器:auth.json 读写、API key 管理、模型缓存
- 事件总线:resource:changed 事件、SSE 广播、cache 失效
- REST API:完整的资源 CRUD 端点 + SSE + WebSocket OAuth 终端
- Chat 命令打通:合并所有资源命令到 /api/chat/commands
- TUI 命令:bridge resource skill/mcp/agent/model 子命令

## 前端实现
- Web 资源管理页面:4 个 Tab(Skills/MCP/Agents/Providers)
- 统一资源编辑器:支持所有资源类型的创建/编辑
- OAuth PTY 终端:xterm.js + WebSocket 实现终端登录
- 作用域切换:项目级/用户级资源切换
- Pinia Store:资源状态管理 + SSE 订阅
- REST API 客户端:完整的资源操作方法

## 飞书路径下线
- agent 创建命令改为迁移提示
- 清理 220 行遗留代码

## 测试覆盖
- Skills 测试:frontmatter、热载、覆盖优先级
- MCP 测试:索引一致性、读写并发
- Providers 测试:auth.json 读写保护
- Router 测试:REST 端到端
- 额外:events、agents、paths 测试

## 依赖更新
- 新增:xterm、xterm-addon-fit(OAuth 终端)
- 更新:pnpm-lock.yaml、package-lock.json

完成度:100%
plan-v2.md 对齐度:100%

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 删除 5 个 worktree 分支(worktree-agent-*)
- 更新 .gitignore 忽略临时文件:
  - plan*.md(计划文件)
  - .codex(配置文件)
- 从 git 跟踪中移除 plan-v2.md 和 .codex
- data/ 保持完全忽略(用户数据目录)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 修复 `/help`、`/project`、`/sessions` 等命令在飞书中未按 Markdown 富文本显示的问题,统一改为飞书 Markdown 卡片输出。
- 新增 `/qc` 快捷命令卡,集中提供 `/panel`、`/session_ctl`、`/create_chat`、`/model`、`/models`、`/status`、`/project list`、`/compact`、`/commands` 等入口。
- 新增 `/session_ctl` 会话控制面板,支持在飞书卡片中完成当前会话重命名、新建会话、切换会话,以及切换后顺带重命名。
- `/sessions`、`/sessions all` 支持按配置追加“切换至此Session”按钮,并改为按“会话块”分页,避免把单个会话拆断。
- 新增会话级配置:
  - `/config session order default|last_time`
  - `/config session help_with_qc true|false`
  - `/config session session_with_ctl true|false`
  - `/config session session_with_change true|false`
- 上述三个布尔配置默认值已调整为 `false`。
- `/compact` 的飞书卡片按钮链路改为后台执行,避免卡片回调超时;完成后通过新消息反馈结果。
- 修复 `/qc` 中 `/create_chat` 被误透传到 OpenCode 导致 `Command not found: "create_chat"` 的问题。
- 修复飞书流式回答偶发重复发卡的问题:对近期渲染结果做去重缓存,并在卡片更新失败时保留原卡,避免重复补发。
- `/help` 与会话列表卡片分片阈值已收紧,尽量减少无谓拆分,同时保留超长内容的分页兜底。
- 官方 QQ 默认改为 markdown-first 发送,保留 OneBot 文本降级路径
- /help 增加 qqbot-cmd-input 可点击命令,并补充 /config session order 用法说明
- 恢复 QQ /config session order 支持,并让 /session、/sessions、/sessions all 按配置排序
- 优化 /models 与 /sessions 输出,支持点击自动填入模型 ID 和完整 session id
- 长模型列表与会话列表改为分页多条发送,避免简单截断
- 新增 /config output onlyText true|false,会话级切换 QQ Markdown 与纯文本输出模式
- 为 QQ 会话状态持久化 onlyText 配置,重绑 session 后继续生效
- 调整 QQ /help 与配置说明,补充电脑 QQ Markdown 渲染不稳定时的使用指引
- 为 QQ 官方适配器补充纯文本发送分支,onlyText=true 时改走原文 content 发送
- 让 OpenCode 流式输出链路同步遵守 QQ onlyText 配置,避免运行中仍回落到 Markdown 发送
- 为 QQ 增加专属流式渲染逻辑,不再复用通用的思考分隔包装,降低桌面 QQ 吞消息概率
- 调整 QQ 思考链构造,按 reasoning/text 段落分别组装内容,并在结果侧收口重复的思考文本
- 将 QQ 流式回复改为思考过程与最终结果分两条消息发送,避免运行中反复整段重发累计思考内容
- 在 QQ Markdown 模式下将思考过程改为代码块样式,利用客户端紧凑排版压缩消息占用空间
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants