Skip to content

feat: 完善用户脚本热重载与启动自查 - #1730

Open
130040167 wants to merge 2 commits into
BigPizzaV3:mainfrom
130040167:codex/user-script-reload-v2
Open

feat: 完善用户脚本热重载与启动自查#1730
130040167 wants to merge 2 commits into
BigPizzaV3:mainfrom
130040167:codex/user-script-reload-v2

Conversation

@130040167

@130040167 130040167 commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

更新内容

  • 将用户脚本自动热重载改为事件驱动,安装、启用、禁用或删除脚本后立即刷新当前 Codex 页面。
  • 在管理工具的脚本市场中增加手动“热重载”按钮,方便脚本开发调试。
  • reload 前发送 cleanup 事件并重建脚本运行时注册表,禁用或删除脚本后可以清理旧状态。
  • bridge 注入完成后执行一次有限启动自查;发现启用脚本未注册时自动补载,避免偶发启动漏加载。
  • 修复调试端口同时包含 Codex 主页面和管理工具时,CDP 目标可能选错的问题。

启动自查策略

  • 启动后最多检查 3 次。
  • 只有脚本注册表不存在或缺少应启用脚本时才 reload。
  • 脚本已经执行但自身报错时不会重复运行。
  • renderer target 或脚本配置变化后,旧自查任务会自动退出。

验证

  • cargo fmt --check
  • cargo test -p codex-plus-core --test bridge_routes
  • cargo test -p codex-plus-core --test cdp_bridge
  • cargo test -p codex-plus-manager --test windows_subsystem
  • cargo test -p codex-plus-launcher --no-run
  • npm run check
  • npm test
  • npm run vite:build

本地实际启动验证中,启动自查在第 1 次检查通过,bridge 与 helper 状态正常。

@130040167
130040167 force-pushed the codex/user-script-reload-v2 branch from cd1a5b1 to 2dc9368 Compare July 31, 2026 16:04
@130040167
130040167 force-pushed the codex/user-script-reload-v2 branch from 2dc9368 to 1092422 Compare July 31, 2026 17:15
@BigPizzaV3

Copy link
Copy Markdown
Owner

维护者审查:当前“热重载/清理”契约不完整,会让现有脚本重复执行并遗留副作用,暂不建议直接合并。

build_reload_bundle 的 prelude 只做了两件事:

  • 广播新的 codex-plus-user-scripts-before-reload 事件;
  • window.__codexPlusUserScripts 重置为空 registry。

但现有 loader 的 wrap_script 只登记 status,没有保存 cleanup 回调;已安装脚本也没有被要求监听这个新增事件。因此脚本之前创建的 DOM、setInterval、observer、window/document event listeners 等仍然存在。紧接着重新执行 bundle 会再注册一套。禁用或删除脚本时同样只清 registry,实际功能可能继续运行到页面刷新。

这与 PR 描述中的“禁用或删除脚本后可以清理旧状态”不一致,也会使手动“热重载”按钮在多数现有脚本上产生重复 UI/重复请求。

建议先定义可执行的生命周期契约,例如 registry 为每个脚本保存可选 cleanup,reload 时逐个调用并隔离异常;市场脚本可通过统一 API 注册 teardown。对于无法提供 cleanup 的旧脚本,UI 应明确只能整页 reload,不能声称已热重载成功。至少补一个脚本注册 DOM + listener + timer,禁用/重载后断言旧副作用已被清除且只剩一个实例的集成测试。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants