|
| 1 | +--- |
| 2 | +name: gettokens-codex-binary-management |
| 3 | +description: GetTokens Codex 二进制管理:Codex CLI 版本源、下载、激活、回退、托管 PATH、release cache、版本说明和紧凑列表 UI。 |
| 4 | +--- |
| 5 | + |
| 6 | +# GetTokens Codex Binary Management |
| 7 | + |
| 8 | +当任务涉及 Codex 二进制管理、Codex CLI 版本切换、release 拉取、下载/激活流程、托管 PATH,或修改 `frontend/src/features/codex-binary` / `internal/codexbinary` 时使用本 skill。 |
| 9 | + |
| 10 | +## 1. 业务边界 |
| 11 | +- Codex Binary 是独立业务,负责 Codex CLI 二进制源切换、下载、激活、回退、更新与变更记录。 |
| 12 | +- 不接入账号池、local apply、用量、会话管理或路由策略流程。 |
| 13 | +- 用户可见界面保持窄范围: |
| 14 | + - 当前启用摘要 |
| 15 | + - 托管 PATH 状态 |
| 16 | + - release 筛选 |
| 17 | + - 单一版本列表 |
| 18 | + - 下载 / 激活动作 |
| 19 | + - 变更记录 |
| 20 | + - 版本行更多菜单 |
| 21 | +- 默认筛选为 `stable`。Alpha / prerelease 必须由用户通过筛选显式进入。 |
| 22 | + |
| 23 | +## 2. 数据流程 |
| 24 | +- 进入页面只加载本地 snapshot/cache,不要每次进入都自动请求 GitHub releases。 |
| 25 | +- `检查更新` 是显式远端刷新边界。 |
| 26 | +- 远端 release 数据应写入本地缓存,后续进入页面优先复用缓存。 |
| 27 | +- 历史版本必须分页拉取,不只拿最新正式版。 |
| 28 | +- 优先使用 GitHub REST;REST 失败或限流时可 fallback 到 Atom / HTML release 页,但当 Atom 最近窗口几乎全是 alpha 时,仍必须能补到 stable 历史版本。 |
| 29 | +- prerelease 判断不能把 `rust-v` 前缀里的连字符当成 prerelease。应检测 version/tag 中的 alpha/beta/rc/pre/preview 标记。 |
| 30 | +- 版本说明必须使用 `react-markdown` + `rehype-sanitize` 安全渲染,禁止直接注入远端 HTML。 |
| 31 | + |
| 32 | +## 3. 下载 / 激活语义 |
| 33 | +- 下载和激活是两个独立动作。 |
| 34 | +- 远端未安装版本显示 `下载`。 |
| 35 | +- 下载中的版本隐藏下载/激活按钮,只显示阶段、百分比和大小进度。 |
| 36 | +- 已下载版本显示 `激活`。 |
| 37 | +- 旧版本在 UI 中仍显示 `激活`。内部可保留 rollback 语义用于 action 推导和成功提示测试。 |
| 38 | +- 下载完成后只导入托管版本目录,不自动激活;除非后续需求明确改变。 |
| 39 | +- 下载或导入失败不能破坏当前 active shim。 |
| 40 | +- 当前启用版本不能删除,前端和后端都必须阻止。 |
| 41 | + |
| 42 | +## 4. Managed PATH |
| 43 | +- 不假设用户一定使用 `~/.zshrc`。 |
| 44 | +- 后端负责识别 shell/profile 目标: |
| 45 | + - zsh:优先现有 `ZDOTDIR/.zshrc` / `ZDOTDIR/.zprofile` |
| 46 | + - bash:优先现有 `.bashrc` / `.bash_profile` / `.profile` |
| 47 | + - fish:使用 `XDG_CONFIG_HOME/fish/config.fish` 或 `~/.config/fish/config.fish` |
| 48 | +- 只写入 GetTokens 自己的标记 PATH block。 |
| 49 | +- 写入前备份目标 profile。 |
| 50 | +- 重复启用必须幂等,不能重复插入 PATH block。 |
| 51 | + |
| 52 | +## 5. UI 规则 |
| 53 | +- Codex Binary 页面保持紧凑、操作导向,避免说明型/营销型文案堆叠。 |
| 54 | +- 版本列表不要使用卡中卡布局。 |
| 55 | +- 版本行布局: |
| 56 | + - 左侧:版本身份与紧凑状态 |
| 57 | + - 身份附近:可用时显示文件大小 |
| 58 | + - 右侧:主操作和菜单 |
| 59 | + - 点击行主体展开/收起 release notes |
| 60 | +- 主操作直接放在 cell 上: |
| 61 | + - `下载` |
| 62 | + - `激活` |
| 63 | +- 次级操作放进右侧菜单: |
| 64 | + - 远端 release:在浏览器中打开 |
| 65 | + - 已安装版本:在 Finder 中打开 |
| 66 | + - 已安装且非当前版本:删除 |
| 67 | +- 行内按钮必须阻止事件冒泡,避免误触发 release notes 展开。 |
| 68 | +- 页面和长 notes 滚动区域使用稳定 scrollbar gutter,避免滚动条出现/消失导致宽度抖动。 |
| 69 | +- 进度条沿用当前实现和用户最新视觉反馈;普通下载进度不要回退成错误/警告色。 |
| 70 | + |
| 71 | +## 6. 前端结构 |
| 72 | +- `CodexBinaryFeature.tsx` 保持为 controller: |
| 73 | + - snapshot 加载 |
| 74 | + - 显式远端刷新 |
| 75 | + - 下载轮询 |
| 76 | + - 激活/下载/删除/Finder/浏览器动作 |
| 77 | + - notes 与菜单状态 |
| 78 | +- 视图组件放在 `frontend/src/features/codex-binary/components/`: |
| 79 | + - summary panel |
| 80 | + - version list |
| 81 | + - version cell |
| 82 | +- release URL、任务大小等纯展示工具放入 `presentation.ts`。 |
| 83 | +- 行合并、release 筛选、action 推导、任务进度、binary size 格式化保留在 `model.ts`。 |
| 84 | +- 不新增 catch-all helper 文件。 |
| 85 | + |
| 86 | +## 7. 后端 / Wails 边界 |
| 87 | +- 领域逻辑放在 `internal/codexbinary`。 |
| 88 | +- Wails-facing 方法放在 `internal/wailsapp`,随后必须通过 root `app.go`、必要的 root DTO/mapper 和前端 generated bindings 暴露。 |
| 89 | +- Wails 生成的 `frontend/wailsjs/go/models.ts` 可能带尾随空白;交付前运行: |
| 90 | + - `perl -i -pe 's/[ \t]+$//' frontend/wailsjs/go/models.ts` |
| 91 | + - `perl -0pi -e 's/\n[ \t]*\n\z/\n/' frontend/wailsjs/go/models.ts` |
| 92 | + - `git diff --check` |
| 93 | + |
| 94 | +## 8. 验证 |
| 95 | +- 仅前端结构或 UI 调整: |
| 96 | + - `npm --prefix frontend run typecheck` |
| 97 | + - `npm --prefix frontend run test:unit -- src/features/codex-binary/model.test.mjs` |
| 98 | + - `npm --prefix frontend run build` |
| 99 | + - 浏览器预览检查 `http://localhost:34115/#frame=codex&workspace=binary-management` |
| 100 | +- 后端、DTO 或 Wails 调整: |
| 101 | + - 跑 `internal/codexbinary` / `internal/wailsapp` 相关 Go 测试 |
| 102 | + - 影响 shared Wails/root binding 时跑 `go test ./...` |
| 103 | + - public Wails DTO/方法形状变化后重新生成 bindings |
| 104 | +- 视觉调整截图放到 `docs-linhay/spaces/20260511-codex-binary-management/screenshots/<YYYYMMDD>/codex-binary/`。 |
| 105 | + |
| 106 | +## 9. 文档 |
| 107 | +- 需求、范围、实施状态、截图和未完成项写入 `docs-linhay/spaces/20260511-codex-binary-management/README.md`。 |
| 108 | +- 稳定决策写入 `docs-linhay/memory/YYYY-MM-DD.md`。 |
| 109 | +- 文档或记忆写回后运行 `qmd update` 与 `qmd embed`。 |
0 commit comments