Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
09bae99
feat(agent): add native global and project skill management
Mucheen Oct 20, 2026
3ac400d
fix(macos): make skill toggles respond immediately
Mucheen Oct 21, 2026
8c14b8c
Merge preview into agent skills management
Mucheen Oct 21, 2026
3968fea
Merge latest preview into agent settings PR
Mucheen Oct 21, 2026
9bc811a
feat(agent): 新增原生全局指令并稳定技能开关反馈
Mucheen Oct 21, 2026
4a67fc5
Merge preview into agent settings PR
Mucheen Oct 22, 2026
6088be9
fix(agent): 技能保存仅锁定当前行,避免其他开关变灰
Mucheen Oct 22, 2026
0a9dcb7
feat(agent): integrate MCP discovery settings with the existing agent PR
Mucheen Oct 22, 2026
d414e56
feat(agent): add shared instruction cards and native synchronization
Mucheen Oct 22, 2026
fbc2255
Merge original agent settings PR into latest preview
Mucheen Oct 22, 2026
617f7a1
feat(mcp): add bundled publisher icons and common featured servers
Mucheen Oct 22, 2026
b42b911
Merge branch 'codex/agent-skills-management' into codex/mcp-tools-ui
Mucheen Oct 22, 2026
59f53d6
feat(mcp): 增加工具检测与原生工具开关
Mucheen Oct 22, 2026
a7281b5
Merge latest preview into agent settings PR
Mucheen Oct 23, 2026
5a16cbd
fix(agent): preserve cancellation and native MCP tool filters
Mucheen Oct 23, 2026
73de434
Merge branch 'preview' into codex/agent-skills-management
Mucheen Oct 23, 2026
b05fdfc
fix(skills): publish Windows skill packages without replacement
Mucheen Oct 23, 2026
89e0fef
fix(ci): bound multi-repository tests and join search fixture teardown
Mucheen Oct 23, 2026
3c42838
test(windows): await owned process exit signals and clean fixtures
Mucheen Oct 23, 2026
d19444d
fix(agent): close cancellation and MCP policy lifecycle gaps
Mucheen Oct 23, 2026
b64dee4
Merge branch 'preview' into codex/agent-skills-management
Mucheen Oct 23, 2026
7717c9a
test(ci): bound Windows frontend path roundtrip startup
Mucheen Oct 23, 2026
54540c1
fix(ci): match raw path test names for scoped deadlines
Mucheen Oct 23, 2026
20a28aa
test(ci): scope checkout and clone integration timing allowance
Mucheen Oct 23, 2026
0879baa
Merge branch 'preview' into codex/agent-skills-management
Mucheen Oct 23, 2026
13c8d23
fix(ci): allow Agent Host cold compilation within Rust suite budget
Mucheen Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,12 @@ JDT 通道曾触发其 15 秒测试期限,同一提交在 SharedRust 通道用
所有测试的时限来隐藏这类问题。计时工具用可控时钟验证普通、集成和总截止
时间,并验证 HTML 与 JUnit 不会把合法的集成耗时误判为失败。

checkout/clone 完整流程用例 `git_write_executes_checkout_preflight_clone_and_validation`
在 Windows CI 39935852248 中全部断言通过,Rust 内部计时 15.22 秒、测试进程计时
18.529 秒,超过默认十五秒后触发清缓存重编,继而耗尽原套件期限。该用例创建分叉
分支,覆盖干净、脏和未跟踪文件预检、智能/强制切换以及本地 clone,因此只为它在
SharedRust 和真实 JDT 两个入口设置三十秒预算;不延长请求或整套期限,不重试失败断言。

取消模块的确定性回归核对 mutation 后正常读取保留原截止时间和取消能力,
已取消或超时请求的独立读取仍受清理期限约束,错误和异常退出后恢复原状态。
真实仓库 rebase 回归核对 edit、conflict、continue、skip、abort 和过期 amendment;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ MacServiceContainer
错误,不能把残留资源伪装成成功禁用。上述任务仍在主执行器上使用异步等待,
不阻塞线程、不新增插件代码加载能力。

使用真实 AppModel 的测试也必须遵守项目打开的清理顺序。`openProjectDirectly` 会启动
模块图关闭;项目文件快照已经发布不代表关闭完成。Safe Mode 测试要手动注入能力时,
先通过有截止的 `WorkbenchTestScope.run` 等待 `awaitModuleRuntimeShutdown()`,再放入
测试能力。否则迟到的 shutdown 事件可能移除刚注入的能力,让前几次搜索通过、随后
查询全部为空。不要用睡眠或反复重新注入能力掩盖这个顺序;搜索排除回归与插件页面
生命周期测试都使用同一个明确的完成边界。

### 数据库视图在模块释放后的刷新

退出应用或休眠数据库模块时,SwiftUI(macOS 的声明式界面框架)可能先刷新
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ macOS 的审批模式、模型和思考强度在等待、推理、输出、工

- **思考(`agent_thought_chunk`)**:存为独立的 `thought` 角色消息,不并进 Agent 回复。流式缓冲按角色记录,角色切换先刷新上一段,所以“思考 → 回复 → 工具 → 思考”保持原顺序。只有正在流式输出的最后一段思考默认展开,后续回复或工具到达后自动收起,用户手动展开的状态保留;搜索时临时展开匹配的思考,优先于已有的手动折叠选择;搜索期间不允许再次收起命中文字,清空搜索后恢复手动选择,不把搜索结果写回折叠偏好。手动偏好由 `AgentTranscriptView` 在视图局部内存中按会话 ID 与消息 ID 保存,再以绑定传给思考行;搜索先过滤消息,会移除并重建行,因此不能让行内状态成为偏好的所有者。切换会话保留各自选择,关闭会话或移除实际消息时释放对应偏好,销毁对话视图时一并释放;不写入功能模型、共享 Host、历史文件或安装目录,不影响代码签名和 Sparkle delta。`AgentThoughtTranscriptTests` 直接挂载实际对话容器,通过原生鼠标事件和完整渲染快照覆盖搜索移除/重建、命中时临时展开和会话切换。导出 Markdown 用引用块写出思考,便于和回复区分;历史消息数仍只统计用户与 Agent 回复。活跃思考块的标题显示“思考中…”,底部等待行改为“回复中…”并保留本轮计时,避免重复提示;取消时仍显示“正在停止…”。
- **计划(`plan`)**:ACP 规定每次都发完整计划,所以整体替换,不做合并;空列表清除计划,格式错误的更新忽略,最多保留 100 条。计划条状态只认 `pending`、`in_progress`、`completed`,未知状态的条目丢弃而不是猜测。点击底部“任务”打开计划与进度;没有计划时显示“暂无任务”,不把工具调用充当计划。`session/load` 回放会自然恢复计划。
- **斜杠命令(`available_commands_update`)**:按会话保存上游列表,最多读取前 200 条;同名命令只保留首条定义,保证命令行身份唯一。断连时清空每个会话的旧命令,重连加载后等待新进程重新上报,避免显示已经失效的能力。输入框以 `/` 开头且命令名中还没有空白时弹出过滤结果,前缀匹配排在包含匹配之前;选择后只把 `/name ` 填入草稿,命令文本仍作为普通 prompt 原样发送,由 Agent 自己解释。实测 codex-acp 1.13.1 把 Skill 以 `$name` 形式放进同一个命令列表,而它的命令解析会跳过 `/$name`,Skill 需要以 `$name` 提及。因此名字以 `$` 开头的命令补全为 `$name `;输入 `$` 只列 Skill,Agent 没有上报 Skill 时 `$` 仍是普通文字。Lithe 不扫描 SKILL.md 或命令目录,也不内置命令表,避免和 Agent 的真实能力不一致。方向键和 Tab 导航依赖 macOS 14 的 `onKeyPress`;macOS 13 保留鼠标选择和 Return 补全。Return、Esc、方向键与 Tab 共用视图局部的补全状态,Return 在命令名未完整时只补全、完整时发送;Esc 先关闭补全,再次 Esc 才停止回复,编辑草稿后重新显示匹配。补全高度由输入区内部的局部布局容器按剩余空间限制,先保留默认两行可编辑文字;最小输入区放不下一整行命令时,列表浮在输入框上方,通过锚点偏好在整个对话布局中绘制,让鼠标点击范围不被较小的输入面板限制;沿用工作台悬停提示的局部 overlay 模式,不新增全局位置状态或鼠标监听。输入区的最小高度包含上下栏、可编辑行和外边距,附带文件时再预留附件行;这个值只在附件有无改变时通过视图偏好更新,不跟随拖动逐帧发布。不要让固定高度的命令列表参与分隔条的最小尺寸计算,也不要把逐帧几何尺寸发布到会话模型。
- **斜杠命令(`available_commands_update`)**:按会话保存上游列表,最多读取前 200 条;同名命令只保留首条定义,保证命令行身份唯一。断连时清空每个会话的旧命令,重连加载后等待新进程重新上报,避免显示已经失效的能力。输入框以 `/` 开头且命令名中还没有空白时弹出过滤结果,前缀匹配排在包含匹配之前;选择后只把 `/name ` 填入草稿,命令文本仍作为普通 prompt 原样发送,由 Agent 自己解释。实测 codex-acp 1.13.1 把 Skill 以 `$name` 形式放进同一个命令列表,而它的命令解析会跳过 `/$name`,Skill 需要以 `$name` 提及。因此名字以 `$` 开头的命令补全为 `$name `;输入 `$` 只列 Skill,Agent 没有上报 Skill 时 `$` 仍是普通文字。对话补全不扫描 SKILL.md 或命令目录,也不内置命令表,避免和 Agent 的真实能力不一致。独立技能设置页可以展示原生发现结果或明确标注的目录清单,但不得据此伪造会话补全和启用状态;管理边界见 [技能管理](../feature/2026-10-20-agent-skill-management.md)。方向键和 Tab 导航依赖 macOS 14 的 `onKeyPress`;macOS 13 保留鼠标选择和 Return 补全。Return、Esc、方向键与 Tab 共用视图局部的补全状态,Return 在命令名未完整时只补全、完整时发送;Esc 先关闭补全,再次 Esc 才停止回复,编辑草稿后重新显示匹配。补全高度由输入区内部的局部布局容器按剩余空间限制,先保留默认两行可编辑文字;最小输入区放不下一整行命令时,列表浮在输入框上方,通过锚点偏好在整个对话布局中绘制,让鼠标点击范围不被较小的输入面板限制;沿用工作台悬停提示的局部 overlay 模式,不新增全局位置状态或鼠标监听。输入区的最小高度包含上下栏、可编辑行和外边距,附带文件时再预留附件行;这个值只在附件有无改变时通过视图偏好更新,不跟随拖动逐帧发布。不要让固定高度的命令列表参与分隔条的最小尺寸计算,也不要把逐帧几何尺寸发布到会话模型。
- **模式通知(`current_mode_update`)**:Agent 自己切换模式(例如退出计划模式)时,只更新 `category == "mode"` 且包含该值的配置选项,不向上游回发设置请求;选项中不存在的模式 ID 忽略,不显示原始 ID。
- **即时通知(`notice`)**:共享 Host 启用固定 SDK 的 `unstable_session_notices` 能力,并声明 `clientCapabilities.session.notices: {}`,让适配器通过独立事件发送警告。macOS 每个会话只保存最新一条通知,用现有 `LitheBanner` 展示和关闭;通知不计入回复、历史导出或轮次统计,下一条 prompt 成功提交及断连时清除。上游通知字段限制为标题 256 字符、详情 4096 字符,未知严重程度和空标题忽略。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Issue #627 中,前端先判断绝对路径再替换反斜杠,把原生 UNC

- `shared/fixtures/git/windows-paths.json` 由前端与 Rust 测试共同读取。
- `git_path_roundtrip` 原生集成测试使用真实 Git 仓库,把发现结果交给实际前端 TypeScript 规范化函数后回传 Core,核对提交、分支、stash 和链接工作树的监听目录。它需要 Git 和 Node.js 22.6+,子进程通过现有 Git Host 设置本地期限并清理进程树。
- Windows CI 39933419913 的超长路径用例在 Node 子进程十秒截止时返回 `Cancelled`,没有产生路径结果不匹配。测试仅将 Windows 的真实 Node/TypeScript 加载期限改为二十秒,Git 夹具命令仍为十秒、Core 请求仍为五秒;SharedRust 与真实 JDT 两个入口为 `git_paths_roundtrip_` 设置单例六十秒上限,容纳多次进程交换,不调整其他测试或总套件期限。超时仍走原生进程树清理,并在失败诊断保留进程状态与 stderr;不能通过重试断言、复制前端逻辑或跳过长路径用例来绕开验证。
- 长路径用例先在短路径建立真实仓库,再移入超长目录。Windows CI 已观察到文件系统可访问但创建 Git 进程的工作目录被 `ERROR_DIRECTORY` 拒绝;用例仅接受成功读到原提交,或带原生错误 267 的 `process_start_failed`,不能返回空仓库或访问其他目录。
- Windows 专属测试真实创建末尾点/空格目录及普通同名目录,确认请求明确拒绝,不误用普通目录。
- 原生 watcher 测试用有界事件接收验证外部提交/切换所写的共享引用与独立 HEAD 元数据会通知对应工作树;没有用 sleep 等待防抖。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ Windows 原来有五个漏洞,叠在一起导致“关闭 Lithe 后服务还
- `./scripts/test-macos.sh --filter '(MacProcessRunnerTests|ExecutionModule)'`。
- `rust/lithe-git-host/tests/process.rs`:`process_tree_terminate_ends_the_root_and_its_descendants` 启动一个会再启动后代的进程,确认 `terminate` 返回时两者都已结束;Windows 上 `dropping_a_process_tree_ends_it_like_a_crashed_host` 只丢弃句柄,确认内核结束整组。
- `windows/tauri/src-tauri/src/run.rs` 测试(仅 Windows):关闭一个窗口只结束它自己的进程树、丢弃会话等同 Lithe 崩溃、原生列表按启动顺序包含全部会话。
- Windows CI 39919376382 在关闭窗口和丢弃会话两例中,根进程已退出,但立即读取的 `sysinfo` 快照仍包含后代 PID。测试改为停止前打开后代的只等待句柄,停止后分别在两秒内等待根进程和后代的退出信号;另一窗口的后代用零等待确认仍在运行。依据 [Windows 进程终止语义](https://learn.microsoft.com/en-us/windows/win32/procthread/terminating-a-process),退出进程的对象可以因尚未关闭的句柄而继续存在,进程退出信号才是结束依据。保留原来的窗口隔离、重复关闭和崩溃清理断言,不改产品停止流程。夹具的首字节就绪信号有两秒期限,失败路径和断言展开时也按所属会话清理进程树、等待退出并释放管道和句柄;不依赖任意睡眠或 PID 重查。
- `rust/lithe-core/src/lsp/interface/process.rs` 测试(仅 Windows):结束批处理启动的语言服务器时,脚本启动的子进程一起结束。
- `shared/fixtures/process-lifecycle/exit-plan-v1.json`、`settle-v1.json`:运行服务在退出、关闭项目、直接停止设置和崩溃恢复下的动作;macOS `ProcessLifecycleFixtureTests` 用 Swift 类型解码同一批 fixture,并覆盖提问顺序、取消和规则失败时仍询问。
- `windows/tauri/src/features/window/services/run-services-exit.test.ts`:询问、取消、停止失败后重试、直接停止、后台任务不询问、Core 不可用时询问。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ Git 的多个仓库没有跨仓库原子事务,已成功的提交不会因后
- `rust/lithe-core/src/git/workspace_commit/tests.rs` 覆盖干净祖先联动、关闭联动、独立嵌套仓库、过期计划、失败依赖阻塞、仅重推和外部推进后再次推送。
- `rust/lithe-core/src/tests/git_workspace_commit.rs` 使用真实 Git 验证过期索引拒绝、子模块状态、只更新引用且不带入父文件、首次提交前取消暂存保留后续编辑,暂存后在工作树删除的文件仍可见、子仓库元数据被删除后拒绝回退父仓库,以及共享夹具序列化。真实 Git 还验证共享计划执行、推送失败后的重试、过期步骤重放拒绝、取消与成功提交返回竞争。
- 使用 `write-stable-tests` 的 Rust 逐例计时入口生成 HTML/JUnit;macOS 使用该 Skill 的 macOS 计时入口。
- Windows CI 39914734587 中,逐仓库推送确认用例在未出现断言失败时达到 15.233 秒进程截止;该用例创建两份分叉仓库及远端,执行三轮准备校验和独立提交/推送。SharedRust 与真实 JDT 两个入口只给这一用例 30 秒预算,默认用例和整套截止不变,真实 Git 进程仍按原有界规则清理,不跳过确认或推送断言。
- 运行共享契约、服务边界、功能矩阵、发行包只读边界和 Agent Notes 检查。
- 当前实现环境是 Linux;本地执行共享 Core 和 Windows 前端测试,原生构建及测试交给对应 CI,macOS/Windows 界面实测仍需平台验收,不将逻辑测试通过记作界面已验证。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ macOS 设置侧栏现在只有七个一级入口:外观与行为、插件、
| 构建、执行、部署 | 构建工具、项目 JDK、运行配置、服务运行,以及框架和构建工具注入的配置 |
| 语言与框架 | 语言服务(LSP)的开关,以及 Spring Boot 等框架的配置 |
| 工具 | 终端、日志与诊断(查看、目录、清理和诊断包导出)等通用工具;插件带来的专用工具(例如 `.http` 请求)可以放进对应工具页 |
| AI | 凡是和 AI 有关的都放这里:MCP、Skill、AI 提交信息、Agents、AI 服务商 |
| AI | 凡是和 AI 有关的都放这里:MCP、Skill、全局指令、AI 提交信息、Agents、AI 服务商 |

插件如果带来了新的设置,默认放进“插件”页;只有它新增的是上表中某个分组本来就该有的能力(例如新的版本控制系统)时,才放进那个分组。

Expand Down
Loading
Loading