Repository navigation
feat(macos): AI 设置资源库、Agent 上下文长度与压缩阈值、对话多标签与性能、ACP 适配器升级 - #1490
Conversation
Lithe Review结论: ⛔ 有阻塞 Findings
Scope Check
Suggestions
Summary合并前需修复 Finding 1。其余三项为非阻塞建议。原生配置复用和缓存边界较清晰,但新增标签状态与连接生命周期、辅助调用与统计口径之间缺少完整链路覆盖。 Verification
|
Bind editor tabs to Agent/session pairs and clean discarded prepared sessions while retaining drafts. Count all observed requests separately from conversation steps, preserve auxiliary-only usage, and retain legacy statistics compatibility. Make attachment URI tests platform-aware, align CLI version fixtures, and add deterministic regressions, owning notes, and feature matrix updates.
|
@lithe review |
Lithe Review结论: Findings
Scope Check
Suggestions
Summary未发现需要阻塞合并的问题。原生配置复用和转录缓存边界较清晰;新增表单存在恢复默认值后旧草稿回写的问题,建议修复。完整 macOS 测试失败的归因及界面验收仍有缺口。 Verification
|
设置 - 设置 › AI 下新增可折叠的“资源库”,收纳指令、技能、Hooks、MCP 配置;面包屑为 AI › 资源库 › 页面,搜索和跳转自动展开。 - 设置页内容区随窗口宽度伸缩,去掉各页 900/860/760 的宽度上限,调大窗口不再留右侧空白。 - Agent 对话详情栏与上下文面板的说明文字收进 ⓘ。 Agent 上下文 - 设置 › Agents 新增“上下文”卡片:上下文长度、自动压缩阈值(支持 200K / 1M / 200000,留空沿用 Agent 默认值,占位值为 Agent 自己上报的大小)。 - Codex 写入 model_context_window / model_auto_compact_token_limit;Claude Code 只有一个压缩窗口开关,阈值(否则上下文长度)作为 CLAUDE_CODE_AUTO_COMPACT_WINDOW 传入。 - 圆环分母按配置封顶(Claude 回合内会在配置值和模型值之间来回上报),阈值与圆环不同时在弹窗多一行“自动压缩阈值”。 ACP 适配器与观测 - codex-acp 1.13.1 → 2.2.2,claude-agent-acp 0.81.2 → 0.95.0,配套 CLI 最低版本随依赖提高。 - Codex 2.x 把 401 当作“需要登录”且不再发失败更新,中继在信封保留原始类别并对适配器改成通用类别,宿主仍按永久错误立即取消。 - Claude 订阅经本机透传代理观测(ANTHROPIC_BASE_URL,请求原样转发,不读取令牌),Claude Code 起标题请求标记为 auxiliary,只计 Token 不计步数(Windows 同步)。 - 附件路径含百分号编码时额外带一行 📎 真实路径,避免模型读 %20 失败;斜杠命令不追加。 Agent 对话 - 编辑区对话改为每个对话一个标签(EditorTabItem.agentConversation(UUID)),新对话在新标签打开,当前标签为空时复用。 - 点开/收起思考过程不再重算整条对话(展开状态移入引用存储),已完成轮次的分组与导航索引缓存,每次刷新只重算当前一轮。 文档与矩阵 - 更新 Agent Note、设置归属 Note、rust-core-api 契约、功能矩阵(新增 agent-context-limits)。
Bind editor tabs to Agent/session pairs and clean discarded prepared sessions while retaining drafts. Count all observed requests separately from conversation steps, preserve auxiliary-only usage, and retain legacy statistics compatibility. Make attachment URI tests platform-aware, align CLI version fixtures, and add deterministic regressions, owning notes, and feature matrix updates.
Invalidate context-limit drafts on external changes and Restore Defaults, including empty overrides with unsaved input. Guard blur and page-exit commits against stale snapshots and cover the native lifecycle. Deny camera and microphone requests in Agent visualization pages through the existing shared delegate and register the entry in media coverage tests. Document discover-edit-confirm-save-readback settings behavior, secret protection, and the scope of native configuration writes; keep feature evidence current.
- Claude 订阅在用户配置了自定义 ANTHROPIC_BASE_URL 时不再改走本地统计代理 - 斜杠命令只识别单个 /word,绝对路径开头的消息不再跳过附件路径行;含控制字符的路径不追加 - Rust 端把自动压缩阈值限制在上下文长度以内 - 会话命名请求只检查 system 的第一个块,不再序列化整个 system - 上下文长度输入拒绝十六进制和指数写法 - 只设压缩阈值时仍刷新 Agent 默认上下文长度 - 修正被新代码拆开的两处文档注释
325a9b8 to
d83482c
Compare
- 聚焦标签已绑定可复用的空会话时直接返回,避免解绑后又被 reconcile 绑回 - 启动环境缺少 PATH 时以 /usr/bin:/bin 为基础追加已解析目录,env 类 shebang 启动器可用 - PATH 去重改为区分大小写,不再丢弃区分大小写卷上的不同目录
String(localized:) 按系统语言选语言包,locale 参数只影响格式,应用语言为英文而系统为中文时会漏出中文。 改为 AppLanguage.localizedString/localizedFormat,Text 字面量则交给环境 locale。 - 设置窗口和软件更新窗口标题 - 工作台背景图占位文字(设置页与工作台两处) - 终端默认 Shell 的“系统默认 · …” - 终端回滚行数的“N 行” - AI 供应商用途文字、设置搜索词、欢迎窗口标题
概述
一个 PR 里收口 Agent 相关的设置布局、ACP 适配器升级、Claude 订阅观测、对话多标签与性能,以及新的上下文长度 / 自动压缩阈值配置。下面按改动点列出,评审可以逐项对照。
改动点
设置界面
SettingsSubgroup声明,页面仍归 AI 分组所有(categories保持平铺,新增entries决定侧栏行)。面包屑AI › 资源库 › 页面,搜索和跳转自动展开。maxWidth: 900/860/760,调大设置窗口不再在右侧留白。Agent 上下文长度与自动压缩阈值(新)
200K/1M/200000,范围 10K–10M,留空沿用 Agent 默认值;占位值是 Agent 自己上报的大小;已连接时提示“重新连接后生效”。model_context_window/model_auto_compact_token_limit(Codex 自己取窗口 95% 上报)。Claude Code 只有一个官方开关,阈值(否则上下文长度)作为CLAUDE_CODE_AUTO_COMPACT_WINDOW传入。AgentConfiguration(它多处整体重建会丢字段),单独存agentContextLimits。ACP 适配器与观测
codex-acp1.13.1 → 2.2.2,claude-agent-acp0.81.2 → 0.95.0,配套 CLI 最低版本 Codex 0.160.1 / Claude Code 2.1.309;夹具和测试数据同步。Retry-After重试。codex-config-relay.cjs对 401 把传给适配器的类别改成通用类别(原始类别仍在信封里),恢复 1.x 的立即取消。ANTHROPIC_BASE_URL指向本机回环代理,请求原样转发到api.anthropic.com,Lithe 不读取、保存令牌,计费仍走订阅。modelCall新增auxiliary,只计 Token,不计步数 / 首字延迟 / 速度(macOS 与 Windows)。file:///…%20…发给适配器,模型会按%20去读文件而失败;路径含编码时额外带一行📎 /真实路径(界面本来就识别并隐藏),以/开头的原生命令不追加。Agent 对话
EditorTabItem.agentConversation(UUID),每个对话一个标签;+新开标签(当前标签为空时复用);历史选择已打开的会话只聚焦;关闭最后一个回到工具窗口;⌘W 只关当前对话标签;分屏时非当前对话的窗格显示“显示对话”。AgentTranscriptDerivation),流式输出每个字块从约 32ms 降到约 2.7ms(2400 条消息,Debug)。卡顿来自 CPU 上的视图重算,不是渲染,所以没有用drawingGroup。验证
lithe-agent-host单元测试 253 个通过;本地 HTTP 端到端:Codex 2.2.2 16/16(两次),Claude 0.95.0 17/18(旧版同环境基线同为 17/18,invalid_request在旧版就失败)。CLAUDE_CODE_AUTO_COMPACT_WINDOW与 Codexmodel_context_window的上报大小随配置变化。bun test src/features/agent(205)、tsc、i18n、Agent Note、服务边界、共享契约、功能矩阵、运行时包只读检查通过。未验证 / 已知限制(请评审注意)
⌘W关闭 Agent 标签的路径),请 CI 完整跑过后重点看这批。pending。本轮审查修复与设置交互准则(2026-10-25)
提交:
325a9b8cfdb7b173116f45650f991ab993345aa4。本轮从最新 preview 建修复分支并合入原 PR head;保留 preview 已合并的 #1492,统一推送,不 force-push。修复点
WebMediaCaptureDenier.shared,明确拒绝摄像头与麦克风,不再依赖 WebKit 缺省提示或当前构建没有用途说明。登记源码覆盖检查,并用实际创建的 WKWebView 验证拒绝委托已安装;不访问真实设备,不修改隐私授权。~/.m2/settings.xml等作为来源发现示例。验证
fullSignedDiskImageStagesWithoutChangingInstalledApp。这些本地结果不能仅因旧 head 的 CI 通过就归为无关,本轮未修改这些路径,仍待当前 head CI / 目标系统复核。276558afc的完整 CI:Swift 3112 tests 中仅 WebMedia 入口登记一项失败(现已修复并本地通过);Rust Core、Windows Rust、Windows frontend、arm64 打包通过。新 head CI 需重新完成,旧结果不冒充新 head 结果。git diff --check、测试稳定性、Agent Notes(154)、服务边界、runtime bundle 只读、共享契约、Skill 校验、功能矩阵(208)。提交后分别针对 PR 返回 base、最新 preview、上一 PR head 执行 matrix change gate,均通过。pending;未对用户真实 Maven/Agent 配置做读写。测试命令:
完整套件使用相同环境与超时参数,不传
--filter;仅延长构建无输出观察窗口,未放宽单测试 15s 预算。本地报告:
.artifacts/test-stability/context-settings-and-widget.html、.artifacts/test-stability/pr-1490-final-swift.html、汇总.artifacts/test-stability/index.html(位于隔离工作树.worktrees/pr-1490-review,未提交生成物)。评审修复与 #1418(追加)
分支已重建为直接建在最新
preview上的线性历史,移除了经 merge 带入的 #1492;文件内容与重建前一致。评审修复:
ANTHROPIC_BASE_URL时,不再改走本地统计代理,避免绕过用户网关。/word”才视为原生斜杠命令;/Users/...开头的消息不再被误判。含控制字符的解码路径不再追加到提示。0x10k、2e5等)。PATH时以/usr/bin:/bin为基础追加已解析目录;去重改为区分大小写。对应测试预期同步更新。AgentLaunchConfiguration、onAccountObserved)。Fixes #1418:英文界面下设置页仍显示中文。
String(localized:)按系统语言取词,locale:只影响格式,改为AppLanguage.localizedString/localizedFormat(词条本来就在shared/i18n中,无需新增):验证:
lithe-agent-host单测 254 通过;Swift 的AppLocalization、RunLaunchEnvironmentTests、AgentContext*共 37 通过;scripts/test-i18n.mjs通过。未启动应用做“系统中文 + 应用英文”的界面复核。