Skip to content

v1.7.4

Choose a tag to compare

@KyuuKyuuStone KyuuKyuuStone released this 09 Oct 02:11
· 87 commits to main since this release

Claude Code Heihei v1.7.4

结构债收官版:v1.7.0 结构专项立下的三项验收目标本版全部收口——五个巨型文件的行数目标(G1)、分层违规清零(G2)、服务端(root)类型关卡(G9)。同时修掉一批用户实际会撞到的桌面缺陷(面板/弹窗静默失败、协作设置弹窗永久转圈、未登记会话无法登记、超时被当成失败),并新增**「上下文接近上限 → 一键压缩」**入口。无破坏性变更。

结构债收官(本版主线)

G1:五个巨型文件全部 ≤2500 行,豁免清零

文件 之前 现在
src/server/services/sessionService.ts 2660 2343
src/server/ws/handler.ts ~3227 2384
desktop/src/stores/chatStore.ts 2504 2490
  • 做法是整族外移而非零敲碎打:转录派生域(消息窗口/用量/会话写入与维护)整簇并入 src/server/services/transcriptDerivation.ts;会话活动域、后台任务子域、CLI 消息翻译域、传输枢纽族分别上提到 sessionActivity.ts、sessionTransport.ts 等叶子模块;搬迁一律按纯移动纪律执行并逐字复核。
  • scripts/file-size-allowlist.json 现为空表:原先给 sessionService(cap 3846)与 handler(cap 3372)两条时效豁免已撤——两者现在都按规则 1 的文字标准(≤2500)管理,不再吃 cap。行长数基线表剩 19 项(均为上游 CLI 代码,只减不增)。

G2:分层违规 18 → 0,例外 0

  • 从 18 条「已知放行」分五批清到 0:上游 import 改注入缝下沉(三家 L2 服务对 ws/* 的上行依赖)、消掉 1 条真环、computer-use-python 下沉至 services/、环/动态 import/managedEnv 类残余 6 条全清。
  • 门禁实况:bun run lint:layers → 无任何违规(此前靠 --ignore-known 放行 18 条)。

G9:服务端类型关卡(tsc 棘轮)落地并接入 CI

  • 背景:root tsconfig.json 因 TS6 下带 baseUrl 而实际一个文件都没检查(只报 1 条 TS5101、exit 2 的真空检查)。
  • 修法:去掉 baseUrl(paths 不受影响),补闸门 bun run lint:types——签名只紧不松(基线 scripts/tsc-baseline.json,7141 条存量挂账、本批不销账),另带真空自毁(0 诊断判红)与骤降判红(拦「基线调到 1」式假绿)。
  • 判别力双段自证:单测段 14 条(新增红/计数+1 红/收敛不拦/真空红/骤降红…);管道段 scripts/g9-seed-error.patch 注入类型错误必红、反向 git apply -R 复原必绿。
  • CI 已接线(layer-lint job 主步 + 种子演练步);pre-commit 不接(全量 tsc 分钟级,钩子只留 <2s 的 file-size)。

桌面缺陷修复(用户可见)

面板/弹窗「静默失败」普查全批修(A1–A6)

此前多处「有 loading 面、有 error 变量,但错误从不显示」:删除失败、拉取失败、提交失败、目录浏览失败、原生目录对话框失败都只落 console,界面照旧、用户以为没点。

现在统一改为失败态 + 重试(错误文案走统一的人话映射),六处全修:删除提供商失败、提供商列表拉取失败、任务提交失败、最近项目加载失败、目录浏览失败、原生对话框失败。

一处设计洞(测试抓到):原生对话框流程开始前菜单会先关闭,失败态无处可显示——把失败态上移到外层持有,并在原生流程失败后重开菜单,面板重新挂载后失败提示仍在。

协作设置弹窗对「不在花名册的会话」永久转圈(v1.7.3 #2)

根因:原判断无法区分「花名册还没加载完」与「确实没这条」——后者恒为真,于是永久停在加载态、提交按钮一并锁死。现在拆成加载中 / 就绪 / 不在花名册(可重试)/ 拉取失败四态:不在花名册给出明确失败提示 + 重试,拉取失败给出可重试的失败态,二者不再混为一类。

未登记会话现在可以登记为协作会话

上一版把「未登记」与「查询失败」混成同一类并给了一条伪重试死路(本版修正)。现在:未登记(永久)放行表单——填写并保存即通过既有 upsert 路径完成首次登记;仅拉取中/拉取失败才锁提交。文案改为引导语(「该会话尚未登记为协作会话;填写以下信息并保存即完成登记。」)。

「请求超时」不再呈现为业务失败

Request timed out after 320s 此前被当普通错误弹红条,暗示「失败/重试」;实际它只断了连接、业务仍在后台跑。现在超时文案改为**「连接已超时;任务可能仍在后台运行,稍后刷新即可查看结果」,turn-change 错误条在超时态改用中性提示条**(五语言同步);默认请求超时同步由 120s 提升到 320s。

新建协作会话菜单新增「(选择目录…)」

此前想给新项目开协作会话只能绕道(先建普通会话、再改目录)。现在「新建会话」菜单直接给一条选择目录入口,复用既有原生目录选择。

协作任务台账按钮图标

台账按钮的 ListChecks 与活动流按钮图标同像素冲突,按设计师定稿在同族内换字为 ClipboardList(label/行为/状态一律未动)。

上下文:接近上限提示与一键压缩(R1)

  • 接近上限即提示:上下文用量接近窗口时给出提示条 + 一键压缩按钮;阈值直接取 CLI 返回值(autoCompactThreshold,已按 provider 覆盖后的窗口推导)——不自行推算,天然与 CLI 实际行为同口径。
  • 按钮是普通发送:复用既有 send 通道发 /compact(CLI 本地命令),零新协议、零 CLI 改动、零服务端改动;已核实该路径不会被 skipSlashCommands 吃掉。回合进行中按钮禁用,防重复触发。
  • 压缩结果有反馈:区分「正在压缩 / 已压缩 / 压缩后仍超窗」;区分依据是压缩后重新取数,不是猜测。
  • 两个入口、一份实现:/context 面板与上下文指示器的悬停弹层共用同一个组件与同一批文案键(不新造第二套)。弹层本体是 pointer-events-none(不可见时浮在输入区上方),故入口只在弹层可见时可点,避免隐形按钮吞掉点击。
  • 面板取数补一次短重试:压缩刚结束时 CLI 常仍在收尾,那次 get_context_usage 失败会直接落成错误;现在 post-compact 取数失败会延迟 5s 自动重试一次,仍失败才显示错误。
  • 口径统一三处:用量饱和时显式显示「≥窗口」(不再用钳到 100% 的数字误导)、分类明细行与总量同尺、面板 Context 页与弹层一样打**「估算」**标(该数据同走 estimateOnly 通道)。

协作

  • 主管注入消息捎带花名册摘要,消掉「主管不知道有哪些员工」的误判。
  • 花名册摘要改「模型可见、用户不可见」:摘要走独立系统段注入(模型能看到),界面读路径剥离该段——此前摘要会漏进用户可见的转录;历史裸行与检索面片段两处漏点同批补修。

测试与 CI 稳定性(改动均在测试/脚本侧)

  • 根除 CI 上的 Windows %TEMP% 8.3 短路径形态(如 RUNNER~1):抽共享 mkdtempReal 并套用到 11 个路径敏感测试文件,消掉 27 条环境型失败。
  • searchService.sessions runner 假红:runner 上全局单例的索引指向 fallback 目录且状态「已完成」,空索引内容吞掉两相阶段——改为显式注入 null,强制走被测引擎。
  • 协作推送合并窗口未随用例复位导致跨文件顺序依赖假红——已修并留原序复跑证据。
  • G9 闸门跨平台归一化三件套(仓库根绝对路径、bun 缓存路径、嵌套 node_modules、TS 并集成员序)——CI 上的「上百条新增」经归一后证实全部是形态差、非真实差异。
  • bun-types 显式声明修 CI 干净环境的 TS2688,并据此重生成基线 7255 → 7141。

已知问题(本版未修,均带账)

  1. turn-checkpoints 慢点(v1.7.3 挂档):O(n²) 已证伪,同输入四次 4.1/54.5/68.8/70.7s(≈17×),成因未定、零代码改动。
  2. 按 uuid 移除消息的快路径 64KB 窗口丢尾:既有债务,触发窄(目标行不在末尾且其后存量 >64KB);修法方向已定(needle 不在窗口末尾时回退慢路径,慢路径已有大小上限保护)——本版未实施。
  3. normalizeProjectPath 不展开 8.3 短路径:同一目录两种字符串形态对不上(CI 根因的产品侧对偶)。
  4. 系统代理桥随 app 异常退出留下「死代理 env」:窗口期内连累一切走代理的请求;用户明确指示后期再议。
  5. server-full 残余 20 条 = runner 环境型已知家族:真失败 0,按挂账口径解读(真回归会以「红文件清单变化」形式显现)。