| 1 | # 本地浏览器客户端 |
| 2 | |
| 3 | > 英文原文:[WEB.md](../WEB.md)。 |
| 4 | > 最后与英文同步日期(last synced with English revision):2026-09-29。 |
| 5 | |
| 6 | `codewhale web` 通过统一的 Runtime API 打开 Codewhale 内嵌的浏览器客户端。 |
| 7 | 这是一个本地界面:服务器始终绑定到 `127.0.0.1`,不能改为局域网地址, |
| 8 | 也不能在关闭 Runtime 身份验证的情况下运行。 |
| 9 | |
| 10 | ## 启动 |
| 11 | |
| 12 | 在希望 Codewhale 操作的工作区中运行: |
| 13 | |
| 14 | ```bash |
| 15 | codewhale web |
| 16 | ``` |
| 17 | |
| 18 | 默认地址为 `http://127.0.0.1:7878`。如果本地端口被占用,可以换一个回环地址上的端口: |
| 19 | |
| 20 | ```bash |
| 21 | codewhale web --port 8788 |
| 22 | ``` |
| 23 | |
| 24 | Codewhale 会启动 Runtime API,提供已内嵌在所安装二进制文件中、无需额外依赖的客户端, |
| 25 | 打印一个只能使用一次的启动 URL,并请求操作系统在默认浏览器中打开它。 |
| 26 | 如果浏览器没有自动打开,请在十分钟内使用打印出的 URL。 |
| 27 | 按 `Ctrl+C` 停止进程,浏览器会话也会随之结束。 |
| 28 | |
| 29 | ## 浏览器中的功能 |
| 30 | |
| 31 | 内嵌客户端提供适应窗口大小的线程列表与搜索侧栏、由 Runtime 管理的会话信息、 |
| 32 | 对话记录、工具执行回执和输入框。你可以创建、选择、重命名和归档线程, |
| 33 | 启动回合或向正在执行的回合追加指导,中断工作,处理审批请求, |
| 34 | 以及回答 Runtime 发起的用户输入请求。 |
| 35 | |
| 36 | 浏览器是同一个本地 Runtime 的另一种视图。 |
| 37 | 它不会创建第二个云账户、把提供商(provider)的凭据复制到浏览器存储中, |
| 38 | 也不会降低已配置的审批和沙箱策略要求。 |
| 39 | |
| 40 | ## 身份验证边界 |
| 41 | |
| 42 | 浏览器启动 URL 中包含一个随机、短时有效且只能使用一次的引导凭证(bootstrap capability), |
| 43 | 其中始终不包含 Runtime bearer token。来自回环地址的请求会将引导凭证换成一个 |
| 44 | 带有 `HttpOnly`、`SameSite=Strict` 属性、仅对当前进程有效的会话 cookie, |
| 45 | 随后引导凭证立即失效。 |
| 46 | |
| 47 | 重复使用、已过期、格式错误或来自非回环地址的引导请求都会被拒绝。 |
| 48 | Runtime token 不会出现在渲染后的 HTML、浏览器存储、URL 查询参数或片段, |
| 49 | 以及浏览器启动参数中。一次性引导凭证会打印在本地终端中, |
| 50 | 并短暂地经过操作系统的浏览器启动程序。虽然它只能使用一次且十分钟后过期, |
| 51 | 但以同一操作系统用户身份运行的恶意进程仍处于本地信任边界之内。 |
| 52 | |
| 53 | 使用 cookie 验证身份、且会改变状态的请求,还必须携带与本地网页完全匹配的来源(origin)。 |
| 54 | 跨源浏览器请求会被拒绝。现有显式使用 bearer token 或 Runtime token 请求头的客户端, |
| 55 | 仍按原有 Runtime API 规则工作。 |
| 56 | |
| 57 | ## 仅供本机使用 |
| 58 | |
| 59 | `codewhale web` 只接受 `--port`;此命令没有 `--host` 或关闭身份验证的选项。 |
| 60 | 不要将它当作公共网站,也不要通过路由器端口转发、公开反向代理或隧道直接暴露它的端口。 |
| 61 | |
| 62 | 独立的 `codewhale app-server --mobile` 和 `--http` 模式有各自的部署与身份验证约定。 |
| 63 | 在运行任一模式之前,请先阅读 [RUNTIME_API.md](../RUNTIME_API.md), |
| 64 | 尤其是在选择非回环监听地址之前。 |
| 65 | |
| 66 | ## 故障排查 |
| 67 | |
| 68 | - 如果端口 `7878` 已被占用,通过 `--port` 指定一个未使用的端口。 |
| 69 | - 如果浏览器没有打开,请在十分钟内将打印出的一次性引导 URL 复制到同一台机器上的浏览器中。 |
| 70 | 如果该 URL 已使用或已过期,请重新启动 `codewhale web`。 |
| 71 | - 如果页面可以打开,但提供商不可用,请检查 `codewhale doctor` 和 `/provider`。 |
| 72 | web 命令不会配置或迁移提供商的凭据。 |
| 73 | - 如果会话已过期,请停止并重新启动 `codewhale web`,以创建一个仅对新进程有效的会话。 |
| 74 | 重复使用旧的引导 URL 应当失败。 |
| 75 | |
| 76 | 有关集成端点、请求头、事件和完整的网页会话约定,请参阅 [RUNTIME_API.md](../RUNTIME_API.md)。 |
| 77 |