← 返回列表
⚠ 装前注意
ChatGPT Web 作为 DeepSeek Harnessdsh提供程序——独立运行。该插件
基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/9/16 · 已提供中文文档
ChatGPT Web 作为 DeepSeek Harness 提供方——自有 Chromium 守护进程驱动临时聊天,无需 API 密钥
综合分
29.5
GitHub 分
29.5
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add twilightt1/dsh-llm-chatgpt-web未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 1 天前真实安装成功
- 是什么
- dsh 原生插件 · chat
- 装得上吗
- 本站已真实安装成功(非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 9 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/25
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/21(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-llm-chatgpt-web(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
未发布到 npm registry,仅可从源码安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/22 08:27:58
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-agent@deepseek-ai/dsh-session@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/schemastery用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成dsh-llm-chatgpt-web ChatGPT Web 作为 DeepSeek Harness(dsh)提供程序——独立运行。该插件 拥有自己的 Chromium 并只需登录一次。文本轮次使用全新的临时聊天 页面;可选的本地 MCP 轮次使用启用了连接器的普通聊天,其 物理响应可以跨越多个兼容的 DSH 工具结果步骤。当该物理响应 确定后,适配器拥有的对话会被删除;显式的兼容性变更或页面丢失仅在 持久结果得到证实后才使用安全的全新重放。默认文本传输不需要外部 桥接;可选的 Unix MCP 传输会添加一个本地代理和 stdio MCP 服务器; 单独配置的连接器/隧道使其可被访问,而无需更改 DSH 的代理循环。 dsh plugin --profile web add github:twilightt1/dsh-llm-chatgpt-web dsh web Model picker → provider "chatgpt-web" pnpm ≥10 默认会阻止依赖构建脚本;此包附带 预构建的 lib/,并且不需要 allowBuilds 条目。如果你的客户端仍然 提示,请拒绝它——这里没有任何内容需要在安装时运行。 0.7.0 候选版本说明 - 本地 MCP 现在将兼容的工具结果步骤保留在一个物理 ChatGPT 响应上,具有精确关联、日志化重放和安全的全新重放 回退。 - 包含本地安全策略、本地批准授权、私有检查点恢复、 咨询性安全快照和只读 JSON 诊断。文本 传输保持不变,并且仍是默认值。 - 这是一个实验性的 0.7.0 版本:真实的本地工具延续尚未 达到发布就绪状态,因为 ChatGPT 安全检查阻止了有界实时工具 探测。它并未被呈现为与 API 等效或生产就绪。 工作原理 DSH agent-loop → GenerateOptions → ChatGptWebAdapter.stream() → text: fresh Temporary Chat page → native: one connector-enabled physical response + broker request → select effort → attach prompt → one Send → poll answer DOM (persistent Markdown buffer) → logical StreamChunks → usage + finish/tool boundary Default text tools: JSON envelope + fenced tool-call contract. Opt-in native tools: local broker ← stdio MCP façade ← connector/tunnel ← exact ChatGPT connector; broker batches become ordinary DSH tool-call chunks, then the next compatible step resolves exact results into the same physical response. Incompatible history/configuration or a recoverable page loss fences the old response before one canonical fresh replay. The adapter deletes each exact owned native conversation after settlement. 文本轮次在其提示中携带完整的可见历史,并且跨轮次保持 无状态。本地工具轮次使用普通聊天,因为 ChatGPT 在临时聊天中禁用连接器;一个物理响应保留其助手身份、代理请求、 DOM/Markdown 游标、截止时间和仅追加的逻辑边界日志,同时 DSH 执行工具。 兼容的下一个请求必须包含确切的助手调用,并且每个结果对应一个纯文本结果 调用;它不会分配页面、编译提示词、选择连接器,或再次按下发送。一个私有的、可安全重启的账本会在下一个原生轮次之前重试失败的清理。轮次是串行化的:最多只有一个页面处于活动状态。 提示词传输遵循 codex-chatgpt-web 经过验证的设计:DSH 对话被包裹在一个 信封中,并带有明确的传输契约(角色语义、先读后做、绝不回显),这取代了旧的明文记录——旧方式会让 ChatGPT 把指令回显回来。答案提取通过其稳定的 DOM 身份绑定新建的助手轮次,然后仅将该轮次的答案根 HTML 转换为 Markdown(turndown)。它绝不会回退到更早的轮次或整个文档。一个带源范围的仅追加缓冲区会保留代码围栏(包括 原生续接安全性 原生续接是实验性的,并且仍然需要显式启用。重放信封仅包含一个带版本的非机密执行哈希、逻辑边界和不透明调用 ID。对提供方可见历史、模型、系统提示词、工具模式、生成选项、引导或物理页面健康状况的更改,只有在每个先前的工具结果都是持久的且没有任何副作用不确定时,才会选择显式的新重放路径。提交后的传输失败、工具结果不明确、关联冲突或清理失败都会停止,而不会重新提交。RATE_LIMIT 会开启一个固定的五分钟适配器本地冷却时间,并且绝不会自动重试。文本传输以及辅助的标题/压缩调用不使用此生命周期。 过渡兼容性 过渡版本保留了现有的 correlateToolResults、nativeCheckpointRawResultHash 和 nativeCheckpointProjectionHash 导出,以及源码级的 hasExactNativeToolResults 辅助函数,作为已弃用的兼容适配器。新代码应依赖续接所拥有的持久结果证据行为;在过渡行为经过审查后,这些兼容适配器计划在下一个版本中移除。 先决条件 - 已安装 Google Chrome(或设置 chromeExecutablePath)。 - 一个用于 Cordis 对等项的 deepseek-harness 检出(见下文)。 安装(任选其一) A. 本地检出(开发,无需构建步骤——lib/ 随仓库提供): sh dsh plugin --profile web add /absolute/path/to/dsh-llm-chatgpt-web dsh web CLI 会注册 dsh.bundle.patch,链接该检出,并自动将该 bundle 追加到配置文件(--dump-config 会显示 llm-chatgpt-web 行)。请保持检出位置不变——配置文件会链接它。 B. 预构建 tarball(不会请求构建权限): sh pnpm pack # → dsh-llm-chatgpt-web-0.7.0.tgz dsh plugin --profile web add ./dsh-llm-chatgpt-web-0.7.0.tgz C. GitHub(已提交预构建的 lib/——无需构建权限): sh dsh plugin --profile web add github:twilightt1/dsh-llm-chatgpt-web 然后在 Web UI 模型选择器中选择提供方 chatgpt-web(模型 chatgpt-web/high 或根据你的账户而定),或在 agent 配置中设置它。需要安装 Google Chrome/Brave,并在首次使用时手动登录一次 ChatGPT。 最低 harness 对等依赖在 peerDependencies 中声明 (cordis ^4.0.1、dsh-llm ^0.1.1-rc.2、schemastery ^3.18.1)。 运行时依赖包括 playwright-core(驱动系统 Chrome;无需下载浏览器)、MCP SDK 和 Zod。 首次运行:登录 在没有已保存会话的情况下,第一轮会在 chatgpt.com 打开一个有头窗口。在该窗口中手动登录;插件会等待输入框出现(作为会话的证明),将其保存到 profileDir (~/.dsh-chatgpt-web/storage-state.json),此后便继续运行。 浏览器之间不会复制任何内容。如果会话之后过期,请删除 配置文件目录并重新运行。 有头隐藏守护进程(当前状态)。 各轮次作为标签页运行在一个 共享浏览器守护进程中(lib/chatgpt/daemon-main.js,首次使用时自动以分离方式启动, 端点在 browser-endpoint.json 中,空闲后在 daemonIdleMs 后关闭)。该守护进程的单一窗口在诞生时即被隐藏并最小化, 因此第一轮之后的轮次绝不会闪现——附加、流式传输、分离,完成。 真正的无头模式尝试过两次(先是 Brave,然后是真正的 Chrome):ChatGPT 会 以一个交互式 Cloudflare 复选框作答,该复选框在无头模式下永远不会清除 (有截图为证),因此守护进程保持有头隐藏。适配器绝不会 关闭共享浏览器——只关闭它自己的上下文,外加一个内部 连接分离,以便宿主干净退出。 挂载 yaml - id: llm-chatgpt-web name: '/abs/path/to/dsh-llm-chatgpt-web/src/index.ts' config: profileDir: ~/.dsh-chatgpt-web headed: true connectorTransport: text # default; use mcp for native tools (Unix only) Existing externally owned MCP runtime: connectorTransport: mcp connectorRuntime: external connectorName: DSH Native # exact Personalized connector title brokerSocketPath: ~/.dsh-chatgpt-web/native-broker.sock mcpInvocationTimeoutMs: 90000 Managed tunnel-client runtime (replace the block above): connectorTransport: mcp connectorRuntime: managed connectorName: DSH Native brokerSocketPath: ~/.dsh-chatgpt-web/native-broker.sock nativeRuntimeConfigPath: ~/.dsh-chatgpt-web/native-runtime.json mcpInvocationTimeoutMs: 90000 Secure policy example (use an absolute workspace path and exact DSH tool names): nativeSecurity: toolPolicy: evidence-only workspaceRoot: /absolute/path/to/workspace approval: workspace-policy evidenceLimits: maxBytes: 65536 maxLines: 200 rules: - tool: read_file capability: workspace.read pathArguments: [/path] result: sanitized-evidence chromeExecutablePath: /usr/bin/google-chrome - id: agent-loop name: '@deepseek-ai/dsh-agent-loop' config: agents: - id: main provider: chatgpt-web model: chatgpt-web/high 模型(每个模型的 effort 是固定的):chatgpt-web/luna、chatgpt-web/think、 chatgpt-web/light、chatgpt-web/medium、chatgpt-web/high、 chatgpt-web/extra-high、chatgpt-web/pro(最后两个仅在你的账户 暴露它们时可用——否则 effort 探测会以失败关闭方式处理)。 浏览器二进制的自动检测顺序:显式配置 → $CHROME_EXECUTABLE_PATH → 平台 Chrome → Brave(macOS)→ Playwright 的 捆绑 Chromium。在宿主卸载时调用 adapter.dispose() 以释放 所拥有的浏览器(开发用的 scripts/live-turn.ts 展示了该模式)。 原生 MCP 设置(可选启用,仅限 Unix) 原生 MCP 有两种所有权模式。connectorRuntime: external 保留 现有契约:由操作员拥有隧道进程并启动 该包的 stdio MCP 子进程。connectorRuntime: managed 使此插件拥有 固定版本的 tunnel-client 生命周期。文本传输仍是默认方式。 1. 账户先决条件 创建或选择一个 OpenAI Secure MCP Tunnel,并创建一个受限的运行时 API 密钥,具有 Tunnels Read 和 Use 权限。将隧道 ID 和 运行时密钥分开保存:ID 是元数据,而密钥用于认证 本地隧道客户端。请使用官方 Secure MCP Tunnel 指南、 Platform Tunnels 设置 和 Runtime API 密钥。 此包不会创建账户隧道、运行时密钥或 ChatGPT 连接器。它仅在你提供这些账户级值之后,安装经过验证的本地客户端并配置本地 运行时。 2. 托管设置 在 Darwin/Linux arm64 或 x64 上运行设置。客户端固定为 openai/tunnel-client 0.0.12;设置会验证发布校验和、二进制 版本、私有权限,以及一次真实的 connect/status/stop 循环,然后 写入最终运行时配置: sh dsh-chatgpt-web-native setup \ --profile-dir "$HOME/.dsh-chatgpt-web" \ --connector-name "DSH Native" \ --tunnel-id "$TUNNEL_ID" 如果没有 --runtime-key-file,设置会通过隐藏的 TTY 提示要求输入运行时密钥。若要改为读取现有的私有密钥文件: sh dsh-chatgpt-web-native setup \ --profile-dir "$HOME/.dsh-chatgpt-web" \ --connector-name "DSH Native" \ --tunnel-id "$TUNNEL_ID" \ --runtime-key-file /private/path/to/runtime-key 设置会将密钥复制到 ~/.dsh-chatgpt-web/secrets/tunnel-runtime.key(0600),并仅在 native-runtime.json(0600)中存储该路径。它不会编辑 Cordis YAML 或 账户设置。通过 --runtime-key-file 传入的源密钥会被保留; 在确认托管副本后,请自行移除或轮换该源密钥。 3. 精确的 ChatGPT 连接器 在 ChatGPT 连接器设置中, 创建或选择名为 DSH Native(或已配置的 connectorName)的 Personalized 连接器。使用隧道连接, 选择相同的隧道 ID,并设置 Authentication: None。账户 连接器必须指向此隧道;仅有一个健康的本地进程并不能 证明 ChatGPT 能够发现或调用它。 4. 托管 Cordis 配置 设置成功后,使用匹配的本地路径挂载提供程序: yaml config: connectorTransport: mcp connectorRuntime: managed connectorName: DSH Native brokerSocketPath: ~/.dsh-chatgpt-web/native-broker.sock nativeRuntimeConfigPath: ~/.dsh-chatgpt-web/native-runtime.json mcpInvocationTimeoutMs: 90000 插件在启动隧道之前先监听私有 broker socket, 然后在打开 ChatGPT 轮次之前要求 process_running=true、healthy=true 和 ready=true。 在托管模式下,不要单独启动 dsh-chatgpt-web-mcp;托管运行时会自行启动已构建的 stdio MCP 命令。 5. 安全策略、审批与恢复 原生策略为选择性启用,默认使用 toolPolicy: full 和 approval: none;安全部署应使用 toolPolicy: evidence-only 或 allowlist、显式的绝对 workspaceRoot,以及 approval: workspace-policy。工具名称和 RFC 6901 pathArguments 必须 与实际的 DSH 清单完全匹配。所配置的工具必须接受适配器提供的 规范绝对路径。如果省略 workspaceRoot, 它会回退到 process.cwd;doctor 会针对这一较弱且依赖启动位置的 边界发出警告。规则能力是操作员声明的标签,而不是 从工具名称、描述或 schema 推断出来的。 工作区本地的 .dsh-chatgptignore 是一个可选的 UTF-8 文件,大小不超过 64 KiB。其 v1 语法刻意保持字面化:空行和 # 注释 会被忽略,其他每一行都是一个相对于工作区的 POSIX 路径;末尾的 / 覆盖该目录子树。绝对路径、..、glob、 否定、重复条目、控制字节、格式错误的 UTF-8 以及符号链接都会被 拒绝。内置的敏感文件规则无法被否定。 evidence-only 和 allowlist 提供精确的清单过滤、 授权时路径验证/重写,以及确定性的文本结果 投影。它们不是沙箱、DLP 边界或来源证明: 工具可以忽略声明的参数,路径可能在授权后发生变化 (这是剩余的 TOCTOU 限制),并且宽泛的输出可能并非仅来自 已批准的文件。清理器输出仅文本、有界、确定性的结果; 它可以编辑敏感信息、替换主目录路径,并保留内容不输出,同时保留 isError,但它无法证明宽泛的工具输出来自何处。输出 来源是操作员声明,而不是适配器证明。完整模式保留 现有的不受限输出行为,并由 doctor 标记为 输出来源警告。 Continuation 保留一个规范的 DSH 历史/结果视图,用于精确的持久性 证明,并为 ChatGPT 保留一个单独的经过净化/变基的提供方视图。检查点、 授权和安全文件仅存储哈希和有界元数据——不存储提示词、 原始参数、原始结果正文、cookie、凭据或对话 ID。 当安全策略具有有效工具时,第一个请求会创建一个私有的 审批挑战。在任何提供方提交之前,请查看确切的摘要并通过 交互式命令输入 approve: sh dsh-chatgpt-web-native approve \ --profile-dir "$HOME/.dsh-chatgpt-web" \ --challenge challenge_ 策略、实现、连接器、模式清单、工作区和限制 变更会使授权失效。原生日志和所有权账本是 私有的,并且在状态畸形或不确定时故障关闭。检查点写入器 租约是配置文件范围的:一个活跃的、陈旧但未经证实的或模糊的所有者会阻止 变更和恢复。被阻止的检查点不得仅仅因为 某个页面或进程消失就被重放;只有在运行时已停止、具有交互式 TTY、 确切的检查点哈希和确切的 abandon 确认时,才使用 recover --abandon。放弃从不 声称某个不确定的副作用发生了或没有发生。 只有在 v0.7.0 运行时已停止并且 doctor --json 证明运行时处于离线状态、未持有任何检查点写入器、 每个检查点都是终态、没有重放已消费但未解决, 并且拥有的对话账本为空之后,包回滚才是安全的。在 安装较旧的包之前,请保留该干净报告。 旧版 v1 检查点日志会在获取写入器租约时、在任何恢复或 生命周期决策之前,按排序后的文件名顺序,急切地迁移到 v2 事件格式。迁移是无损且原子的:替换内容 被持久写入并重新验证,解码后的生命周期事实会与 旧版日志进行比较,只有在这之后才会替换规范路径。无法安全映射的日志会被保持原样,并阻止原生启动和 恢复,而不是被重新解释,并且中断的迁移 产物永远不会被提升为权威。旧版 NativeCheckpoint 表面在一个生命周期转换版本中仍然作为别名挂接到生命周期所有者上;内部调用方使用 src/native/lifecycle.ts 中按 actor 作用域划分的能力接缝。 6. Doctor 和 stop doctor 是只读的,并且从不打印运行时密钥值。使用 --json 获取稳定、经过脱敏的报告,适合操作员检查: sh dsh-chatgpt-web-native doctor \ --profile-dir "$HOME/.dsh-chatgpt-web" \ --connector-name "DSH Native" \ --json dsh-chatgpt-web-native stop \ --profile-dir "$HOME/.dsh-chatgpt-web" \ --connector-name "DSH Native" stop 仅停止配置的本地隧道别名;它不会删除 运行时密钥、配置、隧道或 ChatGPT 连接器。 7. 现有外部运行时 对于外部拥有的隧道,保留插件选择性启用,但需显式选择外部所有者: yaml config: connectorTransport: mcp connectorRuntime: external connectorName: DSH Native brokerSocketPath: ~/.dsh-chatgpt-web/native-broker.sock 从外部隧道运行时启动 stdio MCP 子进程: sh dsh-chatgpt-web-mcp --broker-socket "$HOME/.dsh-chatgpt-web/native-broker.sock" 该包不会对该外部隧道进行身份验证或监督。现有的外部 MCP 部署仍然受支持;它们无需托管配置或账户设置。 8. 故障关闭与证据语义 原生模式仅暴露 dsh_round_start、dsh_tool_inventory 和 dsh_tool_call。broker 会快照当前 DSH 工具 schema,所有调用都会作为标准 tool/call 和匹配的 tool/result 事件返回到普通的 DSH ToolRuntime/agent 循环。不存在嵌套 agent 循环、ctx.tools.execute()、围栏文本回退或散文到调用的推断。 第一个 dsh_tool_inventory 响应包含一个针对完整当前清单的有界发现目录:没有 MCP 命名空间的名称会被列出,而 mcp____ 工具会按命名空间分组,并附有其确切名称和数量。此目录中不包含 schema 和参数。普通页面仍然有界且分页。按任务关键词或命名空间搜索,使用 next_offset 直到找到匹配项,并在调用确切工具之前请求 include_schema: true;首页条目缺失并不证明某个工具不可用。 在发送之前,无效的私有文件、校验和/版本漂移、隧道未就绪、连接器名称不匹配或错误选择的连接器都会故障关闭。发送之后,适配器绝不会切换传输方式。声称某条命令已运行的句子不是证据;只有 DSH 调用/结果事件才算数。 9. 实时 E2E 门禁 除非以下所有条件均已验证,否则不要称原生 E2E 为实时或成功: 1. 确切构建的候选版本已安装到 DSH web 配置文件中; 2. DSH MCP/core 版本与包校验和已对齐; 3. doctor --json 成功; 4. DSH Native 个性化连接器使用同一隧道,且 Authentication 设置为 None; 5. 可见的 Chrome 正在运行,并已选择 ChatGPT Web High; 6. 一个需要 bash 的请求通过实际的 DSH 调用证明了 pwd 和 git rev-parse --show-toplevel; 7. 会话包含匹配的 tool/call 和 tool/result 事件,且至少有 两个 agent 步骤;以及 8. 返回的根目录是真实检出目录,而不是 / 或模型编写的散文。 如果账户连接器、隧道、对齐的产物或会话证据无法验证,请报告该阻塞项,并且不要声称实时原生 E2E。 10. 凭据清理 运行时密钥必须保留在此仓库、Cordis YAML、提示词、日志、 截图和会话历史。在实时运行之前,移除临时源密钥文件,并轮换任何先前以明文形式存储在配置文件中的凭据。stop 命令不会移除凭据;请有意地清理或保留受管密钥,并记录剩余风险。 V1 范围与限制 - 文本输入/输出,带实时增量。图像、stop 序列和 temperature 会抛出 UNSUPPORTED*,而不是被静默丢弃。 - 无可选择的推理强度:显式指定 reasoningEffort 会抛出异常——请通过模型 id 选择强度。 - 文本模式仍是默认且跨平台的模式:工具 schema 会在提示中声明,ChatGPT 会输出围栏式 tool-call 块,适配器将其解析为普通的 DSH 工具调用块。工具可用性并不会强制每个回答都调用工具。 - 原生 MCP 模式为可选启用且仅限 Unix。插件将解析后的 DSH 工具快照到一个私有的 0600 Unix 套接字代理中。ChatGPT 必须使用一个名称恰好为 DSH Native(或 connectorName)的个性化连接器,并调用 dsh_round_start、dsh_tool_inventory 和 dsh_tool_call。代理批次通过正常的 DSH 循环发出;不存在嵌套循环或直接的 ctx.tools.execute() 路径。原生结果仅限文本。兼容的工具结果步骤会继续同一个启用连接器的物理响应、代理请求、对话和发送。上下文/模型/schema/选项变更以及可恢复的页面丢失,只有在持久化结果和清理安全性得到证明后,才使用规范的全新重放;不确定的影响会失败,而不会进行隐藏的重新提交。适配器创建的精确对话 ID 会在结算后被删除,删除失败会保留在私有账本中以供重试。实时原生端到端测试需要隧道/连接器;本仓库的本地 MCP 和代理测试并不声称具备该外部设置。 - 用量是基于字符的客户端估算;页面不暴露实测计数。 - 推理/思考内容在 V1 中不会单独呈现。 - 临时聊天是 ChatGPT 的隐私模式,而非匿名:文本模式提示仍会由 OpenAI 根据你账户的设置进行处理。原生 MCP 轮次必然使用普通 ChatGPT 聊天,以便连接器可以运行;适配器仅在其创建的精确对话 ID 完成后删除它们,无法保证后端立即删除,也无法阻止先前的记忆/个性化影响。这是非官方的浏览器自动化——UI 变更会大声地破坏选择器(显式错误,绝不静默回退),你仍需对适用的条款和工作区政策负责。 供应商代码引入 DOM 选择器、强度滑块机制、临时聊天流程(src/chatgpt/session.ts、src/chatgpt/model.ts)、编辑器插入和完成判定均源自 codex-chatgpt-web(MIT,© 2026 codex-chatgpt-web 贡献者)。仅 ChatGPT-Web 驱动 已获取 surface;原生 broker、MCP façade、连接器选择和适配器生命周期是本地新增内容。每个 vendored 文件都带有来源头。 本地适配(2026 年 9 月实机验证):ProseMirror 编辑器选择器(上游仅针对 Lexical)、对空白不敏感的附件回读(ProseMirror 将每个换行渲染为独立段落)、认证断言前的稳定等待(SPA 水合滞后于 domcontentloaded)。 实机验证 已在真实的 Plus 级账户上验证(2026 年 9 月,在 JSON 信封 + Markdown 提取重构之后): - scripts/live-lib.mjs / scripts/live-turn.ts:全新临时聊天 → 推理强度滑块 → 附加 JSON 信封提示 → 提交 → 流式 Markdown 增量(标题、列表、粗体均保留)→ 用量 + stop 结束,在 src(tsx)和构建后的 lib/ 路径上均如此。 - 文本模式工具和原生持久化续接由本地适配器、broker、协调器、物理响应和重放测试覆盖。一次托管原生轮次附加了 bash schema 但未发起连接器调用,在 27.439 秒内完成,以终止性 stop 结束,且在完成栅栏修复后没有 broker 调用;自有会话账本为空,且没有残留的 tunnel/MCP 子进程。这仅验证了无工具完成,而非连接器执行。 - 需要工具的托管探测未发出结构化 broker 调用;一个提供方响应明确报告该连接器调用被安全检查阻止。因此,在可验证的连接器/tunnel 运行证明单页/单次发送续接、最终答案、精确调用/结果证据和清理之前,有意不声称原生 MCP 实机端到端。 - 存储状态在每轮完成后都会持久化(ChatGPT 会轮换会话令牌);storage-state.json 的 mtime 每轮都会推进。 - 更重的推理强度(think/medium/high)需要提高预算(15 分钟轮次、5 分钟停滞)以及单次求值轮询:此前每次轮询的定位器往返严重节流了 ChatGPT 的流式 DOM,以至于短答案永远无法完成渲染。 布局 | 文件 | 职责 | |---|---| | src/chatgpt/session.ts | Vendored 选择器 / 推理强度菜单 / 认证 / 能力探测 | | src/chatgpt/model.ts | Vendored 后端 + 推理强度解析 | | src/chatgpt/browser.ts | 守护进程附加、登录、每轮全新页面、会话持久化 | | src/chatgpt/conversation-cleanup.ts | 精确原生会话身份、私有所有权账本、删除验证 | | src/chatgpt/markdown.ts | Vendored HTML→Markdown + 仅追加流式缓冲区 | | src/chatgpt/guards.ts | 速率限制 / 会话 / 引导 / 终止守卫 | | src/chatgpt/effort.ts | 每轮推理强度滑块 + Think 开关 | | src/chatgpt/prompt.ts | DSH 历史 → JSON 信封 + 传输契约 | | src/chatgpt/turn.ts | 附加 → 发送 → 块分段流循环 | | src/chatgpt/connector.ts | 精确个性化连接器选择和原生仲裁 | | src/chatgpt/usage.ts | 基于字符的用量估算 | | src/native/broker.ts | 内存中的提供方轮次批处理、围栏、TTL、退役 | | src/native/broker-socket.ts | 私有 Unix JSON 行 RPC 传输 | | src/native/mcp-server.ts | 固定的 MCP 外观与握手 | | src/native/coordinator.ts | 停驻页面/会话所有权转换 | | src/native/continuation.ts | 执行身份、结果关联与重放决策 | | src/native/lifecycle.ts | 唯一生命周期所有者:转换表、封闭的 v2 编解码器、代际绑定能力 | | src/native/checkpoint.ts | 私有日志持久化、写入者租约、v1 到 v2 迁移、恢复裁决 | | src/native/physical-response.ts | 持久化原生响应日志与不确定性状态 | | src/native/plugin-runtime.ts | Broker、隧道就绪与卸载生命周期 | | src/native/mcp-main.ts | Stdio MCP 可执行文件入口点 | | src/native/setup-main.ts | 托管运行时设置、诊断与停止可执行文件 | | src/adapter.ts | ChatGptWebAdapter(接缝、队列、分块协议) | | src/index.ts | Cordis 插件(registerAdapter(['chatgpt-web'])) |