fix: consolidated protocol restoration, playwright removal and port conflict fix#78
Conversation
|
麻烦rebase一下,更改了很多 |
c9e0084 to
9b95a9e
Compare
PR #78 Rebase & Hardening Report[Rebase & Architectural Fixes]
[Verification Results]
代码已具备合入 fix1 的条件,请查阅。 |
🚀 稳定性硬化与性能优化总结 (2026-03-24)本 PR 已同步完成针对 OpenAI 注册引擎的全量硬化工作。以下是本次追加提交(Commit 1. 核心逻辑修复与时序对齐
2. 性能瓶颈优化 (71s -> <10s)
3. 架构健壮性增强
4. 反馈机制升级
本 PR 状态:功能已验证闭环,建议合并。 |
|
@cnlimiter hey bro, it works! |
|
关于 Outlook 邮件服务架构的补充说明: 在本 PR 的硬化过程中,我们选择暂时恢复了 多提供者架构基线(包含 IMAP_NEW, IMAP_OLD 和 Graph API)。 决策依据在针对 v2.0.0 的高并发注册压力测试中,我们发现单一的 IMAP_NEW 模式虽然架构精简且逻辑清晰,但在面对特定地区的 403/400 错误或协议层面的动态拦截时,缺乏足够的 协议冗余(Fallback)。为了确保注册引擎在生产环境下的 100% 自动化闭环,我们决定优先保障协议面的完整性,带回多路径重试机制。 后续研究计划我非常认同此前关于『单一 IMAP_NEW + 连接池 + IMAP IDLE』的重构思路,其在降低认证门槛和提升收信实时性方面具有显著潜力。 我计划在本项目完成本阶段硬化合并后,专门开设一个独立的实验性分支(Experimental Branch),用于深度复现和验证该『精简/高性能』思路在极端网络环境下的表现。若后续能解决该思路下的稳定性瓶颈,我们将再次探讨架构收敛的可能性。 目前,本 PR 的重心将锁定在 『解决挂起、消除停顿、确保合规』 这一核心稳定性目标上。 |
- 后端:GET /api/email-services/{id}/inbox 端点,通过 IMAPNewProvider 读取收件箱
- 前端:收件箱列表模态框(支持仅未读筛选、刷新)
- 前端:邮件正文弹窗
- Outlook 操作列新增「收件箱」按钮
- imap_new: 连接池并发安全(锁外建连、占位防重复)、IDLE tag 改用独立计数器避免私有API、get_recent_emails 新增 since_minutes 参数 - service.py: 同步更新 - accounts.py: Outlook 收件箱配置按 email 不区分大小写匹配、不受 enabled 限制 - settings.js: Outlook 批量导入前端校验要求四字段且 client_id/refresh_token 非空
使用 Outlook 邮箱服务时,第8步仅生成密码但不向 OpenAI 提交密码注册请求,直接进入后续验证码流程
Outlook 邮箱由 OpenAI 直接发邮件,无需调用 _send_verification_code(),跳过该步骤直接等待收件
跳过 _send_verification_code() 时未设置 _otp_sent_at,导致轮询时 since_minutes=None 只搜 UNSEEN 邮件,已读邮件被忽略。补充时间戳后走 SINCE 时间范围搜索,避免漏检
…and fully remove deprecated playwright dependency
c01e849 to
3cd08b4
Compare
Summary
本 PR 汇总了当前分支相对
upstream/fix1的 6 个独有提交,按upstream/fix1..fix/all-consolidated-fixes统计共涉及 57 个文件,累计+3936 / -1648。整体目标不是继续叠加零散补丁,而是一次性把当前生产可运行链路收束为一套可审计、可回归、可部署的基线:恢复 OpenAI 当前注册协议的稳定请求形态,拆薄已经过度耦合的注册/登录/任务恢复路径,并消除 WebUI 端口与 Docker 运行配置之间的残余冲突。从结果上看,这个分支同时覆盖了三类问题:一是修复 403/400 这类协议漂移导致的硬失败;二是把邮箱限流、OTP 二阶段、批量任务状态、Outlook provider 选择等状态机问题从“大函数隐式耦合”收敛为更明确的控制边界;三是把 PR 头部代码显式锚定到当前 Docker 生产容器正在运行的代码路径,避免“源码已改、线上仍跑旧逻辑”的认知偏差。
Key Changes
协议层修复
src/core/register.py、src/core/login.py、src/config/constants.py中恢复当前协议基线,重新对齐注册请求体、密码提交流程、页面类型判断、Workspace 解析和 OAuth 回调处理,修正先前因请求形态漂移引发的 403/400 注册失败。ip_check、邮箱准备、注册提交、两次 OTP、账户创建、OAuth 重入、Workspace 解析与回调落库等关键节点,使失败能够按阶段分类,而不是继续被压扁成笼统终态。src/services/base.py、src/services/temp_mail.py、src/web/routes/registration.py中补齐邮箱供应商退避与限流切换语义:429 触发 provider backoff 与 circuit breaker,OTP 拉取支持基于otp_sent_at的新旧邮件过滤,邮箱服务切换从“失败后重试”改为“带状态的有条件切换”。tests/test_register_protocol_baseline.py、tests/test_email_service_backoff.py、tests/test_tempmail_service.py、tests/test_registration_email_service_failover.py、tests/test_task_recovery.py等测试文件,对协议体、限流退避、OTP 锚点过滤、任务恢复和邮箱 failover 行为建立固定断言。架构瘦身
src/core/login.py,减少RegistrationEngine对登录重定向、Workspace 选择、回调收口等行为的横向耦合,保留行为等价但压缩职责面。src/web/task_manager.py、src/web/routes/websocket.py、src/web/app.py、src/database/crud.py中收敛任务状态管理:服务启动时会显式失败未完成历史任务,WebSocket 可从数据库恢复状态与历史日志,token 同步状态不再依赖隐式副作用,而是由真实 token 字段推导。src/services/outlook/service.py之上拆出imap_old、imap_new、graph_api三类 provider,并引入 health check、priority 和更清晰的 token/scope 映射,降低单实现承载全部路径的复杂度。pyproject.toml、requirements.txt与 README 说明,避免继续保留“默认不用、但会误导依赖图和运行预期”的历史分支。部署冲突解决
Dockerfile、docker-compose.yml、README.md、.github/workflows/build.yml中完成 WebUI 端口与发布配置统一,默认运行端口固定为15555,补齐 compose 健康检查,并同步修正 release 产物命名与部署说明。src/config/settings.py中将openai_redirect_uri有意保持为http://localhost:1455/auth/callback,使 PR 头部与当前 Docker 生产容器实际运行的回调配置一致;这一步不是回退部署端口,而是避免源码与线上生效代码再次漂移。cliproxyapi端口占用相关的部署冲突,同时保留当前生产容器已验证可工作的运行口径。Verification
codex-manager-webui-1容器,逐项比对了分支HEAD与容器内关键运行文件的 MD5,确认以下生产关键路径文件完全一致:src/config/settings.py:afd364607c8b6cb0f27a6097f5fe180dsrc/core/register.py:77e8429e82d01ce70efc303a8d294c52src/web/routes/registration.py:06f0fad3cf01afb37f234ee929c0c1d4docker inspect同时确认运行中的codex-manager-webui-1处于healthy状态,容器环境变量中WEBUI_PORT=15555已生效;这与本分支的部署配置一致,并与上面的 MD5 比对一起证明本 PR 已锚定到当前生产容器实际执行的代码路径。