63 lines
6.2 KiB
Markdown
63 lines
6.2 KiB
Markdown
# 内置推荐技能与 GitHub 安装(2026-10-20)
|
||
|
||
## 实现范围
|
||
|
||
- 技能页“推荐”改用随应用发布的精选目录;首发 Archify。SkillHub、套件仍明确未接入,不伪装联网市场。
|
||
- 复用现有技能卡片、详情及主题;提供安装确认、下载/校验/安装进度、取消、错误重试、查看已安装和使用技能。替换确认展示当前来源、本地修改及启停状态。
|
||
- 主进程只接受推荐 ID 和操作 ID/覆盖确认,不接受渲染器提供下载地址、哈希或安装目录。
|
||
- 固定 HTTPS GitHub 官方来源,最多三次白名单域名重定向,20 MB 下载上限、120 秒下载超时;校验 SHA-256、名称、版本、许可证,再复用 ZIP 安全检查及暂存/备份/回滚事务。
|
||
- 全进程最多一个推荐安装,不排队、不自动重试。下载/校验可取消,原子提交不可取消;停服或退出中止尚未提交的操作。启动清理可确认所属进程已退出的遗留临时目录,不续装。
|
||
- 来源元数据和技能登记同次提交;旧登记兼容。同名导入、不同版本或修改后的技能须明确替换,保留启停状态;同来源同版本且完整的安装直接返回现有记录。手动导入覆盖会清除推荐来源。
|
||
- 安装、卸载、启停广播变更,刷新推荐、已安装列表及输入框能力目录,无需重启。
|
||
|
||
## 固定包
|
||
|
||
| 字段 | 值 |
|
||
| --- | --- |
|
||
| 推荐 ID / 名称 | archify |
|
||
| 仓库 | tt-a1i/archify |
|
||
| commit | 25cf37080fc8b1dbe758a4efc3935b55f3327083 |
|
||
| 包路径 | archify.zip |
|
||
| SHA-256 | 70e210265c59f24dcbdf2a502ff671104b5454e7ee7d3554aecd86bad32384f5 |
|
||
| 下载字节数 | 5,271,959 |
|
||
| ZIP 文件数 / 展开字节数 | 200 / 17,812,933 |
|
||
| 许可证 / 显示版本 | MIT / 3.2.0 |
|
||
|
||
实包 `SKILL.md` 中的 `metadata.version` 为 `3.2`,`package.json` 为 `3.2.0`;仅将数字形式的 major.minor 与 major.minor.patch 归一比较,未改用最新分支。包含 101 个 JS/MJS 脚本;安装不执行包内脚本,也不读取其更新地址。
|
||
|
||
## 代码入口
|
||
|
||
- `src/main/capabilities/skill-recommendations.ts`:版本化精选目录。
|
||
- `src/main/capabilities/recommended-skills.ts`:下载、安全边界、进度和生命周期;注入端口仅作测试隔离。
|
||
- `src/main/capabilities/skills.ts`:来源保存、嵌套版本解析、现有导入器复用及提交前冲突检查。
|
||
- `src/shared/capabilities.ts`、`src/main/ipc.ts`、`src/preload/index.ts`:目录、安装、取消、当前操作快照、进度及变更事件。
|
||
- `src/renderer/src/capabilities/RecommendedSkills.tsx`:卡片与安装 UI,使用操作 ID 和单调时间戳抵御旧状态覆盖。
|
||
- `src/renderer/src/workbuddy/composer/useCapabilityCatalog.ts`:变更后刷新输入框目录。
|
||
|
||
## 已验证
|
||
|
||
- `npm run typecheck` 和完整 `npm run build` 通过;构建日志 `.tmp/recommended-skills-build.log`。
|
||
- `npm run test:recommended-skills`:62 项通过;包含模拟网络错误/重定向/超限/超时/断连/取消,真实隔离技能库中的同名覆盖、禁用保留、来源清除、安装中被修改、登记写入失败回滚与停服恢复。实包组使用本地缓存,没有缓存会明确 SKIP。
|
||
- `npm run test:recommended-skills:ui`:最终 37 项通过,`.tmp/recommended-skills-ui-ED7GR0/report.json`;使用隔离 Electron 和受控宿主,覆盖其他窗口操作互斥、过期事件不回退终态、深色主题及 720px 窄窗无横向溢出。主线程检查深色/窄窗截图;不冒充真实网络安装或完整应用壳的深色验收。
|
||
- `node scripts/test-skills-ui.mjs`:既有技能管理 37 项通过,`.tmp/skills-ui-NeLZZW/report.json`。
|
||
- `npm run test:recommended-skills:package`:实包隔离审计 48 项通过,最终复跑 `.tmp/archify-package-ZtYztG/report.json`(使用已下载固定 ZIP)。
|
||
- 最终构建执行 `npm run test:recommended-skills:app`:11 项通过,`.tmp/recommended-app-G08DdX/report.json`。使用正式 main/preload/renderer、真实固定 GitHub 下载与隔离目录,确认阶段事件、正文/CLI 资源、来源、幂等、禁用保留,以及“使用技能”回填真实输入框;零 renderer 错误。主线程检查已安装及输入框截图。
|
||
- `npm run test:composer-capabilities`、`npm run test:persistence`、`npm run test:sessions`、`npm run test:conversation` 通过。
|
||
|
||
## 明确边界
|
||
|
||
- 固定哈希说明下载内容一致,不构成技能代码安全审计;本次没有执行 Archify 命令、准备其运行依赖或验证全部绘图能力。
|
||
- 不支持任意地址、私有仓库、自动更新或后台安装队列;后续推荐通过目录条目随 YCode 发布。
|
||
- 所有验收使用隔离技能库,没有改动用户现有技能,也没有请求模型 API。未提交 Git、发布安装包或重启用户安装版;保留原有 MCP、输入区和升级模块等工作区修改。
|
||
- 本次不新增 WorkBuddy 原版采集或完整 1:1 结论。
|
||
|
||
## GitHub 直链连接失败修复
|
||
|
||
用户实际 dev 安装报 `fetch failed`;同机重现 `raw.githubusercontent.com` 返回 `ECONNRESET`。改用 GitHub 官方 Contents API,完整 commit 放在 `ref` 参数,通过 `Accept: application/vnd.github.raw+json` 获取 ZIP 原始字节。实测 5,271,959 字节及登记哈希完全一致,不是 JSON 元数据,也未切换分支或第三方代理镜像。
|
||
|
||
下载仅放行 `api.github.com` 和 `raw.githubusercontent.com` 的 HTTPS 请求/跳转,原有大小、哈希、ZIP 安全、取消和事务保护保持不变。不自动重试或改变 Windows 代理配置。连接失败提供网络/代理提示,API 限流提供稍后重试提示;未加入 token 或私有仓库认证。
|
||
|
||
后端新增官方 API、固定提交、raw Accept 和限流回归,共 66 项通过。类型检查及完整构建通过(`.tmp/recommended-github-api-build.log`)。实包审计通过官方 API 真实下载 48 项通过:`.tmp/archify-package-kTQcPp/report.json`,未使用本地缓存。
|
||
|
||
最终正式 main/preload/renderer 隔离验收 11 项通过(`.tmp/recommended-app-kwzDyE/report.json`),实际经新 API 完成安装及输入框引用回填,零 renderer 错误。重启了本仓库的 dev 进程以加载修复,未重启安装版、修改系统代理或改动用户技能。
|