Files
qiming/qimingclaw/crates/agent-electron-client/docs/reviews/SOLUTION-RETENTION-ELECTRON-2026-03.md

100 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Electron 相关方案留存2026-03
本文档固化若干**已落地或评审通过**的设计与修复,便于后续合并分支、排查回归时对照。实现位置以 `qiming-agent` 主仓库为准;独立 worktree 中的实验以「附录」说明。
---
## 1. FirstTokenTrace 请求级采样(均匀分布)
### 问题
`requestId` 的 MD5 前 8 个十六进制字符得到 32 位无符号整数,若除以 `0xFFFFFFFF`(即 \(2^{32}-1\)),则最大哈希对应比值为 **1.0**,严格说不属于半开区间 \([0, 1)\),且与「将 \(2^{32}\) 个整点均匀映射到单位区间」的常规定义不一致,在 `sampleRate` 接近 1 时会产生可观测偏差。
### 方案
- 除数使用 **\(2^{32}\)**,即十六进制字面量 `0x100000000`(或等价 `2 ** 32`)。
- 判定仍为 `v < sampleRate`,其中 `v ∈ [0, 1)`
### 代码位置
- `src/main/services/engines/perf/firstTokenTrace.ts``shouldSample()`
### 与性能报告的关系
首条消息/首 token 相关分析见 `docs/optimization/MACOS-FIRST-MESSAGE-PERF-REPORT-2026-03-31.md` 等;采样用于控制磁盘与日志量,不影响功能正确性,但影响统计代表性。
---
## 2. `sync-oss.sh` 与 GitHub Actions 运行记录
### 背景
脚本在**本机**通过 `gh` 触发 **目标仓库**(默认 `qiming-ai/qimingclaw`)的 `sync-electron-to-oss.yml`,此前存在两类风险:
1. **`gh run list --limit 1`**:取的是「列表中最新一条」,并发或他人刚触发的 run 会导致**跟错 run**。
2. **未指定 `--repo`**`gh` 默认指向当前 checkout 的仓库;若在 `qiming-agent` 目录执行而实际 dispatch 到 `qimingclaw`,会列到**错误仓库**的 run。
### 方案
1. 在发起 `workflow_dispatch` 的 HTTP 请求**之前**,记录 `START_EPOCH`(当前 UTC 时间戳减约 10 秒,抵消客户端与 GitHub 时钟差)。
2. 触发成功后轮询 `gh run list --repo "$REPO" --workflow=sync-electron-to-oss.yml`,在结果中筛选:
- `event == "workflow_dispatch"`
- `createdAt` 解析为 epoch 后 **`START_EPOCH`**
- 取其中按时间**最新**一条的 `databaseId`
3. 所有 `gh run view` / 输出日志 URL 均带 **`--repo "$REPO"`**。
4. 若在超时轮询内仍无法解析 run脚本失败并提示用户用 `gh run list --repo "$REPO"` 人工核对。
### 残余边界
同一秒内对**同一仓库**多次 `workflow_dispatch`,仍可能歧义;若未来需要,可在 workflow `inputs` 中增加显式关联 ID。
### 相关文档
- `docs/QIMINGCLAW-WORKFLOW-DISPATCH.md`:在 qimingclaw 侧启用 workflow、Secrets、一次性复制路径说明。
---
## 3. CI 中版本号校验POSIX `grep` 与 `ripgrep`
### 问题
`ubuntu-latest` 上若使用 `rg -q``x.y.z` 校验,**默认镜像未必安装 ripgrep**,校验步骤可能静默失败或整条 step 失败与「MVP 仅允许纯数字三段版本」的意图不符。
### 方案
在 shell 中使用 **`grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$'`**,依赖 POSIX 环境即可,与 `sync-electron-to-oss.yml` / `release-electron.yml` 中生成 `latest.json` 的版本字段策略一致。
### 落地说明
`channel`stable/beta与上述校验的 workflow 变更可能位于独立分支或 worktree合并到主分支后**qiming-agent 与 qimingclaw 两侧 workflow 文件应保持同步**(以实际执行 release/OSS 的仓库为准)。
---
## 4. 附录stable / beta 更新通道(规划/分支)
目标与 OSS 路径约定(先 beta 再 stable、beta 不写 `latest/latest.json` 等)见独立说明文档草案;若已合入主仓库,路径为:
- `docs/RELEASE-CHANNELS.md`(若不存在,可参考 worktree `feat/stable-beta-update-channel` 内同名文件)
客户端侧要点(实现以合入后的代码为准):
- SQLite `update_channel` 决定拉取的 `latest.json` URLstable 与 beta 不同路径)。
- 旧版客户端仅读 `latest/`,行为保持不变。
---
## 5. 文档索引
| 主题 | 路径 |
|------|------|
| OSS 仅同步 workflow 启用说明 | [../QIMINGCLAW-WORKFLOW-DISPATCH.md](../QIMINGCLAW-WORKFLOW-DISPATCH.md) |
| 自动更新架构 | [../architecture/auto-update.md](../architecture/auto-update.md) |
| qimingcode 二进制签名说明 | [../QIMINGCODE-BINARY-SIGNING-2026-03-28.md](../QIMINGCODE-BINARY-SIGNING-2026-03-28.md) |
| macOS 首条消息性能报告 | [../optimization/MACOS-FIRST-MESSAGE-PERF-REPORT-2026-03-31.md](../optimization/MACOS-FIRST-MESSAGE-PERF-REPORT-2026-03-31.md) |
---
*文档状态:留存归档;若实现迁移或策略变更,请在本文件顶部更新「最后修订」并保留变更摘要。*
**最后修订2026-03-31**