{
  "date": "2026-10-27",
  "target_sha256": "a10ee34ead4a08c906e09f3dd4449042fb084a69ce59210b1c8cee815723bf3c",
  "scope": "Analyst review of retained REA and bounded fixed-tag source comparisons; no full repository/binary diff and no new decompilation probes.",
  "tabs": {
    "reference": "Chromium 154.0.8037.58",
    "functions": {
      "shared_names": [
        "get",
        "getCurrent",
        "connect",
        "sendRequest",
        "sendMessage",
        "getSelected",
        "getAllInWindow",
        "create",
        "createSplit",
        "duplicate",
        "query",
        "highlight",
        "update",
        "move",
        "reload",
        "remove",
        "group",
        "ungroup",
        "detectLanguage",
        "captureVisibleTab",
        "executeScript",
        "insertCSS",
        "removeCSS",
        "setZoom",
        "getZoom",
        "setZoomSettings",
        "getZoomSettings",
        "discard",
        "goForward",
        "goBack"
      ],
      "tabbit_only_names": [
        "getGlicTabId",
        "enableTabAnimation",
        "disableTabAnimation",
        "enableOverlay",
        "disableOverlay"
      ]
    },
    "events": {
      "shared_names": [
        "onCreated",
        "onUpdated",
        "onMoved",
        "onSelectionChanged",
        "onActiveChanged",
        "onActivated",
        "onHighlightChanged",
        "onHighlighted",
        "onDetached",
        "onAttached",
        "onRemoved",
        "onReplaced",
        "onZoomChange"
      ],
      "tabbit_only_names": [
        "onTabModelUpdated",
        "onActiveTabChanged"
      ]
    },
    "types": {
      "shared_names": [
        "TabStatus",
        "MutedInfoReason",
        "MutedInfo",
        "Tab",
        "ZoomSettingsMode",
        "ZoomSettingsScope",
        "ZoomSettings",
        "WindowType"
      ],
      "tabbit_only_names": [
        "OverlayOptions"
      ]
    },
    "caveat": "Only exact declaration names compared. Shared name is not proof of identical implementation. Local-only names are not implementation proof."
  },
  "pet": {
    "bounded_upstream_widget_entries": [
      "DEPS",
      "OWNERS",
      "browser_conditions.cc",
      "browser_conditions.h",
      "conversions.cc",
      "conversions.h",
      "glic_floating_ui.cc",
      "glic_floating_ui.h",
      "glic_floating_ui_android.cc",
      "glic_floating_ui_android.h",
      "glic_inactive_side_panel_ui.cc",
      "glic_inactive_side_panel_ui.h",
      "glic_inactive_side_panel_ui_android.cc",
      "glic_inactive_side_panel_ui_android.h",
      "glic_inactive_tab_ui.cc",
      "glic_inactive_tab_ui.h",
      "glic_instance_coordinator_interactive_uitest.cc",
      "glic_side_panel_coordinator_android.cc",
      "glic_side_panel_coordinator_android_browsertest.cc",
      "glic_side_panel_coordinator_browsertest.cc",
      "glic_side_panel_coordinator_desktop_android.cc",
      "glic_side_panel_coordinator_desktop_android_browsertest.cc",
      "glic_side_panel_coordinator_impl.cc",
      "glic_side_panel_ui.cc",
      "glic_side_panel_ui.h",
      "glic_side_panel_ui_android.cc",
      "glic_side_panel_ui_android.h",
      "glic_side_panel_ui_android_unittest.cc",
      "glic_tab_ui.cc",
      "glic_tab_ui.h",
      "glic_view.cc",
      "glic_view.h",
      "glic_view_unittest.cc",
      "glic_widget.cc",
      "glic_widget.h",
      "glic_widget_unittest.cc",
      "glic_window_animator.cc",
      "glic_window_animator.h",
      "glic_window_resize_animation.cc",
      "glic_window_resize_animation.h",
      "inactive_view_controller.cc",
      "inactive_view_controller.h"
    ],
    "bounded_build_has_tabbit_pet": false,
    "binary_strings": [
      {
        "va": "0x190b17548",
        "file_offset": 280062280,
        "value": "chrome://tabbit-desktop-pet/"
      },
      {
        "va": "0x190b17568",
        "file_offset": 280062312,
        "value": "TabbitDesktopPetWidget"
      },
      {
        "va": "0x190b174e0",
        "file_offset": 280062176,
        "value": "..\\..\\chrome\\browser\\glic\\widget\\tabbit_desktop_pet_controller.cc"
      }
    ],
    "pseudocode_record": "evidence/rea-p-pet-controller.json",
    "scope": "Glic widget directory and BUILD only. Absence here does not prove absence throughout Chromium; binary control flow plus product announcement support product attribution."
  },
  "businesses": [
    {
      "id": "ai-sidebar",
      "kind": "adapt",
      "baseline": "上游 Glic 已有会话、侧栏及窗口设施；ExtensionFunction 是通用扩展入口机制。",
      "delta": "增加 tabChatExt.showTabSidePanel API，解析产品参数、检查活动浏览器与 Glic 状态，再调用面板对象。",
      "proof": "工厂 0x183988ee0 → 虚表处理函数 0x183aa1c70，包含状态分支与面板调用。",
      "scope": "确认 API 包装与控制入口；未证明侧栏/Glic 主体由 Tabbit 重写。"
    },
    {
      "id": "b-ai-gateway",
      "kind": "module",
      "baseline": "Chromium 提供网络与异步回调基础设施；没有做全部上游 Agent 网关的同版本差分。",
      "delta": "增加 loopback 推理路由、Host/Bearer 校验、模型目录与 revision 契约，并构造 Tabbit 远端 Responses 请求。",
      "proof": "独立路由和请求函数恢复了 access_denied、模型校验、SSE 头与 /api/v1/local-agent-runtime/responses。",
      "scope": "确认安装产物中的产品网关逻辑；底层 URLLoader 精确类型及线上执行仍未验证。"
    },
    {
      "id": "b-ai-providers",
      "kind": "module",
      "baseline": "Profile 与偏好存储是上游设施；凭据加密的全部底层实现未展开。",
      "delta": "增加 tabbit.local_agent.providers/model 配置，在成功回调中保存 encryptedCredential、模型与 byok/ 状态。",
      "proof": "成功凭据持久化回调恢复了配置读写及加密失败分支。",
      "scope": "只确认成功回调；list/save/delete/test/login 的完整 Action 分发反编译失败。"
    },
    {
      "id": "b-ai-runtime",
      "kind": "module",
      "baseline": "Chromium 已有 IPC/Mojo 与进程设施；Node 也不是 Tabbit 发明。",
      "delta": "增加 Node 宿主、tabbit-runtime 命名管道及专属 version/kind/generation/session 协议，连接随包任务服务。",
      "proof": "原生 host/transport 与随包 BrowserServiceChannel 的长度帧、握手和会话字段相互对应。",
      "scope": "确认新增的产品通信边界；未证明 Chromium 其他 IPC 被替换或未修改。"
    },
    {
      "id": "b-ai-cdp",
      "kind": "module",
      "baseline": "DevTools/CDP 与 Browser、Target、Page 命令是上游能力。",
      "delta": "在私有 CDP 桥前增加目标所有权、前台保护、命令拒绝策略，并为部分命令合成响应。",
      "proof": "dispatcher 直接 CALL policy；target_not_owned、foreground_policy_preserve 与 synthetic reply 分支已恢复。",
      "scope": "增量是桥的策略与代答层；完整 allowlist 及 DevTools 后端差异尚未恢复。"
    },
    {
      "id": "b-ai-observer",
      "kind": "module",
      "baseline": "TabStripModel 的观察者与标签分组通知是上游设施。",
      "delta": "新增 Agent 服务持有的标签观察者，把分组变化转成任务工作，并释放受管 WebContents 所有权。",
      "proof": "服务构造保存 observer，分组回调经 worker 直接调用 ReleaseWebContentsInternal。",
      "scope": "确认服务、状态和回调接入；未证明替换标签模型或标签栏。"
    },
    {
      "id": "ai-automation",
      "kind": "adapt",
      "baseline": "CDP Input.dispatchMouseEvent 和 Chromium 输入系统已有。",
      "delta": "新增 tabAutomationInput.click 参数校验、事件序列与时序转换，把产品点击请求适配到 CDP。",
      "proof": "工厂、构造器和处理函数链恢复了坐标/次数校验及 mouseMoved/Pressed/Released 命令构造。",
      "scope": "增量是 API 适配与校验；后续完整发送、确认链及其他输入方法未穷尽。"
    },
    {
      "id": "ai-voice",
      "kind": "module",
      "baseline": "Chromium 有 frame/widget、网页输入与语音相关设施；Windows 键盘 hook 是系统能力。",
      "delta": "新增双 Alt 热键、网页输入目标管理，以及远端实时 ASR → 独立 rewrite → 文本提交的业务链。",
      "proof": "SetWindowsHookExW、ASR/rewrite 请求、frame 捕获和最终 widget 虚调用均有函数/汇编证据。",
      "scope": "确认录入和编排逻辑；远端模型、最终 widget 方法名和 Web Speech 替换关系未确认。"
    },
    {
      "id": "ai-selection",
      "kind": "module",
      "baseline": "frame/renderer、Mojo interface provider 与选择文本基础能力属于上游。",
      "delta": "新增 tab.mojom.TabTextSelectionAgent 协议及浏览器请求控制器，用 generation 管理断连和请求清理。",
      "proof": "绑定函数实际请求业务 Mojo 接口；remote、代次回调与清理控制流已恢复。",
      "scope": "确认新协议与调度接入；renderer 端提取主体和 selectedText 回调仍有缺口。"
    },
    {
      "id": "ai-content",
      "kind": "adapt",
      "baseline": "Chromium 已有 PDF 文档、Viewer frame 与 PDFium；读取本地文件和网页内容不是新的引擎能力。",
      "delta": "增加提取 API 的 file/tab 分流、URL 与限额校验、超时编排，以及内置翻译扩展的受限 Viewer 脚本入口。",
      "proof": "extractContent/extractPdfText 与 overlay 函数恢复了分流、PDF 对象协作和调用者限制。",
      "scope": "增量是内容与翻译适配；最终 PDF/OCR 算法及 PDFium 内部改动未恢复。"
    },
    {
      "id": "ai-organize",
      "kind": "adapt",
      "baseline": "Chromium 已有标签/分组及 AI 相关设施；本次未证明“AI 标签整理”概念本身为 Tabbit 独有。",
      "delta": "增加 tabOrganize 扩展结果入口，将分组名称/tabId 接回产品控制器，并检查状态与 stale request_id。",
      "proof": "handleExtensionOrganizeResult 工厂/处理函数 → TabOrganizeController 结果接收链已恢复。",
      "scope": "只确认结果桥与状态管理；模型计算、排序算法及与上游整理模块的差异未取得。"
    },
    {
      "id": "b-ai-dependencies",
      "kind": "module",
      "baseline": "下载、归档和文件设施可复用；Chromium 更新器属于另一条业务链。",
      "delta": "增加 Agent 工作区 runtime/skills 下载、SHA-256 校验、暂存目录、元数据验证及 installed.json 发布状态机。",
      "proof": "下载回调 → Install → 提取/验证 → 发布/提交分支与目录字段已恢复。",
      "scope": "确认依赖安装业务；helper 的系统调用原子性与 MCP handler 未展开。"
    },
    {
      "id": "b-ai-images",
      "kind": "module",
      "baseline": "Chromium 已有图像解码、网络与缓存设施。",
      "delta": "增加 Agent 附件请求状态、uploadRequired/url/expiresIn 响应解析，以及 HTTPS 域名校验和 URL 有效期缓存。",
      "proof": "请求键匹配、上传分支、myqcloud.com 边界校验及期限处理均有函数输出。",
      "scope": "增量是附件业务缓存；实际上传后续和图像底层改动未完整恢复。"
    },
    {
      "id": "b-ai-dsh",
      "kind": "module",
      "baseline": "Node、系统子进程和 DSH 软件本身是依赖；不是 Tabbit 自研基础运行时的证明。",
      "delta": "增加浏览器内 DSH 服务/进程管理、DSH_HOME、日志目录及 --import 生命周期脚本和关闭衔接。",
      "proof": "原生启动 CALL 命令构造函数；参数与随包 shutdown/EOF → SIGTERM 脚本相符。",
      "scope": "确认产品宿主与生命周期 glue；未认证 DSH 二进制版本或其内部修改。"
    },
    {
      "id": "ai-external-agent",
      "kind": "module",
      "baseline": "Node worker_threads、Playwright 和外部 Agent CLI 是已有组件。",
      "delta": "随包增加固定 provider 表、统一 list/read/send 契约与任务 transport，连接多个外部 CLI。",
      "proof": "第一方 JS 静态代码可见适配器、固定命令参数、Worker 与私有 CDP transport。",
      "scope": "这是随包 JS 证据，未作为新原生反编译记录；没有运行验证或证明作者原创所有依赖。"
    },
    {
      "id": "ai-privacy",
      "kind": "partial",
      "baseline": "URL、证书和策略设施属于浏览器已有领域；本次未做完整上游隐私策略比较。",
      "delta": "已确认 tabAiPrivacy 阻止列表变化事件和接口声明；实际采集/推理前的强制拦截逻辑尚未恢复。",
      "proof": "事件派发函数恢复了 Added/Removed/ListChanged；其他方法主要来自 schema。",
      "scope": "不能把接口名称当作“所有 AI 请求都被拦截”的实现证据。"
    },
    {
      "id": "native-reading",
      "kind": "module",
      "baseline": "上游已有阅读列表/阅读视图、Sync 数据存储与导航设施；阅读概念和 Sync 框架不是 Tabbit 新增。",
      "delta": "增加阅读空间的 Page catalog、文档/笔记状态、controlpage 元数据合并，以及阅读器导航委托。",
      "proof": "自有 catalog 与 local-state key、CreateStore、远端 merge 和导航 observer 路径已恢复。",
      "scope": "确认产品数据层与协作链；Sync 基类/注册点、最终抽取器及 reading-list 替换关系未确认。"
    },
    {
      "id": "native-pet",
      "kind": "module",
      "baseline": "上游已有 Glic 窗口、floating UI、Views/WebUI/Mojo。固定 tag 的 Glic widget 目录及 BUILD.gn 未列出 Tabbit 桌宠控制器（有界对照）。",
      "delta": "新增桌宠 GoOut/GoHome 控制、方向参数、启用与位置/尺寸状态，以及独立 TabbitDesktopPetWidget 和 chrome://tabbit-desktop-pet/ 页面。",
      "proof": "0x1836f0b70 → 0x1834ac3d0；0x1834aa5d0 创建窗口并引用桌宠 URL。官方公告另确认产品新增桌宠系统。",
      "scope": "确认桌宠产品窗口与控制增量；不推断整个 Glic 被重写，动画/内容/全部 Mojo 注册仍未恢复。"
    },
    {
      "id": "b-native-files",
      "kind": "module",
      "baseline": "上游 ExtensionFunction、Profile 和异步文件 I/O 已有；文件读写原语不是自研引擎。",
      "delta": "新增 tabLocalFS/tabLocalWorkspace API 与 Profile 服务，把来源上下文和参数接入异步文件 worker。",
      "proof": "读/写等代表函数恢复了 ExtensionFunction 形状、服务取得和 callback worker 分发。",
      "scope": "确认产品文件桥；实际 delegated availability allowlist、全部路径权限检查未恢复。"
    },
    {
      "id": "b-native-preview",
      "kind": "module",
      "baseline": "浏览器已有 URL 数据源、PDF/file 加载和系统默认应用设施。",
      "delta": "新增本地预览数据请求分发、tabLocalFilePreview token API，以及设置页的 getSystemOpenInfo/requestSetSystemDefault 调用。",
      "proof": "StartDataRequest 与打包设置 JS 相互对应；schema 补充 token 契约。",
      "scope": "确认预览服务/设置入口；token helper、各格式转换和 Windows 默认应用实际操作未恢复。"
    },
    {
      "id": "native-omnibox",
      "kind": "adapt",
      "baseline": "AutocompleteController、TemplateURLService、HistoryService 与 Omnibox provider 均已存在；筛选、去重和打开标签行为也可能与上游重叠。",
      "delta": "增加 tabOmnibox 请求/结果事件层，处理 sync/async/final、requestId、hasMore、open-tab 建议与 URL→搜索；deleteSuggestion 接入 HistoryService::DeleteURLs，默认引擎读取 TemplateURLService，并增加搜索引擎图标映射。",
      "proof": "0x183835800→0x182ea6560；0x18382d630 处理结果；0x183837b50→0x18b83ff20→0x18b8497e0；0x183838900 读取默认引擎。",
      "scope": "确认产品 API/加工/删除/默认引擎路径；success=true 只是调度结果，provider 排序、UI 布局和数据库删除完成语义仍未确认。"
    },
    {
      "id": "native-memory",
      "kind": "module",
      "baseline": "Chromium 已有 MemoryPressureListenerRegistry、内存压力通知及标签丢弃设施。",
      "delta": "在 BrowserProcessImpl::PreMainMessageLoopRun 接入 Tabbit 监控服务，增加主动阈值触发、会话状态与统计采集。",
      "proof": "主循环分配并 CALL Start；Tick 出现 free_mb < threshold，后续调用上游压力通知层。",
      "scope": "确认新服务与生命周期插入；真正淘汰/回收/预热算法尚未恢复，不能宣称内存管理器重写。"
    },
    {
      "id": "native-diagnostics",
      "kind": "module",
      "baseline": "上游 tracing、系统/GPU/扩展状态以及网络设施已有。",
      "delta": "新增产品诊断编排与 ZIP 上传入口，组装 system_info 等字段并请求 /proxy/v0/cos/presigned-upload-url。",
      "proof": "录制配置、系统采集和 presigned-upload-url POST 构造均有函数输出。",
      "scope": "确认产品配置、编排和请求；tracing 引擎并非新增，ZIP 全内容与实际上传未验证。"
    },
    {
      "id": "native-analytics",
      "kind": "module",
      "baseline": "浏览器偏好、任务调度和统计设施已有；本次未做遥测子系统全量差分。",
      "delta": "新增应用/扩展清单上报服务的 reporting_enabled、campaign、max_apps、startup_delay 和尝试状态管理。",
      "proof": "Start/调度函数可见偏好、完成 campaign、计数及延时任务分支。",
      "scope": "确认产品上报状态与调度；枚举主体、完整上传和 recordEvent 实现仍未恢复。"
    },
    {
      "id": "native-theme",
      "kind": "adapt",
      "baseline": "深色模式与 ThemeService::SetBrowserColorScheme 已存在于固定上游；browser.theme.color_scheme2 是其偏好。",
      "delta": "新增 tabThemeColor.setDarkMode 扩展 API，校验参数/Profile 并调用上游 ThemeService setter。",
      "proof": "工厂 → 0x183842c70 → 0x1893211b0；写入 color_scheme2，与固定上游 setter 相符。",
      "scope": "这里只确认 API 包装；深色模式本身不算 Tabbit 新功能，其他个性化实现未展开。"
    },
    {
      "id": "native-tabs",
      "kind": "partial",
      "baseline": "固定上游 tabs schema 已有 createSplit，tabs_api.cc 也有 TabsCreateSplitFunction；其他通用 tabs 方法亦已有。",
      "delta": "tabs schema 比较确认新增 5 个方法名、2 个事件名和 OverlayOptions；另有产品事件路由，但这些方法主体尚未逐项恢复。",
      "proof": "精确名称对照：getGlicTabId、enable/disableTabAnimation、enable/disableOverlay；onTabModelUpdated/onActiveTabChanged。",
      "scope": "名称差集只证明接口声明差异；不证明实现/效果。createSplit 不计为 Tabbit 新增，也不宣称其实现没有改动。"
    },
    {
      "id": "native-auth",
      "kind": "partial",
      "baseline": "上游已有 Signin、Cookie、Sync 和偏好设施；产品账号与浏览器同步需要分别核对。",
      "delta": "只定位到 tabSignin/tabAuth/tabUserPrefs 等产品账户、Cookie 同步和设置接口表面。",
      "proof": "schema/feature 定义中确认命名空间与方法；仅有通用分发构造证据。",
      "scope": "主体尚未恢复；不能把登录、Cookie 同步或设置全套能力计为已确认的 Tabbit 实现改动。"
    },
    {
      "id": "native-bookmarks-open",
      "kind": "adapt",
      "baseline": "书签节点、窗口 disposition 与导航 helper 已在 Chromium；书签树和数据库不是本次新发现的 Tabbit 模块。",
      "delta": "在 bookmark_utils_desktop.cc 增加 Tabbit newtab 判断：新标签页保持 CURRENT_TAB，其他页改为 NEW_FOREGROUND_TAB；旧书签 host 解析到当前产品 host，另有测试用 Bookmark Manager 开关。",
      "proof": "0x1835841e0 的数据引用直接出现 [BookmarkUtils] is_newtab、keeping CURRENT_TAB、changed to NEW_FOREGROUND_TAB、Resolved legacy bookmark host 与 /newtab。",
      "scope": "确认产品分支和导航输入；未取得逐行 patch、完整 host 映射表或用户真实点击运行结果。"
    },
    {
      "id": "native-bookmarks-api",
      "kind": "module",
      "baseline": "标准 bookmarks CRUD、通用扩展分发与书签模型属于固定上游；本次只比较了声明的名称和字段。",
      "delta": "内嵌 chrome.bookmarks schema 增加 GUID、openCount/lastOpenedAt/metaInfo、preserveLastUsed、metadata 方法、import/export、favicon 和 selective/usage 事件。",
      "proof": "DLL 中嵌入 schema 与固定上游差集：8 个新增函数、3 个新增事件、4 个节点字段、1 个创建字段。",
      "scope": "这是声明级硬证据；metadata 的 native 持久化、权限和每个 handler 仍未逐项恢复。"
    },
    {
      "id": "native-bookmarks-cloud",
      "kind": "module",
      "baseline": "Bookmark Manager WebUI、chrome.bookmarks 事件和书签模型已有；扩展与远端摘要服务是产品新增层。",
      "delta": "书签 WebUI 数据源增加产品字段；扩展监听书签变化，执行云书签开关、登录联动、收藏创建和 AI 摘要队列，写入 ext.summary。",
      "proof": "0x1834c06d0 恢复数据源字段；resources.pak 60031 保留 onCreated/onChangedSelective/onRemoved、createSummary/linkSummary 与 ext.summary 调用。",
      "scope": "确认扩展产品编排和 WebUI 数据源线索；云端协议、摘要后端、完整页面 diff 和 Mojo 路由仍未闭合。"
    },
    {
      "id": "native-history-migration",
      "kind": "module",
      "baseline": "Chromium 有书签 HTML 解析接口、Profile 导入和 HistoryService；tab_data_migration 是安装产物中恢复出的产品目录。",
      "delta": "新增书签 HTML 预处理与异步解析、schema_version=1 的历史 JSON 解析，以及 ImportHistory 对历史、打开标签、设备绑定会话和 Profile 偏好的编排。",
      "proof": "0x18342d200 出现 ParseBookmarksFile/ICON_URI；0x18342dba0 出现 schema_version/historyItems/visitCount/time_usec；0x183449a10 引用 ImportHistory/ImportOpenTabsFromProfilePath/ImportDeviceBoundSessions。",
      "scope": "确认解析和编排路径；SQL/backend 写入、去重、事务和完整导入结果未恢复。"
    },
    {
      "id": "native-history-webui",
      "kind": "adapt",
      "baseline": "history.mojom PageHandler、BrowsingHistoryHandler、HistoryService 及历史页资源属于固定上游；actor visits 和 critical actions 也在上游契约中。",
      "delta": "本轮未发现历史查询/展示算法被重写；可确认的产品历史增量是迁移导入与地址栏建议删除。历史页继续走 WebUI/Mojo 查询和删除接口。",
      "proof": "resources.pak 19973/52435 保留 16 个 PageHandler/Page 方法；0x18a0722e0 是 BrowsingHistoryHandler 构造路径；固定上游 history.mojom 方法名与结构高度对应。",
      "scope": "页面接口复用边界已确认；QueryHistory 主体、排序/SQL 和视觉 diff 仍未知，不能把历史页整体归因于 Tabbit。"
    }
  ]
}