mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-31 16:33:34 +08:00
9.1 KiB
9.1 KiB
v0.5.11
本版本两条主线落地:Solo Pipeline 模式(让 AI 在 5 阶段独立流水线里跑完一个任务,不分 worker)和 inline 内联编辑 + LSP 错误反馈基础(在工作区面板里直接编辑文件 + 把语言服务器诊断接入 agent 工具结果)。同时 coordinator 模式吃了一组 B1/B2 优化,桌面端补了 TabBar 滚轮横滚、provider "获取模型" 跨混合内容修复等一批 UX/可靠性改动。
新功能
Solo Pipeline 模式
- Solo 流水线 prompt + 建议引擎(#16 / #17)。新增纯函数建议引擎
soloSuggestions.ts、Tier-1 信号收集器soloSignalsService.ts、5 阶段 Solo prompt(intent triage → planner → builder → tester → reviewer → integrator)。配套 26 个 i18n key × 5 locale,跨模块契约由soloSuggestions.i18n.test.ts守住,66 / 66 测试。 - Solo 模式端到端接线(#25)。WS 协议加
set_pipeline_mode { flavor: 'solo' \| 'normal' }、服务端handleSetPipelineMode、CLI args 通过--append-system-prompt注入 Solo 提示词。桌面端+菜单加 toggle,chat header 持续显示linear_scale状态 chip + 解释 tooltip。与协调模式互斥——开 Solo 自动关 coordinator,反之亦然,由 desktop store 与 server handler 双向守住。 - lspErrorCount Tier-1 信号(#27)。Solo 引擎现在能消费 LSP 报告的工作区错误数:当工作区有未修类型错误时,欢迎页
cleanup类别建议会冒出"先修 N 个错误再开新任务"。
内联编辑 + LSP 反馈基础
- 工作区面板默认显示完整文件树(#23)。第一次打开会话面板时默认
'all'视图(之前是'changed'),用户首次显式切换后偏好会保留。修复"每次新会话只看到改动列表,看不到项目布局"的体验断点。 - CodeMirror 6 内联编辑器(#24)。工作区文件预览不再是只读
<pre>,可直接编辑。CodeMirror 6 ≈ 80 KB gz(不是 Monaco 的 2-3 MB),支持 TS / TSX / JS / JSX / JSON / Markdown 语法高亮,行号、搜索面板、缩进引导默认开启;二进制 / 大文件 / 非 UTF-8 编码自动回退到原只读预览。 - 原子保存 + 冲突 banner(#24)。新 HTTP 端点
POST /api/sessions/:id/workspace/file走临时文件 +rename原子写入,Windows 下遇 EBUSY/EPERM 自动重试 3 次;保存使用 SHA-256 hash 做乐观并发控制(哈希不匹配返 409,含当前内容供前端合并)。当 AI 写了用户正在编辑的文件,banner 永远显示 3 个明确动作(Reload / Keep mine / Open conflict view),从不静默覆盖未保存的改动。 - 关闭未保存提示。带 dirty buffer 的 tab 关闭时弹 Discard / Save / Cancel 三选项 modal,30 秒保存超时保护,保存中点关闭按钮被进度指示器替代。
- LSP 管理器 + 状态指示器(#26)。新增
LspManager服务(lazy spawn、60s idle eviction、内存上限保护、stderr ring buffer)、JSON-RPC stdio framer、严重度映射(LSP 1-4 → error/warning/info/hint)、跨文件诊断收集与确定性比较器(severity → 编辑文件优先 → 字典序)。工作区面板头新增LspStatusIndicator,显示Ready/N errors detected/Starting/Unavailable;点击展开诊断下拉,键盘可达。unavailable状态根据原因展示Install...(缺前提)或Retry(异常退出)单个动作。
协调模式 B1 / B2 优化
- B1 守护(#15)。新增 5 条不需要新架构、用环境变量回滚的护栏:
lazyDelegationCheck.ts— AgentTool 提示包含"based on the findings"等弱化短语时拒掉,强制重写- 协调模式专家 redirect — 看到 worker 子任务匹配专家关键词(code review / security audit / refactor / commit / test 等)时自动切到对应专家
- 调用上限将到时给 worker 结果加
<system-reminder>,让 coordinator 在最后一次硬阻塞前能换路 - 卡顿监督 + 模式建议横幅(首条提示路径中已接通)
- B2 task-spec 质量评分(#18)。纯启发式打分子模块
taskSpecQuality.ts(4 维度:concrete-action / file-reference / success-criteria / adequate-detail → 3 桶 well-specified / adequate / underspecified)。当前只在评分阶段警告,不阻塞 schema;为后续结构化 task-spec 入参铺路。 - worker-continue advisor(#21)。当 coordinator 想 spawn 新 worker,但有同类型 worker 还在 panel 上、已加载相同文件,advisor 会推荐
SendMessage复用已有的,不浪费上下文。 - research-fork opt-in(#22)。协调模式可选启用单 fork 路径做 cache-sharing 的研究风格扇出。
改进
- TabBar 鼠标滚轮横向滚动(#19)。鼠标悬停在对话 tab 栏时滚轮
deltaY翻译为水平scrollLeft,滚动条隐藏(scrollbar-width: none),但仍可滚——比"必须按住 shift"舒服很多。
修复
- smart "Install all" + PATH 刷新(#14)。修 v0.5.10 一键安装的兼容性 bug。重写为 PowerShell wrapper:装完每个包刷一次会话级 PATH,单个 manager 失败时按平台 fallthrough(winget → scoop → choco / brew → port / apt → dnf → pacman),不会一个 dependency 卡住后续全部。
- provider "获取模型" 跨混合内容修复(#28)。把按钮的 fetch 路径从渲染层平移到本地服务端代理(
POST /api/providers/fetch-models)。原来直接在 webview 里fetch()上游/v1/models,碰到 plainhttp://的 relay(如http://47.116.22.0:3000)会因为渲染层是安全上下文(Tauri / Electron)触发 mixed-content 拦截,外加大量自部署 relay 不返回 CORS 头,全部呈现为 "Failed to fetch"。服务端无 webview 限制,HTTP / HTTPS / IP / 域名一视同仁。 - WS echo 测试 timeout 修复(#20)。把 main 上 echo 测试的 5 秒超时拉到 12s/15s,缓解 main 上 CI 偶发抖动。
范围
- Solo Pipeline:
src/server/services/{soloSuggestions,soloSignalsService}.ts、src/coordinator/soloPipelinePrompt.ts、src/server/ws/{events,handler}.ts、src/server/services/conversationService.ts、desktop/src/{stores/{sessionRuntimeStore,chatStore},components/chat/ChatInput,pages/ActiveSession,types/chat}.ts(x)、5 个 i18n locales。 - 编辑器 + LSP 基础:
desktop/src/{components/workspace/{WorkspaceEditor,encodingDetect,UnsavedChangesModal},stores/workspacePanelStore}.ts(x)、src/server/{events/workspaceFileSaved,services/{workspaceFileService,lspManager,lspProcessLimits,lspJsonRpc}}.ts、desktop/src/components/workspace/LspStatusIndicator.tsx、desktop/package.json(@codemirror/* 9 个包)、5 个 i18n locales。 - 协调模式:
src/tools/AgentTool/{lazyDelegationCheck,taskSpecQuality,workerContinueAdvisor,agentStallDetector,invocationLimiter,forkSubagent,runAgent,AgentTool}.ts(x)、src/utils/{handlePromptSubmit,modeAdvice}.ts、src/tasks/LocalAgentTask/LocalAgentTask.tsx、scripts/dev-coordinator-e2e.ps1。 - TabBar:
desktop/src/components/layout/TabBar.tsx。 - Install all + Provider Fetch Models:
src/server/services/{pluginService,providerService}.ts、src/server/api/providers.ts、src/server/middleware/errorHandler.ts、src/server/types/provider.ts、scripts/test-mcp-install.ps1、desktop/src/{api/providers,types/provider,pages/Settings}.ts(x)。 - WS echo 修复:
src/server/__tests__/e2e/business-flow.test.ts(timeout 调整)。
验证
- 服务端
bun test src/coordinator/soloPipelinePrompt.test.ts:11 / 11 ✅ - 服务端
bun test src/server/__tests__/conversations.test.ts -t "Solo":3 / 3 ✅ - 服务端
bun test src/server/services/soloSuggestions.i18n.test.ts:2 / 2(i18n 跨 locale 契约)✅ - 服务端
bun test src/server/__tests__/providers.test.ts -t "fetchUpstreamModels":5 / 5 ✅ - 桌面
bun run lint(tsc --noEmit)✅ - 桌面
bun run test stores/{chatStore,sessionRuntimeStore,workspacePanelStore}.test.ts:全套通过 ✅ - 桌面
bun run test src/api/providers.test.ts:2 / 2(renderer→server 契约)✅ - 桌面
bun run test src/components/workspace/{WorkspaceEditor,LspStatusIndicator}.test.tsx:全套通过 ✅ - AgentTool / coordinator 套件:
taskSpecQuality.test.ts18 / 18、lazyDelegationCheck.test.ts全套、workerContinueAdvisor.test.ts全套 ✅
升级注意
- 零破坏。Solo Pipeline 模式默认关,需要用户在
+菜单显式打开 toggle 才生效;闲聊场景不会被自动切到 Solo 流程。LSP 反馈在feature('LSP_FOUNDATION')flag 下,对没装typescript-language-server的用户透明降级为unavailable,不阻塞任何 agent 流程。 - CodeMirror 包首次更新需要
cd desktop && bun install一次拉新依赖(@codemirror/* 9 个包,合计 ≈ 80 KB gz,远低于 Monaco 的 2-3 MB);CI 自动处理。 - Solo / Coordinator 互斥。两个模式在客户端与服务端两侧都强制只能开一个,CLI 子进程从不同时收到两份
--append-system-prompt。模式偏好在localStorage持久化,会话重启后保留。 - Provider 用户:自部署 plain-
http://relay 现在能在桌面端正常"获取模型"了,无需把 relay 套 HTTPS 反代。