fix(codex): 保留原生 fork 失败原因与清理状态 - #4018
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
| Filename | Overview |
|---|---|
| packages/maker-core/src/agents/codex/fork-error.ts | 新增 fork 阶段及瞬时连接错误分类;裸 401/403 文本匹配可能把端口号误判为认证状态。 |
| packages/maker-core/src/agents/codex/index.ts | 为 fork 生命周期记录失败阶段,保留控制信号和首个异常,并在 finally 中清理子线程及隔离 host。 |
| apps/desktop/src/main/maker-ipc/codexProviderThreadRelink.ts | 增加最多两次的安全 fork 尝试、尝试次数包装及脱敏失败描述。 |
| apps/desktop/src/main/maker-ipc/register.ts | 将有限重试接入 provider relink,并按失败阶段记录日志和生成有界 IPC 诊断。 |
| packages/maker-core/src/agents/codex/fork-error.test.ts | 覆盖连接码、认证/取消排除和循环 cause,但未覆盖网络错误文本中的 401/403 端口号。 |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[准备源线程] --> B[创建隔离 host]
B --> C[启动 host]
C -->|明确瞬时连接错误且清理成功| D[等待 1 秒]
D -->|仅一次| B
C --> E[发送 thread/fork]
E -->|失败| F[禁止自动重放]
E -->|成功| G[预留替代线程清理]
G --> H{路由 CAS 成功?}
H -->|是| I[提交目标 provider 路由]
H -->|否| J[清理替代线程并保留旧路由]
Prompt To Fix All With AI
### Issue 1
packages/maker-core/src/agents/codex/fork-error.ts:54-58
**端口号被误判为认证状态**
`transportCode` 会把错误文本中任何独立的 `401` 或 `403` 都当成认证失败。例如,本地代理报出 `connect ECONNREFUSED 127.0.0.1:401` 时,这里的检查会先命中端口号并返回 `null`,导致本应识别为瞬时连接错误的 `ECONNREFUSED` 不会触发这次新增的安全重试。建议只将结构化 HTTP 状态,或带有明确 HTTP/认证语义的 401、403 文本视为认证失败。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "fix(codex): 保留跨来源切换异常并限制安全重试" | Re-trigger Greptile
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
|
@dashhuang 👋 这个 PR 目前与 请在本地 merge 最新的 |
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
86c089c to
8c7eda6
Compare
MagicLizi
left a comment
There was a problem hiding this comment.
独立审查通过(standard):Codex 隔离 fork 失败会带上 stage/cause,cleanup 失败不再盖掉原错误。无 P0/P1。
|
合了。隔离 fork 失败以后还能看见是哪一步挂的、清理有没有盖掉原因——排 Codex 原生 fork 问题会少绕一圈。 |
这次改了什么
摘要
Codex 一次性 fork 在操作失败后仍会清理子线程。如果清理同时失败,原来的 finally 会覆盖最初异常,调用方失去真正的失败原因。本 PR 保留操作异常及其阶段,清理失败只增加诊断标记;历史恢复、认证、源线程准备受阻和取消信号保持原有身份。
变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
UI 变化
不涉及。
怎么验证的
自动验证
覆盖启动失败后 host 清理、启动与退出同时失败、fork 响应丢失、rollback 与子线程清理同时失败,以及准备受阻和取消信号身份。保留既有正常 fork、索引历史保护与共享 host 行为测试。
手工验证
本轮未启动真实 Desktop 或修改用户原生历史;本轮以同步后的代码和自动测试验证集成。
未执行的验证
未进行真实双账号 Desktop UI 切换或 Windows 实机验证。先前旧版跨来源 fork 的模拟重试实验不作为本次最终实现的验证依据;最新提交由 CI 继续验证 Linux/Windows。
风险
风险分类
影响与回滚
提交前检查
git commit -s,见 DCO)