# 本机网页版 AI：开发与接手说明

版本：插件 2.1.72；核对日期：2026-10-09。

内置脚本设计已移除，改为「脚本中心 → AI 开发手册」在线更新文档（断网提供备用）。专用设计身份、上传编排、会话核对删除与连接探测不再运行；普通脚本的 AI API、Web AI 协议、文件上传、串行队列和能力验证保持。豆包后台附件仍未开放，不增加标签页回退。历史设计验收只描述旧版本，不是当前入口。

## 运行方式

活动脚本 → 插件后台 → AI 网站 HTTPS 网页协议 → 回答返回脚本。运行时不创建、隐藏或操作标签页，不经个人 Worker 或 SellerFeeds；网站会接收用户明确发送的文字与附件。个人 MCP、机器人 Workers AI、AI API Profile 是独立能力，现有脚本不自动切换。

DeepSeek 原有文字/文件协议保留。新增 Gemini、豆包、智谱文字协议，真实登录页内直接执行本仓库适配函数的新会话与连续追问测试通过；Gemini 自 2.1.67 开放每轮一份 MD/TXT（256 KiB 内）；豆包、智谱附件仍拒绝上传。MiMo 按用户要求移除。Kimi 当前验证页发送测试会弹登录框，尚不能验收，保持不可用。

开发期直接函数测试与安装版端到端验收分开：需要用户重载新版、完成网站连接引导、关闭登录页，再实际运行脚本。2.1.67 使用隔离测试扩展的真实管理页和消息通道验收设计文档流程，插件账号为合成账号；这不等于真实用户安装的全部模块验收。测试浏览器的网站授权和测试状态不写入用户日常扩展。

| 网站 | 实际协议 | 模型范围 | 附件 |
| --- | --- | --- | --- |
| DeepSeek | `/api/v0/chat/completion`、本机 PoW | default | 原有现代 Office/PDF/图片/文本 |
| Gemini | StreamGenerate、最小 bootstrap 与正常浏览器会话 | 已核对的快速模式，不读取已关闭页的选择 | 每轮 1 份 MD/TXT，最多 256 KiB |
| 豆包 | `/chat/completion`、Cookie 自动随浏览器请求发送 | 默认网页快速模型 | 不开放 |
| 智谱清言 | 正式站 `chatglm.cn` 的 assistant/stream、正常网页签名与本人令牌 | glm-5.3-flash | 不开放 |
| Kimi | 待真实登录请求验证 | 不宣称支持具体模型 | 不开放 |

新增入口：web-ai/protocol/stream.mjs、gemini.mjs、doubao.mjs、glm.mjs。公共协议资料仅供核对格式，本轮使用原有本仓库 MD5 和独立实现，不合入第三方反代服务或游客/自动换号/伪造 IP 逻辑。

### 脚本任务的用户连接步骤

1. 网页版 AI 默认是插件基础能力，设置不再提供总开关。旧关闭值不再阻止调用，但不会自动连接网站、取得网站权限或通过验收；取消任务仍中止该任务请求。
2. 安装时确认声明，在脚本 → 基础能力为 Tool 选择网站并保存。没有有效会话时打开插件来源连接引导；也可在手动运行前触发。后台/定时任务只提示先连接，不弹窗或开网页。
3. 点击“打开登录页”授权精确网站并自行登录。智谱在专用页面先发送一条消息，插件只观察该页 backend-api 认证头。
4. 回到引导点“完成连接”：捕获最小字段、加密保存在本机，自动发送文字验证；支持附件且脚本声明附件时自动验证插件生成的测试文本。成功后关闭引导，再继续原操作。网站登录页由用户关闭，日常运行无标签页。
5. 已连接跳过引导。可靠识别的 HTTP 401/403 或会话失效会清除验证标记，下一次手动操作重新引导；失败不自动重发。未经验证的网站与附件保持不可用。

入口 core/web-ai-connect-ui.mjs、web-ai-connect.html/mjs/css、WEB_AI_PREFLIGHT。UI 请求只能来自管理页、悬浮运行页（仅 preflight/files）和连接页（仅连接/验证白名单），不能来自 MAIN/userScriptId。preflight 使用实际保存的 Tool 绑定及当前账号，不接受自报网站覆盖。UI 开始任务前等待引导完成，关闭未完成时参数保留，不启动任务。

不读取 Cookie、私人聊天或任意已打开页面，不上传网页会话到官方账号备份。登录失效要求重新登录并保存；失败不自动重发。

## 脚本声明与调用

```javascript
// @sellerfeeds-web-ai {"enabled":true,"files":true}
const answer = await SellerFeeds.webAi.chat({
  providerId:'deepseek-web', prompt:'分析附件，区分事实与推测。',
  files:[{data:new Blob([JSON.stringify(report)],{type:'application/json'}),filename:'products.json'}]
});
const next = await SellerFeeds.webAi.chat({providerId:'deepseek-web',prompt:'给出三个可验证的建议。'});
// 返回 {content,providerId,sessionId}，不返回网页认证字段。
```

仅文字时 files 可省略或声明 false。USER_SCRIPT／offscreen 只能在活动任务中调用，后台以真实任务和脚本身份验证声明、授权和测试状态；MAIN world 禁用。同任务追问复用服务端真实会话与消息编号，不同任务独立，同网站串行。上一回答缺少消息编号时停止追问，不能悄悄创建新上下文。

用户选择附件的 Tool 字段：

```json
{"type":"array","format":"web-ai-files","title":"本地附件","items":{"type":"object"},"maxItems":5,"default":[]}
```

文件只从插件来源表单、当前任务 Blob/File 或授权临时引用取得，不按任意路径或 URL 读取。通用暂存上限为 5 项、单项 20 MiB、合计 64 MiB，网站适配可以更低（Gemini 仅 1 份 MD/TXT、256 KiB）；引用不适合常用配置、定时或跨任务共享。DeepSeek 文件入口支持 PDF、DOCX、XLSX、PPTX、PNG、JPG/JPEG、WebP、TXT、MD、CSV、JSON；旧 DOC/XLS/PPT 未开放。DeepSeek 上传后轮询文件解析；Gemini 使用官方 resumable 上传引用附在请求中，并以连接测试确认模型实际读到测试文档，不把上传成功等同理解成功。损坏、加密文件与图片理解效果以网站返回为准。

提示词上限 100000 字符，SSE 回答上限 4 MiB，正式结束后才返回。单轮取消／超时控制为 240 秒，文件解析最多 90 秒；PoW 同步求解不能中途打断，但求解后再次检查任务。失败不重试，任务结束中止网络请求。

## 代码入口

| 文件 | 职责 |
|---|---|
| core/web-ai-bridge.mjs | 本机加密会话、登录页记录、授权、测试门槛、队列和取消 |
| web-ai/protocol/deepseek.mjs | 网页协议、PoW、文件上传／解析、SSE 和追问编号 |
| web-ai/protocol/deepseek-pow.wasm | 随包的 PoW 模块，不运行远程代码 |
| core/web-ai-attachments.mjs、temp-blob-store.mjs | 本机文件暂存及账号／脚本／任务归属与领取 |
| core/userscript-parser.mjs | 能力声明及 MAIN world 拒绝 |
| sandbox.mjs、core/script-registry.mjs | SellerFeeds API 与 Blob/File 转任务引用 |
| offscreen.mjs、core/offscreen-runtime.mjs、core/task-runtime.mjs | 从真实活动任务取得脚本身份 |
| core/web-ai-connect-ui.mjs、web-ai-connect.mjs、background.mjs | 插件来源连接引导、最小会话捕获及能力验证；按来源白名单限制消息 |

WASM 来源：DeepSeek 官方 `fe-static.deepseek.com/chat/static/sha3_wasm_bg.7b9ca65ddd.wasm`。SHA-256：`b3fca8cc072c1defbd60c02266a8e48bd307a1804aaff4314900aea720e72f7d`。升级需核对接口与真实请求，禁止动态下载执行代码。扩展 CSP 的 wasm-unsafe-eval 仅允许本地 WASM 编译，不允许远程 JS 或普通 eval。

示例：examples/web-ai-local-analysis.user.js。五个 providerId 是入口标识，未实现的网站不能伪称可用。

## 验收与部署边界

web-ai-bridge.test.mjs 验证不创建任务标签页、专用登录页、本机加密、授权与测试门槛、失败不重试、队列、模拟文件／追问／SSE；web-ai-attachments.test.mjs 验证归属与领取隔离。2.1.67 已使用真实网站登录验证设计 Markdown 路径；PDF、Office、图片和普通脚本任务的完整安装版路径仍需分别验收，不能由设计文档测试替代。

历史 1.9.50 在真实 DeepSeek 网页通过 DOM 上传控件验证过附件；只说明当时网页能力，不能代替本版协议回环验证。旧 web-ai/*.js 不作为任务回退通道。

Worker /v1 网页代理和对外 Key 已从当前源码移除。旧云端代码需用户在实际绑定账号重新部署才消失，重载插件不能删除云端路由；不得使用开发者 CLI 的另一个账号代部署。个人 Worker 2.3.0 的邮箱路由与本机网页 AI 无依赖。
