# B 分工原生反编译笔记：AI 业务与原生业务

日期：2026-10-27。目标：`C:\Users\tjzhong\AppData\Local\Tabbit\Application\1.18.21.0\Tabbit.dll`；SHA-256：`a10ee34ead4a08c906e09f3dd4449042fb084a69ce59210b1c8cee815723bf3c`。只报告本分工，不生成父任务 HTML、不改共享索引。

本范围的核心结论是新增服务/观察者/API/专属 transport；CDP 桥还在接入边界做策略拦截与部分协议代答。没有证据支持把这些写成 Chromium 内核整体替换，也不能据此说 Chromium 全部未改。

完整结构化结论及函数、ID、stdout/stderr、状态清单见 [b-business-findings.json](C:/Users/tjzhong/AppData/Local/Tabbit/business-research/evidence/b-business-findings.json)。B-SCHEMA/B-JS/B-PAK/B-UPSTREAM 是本地静态证据编号，不是 REA ID。

## AI业务

### 本地 Agent 推理网关（B-AI-GATEWAY）

**接入判断：** 新增浏览器进程业务网关和 localhost HTTP 适配层。确定性：high。没有证据证明替换 Chromium 网络栈；复用了异步网络/回调形状，但具体 URLLoader 类型仍是推断。

技术路径：

- 本地 HTTP 路由函数读取 Host 和 authorization，比较 127.0.0.1:端口及 Bearer 凭据，失败返回 local_agent_access_denied。
- 模型目录分支使用 ETag、X-Tabbit-Applied-Catalog-Revision 和 private,no-cache；推理分支检查模型是否已发布、JSON 对象、stream、parallel_tool_calls 和 tools 数组。
- Responses 分支有 0x2000001 边界（32 MiB 以内）和同一 loopback 连接不可重叠请求的检查；还调用请求隐私过滤路径，但过滤 helper 内部未恢复。
- 令牌响应只在请求成功/HTTP 200/有正文条件满足后解析 accessToken、tokenType、expiresIn、scope、tokenJti，显式拒绝非法 JSON、字段或 scope 不完整。
- 签名后的请求构造 /api/v1/local-agent-runtime/responses，Content-Type:application/json、Accept:text/event-stream、Accept-Encoding:identity、Idempotency-Key、X-Client-Request-Id、目录 revision/etag 头，并接入异步网络对象和回调。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-agent-loopback-router | 0x1837844e0 | `ev_d0e9f6f9721184c0afdd7b5cf1f37f4890b7e420630f4ec2beaf58ab23f5a6f0` |
| b-agent-gateway-2 | 0x183780d10 | `ev_f43ab2274db1d7d1e2a6fedb8ebb21a5cb47f4b7b977081a4756b2b86ac6d112` |
| b-agent-gateway-3 | 0x183789d20 | `ev_527019dd59f69f8c7779841af3b693011e1fb6717754ae09c3d40e1f7566a917` |
| b-agent-gateway-1 | 0x18377a0e0 | `ev_a168d099545b014774f19b86a28a9e7f07cbc78b49bb8f8bdb14f2046b8f815a` |

已知接缝：本地 HTTP → 模型目录/流式 Responses → 远端业务 API；配置残留含 tabbit-local Responses provider 与 loopback token，但配置生成函数本次未恢复。

打包/上游对齐：B-SCHEMA-tabLocalAgent、B-PAK-24500。

未解决：

- 启动服务器的监听 socket/线程具体类型未在本次函数中命名恢复
- 安装密钥 PoP 算法和挑战签名 helper 未恢复
- BYOK 路由的完整远端认证路径未恢复
- 目录和隐私过滤 helper 的全部语义及运行成功情况未知

### 用户提供者、凭据与模型配置（B-AI-PROVIDERS）

**接入判断：** 新增 Profile 提供者配置与凭据适配模块。确定性：high-for-config-module; medium-for-full-dispatch。没有 Chromium 默认实现被替换的直接证据；不能将错误字符串当作已证明的全部操作执行。

技术路径：

- 成功回调处理 credential 与 models，具有 credential_encryption_unavailable、invalid_credential、provider_auth_required、credential_encryption_failed 错误分支。
- 读写 tabbit.local_agent.providers 内的 encryptedCredential/credentialLabel，并关联 tabbit.local_agent.model、byok/ 模型命名与 defaultReset。
- Action 候选 0x18379a130 的 afij/datarefs 包含 list/save/delete/test/login 等操作和 baseUrl/api/enabledModels，但 stderr 的 Illegal op in iblock 使其不计为成功伪代码。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-agent-provider-persist | 0x18379d640 | `ev_398fd7432fd2bfb99c9a89e83d490d634037a333fb34f882ceb83a8d461c8d2e` |

已知接缝：提供者凭据回调 → Profile 配置/选中模型；网关路由中识别 byok/ 模型。

打包/上游对齐：B-SCHEMA-tabLocalAgent。

未解决：

- 凭据底层加密是否 OSCrypt/DPAPI、密钥生命周期和存储格式未证明
- 完整 Action 分发失败
- 供应商 URL 的 HTTPS/loopback 限制本次仅数据引用线索，不升级成已恢复控制流

### 工作区运行库与官方技能依赖安装（B-AI-DEPENDENCIES）

**接入判断：** 新增下载/安装状态机与受管依赖发布模块。确定性：high。不是 Chromium 更新器替换的证据；当前恢复的是 Agent 工作区依赖业务。

技术路径：

- 服务在失败时清理请求并写 failed 状态；DownloadAsset 回调衔接 installing / Install，状态机在函数中可见。
- 安装读取 workspace-dependencies/installed.json 的 version/runtimeRoot/pluginsRoot；缺字段拒绝，另有 scoped_dir/installed.json.tmp/skill-bundles/tabbit-official 遗留路径回收。
- 提交函数检查归档处于管理的 downloads/.part 路径、SHA-256 匹配；异常返回明确错误，创建暂存目录并分别处理 codex-primary-runtime 与 tabbit-official 两类归档。
- 调用提取 helper 0x1837b33a0 后再调用元数据/路径验证 helper 0x1837ad980，验证失败不发布。之后有运行库与技能发布、暂存保留和安装提交的错误分支。
- 写入 runtimeSha256/skillsSha256 等安装元数据，先形成 installed.json.tmp，再调用移动/替换形状的 helper 发布为 installed.json；这是事务式提交形状，原子性 syscall helper 未恢复。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-agent-dependencies | 0x1837a9340 | `ev_3ba5a2166f3ddab17eb6a36167b8c6d1ff1ee2e57b34efc63186a75a894584d1` |
| b-agent-dependencies-resolve | 0x1837aa800 | `ev_ee1d8ddcd4ba57adfebfb64583eebe6dddf0cfad0ddca6df559e60cda2c53157` |
| b-agent-installer | 0x1837afc80 | `ev_0a6dc4c169c7899893301bf6abc0b38609ff55a2ed6dd2344064dc8f7fef11e2` |
| b-agent-installer-commit | 0x1837b1110 | `ev_328c1546ce91dbe4a679d7d8c88d095d8410e9165a0a9132d478f785ba8ac72c` |

已知接缝：异步下载状态 → 安装任务 → 归档提取/元数据验证 → runtime/skills 发布；二进制残留有 load_workspace_dependencies JSON-RPC/MCP 接口，但其 handler 没有在本次展开。

打包/上游对齐：B-SCHEMA-tabLocalAgent。

未解决：

- manifest 请求和 Range 分块下载候选只有定位线索，本次未恢复
- 提取 helper 的防 zip-slip/symlink 实现未恢复，错误文案不等于已完成安全审计
- installed.json rename helper 的原子性和文件系统失败恢复未知
- 来源清单版本等静态字符串不表示实际网络下载过

### 图像附件准备与解析/上传缓存（B-AI-IMAGES）

**接入判断：** 新增 Agent 附件缓存及对象存储上传适配。确定性：high-for-service; medium-for-full-upload。没有替换 Chromium 图像缓存/解码/渲染实现的证据。

技术路径：

- Prepare 查找按请求键管理的树形状态、构造请求对象和回调；不是 Chromium 图片解码器或 HTTP 全局缓存的恢复。
- 响应匹配请求键和任务/请求对象，HTTP 200 且有正文时解析 uploadRequired、url、expiresIn。
- uploadRequired 为真且尚未上传时调用准备 helper 0x183795130 进入上传路径；URL 分支要求有效 URL、https 并检查 myqcloud.com 域名后缀边界。
- expiresIn 以整数有效性和区间检查约束；缓存状态中保留 URL/期限及上传状态，并形成 local_agent_image_cache 的 resolve/upload、body_bytes/status/elapsed_ms 日志。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-agent-image-cache | 0x183793c30 | `ev_ace620d0e4d91f321d90f1fd2f25e12c205a97810db0ca75b027b4c3448a7283` |
| b-agent-image-response | 0x1837962b0 | `ev_1a09f12455b1340e6b2f586fa6eededb750f5d988095d7cc0eb249ff5615d90a` |

已知接缝：请求准备 → 解析已有资源或转上传 → 缓存 URL/期限。

打包/上游对齐：B-SCHEMA-tabLocalAgent。

未解决：

- 上传 helper 和二进制 payload 处理未恢复
- 缓存淘汰、磁盘持久化/内容哈希算法及并发行为未知
- 对象存储域名约束不是实际访问记录

### 私有 CDP 桥与任务所有权策略（B-AI-CDP）

**接入判断：** 新增私有自动化 CDP 桥、前置策略与部分协议响应代答。确定性：high。在自定义桥边界对部分命令做拦截/代答，不等于替换 Chromium DevTools 后端或浏览器引擎。

技术路径：

- CDP 分发 0x1837cb3c0 在 0x1837cbc99 直接调用 0x1837c88d0，并按返回值 1/2/3 分流；对齐汇编证明是实际 CALL，不是只有路径或字符串关联。
- 策略读取任务/目标上下文：未拥有目标以 target_not_owned 拒绝；Page.bringToFront 在 preserve 模式出现 foreground_policy_preserve 拒绝。
- 按命令长度和字节比较做 Browser/Target 命令限制，有 Browser.close 等禁止项、browser_command_denied 和 browser_command_not_allowlisted。完整 allowlist 不在这里重建，其他返回值可能用于合成命令。
- 分发处理 targetId/sessionId 和 flat session；不支持非 flat，拒绝未知目标、已分离会话以及 raw 会话的 Browser/Target 命令；页面导航有目标 URL/导航 URL 校验分支。
- 桥内部有 Synthetic command unavailable、protocolVersion/product/revision/userAgent/jsVersion 与窗口 bounds 构造，显示部分协议响应由桥合成；其 Chrome/154.0.8037.58 文本不能当作真实运行 Chromium revision 的独立验证。
- 拒绝函数将 event=tabbit_dance.cdp_command_rejected、method/reason 和可选 taskId/targetId 序列化输出。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-agent-cdp-dispatch | 0x1837cb3c0 | `ev_0d08d67aea27114ec49e4d260821f0b2c7abb8408aa9ff319f3b1b402c710fbe` |
| b-agent-cdp-policy-check | 0x1837c88d0 | `ev_3ab9acf42d61bc05a8a396f4f117494587386f5210dc0e0e3ad932f561578829` |
| b-agent-cdp-policy | 0x1837c8ce0 | `ev_3c75e51a92835d327e3ff02283f2873a45a3bcf8e02180c00e04490911465c9f` |
| b-agent-caller-seams-aligned | 局部汇编 | `ev_6ef3f1335dfa1788a0e8f7b6ff400e5b61e8632264691b505745d2215c028efd` |

已知接缝：CDP 私有帧 → 会话 dispatcher → 所有权/前台策略 → 合成或转发；JS LogicalBrowserTransport 使用 browserSessionId/generation 与 pendingCdp 关联。

打包/上游对齐：B-SCHEMA-tabCDPBridge、B-JS-browser-service-channel.mjs、B-JS-browser-transport.mjs。

未解决：

- 全部允许命令名单/合成分支未逐项恢复
- 最终 DevToolsAgentHost/浏览器对象虚调用尚未类型恢复
- tabCDPBridge extension API 与 runtime 私有 CDP 桥虽契约相近，但其注册函数和同一对象身份未证明
- 不能用这里的硬编码协议版本回答全局 Chromium 是否被改动

### 页所有权管理与标签栏观察接入（B-AI-OBSERVER）

**接入判断：** 新增服务持有观察者，通过浏览器/标签模型回调接入。确定性：high-for-object-seam; medium-for-exact-upstream-type。支持 observer 插入，未证明替换 Chromium TabStripModel/标签栏实现；上游类型名称只能用于解释接缝。

技术路径：

- Agent 服务构造 0x1837dfd50 在 Profile/context 非空时分配 0x90 字节观察者，在 0x1837dfe0b 调用其构造 0x1837f9d30，并将观察者保存于服务对象 +0x120。
- 观察者构造取得浏览器/Profile 关联对象，调用观察注册形状的 0x184948ed0 与浏览器枚举形状的 0x1812baa60；输出 tabbit_dance.tab_strip_observer_ready。原始 C++ 方法名未恢复。
- TabGroupedStateChanged 回调查询页记录，比较已有和新分组的 16 字节标识；当记录是受管页且组发生变化时，安排带上下文的异步工作 0x1837fb720。
- 分组工作在 0x1837fb8a4 调用 ReleaseWebContentsInternal 0x1837e8aa0；后者查询/删除页记录、移除映射、释放受管内容对象，并更新关联任务/观察状态。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-agent-observer-owner | 0x1837dfd50 | `ev_ab6dfec52dad0a0c69870f605a2ffdcc08bb2684faba55b4f8a9c5797648069f` |
| b-agent-tab-observer-1 | 0x1837f9d30 | `ev_5ffb0782ca91c4ad727c4a87a49faa89d9a27bd4e382ec72869933f60868bee8` |
| b-agent-tab-observer-2 | 0x1837fb540 | `ev_16709c4cbeaf80911fe46e59080187ff717ae99af00301f924e39073f7e2f030` |
| b-agent-service | 0x1837e8aa0 | `ev_c92e5c45342b2e89cc5d5c785397b03a19dc8af03b430e6e096b5cbca98eeb5a` |
| b-agent-caller-seams-aligned | 局部汇编 | `ev_6ef3f1335dfa1788a0e8f7b6ff400e5b61e8632264691b505745d2215c028efd` |

已知接缝：Profile/context → LocalAgent 服务 → owned observer；标签分组变化 → task 工作队列 → 释放页所有权。

打包/上游对齐：B-JS-browser-service-channel.mjs、B-SCHEMA-tabLocalAgent、B-UPSTREAM-chrome_browser_main_extra_parts.h、B-UPSTREAM-chrome_browser_main.cc。

未解决：

- 构造函数的 factory 注册 caller 尚未恢复
- BrowserList/TabStripModel 等虚表类型没有 PDB 证明
- 从主循环 AddParts 到此服务的完整初始化链尚未连通
- 用户实际拖拽分组触发行为没有执行观察

### 复用：Node 运行时私有命名管道和协议通道（B-AI-RUNTIME）

**接入判断：** 新增浏览器宿主 + 随包 Node 服务 + 私有版本化协议。确定性：high。没有 Chromium IPC/Mojo 系统被整体替换的证据；这里有专属 transport，但 Chromium 其他 IPC 是否改动未调查。

技术路径：

- 旧原生 host 启动路径准备 state root、私有 transport、--browser-transport= descriptor、Windows job 与进程监视；启动错误是独立业务状态。
- 旧私有 transport 创建 \.\pipe\tabbit-runtime- 前缀的 Windows 命名管道。帧分发解析 version/kind/payload/generation/requestId/browserSessionId 和 hello/ready，拒绝超过 64 MiB、未知 kind 和缺少会话标识。
- 打包 JS BrowserServiceChannel 使用协议版本 1、4 字节大端长度前缀、64 MiB 限制、hello/hello_ack 和 generation，并按 session/requestId 关联请求和 CDP。
- JS browser-runtime-service 从 --browser-transport=<JSON> 创建 private stream，握手取得 configuration.stateRoot 后创建服务；这些是静态文件事实，本次没有启动。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| reuse-channel-dispatch | 0x1837b9f90 | `ev_3703eb301523fe553ffffc308c2a098b0e92b722c51cbf50a50e5d1f54eb6b0c` |
| reuse-extra-init | 0x1837c5c40 | `ev_bb53514dbf26e51e2b6e50c8380549421f9ce74232a16b8556b0ac2a81ed451a` |
| reuse-host-launch | 0x1837bf640 | `ev_1d65fecef88321a0555234d4515d9b5a169f035634af24bf6b81f36e4a083cfa` |
| reuse-private-transport | 0x1837fc860 | `ev_8e72d252af5ba8ed32751232481c17493338e524a738ac7d1b347a2d15f7b18f` |
| reuse-transport-create | 0x1837fdab0 | `ev_7e32fe74ef1e8f3a536a7ebb6897049e9310aeb1c00fa0cc0ca96acc5bc80a11` |
| reuse-transport-read | 0x1837fe860 | `ev_0060dde16419bfb42735208a96a17618c0582ff5407d60ee3e684637297cd19b` |
| reuse-transport-write | 0x1837fec00 | `ev_3868eeddfa09ba43642f3a0d3a6490f71ddab43601f3c18b43702b75abea5445` |

已知接缝：browser host → Windows named pipe / descriptor → packaged Node service；同一协议承载浏览器会话/任务/自动化。

打包/上游对齐：B-JS-browser-runtime-service.mjs、B-JS-browser-service-channel.mjs、B-JS-browser-transport.mjs。

未解决：

- 旧失败 extra-parts 与 transport-frame-read 不作为成功伪代码
- 协议所有 kind 的 handler 和启动主循环注册未全部恢复
- frame-write 旧输出只有 callback wrapper，不能声称已恢复完整写帧实现

### DSH 本地工作服务基础设施（B-AI-DSH）

**接入判断：** 新增 DSH 子进程/服务管理及生命周期 preload。确定性：high。没有 Chromium 进程服务或 DSH 内部实现被替换的直接证据；preload 注释声称不 patch 内部，仅能证明脚本本身未导入那些内部，不能证明所有 DSH 代码未改。

技术路径：

- DSH 有浏览器侧独立 service、process 状态和异步初始化/停止路径；最后 Profile 关闭清理待处理任务、重置服务状态并调用 process Stop。
- 启动准备工作目录 workspace、logs、process.log/process.previous.log 和 DSH_HOME 环境，构造启动选项；具体 OS CreateProcess helper 类型本次未恢复。
- 启动函数 0x183681bf0 在 0x1836821bb 调用命令构造 0x18a89a160；后者加入 --import <tabbit-dsh-lifecycle.mjs>、web、--no-open、--host 127.0.0.1、--port 0。
- 打包 lifecycle preload 监听 stdin 文本行 shutdown 或 EOF，幂等地输出 shutdown 日志并 process.emit(SIGTERM)。本次只读该 JS，不运行它。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-dsh-service | 0x183683060 | `ev_f3bcaa68a32c01fc8934fdad20ee1c35b741b416af17d9d7a1a65a8882464b9e` |
| b-dsh-launch | 0x183681bf0 | `ev_201943f2ffa61aefb5ee43d4762049d04946d60e4724a9a832e36e9428e1e3f9` |
| b-dsh-command-builder | 0x18a89a160 | `ev_cf5bf52d78bc3631354ddc7d53db7c2a259b4bc59519a3c78fe1fe30fb6573e6` |
| b-dsh-process | 0x18367f730 | `ev_37aa8e4b5d98c8cbde93766b97ec348ad59e2f570f53c1a74a75730c2bb15f7f` |
| b-dsh-transport | 0x183686240 | `ev_dada837f0ec915ec1a6b8f61c7472a60c0fbfc448a5ae61e956a8c1e6abe0d02` |
| b-agent-caller-seams-aligned | 局部汇编 | `ev_6ef3f1335dfa1788a0e8f7b6ff400e5b61e8632264691b505745d2215c028efd` |

已知接缝：浏览器 service → process 管理 → Node preload + DSH web；stdin shutdown / EOF → lifecycle → SIGTERM disposal。

打包/上游对齐：B-JS-dsh-lifecycle。

未解决：

- DSH 软件全名和版本未由 artifact metadata 确认
- 安装/更新函数和下载协议仅候选线索，本次未展开
- Stop 工作 callback 内部 Windows 句柄写/关闭和超时强杀 helper 未恢复
- 不将 DSH 按 Windows SCM 系统服务解释

## 原生业务

### 来源绑定的本地文件操作 API（B-NATIVE-FILES）

**接入判断：** 新增 browser extension API + Profile 文件服务 + 异步本地 I/O 工作模块。确定性：high。没有替换 Chromium File System Access、network file loader 或 OS 文件系统实现的证据；是另一套 tabLocalFS 契约。

技术路径：

- Schema tabLocalFS 提供 mount/unmount/getattr/access/statfs 及类 FUSE 的 open/create/read/write/fsync/readdir 等契约；这个命名不证明存在 FUSE 驱动或替换 OS 文件系统。
- read 原生 API 0x183812280 解析参数、取 BrowserContext/Profile 服务、安排异步响应，并在 0x183812422 直接调用 FuseRead 0x183823560。
- FuseRead/FuseWrite 校验 mount handle 与 origin，错误为 Invalid mount handle or origin；构造封装工作函数指针的异步 callback。读桥在 0x183823940 写入 worker 0x183823ad0。
- read worker 按文件句柄 fh 查找本地文件对象，按 offset 调用底层 helper，读取 size 最多 0x100000（1 MiB），返回实际字节数/errno；坏 fh=9，读错误=5 的结果字段可见。
- write worker 查 fh 和传入 buffer、offset，调用 0x185a5a820 文件写 helper；成功和 errno 映射可见，但该 helper 原始名称/系统调用尚未恢复。
- ValidatePath 拒绝绝对路径、NUL、traversal/escape；getattr 工作进一步检查规范化/符号链接目标是否仍在 mount 边界，拒绝 symlink escapes mount。
- Shutdown 清理 active_mounts/tracked_mount_handles；unmount 原生 API 与 FuseMkdir 也是本次已恢复路径，初始 seed 标签已经纠正。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-fs-api-read-real | 0x183812280 | `ev_1580ec490a3ec31834ec419e4408fdbbe6d32a9d37d236f30696409d142ab816` |
| b-fs-api-read | 0x18380e390 | `ev_4af1b7225ffa45d2bcb77fccf6c62d0e85b7375fcc8aaf016f268be61d8c960b` |
| b-fs-read-bridge | 0x183823560 | `ev_21f54737192c69901294d7b9c9b1c57ec6999e355f4a1f479955352416ca9dd2` |
| b-fs-read-worker | 0x183823ad0 | `ev_230d4d9f3fa0bcda4571f20a4660a9a5a4527ea2e643264b31a2f37745f1e93e` |
| b-fs-write-bridge | 0x183824110 | `ev_2f059e2f36282a64b32a0832aec5c3e11499b7987fb3a0299913d77259dbde90` |
| b-fs-write-worker | 0x183824690 | `ev_fd7440eef50fadbd7de18cd706f3cdda8335d1d1ab01721909549d2e78244d5e` |
| b-fs-read | 0x18381ed30 | `ev_56a6cee4fa66403f78732fca7f37e9bd42ceb6bbb4a09967ecf328dbe1188699` |
| b-fs-mount | 0x1838152d0 | `ev_fac882f2e8049d43143881a235bb7951ebe9cd457071163a5c89e9b64f4f250e` |
| b-fs-path | 0x183819180 | `ev_630ca1da1365a44bcf6cafeaa2c1265e92a253124ab39a299cc74fc7b242b2e9` |
| b-fs-write | 0x1838203b0 | `ev_ce332c4225abd15ca106920ebc125d6d6d72c57a3bac8791c25dc853db62bd38` |
| b-agent-caller-seams-aligned | 局部汇编 | `ev_6ef3f1335dfa1788a0e8f7b6ff400e5b61e8632264691b505745d2215c028efd` |

已知接缝：extension/web-page API 声明 → 原生 ExtensionFunction 形状 → Profile 服务 → callback worker；权限 feature 声明中 web_page 需 delegated availability check，但其实际 allowlist 此范围未恢复。

打包/上游对齐：B-SCHEMA-tabLocalFS、B-PAK-24500、B-UPSTREAM-chrome_extensions_browser_api_provider.cc。

未解决：

- mount picker/drag/drop/token/RenderFrameHost 全部授权链未展开
- read/write 下层 base::File/Windows API helper 未逐项类型恢复
- 符号链接 TOCTOU 与全部 reparse 类型保护未审计
- feature 注册实际 binder/provider caller 未恢复，不能宣称任意网页都可调用

### 本地文件预览数据源与系统默认打开入口（B-NATIVE-PREVIEW）

**接入判断：** 新增本地预览数据源及 extension API/设置 UI 接入。确定性：medium-high。没有替换 Chromium file:// 网络加载器、PDF renderer 或文档渲染引擎的证据。

技术路径：

- StartDataRequest 0x183696610 先调用请求分类/解析 helper 0x183696cd0/0x183696de0；失败通过 callback 返回空结果，成功获取 Profile 关联服务后进行分发。
- 特殊 index.html 分支返回数据，其他路径构造异步请求/读取 callback；数据源具体 token/路径解析语义依赖未恢复 helper。
- Schema tabLocalFilePreview 有 token 下的 getFileInfo/readFile/writeFile/releaseToken，以及 getSystemOpenInfo/requestSetSystemDefault。
- PAK 60467 manifest 声明 tabLocalFilePreview 权限和 tab_local_file_preview 扩展名范围；PAK 60476 的设置 JS 确实调用 getSystemOpenInfo 和 requestSetSystemDefault、处理 lastError/状态。

原生证据：

| label | 地址 | REA Evidence ID |
| --- | --- | --- |
| b-fs-preview-source | 0x183696610 | `ev_e2d499574ded223a15e75c25d416333dd080248c73fab22c2061ae5369911ee0` |

已知接缝：自定义数据源 StartDataRequest → Profile 预览服务 → callback；本地文件设置页面 → tabLocalFilePreview 系统打开 API。

打包/上游对齐：B-SCHEMA-tabLocalFilePreview、B-PAK-60467、B-PAK-60476。

未解决：

- chrome:// URLDataSource 的 Add/注册 caller 未恢复
- token 来源/期限/跨页权限检查 helper 未恢复
- 不同扩展名实际转换或渲染实现未由 manifest 证明
- 默认应用实际 Windows registry/系统 UI 操作未恢复或执行

## 记录质量、纠正和统计边界

本次 37 条新 REA 记录：34 条成功函数伪代码、1 条失败反编译、1 条对齐局部汇编、1 条被取代的错位局部汇编。35 个新函数地址包括失败函数；不是“完整业务已覆盖”。0 条空 stdout；重复函数地址 0 组。复用 7 条旧成功/状态记录，未重新跑 runtime/channel。

- `b-agent-model-providers` / `0x18379a130`：`ok=true` 且 exit=0，但 stderr 为 `Ghidra Decompiler Error: Conditional execution: Illegal op in iblock`。只使用 afij/datarefs 为定位线索，Action 不计成功。
- `b-agent-caller-seams`：部分汇编窗从指令中间开始，已由 `b-agent-caller-seams-aligned` 对齐记录取代；保留原输出，不把误解码写成行为。
- `b-fs-mount` 实为 getattr 工作函数；`b-fs-path` 实为 Shutdown；`b-fs-read` 实为 ValidatePath；`b-fs-write` 实为 FuseMkdir；`b-fs-api-read` 实为 unmount API；`b-dsh-transport` 实为 OnLastProfileClosed。最终一律用地址和恢复行为识别。
- 汇编专用记录没有 afij/function 元数据是请求设计，不是空输出。失败和成功记录全部保留 IDs。新定向 E8/E9 扫描没有选中的 E9 尾跳；没有将尾跳、CFG 虚调用或 callback 指针算作替换实现。旧 `transport-frame-write` 只是 callback wrapper，旧 extra-parts/frame-read 失败，不计完整函数恢复。
- 观察者构造和 DSH 命令构造 caller 有对齐 CALL；files read API→bridge 的 CALL、bridge→worker 的函数指针有汇编。其他空 incoming-xref 不能推出没有调用者。
- C++ 类型和函数名称均为分析命名，路径字符串不等于原始函数符号，也不单独证明“取代上游”。重叠局部变量、参数删除等 provider warnings 保留在完整输出中。

## 证据文件与方法

- 所有 `rea-b-*.json` 和相应 `.stderr.txt` 均保留；JSON normalized stdout/stderr 为权威。`b-*.txt` 是去 ANSI/CR 的 stdout 派生。
- [b-native-decoded.json](C:/Users/tjzhong/AppData/Local/Tabbit/business-research/evidence/b-native-decoded.json) 将 REA 地址和 afij datarefs 用 PE .rdata section 映射回原始字节，保存地址、文件偏移、编码和字符串哈希。内嵌常量/非 NUL 字符串/后缀字符串仍需伪代码上下文解释。
- [b-static-alignment.json](C:/Users/tjzhong/AppData/Local/Tabbit/business-research/evidence/b-static-alignment.json) 保存本次打包 JS 全文与哈希、既有 schema 的哈希和包资源身份。PAK 24500/60467/60476 全文另存 b-pak-*.txt。
- b-focused-seam-seeds.json / b-direct-call-seeds.json 是独立候选扫描，不是 REA Evidence，且仅覆盖选定指令形状/字节区；最终关键 caller 用 REA 对齐输出确认。
- 上游已固定的 ChromeBrowserMainExtraParts 和 extension provider 原始文件用于解释可用接缝，不能证明 Tabbit 真正注册在哪一行，更不能代替二进制 caller。
- 没有执行目标、安装依赖、连接 pipe/CDP、读取个人 Profile。REA CLI 单次只分析目标静态副本，batch 并发=1；没有 Java Ghidra，未操作共享 native 会话，因而无额外 close_binary。
