# Tabbit 定向业务原生反编译笔记（a 分工）

目标：`C:\Users\tjzhong\AppData\Local\Tabbit\Application\1.18.21.0\Tabbit.dll`，SHA-256 `a10ee34ead4a08c906e09f3dd4449042fb084a69ce59210b1c8cee815723bf3c`。日期：2026-10-27。未运行目标，未读取个人 profile。

本轮保留 35 个 REA 完整记录：34 个不同地址的局部函数体及 1 个已有调用链汇编核对记录。这个统计是抽样数量，不是全覆盖。原始 `rea-a-*.json` 为权威输出，解码补证为独立文件字节分析。函数名称均为分析角色，原生标记仍是 `fcn.<address>`。

## AI业务

### 云端实时 ASR 客户端与 Windows 平台启动

- 0x183676c50 构造 /api/v0/asr/realtime_recognize?voice_format=pcm&engine_type=，按语言选择 16k_en/16k_zh 并追加 language。
- 构造 start JSON：type=start、sample_rate=16000、channels=1、language、hotword_list；序列化后交给实时客户端发送函数。
- 0x18367b8c0 处理 WebSocket 数据帧组装及 JSON type/text/message；0x18367a260 是连接完成回调。
- 文件路径 speech_recognition_engine_win.cc 不能证明使用 Windows SAPI/WinRT 本地 ASR；本次恢复的识别路径显式连接远端服务。

接入判断：新增业务识别模块，借用浏览器 profile、网络服务/数据管道及媒体对象接入。确定性：高（远端请求与协议）；中（底层媒体接入）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-voice-speech-init` / `0x183676c50` / `ev_e85aaf88168e74de5f1d6e1af99d93996fbd2969956cd2d5dddc6f0ca9767ef0`
- `a-voice-asr-parser` / `0x18367b8c0` / `ev_fb7380290e592c6d5fbc38340420f3691ce34aa18b06348b808e88a9dbec3f7c`
- `a-voice-speech-result` / `0x18367a260` / `ev_3101d40c9e2e69feeedbe7cf78d44835a0a8fc23f8a20d4e4cae46f73d684ef0`
- `a-voice-capture-device` / `0x18565fc70` / `ev_5bf0db5c2aa0e061dafdd813022428b4cda739a1c8dd90378f8a5333abb4ec68`

尚未解决：

- 麦克风设备创建及 PCM 转换的最终底层 API/媒体函数名未恢复。
- 真实服务 origin、ASR 后端供应商、认证握手内容及在线效果未知。
- 没有完成 Chromium Web Speech API 实现的比较，不能排除其他共存路径。

### 独立 LLM 文本改写阶段

- 0x18366c5a0 从配置构造 /api/v0/asr/rewrite URL；0x18366d3e0 配置 application/json 和 Bearer Authorization。
- 发送 text、mode=chat_input、language；空语言回退 zh-CN。
- OnRefined（0x183673330）选择非空成功改写结果，否则保留原文字；热键路径随后调用 0x183673ae0 收尾。

接入判断：新增业务模块，通过网络请求和控制器回调接入，模型改写在 ASR 后独立处理。确定性：高（请求与回退）；中（全链路回调归属）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-voice-refiner` / `0x18366d3e0` / `ev_da080f15f715b3453ba298bc6c19d0481149573c399d751d26524af6aad088eb`
- `a-voice-refiner-endpoint` / `0x18366c5a0` / `ev_8e5dc5e7181bc3607cdf2a2bd04703af4f2407810a038ec22946779716402a54`
- `a-voice-controller-result` / `0x183673330` / `ev_8370cea805119f685ea13e5a9f097c06997ed3a4256b8ea16e2fcd9e7d69f76e`
- `a-voice-controller-finish` / `0x183673ae0` / `ev_77dde321d16dbbff6bf5f3abe5107d8c83d8ed0e27cdfd04426f5608ccf877f2`

尚未解决：

- rewritten_text 只在邻近字符串中出现；响应解析函数本轮未反编译，不能把字段消费当作已证明。
- 具体模型名称、提示词、后端 provider 未建立。

### 语音业务的浏览器热键、目标捕获与文字提交

- SetWindowsHookExW(WH_KEYBOARD_LL=0x0d, callback=0x183675cf0)；排除空/隐身 profile 和重复安装。
- hook 检查前台窗口属于当前进程，处理左右 Alt，500000 微秒内第二次按键启动听写；活动听写再按 Alt 停止。
- 0x18366fbc0 查询 tabbit.voice_input.enabled 并调用 0x183674860 捕获网页目标。捕获器验证 browser、WebContents、可编辑元素、存活 frame、网页 scheme 和 widget，保存 GlobalRenderFrameHostId。
- 0x183670ec0 处理识别结果、流式替换和气泡队列；原种子标签 start 并非真实角色。
- 收尾函数 0x183673ae0 调用 0x183675390；提交函数重新解析 frame ID，取 widget，转 UTF16 后调用 widget 虚表 +0x40，随后清理目标。汇编 0x183675768..0x183675775 恢复了实际虚表取址，不能把 CFG 桩 0x185f59da0 当作提交实现。

接入判断：新增浏览器 controller + Windows hook + 输入适配层，在既有 WebContents/RenderFrameHost/widget 生命周期接口插入业务。确定性：高（hook/调用）；中（虚函数名称及最终 renderer 入口）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-voice-hotkey-install` / `0x1836759d0` / `ev_a3b27f8c034940a083372bc8a4e36710aec9a190e56cddd1bb08d8ed2714f416`
- `a-voice-hotkey` / `0x183675cf0` / `ev_a6161a19a5a380c7c54009cc3a908cc2264b96c737aba74bd5d527804d05e49a`
- `a-voice-controller-toggle` / `0x18366fbc0` / `ev_bf26f2d79840304a9605dd759e6b9117bba1e69f7769b145511f7134eac2b009`
- `a-voice-injector` / `0x183674860` / `ev_6ba30e34597b59368c3f672d9e09468c9932831895067d2b916ad423ec9fe1ad`
- `a-voice-inject-commit` / `0x183675390` / `ev_9d352001b0503b3dfbc8397bf4810944e628f4faad9b1123f8ae6b92580ec31f`
- `a-voice-controller-finish` / `0x183673ae0` / `ev_77dde321d16dbbff6bf5f3abe5107d8c83d8ed0e27cdfd04426f5608ccf877f2`
- `a-voice-frame-id-resolver` / `0x184770e70` / `ev_915f41c11974d8bf43ad5bb82029bd810385c6647d56f8ea3781c700fb929372`
- `a-voice-controller-start` / `0x183670ec0` / `ev_12b142a0878cce9354272e4cb6c6fc100e3305041b0f03f440b6840f2879ebef`
- `a-voice-controller-state` / `0x1836718d0` / `ev_3e72f38a959ce82cc62b14d9eea115226de383e6f4ffaaec56330eb2f23b682c`

尚未解决：

- widget +0x40 的原始函数名和最终 IPC/renderer 处理未认证；不能断言 ImeCommitText、SendInput 或 DOM JavaScript 注入。
- 只核对本轮可见静态调用及回调绑定，不代表所有入口已恢复。

### 选择文本的浏览器调度与新增 Mojo renderer 接口

- 0x183597050 在 keyboard selection 分支查询 ExtensionRegistry 和扩展 ID iobiajbbjgoiehijaledajjiainhmafb，并有 /newtab 判断。此 ID 在函数中出现，不等于已证明是最终接收方。
- RequestPendingSelection（0x183598130）调度选择请求并进入 0x183598700；后者建立新 remote、安装 disconnect/代次回调并调用 0x18340d080。
- 0x183599ff0 实际绑定 tab.mojom.TabTextSelectionAgent，通过 interface provider 对接 frame 的 remote；这是业务新增协议接缝的具体证据。
- 0x183598a30 的 arg2 与 +0x178 generation 相等才清理 remote/状态并递增 generation；它是清理回调，不是已恢复的 selectedText payload 回调。

接入判断：新增浏览器选择控制器及业务 Mojo 接口，插入 frame/renderer 通信接缝；归 AI 章作为上下文输入支撑。确定性：高（新增接口与调度）；中（renderer 实际采集/AI 消费端）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-selection-controller` / `0x183597050` / `ev_d8ed5f062bc4c55ba0da0822c86102849d0696b50c00082e2c170a181abca7c5`
- `a-selection-update` / `0x183598130` / `ev_cdb090f95d3173735fe6f8cbdf9d3cddccc8ed210531fc287ad5eda5516017cc`
- `a-selection-request` / `0x183598700` / `ev_922b5b054d0630e1071f14b92e881255ebc4daeae4c44a41edfb25f23f6e0e8d`
- `a-selection-mojo-binding` / `0x183599ff0` / `ev_1eca38de0ac7d025cba590d11f5db8d594d3adcd1d42ec027be3121e69d6d8a2`
- `a-selection-result-callback` / `0x183598a30` / `ev_f435ede65b39c6a1e99a9e77d57d0a6aba605f82318d778da113021c0321ee09`

尚未解决：

- 本轮未恢复 renderer 侧 TabTextSelectionAgent 的实现及 binding 注册函数；是否使用 Blink Selection、DOM Range、AX 获取文本未知。
- 未追到 AI 对话最终消费；本章归类来自报告业务分类，不等于本函数调用模型。

## 原生业务

### 账户本地存储与 Chromium 任务/存储形状适配

- CreateStore（0x18336d6a0）只接受类型数值 0x3f，分后台任务与 reply callback；成功回调 0x18336d9c0 构造 0x18134a090 所代表的存储适配对象。
- 对象保留 type/storage 字段、后台对象及序列 runner；引用 base/task/sequenced_task_runner.h。这与固定上游 DataTypeStoreImpl 的后台序列/前台回复结构相容，但不作原始符号认证。
- 0x183382320 明确检查加密上下文，含 local initialization blocked: encryption unavailable 分支；这是可用性门控，未证明具体加密算法。

接入判断：新增账户存储包装与初始化门控，复用 Chromium 任务/存储接口形状的接入。确定性：高（包装/门控）；中（具体 sync store 类型）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-reading-account-store` / `0x18336d6a0` / `ev_2dd29f5ed28d2bc9ec785f47d8a1547dfecb8382497c9982775c06e575a86c17`
- `a-reading-store-backend` / `0x18336d9c0` / `ev_188ec411ada4a30deff3aab9a30d76075ae6b00ca843793ef5ffe3530952faf2`
- `a-reading-store-adapter` / `0x18134a090` / `ev_aaa681c12bb6596b80a9f5617c31c10eb87eba8f2e09b90b16464517d525764d`
- `a-reading-sync-init` / `0x183382320` / `ev_74ee9037bdef843155e15ae4272cd3ef29404316b338bb04d8255fbbf713580e`

尚未解决：

- 0x3f 未认证为原始 DataType 枚举；不能仅用数值认定扩展了 Chromium enum。
- 数据库文件名、后端 LevelDB/SQLite、每记录加密算法未认证。

### 独立 Page catalog 与同步 bridge

- service 启动转发包含 session 序号和状态防重入；完整 delegate 虚调用名称未恢复。
- 0x183384070 读完 sync metadata 后生成 control:page-catalog-v1:%02x 的 256 桶键及 control:page-local-state-v1，加载本地业务控制记录。
- 0x183392e00 在 local mutation commit 完成后更新 catalog/generation、pending Page 状态；page: 是业务实体键前缀。
- 0x183398220 处理远端 merge 所需的本地 Page 读取/核验，异常走 StoreError，成功构造合并状态并转入后续提交。
- tabReadingSpace schema 同时声明 Document、Note、TextAnchor、generation、expectedGeneration、contextToken/sourceToken、pending/synced/local_only_* 和 onAuthContextChanged/onSyncStatusChanged。schema 证明契约，不自动证明每个方法已实现。

接入判断：新增 Page 业务数据模型和 sync bridge；通过 Chromium 同步 controller/store/metadata 风格接口接入。确定性：高（自有 catalog/merge）；中（准确上游基类/注册接缝）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-reading-service` / `0x18337c280` / `ev_eb4b24a40e08a177ad8a6f4553238c877aa6aa681a3c1d1e7fdfd43963031945`
- `a-reading-sync-read-metadata` / `0x183384070` / `ev_b8db6e098ab07fa7854a8714982ad98b47a8015ef5b3ebdcfdd56fac3ccdd339`
- `a-reading-sync-local-commit` / `0x183392e00` / `ev_6895279c4edc0fdfcc570f1db7ebc6e6ce92d2862049113b093a40f0ca5cda13`
- `a-reading-sync-apply` / `0x183398220` / `ev_c53fc585ebf99133aa734069fb709ab95d924965d7cca4585cb4c0bd0b6ac4c3`

尚未解决：

- 没有逐函数 diff 原 Chromium reading-list 实现，不能声称“替换 Chromium 阅读列表”。
- 同步 type 注册、EntitySpecifics 私有字段、协议服务器、冲突规则及配额值未恢复。
- 邻近一致性修复日志是下一步线索，本轮未把它当成已经反编译的完整修复算法。

### 导航观察、page action 与库阅读器 UI delegate

- 导航 observer 针对目标 navigation 完成状态决定是否异步回调；page-action 的 DidFinishNavigation 路径也投递更新。
- 库文档打开逻辑尝试 reader，就绪检查失败后记录 Reader was not ready after library document navigation 并投递 OpenLibraryReaderForTarget；目标失效气泡回调单独处理。
- tabReadingSpace.Extractor 契约列出 chromium-read-anything/custom；仅是契约及适配意图，本轮没有建立 Chromium Read Anything/DOM distillation 的实际调用。

接入判断：新增 UI coordinator/delegate 和导航 observer，在浏览器页面动作与阅读表面生命周期插入接缝。确定性：高（observer/异步 UI）；中（最终 Read Anything 入口）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-reading-bubble` / `0x183281410` / `ev_4cb77bfbb684cc7c7a8b8141ca1766bdac210f7e651c76f336650eb7d46e9805`
- `a-reading-page-action` / `0x183283a90` / `ev_240faba52e44a605ae0af381a0f17ef87fddc5da32994bab41dc016d787f07d5`
- `a-reading-navigation` / `0x18336e860` / `ev_1b592964cec52b2d61b0e9777afa6f11841622ee056ec32ba1fed6fc10991079`
- `a-reading-ui-delegate` / `0x183285440` / `ev_d1b7b2d0eca2777cd56463e23751000963f2054f7c1d86768bf3b51f9f2831df`

尚未解决：

- 阅读按钮 View 构造、side panel 注册、真实正文抽取器/渲染入口未追到。
- DidFinishNavigation 中几个虚调用不能未经核对命名为某个具体 NavigationHandle 方法。

### location_bar 邻近候选的排除性核对

- 0x1832869d0 实际是搜索引擎 favicon 映射，引用 Google/Bing/Baidu 等 IDR_TAB_SEARCH_ENGINE_* 和缺图标日志。
- 不得因为路径邻近 reading_space 字符串就把它当成阅读入口；本轮阅读相关 location_bar view 接缝仍未解决。

接入判断：可观察为新增搜索引擎图标资源逻辑；对“阅读地址栏接入”分类保持未解决。确定性：高（该函数职责）；未知（阅读按钮所在 view）。未建立对 Chromium 原实现的替换证明。

证据：

- `a-reading-location-icon` / `0x1832869d0` / `ev_ef93bfe86574d9f5ab63ce98b595a060c762f06b37a580f77236dda7bb127890`

尚未解决：

- 精确 reading-space location_bar View/注册 caller 未定位，本候选不能用于证明它。

## 调用链核对与记录质量

汇编补证：`a-voice-callers-check` / `ev_fede8f1cc07f0a9c098321072fa3d31626fb456df1b4a156ba3209a5927ffdf9`。

- `0x18366ff95`：`0x18366fbc0` → `0x183674860`（direct-call）
- `0x183673d4f`：`0x183673ae0` → `0x183675390`（direct-call）
- `0x1836761ff`：`0x183675cf0` → `0x18366fbc0`（direct-call）
- `0x1836734b6`：`0x183673330` → `0x183673ae0`（direct-call）
- `0x183598861`：`0x183598700` → `0x18340d080`（direct-call）；callee body not expanded in this scope
- `0x1836755c7`：`0x183675390` → `frame vtable +0xa8`（CFG-indirect-call）；object method name unverified
- `0x183675775`：`0x183675390` → `widget vtable +0x40`（CFG-indirect-call）；0x185f59da0 is dispatcher, not business callee

- 全部函数记录有 stdout 函数体和 afij。未见 Ghidra Decompiler Error、非零退出、截断或目标变更；仍保留类型重叠/无效路径/未映射变量等反编译警告。
- stderr 的大区段字符串扫描跳过警告不等于函数反编译失败；它限制自动字符串全量枚举，本轮以 PE 文件字节补证。
- 本轮无已识别纯尾跳函数、重复入口或空体；具体尾跳调用不据此声称不存在，未构造全程序尾跳图。
- 0x183598a30 为代次清理回调，0x18565fc70 为未认证媒体辅助，不能把它们包装成已恢复选择 payload 或设备打开。
- 未打开持久 REA native MCP session；每次 CLI 为单次读取，因此无待关闭的 active-target session。

空体/失败/纯尾跳/重复入口：本轮均 0；这不是整个 DLL 的统计。34 个函数包含包装器、callback 与未认证辅助函数，不能当作 34 项完整业务实现。`a-voice-callers-check` 为纯汇编记录，不计为第 35 个反编译函数。

仅引用上面列出的已验证 sites。明确排除 `a-voice-callers-check` 从 `0x183673d38` 指令中部开始的前两行误对齐结果；`0x183673d40` 之后的调用由已有完整函数汇编交叉核对。该片段不用于构造完整调用者图。

## 完整地址与证据索引

| label | 地址 | 实际观察职责 | 记录状态 | Evidence ID |
|---|---|---|---|---|
| a-reading-bubble | `0x183281410` | OnTargetInvalidated 的异步清理通知 | decompiled-with-limitations | `ev_4cb77bfbb684cc7c7a8b8141ca1766bdac210f7e651c76f336650eb7d46e9805` |
| a-reading-page-action | `0x183283a90` | 导航完成后的 page action 异步更新 | decompiled-with-limitations | `ev_240faba52e44a605ae0af381a0f17ef87fddc5da32994bab41dc016d787f07d5` |
| a-reading-ui-delegate | `0x183285440` | 库文档导航后尝试打开阅读器 | decompiled-with-limitations | `ev_d1b7b2d0eca2777cd56463e23751000963f2054f7c1d86768bf3b51f9f2831df` |
| a-reading-account-store | `0x18336d6a0` | 账户存储 CreateStore 入口 | decompiled-with-limitations | `ev_2dd29f5ed28d2bc9ec785f47d8a1547dfecb8382497c9982775c06e575a86c17` |
| a-reading-navigation | `0x18336e860` | 阅读空间 DidFinishNavigation observer | decompiled-with-limitations | `ev_1b592964cec52b2d61b0e9777afa6f11841622ee056ec32ba1fed6fc10991079` |
| a-reading-service | `0x18337c280` | 同步控制器启动转发 | decompiled-with-limitations | `ev_eb4b24a40e08a177ad8a6f4553238c877aa6aa681a3c1d1e7fdfd43963031945` |
| a-reading-sync-init | `0x183382320` | 加密状态与本地初始化门控 | decompiled-with-limitations | `ev_74ee9037bdef843155e15ae4272cd3ef29404316b338bb04d8255fbbf713580e` |
| a-reading-sync-apply | `0x183398220` | 远端 Page 合并的本地读取与核验回调 | decompiled-with-limitations | `ev_c53fc585ebf99133aa734069fb709ab95d924965d7cca4585cb4c0bd0b6ac4c3` |
| a-reading-location-icon | `0x1832869d0` | 搜索引擎内置 favicon 选择 | decompiled-with-limitations | `ev_ef93bfe86574d9f5ab63ce98b595a060c762f06b37a580f77236dda7bb127890` |
| a-voice-refiner | `0x18366d3e0` | 带鉴权 JSON 文本改写请求 | decompiled-with-limitations | `ev_da080f15f715b3453ba298bc6c19d0481149573c399d751d26524af6aad088eb` |
| a-voice-controller-start | `0x183670ec0` | 识别结果与增量文本处理（原种子名 start） | decompiled-with-limitations | `ev_12b142a0878cce9354272e4cb6c6fc100e3305041b0f03f440b6840f2879ebef` |
| a-voice-controller-state | `0x1836718d0` | 气泡文字显示更新 | decompiled-with-limitations | `ev_3e72f38a959ce82cc62b14d9eea115226de383e6f4ffaaec56330eb2f23b682c` |
| a-voice-controller-result | `0x183673330` | OnRefined 改写完成处理 | decompiled-with-limitations | `ev_8370cea805119f685ea13e5a9f097c06997ed3a4256b8ea16e2fcd9e7d69f76e` |
| a-voice-injector | `0x183674860` | 捕获网页编辑目标 | decompiled-with-limitations | `ev_6ba30e34597b59368c3f672d9e09468c9932831895067d2b916ad423ec9fe1ad` |
| a-voice-hotkey | `0x183675cf0` | Windows Alt hook 回调 | decompiled-with-limitations | `ev_a6161a19a5a380c7c54009cc3a908cc2264b96c737aba74bd5d527804d05e49a` |
| a-voice-speech-init | `0x183676c50` | Windows 实时 ASR 启动 | decompiled-with-limitations | `ev_e85aaf88168e74de5f1d6e1af99d93996fbd2969956cd2d5dddc6f0ca9767ef0` |
| a-voice-speech-result | `0x18367a260` | WebSocket 连接完成回调（原种子名 result） | decompiled-with-limitations | `ev_3101d40c9e2e69feeedbe7cf78d44835a0a8fc23f8a20d4e4cae46f73d684ef0` |
| a-selection-controller | `0x183597050` | 键盘选择的调度入口 | decompiled-with-limitations | `ev_d8ed5f062bc4c55ba0da0822c86102849d0696b50c00082e2c170a181abca7c5` |
| a-selection-update | `0x183598130` | RequestPendingSelection 调度 | decompiled-with-limitations | `ev_cdb090f95d3173735fe6f8cbdf9d3cddccc8ed210531fc287ad5eda5516017cc` |
| a-reading-store-backend | `0x18336d9c0` | 账户 CreateStore 的后台结果适配 | decompiled-with-limitations | `ev_188ec411ada4a30deff3aab9a30d76075ae6b00ca843793ef5ffe3530952faf2` |
| a-reading-sync-local-commit | `0x183392e00` | 本地 mutation 持久化完成处理 | decompiled-with-limitations | `ev_6895279c4edc0fdfcc570f1db7ebc6e6ce92d2862049113b093a40f0ca5cda13` |
| a-reading-sync-read-metadata | `0x183384070` | 读完同步元数据后加载控制记录 | decompiled-with-limitations | `ev_b8db6e098ab07fa7854a8714982ad98b47a8015ef5b3ebdcfdd56fac3ccdd339` |
| a-voice-controller-toggle | `0x18366fbc0` | 浏览器热键控制入口 | decompiled-with-limitations | `ev_bf26f2d79840304a9605dd759e6b9117bba1e69f7769b145511f7134eac2b009` |
| a-voice-inject-commit | `0x183675390` | 对已捕获目标提交文字并清理 | decompiled-with-limitations | `ev_9d352001b0503b3dfbc8397bf4810944e628f4faad9b1123f8ae6b92580ec31f` |
| a-voice-hotkey-install | `0x1836759d0` | 安装 Windows 低级键盘 hook | decompiled-with-limitations | `ev_a3b27f8c034940a083372bc8a4e36710aec9a190e56cddd1bb08d8ed2714f416` |
| a-voice-asr-parser | `0x18367b8c0` | 实时 ASR WebSocket 消息组帧与 JSON 解析 | decompiled-with-limitations | `ev_fb7380290e592c6d5fbc38340420f3691ce34aa18b06348b808e88a9dbec3f7c` |
| a-voice-refiner-endpoint | `0x18366c5a0` | 构造文本改写 URL | decompiled-with-limitations | `ev_8e5dc5e7181bc3607cdf2a2bd04703af4f2407810a038ec22946779716402a54` |
| a-selection-request | `0x183598700` | 请求选择用的 Mojo remote 建立与派发 | decompiled-with-limitations | `ev_922b5b054d0630e1071f14b92e881255ebc4daeae4c44a41edfb25f23f6e0e8d` |
| a-reading-store-adapter | `0x18134a090` | 序列任务上的存储适配对象构造 | decompiled-with-limitations | `ev_aaa681c12bb6596b80a9f5617c31c10eb87eba8f2e09b90b16464517d525764d` |
| a-voice-controller-finish | `0x183673ae0` | InjectAndDismiss/Finalize 收尾 | decompiled-with-limitations | `ev_77dde321d16dbbff6bf5f3abe5107d8c83d8ed0e27cdfd04426f5608ccf877f2` |
| a-voice-capture-device | `0x18565fc70` | ASR 启动所调用的媒体辅助函数 | decompiled-with-limitations | `ev_5bf0db5c2aa0e061dafdd813022428b4cda739a1c8dd90378f8a5333abb4ec68` |
| a-voice-frame-id-resolver | `0x184770e70` | frame 全局 ID 查表解析辅助 | decompiled-with-limitations | `ev_915f41c11974d8bf43ad5bb82029bd810385c6647d56f8ea3781c700fb929372` |
| a-selection-mojo-binding | `0x183599ff0` | 绑定 TabTextSelectionAgent 接口 | decompiled-with-limitations | `ev_1eca38de0ac7d025cba590d11f5db8d594d3adcd1d42ec027be3121e69d6d8a2` |
| a-selection-result-callback | `0x183598a30` | 选择请求代次匹配及清理回调（原种子名 result） | decompiled-with-limitations | `ev_f435ede65b39c6a1e99a9e77d57d0a6aba605f82318d778da113021c0321ee09` |

## 上游及契约参照边界

- 固定参照 refs/tags/154.0.8037.58。公开源是概念/接口参照，不是 Tabbit 原始源码。
- 本轮新增读取仅 Chromium primary files；无第三方对实现的二手推断。
- DataTypeStoreImpl 结构相容不是函数等价证明；RenderWidgetHost/RenderFrameHost 公开方法存在不证明 +0x40/+0xa8 对应名称。

资源及 schema 提供业务契约与界面适配线索；本轮未完成 reader renderer 或真实 AI 消费端追踪。主报告应使用本文件的观察/推断/未知区分，不写成“Chromium 全部未变”，也不写成“已替换全部原生阅读或语音实现”。
