From 1d0aa04d1e078e80f1deb97f3dd2b74a5c48a422 Mon Sep 17 00:00:00 2001 From: Mucheen <1528136628@qq.com> Date: Thu, 1 Oct 2026 12:27:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent):=20=E7=BB=9F=E4=B8=80=E6=9D=83?= =?UTF-8?q?=E9=99=90=E8=8F=9C=E5=8D=95=E4=B8=8E=E8=8B=B1=E6=96=87=E6=80=9D?= =?UTF-8?q?=E8=80=83=E5=BC=BA=E5=BA=A6=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...026-09-25-shared-acp-agent-conversation.md | 2 + docs/development/platform-parity-matrix.csv | 2 + docs/development/platform-parity-matrix.md | 10 ++-- macos/Resources/en.lproj/Localizable.strings | 9 ++++ .../zh-Hans.lproj/Localizable.strings | 9 ++++ .../Views/Agent/AgentSessionSelectors.swift | 10 ++-- shared/platform-feature-matrix.json | 46 +++++++++++++++++++ 7 files changed, 80 insertions(+), 8 deletions(-) diff --git a/.agents/notes/implemented/architecture/2026-09-25-shared-acp-agent-conversation.md b/.agents/notes/implemented/architecture/2026-09-25-shared-acp-agent-conversation.md index 19dd4d4dc..f413428ed 100644 --- a/.agents/notes/implemented/architecture/2026-09-25-shared-acp-agent-conversation.md +++ b/.agents/notes/implemented/architecture/2026-09-25-shared-acp-agent-conversation.md @@ -17,6 +17,8 @@ Agent 对话默认关闭,打开某个项目的 Agent 面板时才启动本机 ## 决策 +- **思考强度名称**:强度选项使用上游英文名称,例如 Low、Medium、High、Xhigh、Max、Ultra,不经过通用本地化。子菜单、设置行当前值和模型底栏复用同一个呈现入口,避免同一强度在不同位置显示中英文混合。菜单标题“思考强度”和其他配置仍按界面语言显示;不改上游选项 ID、可选范围或确认流程,也不手工补齐当前 Agent 未提供的强度。 +- **权限模式呈现**:Claude 与 Codex 共享“请求批准、替我审批、完全访问”的中文名称和图标,Claude 继续显示上游提供的自动编辑、计划等选项。依据 [Claude 权限模式说明](https://code.claude.com/docs/en/permissions),每行说明保留实际 Agent 的审批与环境约束,不把 Codex 的沙箱说明直接套到 Claude。只本地化上游名称和说明、补充对应图标,不修改选项 ID、数量、顺序或权限命令;上游确认继续决定当前值。未知选项保留其原文和默认图标,不按列表位置猜测权限,也不把 Claude 的五项折叠成三项。这只改变原生 UI,不新增状态、资源或运行时写入。 - **侧栏入口图标**:Agent 使用 Lithe 原创的“对话气泡 + 星光”线性 SVG,由工作台 renderer 显式绑定,避免落入通用模块图标而让用户误认成插件管理。图标作为固定源资源随应用打包,复用现有模板着色与选中态;不下载、不生成运行时文件,不影响安装包的只读边界。面板内 Codex/Claude 标志仍表示具体供应商。 - **安装包图标解析**:Agent 品牌图标从应用的 `Contents/Resources/Lithe_Lithe.bundle` 只读加载;资源包或图标缺失时使用默认标志。不要在已安装的 `.app` 中直接调用 SwiftPM(Swift 包管理器)生成的 `Bundle.module`:它只查应用旁的资源包和编译目录,找不到会直接终止进程,开发机器残留的构建资源还会掩盖问题。开发和测试入口保留 SwiftPM 回退;安装版不使用编译目录,也不通过启动时复制资源来修补发行包,避免改变代码签名和 Sparkle 增量更新基线。 diff --git a/docs/development/platform-parity-matrix.csv b/docs/development/platform-parity-matrix.csv index e208969af..2eb0ee798 100644 --- a/docs/development/platform-parity-matrix.csv +++ b/docs/development/platform-parity-matrix.csv @@ -7,6 +7,8 @@ agent-entry-discoverability,AI,Agent 对话,新安装及模块关闭时仍显示 agent-conversation-history,AI,Agent 对话,CC GUI 风格历史页:标题与会话 ID 搜索、更新时间、复制 ID、刷新与恢复、收藏与本地重命名、单条与批量移除确认及恢复、筛选、多选批量管理及 Markdown 导出,已实现,待验证,未实现,不适用,Agent,macOS:在深浅主题与窄宽面板查看历史页,验证标题/ID 搜索、空结果、返回保留草稿、刷新失败不丢列表、打开历史恢复会话;验证收藏/重命名重启后保留且不同项目/Agent 隔离;筛选和全选只操作可见项,单条与批量移除先确认,取消不修改记录,确认只移除提示时选中的会话,移除后可恢复且不改上游文件;单个与批量 Markdown 导出等待历史回放完成、保持原选中标签,取消/失败不写部分记录;部分回放后失败再导出必须重新加载并等待完成,断连后的未完整回放不可导出,完整快照断连后仍可导出;关闭项目释放导出等待。消息数量只显示已加载的用户与 Agent 消息,未知总数不伪造。Windows 页面待实现。,,macos/Sources/Lithe/Views/Agent/AgentHistoryView.swift; macos/Sources/LitheAgentConversationModule/Application/AgentHistoryFeatureModel.swift; macos/Sources/Lithe/Platform/MacOS/Agent/MacAgentHistoryAdapters.swift; macos/Tests/LitheTests/AgentHistoryTests.swift,rust/lithe-agent-host/src/lib.rs agent-context-usage,AI,Agent 对话,Agent 上下文用量:输入框圆环百分比、悬停已用/容量 token,未使用时零占位、会话隔离与压缩后更新,已实现,待验证,部分实现,待验证,Agent,macOS:真实 Agent 对话后检查输入框顶部圆环百分比;分别悬停圆环与百分比,立即在上方显示已用/容量 token,移开或切换面板后关闭浮层,窄面板浮层不越界;首次、Agent 未上报或已上报零使用量时显示 0%,悬停仅显示“上下文: 0.0%”,内部缺失状态不伪造 token 或容量;切换会话/Agent、新建会话不串用量,压缩后用量可降低,不累加计费用量;模型确认切换和断连后清除旧容量,重新加载或上报后更新;窄宽面板及深浅主题检查布局和辅助功能。Windows 共享 host 可转发 usage_update,页面待实现。,,macos/Sources/LitheAgentConversationModule/Application/AgentContextUsage.swift; macos/Sources/Lithe/Views/Agent/AgentContextUsageView.swift; macos/Tests/LitheTests/AgentConversationFeatureModelTests.swift; macos/Tests/LitheTests/AgentConversationPresentationTests.swift,rust/lithe-agent-host/src/lib.rs; shared/fixtures/agent/acp-events-v1.json agent-acp-conversation,AI,Agent 对话,可选 ACP Agent 对话:API Key 网关登录、项目会话与历史恢复、模型/权限/思考配置、不依赖凭据的本机默认模型同步、旧默认模型按上游推荐修复与品牌模型图标、CC GUI 风格可搜索模型与权限弹出面板、工具详情与权限、停止确认和进程清理,已实现,待验证,部分实现,待验证,Agent,macOS + Codex + API Key:验证发消息前的上游配置选项和确认;无自定义服务商或 API Key 时确认仍显示本机顶层默认模型、保留密钥缺失错误;修改本机默认模型后重连,连续新建空会话确认不再使用旧导入模型;配置不在上游目录中的旧模型时确认新会话使用目录内的上游推荐值、拒绝与超时不显示假成功且 Codex 模型菜单显示 OpenAI 标志;验证工具输入/输出/文件/变更、权限拒绝、停止确认及超时重连、历史加载失败保留记录;临时项目跑通读文件→修改→执行测试→追问,复用文档观察和脏缓冲区保存保护。检查模型搜索(名称/ID/分组、空结果)、品牌图标/选中状态、无模型说明、权限说明、思考/速度子菜单、确认/失败与会话切换关闭弹出面板;检查项目切换、退出清理,以及 CC GUI 风格空态、搜索、标签、可调整输入区和配置菜单在窄宽面板及深浅主题下的布局。Windows 与 Claude 端到端仍待验证。 安装包环境下打开 Agent 面板,确认 Codex/Claude 图标从 Contents/Resources 加载且不依赖构建目录;资源包或图标缺失时显示默认图标而不闪退,读取前后包内文件清单和内容不变。,,macos/Sources/LitheAgentConversationModule; macos/Sources/Lithe/Views/Agent; rust/lithe-agent-host; macos/Tests/LitheTests/AgentBrandIconResourceTests.swift,rust/lithe-agent-host +agent-thinking-level-labels,AI,Agent 对话,Agent 思考强度英文呈现:Claude/Codex 子菜单、设置行当前值和模型底栏统一使用上游英文名称,已实现,已验证,未实现,待验证,Agent,2026-10-01 macOS:最新 preview 独立 PR 分支 83 项 Agent 回归通过;含 PR #1007 前置修复的组合构建 87 项回归及真实界面验收通过;中文真实界面确认 Codex 的 Low、Medium、High、Xhigh、Max、Ultra 和 Claude 的 Low、Medium、High、Max 均显示英文。两边分别切换 Low,确认子菜单、设置行当前值和模型底栏同步英文,并恢复 Claude Medium、Codex Xhigh;权限、速度和思考强度标题仍显示中文。不改原始选项 ID、顺序和确认行为,运行前后 bundle 全部 990 个文件 SHA-256 一致。Windows 对话 UI 仍待实现。,,macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift,shared/contracts/application-boundary.md +agent-approval-mode-presentation,AI,Agent 对话,Agent 权限模式呈现:Claude/Codex 统一中文名称、说明样式和图标,保留各 Agent 实际支持的选项及权限语义,已实现,已验证,未实现,待验证,Agent,2026-10-01 macOS:最新 preview 独立 PR 分支 83 项 Agent 回归通过;含 PR #1007 前置修复的组合构建 87 项回归及真实界面验收通过,中文真实界面确认 Claude 的请求批准、自动编辑、计划、替我审批、完全访问五项名称、说明和图标,顺序及当前勾选正确;Codex 三项公共名称和图标一致、说明保留自身语义。验收仅展开菜单和切换 Agent,未改变权限模式;回归覆盖原始选项 ID、上游确认与失败状态,代码保留未知选项原文和默认图标。切换后恢复原 Codex 会话,运行前后 bundle 全部 990 个文件 SHA-256 一致。Windows 对话 UI 仍待实现和实机验证。,,macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift; macos/Resources/en.lproj/Localizable.strings; macos/Resources/zh-Hans.lproj/Localizable.strings,shared/contracts/application-boundary.md agent-tool-activity-timeline,AI,Agent 对话,连续 Agent 工具调用(执行命令、列文件、读文件与编辑等)合并为默认折叠的时间线卡片,汇总总数与失败/中断/完成进度,并逐条展开输入、输出与文件位置,已实现,待验证,未实现,不适用,Agent,macOS:让真实 Agent 连续列文件、读取文件、执行命令和编辑,确认相邻工具调用只显示一张默认折叠的时间线卡片;展开后每条状态、完整输入、输出和文件位置仍可查看,进行中、全部完成、失败和中断时汇总正确。用 Agent 文字说明和新一轮用户消息隔开工具调用,确认保留文字顺序且不会跨边界合并;搜索工具输入、输出或文件路径时自动展开匹配组;覆盖文件路径仅由 diff 内容上报、未出现在工具标题、输入输出或 locations 中的情况,历史恢复结果与实时流一致。在窄宽面板及深浅主题检查长标题截断、悬停全文、列表滚动和详情可读性。Windows Agent 对话 UI 尚未实现。,,macos/Sources/Lithe/Views/Agent/AgentTranscriptView.swift; macos/Sources/Lithe/Views/Agent/AgentToolGroupView.swift; macos/Tests/LitheTests/AgentConversationPresentationTests.swift,windows/tauri/src/features agent-turn-statistics,AI,Agent 对话,发送后实时计时、每轮结束固定耗时、Agent 上报的输入/输出 token 与缓存/推理用量详情,已实现,待验证,部分实现,待验证,Agent,macOS:在真实 Agent 会话中确认发送后计时包含建会话、加载历史、工具和权限等待;正常完成、取消确认、请求失败和断连后停止计时,下一轮仍可看到上一轮统计。并发会话切换验证耗时与用量隔离;上报 usage 时显示准确输入/输出并悬停查看总量、缓存和推理值,缺失时只显示耗时。历史回放不编造统计,上下文占用与订阅额度不作为输入/输出 token。检查深浅主题和窄宽面板。Windows 共享 Host 已透传可选 usage,对话 UI 尚未接入。,,macos/Sources/Lithe/Views/Agent/AgentTurnStatisticsView.swift; macos/Sources/Lithe/Views/Agent/AgentTranscriptView.swift; macos/Sources/LitheAgentConversationModule/Application/AgentTurnStatistics.swift; macos/Sources/LitheAgentConversationModule/Application/AgentConnectionModel.swift; macos/Tests/LitheTests/AgentConversationFeatureModelTests.swift; macos/Tests/LitheTests/AgentConversationPresentationTests.swift,rust/lithe-agent-host/src/prompt.rs; rust/lithe-agent-host/src/tests.rs; shared/fixtures/agent/acp-events-v1.json agent-file-references,AI,Agent 对话,从 Finder 或项目树拖入文件到 Agent 输入框,文件选择器、可移除标签、多文件去重和数量限制、文件引用随消息发送及失败保留草稿,已实现,待验证,部分实现,待验证,Agent,macOS:从 Finder、项目树拖入临时文件(多文件、中文/空格名)到输入区与上下文栏,检查高亮和可移除标签、去重、数量限制、会话切换和发送失败保留草稿;用隔离项目验证文字+文件与纯文件发送、历史加载后引用正确送到原会话、Agent 读取与权限流程。图片按文件引用处理,无多模态上传。Windows 原生拖放和 Claude 端到端待验证。,,macos/Sources/Lithe/Views/Agent/AgentComposerView.swift; macos/Sources/Lithe/Views/Agent/AgentFileReferenceList.swift; macos/Sources/LitheAgentConversationModule/Application/AgentFileReference.swift; macos/Tests/LitheTests/AgentFileReferenceTests.swift; macos/Tests/LitheTests/AgentConversationFeatureModelTests.swift; rust/lithe-agent-host/src/tests.rs,rust/lithe-agent-host/src/prompt.rs; shared/fixtures/agent/acp-events-v1.json diff --git a/docs/development/platform-parity-matrix.md b/docs/development/platform-parity-matrix.md index 80d8ef0d0..0d69795be 100644 --- a/docs/development/platform-parity-matrix.md +++ b/docs/development/platform-parity-matrix.md @@ -4,9 +4,9 @@ - 最后复核:2026-09-29 - 盘点状态:initial-static-inventory(根据 macOS Views/Application/Services、Windows features/extensions 和共享契约的代码入口进行初版盘点;未替代真实运行验收。) -- 功能项:115 -- macOS:实现:✅ 101 已实现,🟡 3 部分实现,❌ 7 未实现,🧩 4 平台专属;验证:✔️ 0 已验证,🔍 104 待验证,— 11 不适用 -- Windows:实现:✅ 98 已实现,🟡 11 部分实现,❌ 5 未实现,🧩 1 平台专属;验证:✔️ 0 已验证,🔍 109 待验证,— 6 不适用 +- 功能项:117 +- macOS:实现:✅ 103 已实现,🟡 3 部分实现,❌ 7 未实现,🧩 4 平台专属;验证:✔️ 2 已验证,🔍 104 待验证,— 11 不适用 +- Windows:实现:✅ 98 已实现,🟡 11 部分实现,❌ 7 未实现,🧩 1 平台专属;验证:✔️ 0 已验证,🔍 111 待验证,— 6 不适用 ## 实现状态定义 @@ -30,7 +30,7 @@ > 每一行对应一个可以单独验收的用户能力;区域和功能组只用于导航,不作为状态统计单位。单元格第一行是实现状态,第二行是验证状态。
-AI · 19 个能力点 +AI · 21 个能力点 | 功能组 | 能力点 | macOS | Windows | 负责人 | 验证方式 | 备注 | | --- | --- | --- | --- | --- | --- | --- | @@ -42,6 +42,8 @@ | Agent 对话 | **CC GUI 风格历史页:标题与会话 ID 搜索、更新时间、复制 ID、刷新与恢复、收藏与本地重命名、单条与批量移除确认及恢复、筛选、多选批量管理及 Markdown 导出**
agent-conversation-history | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Agent/AgentHistoryView.swift`、`macos/Sources/LitheAgentConversationModule/Application/AgentHistoryFeatureModel.swift`、`macos/Sources/Lithe/Platform/MacOS/Agent/MacAgentHistoryAdapters.swift`、`macos/Tests/LitheTests/AgentHistoryTests.swift` | ❌ 未实现
— 不适用
`rust/lithe-agent-host/src/lib.rs` | Agent | macOS:在深浅主题与窄宽面板查看历史页,验证标题/ID 搜索、空结果、返回保留草稿、刷新失败不丢列表、打开历史恢复会话;验证收藏/重命名重启后保留且不同项目/Agent 隔离;筛选和全选只操作可见项,单条与批量移除先确认,取消不修改记录,确认只移除提示时选中的会话,移除后可恢复且不改上游文件;单个与批量 Markdown 导出等待历史回放完成、保持原选中标签,取消/失败不写部分记录;部分回放后失败再导出必须重新加载并等待完成,断连后的未完整回放不可导出,完整快照断连后仍可导出;关闭项目释放导出等待。消息数量只显示已加载的用户与 Agent 消息,未知总数不伪造。Windows 页面待实现。 | | | Agent 对话 | **Agent 上下文用量:输入框圆环百分比、悬停已用/容量 token,未使用时零占位、会话隔离与压缩后更新**
agent-context-usage | ✅ 已实现
🔍 待验证
`macos/Sources/LitheAgentConversationModule/Application/AgentContextUsage.swift`、`macos/Sources/Lithe/Views/Agent/AgentContextUsageView.swift`、`macos/Tests/LitheTests/AgentConversationFeatureModelTests.swift`、`macos/Tests/LitheTests/AgentConversationPresentationTests.swift` | 🟡 部分实现
🔍 待验证
`rust/lithe-agent-host/src/lib.rs`、`shared/fixtures/agent/acp-events-v1.json` | Agent | macOS:真实 Agent 对话后检查输入框顶部圆环百分比;分别悬停圆环与百分比,立即在上方显示已用/容量 token,移开或切换面板后关闭浮层,窄面板浮层不越界;首次、Agent 未上报或已上报零使用量时显示 0%,悬停仅显示“上下文: 0.0%”,内部缺失状态不伪造 token 或容量;切换会话/Agent、新建会话不串用量,压缩后用量可降低,不累加计费用量;模型确认切换和断连后清除旧容量,重新加载或上报后更新;窄宽面板及深浅主题检查布局和辅助功能。Windows 共享 host 可转发 usage_update,页面待实现。 | | | Agent 对话 | **可选 ACP Agent 对话:API Key 网关登录、项目会话与历史恢复、模型/权限/思考配置、不依赖凭据的本机默认模型同步、旧默认模型按上游推荐修复与品牌模型图标、CC GUI 风格可搜索模型与权限弹出面板、工具详情与权限、停止确认和进程清理**
agent-acp-conversation | ✅ 已实现
🔍 待验证
`macos/Sources/LitheAgentConversationModule`、`macos/Sources/Lithe/Views/Agent`、`rust/lithe-agent-host`、`macos/Tests/LitheTests/AgentBrandIconResourceTests.swift` | 🟡 部分实现
🔍 待验证
`rust/lithe-agent-host` | Agent | macOS + Codex + API Key:验证发消息前的上游配置选项和确认;无自定义服务商或 API Key 时确认仍显示本机顶层默认模型、保留密钥缺失错误;修改本机默认模型后重连,连续新建空会话确认不再使用旧导入模型;配置不在上游目录中的旧模型时确认新会话使用目录内的上游推荐值、拒绝与超时不显示假成功且 Codex 模型菜单显示 OpenAI 标志;验证工具输入/输出/文件/变更、权限拒绝、停止确认及超时重连、历史加载失败保留记录;临时项目跑通读文件→修改→执行测试→追问,复用文档观察和脏缓冲区保存保护。检查模型搜索(名称/ID/分组、空结果)、品牌图标/选中状态、无模型说明、权限说明、思考/速度子菜单、确认/失败与会话切换关闭弹出面板;检查项目切换、退出清理,以及 CC GUI 风格空态、搜索、标签、可调整输入区和配置菜单在窄宽面板及深浅主题下的布局。Windows 与 Claude 端到端仍待验证。 安装包环境下打开 Agent 面板,确认 Codex/Claude 图标从 Contents/Resources 加载且不依赖构建目录;资源包或图标缺失时显示默认图标而不闪退,读取前后包内文件清单和内容不变。 | | +| Agent 对话 | **Agent 思考强度英文呈现:Claude/Codex 子菜单、设置行当前值和模型底栏统一使用上游英文名称**
agent-thinking-level-labels | ✅ 已实现
✔️ 已验证
`macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift` | ❌ 未实现
🔍 待验证
`shared/contracts/application-boundary.md` | Agent | 2026-10-01 macOS:最新 preview 独立 PR 分支 83 项 Agent 回归通过;含 PR #1007 前置修复的组合构建 87 项回归及真实界面验收通过;中文真实界面确认 Codex 的 Low、Medium、High、Xhigh、Max、Ultra 和 Claude 的 Low、Medium、High、Max 均显示英文。两边分别切换 Low,确认子菜单、设置行当前值和模型底栏同步英文,并恢复 Claude Medium、Codex Xhigh;权限、速度和思考强度标题仍显示中文。不改原始选项 ID、顺序和确认行为,运行前后 bundle 全部 990 个文件 SHA-256 一致。Windows 对话 UI 仍待实现。 | | +| Agent 对话 | **Agent 权限模式呈现:Claude/Codex 统一中文名称、说明样式和图标,保留各 Agent 实际支持的选项及权限语义**
agent-approval-mode-presentation | ✅ 已实现
✔️ 已验证
`macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift`、`macos/Resources/en.lproj/Localizable.strings`、`macos/Resources/zh-Hans.lproj/Localizable.strings` | ❌ 未实现
🔍 待验证
`shared/contracts/application-boundary.md` | Agent | 2026-10-01 macOS:最新 preview 独立 PR 分支 83 项 Agent 回归通过;含 PR #1007 前置修复的组合构建 87 项回归及真实界面验收通过,中文真实界面确认 Claude 的请求批准、自动编辑、计划、替我审批、完全访问五项名称、说明和图标,顺序及当前勾选正确;Codex 三项公共名称和图标一致、说明保留自身语义。验收仅展开菜单和切换 Agent,未改变权限模式;回归覆盖原始选项 ID、上游确认与失败状态,代码保留未知选项原文和默认图标。切换后恢复原 Codex 会话,运行前后 bundle 全部 990 个文件 SHA-256 一致。Windows 对话 UI 仍待实现和实机验证。 | | | Agent 对话 | **连续 Agent 工具调用(执行命令、列文件、读文件与编辑等)合并为默认折叠的时间线卡片,汇总总数与失败/中断/完成进度,并逐条展开输入、输出与文件位置**
agent-tool-activity-timeline | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Agent/AgentTranscriptView.swift`、`macos/Sources/Lithe/Views/Agent/AgentToolGroupView.swift`、`macos/Tests/LitheTests/AgentConversationPresentationTests.swift` | ❌ 未实现
— 不适用
`windows/tauri/src/features` | Agent | macOS:让真实 Agent 连续列文件、读取文件、执行命令和编辑,确认相邻工具调用只显示一张默认折叠的时间线卡片;展开后每条状态、完整输入、输出和文件位置仍可查看,进行中、全部完成、失败和中断时汇总正确。用 Agent 文字说明和新一轮用户消息隔开工具调用,确认保留文字顺序且不会跨边界合并;搜索工具输入、输出或文件路径时自动展开匹配组;覆盖文件路径仅由 diff 内容上报、未出现在工具标题、输入输出或 locations 中的情况,历史恢复结果与实时流一致。在窄宽面板及深浅主题检查长标题截断、悬停全文、列表滚动和详情可读性。Windows Agent 对话 UI 尚未实现。 | | | Agent 对话 | **发送后实时计时、每轮结束固定耗时、Agent 上报的输入/输出 token 与缓存/推理用量详情**
agent-turn-statistics | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Agent/AgentTurnStatisticsView.swift`、`macos/Sources/Lithe/Views/Agent/AgentTranscriptView.swift`、`macos/Sources/LitheAgentConversationModule/Application/AgentTurnStatistics.swift`、`macos/Sources/LitheAgentConversationModule/Application/AgentConnectionModel.swift`、`macos/Tests/LitheTests/AgentConversationFeatureModelTests.swift`、`macos/Tests/LitheTests/AgentConversationPresentationTests.swift` | 🟡 部分实现
🔍 待验证
`rust/lithe-agent-host/src/prompt.rs`、`rust/lithe-agent-host/src/tests.rs`、`shared/fixtures/agent/acp-events-v1.json` | Agent | macOS:在真实 Agent 会话中确认发送后计时包含建会话、加载历史、工具和权限等待;正常完成、取消确认、请求失败和断连后停止计时,下一轮仍可看到上一轮统计。并发会话切换验证耗时与用量隔离;上报 usage 时显示准确输入/输出并悬停查看总量、缓存和推理值,缺失时只显示耗时。历史回放不编造统计,上下文占用与订阅额度不作为输入/输出 token。检查深浅主题和窄宽面板。Windows 共享 Host 已透传可选 usage,对话 UI 尚未接入。 | | | Agent 对话 | **从 Finder 或项目树拖入文件到 Agent 输入框,文件选择器、可移除标签、多文件去重和数量限制、文件引用随消息发送及失败保留草稿**
agent-file-references | ✅ 已实现
🔍 待验证
`macos/Sources/Lithe/Views/Agent/AgentComposerView.swift`、`macos/Sources/Lithe/Views/Agent/AgentFileReferenceList.swift`、`macos/Sources/LitheAgentConversationModule/Application/AgentFileReference.swift`、`macos/Tests/LitheTests/AgentFileReferenceTests.swift`、`macos/Tests/LitheTests/AgentConversationFeatureModelTests.swift`、`rust/lithe-agent-host/src/tests.rs` | 🟡 部分实现
🔍 待验证
`rust/lithe-agent-host/src/prompt.rs`、`shared/fixtures/agent/acp-events-v1.json` | Agent | macOS:从 Finder、项目树拖入临时文件(多文件、中文/空格名)到输入区与上下文栏,检查高亮和可移除标签、去重、数量限制、会话切换和发送失败保留草稿;用隔离项目验证文字+文件与纯文件发送、历史加载后引用正确送到原会话、Agent 读取与权限流程。图片按文件引用处理,无多模态上传。Windows 原生拖放和 Claude 端到端待验证。 | | diff --git a/macos/Resources/en.lproj/Localizable.strings b/macos/Resources/en.lproj/Localizable.strings index 355fc7a60..8776bbc3b 100644 --- a/macos/Resources/en.lproj/Localizable.strings +++ b/macos/Resources/en.lproj/Localizable.strings @@ -1160,6 +1160,15 @@ "Ask for approval" = "Ask for approval"; "Approve for me" = "Approve for me"; "Full access" = "Full access"; +"Manual" = "Ask for approval"; +"Accept edits" = "Auto edit"; +"Auto" = "Approve for me"; +"Bypass permissions" = "Full access"; +"Always ask before making changes" = "Ask before making changes or running actions that require approval."; +"Automatically accept all file edits" = "Automatically approve file edits; other actions follow permission rules."; +"Create a plan before making changes" = "Read and plan without modifying files."; +"Claude handles permission decisions" = "Claude evaluates and approves actions automatically."; +"Accepts all permissions" = "Skip routine approval prompts; environment and managed policies still apply."; "Always ask to edit external files and use the internet" = "Always ask to edit external files and use the internet"; "Only ask for actions detected as potentially unsafe" = "Only ask for actions detected as potentially unsafe"; "Unrestricted access to the internet and any file on your computer" = "Unrestricted access to the internet and any file on your computer"; diff --git a/macos/Resources/zh-Hans.lproj/Localizable.strings b/macos/Resources/zh-Hans.lproj/Localizable.strings index 2e8b7b013..b1bc9df67 100644 --- a/macos/Resources/zh-Hans.lproj/Localizable.strings +++ b/macos/Resources/zh-Hans.lproj/Localizable.strings @@ -2399,6 +2399,15 @@ "Ask for approval" = "请求批准"; "Approve for me" = "替我审批"; "Full access" = "完全访问"; +"Manual" = "请求批准"; +"Accept edits" = "自动编辑"; +"Auto" = "替我审批"; +"Bypass permissions" = "完全访问"; +"Always ask before making changes" = "修改文件或执行需要权限的操作前请求你的批准。"; +"Automatically accept all file edits" = "自动批准文件编辑,其他操作仍按权限规则处理。"; +"Create a plan before making changes" = "阅读和分析后制定计划,不修改文件。"; +"Claude handles permission decisions" = "由 Claude 自动评估并审批操作。"; +"Accepts all permissions" = "跳过常规权限审批,仍受环境和管理策略限制。"; "Always ask to edit external files and use the internet" = "修改工作区外文件或访问网络时先请求批准。"; "Only ask for actions detected as potentially unsafe" = "自动审批,仅在检测到潜在风险时请求你的确认。"; "Unrestricted access to the internet and any file on your computer" = "允许访问网络和电脑上的所有文件。"; diff --git a/macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift b/macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift index e26f085db..d273d1a79 100644 --- a/macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift +++ b/macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift @@ -22,7 +22,7 @@ enum AgentSessionSelectorPresentation { if choice.id == "off" { return String(localized: "Standard") } if choice.id == "on" { return String(localized: "Fast") } } - return option.category == "model" ? choice.name : localized(choice.name) + return option.category == "model" || option.category == "thought_level" ? choice.name : localized(choice.name) } static func currentTitle(_ option: AgentSessionConfigOption) -> String { @@ -31,9 +31,11 @@ enum AgentSessionSelectorPresentation { static func modeIcon(_ id: String) -> String { switch id { - case "read-only": "bubble.left.and.bubble.right" - case "agent": "checkmark.shield" - case "agent-full-access": "bolt" + case "read-only", "default", "manual": "bubble.left.and.bubble.right" + case "agent", "auto": "checkmark.shield" + case "agent-full-access", "bypassPermissions": "bolt" + case "acceptEdits": "pencil" + case "plan": "list.bullet.rectangle" default: "slider.horizontal.3" } } diff --git a/shared/platform-feature-matrix.json b/shared/platform-feature-matrix.json index 3cd1e2042..a440a38fc 100644 --- a/shared/platform-feature-matrix.json +++ b/shared/platform-feature-matrix.json @@ -266,6 +266,52 @@ "owner": "Agent", "verification": "macOS + Codex + API Key:验证发消息前的上游配置选项和确认;无自定义服务商或 API Key 时确认仍显示本机顶层默认模型、保留密钥缺失错误;修改本机默认模型后重连,连续新建空会话确认不再使用旧导入模型;配置不在上游目录中的旧模型时确认新会话使用目录内的上游推荐值、拒绝与超时不显示假成功且 Codex 模型菜单显示 OpenAI 标志;验证工具输入/输出/文件/变更、权限拒绝、停止确认及超时重连、历史加载失败保留记录;临时项目跑通读文件→修改→执行测试→追问,复用文档观察和脏缓冲区保存保护。检查模型搜索(名称/ID/分组、空结果)、品牌图标/选中状态、无模型说明、权限说明、思考/速度子菜单、确认/失败与会话切换关闭弹出面板;检查项目切换、退出清理,以及 CC GUI 风格空态、搜索、标签、可调整输入区和配置菜单在窄宽面板及深浅主题下的布局。Windows 与 Claude 端到端仍待验证。 安装包环境下打开 Agent 面板,确认 Codex/Claude 图标从 Contents/Resources 加载且不依赖构建目录;资源包或图标缺失时显示默认图标而不闪退,读取前后包内文件清单和内容不变。" }, + { + "id": "agent-thinking-level-labels", + "area": "AI", + "group": "Agent 对话", + "capability": "Agent 思考强度英文呈现:Claude/Codex 子菜单、设置行当前值和模型底栏统一使用上游英文名称", + "macos": { + "implementationStatus": "implemented", + "verificationStatus": "verified", + "evidence": [ + "macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift" + ] + }, + "windows": { + "implementationStatus": "missing", + "verificationStatus": "pending", + "evidence": [ + "shared/contracts/application-boundary.md" + ] + }, + "owner": "Agent", + "verification": "2026-10-01 macOS:最新 preview 独立 PR 分支 83 项 Agent 回归通过;含 PR #1007 前置修复的组合构建 87 项回归及真实界面验收通过;中文真实界面确认 Codex 的 Low、Medium、High、Xhigh、Max、Ultra 和 Claude 的 Low、Medium、High、Max 均显示英文。两边分别切换 Low,确认子菜单、设置行当前值和模型底栏同步英文,并恢复 Claude Medium、Codex Xhigh;权限、速度和思考强度标题仍显示中文。不改原始选项 ID、顺序和确认行为,运行前后 bundle 全部 990 个文件 SHA-256 一致。Windows 对话 UI 仍待实现。" + }, + { + "id": "agent-approval-mode-presentation", + "area": "AI", + "group": "Agent 对话", + "capability": "Agent 权限模式呈现:Claude/Codex 统一中文名称、说明样式和图标,保留各 Agent 实际支持的选项及权限语义", + "macos": { + "implementationStatus": "implemented", + "verificationStatus": "verified", + "evidence": [ + "macos/Sources/Lithe/Views/Agent/AgentSessionSelectors.swift", + "macos/Resources/en.lproj/Localizable.strings", + "macos/Resources/zh-Hans.lproj/Localizable.strings" + ] + }, + "windows": { + "implementationStatus": "missing", + "verificationStatus": "pending", + "evidence": [ + "shared/contracts/application-boundary.md" + ] + }, + "owner": "Agent", + "verification": "2026-10-01 macOS:最新 preview 独立 PR 分支 83 项 Agent 回归通过;含 PR #1007 前置修复的组合构建 87 项回归及真实界面验收通过,中文真实界面确认 Claude 的请求批准、自动编辑、计划、替我审批、完全访问五项名称、说明和图标,顺序及当前勾选正确;Codex 三项公共名称和图标一致、说明保留自身语义。验收仅展开菜单和切换 Agent,未改变权限模式;回归覆盖原始选项 ID、上游确认与失败状态,代码保留未知选项原文和默认图标。切换后恢复原 Codex 会话,运行前后 bundle 全部 990 个文件 SHA-256 一致。Windows 对话 UI 仍待实现和实机验证。" + }, { "id": "agent-tool-activity-timeline", "area": "AI",