feat: remove legacy OpenCode runtime

Cut product flows over to Coding/Pi and retain only the migration-owned v1 boundary. Promote supported native optional packages because electron-builder omitted pnpm transitive optional closure from the packaged ASAR.
This commit is contained in:
2026-08-24 12:17:43 +08:00
parent 61fede2b4d
commit 5a275b93a7
199 changed files with 1330 additions and 64725 deletions

View File

@@ -75,7 +75,7 @@ pnpm run package:win
pnpm run package:linux
```
Windows 打包脚本会先准备目标架构所需的 Python、uv 与 OpenCode 运行时资源,产物写入忽略的 `release/` 目录。AI 学习不再携带独立播放器产物。Windows 正式包中的 OpenCode、Playwright MCP、Python 和 uv 均从安装目录解析;缺少本地资源时启动或产物验证会直接失败,不会回退到系统 Python、npm 或 npx 下载。Git、项目编译器和用户选择的浏览器仍属于项目/系统工具,不属于内置 OpenCode 运行时。macOS 与 Linux 的双架构产物需要分别完成对应架构的 staging 与产物验证后再发布。
Windows 打包脚本会先准备目标架构所需的 Pi、Python 与 uv 运行时资源,产物写入忽略的 `release/` 目录。AI 学习不再携带独立播放器产物。Windows 正式包中的 Pi、Python 和 uv 均从安装目录解析;缺少本地资源时启动或产物验证会直接失败,不会回退到系统 Python、npm 或 npx 下载。Git、项目编译器和用户选择的浏览器仍属于项目/系统工具,不属于内置 Pi 运行时。macOS 与 Linux 的双架构产物需要分别完成对应架构的 staging 与产物验证后再发布。
## 代码结构
@@ -84,8 +84,7 @@ Windows 打包脚本会先准备目标架构所需的 Python、uv 与 OpenCode
| `src/` | React Renderer、页面、组件和状态管理 |
| `electron/` | Electron Main、Preload、Host API、运行时与系统能力 |
| `shared/` | Main 与 Renderer 共享的契约和项目配置 |
| `.opencode/` | 随产品提供的 Skill 与 OpenCode 插件 |
| `resources/` | 品牌、图标和打包资源 |
| `resources/` | 品牌、图标、编码 Skill 和打包资源 |
| `scripts/` | 运行时准备、图标生成、打包与验证脚本 |
| `tests/` | Vitest、Electron runtime 与 Playwright 测试 |
@@ -113,14 +112,14 @@ Windows 打包脚本会先准备目标架构所需的 Python、uv 与 OpenCode
### 项目内置编码 Skills
- 项目随产品提供 `agent-browser`(开发浏览器)、`frontend-slides`(项目演示)、`grilling`(方案质询)和 `planning-with-files`(项目规划)四个编码 Skill。它们从 vendor-neutral 的 `resources/coding-skills/` 打包;当前由 Electron Main 安装到受管的 OpenCode 配置目录Pi 运行时只会按 Agent 选择显式加载对应路径。旧运行时专用的 Agent Browser 插件独立保留在 `resources/coding-extensions/opencode/`,不混入共享 Skill 内容
- 项目随产品提供 `agent-browser`(开发浏览器)、`frontend-slides`(项目演示)、`grilling`(方案质询)和 `planning-with-files`(项目规划)四个编码 Skill。它们从 vendor-neutral 的 `resources/coding-skills/` 打包由 Electron Main 按 Agent 选择直接加载;未选择的 Skill 不进入该 Agent 的 Pi 资源集合
- 创建项目伙伴时,`agent-browser``grilling``planning-with-files` 默认勾选;`frontend-slides` 作为专项能力可手动选择。用户可以在创建或维护伙伴时调整选择。最终选择写入项目 Agent 的 `skillIds`,未选择的 Skill 保持拒绝权限。
- `grilling` 会在复杂实现前逐项确认高影响决策,用户确认前不执行变更。`planning-with-files` 只在复杂、可分阶段或需要跨会话恢复的任务中使用,并把 `task_plan.md``findings.md``progress.md` 直接保存到当前项目根目录,不写入 Skill 安装目录、用户目录或 `.niancode/agent-planning/`
- `frontend-slides` 只在用户准备项目展示、汇报或结题时自动调用,生成项目目录中的固定 16:9 HTML 演示和相对路径素材;它不生成 `.pptx`,不访问云部署服务。
### 项目伙伴与会话
- 新项目默认没有伙伴或 Agent用户在项目内手动创建伙伴时必须填写名称、预设头像或本地头像、职责和精确的 `provider/model`。本地头像会自动裁剪为 256×256并优先压缩为 WebP 后随项目配置保存;提示词与 Skill 属于后置高级设置。
- 新项目默认没有伙伴或 Agent用户在项目内手动创建伙伴时必须填写名称、预设头像或本地头像、职责和精确的 Provider 账号与模型。该选择以 `{ accountId, modelId, thinkingLevel }` 保存,不依赖运行时私有 Provider id。本地头像会自动裁剪为 256×256并优先压缩为 WebP 后随项目配置保存;提示词与 Skill 属于后置高级设置。
- 项目配置页的新增与已有伙伴维护统一使用居中弹窗;编辑保存先更新当前页面草稿,点击底部“保存项目配置”后统一持久化。模型资源抽屉只展示已配置模型、提供方和文本/多模态能力,不提供项目级选择。伙伴模型只作为新 Conversation 的默认值;核心聊天页可为当前 Conversation 独立切换模型和 thinking切换不会改写伙伴默认值或其他 Conversation。
- 读取旧项目时会把仍缺少模型的伙伴从兼容保留的 `defaultModel` 自动迁移到伙伴自身配置,之后运行时只认伙伴模型。
- 技能资源入口使用扳手图标;点击已安装 Skill 后先展示其目录结构,再展示主文件 `SKILL.md` 原文,并支持返回技能列表。