GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build Linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build Linux x64 Agent (push) Canceled after 0s
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
Managed Python installation rejected valid case-distinct terminfo symlinks in the pinned Astral archives on Linux x64 and arm64. Archive uniqueness now follows the target filesystem: Linux preserves case-distinct paths, while every target still rejects exact duplicates and unsafe entries. Move the unpublished 0.12.0 bilingual release notes to the immutable-tag recovery version 0.12.1 and record the failed tag evidence. Release note: 修复 Linux x64/ARM64 上托管 Python 因官方归档包含大小写不同路径而无法安装的问题。
141 lines
9.0 KiB
Markdown
141 lines
9.0 KiB
Markdown
# 工具执行环境功能进度
|
||
|
||
## 文档信息
|
||
|
||
| 项目 | 内容 |
|
||
| --- | --- |
|
||
| 文档类型 | 功能进度 |
|
||
| 状态 | 已实施,发布候选 CI 验收中 |
|
||
| 版本 | 0.5 |
|
||
| 日期 | 2026-09-03 |
|
||
| 关联入口 | [工具执行环境](./README.md) |
|
||
|
||
## 当前结论
|
||
|
||
本机工具执行环境的生产链路已经进入源码。“能力与工具”现在显示 `Skills`、`MCP`、
|
||
`工具执行环境` 三个真实 Tab;Main 统一解析托管或自定义 Node/Python,并把不可变 PATH
|
||
快照应用到新启动的本机 Runtime 与 stdio MCP。Windows x64 已完成真实托管 Node 和原生
|
||
地址托管 Python 安装验证。
|
||
|
||
六个 OSS 镜像对象已发布并公开回读验证。托管 Python 继续按需下载,Desktop 发行包不额外
|
||
带入许可证文件。标准六平台打包任务已改用目标架构原生 Runner,并在打包前执行托管 Python
|
||
的真实安装、SSL、pip 和 venv 探针。不可变的 `v0.12.0` 尝试已通过 Windows 与 macOS,
|
||
但 Linux x64/ARM64 在发布前暴露 TAR 大小写冲突误判;修正后的 `0.12.1` 候选仍需通过
|
||
全部六个目标才能完成对应跨平台验收。
|
||
|
||
## 已完成
|
||
|
||
### 设置、迁移和界面
|
||
|
||
- [x] Shared 严格设置、候选、诊断、进度、IPC 和 Preload 契约。
|
||
- [x] Application Settings v10;全新用户默认托管环境和原生地址。
|
||
- [x] v1-v9 分别执行真实 Node/Python 3 探测的一次性迁移;无有效候选时选择托管环境。
|
||
- [x] 用户/系统 PATH、活动 venv/Conda、`CONDA_ENVS_PATH`、Conda/pyenv/nvm 和常见安装
|
||
位置,以及已保存自定义路径候选的规范化、去重、版本及架构诊断。
|
||
- [x] 自定义解释器保存前真实验证;无效新选择不持久化,已保存失效路径不回退。
|
||
- [x] “自定义环境”始终可进入;不隐式采用首个候选,取消文件选择不改设置,验证错误在
|
||
对应工具卡内显示。
|
||
- [x] “能力与工具”统一入口及三个水平 Tab,MCP 原内层页签保持不变。
|
||
- [x] 工具下载源、Node.js、Python、候选、诊断、安装进度、取消和删除界面。
|
||
- [x] 工具卡只展示真实工具诊断;未接入具体能力证据前不显示固定的能力依赖占位状态。
|
||
- [x] 使用 `PageTabs`、应用通知、就地操作错误、删除确认和具名进度条。
|
||
|
||
### 托管 Node 与进程注入
|
||
|
||
- [x] 使用 Electron-as-Node 提供 `node`,使用同一 Node 和打包 CLI 提供 `npm`、`npx`。
|
||
- [x] 自定义 Node 只使用同安装位置且验证成功的 npm/npx,不与托管 CLI 混用。
|
||
- [x] 每次配置生成不可变 shim 目录;已有进程继续持有原 PATH,新进程读取新快照。
|
||
- [x] OpenCode、Continue、DeepSeek Harness 和本机通用/精选 stdio MCP 接收工具 PATH。
|
||
- [x] 工具 PATH 不修改 `process.env`,不进入普通终端或远程 Host。
|
||
- [x] 解释器探针使用过滤后的环境,不接收模型凭据、GoodBuddy 或 Factory 内部变量。
|
||
|
||
### 托管 Python
|
||
|
||
- [x] 锁定 CPython 3.13.15 的 Windows/macOS/Linux x64/ARM64 六平台目录、大小和 SHA-256。
|
||
- [x] 用户选择的原生地址或 OSS 镜像在任务开始时冻结,同一次任务不回退。
|
||
- [x] HTTPS、重定向 Host、大小、SHA-256、取消和部分文件清理。
|
||
- [x] NuGet ZIP 与 Astral TAR 的 payload 限定、路径穿越防护、展开上限和安全链接处理。
|
||
- [x] 归档路径唯一性遵循目标文件系统;Linux 保留大小写不同的合法 TAR 条目,所有目标
|
||
仍拒绝完全重复路径,Windows/macOS 仍拒绝大小写冲突。
|
||
- [x] GoodBuddy-owned 暂存安装、发布、失败清理、更新保留和删除。
|
||
- [x] `python`、`python3`、`pip` 同源,`pip` 固定使用所选 Python 的 `-m pip`。
|
||
- [x] 发布前真实验证 Python 3.13.15、架构、标准库、SSL、pip,并创建和执行临时 venv。
|
||
- [x] 取消恢复原状态且不显示为安装失败;退出时取消并等待安装清理。
|
||
|
||
## 待完成验收
|
||
|
||
- [x] 发布六个平台/架构的字节完全相同 OSS 镜像对象并公开回读校验。
|
||
- [x] 确认托管 Python 保持按需下载,Desktop 发行包不额外带入许可证文件。
|
||
- [x] Windows ARM64、macOS x64/ARM64 原生 CI 安装、SSL、pip、venv 探针。
|
||
- [ ] Linux x64/ARM64 原生 CI 安装、SSL、pip、venv 探针;`v0.12.0` 因 TAR 大小写
|
||
冲突误判失败,等待 `0.12.1` 修正候选运行结果。
|
||
- [ ] 最低 Windows/macOS/glibc 支持矩阵和 Windows NuGet 签名核验。
|
||
- [ ] 真实 JavaScript/Python SKILL 成果及 Node/Python stdio MCP 调用。
|
||
- [ ] 自定义 Node/Python 在产品 UI 中的真实选择和任务执行。
|
||
- [ ] 更新或删除托管 Python 时,使用现有本机 Runtime/MCP 生命周期协调受影响进程。
|
||
|
||
## 当前阻塞项
|
||
|
||
- 当前机器只能原生验证 Windows x64。其余五个平台必须由对应原生 CI 执行,不能用本机
|
||
mock 代替。
|
||
|
||
## 已验证证据
|
||
|
||
### 2026-09-03 `v0.12.0` 失败标签恢复
|
||
|
||
- 不可变标签工作流 `33704483505` 的 Windows x64/ARM64 与 macOS x64/ARM64 托管 Python
|
||
安装、SSL、pip、venv 探针和打包成功;Linux x64/ARM64 在实际官方 Astral TAR 中发现
|
||
`share/terminfo/2/2621A` 与 `share/terminfo/2/2621a` 后被大小写无关去重误判为冲突。
|
||
- 最终 GitHub/OSS 发布任务跳过,GitHub 未创建 `v0.12.0` Release,Latest 仍为
|
||
`v0.11.14`;恢复版本按不可变标签规则提升为 `0.12.1`。
|
||
- 提取器改为按工件目标平台判断路径唯一性,并继续保留完全重复路径、路径穿越、安全链接
|
||
和展开上限校验。锁定的 Linux x64 上游工件重新下载后大小与 SHA-256 匹配目录,并确认
|
||
冲突项确为大小写不同的两个合法 symlink;临时审计工件已清理。
|
||
- Release Notes 校验通过;工具环境、工作流和 Release Notes 聚焦测试 `40/40` 通过,
|
||
live 安装项按本地发布规则未启用。最终 `npm test` 为 `3478` 通过、`51` 跳过,
|
||
typecheck 与 lint 通过;未运行本地 production build、package 或安装探针。
|
||
|
||
### 2026-09-02 完整实现
|
||
|
||
- 发布准备确认不把按需下载的托管 Python 许可证文件加入 Desktop `extraResources`、解包
|
||
校验或 Portable ZIP 必需文件,避免该额外资源改变现有编译和打包路径。
|
||
- 六平台打包矩阵在 `npm ci` 后先断言 Runner 架构,再执行
|
||
`GOODBUDDY_RUN_LIVE_TOOL_ENVIRONMENT=1` 的托管 Python 安装探针;Windows arm64 改用
|
||
`windows-11-vs2026-arm` 原生 Runner。发行资源与目录聚焦测试 `47/47` 通过。
|
||
|
||
- `npm run typecheck` 通过。
|
||
- `npm run lint` 通过。
|
||
- `npm run build` 通过,Main、Preload 和 Renderer 生产 bundle 成功。
|
||
- 工具环境聚焦测试通过:契约、设置迁移、解析/shim、服务、下载、解压、安装、IPC、
|
||
Preload、Runtime/MCP 注入、Renderer 和发行资源校验。
|
||
- Windows x64 真实托管 Node:Electron Node `24.18.0`、npm `11.19.0`、npx `11.19.0`。
|
||
- `GOODBUDDY_RUN_LIVE_TOOL_ENVIRONMENT=1` 真实下载官方 NuGet、校验摘要、解压、安装并
|
||
验证 CPython `3.13.15`、SSL、pip 和 venv,`1/1` 通过;临时安装已清理。
|
||
- 隔离 Electron 生产 bundle 自动化确认三个 Tab 均可见;“诊断全部”显示托管 Node
|
||
`24.18.0`、npm/npx `11.19.0`。隔离进程和用户数据已清理。
|
||
- 第一次全量测试发现 3 个确定性夹具/兼容失败,修复后聚焦复跑 `25/25` 通过。第二次暴露
|
||
2 个 `App.test.tsx` 设置导航时序问题,修正为按可访问名称点击并等待设置中心。
|
||
- 最终 `npm test` 通过:`3465` 通过、`51` 跳过;完整 `App.test.tsx` 为 `157/157` 通过。
|
||
- 使用本机受控 Aliyun 凭据将六个已验证上游工件原样上传到
|
||
`goodbuddy/tool-artifacts/python/3.13.15/<sha256>/<filename>`,总计 `142,251,693`
|
||
字节。随后从目录中的六个公开 OSS URL 全量下载,逐个验证字节数和 SHA-256,全部一致。
|
||
- 修复无候选时禁用“自定义环境”的死路交互,并扩展 venv/Conda/常见安装位置探测;
|
||
聚焦 Main/Renderer/Settings 测试 `95/95` 通过,最终 `npm test` 为 `3477` 通过、
|
||
`51` 跳过,类型检查、功能文件定向 Lint 和生产构建通过。仓库全量 Lint 当前被并行
|
||
`App.tsx` 的两个 React Compiler memoization 错误阻塞,与工具执行环境文件无关。
|
||
- 隔离 Electron 实机确认“自定义环境”始终可进入,展开和刷新不会保存来源;在 64 项以上
|
||
PATH 的机器上优先发现活动 `<user>\miniconda3\python.exe`,真实诊断为
|
||
Python `3.13.13 · amd64`,刷新后持久设置仍为 `managed`。
|
||
|
||
### 2026-09-02 菜单阶段
|
||
|
||
- 完成“能力与工具”一级菜单及 Skills/MCP Tab,并修复可滚动 Flex 布局将页签压缩为零
|
||
高度的问题;加入 `flex: 0 0 auto` 回归约束。
|
||
|
||
## 进度维护要求
|
||
|
||
- 只有真实源码和生产路径完成后才能勾选对应实施项。
|
||
- 测试失败时保留未完成状态并记录失败原因。
|
||
- 每次更新记录日期、实际命令、结果和外部阻塞。
|
||
- 不在本文件复制未来设计,需求变化回写 PRD/UI/技术设计。
|