codex-adaptive-effort 0.1.0-alpha.1 → 0.1.0-beta.1
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/AGENTS.md +21 -0
- package/CHANGELOG.md +58 -0
- package/CODEX_START.md +14 -0
- package/CODE_OF_CONDUCT.md +14 -0
- package/CONTRIBUTING.md +42 -0
- package/README.md +8 -7
- package/README.zh-CN.md +10 -8
- package/SECURITY.md +31 -0
- package/bin/cae-desktop-bridge.mjs +2 -6
- package/bin/cae.mjs +35 -14
- package/docs/ARCHITECTURE.md +48 -0
- package/docs/CODE_REVIEW_2026-09-28.md +33 -0
- package/docs/CODE_REVIEW_2026-09-29.md +29 -0
- package/docs/DESKTOP_ACCEPTANCE.md +42 -0
- package/docs/DESKTOP_ACCEPTANCE.zh-CN.md +134 -0
- package/docs/DESKTOP_LAUNCHER.md +16 -16
- package/docs/DESKTOP_LAUNCHER.zh-CN.md +211 -0
- package/docs/JEV_SHADOW_ACCEPTANCE.md +62 -0
- package/docs/JEV_SHADOW_ACCEPTANCE.zh-CN.md +187 -0
- package/docs/LIMITATIONS.md +1 -1
- package/docs/LOCAL_ACCEPTANCE.md +76 -0
- package/docs/LOCAL_ACCEPTANCE.zh-CN.md +296 -0
- package/docs/LOCAL_VALIDATION.md +18 -17
- package/docs/NPM.md +14 -10
- package/docs/PUBLISHING.md +74 -0
- package/docs/README.md +42 -0
- package/docs/TROUBLESHOOTING.md +49 -0
- package/docs/VALIDATION.md +93 -0
- package/docs/VALIDATION.zh-CN.md +44 -0
- package/docs/acceptance-template.md +32 -0
- package/docs/validation/coverage.txt +916 -0
- package/docs/validation/demo.json +71 -0
- package/docs/validation/offline-verify.txt +968 -0
- package/docs/validation/summary.json +118 -0
- package/examples/jev-shadow-cases.json +75 -0
- package/package.json +29 -2
- package/src/audit.mjs +70 -28
- package/src/codex.mjs +23 -0
- package/src/desktop.mjs +3 -1
- package/src/proxy.mjs +9 -6
- package/src/stream.mjs +19 -8
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# 本机桌面启动检查 / 2026-09-28
|
|
2
|
+
|
|
3
|
+
结论:当前 ChatGPT 桌面端的 Codex 编程入口已通过**独立实例启动、off 真实传输、纯文本 low/high 手动锁档、取消及同会话恢复**。首轮请求绕过 CAE 的 app-server 参数作用域问题已修复,155 项离线测试通过。实验已结束,相关进程与监听端口均已清理。这些结果不代表正式桌面插件或所有任务形态都能改档。
|
|
4
|
+
|
|
5
|
+
这里不覆盖普通 ChatGPT 聊天,也不是官方桌面插件或稳定扩展 API。启动入口来自当前已安装应用代码的只读核对,升级后必须重新检查。
|
|
6
|
+
|
|
7
|
+
## 来源与结果
|
|
8
|
+
|
|
9
|
+
- 源码基线:`3c13aac2dcad333fae689b1273d3d4657bf90b8d`,`main`;最终验收还包含本报告同版本的 launcher 参数修复。采集时补丁未提交,下列源码 SHA-256 用于明确证据对应版本。
|
|
10
|
+
- 基线 [GitHub CI](https://github.com/ppxu/codex-adaptive-effort/actions/runs/36371612189):head SHA 完全匹配,success;Ubuntu/macOS/Windows × Node 22/24 六项通过。该结果仅覆盖基线,后续提交需核对自己的 CI。
|
|
11
|
+
- 修复后 `src/codex.mjs` SHA-256:`8f9744e1e90072de3154717d7de7895db68737d602d785c45b76ec9e3388b86d`。
|
|
12
|
+
- 修复后 `bin/cae.mjs` SHA-256:`4f4a26f7cc1e90db16f30ae7e5db7a3aaa37c09726820c5ca11fb74eef832022`。
|
|
13
|
+
- 环境:macOS 27.0 / arm64,Node v24.16.0;ChatGPT 26.924.22138,build 11645;内置 `codex-cli 0.158.0-alpha.2.1`。
|
|
14
|
+
- 启动与后续核对:2026-09-28 11:06 起,Asia/Shanghai。使用新建的临时 Electron 数据目录、独立 CAE 配置及 loopback 端口。原生 Codex home 沿用现有位置,**不是完整的账户或原生状态隔离**;独立窗口仍能发现已有项目。未复制凭证、未修改日常 config.toml。
|
|
15
|
+
|
|
16
|
+
| 检查 | 结果 |
|
|
17
|
+
|---|---|
|
|
18
|
+
| 进程级 CLI 路径覆盖 | 桌面日志确认实际执行临时桥接脚本 |
|
|
19
|
+
| 独立 app-server | transport=stdio;CLI 覆盖使共享 daemon 分支不适用 |
|
|
20
|
+
| 初始化 | initialize_handshake_result:outcome=success,186 ms;随后 connected |
|
|
21
|
+
| 原生版本 | 桌面报告 0.158.0-alpha.2.1,与直接 --version 一致 |
|
|
22
|
+
| 既有登录 | 原生桌面报告 authMethod=chatgpt、authenticatedAccountPresent=true;没有读取或输出凭证值 |
|
|
23
|
+
| 窗口启动 | 日志报告 window ready-to-show;没有自动化视觉验收 |
|
|
24
|
+
| 模型元数据 | 桌面自身 model/list RPC 返回 errorCode=null;没有用模拟模型列表代替真实返回。能力集合见此前真实探针 |
|
|
25
|
+
| 实际子进程参数 | 确认桌面所属原生 app-server 使用 model_provider=cae、gpt-6-astra、medium、实验 loopback 地址、ChatGPT 认证与 supports_websockets=false;没有审批/沙箱覆盖参数 |
|
|
26
|
+
| 模型与锁档 | 启动阶段未验证;后续真实传输确认 gpt-6-astra、off 保持 medium、手动 low/high 生效,见下文 |
|
|
27
|
+
| GUI 自动化 | 工具明确拒绝操作 com.openai.codex;未绕过限制使用其他 UI 控制方式 |
|
|
28
|
+
| 启动告警 | 观察到推送注册与 Statsig 启动超时,尚未确认是否影响可操作界面;不把 app-server 初始化成功等同于全部桌面功能正常 |
|
|
29
|
+
|
|
30
|
+
原计划关闭上游做启动预检,但现有 serve 会以 upstream_not_enabled 拒绝真实路线启动。因此实验服务按已有授权显式启用上游,保持 off + baseline;是否发生真实生成必须以代理 request_sent 记录为准,不能从 off 推断为零调用。启动检查时 request_sent=0,Jev=0。
|
|
31
|
+
|
|
32
|
+
## 桥接方式与边界
|
|
33
|
+
|
|
34
|
+
本机应用代码识别以下**仅作用于实验进程**的环境变量:
|
|
35
|
+
|
|
36
|
+
- `CODEX_ELECTRON_USER_DATA_PATH`:独立 Electron 用户数据目录。
|
|
37
|
+
- `CODEX_CLI_PATH`:指向临时 launcher;没有替换应用内二进制。
|
|
38
|
+
- `CODEX_APP_SERVER_FORCE_CLI=1`:选择本地 CLI/stdio 传输,不是审批或沙箱选项。
|
|
39
|
+
|
|
40
|
+
临时 launcher 在 app-server 启动时调用现有 `cae codex --auth chatgpt`,保留桌面原有参数;其余命令交给原生 CLI。CAE 按已有应用路径读取自己的本地密钥,只通过子进程环境传递;原生客户端自行处理登录。未增加 WebSocket 代理、桌面 UI、Jev 调用或全局配置。
|
|
41
|
+
|
|
42
|
+
桌面 → app-server 的 stdio 与 app-server → 上游的 HTTP/SSE 是两段不同的传输。前者已通过本次启动检查;后者的 CLI 验收见 [LOCAL_ACCEPTANCE.md](LOCAL_ACCEPTANCE.md),尚不能代替桌面端实际发消息的结果。
|
|
43
|
+
|
|
44
|
+
独立实例共享原生 Codex home,可能写入正常的原生会话/项目状态。只应新建无敏感内容的实验任务,不操作日常任务。CAE 的手动锁档作用于该代理实例的所有合格请求,不是桌面内某一个任务专属。桌面选择不同模型时不能据此宣称固定模型验收通过。
|
|
45
|
+
|
|
46
|
+
## 下一步人工验收
|
|
47
|
+
|
|
48
|
+
仅在可辨识的实验窗口中操作;保留 gpt-6-astra、medium 和既有服务档、审批及沙箱。在无敏感内容的实验目录中新建任务,避免将真实工作历史带入代理。
|
|
49
|
+
|
|
50
|
+
1. CAE 保持 off;在桌面发送“只回复 CAE_DESKTOP_OFF_OK,不使用工具,不访问文件或其他服务”。预期界面显示该标记;代理同一次 request_sent 的 model=gpt-6-astra、changed=false,并有 completed=true。
|
|
51
|
+
2. 完成后在实验终端运行以下命令,再从同一纯文本任务发送对应标记:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
node "$CAE_ROOT/bin/cae.mjs" lock low --config "$CAE_TRIAL/.cae/config.json"
|
|
55
|
+
node "$CAE_ROOT/bin/cae.mjs" control auto --config "$CAE_TRIAL/.cae/config.json"
|
|
56
|
+
# 桌面:只回复 CAE_DESKTOP_LOW_OK,不使用工具。
|
|
57
|
+
node "$CAE_ROOT/bin/cae.mjs" lock high --config "$CAE_TRIAL/.cae/config.json"
|
|
58
|
+
# 桌面:只回复 CAE_DESKTOP_HIGH_OK,不使用工具。
|
|
59
|
+
node "$CAE_ROOT/bin/cae.mjs" status --config "$CAE_TRIAL/.cae/config.json"
|
|
60
|
+
node "$CAE_ROOT/bin/cae.mjs" report --config "$CAE_TRIAL/.cae/config.json"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
预期两次记录 source=manual、分别发送 low/high、changed=true,响应正常完成,Jev 调用为零。若旁路,记录 reason,不删除历史强行通过。带结构化工具结果的历史旁路仍是用户已接受的限制。
|
|
64
|
+
|
|
65
|
+
3. 恢复 off,在桌面验证取消及后续恢复;再完全退出实验实例和 CAE。只操作本次记录的 PID/子进程,不使用全局 killall,不退出日常窗口。
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
node "$CAE_ROOT/bin/cae.mjs" control off --config "$CAE_TRIAL/.cae/config.json"
|
|
69
|
+
node "$CAE_ROOT/bin/cae.mjs" unlock --config "$CAE_TRIAL/.cae/config.json"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
off 仍经代理;完全恢复依赖退出实验进程,再正常打开原版桌面端。恢复后检查实验端口无监听、实验 app-server 无残留,原版 CLI --version 正常。
|
|
73
|
+
|
|
74
|
+
本次临时 launcher、启动指针、原始日志及提取的应用代码仅留本机,均不提交。没有将第三方桌面代码复制到本项目,也没有把临时桥接提升为正式安装功能。
|
|
75
|
+
|
|
76
|
+
## 首轮人工发送与最小修复 / 11:18–11:24
|
|
77
|
+
|
|
78
|
+
用户按实验启动步骤发送无敏感内容的测试消息,并报告收到 CAE_DESKTOP_OFF_OK。随后核对实验桌面的 thread/start、turn/start 成功记录,代理 health 正常但事件文件为空。仅查询对应实验会话的 thread/read 元数据(includeTurns=false),确认 modelProvider=openai、model=gpt-6-astra、reasoningEffort=medium。因此本轮是**桌面回复成功、CAE 传输验收失败**;代理零事件不代表用户零模型用量。
|
|
79
|
+
|
|
80
|
+
根因是原生 CLI 的参数作用域:桌面同时提供 app-server 前后的 -c 参数。旧 launcher 把 CAE overrides 放在命令最前面,而此版本 CLI 在 app-server 有自身 -c 时采用子命令配置集合,丢掉前面的 CAE provider 定义。进程命令行出现 model_provider=cae 并不足以证明生效。
|
|
81
|
+
|
|
82
|
+
原生零生成 initialize + config/read 三组对照:
|
|
83
|
+
|
|
84
|
+
| 参数形态 | 实际 model_provider | CAE provider 定义 |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| CAE 参数 + app-server | cae | 存在 |
|
|
87
|
+
| CAE 参数 + 桌面原始参数(含子命令后的 -c) | null,实验会话实际使用 openai | 不存在 |
|
|
88
|
+
| 桌面参数 + CAE 参数 | cae | 存在 |
|
|
89
|
+
|
|
90
|
+
最小修改:`src/codex.mjs` 在识别到 app-server(允许前置 -c / --config / --config=)时,将 CAE 参数放入其子命令配置作用域;`bin/cae.mjs` 的 launch-args 和实际启动使用同一组合函数。其他调用保持原顺序,不把 exec 的提示词或 config 值中的 app-server 误当子命令。不修改全局配置、原生应用、认证或审批/沙箱设置。
|
|
91
|
+
|
|
92
|
+
新增两项合成回归:桌面参数组合保留 CAE model/provider/auth 与原有插件参数;exec 提示词和配置值不误判。修复前第一项失败,修复后 npm run verify 退出 0:155 测试通过,0 失败/取消/跳过,语法/JSON 与离线演示通过。修复后按桌面实际参数执行原生 config/read:provider=cae、gpt-6-astra、medium,CAE 定义存在,生成调用为零。此补丁尚未提交,前文 3c13aac 的 CI 不覆盖它。
|
|
93
|
+
|
|
94
|
+
仅定向停止实验原生 app-server 后,桌面自动启动新的桥接进程并重新初始化成功(159 ms)。现有实验桌面和 off 代理保留供复测;不沿用 provider=openai 的旧测试会话,需要新建实验会话。修复后仍未观察到桌面 CAE request_sent,low/high 暂不执行。此前“唯一缺口是 UI 工具限制”的判断由本次真实发现取代,优先事项是确认修复后的新会话实际通过 CAE。
|
|
95
|
+
|
|
96
|
+
第一次交接时暂时保留实验窗口;用户随后要求继续验证、不重复确认。后续完成了桌面 model/list、实际子进程参数与退出恢复检查,没有通过其他 UI 技术绕过工具限制,也没有用 CLI 生成复测冒充桌面输入框验收。
|
|
97
|
+
|
|
98
|
+
初次启动检查的收尾:停止前 health=ok、mode=off、activeRequests=0、judgeCalls=0;该阶段代理事件记录为空,没有提交真实生成任务。定向停止实验桌面和代理,核对原先记录的全部子进程已退出、4319 无监听,原版 CLI --version 退出 0。桌面退出后曾留下本次启动的 bare-modifier-monitor 原生辅助进程,已按事先记录的子进程 PID 单独停止;未终止日常实例或修改原生应用。原始结果保存在被忽略的 `desktop-final.local.json`。这份清理证据不覆盖用户后来重启的人工测试实例,后者当前保留待复测。
|
|
99
|
+
|
|
100
|
+
## 修复后的桌面 off 结果 / 11:55–11:56
|
|
101
|
+
|
|
102
|
+
用户在新建实验会话发送测试消息后,代理实际记录到如下两次上游请求。主请求传输完成得到直接证据;本轮用户报告已发送,未另行读取界面文本,故不把代理完成事件冒充视觉验收。
|
|
103
|
+
|
|
104
|
+
| 来源 | 模型 / effort | CAE 处理 | 结果 |
|
|
105
|
+
|---|---|---|---|
|
|
106
|
+
| 用户测试主请求 | gpt-6-astra / medium | mode_off,changed=false | 03:55:57.560 UTC 发送;03:56:04.000 UTC HTTP 200、response.completed、completed=true |
|
|
107
|
+
| 桌面自动标题生成 | gpt-6-luna / low | mode_off,changed=false | HTTP 200、response.completed、completed=true;桌面日志确认 feature=thread_title |
|
|
108
|
+
|
|
109
|
+
桌面的辅助标题请求不是 CAE 多模型路由;CAE 没有选择或改写该模型。真实用量不能只按用户点击发送次数统计。本轮经代理共两次真实上游发送,Jev 调用为零;完整元数据仅留被忽略的 desktop-off-acceptance.local.json。
|
|
110
|
+
|
|
111
|
+
两次均完成、activeRequests=0 后,已设置 lock low + control auto,确认主模型仍为 gpt-6-astra、lockedEffort=low、judgeCalls=0。下一步在同一纯文本实验会话发送 low 标记;其他模型按 different_model 旁路,手动锁档不会改写标题模型。实验桌面及代理当前保留。尚未完成 low/high、桌面取消/恢复和本轮最终收尾。
|
|
112
|
+
|
|
113
|
+
## 桌面 low 手动锁档 / 11:57–11:58
|
|
114
|
+
|
|
115
|
+
用户报告已发送 low 测试消息。03:57:58.878 UTC 的同一请求 decision 明确记录 incomingEffort=medium、proposedEffort=low、source=manual、changed=true;03:58:00.176 UTC 以 gpt-6-astra / low 实际发送,03:58:06.547 UTC 返回 HTTP 200、response.completed、completed=true。因此桌面 low 传输锁档通过,不能据此推断服务端实际推理预算或质量。原始元数据仅留 desktop-low-acceptance.local.json。
|
|
116
|
+
|
|
117
|
+
确认 activeRequests=0、judgeCalls=0 后,已切换 lockedEffort=high,保持 auto 模式与同一主模型。当前等待同一纯文本实验会话的 high 测试;桌面取消/恢复及最终清理尚未完成。
|
|
118
|
+
|
|
119
|
+
## 桌面 high 手动锁档 / 12:19–12:20
|
|
120
|
+
|
|
121
|
+
用户报告已发送 high 测试消息。04:19:46.977 UTC 的 decision 记录 incomingEffort=medium、proposedEffort=high、source=manual、changed=true;04:19:47.203 UTC 以 gpt-6-astra / high 实际发送,04:19:52.587 UTC 返回 HTTP 200、response.completed、completed=true。桌面 high 传输锁档通过,原始元数据仅留 desktop-high-acceptance.local.json。
|
|
122
|
+
|
|
123
|
+
验证完成后已执行 control off 和 unlock,状态为 mode=off、lockedEffort=null、activeRequests=0、judgeCalls=0。实验窗口与代理仍保留,用于最后的桌面停止生成及同会话恢复检查;尚未结束实验进程。
|
|
124
|
+
|
|
125
|
+
## 桌面取消、恢复与最终收尾 / 12:21–12:23
|
|
126
|
+
|
|
127
|
+
用户在同一实验会话点击停止,再发送恢复标记,并报告已停止且恢复。实验桌面日志中的最后五次 turn/start 属于同一会话,turn/interrupt 返回 errorCode=null。
|
|
128
|
+
|
|
129
|
+
- 取消:04:21:40.890 UTC 已发送 gpt-6-astra / medium;04:21:45.630 UTC 记录 terminal=cancelled、completed=false。没有把未完成请求算成成功;httpStatus=null 表示未获得已记录的状态,不代表零消耗。
|
|
130
|
+
- 恢复:04:21:56.104 UTC 发送同模型 medium,changed=false;04:21:59.786 UTC 返回 HTTP 200、response.completed、completed=true。
|
|
131
|
+
- 本次修复后的代理共观察到六次真实上游发送:五个用户测试回合(off、low、high、取消、恢复),另有一次原生桌面标题生成。五次完整完成,一次取消;只有 low/high 主请求改档;Jev 调用为零。首次绕过代理的测试不包含在这六次中,无法据此统计整个桌面账户的总用量。
|
|
132
|
+
- 退出前为 off、unlocked、activeRequests=0、retainedSessions=0。按实验数据目录与进程归属重新核对 PID,定向停止实验桌面、其残留原生辅助进程与代理;04:23:29 UTC 确认实验进程残留为零、4319 无监听、原版 CLI --version 退出 0。未终止日常实例。
|
|
133
|
+
|
|
134
|
+
最终证据分别保存在被忽略的 desktop-acceptance-final.local.json 和 desktop-cleanup-final.local.json;不提交原始日志、临时脚本、模型捕获、.cae、应用提取代码或凭证。已通过的范围是本机特定版本的实验性 Codex 桌面纯文本传输;未测试正式安装/升级、其他桌面版本、普通 ChatGPT 聊天、工具历史改档、长会话压缩、真实 Jev、质量或成本收益。已有工具历史旁路限制继续保留。
|
package/docs/DESKTOP_LAUNCHER.md
CHANGED
|
@@ -10,10 +10,10 @@ The experimental instance uses its own Electron data directory but shares native
|
|
|
10
10
|
|
|
11
11
|
## Start with baseline shadow
|
|
12
12
|
|
|
13
|
-
After [npm installation](NPM.md),
|
|
13
|
+
After [npm installation](NPM.md), use your chosen non-sensitive working directory in every terminal. Source developers can run `npm link --ignore-scripts` from the checkout to provide the same command. Select a model ID returned by the [native probe](LOCAL_VALIDATION.md):
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
|
|
16
|
+
cae desktop start --model "$MODEL_ID" --auth chatgpt --enable-upstream
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Keep this terminal running. First launch creates `.cae/desktop/config.json`; later launches reuse it and reject an unexpected model/baseline change. The default is shadow + baseline-only, which does not classify task complexity or call Jev. Starting does not submit a task; sending a task consumes the normal model allowance.
|
|
@@ -21,7 +21,7 @@ Keep this terminal running. First launch creates `.cae/desktop/config.json`; lat
|
|
|
21
21
|
In another terminal:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
|
|
24
|
+
cae desktop status
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
Wait for `phase=running`, `effectiveProvider=cae`, `connected=true` and at least one successful bridge check. The output includes the experimental desktop PID and configuration path. The provider display name is `CAE experimental local effort controller`; CAE does not patch the native window title. Automated visual identification was not accepted independently.
|
|
@@ -33,12 +33,12 @@ Custom locations are supported with `--config PATH` and `--app PATH`. Use the sa
|
|
|
33
33
|
For a baseline instance, select only efforts from the actual capability set:
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
cae control off --config .cae/desktop/config.json
|
|
37
|
+
cae lock low --config .cae/desktop/config.json
|
|
38
|
+
cae control auto --config .cae/desktop/config.json
|
|
39
39
|
# Send an eligible synthetic text task in the experimental window.
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
cae control off --config .cae/desktop/config.json
|
|
41
|
+
cae unlock --config .cae/desktop/config.json
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
Controls apply to this CAE instance, not a single chat. Locks affect only eligible auto requests; unsupported history still bypasses adaptation. Controls affect the next unsent request, not a response already being generated.
|
|
@@ -48,7 +48,7 @@ Controls apply to this CAE instance, not a single chat. Locks affect only eligib
|
|
|
48
48
|
Stop the old experimental instance first. Supply `TYPESAFE_API_KEY` through your normal environment setup, without putting its value in command arguments or public logs:
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
|
-
|
|
51
|
+
cae desktop start --model "$MODEL_ID" --auth chatgpt \
|
|
52
52
|
--enable-upstream --enable-jev
|
|
53
53
|
```
|
|
54
54
|
|
|
@@ -64,14 +64,14 @@ Every desktop Jev process permits at most eight evaluations, or a smaller config
|
|
|
64
64
|
With explicit authorization to change real request effort, add the separate auto permission:
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
|
|
67
|
+
cae desktop start --model "$MODEL_ID" --auth chatgpt \
|
|
68
68
|
--enable-upstream --enable-jev --allow-jev-auto
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
Startup still uses shadow/off. Once running, check `judgeKind=typesafe`, `shadowOnly=false`, `lockedEffort=null`, `judgeCalls=0` and `activeRequests=0`, then switch:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
|
|
74
|
+
cae control auto --config .cae/desktop/config.json
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
Invalid decisions, timeouts and exhausted budgets retain the incoming effort; when effort is absent, the configured baseline is used. Other models and unsupported shapes bypass adaptation. The desktop effort selector may continue showing the user's chosen baseline: CAE modifies the outbound request, not that selector.
|
|
@@ -87,7 +87,7 @@ These English examples are reproduction instructions, not a claim that the origi
|
|
|
87
87
|
## Optional 2000 ms timeout experiment
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
|
|
90
|
+
cae desktop start --model "$MODEL_ID" --auth chatgpt \
|
|
91
91
|
--enable-upstream --enable-jev --allow-jev-auto --jev-timeout-ms 2000
|
|
92
92
|
```
|
|
93
93
|
|
|
@@ -98,8 +98,8 @@ The default remains 1500 ms. Restart without the parameter to restore the origin
|
|
|
98
98
|
## Inspect results
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
cae desktop status
|
|
102
|
+
cae report --config .cae/desktop/config.json
|
|
103
103
|
```
|
|
104
104
|
|
|
105
105
|
Reports aggregate an append-only event file and can include earlier instances. For a trial, filter by its time window and correlate local request IDs across `decision`, `request_prepared`, `request_sent` and `upstream_outcome`. A recommendation alone is not an applied change. An applied request setting plus completion is not proof of actual model reasoning allocation or task quality.
|
|
@@ -109,8 +109,8 @@ Jev timings separate observed request creation, send start, body sent, response
|
|
|
109
109
|
## Stop and recover
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
cae control off --config .cae/desktop/config.json
|
|
113
|
+
cae desktop stop
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
The stop command closes this instance, its tracked children and proxy; success returns `stopped`. Ctrl+C in the startup terminal uses the same cleanup path. Stop interrupts active experimental tasks, so wait for completion when possible. Ordinary desktop instances are not cleanup targets.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# 桌面实验启动器
|
|
2
|
+
|
|
3
|
+
已验证的 macOS arm64 桌面可以由一条命令启动,另一条命令完整退出。它是本仓库的实验启动器,不是安装到 ChatGPT 里的插件,也不控制普通 ChatGPT 聊天。
|
|
4
|
+
|
|
5
|
+
## 启动
|
|
6
|
+
|
|
7
|
+
在仓库根目录运行:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node bin/cae.mjs desktop start --model gpt-6-astra --auth chatgpt --enable-upstream
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`gpt-6-astra` 是本机实测模型;每次启动都会从原生 model/list 重新核对。其他机器必须选择实际返回的模型,不能照搬该名称。首次运行创建 `.cae/desktop/config.json` 和 CAE 本地密钥;后续复用,拒绝悄悄更换既有模型或 baseline。默认 shadow + baseline,不启用 Jev、不自动发起测试生成;用户在窗口中提交任务会消耗现有 ChatGPT 模型额度。
|
|
14
|
+
|
|
15
|
+
保持这个终端运行。先显示 starting,只有桌面初始化成功且桥接通过实际 provider 检查后才显示 running。预期状态包括:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"phase": "running",
|
|
20
|
+
"label": "CAE DESKTOP · 实验实例",
|
|
21
|
+
"effectiveProvider": "cae",
|
|
22
|
+
"connected": true,
|
|
23
|
+
"mode": "shadow",
|
|
24
|
+
"judgeKind": "baseline"
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
同时输出实验桌面的 PID 和独立配置位置。新出现的窗口是本次实例,提供商配置名为 `CAE experimental local effort controller`,可在原生提供商显示处核对。没有修改应用标题栏;自动化工具禁止操作自身界面,因此该标识的视觉展示未独立验收。
|
|
29
|
+
|
|
30
|
+
**在新窗口中新建 Codex 本地任务。** 独立 Electron 数据目录仍共享正常 Codex home 和原生登录,可能显示已有项目或会话。旧会话保留其已有 provider,不能假定它们也走 CAE;本启动器不迁移、重写或接管旧会话。普通 ChatGPT 聊天和云端任务不在此范围内。
|
|
31
|
+
|
|
32
|
+
## 状态与退出
|
|
33
|
+
|
|
34
|
+
另一个终端在同一仓库目录运行:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
node bin/cae.mjs desktop status
|
|
38
|
+
node bin/cae.mjs desktop stop
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
stop 定向清理本次桌面、已追踪的子进程和本地代理,成功才返回 stopped。也可以在启动终端按 Ctrl+C。停止会中断实验实例正在进行的任务;日常桌面实例不属于清理范围。不要用 killall,也不要在进程结束后仅凭旧 PID 手动清理。
|
|
42
|
+
|
|
43
|
+
`control off` 仍然经过代理;完全恢复日常路径应执行 desktop stop,再按平时方式使用官方桌面。退出时不需要回写任何日常配置或登录信息。
|
|
44
|
+
|
|
45
|
+
自定义配置和应用位置:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
node bin/cae.mjs desktop start --config "$CAE_CONFIG" --app "$CHATGPT_APP" \
|
|
49
|
+
--model "$MODEL_ID" --auth chatgpt --enable-upstream
|
|
50
|
+
node bin/cae.mjs desktop status --config "$CAE_CONFIG"
|
|
51
|
+
node bin/cae.mjs desktop stop --config "$CAE_CONFIG"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
配置父目录须为私有目录;启动器不接受任意 CLI 替换,使用经签名检查的应用所带 CLI。默认端口 4319;冲突时停止启动,不终止占用进程。可以在服务停止后修改 CAE 配置的 port,再重试。
|
|
55
|
+
|
|
56
|
+
## 手动控制
|
|
57
|
+
|
|
58
|
+
控制命令须显式指向桌面配置:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
node bin/cae.mjs control off --config .cae/desktop/config.json
|
|
62
|
+
node bin/cae.mjs lock low --config .cae/desktop/config.json
|
|
63
|
+
node bin/cae.mjs control auto --config .cae/desktop/config.json
|
|
64
|
+
# 完成实验后恢复:
|
|
65
|
+
node bin/cae.mjs control off --config .cae/desktop/config.json
|
|
66
|
+
node bin/cae.mjs unlock --config .cae/desktop/config.json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
实际可选 effort 取决于该模型的最新能力。手动锁档只对合格的主模型请求生效,作用域是整个 CAE 实例;工具历史等不兼容形态继续旁路。以上手动 auto 流程用于默认的 baseline 实例;启用下面的 Jev shadow 开关后,实例会拒绝 auto 和非空锁档。
|
|
70
|
+
|
|
71
|
+
## Jev shadow(显式启用)
|
|
72
|
+
|
|
73
|
+
此入口已完成离线接线验证和桌面首轮实测:**三条主请求均保持原档位并完成,但两条 Jev 判断超时,稳定性未通过**。逐条结果及此前独立判断器的 8 个真实合成样例见 [Jev 验收记录](JEV_SHADOW_ACCEPTANCE.md)。
|
|
74
|
+
|
|
75
|
+
下面保留真实验收的启动命令。先正常停止旧实验实例;通过自己的正常方式在启动终端提供 `TYPESAFE_API_KEY`,不要把值放到命令参数中。只在新实例的新本地会话中使用无敏感的合成任务:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
node bin/cae.mjs desktop start --model gpt-6-astra --auth chatgpt \
|
|
79
|
+
--enable-upstream --enable-jev
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
开关仅对本次进程生效:将运行时判断器设为 typesafe,不写回磁盘配置;初始 mode 仍遵循配置的 shadow/off,auto 配置拒绝启动。未带开关时继续使用 baseline;若操作者已手动将磁盘 judge.kind 改为 typesafe,则没有开关会拒绝启动,不静默启用第三方。
|
|
83
|
+
|
|
84
|
+
每个启用 Jev 的启动进程最多 8 次判断。未指定超时实验参数时,单次超时最多 1500 ms,配置已有更小上限时继续使用更小值;显式的 2000 ms 实验见下节。达到次数上限后保持来请求档位,记录 `judge_call_budget`;不重试、不切换服务商。off/shadow 切换不重置计数,重启是新一批调用,不是同一次预算。超时或取消的请求仍可能产生服务端费用;次数不是金额保证。
|
|
85
|
+
|
|
86
|
+
启动本身不主动提交测试任务。用户发送合格任务时,有限任务文本会发给 TypeSafe,同时原任务会照常使用原生 ChatGPT 模型额度。不要在这个实例中处理未授权的日常任务或敏感代码;窗口和代理没有按任务自动筛选“是否敏感”的能力。独立 Jev 密钥只供 CAE 判断器使用,模型探针、原生 CLI 和桌面子进程均不继承它。
|
|
87
|
+
|
|
88
|
+
检查状态和报告:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
node bin/cae.mjs desktop status
|
|
92
|
+
node bin/cae.mjs report --config .cae/desktop/config.json
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
预期 running 时包含 `judgeKind=typesafe`、`shadowOnly=true`、`lockedEffort=null`、`judgeCallLimit<=8`,首次尚未提交任务时 `judgeCalls=0`。shadow 只建议、不改档;控制接口拒绝 `control auto` 和 `lock`,返回 `shadow_only_control`。允许 `control off` 暂停判断,再 `control shadow` 恢复剩余预算。
|
|
96
|
+
|
|
97
|
+
`report` 汇总调用和传输;查看具体建议时仅投影 CAE 自己的决策元数据,以下命令不会读取请求正文或登录文件:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
node --input-type=module <<'JS'
|
|
101
|
+
import { readFileSync } from 'node:fs';
|
|
102
|
+
const events = readFileSync('.cae/desktop/events.jsonl', 'utf8').split('\n').filter(Boolean).map(JSON.parse);
|
|
103
|
+
console.table(events.filter(e => e.event === 'decision').slice(-10).map(e => ({
|
|
104
|
+
time: e.time, mode: e.mode, source: e.source, incoming: e.incomingEffort,
|
|
105
|
+
suggested: e.proposedEffort, changed: e.changed, reason: e.reason
|
|
106
|
+
})));
|
|
107
|
+
JS
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
日志是追加式的,核对本次启动时间范围,不把旧实验结果算作本次验收。后续真实验收可用新纯文本会话依次测试:明确拼写修改、虚构并发问题分析、带前文的“继续”;核对 source=judge、建议档位、changed=false 与对应完成结果。发现错误先 off,再 stop,保留脱敏元数据,不自动重试。
|
|
111
|
+
|
|
112
|
+
首轮两次 Jev 超时后,已增加发送/响应头/正文/校验阶段计时,见 [超时诊断说明](JEV_SHADOW_ACCEPTANCE.md)。新字段仅在重启后的代码中生效,旧日志不可追溯补齐;`report` 会按最后观测阶段汇总超时。第二组三条真实分段样本为 795/552/591 ms,均成功,旧超时未复现、原因未知;超时仍为最多 1500 ms。
|
|
113
|
+
|
|
114
|
+
退出与恢复:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
node bin/cae.mjs control off --config .cae/desktop/config.json
|
|
118
|
+
node bin/cae.mjs desktop stop
|
|
119
|
+
# 需要再次运行 baseline 实验时,省略 --enable-jev:
|
|
120
|
+
node bin/cae.mjs desktop start --model gpt-6-astra --auth chatgpt --enable-upstream
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
stop 成功后也可直接回到日常官方桌面;没有全局配置需要恢复。本次功能开发没有替用户停止、重配或重启已有桌面实例。
|
|
124
|
+
|
|
125
|
+
### Jev 开关的离线验证(2026-09-28)
|
|
126
|
+
|
|
127
|
+
基线 `c23877e180d5aa64da5c4f27a44b3fa5f68f0b33` 加本节所在功能提交的源码变更,macOS 27 arm64 / Node v24.16.0。`npm run verify` 通过:188 测试、0 失败/取消/跳过,30 模块语法和 JSON 检查、离线演示通过。覆盖显式开关/缺少密钥、进程级配置不落盘、HTTP 控制拒绝 auto/锁档、请求和 SSE 字节不变、调用上限/较小预算/超时、off 保留与重启回 baseline、原生子进程密钥隔离、脱敏日志及已有退出清理回归。Jev 与模型响应均为合成测试;本轮真实外部调用 0,未启动真实桌面 Jev 实例。
|
|
128
|
+
|
|
129
|
+
13:57:18 +08:00 使用修改后的 doctor/probe 再次查询本机内置 CLI:两者退出码均为 0,CLI 仍为 `0.158.0-alpha.2.1`,`gpt-6-astra` 默认 medium,支持 low/medium/high/xhigh/max/ultra;没有发起生成。原始能力捕获与测试日志只留本机被忽略文件。
|
|
130
|
+
|
|
131
|
+
## Jev auto(受控实验)
|
|
132
|
+
|
|
133
|
+
在用户明确同意实际修改请求档位后,停止旧实验实例,在正常提供独立 Jev 环境变量的终端启动:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
node bin/cae.mjs desktop start --model gpt-6-astra --auth chatgpt \
|
|
137
|
+
--enable-upstream --enable-jev --allow-jev-auto
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
新增开关只开放本进程的 auto/手动控制权限,不自动切模式,不落盘。必须同时指定 `--enable-jev`;启动配置仍须为 shadow/off,磁盘配置为 auto 时继续拒绝启动。已验证的应用签名、CLI 版本、实际能力、provider 预检和子进程密钥隔离完全保留。仅带原有 Jev 开关重启后恢复 shadowOnly=true;省略两个 Jev 开关则回到磁盘的 baseline 配置。
|
|
141
|
+
|
|
142
|
+
在另一终端确认 running、固定模型正确、judgeKind=typesafe、shadowOnly=false、judgeCalls=0、activeRequests=0,然后切换:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
node bin/cae.mjs desktop status
|
|
146
|
+
node bin/cae.mjs control auto --config .cae/desktop/config.json
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
预期 mode=auto、lockedEffort=null,最多 8 次判断。未指定超时参数时,每次最多 1500 ms,更小的既有配置继续有效;状态中的 judgeTimeoutMs 是实际生效值。模式切换不刷新次数。建议不合法、超时或次数耗尽时继续沿用既有控制器的回退规则;显式来请求档位保持不变,未指定档位才使用已核对的 baseline。不支持的请求历史和其他模型仍原样旁路。
|
|
150
|
+
|
|
151
|
+
用独立无敏感目录,在实验窗口中新建本地会话,选择实际探针返回的 `gpt-6-astra` 和 medium,保持桌面选择不变,依次发送并等待完成:
|
|
152
|
+
|
|
153
|
+
1. `不要使用任何工具。把字符串 Helo 改成 Hello,只回复修改后的字符串。`
|
|
154
|
+
2. `不要使用工具。分析虚构调度器:A 被取消后 B 启动,A 的迟到回调覆盖 B 的状态。请给出错误时序、所有权不变量和最小修复方案。`
|
|
155
|
+
|
|
156
|
+
按同一 requestId 关联本机 CAE 元数据:decision 应为 mode=auto、source=judge;建议不同于来请求 medium 时 changed=true,request_prepared/request_sent 的 effort 应与建议一致,随后 HTTP 200 且 response.completed。Jev 可能建议 medium 或超时,不能为得到预期 low/high 自动重试,也不能把未改档记为改档通过。桌面选择器可能继续显示 medium,它表示客户端选择;代理只修改发送请求的 effort。这项验证不证明服务端实际分配的推理量、任务质量或成本收益。
|
|
157
|
+
|
|
158
|
+
完成两条后先暂停判断,再读取脱敏记录;出现错误也立即 off,不自动追加调用:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
node bin/cae.mjs control off --config .cae/desktop/config.json
|
|
162
|
+
node bin/cae.mjs report --config .cae/desktop/config.json
|
|
163
|
+
node bin/cae.mjs desktop stop
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
off 仍经过代理,stop 后按日常方式使用官方桌面,无需恢复全局配置。首轮真实 auto 已验证 medium → high 且正常完成;另一条 Jev 超时,回退 medium 并完成,后续 2000 ms 实验中 medium → low 也已完成。两次实例的 off → stop 清理均通过,详见 [本机记录](LOCAL_ACCEPTANCE.md)。
|
|
167
|
+
|
|
168
|
+
### 可选 2000 ms 实验
|
|
169
|
+
|
|
170
|
+
默认超时没有调整。只有在 `desktop start --enable-jev` 中显式添加 `--jev-timeout-ms 2000`,才将本进程的判断超时设为 2000 ms;参数只接受 1500 或 2000,覆盖本次运行的磁盘 timeout,包括磁盘中更小的值,不写回配置。次数上限不变,不重试、不改变 fetch 连接池或端点。其他命令、缺少 Jev 开关或不合法的值会拒绝,不悄悄忽略。
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
node bin/cae.mjs desktop start --model gpt-6-astra --auth chatgpt \
|
|
174
|
+
--enable-upstream --enable-jev --allow-jev-auto --jev-timeout-ms 2000
|
|
175
|
+
# 另一终端,确认 running、judgeTimeoutMs=2000、judgeCalls=0,再切 auto:
|
|
176
|
+
node bin/cae.mjs desktop status
|
|
177
|
+
node bin/cae.mjs control auto --config .cae/desktop/config.json
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
先只在独立无敏感目录的新本地会话发送上面的拼写任务,固定主模型和客户端 medium。核对 Jev 建议、sent effort、changed 和 completed;若成功降到 low,记为真实降档通过。若建议 medium、超时或旁路,如实记录,不自动重发。同一个成功样例不能证明 2000 ms 优于 1500 ms;不同批次的连接与上下文可能不同,若返回时间仍小于 1500 ms,也不能把成功归功于放宽超时。
|
|
181
|
+
|
|
182
|
+
检查后 off/stop,命令同上。去掉超时参数重新启动,恢复原有磁盘值与 1500 ms 上限;无需回写配置。真实样例以 665 ms 完成 medium → low,自动降档通过;耗时低于原 1500 ms,因此放宽上限的改善效果仍未知。最坏超时等待比默认增加约 500 ms。
|
|
183
|
+
|
|
184
|
+
## 检查和失败行为
|
|
185
|
+
|
|
186
|
+
- 仅接受本机已验证组合:ChatGPT 26.924.22138 / build 11645、内置 codex-cli 0.158.0-alpha.2.1、macOS arm64。应用升级后拒绝启动,需重新验收再更新版本记录;不会自动升级或降级 Codex。
|
|
187
|
+
- 检查官方应用签名,查询真实 model/list,核对配置中的 baseline 和支持集合。
|
|
188
|
+
- 通过 initialize + config/read 检查实际 model/provider、loopback 地址、ChatGPT 认证、环境令牌名和 HTTP/SSE 配置。每次桌面启动 app-server 时都对其真实参数再检查一次,失败就不启动那个原生子进程,不用直连伪装成功。
|
|
189
|
+
- 启动握手超时、端口冲突或退出会触发清理。管理通道为私有、令牌认证的本机 socket;不暴露额外网络控制端口。
|
|
190
|
+
- 主控若被 SIGKILL 或机器突然关机,无法执行正常清理;残留 socket 会阻止新实例启动。此时命令会明确报错,不根据陈旧 PID 猜测并终止进程。该异常路径需要人工核对,尚无自动恢复承诺。
|
|
191
|
+
|
|
192
|
+
原生输出仅用于识别就绪事件,不写原始桌面日志。CAE 自己的元数据事件保存在私有 `.cae/desktop/events.jsonl`;整个 .cae 不提交。CAE 不读取原生登录文件,不写全局 config.toml,不改变审批、沙箱或服务档。
|
|
193
|
+
|
|
194
|
+
## 2026-09-28 本机验证
|
|
195
|
+
|
|
196
|
+
本轮以 `ea3e4b0f73c06a61084d3bb8f814eba5a2a7c1fd` 加本启动器源码补丁进行验证,Node v24.16.0、macOS 27.0 arm64。运行代码新增 desktop supervisor 与 guarded bridge,未更换代理/控制器架构。
|
|
197
|
+
|
|
198
|
+
- 172 项离线测试通过,包括真实子进程的合成 config/read、旧参数作用域缺陷、错误/超时/取消、重复启动、管理认证、端口占用、PID 复用隔离、关闭后重启及启动期间停止。测试不调用真实服务。
|
|
199
|
+
- 本机官方应用签名、固定版本和真实能力查询通过;一条 start 命令到 running,bridgeChecks=2、effectiveProvider=cae、connected=true、shadow + baseline。
|
|
200
|
+
- desktop stop 完成清理;再次启动后向主控发送 SIGINT,验证与终端 Ctrl+C 对应的清理路径。
|
|
201
|
+
- 最终源码再次完成 start → running → stop。四次本机启动均未提交生成任务,代理事件为空。新启动器的启动/停止证据与[此前桌面真实传输验收](DESKTOP_ACCEPTANCE.md)分别记录,不能把零生成启动检查说成新增的真实生成验收。
|
|
202
|
+
|
|
203
|
+
上述测试是本机结果;发布后的 CI 必须按新提交单独核对。原始输出仅留被忽略的 *.local.txt / *.local.json。
|
|
204
|
+
|
|
205
|
+
最终本机复查时间:2026-09-28 12:47:09,Asia/Shanghai。用于识别被测源码的 SHA-256:
|
|
206
|
+
|
|
207
|
+
| 文件 | SHA-256 |
|
|
208
|
+
|---|---|
|
|
209
|
+
| src/desktop.mjs | aa77a2c3f55ca1e138ccefe87581958614a2866a23d9c92d434a28304bfcf80e |
|
|
210
|
+
| bin/cae-desktop-bridge.mjs | cd6ad6eb35a146f592248644847b7bc59ded5bb2f9e3a195bd4cfb07830086be |
|
|
211
|
+
| bin/cae.mjs | bc4b766fc74572767633a4db51bf8c81cc4a1485d7e1471d59c710e805977789 |
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Jev evaluation and shadow acceptance
|
|
2
|
+
|
|
3
|
+
The independent evaluator passed bounded real fixture protocol checks. A later three-case desktop shadow batch also passed. Earlier timeouts remain unresolved. Real auto upshift/downshift results are recorded separately in [local acceptance](LOCAL_ACCEPTANCE.md).
|
|
4
|
+
|
|
5
|
+
This page summarizes the [original Chinese record](JEV_SHADOW_ACCEPTANCE.zh-CN.md). All test times below are 2026-09-28, UTC+08:00. Original samples included Chinese tasks; translating these documents does not establish English fixture results.
|
|
6
|
+
|
|
7
|
+
## Evaluator-only fixture batch
|
|
8
|
+
|
|
9
|
+
At 13:46:48–13:46:52, source `6763d15e5d63e6d8fb7149aa8bf55c92ea2ccab7` made eight authorized real Jev evaluations and zero executor-generation calls. Two additional fixtures bypassed evaluation. All ten retained the original executor body; no automatic retries were performed.
|
|
10
|
+
|
|
11
|
+
The request alias was `jev-latest`; all eight responses reported `jev-1.13.0`. Observed latency was 266–1424 ms, median 377.5 ms. Known evaluator usage totaled 7209 input and 832 output tokens. Every returned lease was 1.
|
|
12
|
+
|
|
13
|
+
Protocol success is not semantic accuracy. A follow-up without sufficient context still received diagnostic confidence 0.71; uncertainty handling remains unaccepted. These cases did not execute the proposed tasks, establish task quality, or validate real multi-generation lease reuse. The controller does not reject decisions based on a confidence threshold.
|
|
14
|
+
|
|
15
|
+
To preview the bounded fixture plan using a real capability capture:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
node scripts/jev-shadow.mjs --capabilities capabilities.local.json \
|
|
19
|
+
--model "$MODEL_ID" > jev-shadow-plan.local.json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Review that local plan. Only after explicit authorization and normal `TYPESAFE_API_KEY` setup, supply the exact newly approved plan hash, rather than copying a historical hash:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node scripts/jev-shadow.mjs --capabilities capabilities.local.json \
|
|
26
|
+
--model "$MODEL_ID" --enable-jev --approved-plan "$APPROVED_PLAN_HASH" \
|
|
27
|
+
> jev-shadow-result.local.json
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
A completed runner reports eight judge calls, zero executor calls, and protocol/unchanged-body checks. Semantic review is still separate. Captures and results must remain local; a timed-out call may still incur usage.
|
|
31
|
+
|
|
32
|
+
## First desktop shadow batch: partial pass
|
|
33
|
+
|
|
34
|
+
Source `4e4dfd4d6232f11b5975604fcb815b9aea6dca3d`, [matching CI](https://github.com/ppxu/codex-adaptive-effort/actions/runs/36384188894), 188 offline tests. Same macOS/app/CLI combination as [local acceptance](LOCAL_ACCEPTANCE.md).
|
|
35
|
+
|
|
36
|
+
| Case, 14:02–14:03 | Jev outcome | Actual executor effort | Transport |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| Spelling | Timeout, 1506 ms | medium unchanged | HTTP 200 + completed |
|
|
39
|
+
| Concurrency analysis | high, 1174 ms | medium unchanged | HTTP 200 + completed |
|
|
40
|
+
| Follow-up | Timeout, 1502 ms | medium unchanged | HTTP 200 + completed |
|
|
41
|
+
|
|
42
|
+
Shadow preservation and fallback passed; timely evaluation for all three cases failed. The two timeouts predated stage instrumentation, so their phase is unknown. Known evaluator input usage was 945 tokens from the successful case; timeout usage was unknown. Desktop metadata did not capture the evaluator response version or output usage.
|
|
43
|
+
|
|
44
|
+
## Second desktop shadow batch: passed, no timeout reproduced
|
|
45
|
+
|
|
46
|
+
Runtime source `3da3758` added diagnostics without changing fetch transport, pooling, request bytes, deadline or retry behavior. It passed 195 offline tests and [matching CI](https://github.com/ppxu/codex-adaptive-effort/actions/runs/36385744553). The later sampling HEAD included documentation-only changes.
|
|
47
|
+
|
|
48
|
+
| Case, 14:26–14:30 | Jev duration | Recommendation | Actual effort / result |
|
|
49
|
+
| --- | --- | --- | --- |
|
|
50
|
+
| Spelling | 795 ms | low | medium unchanged, completed |
|
|
51
|
+
| Concurrency analysis | 552 ms | high | medium unchanged, completed |
|
|
52
|
+
| Follow-up | 591 ms | high | medium unchanged, completed |
|
|
53
|
+
|
|
54
|
+
All three returned lease 1. Known Jev input usage totaled 3712 tokens. One additional different-model request bypassed Jev and completed. Three successes do not establish a stable latency distribution or explain the earlier failures.
|
|
55
|
+
|
|
56
|
+
## Timing boundaries and later evidence
|
|
57
|
+
|
|
58
|
+
The observer records cumulative request creation, send-start, body-sent, response-header, body-completion and validation times. It does not distinguish DNS/TCP/TLS independently, prove socket reuse, or measure pure server inference. Unknown stages remain unknown; older logs cannot be backfilled.
|
|
59
|
+
|
|
60
|
+
A later auto trial timed out after 1511 ms with only request creation observed. Another auto request successfully changed medium to high, and a subsequent 2000 ms trial changed medium to low after only 665 ms. See [the exact auto evidence](LOCAL_ACCEPTANCE.md). None of these observations proves that a larger timeout solves the underlying issue.
|
|
61
|
+
|
|
62
|
+
Use the [desktop guide](DESKTOP_LAUNCHER.md) for bounded shadow/auto trials and recovery. Keep model/auth/service-tier selection fixed, review only sanitized metadata, and do not retry solely to obtain a desired recommendation.
|