codebee 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +236 -252
- package/app/core/catalog.py +24 -5
- package/app/core/errorlog.py +179 -0
- package/app/core/flows.py +6 -2
- package/app/core/gitmod.py +45 -1
- package/app/core/health.py +48 -11
- package/app/core/jobs.py +104 -9
- package/app/core/manager.py +21 -0
- package/app/core/modelhub.py +80 -11
- package/app/core/paths.py +1 -0
- package/app/core/pipeline.py +420 -88
- package/app/core/runner.py +122 -10
- package/app/core/settings.py +9 -2
- package/app/core/step_runner.py +28 -4
- package/app/core/store.py +180 -139
- package/app/core/telemetry.py +291 -0
- package/app/core/token_meter.py +18 -0
- package/app/main.py +162 -16
- package/app/pick_dialog.py +78 -0
- package/app/ui/app.js +1012 -604
- package/app/ui/i18n.js +79 -6
- package/app/ui/index.html +161 -80
- package/app/ui/style.css +838 -67
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,178 +4,176 @@
|
|
|
4
4
|
> *CodeBee*,码蜂:蜂后统筹(编排者)、侦察蜂定方向(规划/评审)、工蜂采蜜(实现)——
|
|
5
5
|
> 一个蜂巢,多只蜜蜂,酿同一份蜜。
|
|
6
6
|
|
|
7
|
+
[](https://www.npmjs.com/package/codebee)
|
|
8
|
+
[](https://www.python.org/downloads/)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
|
|
7
11
|
**AI 是引擎,你的经验是方向盘。** CodeBee 为你指挥一支跨厂商的执笔/编码小队:
|
|
8
|
-
统一调度本机已装的 AI 编码 CLI(Codex CLI、
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
统一调度本机已装的 AI 编码 CLI(Codex CLI、Claude Code、Qwen Code、OpenCode、Aider、
|
|
13
|
+
Kimi Code、MiMo Code、Grok Build、Pi、DeepSeek Harness……),提供
|
|
14
|
+
**目标 → 自动拆解 → 智能路由 → 执行 → 客观验证 → 跨厂商评审 → 自动修复/换将 → 汇总报告**
|
|
15
|
+
的完整闭环。你不在时它们自动推进、自我打磨;需要你拍板的地方——质量闸门、任务分支的
|
|
16
|
+
采纳与丢弃——它们会亮起「待裁决」等你,绝不静默替你决定。
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
换一双"眼睛"才挑得出陈词滥调(无跨厂商可用时如实备注,绝不伪装)。
|
|
15
|
-
- **产物隔离在任务分支**:指定代码版本的任务,产物提交在 `codebee/<task-id>` 分支上,
|
|
16
|
-
你的工作区始终干净;UI 或 `tools/bee.py` 里过目变更,一键「合并回原分支」或「丢弃」。
|
|
17
|
-
- **多任务并发互不打扰**(1-6 可配)、**六种内置任务类型 + 自定义流程**;
|
|
18
|
-
「编排设置」可指定任意厂商的 API 模型作为**编排者**;CLI 可绑定**跨厂商模型链**。
|
|
19
|
-
- 附带智能体管理台(检测 / 安装 / 升级 / 模型配置 / 编排开关,安装失败时 AI 自动诊断修复)。
|
|
18
|
+
<img src="docs/screenshots/home.png" width="820" alt="CodeBee 主界面:极简新建任务 + 任务列表">
|
|
20
19
|
|
|
21
|
-
零第三方依赖:纯 Python 标准库(3.8+),本地 Web
|
|
20
|
+
零第三方依赖:纯 Python 标准库(3.8+),本地 Web 界面,数据全部落盘可回放,
|
|
21
|
+
不会把你的任务内容交给任何第三方。
|
|
22
22
|
|
|
23
23
|
<!-- relnotes:start -->
|
|
24
|
-
### 最新版更新内容(v0.1.
|
|
24
|
+
### 最新版更新内容(v0.1.8)
|
|
25
25
|
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
26
|
+
- README 全面重写:功能导览 + 实机截图,新增蜂巢/经验库/插件市场/自动化/对话模式等章节
|
|
27
|
+
- 修复部分机器上孤儿 CLI 清扫拖慢启动 60 秒的问题(改后台执行,不再挡就绪)
|
|
28
|
+
- 连载更稳:死链自动补位活链 CLI、限流退避窗口可视化、答疑单步轮不重跑
|
|
29
|
+
- 目录页管理四道防线;评审全挂不再误判未达标;新增欢迎引导与手工添加模型
|
|
30
30
|
<!-- relnotes:end -->
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
---
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
## 功能速览
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
### 🐝 蜂巢工作台:实时盯进度,像看蜂群干活
|
|
37
|
+
|
|
38
|
+
运行详情按智能体分格,谁在采蜜一目了然:每只蜜蜂带忙碌动画,点一下直接看该 CLI
|
|
39
|
+
的实时日志流;步骤卡片记录每一步的角色、耗时、token 与费用。
|
|
40
|
+
|
|
41
|
+
<div>
|
|
42
|
+
<img src="docs/screenshots/hive.png" width="400" align="top" alt="蜂巢工作台">
|
|
43
|
+
<img src="docs/screenshots/run_steps.png" width="400" align="top" alt="步骤时间线与 CLI 日志">
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
### ⚔️ 跨厂商对抗式评审
|
|
47
|
+
|
|
48
|
+
评审者强制来自与作者不同的模型族——同族自评有同款盲区,换一双"眼睛"才挑得出
|
|
49
|
+
陈词滥调。评审按维度独立打分 + 提行级意见,不达标自动回炉修订;无跨厂商可用时
|
|
50
|
+
如实备注,绝不伪装。
|
|
51
|
+
|
|
52
|
+
<img src="docs/screenshots/bindings.png" width="820" alt="CLI 绑定:跨厂商模型链">
|
|
53
|
+
|
|
54
|
+
### 🔗 模型链跨厂商降级
|
|
55
|
+
|
|
56
|
+
「CLI 绑定」页把模型链配成 `主模型 → 备选 → 再备选`,每条自带供应商凭据注入
|
|
57
|
+
(API key + 地址,只影响 CodeBee 发起的调用,不改写 CLI 全局配置)。主模型瞬态失败
|
|
58
|
+
(503/限流)自动切下一条——可能是另一家厂商的模型。配额耗尽、供应商欠费也能自动接力。
|
|
59
|
+
|
|
60
|
+
### 🧠 经验库:越跑越好,无需人工维护
|
|
61
|
+
|
|
62
|
+
每次任务结束由编排者复盘评审暴露的问题,自动沉淀为教训并归类(情节逻辑 / 人物塑造 /
|
|
63
|
+
节奏爽点 / 文笔风格 / 一致性 / 流程规范),下次同类任务自动注入提示词。内置规范包
|
|
64
|
+
(如七猫签约标准)自动注入小说类任务;「插件市场」一键安装社区经验包。
|
|
65
|
+
|
|
66
|
+
<div>
|
|
67
|
+
<img src="docs/screenshots/skills.png" width="400" align="top" alt="经验库">
|
|
68
|
+
<img src="docs/screenshots/market.png" width="400" align="top" alt="插件市场">
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
### 🛠 智能体管理台:检测 / 安装 / 升级 / 一键绑模型
|
|
72
|
+
|
|
73
|
+
自动检测本机全部 CLI(含版本号),安装失败时 AI 读日志自动诊断给修正命令;「默认模型」
|
|
74
|
+
写回各家 CLI 自己的配置文件;「一键绑定推荐模型」按协议适配与可用性自动配好跨厂商链。
|
|
75
|
+
|
|
76
|
+
<img src="docs/screenshots/agents.png" width="820" alt="智能体管理:目录检测与一键绑定">
|
|
77
|
+
|
|
78
|
+
### 📡 模型接入:十种来源聚合
|
|
79
|
+
|
|
80
|
+
点「导入」扫描本机 CCSwitch / Claude Code / Codex CLI / ZCode / Qwen / Gemini /
|
|
81
|
+
OpenCode / Continue / Cursor / Trae 十种工具的配置,一次带入全部供应商(自动拉取模型
|
|
82
|
+
列表与价格表);也支持手动添加任意 OpenAI / Anthropic 兼容网关。密钥只存本机。
|
|
83
|
+
|
|
84
|
+
<img src="docs/screenshots/models.png" width="820" alt="模型接入:多来源供应商聚合">
|
|
85
|
+
|
|
86
|
+
### 📊 用量台账:每一分钱都有账
|
|
87
|
+
|
|
88
|
+
所有真实 LLM 调用(编排步骤、编排者直连、连通性冒烟、AI 修复)计入 append-only
|
|
89
|
+
台账:总 tokens、成功率、累计费用、每日趋势(纯 SVG 零依赖),按工具 / 智能体 /
|
|
90
|
+
模型 / 角色 / 任务类型五维排行,支持今天 / 近 7 天 / 近 30 天 / 全部。
|
|
91
|
+
|
|
92
|
+
<img src="docs/screenshots/usage.png" width="820" alt="用量统计">
|
|
93
|
+
|
|
94
|
+
### 更多内置能力
|
|
95
|
+
|
|
96
|
+
- **14 种任务类型**:代码、小说、连载小说、文档、翻译、调研、演讲、短视频脚本、
|
|
97
|
+
周报、邮件、技术方案、简历,以及「直接执行」对话模式;全部支持自定义流程
|
|
98
|
+
(引擎 / 评审维度 / 阈值 / 轮数 / 提示词覆盖);
|
|
99
|
+
- **质量闸门与裁决**:评审失败≠0 分照过、降级大纲不开写、超时但已落盘的稿件照常
|
|
100
|
+
送评审;需要人拍板的事项进「待裁决」队列(徽章 + 提示音),`tools/bee.py`
|
|
101
|
+
命令行不开浏览器也能过裁决;
|
|
102
|
+
- **产物隔离在任务分支**:指定代码版本的任务,产物提交在 `codebee/<task-id>`
|
|
103
|
+
分支上(工作区始终干净),详情页 Git 工作台看 diff,一键合并回原分支或丢弃;
|
|
104
|
+
- **运行中指挥**:任务跑着也能递话——文字 / 截图 / 附件注入下一轮;
|
|
105
|
+
- **对话模式**:不拆步骤、直接执行,时间线式对话页,随时追话续上下文;
|
|
106
|
+
- **自动化**:定时任务复用真实运行链,到点自动开跑(错过的一次性任务不补跑);
|
|
107
|
+
- **多任务并发**:worker 池默认 3(1-6 可调),互不打扰;连载任务超时/中断自动
|
|
108
|
+
断点续跑;
|
|
109
|
+
- **远程访问**:手机同一 WiFi 直开、Tailscale 外网可达、Cloudflare Tunnel 固定
|
|
110
|
+
域名——8 位访问令牌保护,多端实时同步(SSE),单设备控制权防互踩;
|
|
111
|
+
- **7 套皮肤**(默认「深海」),每套自带日间 / 夜间两版,安装默认即 深海·日间 + 中文。
|
|
112
|
+
|
|
113
|
+
---
|
|
43
114
|
|
|
44
115
|
## 快速开始
|
|
45
116
|
|
|
46
117
|
**方式一:npm 安装(推荐,普通用户)**
|
|
47
118
|
|
|
48
119
|
需要本机装有 [Node.js](https://nodejs.org) 与 [Python 3.8+](https://www.python.org/downloads/)
|
|
49
|
-
(Windows 装 Python 时勾选 “Add python.exe to PATH
|
|
120
|
+
(Windows 装 Python 时勾选 “Add python.exe to PATH”)。然后:
|
|
50
121
|
|
|
51
122
|
```bat
|
|
52
123
|
npm install -g codebee
|
|
53
124
|
codebee
|
|
54
125
|
```
|
|
55
126
|
|
|
56
|
-
|
|
57
|
-
(默认 `http://127.0.0.1:8765`)。
|
|
127
|
+
`codebee` 命令会启动服务并自动打开浏览器(默认 `http://127.0.0.1:8765`)。
|
|
58
128
|
**启动后那个命令行窗口就是服务本身**——保持开着别关,Ctrl+C 即退出。
|
|
59
|
-
|
|
129
|
+
每一步启动进度都会实时打印,卡在哪一步一眼可见。
|
|
130
|
+
|
|
131
|
+
升级:`npm update -g codebee`,或在界面「设置 → 关于与更新」里一键升级;
|
|
132
|
+
发现新版本时页面会直接展示本次更新内容。
|
|
60
133
|
|
|
61
134
|
数据存放在用户目录(Windows `%APPDATA%\CodeBee`,macOS/Linux `~/.codebee`),
|
|
62
|
-
升级/重装不影响;老版本 Tutti 目录(`%APPDATA%\Tutti
|
|
135
|
+
升级/重装不影响;老版本 Tutti 目录(`%APPDATA%\Tutti`)会被自动沿用,无需迁移。
|
|
63
136
|
|
|
64
137
|
**方式二:源码运行(开发者)**
|
|
65
138
|
|
|
66
139
|
```bat
|
|
67
140
|
git clone https://github.com/Vercel-By-WXP/CodeBee.git
|
|
68
141
|
cd CodeBee
|
|
69
|
-
:: Windows
|
|
70
142
|
start.bat
|
|
71
143
|
:: 或
|
|
72
144
|
python app\main.py --port 8765
|
|
73
145
|
```
|
|
74
146
|
|
|
75
|
-
```bash
|
|
76
|
-
# macOS / Linux
|
|
77
|
-
./start.sh
|
|
78
|
-
# 或
|
|
79
|
-
python3 app/main.py --port 8765
|
|
80
|
-
```
|
|
81
|
-
|
|
82
147
|
自动打开 `http://127.0.0.1:8765`。源码模式数据落仓库 `data/` 目录。
|
|
83
148
|
|
|
84
|
-
##
|
|
85
|
-
|
|
86
|
-
服务默认监听 `0.0.0.0`,启动时控制台会打印所有可用地址:
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
[CodeBee] 本机 http://127.0.0.1:8765
|
|
90
|
-
[CodeBee] 局域网 http://192.168.x.x:8765/?token=xxxxxxxx ← 手机同一 WiFi 直接打开
|
|
91
|
-
[CodeBee] Tailscale http://100.x.x.x:8765/?token=xxxxxxxx ← 外网随时随地访问
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
- **令牌**:远程访问受访问令牌保护(首次启动生成,存于 `data/remote.json`;本机 127.0.0.1 免令牌)。
|
|
95
|
-
手机打开上面带 `?token=` 的地址后自动记住,之后可直接输裸地址。令牌错误会弹出输入门,重新输入即可。
|
|
96
|
-
- **多端同步**:所有设备看到同一份实时状态(SSE 推送,秒级),断线自动降级为轮询。
|
|
97
|
-
- **控制权**:同一时刻只有一台设备能操作。空闲时执行任意操作会自动接管;其他设备变为只读,
|
|
98
|
-
顶栏胶囊显示「🔒 xx 控制中」,点一下可抢回。45 秒无操作自动释放,单设备使用完全无感。
|
|
99
|
-
- **随时随地访问**:手机与电脑都安装 [Tailscale](https://tailscale.com) 并登录同一账号,
|
|
100
|
-
重启 CodeBee 后控制台会打印 Tailscale 地址,无需端口映射,流量端到端加密。
|
|
101
|
-
- 只想本机使用:`python app\main.py --host 127.0.0.1`。
|
|
102
|
-
|
|
103
|
-
### 公网访问(自己的域名 + Cloudflare Tunnel)
|
|
149
|
+
## 作者侧命令行(可选)
|
|
104
150
|
|
|
105
|
-
|
|
151
|
+
不开浏览器也能过裁决队列(本机免令牌):
|
|
106
152
|
|
|
107
153
|
```bat
|
|
108
|
-
::
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
:: 之后日常启动(服务 + 隧道一键起):
|
|
114
|
-
start-public.bat
|
|
154
|
+
python tools\bee.py status :: 任务总览(含待裁决标记)
|
|
155
|
+
python tools\bee.py pending :: 待裁决队列(分支 / 变更文件)
|
|
156
|
+
python tools\bee.py diff <task> :: 看本次变更
|
|
157
|
+
python tools\bee.py approve <task> :: 采纳——任务分支合并回原分支
|
|
158
|
+
python tools\bee.py discard <task> :: 否决——删除任务分支(需输 yes)
|
|
115
159
|
```
|
|
116
160
|
|
|
117
|
-
- **`--trusted-proxy` 必须开启**:隧道都从本机(127.0.0.1)回源,不感知代理的话
|
|
118
|
-
公网请求会被当成"本机"而豁免令牌,等于把控制台裸奔到公网。开启后带转发头
|
|
119
|
-
(Cloudflare 强制注入 `CF-Connecting-IP`)的回源请求一律强制校验令牌,
|
|
120
|
-
真本机(不带转发头的 loopback)不受影响。
|
|
121
|
-
- `--public-url` 让「手机连接」弹框的二维码直接给公网地址,出门扫码即用。
|
|
122
|
-
- 公网暴露面 = 8 位访问令牌。想更强可叠加 [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/policies/access/)
|
|
123
|
-
(零信任,给子域名再加一层邮箱验证码/SSO,免费档 50 用户)。
|
|
124
|
-
- Cloudflare 免费版即可,无需公网 IP、无需备案(走 CF 海外边缘节点)、不开任何入站端口。
|
|
125
|
-
|
|
126
|
-
### 公网访问(零配置临时隧道)
|
|
127
|
-
|
|
128
|
-
装了 [cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/)
|
|
129
|
-
(`winget install Cloudflare.cloudflared`)后,**默认启动即自动建立 Cloudflare 临时隧道**:
|
|
130
|
-
控制台打印一个随机的 `https://xxx.trycloudflare.com` 公网地址,出门扫码即用,
|
|
131
|
-
不需要账号、域名和任何配置。每次重启地址会变(手机重新扫码即可)。
|
|
132
|
-
|
|
133
|
-
- 已有 Cloudflare 隧道凭据的机器(`~/.cloudflared` 下有 `*.json`)不会自动起临时隧道
|
|
134
|
-
(此类机器上临时隧道不可用),请走上面的固定域名路径。
|
|
135
|
-
- 局限:临时隧道不保证可用性与速度(官方定位测试用途),部分网络环境可能打不开;
|
|
136
|
-
要稳定请用固定域名。`--no-public-tunnel` 可彻底关闭该行为。
|
|
137
|
-
- 打开即自动强制 `--trusted-proxy`:公网暴露 ⇆ 反代回源令牌校验,二者永不分离。
|
|
138
|
-
|
|
139
|
-
## 极简输入 + 会话延续
|
|
140
|
-
|
|
141
|
-
主表单只有 3 项:**类型、目标(一句话)、工作目录**(自动记住上次填写)。
|
|
142
|
-
标题自动取目标首行;其余(上下文/验证命令/编排模式/实现者/评审组/轮数/阈值)全部收进"高级选项"折叠,默认全智能无需改动。
|
|
143
|
-
|
|
144
|
-
**在已有会话上继续**:「继续会话」下拉列出本机**已安装且支持会话恢复**的 CLI
|
|
145
|
-
(Codex CLI、[CC]、OpenCode、QwenCode、MiMo Code 等),选中后 CodeBee 扫描其本地会话
|
|
146
|
-
(时间 / 项目 / 内容预览),挑一条即可延续那个会话的完整上下文——实现者自动指定为
|
|
147
|
-
对应智能体,规划、实现、修复都在原会话上进行(评审仍用新鲜上下文避免偏见)。
|
|
148
|
-
|
|
149
|
-
各家会话存放位置与恢复方式(2026-09 本机实测):
|
|
150
|
-
|
|
151
|
-
| CLI | 会话位置 | 恢复方式 |
|
|
152
|
-
| --- | --- | --- |
|
|
153
|
-
| Codex CLI | `~/.codex/sessions/**.jsonl` | `codex exec resume <sid>` |
|
|
154
|
-
| [CC] | `~/.claude/projects/*/<sid>.jsonl` | `claude -p --resume <sid>` |
|
|
155
|
-
| OpenCode | `~/.local/share/opencode/opencode.db`(SQLite) | `opencode run -s <sid>` |
|
|
156
|
-
| QwenCode | `~/.qwen/projects/*/chats/<sid>.jsonl` | `qwen -r <sid>` |
|
|
157
|
-
| MiMo Code | `~/.local/share/mimocode/mimocode.db`(SQLite) | `mimo run -s <sid>` |
|
|
158
|
-
|
|
159
|
-
两点注意:续会话是**显式指定**,不要求该 CLI 在设置页开启「参与编排」;
|
|
160
|
-
另外 OpenCode / QwenCode 按**当前目录**定位会话,所以续接时 CodeBee 会自动把 CLI
|
|
161
|
-
启动目录切到该会话所属项目(表单里会提示具体路径),任务工作目录仍按你填的来。
|
|
162
|
-
其他 generic 类 CLI 只要在 catalog 的 `orch.resume_argv_template` 里登记恢复参数
|
|
163
|
-
(如 `["run", "-s", "{session}"]`)即可接入。
|
|
164
|
-
|
|
165
161
|
## 任务类型与自定义流程
|
|
166
162
|
|
|
167
163
|
主表单的「类型」下拉即流程列表,点「管理」可新增/编辑自定义流程(引擎、评审维度、
|
|
168
|
-
|
|
164
|
+
阈值、轮数、产出文件名、起草/评审提示词覆盖)。内置 14 种:
|
|
169
165
|
|
|
170
166
|
| 类型 | 引擎 | 流程 |
|
|
171
167
|
|---|---|---|
|
|
168
|
+
| 💬 直接执行 | direct | 不拆步骤直接跑,时间线对话页可追话续上下文 |
|
|
172
169
|
| 💻 代码 | code | 实现 → 验证 → 跨厂商评审 → 自动修复/换将 |
|
|
173
170
|
| 📖 小说 | review | 起草 → 多维评审(情节/人物/文笔/节奏/吸引力)→ 修订 → 发布门禁 |
|
|
174
|
-
| 📚 连载小说 | review | 大纲 → 逐章起草/评审/修订 → 全局一致性评审 →
|
|
171
|
+
| 📚 连载小说 | review | 大纲 → 逐章起草/评审/修订 → 全局一致性评审 → 合并成书(断点续跑/继续连载) |
|
|
175
172
|
| 📝 文档 | review | 起草 → 多维评审(准确性/结构/表达/实用)→ 修订 → 门禁 |
|
|
176
173
|
| 🌐 翻译 | review | 起草 → 多维评审(忠实度/流畅度/术语/风格)→ 修订 → 门禁 |
|
|
177
174
|
| 🔍 调研报告 | review | 起草 → 多维评审(全面性/深度/论据/结论)→ 修订 → 门禁 |
|
|
178
175
|
| 🎤 演讲稿 | review | 起草 → 多维评审(主题/结构/感染力/语言)→ 修订 → 门禁 |
|
|
176
|
+
| 🎬 短视频脚本 / 📅 周报 / ✉️ 邮件 / 📋 技术方案 / 📄 简历 | review | 各自专属评审维度 |
|
|
179
177
|
|
|
180
178
|
两种引擎:
|
|
181
179
|
- **code 引擎**:实现者在工作目录直接改代码 → 执行验证命令(确定性结果)→ 跨厂商评审
|
|
@@ -200,76 +198,92 @@ start-public.bat
|
|
|
200
198
|
先用「↻ 重试任务」断点续跑补完本批(继承大纲与已完成章),再「继续连载」写
|
|
201
199
|
下一批。「继续连载」只出现在连载任务上(带章节衔接语义)。
|
|
202
200
|
|
|
203
|
-
|
|
201
|
+
任何任务右键 → 「基于此任务新建」可把同款配置预填进新建表单(连载的章节衔接
|
|
202
|
+
请用「继续连载」;沿用同一工作目录会覆盖原产出,表单会提醒)。
|
|
204
203
|
|
|
205
|
-
|
|
206
|
-
或任务/运行详情页点「基于此任务新建」:把该任务的类型/标题/目标/上下文/工作目录/
|
|
207
|
-
编排与评审设置**预填进新建表单**,确认或修改后提交——适合「用同款配置开一篇新的」
|
|
208
|
-
(换个题材再写一本、同目录跑下一份文档等)。它不做章节衔接:连载任务要接着
|
|
209
|
-
上一批往下写,请用上面的「继续连载」。注意沿用同一工作目录时,新任务的成书
|
|
210
|
-
文件(及连载的章节文件)会覆盖原产出,表单里会给出提醒。
|
|
204
|
+
## 极简输入 + 会话延续
|
|
211
205
|
|
|
212
|
-
|
|
206
|
+
主表单只有 3 项:**类型、目标(一句话)、工作目录**(自动记住上次填写)。
|
|
207
|
+
标题自动取目标首行;其余(上下文/验证命令/编排模式/实现者/评审组/轮数/阈值)全部
|
|
208
|
+
收进"高级选项"折叠,默认全智能无需改动。
|
|
213
209
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
210
|
+
**在已有会话上继续**:「继续会话」下拉列出本机**已安装且支持会话恢复**的 CLI
|
|
211
|
+
(Codex CLI、Claude Code、OpenCode、QwenCode、MiMo Code 等),选中后 CodeBee 扫描
|
|
212
|
+
其本地会话(时间 / 项目 / 内容预览),挑一条即可延续那个会话的完整上下文——
|
|
213
|
+
实现者自动指定为对应智能体,规划、实现、修复都在原会话上进行(评审仍用新鲜
|
|
214
|
+
上下文避免偏见)。
|
|
217
215
|
|
|
218
|
-
|
|
216
|
+
各家会话存放位置与恢复方式(2026-09 本机实测):
|
|
219
217
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
218
|
+
| CLI | 会话位置 | 恢复方式 |
|
|
219
|
+
| --- | --- | --- |
|
|
220
|
+
| Codex CLI | `~/.codex/sessions/**.jsonl` | `codex exec resume <sid>` |
|
|
221
|
+
| Claude Code | `~/.claude/projects/*/<sid>.jsonl` | `claude -p --resume <sid>` |
|
|
222
|
+
| OpenCode | `~/.local/share/opencode/opencode.db`(SQLite) | `opencode run -s <sid>` |
|
|
223
|
+
| QwenCode | `~/.qwen/projects/*/chats/<sid>.jsonl` | `qwen -r <sid>` |
|
|
224
|
+
| MiMo Code | `~/.local/share/mimocode/mimocode.db`(SQLite) | `mimo run -s <sid>` |
|
|
223
225
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
- **每日趋势**:输入/缓存/输出堆叠柱状图(纯 SVG,零依赖);
|
|
227
|
-
- **时间范围**:分段控件切换今天 / 近 7 天 / 近 30 天 / 全部,**默认「今天」**(最常关心当下消耗),
|
|
228
|
-
选择会记住,下次进入沿用;
|
|
229
|
-
- **五个维度排行**:按工具(Codex CLI / [CC] / 编排者 API…)、按智能体、按模型、
|
|
230
|
-
按步骤角色(规划/实现/评审/修订…)、按任务类型,各带调用数、tokens、耗时、费用与成功率;
|
|
231
|
-
- **最近调用明细**:时间、工具、智能体、模型、角色、成败、tokens 细分与单次费用。
|
|
226
|
+
两点注意:续会话是**显式指定**,不要求该 CLI 在设置页开启「参与编排」;
|
|
227
|
+
headless 一次性调用的 CLI(如 DeepSeek Harness)不支持会话恢复,不出现在下拉里。
|
|
232
228
|
|
|
233
|
-
|
|
229
|
+
## 手机 / 远程访问
|
|
234
230
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
231
|
+
服务默认监听 `0.0.0.0`,启动时控制台会打印所有可用地址:
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
[CodeBee] 本机 http://127.0.0.1:8765
|
|
235
|
+
[CodeBee] 局域网 http://192.168.x.x:8765/?token=xxxxxxxx ← 手机同一 WiFi 直接打开
|
|
236
|
+
[CodeBee] Tailscale http://100.x.x.x:8765/?token=xxxxxxxx ← 外网随时随地访问
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
- **令牌**:远程访问受访问令牌保护(首次启动生成,存于 `data/remote.json`;本机
|
|
240
|
+
127.0.0.1 免令牌)。手机打开带 `?token=` 的地址后自动记住;令牌错误会弹输入门。
|
|
241
|
+
- **多端同步**:所有设备看到同一份实时状态(SSE 推送,秒级),断线自动降级为轮询。
|
|
242
|
+
- **控制权**:同一时刻只有一台设备能操作,空闲时任意操作自动接管,其他设备只读,
|
|
243
|
+
顶栏胶囊一键抢回;45 秒无操作自动释放。
|
|
244
|
+
- **外网**:手机与电脑都装 [Tailscale](https://tailscale.com) 登录同一账号即随时随地访问。
|
|
245
|
+
|
|
246
|
+
### 公网访问(自己的域名 + Cloudflare Tunnel)
|
|
247
|
+
|
|
248
|
+
```bat
|
|
249
|
+
:: 一次性配置:cloudflared 登录后创建隧道并绑定子域名
|
|
250
|
+
cloudflared tunnel login
|
|
251
|
+
cloudflared tunnel create codebee
|
|
252
|
+
cloudflared tunnel route dns --overwrite-dns <隧道UUID> codebee.你的域名.com
|
|
239
253
|
|
|
240
|
-
|
|
254
|
+
:: 之后日常启动(服务 + 隧道一键起):
|
|
255
|
+
start-public.bat
|
|
256
|
+
```
|
|
241
257
|
|
|
242
|
-
|
|
258
|
+
- 真本机(不带转发头的 loopback)不受影响。
|
|
259
|
+
- `--public-url` 让「手机连接」弹框的二维码直接给公网地址。
|
|
260
|
+
- 公网暴露面 = 8 位访问令牌;想更强可叠加 Cloudflare Access(零信任,免费档 50 用户)。
|
|
261
|
+
- Cloudflare 免费版即可:无需公网 IP、无需备案、不开任何入站端口。
|
|
243
262
|
|
|
244
|
-
|
|
245
|
-
|---|---|
|
|
246
|
-
| 经典 | 黑白灰 + 蓝色强调(默认,即原界面) |
|
|
247
|
-
| 深海 | 藏青底色 + 天蓝强调 |
|
|
248
|
-
| 森野 | 墨绿底色 + 青翠强调 |
|
|
249
|
-
| 暖阳 | 暖棕底色 + 琥珀强调 |
|
|
250
|
-
| 霓虹 | 暗紫底色 + 品红强调 |
|
|
251
|
-
| 高对比 | 纯黑 / 纯白 + 硬边框、去阴影(弱视 / 强光环境) |
|
|
263
|
+
### 公网访问(零配置临时隧道)
|
|
252
264
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
265
|
+
装了 [cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/)
|
|
266
|
+
(`winget install Cloudflare.cloudflared`)后,**默认启动即自动建立 Cloudflare 临时隧道**:
|
|
267
|
+
控制台打印一个随机的 `https://xxx.trycloudflare.com` 公网地址,出门扫码即用。
|
|
268
|
+
每次重启地址会变(手机重新扫码即可)。
|
|
256
269
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
所以新皮肤下不会出现串色。皮肤卡片上的配色预览由 JS 读 CSS 变量实时生成,不重复维护色值。
|
|
270
|
+
- 已有 Cloudflare 隧道凭据的机器(`~/.cloudflared` 下有 `*.json`)不会自动起临时隧道,
|
|
271
|
+
请走固定域名路径;`--no-public-tunnel` 可彻底关闭该行为。
|
|
272
|
+
- 打开即自动强制 `--trusted-proxy`:公网暴露 ⇆ 反代回源令牌校验,二者永不分离。
|
|
261
273
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
274
|
+
## 多任务并发
|
|
275
|
+
|
|
276
|
+
任务队列是可并发 worker 池(默认 3,设置页「编排设置」可调 1-6):多个任务同时跑、
|
|
277
|
+
互不打扰——每个任务独立线程,运行数据按 run 隔离,互不等待。并发数调小后多余线程
|
|
278
|
+
在空闲检查点自行退出,调大即时补齐。串行模式(=1)也可用。连载任务超时/中断自动
|
|
279
|
+
断点续跑(延迟退避入队,防在网关限流墙上连续撞死)。
|
|
266
280
|
|
|
267
281
|
## 编排设置(编排者模型)
|
|
268
282
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
283
|
+
「编排设置」页可给 **CodeBee 自己的智能体**指定一个厂商的模型(直连 API,不占
|
|
284
|
+
CLI 会话):统一负责任务的**规划拆解、难度判定与写作大纲**。未启用或调用失败时
|
|
285
|
+
自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。三种协议(anthropic /
|
|
286
|
+
openai / google)都可作编排者;一键测试连通。
|
|
273
287
|
|
|
274
288
|
## 两种智能体
|
|
275
289
|
|
|
@@ -277,8 +291,7 @@ start-public.bat
|
|
|
277
291
|
- **mock 智能体**(演示智能体 A/B):内置、零消耗,用于验证流程 / 演示 / 回归测试。
|
|
278
292
|
|
|
279
293
|
mock 的评分逻辑是确定性的:第 1 轮故意略低于阈值、第 2 轮达标——用来验证发布门禁。
|
|
280
|
-
|
|
281
|
-
一个真实智能体都没有时才回退显示,自动路由与测试也仍会把它作为兜底。
|
|
294
|
+
仅当本机一个真实智能体都没有时才回退显示在表单里。
|
|
282
295
|
|
|
283
296
|
## 模型接入(API 供应商)
|
|
284
297
|
|
|
@@ -294,36 +307,23 @@ mock 不出现在新建任务表单的「实现者/评审组」选择器里(
|
|
|
294
307
|
保存后自动拉取模型列表;地址若误填成 `.../v1/chat/completions` 会自动收敛为基址;
|
|
295
308
|
- **协议**:`anthropic` 与 `openai` 可注入 CLI;`google`(Gemini)**仅登记**——
|
|
296
309
|
可查看、可拉取模型列表,但不会出现在 CLI 绑定的下拉里;
|
|
297
|
-
-
|
|
298
|
-
|
|
299
|
-
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
`✓ 连通 410ms · 16 个模型`);
|
|
304
|
-
- **模型按协议分组**展示,每行 = 勾选框 + 优先级 #N + 模型名 + 价格 + **测试按钮**
|
|
305
|
-
(发一条 1-token 真实对话,显示 `✓ 850ms` 或 `✗ HTTP 402 欠费`)+
|
|
306
|
-
启停开关;
|
|
307
|
-
- **批量操作模型**:勾选任意多行(分组标题「全选」可整组选中)后,用上方批量条
|
|
308
|
-
**启用 / 停用 / 恢复 / 删除**所选模型;「已删除 N 个」展开后也能勾选并「恢复所选」;
|
|
309
|
-
- **拖动 ☰ 调整调用优先级**:组内拖拽即重排,#1 即默认模型;
|
|
310
|
-
- **删除模型**:每行「删除」把不用的模型移出优先级列表。删除是**标记隐藏而非
|
|
311
|
-
物理移除**——「获取模型列表 / 全部刷新 / 重新导入」都不会再把删掉的模型带回来;
|
|
312
|
-
分组底部「已删除 N 个 · 恢复全部」可找回(恢复后排在优先级末尾)。若删掉的正是
|
|
313
|
-
默认模型或难度映射,相关引用会同步清空,不会留下悬空的模型名;
|
|
314
|
-
- **批量的原子性**:所选里只要有一个模型名不存在、或对已删除的模型做启用/停用,
|
|
315
|
-
整个请求都不生效(不会改一半);批量恢复与可见模型混选时,可见项直接跳过;
|
|
316
|
-
- 「编辑供应商配置」折叠区:改地址/密钥/难度模型映射;
|
|
310
|
+
- **左侧供应商列表**:名称、协议、来源标签、已拉取的模型数;支持批量启用/停用/删除;
|
|
311
|
+
停用即「暂不参与编排」,配置与墓碑保留,随时可再启用;
|
|
312
|
+
- **右侧供应商详情**:测试连接(连通性 + 延迟);模型按协议分组、每行可测试
|
|
313
|
+
(1-token 真实对话,显示 `✓ 850ms` 或 `✗ HTTP 402 欠费`)与启停;批量操作原子生效;
|
|
314
|
+
拖动 ☰ 调整调用优先级;删除模型是标记隐藏而非物理移除(刷新/重导入不会带回来),
|
|
315
|
+
「已删除 N 个」可恢复;
|
|
317
316
|
- **自动优先级**:新拉取的模型按名称启发式自动排序(pro/opus 强者靠前,
|
|
318
317
|
mini/flash 便宜者靠后),手动调序后刷新会保留你的顺序;
|
|
318
|
+
- **协议适配**:网关实际支持的 wire(responses / chat completions)可一键「适配测试」
|
|
319
|
+
实测登记;`protocol=auto` 的供应商按实测能力集自动归类;
|
|
319
320
|
- **运行时语义**:「CLI 绑定」页的**模型链可跨厂商混搭**——每条自带该供应商的
|
|
320
321
|
凭据注入(API key + 地址),第 1 条是主模型,其余按序降级:主模型瞬态失败
|
|
321
322
|
(503/限流/无可用通道)自动切到下一条,**可能是另一家厂商的模型**(最多 3 条);
|
|
322
|
-
链空则按供应商默认 /
|
|
323
|
-
- **CLI 绑定**:claude 走 `ANTHROPIC_*` 环境变量、codex 走 `-c model_provider`
|
|
324
|
-
覆盖,运行时注入不改写 CLI 全局配置;密钥只存本机 `data/models.json`;
|
|
323
|
+
链空则按供应商默认 / 难度路由自动选;同厂商多密钥可配多把 KEY,欠费/冷却自动切备用;
|
|
325
324
|
- **安全**:拉取与测试仅访问用户自己配置的 http/https 地址,解析 IP 做边界校验、
|
|
326
|
-
禁用重定向;内网自建网关(私网 IP)导入时自动放行 `allow_private
|
|
325
|
+
禁用重定向;内网自建网关(私网 IP)导入时自动放行 `allow_private`;
|
|
326
|
+
密钥只存本机 `data/models.json`。
|
|
327
327
|
|
|
328
328
|
## 智能编排(默认模式)
|
|
329
329
|
|
|
@@ -342,90 +342,74 @@ mock 不出现在新建任务表单的「实现者/评审组」选择器里(
|
|
|
342
342
|
"智能体管理"页提供:
|
|
343
343
|
|
|
344
344
|
- **检测**:已装 / 未装、版本号(CLI `--version` / UWP AppxManifest / PowerShell);
|
|
345
|
-
- **安装 / 升级 / 卸载**:执行 catalog
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
卸载命令由安装命令自动推导(npm → `npm uninstall -g`、winget → `winget uninstall`、
|
|
350
|
-
pip → `pip uninstall -y`),无需在 catalog 里再维护一份、不会与安装命令不同步;
|
|
351
|
-
特殊渠道可在条目里显式写 `uninstall` 字段覆盖。卸载不可逆,点按钮会先摊开真实命令二次确认;
|
|
345
|
+
- **安装 / 升级 / 卸载**:执行 catalog 里配置的命令,日志**实时流式落盘**(边跑边看);
|
|
346
|
+
**安装失败时 AI 自动诊断**——真实智能体读取失败日志 + 本机环境给出修正命令,
|
|
347
|
+
只有命中白名单(`npm install` / `winget install` / `pip install` 前缀)才自动执行,
|
|
348
|
+
否则留待人工确认;卸载命令由安装命令自动推导,特殊渠道可显式覆盖;
|
|
352
349
|
- **模型配置**:工具默认模型(写回各家配置文件,自动备份 `.bak`);
|
|
353
|
-
CodeBee 编排运行时用哪个供应商 / 模型统一在「CLI
|
|
354
|
-
(`data/models.json` 的 `bindings`,含有序模型链与难度路由);
|
|
350
|
+
CodeBee 编排运行时用哪个供应商 / 模型统一在「CLI 绑定」页配置;
|
|
355
351
|
- **编排开关**:决定哪些 CLI 参与任务路由。
|
|
356
352
|
|
|
357
|
-
Kimi Code / MiMo Code / Grok Build / Pi / DeepSeek Harness
|
|
358
|
-
|
|
359
|
-
`
|
|
360
|
-
`--password`)。DeepSeek Harness 的可执行名是 `dsh`,无头调用走 `--profile headless`
|
|
361
|
-
(细节见下表)。若某个条目的安装命令仍缺失,直接编辑 `data/catalog.json` 补上
|
|
362
|
-
`install` 字段,保存后点"重新加载 catalog"即可;点"恢复默认 catalog"可回滚。
|
|
353
|
+
Kimi Code / MiMo Code / Grok Build / Pi / DeepSeek Harness 的安装命令已内置(均取自
|
|
354
|
+
各工具官方渠道)。若某个条目的安装命令缺失,直接编辑 `data/catalog.json` 补上
|
|
355
|
+
`install` 字段保存后点"重新加载 catalog"即可;点"恢复默认 catalog"可回滚。
|
|
363
356
|
|
|
364
357
|
## 接入原理(已在本机实测)
|
|
365
358
|
|
|
366
359
|
| CLI | 无头调用 | 输出解析 |
|
|
367
360
|
|---|---|---|
|
|
368
|
-
| Codex CLI | `codex exec --skip-git-repo-check --json -s <sandbox>`(stdin
|
|
369
|
-
| Claude Code | `claude -p --output-format json`(stdin 传提示词;自动注入
|
|
370
|
-
| DeepSeek Harness | `dsh --profile headless "<任务>"
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
(实测:settings 固定 `vsllm.cc` 时,把 env 指到一个不存在的域名,请求仍然打到 `vsllm.cc`)。
|
|
382
|
-
|
|
383
|
-
由此带来一个必须注意的约束:绑定的供应商要和 dsh 实际使用的端点**配成一对**。若 dsh 的
|
|
384
|
-
settings.yaml 已经把端点钉在别处,而你在「CLI 绑定」里绑了另一家网关的供应商,那个密钥会被
|
|
385
|
-
发到你钉住的端点上,表现为鉴权失败。此时要么让两边端点一致,要么不绑供应商、让 dsh 用它自己的
|
|
386
|
-
凭据。另外绑定只会选中 **openai 协议**的供应商(dsh 的适配器打的是 OpenAI 兼容的
|
|
387
|
-
`/chat/completions`),anthropic 协议的网关会被跳过。headless 是「一次性任务」,不支持会话
|
|
388
|
-
恢复,也不会出现在「继续会话」下拉里;超长提示词还受 Windows 命令行上限(约 32k 字符)约束
|
|
389
|
-
——这也是所有 generic 类 CLI 的共有约束。
|
|
390
|
-
|
|
391
|
-
所有子进程:并发读管道防死锁、超时/取消杀整棵进程树(`taskkill /T`)、stdout 全量落盘。
|
|
361
|
+
| Codex CLI | `codex exec --skip-git-repo-check --json -s <sandbox>`(stdin 传提示词) | JSONL 事件流:`item.completed`=回答,`turn.completed`=token 用量 |
|
|
362
|
+
| Claude Code | `claude -p --output-format json`(stdin 传提示词;自动注入 Git Bash 路径与输出上限) | 单个 JSON:`result` / `total_cost_usd` / `usage` |
|
|
363
|
+
| DeepSeek Harness | `dsh --profile headless "<任务>"`(任务只能走位置参数) | stdout 即最终回答;退出码 0=完成 / 1=错误 |
|
|
364
|
+
|
|
365
|
+
- **模型指定因 CLI 而异**:codex/claude 支持运行时注入(env / `-c` 覆盖);dsh 只认
|
|
366
|
+
`~/.dsh/settings.yaml` 的配置项,凭据走 `DEEPSEEK_API_KEY` 环境变量(不落盘);
|
|
367
|
+
kimi/grok-build/mimo/pi/openclaw 的默认模型落点均已逐一实测内置,配置由 CodeBee
|
|
368
|
+
托管写入(自动备份)。
|
|
369
|
+
- **协议闸门**:claude 只吃 anthropic wire、codex 只吃 openai responses、dsh 只吃
|
|
370
|
+
OpenAI 兼容 chat——不匹配的供应商在绑定与起跑前就会被剔除并提示,不会产生
|
|
371
|
+
「必然失败的注入组合」。
|
|
372
|
+
- 所有子进程:并发读管道防死锁、超时/取消杀整棵进程树(`taskkill /T`)、stdout 全量
|
|
373
|
+
落盘;输出静默看门狗(默认 600s)防个别 CLI 卡死,超时自动换将接力。
|
|
392
374
|
|
|
393
375
|
## 目录约定
|
|
394
376
|
|
|
395
377
|
```
|
|
396
|
-
data
|
|
378
|
+
data/(npm 安装:%APPDATA%\CodeBee 或 ~/.codebee;源码模式:仓库 data/)
|
|
397
379
|
catalog.json 智能体目录(可手动编辑)
|
|
398
380
|
orchestration.json 编排偏好(参与编排开关)
|
|
399
|
-
models.json 供应商 / CLI 绑定(跨厂商模型链)/
|
|
381
|
+
models.json 供应商 / CLI 绑定(跨厂商模型链)/ 多 KEY
|
|
400
382
|
flows.json 自定义任务流程
|
|
401
383
|
settings.json 运行设置(最大并发数)
|
|
402
384
|
tasks/*.json 任务
|
|
403
385
|
runs/<run_id>/ 每次运行:run.json、steps/*.log、report.md、error.log
|
|
404
386
|
usage/ 用量台账(usage-YYYYMM.jsonl,按月分文件,append-only)
|
|
387
|
+
skills.json 经验库(教训 + 规范包)
|
|
405
388
|
```
|
|
406
389
|
|
|
407
390
|
安全约束(内置,勿绕过):配置路径必须位于用户主目录内;任务工作目录必须是已存在的
|
|
408
|
-
|
|
391
|
+
绝对路径;稿件文件名消毒后限制在工作目录内;步骤日志读取禁止目录穿越;
|
|
392
|
+
远程写操作需设备控制权 + 访问令牌。
|
|
409
393
|
|
|
410
394
|
## 测试
|
|
411
395
|
|
|
412
396
|
```bat
|
|
413
|
-
cd tests && python -m unittest
|
|
397
|
+
cd tests && python -m unittest discover -p "test_*.py" -v
|
|
414
398
|
python tests\e2e_service.py :: 起真实服务的端到端(临时数据目录 + 独立端口,零配额)
|
|
415
|
-
|
|
416
|
-
node tests\
|
|
417
|
-
node tests\
|
|
418
|
-
node tests\ui_check_usage_icons.mjs :: 用量页图标/分段控件(SVG 图标、默认今天、选中态、主题跟随)
|
|
419
|
-
node tests\ui_check_models_icons.mjs :: 模型页图标(刷新按钮加载态、拖拽手柄,对运行中服务只读)
|
|
420
|
-
node tests\ui_probe_geometry.mjs :: 布局几何(重叠/裁切/越界/横向溢出,桌面 + 手机视口)
|
|
421
|
-
node tests\ui_audit.mjs :: 全页面体检(逐页可见性 + 空台账/有数据两套场景 + 控制台异常)
|
|
422
|
-
node tests\ui_skin.mjs :: 皮肤核验(调色板变量对齐 + 换肤/持久化/窄屏,需 18798 服务)
|
|
399
|
+
node tests\ui_check.mjs :: Edge headless + CDP 的 UI 交互验证
|
|
400
|
+
node tests\ui_audit.mjs :: 全页面体检(逐页可见性 + 控制台异常)
|
|
401
|
+
node tests\ui_skin.mjs :: 皮肤核验(调色板变量对齐 + 换肤/持久化)
|
|
423
402
|
```
|
|
424
403
|
|
|
425
|
-
单元测试(解析器/消毒/穿越防护/mock
|
|
426
|
-
端到端(mock 全流程、门禁逻辑、验证失败拦截、服务级 API
|
|
404
|
+
单元测试(解析器/消毒/穿越防护/mock 确定性/流程注册表/跨厂商链/编排者/并发池/
|
|
405
|
+
自更新一致性)+ 端到端(mock 全流程、门禁逻辑、验证失败拦截、服务级 API 全链路),
|
|
406
|
+
全部不消耗真实配额。
|
|
407
|
+
|
|
408
|
+
## 更新日志
|
|
409
|
+
|
|
410
|
+
见 [CHANGELOG.md](CHANGELOG.md)。应用内「设置 → 关于与更新」可检查更新、查看
|
|
411
|
+
每次更新的内容并一键升级(npm 安装模式)。
|
|
427
412
|
|
|
428
|
-
##
|
|
413
|
+
## License
|
|
429
414
|
|
|
430
|
-
|
|
431
|
-
- git worktree 隔离支持并行写同一仓库(并发任务已就绪,worktree 隔离待做)。
|
|
415
|
+
[MIT](LICENSE)
|