ai-browser-bridge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.zh.md ADDED
@@ -0,0 +1,130 @@
1
+ <p align="center">
2
+ <img src="assets/hero.png" alt="chatgpt-local-bridge — 从终端驱动浏览器中的真实 ChatGPT 会话,通过隔离的 MCP 桥接访问本地仓库工具" width="640" />
3
+ </p>
4
+
5
+ # chatgpt-local-bridge
6
+
7
+ [English](README.md) · [עברית](README.he.md) · [Español](README.es.md) · **中文**
8
+
9
+ ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)
10
+ ![Node](https://img.shields.io/badge/node-%E2%89%A520-339933?logo=node.js&logoColor=white)
11
+ ![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6?logo=typescript&logoColor=white)
12
+ ![Playwright](https://img.shields.io/badge/Playwright-browser-2EAD33?logo=playwright&logoColor=white)
13
+ ![MCP](https://img.shields.io/badge/MCP-connector-000000)
14
+
15
+ ---
16
+
17
+ > 从终端驱动真实的 ChatGPT 浏览器会话,并通过 MCP 给它一组受限、沙箱化的本地仓库工具——永远不交给它一个 shell。
18
+
19
+ ## 为什么需要它
20
+
21
+ ChatGPT 在浏览器中表现最佳——真实的账户状态、模型选择器、消息编辑、重新生成以及会话历史都完整保留。而写代码在终端中最高效,可以直接检查和修改文件、测试、diff 与补丁。
22
+
23
+ `chatgpt-local-bridge` 把这两个界面连接起来。终端中的一个提示词驱动你现有的 ChatGPT 浏览器会话,而 ChatGPT 可以通过一小组**经过校验的 MCP 工具**——`grep`、`read`、`apply_patch`、`run_tests`、`git_diff`——访问当前仓库,而不是获得原始 shell 访问权限。你始终停留在单一的终端工作流中;ChatGPT 保留它真实的界面。
24
+
25
+ ## 功能
26
+
27
+ - **终端驱动 ChatGPT** — 在 shell 内发送提示词并接收回复;真实的浏览器会话才是事实来源。
28
+ - **通过 MCP 的沙箱化本地工具** — 每个文件操作都针对所选仓库根目录进行校验;没有任意 shell,仅允许白名单内的测试命令。
29
+ - **浏览器操作即命令** — `/resume`、`/new`、`/model`、`/rewind`、`/stop`、`/context`、`/diff`、`/compact` 等。
30
+ - **仓库本地的会话与记录** — 每次运行都记录在 `<repo>/.bridge/` 下,可导出为 Markdown、JSON 或 JSONL。
31
+ - **安全控制** — 权限模式(`read-only` / `ask` / `auto`)以及每次补丁前后的自动文件检查点。
32
+ - **项目约定** — 自定义命令以及 `AGENTS.md` / `CLAUDE.md` 会在 `/task` 运行时提供给 ChatGPT。
33
+ - **真正的输入器** — 提示词历史、反向搜索、提示词排队,以及 `@file` 提及的自动补全。
34
+
35
+ ## 架构
36
+
37
+ ```text
38
+ terminal (you)
39
+ │
40
+ │ Ink / React CLI
41
+ ▼
42
+ orchestrator ──────────────┬───────────────────────────────┐
43
+ │ browser automation │ MCP server │
44
+ ▼ (Playwright + CDP) │ (MCP SDK) ▼
45
+ ChatGPT browser UI │ local repo tools
46
+ ▲ │ (grep/read/patch/test/diff)
47
+ │ ▼ │
48
+ └───── Cloudflare Tunnel (cloudflared) ◄────────────────┘
49
+ public https://…trycloudflare.com/mcp
50
+ ```
51
+
52
+ 四个层,各司其职:
53
+
54
+ | 层 | 技术 | 职责 |
55
+ |----|------|------|
56
+ | **CLI** | Ink / React | 终端界面:消息面板、状态栏、`@file` 提及、`/` 命令。 |
57
+ | **浏览器** | Playwright + Chrome DevTools Protocol | 驱动真实的 ChatGPT 标签页并捕获响应。选择器隔离在 `src/browser/chatgpt-page.ts`,便于在 UI 变动时修复。 |
58
+ | **MCP 服务器** | MCP SDK + Zod | 将本地仓库工具以经过 schema 校验且沙箱化的处理器形式暴露给 ChatGPT。 |
59
+ | **隧道** | Cloudflare Tunnel (`cloudflared`) | 为本地 MCP 服务器提供一个临时的公共 HTTPS 地址,供 ChatGPT 连接器访问——无需部署。 |
60
+
61
+ **为什么需要隧道?** ChatGPT 的 MCP 连接器通过 HTTPS 调用工具,但工具服务器运行在你的机器上。与其部署任何东西,bridge 在本地端口前面启动一个临时的 Cloudflare 隧道(`*.trycloudflare.com`),并在启动时把该 `…/mcp` 地址同步到 ChatGPT 应用中。(ngrok 也能解决同样的可达性问题;这里使用 Cloudflare 的 `cloudflared`,因为它的快速隧道无需账户或令牌。)
62
+
63
+ ## 快速开始
64
+
65
+ **前置条件**
66
+
67
+ - **macOS** — Chrome 从 `/Applications/Google Chrome.app` 启动,剪贴板/进程辅助使用 `pbcopy`/`lsof`。
68
+ - **Node.js ≥ 20** 与 **pnpm**(仓库锁定 `pnpm@10.14.0`)。
69
+ - **Google Chrome** — bridge 驱动一个真实的 Chrome 配置文件。
70
+ - **`cloudflared`** *(可选)* — 仅当需要 ChatGPT 调用本地工具时才需要。没有它 TUI 仍可运行。安装:`brew install cloudflared`。
71
+
72
+ **安装与构建**
73
+
74
+ ```bash
75
+ git clone https://github.com/YosefHayim/chatgpt-local-bridge.git
76
+ cd chatgpt-local-bridge
77
+ pnpm install
78
+ pnpm build
79
+ ```
80
+
81
+ **登录一次,然后运行**
82
+
83
+ ```bash
84
+ # 打开 bridge 的隔离 Chrome 配置文件并登录 ChatGPT(在多次运行间保持登录)
85
+ node dist/bridge.js login
86
+
87
+ # 针对你希望 ChatGPT 操作的仓库启动终端界面
88
+ node dist/bridge.js --repo /path/to/your/project
89
+ ```
90
+
91
+ 想要一个全局 `bridge` 命令?构建后运行 `pnpm link --global`,然后使用 `bridge`、`bridge login`、`bridge ask "…"` 等。
92
+
93
+ ## 状态保存在哪里
94
+
95
+ 某个项目的所有 bridge 状态都写入**该项目内部**,位于 `<repo>/.bridge/` 下。首次使用时,bridge 会写入仅含一个 `*` 的 `.bridge/.gitignore`。这会让 git 忽略该目录中的**所有内容**——包括会话记录和登录 cookie——因此即使它位于仓库内部,也无法被提交。`git add -A` 和 `git add .bridge/` 都会跳过它;只有显式的 `git add -f` 才能覆盖。该文件在每次运行时都会重新写入,因此删除或篡改它都会自动恢复。
96
+
97
+ > 由用户编写、意在应用于**所有**仓库的配置仍保留在你的主目录中:自定义命令位于 `~/.chatgpt-local-bridge/commands/*.md`,用户级 hooks 位于 `~/.chatgpt-local-bridge/hooks.json`。
98
+
99
+ ## 权限与检查点
100
+
101
+ ```bash
102
+ /permissions read-only # grep_code, read_file, git_diff
103
+ /permissions auto # 以及受限的写入/测试工具
104
+ /permissions ask # 阻止写入/测试/进程工具(交互式确认待实现)
105
+ ```
106
+
107
+ `apply_patch` 会在变更前后对每个涉及的路径进行快照。使用 `/checkpoints`、`/restore <id>` 或 `/rewind --files <id>` 恢复。
108
+
109
+ ## 测试
110
+
111
+ ```bash
112
+ pnpm test # vitest run
113
+ pnpm typecheck # tsc --noEmit
114
+ pnpm verify:push # typecheck + test + build(推送前运行)
115
+ ```
116
+
117
+ 覆盖率聚焦于安全敏感路径——沙箱校验、仓库本地路径解析、`.bridge/` 自忽略保护、会话/检查点存储、权限以及上下文计数。
118
+
119
+ ## 限制
120
+
121
+ - 目前**仅支持 macOS**(硬编码的 Chrome 路径以及 `pbcopy`/`lsof` 辅助)。
122
+ - 当网页 UI 变动时,ChatGPT 浏览器选择器可能失效;修复集中在浏览器层。
123
+ - 上下文用量是**估算值**——浏览器不暴露服务器端的精确 token 计数。
124
+ - Cloudflare 隧道需要已安装 `cloudflared`。
125
+ - 设计上以本地优先;并非托管的多用户服务。
126
+ - Hook 命令执行会被解析和报告,但尚未实际执行。
127
+
128
+ ## 许可证
129
+
130
+ [MIT](LICENSE) © YosefHayim
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node