[工程][Runtime] 显式模块化 Background、Content Script 与 Provider Bridge #22

Open
opened 2026-09-15 22:03:45 +08:00 by CoderLambert · 4 comments
CoderLambert commented 2026-09-15 22:03:45 +08:00 (Migrated from github.com)

Execution State

IN PROGRESS

Parent: #16

Observed base: main@9495b2a

Execution base: #17 @ 9868142 and #20 @ 433f216 on refactor/foundation-wxt

Lane: Extension Runtime / Provider Bridge

Owner: one runtime writer; consumes #20 contracts and #17 WXT/build baseline

Problem

Service Worker、content providers 和 Frame Bridge 过去依赖 importScriptsglobalThis 及 Manifest 文件顺序。WXT 迁移如果直接把这些文件打包,可能改变 Provider adapter 注册、Bridge 顺序、Grok tab 路由或消息安全边界。

Target

将 Background、Content Script 和 Provider Bridge 渐进迁移到显式模块依赖,在保持运行时行为一致的前提下消除生成包对隐式 Manifest 脚本顺序的依赖。

Invariants

  • 保持 document_idleall_frames 和现有 Provider content-script 顺序语义。
  • Provider selector 继续只存在于对应 content/providers/ adapter。
  • 保持 iframe Provider 的 send/collect/new-chat 行为。
  • Grok 继续使用受控顶层 tab、allowlisted tab command 和既有认证边界。
  • 保留 source、origin、providerId、command、requestId、sender 和 timeout 校验。
  • 不引入后台抓取、MutationObserver 流式同步或 Provider HTML 注入。
  • 不扩大权限,不改变 DNR 范围,不持久化 credential 或 response snapshot。
  • 不修改 #20 定义的消息字段和共享契约。

Execution Scope

Implemented:

  • entrypoints/background.ts
  • entrypoints/content.ts
  • source-compatible service-worker-loader.js
  • Service Worker/Provider/Frame Bridge explicit bundle composition
  • generated content-script registration and runtime-order verification
  • Provider/Service Worker focused test updates

Out of scope and unchanged:

  • React/UI、Workspace state/UI
  • 新 Provider、消息命令或 selector 重写
  • Safari 运行时支持
  • permissions、DNR、credential/response persistence

Acceptance Criteria

  • Background 和 content scripts 使用显式 import;生成包不再使用 source Manifest 的 legacy script list。
  • Provider adapter 注册和 Frame Bridge 初始化顺序在构建产物中可验证。
  • 现有 iframe Provider 的发送、收集和 new-chat 逻辑未改动,相关 Provider/Bridge 测试保持通过。
  • Grok 顶层 Tab 路由和消息校验保持不变,Service Worker auth/top-level bridge 测试通过。
  • 不新增权限、不改变 DNR、不持久化响应或凭据。
  • credential-free Browser Smoke 在当前环境通过;当前 Chromium 缺少 libnspr4.so,无法启动,待依赖完整的 CI/开发机补跑。

Validation

  • pnpm typecheck
  • npm run check
  • npm test 35/35
  • git diff --check
  • pnpm build:chrome generated background.js and bundled content-scripts/content.js
  • pnpm package:extension ZIP and SHA-256 generated
  • sha256sum -c dist/ai-parallel-browser-extension-v2.1.4.zip.sha256
  • unzip -t dist/ai-parallel-browser-extension-v2.1.4.zip
  • Browser Smoke ⚠️ blocked by missing libnspr4.so

Handoff

STATUS: PARTIAL
ISSUE: #22
LANE: Extension Runtime / Provider Bridge
EXECUTION_BASE: #17 @ 9868142 and #20 @ 433f216
BRANCH: refactor/foundation-wxt
HEAD: 790005e
OWNED_SCOPE: WXT background/content entrypoints, source compatibility loader, runtime bundle verification, focused runtime tests
SENSITIVE_SURFACES_TOUCHED: Manifest background source path, generated content-script registration, Provider/Bridge bundle order; selectors/message fields/permissions/DNR unchanged
AC_STATUS: 6/7 complete; Browser Smoke pending environment dependency
VALIDATION: typecheck/check/test 35/35/diff/build/package/checksum/archive all pass
SECURITY_PERMISSION_DELTA: none
KNOWN_RISKS: source runtime remains JS-compatible during gradual migration; generated bundle smoke still needs a dependency-complete browser environment
BLOCKERS: Chromium cannot start because libnspr4.so is missing
NEXT: integrate #17/#20/#22 to main, rerun credential-free browser smoke, then hand off #18 Popup/UI

Progress

  • [PLAN] 使用 WXT background/content entrypoints,通过显式 side-effect imports 复用现有 Provider DOM adapters 和 Bridge,保持源码兼容 loader。
  • [DECISION] 只迁移运行时入口组合和构建产物验证,不重写 Provider selector、消息字段或 Workspace UI。
  • [DONE-ON-BRANCH] 790005e feat(runtime): add explicit WXT runtime entrypoints;分支验证完成,等待集成和浏览器环境补验。
## Execution State IN PROGRESS Parent: #16 Observed base: `main@9495b2a` Execution base: #17 @ 9868142 and #20 @ 433f216 on `refactor/foundation-wxt` Lane: Extension Runtime / Provider Bridge Owner: one runtime writer; consumes #20 contracts and #17 WXT/build baseline ## Problem Service Worker、content providers 和 Frame Bridge 过去依赖 `importScripts`、`globalThis` 及 Manifest 文件顺序。WXT 迁移如果直接把这些文件打包,可能改变 Provider adapter 注册、Bridge 顺序、Grok tab 路由或消息安全边界。 ## Target 将 Background、Content Script 和 Provider Bridge 渐进迁移到显式模块依赖,在保持运行时行为一致的前提下消除生成包对隐式 Manifest 脚本顺序的依赖。 ## Invariants - 保持 `document_idle`、`all_frames` 和现有 Provider content-script 顺序语义。 - Provider selector 继续只存在于对应 `content/providers/` adapter。 - 保持 iframe Provider 的 send/collect/new-chat 行为。 - Grok 继续使用受控顶层 tab、allowlisted tab command 和既有认证边界。 - 保留 source、origin、providerId、command、requestId、sender 和 timeout 校验。 - 不引入后台抓取、MutationObserver 流式同步或 Provider HTML 注入。 - 不扩大权限,不改变 DNR 范围,不持久化 credential 或 response snapshot。 - 不修改 #20 定义的消息字段和共享契约。 ## Execution Scope Implemented: - `entrypoints/background.ts` - `entrypoints/content.ts` - source-compatible `service-worker-loader.js` - Service Worker/Provider/Frame Bridge explicit bundle composition - generated content-script registration and runtime-order verification - Provider/Service Worker focused test updates Out of scope and unchanged: - React/UI、Workspace state/UI - 新 Provider、消息命令或 selector 重写 - Safari 运行时支持 - permissions、DNR、credential/response persistence ## Acceptance Criteria - [x] Background 和 content scripts 使用显式 import;生成包不再使用 source Manifest 的 legacy script list。 - [x] Provider adapter 注册和 Frame Bridge 初始化顺序在构建产物中可验证。 - [x] 现有 iframe Provider 的发送、收集和 new-chat 逻辑未改动,相关 Provider/Bridge 测试保持通过。 - [x] Grok 顶层 Tab 路由和消息校验保持不变,Service Worker auth/top-level bridge 测试通过。 - [x] 不新增权限、不改变 DNR、不持久化响应或凭据。 - [ ] credential-free Browser Smoke 在当前环境通过;当前 Chromium 缺少 `libnspr4.so`,无法启动,待依赖完整的 CI/开发机补跑。 ## Validation - `pnpm typecheck` ✅ - `npm run check` ✅ - `npm test` ✅ 35/35 - `git diff --check` ✅ - `pnpm build:chrome` ✅ generated `background.js` and bundled `content-scripts/content.js` - `pnpm package:extension` ✅ ZIP and SHA-256 generated - `sha256sum -c dist/ai-parallel-browser-extension-v2.1.4.zip.sha256` ✅ - `unzip -t dist/ai-parallel-browser-extension-v2.1.4.zip` ✅ - Browser Smoke ⚠️ blocked by missing `libnspr4.so` ## Handoff ```text STATUS: PARTIAL ISSUE: #22 LANE: Extension Runtime / Provider Bridge EXECUTION_BASE: #17 @ 9868142 and #20 @ 433f216 BRANCH: refactor/foundation-wxt HEAD: 790005e OWNED_SCOPE: WXT background/content entrypoints, source compatibility loader, runtime bundle verification, focused runtime tests SENSITIVE_SURFACES_TOUCHED: Manifest background source path, generated content-script registration, Provider/Bridge bundle order; selectors/message fields/permissions/DNR unchanged AC_STATUS: 6/7 complete; Browser Smoke pending environment dependency VALIDATION: typecheck/check/test 35/35/diff/build/package/checksum/archive all pass SECURITY_PERMISSION_DELTA: none KNOWN_RISKS: source runtime remains JS-compatible during gradual migration; generated bundle smoke still needs a dependency-complete browser environment BLOCKERS: Chromium cannot start because libnspr4.so is missing NEXT: integrate #17/#20/#22 to main, rerun credential-free browser smoke, then hand off #18 Popup/UI ``` ## Progress - [PLAN] 使用 WXT background/content entrypoints,通过显式 side-effect imports 复用现有 Provider DOM adapters 和 Bridge,保持源码兼容 loader。 - [DECISION] 只迁移运行时入口组合和构建产物验证,不重写 Provider selector、消息字段或 Workspace UI。 - [DONE-ON-BRANCH] `790005e feat(runtime): add explicit WXT runtime entrypoints`;分支验证完成,等待集成和浏览器环境补验。
CoderLambert commented 2026-09-16 03:32:18 +08:00 (Migrated from github.com)

[HANDOFF]\nSTATUS: PARTIAL\nISSUE: #22\nBRANCH: refactor/foundation-wxt\nHEAD: 71d0160 (pushed)\n\nWXT background/content/provider bridge 显式 entrypoints 与运行时验证保持稳定;Workspace React drawer 通过既有 legacy runtime/action bridge 工作,没有修改 Provider selector、消息字段、Grok tab 路由、sender/origin/source 校验或权限。最新三浏览器 build/verify/package/checksum/unzip 全通过。\n\n当前仍 OPEN:credential-free browser smoke 待依赖完整环境执行;本地环境仍无法启动 Chromium(libnspr4.so)。

[HANDOFF]\nSTATUS: PARTIAL\nISSUE: #22\nBRANCH: refactor/foundation-wxt\nHEAD: 71d0160 (pushed)\n\nWXT background/content/provider bridge 显式 entrypoints 与运行时验证保持稳定;Workspace React drawer 通过既有 legacy runtime/action bridge 工作,没有修改 Provider selector、消息字段、Grok tab 路由、sender/origin/source 校验或权限。最新三浏览器 build/verify/package/checksum/unzip 全通过。\n\n当前仍 OPEN:credential-free browser smoke 待依赖完整环境执行;本地环境仍无法启动 Chromium(libnspr4.so)。
CoderLambert commented 2026-09-16 03:33:29 +08:00 (Migrated from github.com)

[PR OPEN]\n集成 PR 已创建:https://github.com/CoderLambert/ai-parallel/pull/23\n\n当前分支 HEAD: 71d0160,已推送 origin/refactor/foundation-wxt。开发期验证已完成:typecheck/check、42/42 unit、Chrome/Edge/Firefox build/verify/package、SHA-256、unzip -t。浏览器加载/E2E 和认证 smoke 按执行约定留待最终合并前,由维护者集中执行;本地 Chromium 仍受 libnspr4.so 缺失影响。

[PR OPEN]\n集成 PR 已创建:https://github.com/CoderLambert/ai-parallel/pull/23\n\n当前分支 HEAD: 71d0160,已推送 origin/refactor/foundation-wxt。开发期验证已完成:typecheck/check、42/42 unit、Chrome/Edge/Firefox build/verify/package、SHA-256、unzip -t。浏览器加载/E2E 和认证 smoke 按执行约定留待最终合并前,由维护者集中执行;本地 Chromium 仍受 libnspr4.so 缺失影响。
CoderLambert commented 2026-09-16 03:37:55 +08:00 (Migrated from github.com)

[PROGRESS]\nHEAD: b3db136 (pushed)\n\nPR CI 暴露的 Browser Smoke source-checkout 与 React generated artifact 不一致问题已处理:workflow 现在手动触发并先执行 pnpm build:chrome,再针对 dist/chrome-mv3 运行 smoke;开发期不自动执行 E2E。Runtime bundle/权限边界未改变。

[PROGRESS]\nHEAD: b3db136 (pushed)\n\nPR CI 暴露的 Browser Smoke source-checkout 与 React generated artifact 不一致问题已处理:workflow 现在手动触发并先执行 pnpm build:chrome,再针对 dist/chrome-mv3 运行 smoke;开发期不自动执行 E2E。Runtime bundle/权限边界未改变。
CoderLambert commented 2026-09-16 03:42:28 +08:00 (Migrated from github.com)

[VALIDATION]\n\nHEAD: b3db136(已推送)\nPR: https://github.com/CoderLambert/ai-parallel/pull/23\n\nWXT Background/Content explicit entrypoints、Provider bridge bundle verification 和 existing runtime boundary 已完成;未修改 selector、message fields、Grok tab route、sender/origin/source 校验、权限或 DNR。远程 CI 全部通过,本地 npm test 43/43。\n\n状态:实现完成,Issue 保持 OPEN 等待 PR 合并。credential-free Browser Smoke 按用户约定延后到最终环境;本机缺少 libnspr4.so,未宣称浏览器 E2E 通过。

[VALIDATION]\n\nHEAD: b3db136(已推送)\nPR: https://github.com/CoderLambert/ai-parallel/pull/23\n\nWXT Background/Content explicit entrypoints、Provider bridge bundle verification 和 existing runtime boundary 已完成;未修改 selector、message fields、Grok tab route、sender/origin/source 校验、权限或 DNR。远程 CI 全部通过,本地 npm test 43/43。\n\n状态:实现完成,Issue 保持 OPEN 等待 PR 合并。credential-free Browser Smoke 按用户约定延后到最终环境;本机缺少 libnspr4.so,未宣称浏览器 E2E 通过。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: lambert/ai-parallel#22