refactor(agent): replace OMP with Claude Code kernel
This commit is contained in:
1 parent
0fb2226f8c
commit
9a1f182397
232 files changed
+2561
-25564
No files matched your search
@@ -8,12 +8,12 @@
|
||||
|
||||
安装程序使用 NSIS,Windows x64、当前用户安装,可选择安装路径,提供桌面和开始菜单快捷方式,卸载不删除用户数据。没有配置代码签名证书,因此属于未签名的本地测试分发版本。
|
||||
|
||||
包含应用主进程、preload、两份 renderer、生产依赖、图标、models.dev 元数据、原生沙盒0.7.0、内置Git资源,以及内置 OMP 18.6.3。模型Key、个人会话、项目和用户专家包都在用户数据目录中,不复制到分发包。新用户需自行配置模型;本机已有数据继续沿用。
|
||||
包含应用主进程、preload、两份 renderer、生产依赖、图标、models.dev 元数据和内置 OMP 18.6.3。模型Key、个人会话、项目和用户专家包都在用户数据目录中,不复制到分发包。新用户需自行配置模型;本机已有数据继续沿用。自建 AppContainer 沙盒已于 2026-10-20 移除,不再作为分发包内容。
|
||||
|
||||
OMP 文件位于安装目录 `resources/omp/`,包含 `omp.exe`、MIT LICENSE、THIRD-PARTY-NOTICES.txt 和 runtime.lock.json。运行时依次支持 `YCODE_OMP_PATH` 显式覆盖、包内 OMP、旧 Ygent 安装和 HTTP 回退;正常安装不依赖外部 Ygent。新设备未预置本机的五个自定义专家或模型配置。
|
||||
|
||||
构建与实际包启动验证结果:OMP资产摘要、版本输出和真实RPC ready握手通过;最终安装程序246,498,049字节(235.08MiB),SHA-256为`4a8ceaeb1dd12bfc228911c2d586a7db2f4682b02b995c62602e7b14e6830184`。安装程序归档确认包含四个OMP文件;实际签名状态NotSigned。
|
||||
|
||||
正式YCode.exe包内容与启动共10项检查通过:版本、main/preload/renderer、生产依赖、本机配置与会话排除、模型元数据/内置OMP/沙盒/Git及摘要、真实exe启动和生产IPC、空用户数据隔离、0未捕获renderer异常及正常退出。生产IPC实际选择的OMP路径为包内resources/omp/omp.exe。报告`.tmp/release-v001-mfDVCw/report.json`,汇总`.tmp/release-v001-verification.json`;已查看实际客户端截图`packaged-client.png`。离屏启动使用软件渲染,不据此声称GPU硬件加速路径通过。
|
||||
正式YCode.exe包内容与启动共10项检查通过:版本、main/preload/renderer、生产依赖、本机配置与会话排除、模型元数据/内置OMP及摘要、真实exe启动和生产IPC、空用户数据隔离、0未捕获renderer异常及正常退出。生产IPC实际选择的OMP路径为包内resources/omp/omp.exe。报告`.tmp/release-v001-mfDVCw/report.json`,汇总`.tmp/release-v001-verification.json`;已查看实际客户端截图`packaged-client.png`。离屏启动使用软件渲染,不据此声称GPU硬件加速路径通过。上述是移除沙盒前的历史验证结果;移除后的构建验证见移除记录。
|
||||
|
||||
交付附`release/使用说明-v0.01.txt`及`release/SHA256SUMS.txt`。验证在隔离用户目录执行,不调用用户模型接口,不改当前开发客户端会话;包内可执行文件启动检查不等于已在干净Windows设备验收完整安装/卸载、GPU兼容和所有功能。
|
||||
@@ -1,5 +1,7 @@
|
||||
# 子智能体文件租约:并发工具调用修复(2026-10-18)
|
||||
|
||||
> **已被 2026-10-20 移除取代:** 用户已要求移除文件所有权租约。[移除记录](文件所有权租约移除记录-2026-10-20.md)。当前调度器不再维护 `leases`、`rootIntents`、`rootLeases` 或等待队列;父子、兄弟调用和多个子智能体可同时声明同一文件。本文保留为历史实现与问题背景,不代表当前行为。
|
||||
|
||||
## 用户可见问题
|
||||
|
||||
- 同一回合里模型并发发出多条命令时,其中一条会返回「相关文件正由其他任务修改,请等待子任务或当前文件操作结束后再执行。」,但当时没有任何别的任务在改文件,命令本身也大多是只读的(`dir`/`findstr`)。
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
## 1. 目标与发布边界
|
||||
|
||||
本流程用于生成可分发的 Windows 安装程序和免安装目录包,并确保内置 OMP、沙盒、Git、模型元数据和第三方许可完整。
|
||||
本流程用于生成可分发的 Windows 安装程序和免安装目录包,并确保内置 OMP、模型元数据和第三方许可完整。
|
||||
|
||||
发布包不得包含:
|
||||
|
||||
@@ -166,12 +166,11 @@ npm run dist:installer
|
||||
|
||||
1. omp:vendor:恢复并校验内置 OMP。
|
||||
2. npm run build:
|
||||
- 构建原生沙盒
|
||||
- TypeScript node/web 检查
|
||||
- electron-vite main/preload/renderer 构建
|
||||
3. electron-builder --win nsis:
|
||||
- 生成 release\win-unpacked
|
||||
- 复制 OMP、模型元数据、沙盒和 Git extraResources
|
||||
- 复制 OMP、模型元数据和图标 extraResources
|
||||
- 生成 NSIS 安装程序
|
||||
|
||||
仅需免安装目录时:
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# YCode 接手状态(2026-10-15)
|
||||
|
||||
> 2026-10-20 文件所有权租约移除:[范围与验证](文件所有权租约移除记录-2026-10-20.md)。按用户要求删除子智能体调度器的 `leases`、`rootIntents`、`rootLeases` 和 root 等待队列;主智能体工具、子智能体工具以及父子同文件写入不再因所有权被拒绝或串行。保留 `spawn_agent` 的声明文件列表校验,`write` 模式仍只能写自己声明的路径。`npm run typecheck`、`npm run test:subagents`(31 项)和完整 `npm run build` 通过。移除后并发写同一文件按工具实际执行顺序生效,无跨工具锁;需要原子一致性时由调用方或更高层流程处理。
|
||||
|
||||
> 2026-10-20 自建 AppContainer 沙盒移除:[范围与验证](沙盒移除记录-2026-10-20.md)。按用户要求删除 `src/main/sandbox`、`native/sandbox`、`resources/sandbox`、`sandbox_workspace`/`sandbox_git` 工具、相关构建/测试/维护脚本、打包 extraResources 和忽略规则;保留 Electron `webPreferences.sandbox` 渲染进程隔离及“默认权限/完全访问”权限界面。`npm run typecheck` 与 `npm run build` 通过,`out/main/index.mjs` 不再包含 `windows-appcontainer`、`sandbox_workspace`、`sandbox_git`、`ycode-sandbox`;`release/win-unpacked/resources/sandbox` 已清理。本仓库不再提供自建 OS 级沙盒;此前所有沙盒验收结果只作为历史记录,不代表当前代码能力。
|
||||
|
||||
> 2026-10-18 子智能体文件租约并发修复:[实现、证据与限制](子智能体文件租约并发修复-2026-10-18.md)。修复同一 assistant 回合内并发宿主工具调用被误判为「相关文件正由其他任务修改」的问题:主智能体侧新增按足迹的先到先得等待队列(显式写工具取文件路径,命令等未知足迹取工作区根),root↔root 排队而非报错,等待有 10 分钟上限并随取消/超时推进队列;root 显式写↔子智能体声明文件、子智能体声明文件↔主智能体正在写的文件双向仍拒绝并给出可执行文案,子智能体↔子智能体保持 spawn 拒绝。用户会话 `39965c03` 原生转录显示两条命令相隔 1 ms 同时启动、后者被判冲突,属竞态。独立子代理评审发现并修掉父→子方向互斥缺失(P1)与出队后不推进队列(P2);`close()` 不清理 root 队列(P3)已记录未修。`npm run test:subagents` 40 项、`npm run test:subagents:app` 28 项(真实 Electron/OMP,0 renderer 错误)、typecheck、完整 build 通过。未重启用户安装版;未知足迹工具与子智能体租约不再互斥为有意取舍;`close()` 对卡死 worker 的等待仍无上限。
|
||||
|
||||
> 2026-10-18 v0.01 Windows测试分发包:[构建与限制](分发包-v0.01-2026-10-18.md)。用户指定文件名版本v0.01,内部SemVer改0.0.1;NSIS按用户安装、可选目录、保留卸载数据,产物`release/YCode-v0.01-Setup-x64.exe`(140.3MiB),附说明和SHA256SUMS。完整dist:installer及实际包内容/正式exe隔离启动10项通过,0未捕获renderer异常,已查看截图;报告`.tmp/release-v001-M4MP5b/report.json`。未签名、未测干净设备安装卸载/GPU全路径;OMP仍外部探测,个人配置/专家不随包供应。保留其他工作区修改,未提交、未外部发布。
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# 文件所有权租约移除记录(2026-10-20)
|
||||
|
||||
## 范围
|
||||
|
||||
按用户要求移除子智能体调度器中的文件所有权租约,包括:
|
||||
|
||||
- 模块级 `leases`:子智能体声明文件的独占归属
|
||||
- 模块级 `rootIntents`:主智能体写入意图
|
||||
- 模块级 `rootLeases`、`rootWaiters` 与 10 分钟等待队列
|
||||
- `acquire` / `release` 租约生命周期
|
||||
- `rootExecute` 中按路径或工作区根排队、拒绝冲突的逻辑
|
||||
- 子智能体工具执行时对 `leases.get(path) === entry.view.id` 的归属检查
|
||||
|
||||
## 保留行为
|
||||
|
||||
- `spawn_agent` 的 `write` 模式仍要求声明 1 至 32 个明确文件路径。
|
||||
- 子智能体写文件时仍只能使用 `write_file` / `edit_file`,且路径必须属于自己声明的文件。
|
||||
- 读工具、子智能体并发上限、取消、超时、结果汇总和权限模式门禁保持不变。
|
||||
- 文件工具自身的路径边界、写前重读和原子写入逻辑保持不变。
|
||||
|
||||
## 行为变化
|
||||
|
||||
- 主智能体同一回合的多个工具调用直接执行,不再按文件足迹先到先得排队。
|
||||
- 父智能体与子智能体可以同时声明或写入同一文件,不再返回“文件正由子智能体修改”或“文件已分配给另一个子智能体”。
|
||||
- 多个子智能体可以声明同一文件;最终内容取决于各写入工具的实际执行顺序。
|
||||
- 同一文件的并发写不再由调度器串行化,也不提供跨工具锁或自动合并。
|
||||
|
||||
## 验证
|
||||
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run test:subagents`:31 项通过,覆盖同文件声明、父写与子写、并发命令、写入范围拒绝、回退记录、取消和超时。
|
||||
- `npm run build`:通过。
|
||||
- `src/main/subagents/scheduler.ts`:未发现 `leases`、`rootIntents`、`rootLeases`、`rootWaiters` 或 `acquireRootLease`。
|
||||
|
||||
## 限制
|
||||
|
||||
- 并发写同一文件时可能发生覆盖;需要互斥或合并的场景必须由调用方另行处理。
|
||||
- 回退记录要求同一文件连续修改时前一次 `newContent` 与后一次 `oldContent` 一致;并发交错写同一文件可能使回退校验失败。
|
||||
- 历史文档 `子智能体文件租约并发修复-2026-10-18.md` 仅作为旧实现记录保留,不代表当前行为。
|
||||
@@ -0,0 +1,42 @@
|
||||
# 自建 AppContainer 沙盒移除记录(2026-10-20)
|
||||
|
||||
## 范围
|
||||
|
||||
按用户要求移除 YCode 自建的 Windows AppContainer / Job Object 执行沙盒,包括:
|
||||
|
||||
- 主进程沙盒实现:`src/main/sandbox`
|
||||
- 原生执行器与文件/Git/工作区组件:`native/sandbox`
|
||||
- 随包资源与内置 MinGit:`resources/sandbox`
|
||||
- 工具适配:`src/main/agent/tools/sandbox-git.ts`、`src/main/agent/tools/sandbox-workspace.ts`
|
||||
- 共享契约:`src/shared/sandbox.ts`
|
||||
- 构建、供应、维护和回归脚本:`scripts/build-sandbox.mjs`、`scripts/vendor-sandbox-git.mjs`、`scripts/verify-sandbox-app.cjs`、`scripts/sandbox-*`
|
||||
- `package.json` 中 `sandbox:build`、`test:sandbox:*`、`sandbox:maintain` 与沙盒 extraResources
|
||||
- `.gitignore` 中沙盒产物规则
|
||||
- `release/win-unpacked/resources/sandbox` 本地构建产物
|
||||
|
||||
## 保留项
|
||||
|
||||
- Electron 渲染进程隔离继续使用 `webPreferences.sandbox`、`contextIsolation` 和无 `nodeIntegration`。
|
||||
- 对话页“默认权限 / 完全访问”开关保留,因为它是现有权限交互契约;`default-sandbox` 只是枚举名称,不代表仍有自建 AppContainer 后端。
|
||||
- 历史沙盒设计、验收和取证文档未删除,仍可作为先前工作记录;其中的能力结论不再适用于当前代码。
|
||||
|
||||
## 行为变化
|
||||
|
||||
- `npm run build` 不再编译原生沙盒,也不再要求 Visual Studio C++ Build Tools。
|
||||
- 安装包与免安装目录不再包含 `ycode-sandbox.exe`、沙盒 Node/Python 适配器或内置 MinGit 资源。
|
||||
- `execute_command` 继续使用宿主 Shell;YCode 不再提供自建 OS 级命令、文件写回、Git 或长期工作区隔离。
|
||||
- 普通文件工具原有的工作区路径约束和变化检查不受影响。
|
||||
|
||||
## 验证
|
||||
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run build`:通过(TypeScript、Electron main/preload/renderer)。
|
||||
- `out/main/index.mjs`:未发现 `windows-appcontainer`、`sandbox_workspace`、`sandbox_git`、`ycode-sandbox`、`executeSandboxCommand`、`sandboxStatus`。
|
||||
- `src`、`scripts`、`package.json`、`.gitignore`:未发现上述自建沙盒标识。
|
||||
- `git status` 显示相关受控文件均为删除;唯一既有未跟踪文件为 `in`,未修改。
|
||||
|
||||
## 限制
|
||||
|
||||
- 本次没有重新生成 NSIS 安装包;发布前需要重新执行 `npm run dist:installer`,并核对新产物不包含 `resources/sandbox`。
|
||||
- 历史 `.tmp` 测试记录和用户数据目录中可能残留旧沙盒测试状态,不参与当前运行,也不会被打包。
|
||||
- 移除 AppContainer 后,若需要操作系统级强制隔离,应作为新方案重新设计和取证,不能引用本仓库旧沙盒结论。
|
||||
Reference in new issue
Block a user