# Tampermonkey 桥接器 · 安装与使用

## 一、装 Tampermonkey

1. Chrome / Edge / Firefox 都有 Tampermonkey 扩展。装好。
2. 打开 Tampermonkey 面板 → "添加新脚本" → 把 `jianlai-bridge.user.js` 全部内容粘贴进去 → 保存。
   - 或者在浏览器里直接打开 `userscript/jianlai-bridge.user.js` 文件，Tampermonkey 会自动识别。

## 二、用法

1. 在你启动的 chatbox 页面（默认 `http://localhost:8765/`）右上角设置中，选 "🐒 Tampermonkey 桥接"。
2. 输入消息发送时，chatbox 会 `window.open` 你常用的 LLM 网站（默认 DeepSeek）；
3. Tampermonkey 注入的脚本接管这个新窗口，把 prompt 自动填进去 + 按回车提交；
4. 等回答稳定（无新增文字 1.5 秒），脚本把内容回传给 chatbox。

## 三、目前覆盖的 LLM

| 站点 | 状态 | 备注 |
|---|---|---|
| chat.deepseek.com | ✅ 适配（参考） | textarea + Enter 提交 |
| chatgpt.com | ✅ 适配（参考） | data-testid 选择器 |
| www.doubao.com | 🟡 模板（可能需要校准 selector） | |
| chat.qwen.ai   | 🟡 模板 | |
| gemini.google.com | 🟡 模板 | |

> **DOM selectors 会随各 LLM 网站升级而失效**——这是浏览器自动化路线的根本代价。
> 失效时打开浏览器 DevTools → Console，找到 [jianlai-bridge] 报错 → 进 `userscript/jianlai-bridge.user.js`
> 改 `ADAPTERS.<host>.input / submit / response / streamingSignal` 即可。

## 四、自己加新 LLM 适配

打开 `jianlai-bridge.user.js`，找到 `ADAPTERS` 对象，照模板加一项：

```js
const ADAPTERS = {
  // ...
  myllm: {
    input: 'textarea.xxx',                // 输入框 selector
    submit: 'button.send',                // 提交按钮 selector；填 null 表示按回车
    response: '.assistant-msg:last-of-type', // 回答容器（取最后一条）selector
    streamingSignal: '.is-streaming',     // 流式中标志 selector；为空表示不监测
  },
};
```

并在 `detectHost()` 里加 `if (h.includes("myllm")) return "myllm";`，再在脚本头部 `// @match` 加上对应 URL 模式。

## 五、隐私 & 安全

- 脚本只在你已经登录的 LLM 站点运行；它不会把 prompt 发到任何第三方服务器。
- chatbox 与 LLM 站点之间通过浏览器 `postMessage` 直连，全程在你这台机器上。
- 桥接器对 `event.origin` 没做强校验（demo 简化）；如果你担心其它脚本伪造消息，可以在 message handler 开头加 `if (ev.origin !== "http://localhost:8765") return;`。
