diff --git a/README.md b/README.md index bfaf088f4f..209075c7b9 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,8 @@ OpenBitFun is a highly customizable, open-source agent workspace that keeps work **Your phone is a remote controller.** Send instructions, check progress, and respond to approval requests from your phone or browser. Tasks run on the selected host and keep going when you switch views or disconnect the controller. +**The official Relay is ready to use; no server deployment is required.** Sign in on your devices with the same OpenBitFun account, using GitHub or an email verification code where supported. Same-network connections are also available. See the [connection FAQ](./src/apps/relay-server/FAQ.md) for login, internet access, and self-hosting requirements. + **On mobile, switch between layouts for one, two, or three screens.** Focus on the conversation with a single screen, then unfold your phone to view conversations and files side by side. The interface adapts as the screen layout changes. ![Switching between connected computers and remotely controlling the selected device from a phone](./png/openbitfun-multi-device.png) @@ -64,9 +66,11 @@ OpenBitFun is a highly customizable, open-source agent workspace that keeps work
Connection and deployment details -Use SSH to work on a remote host, through a jump host, or inside a container, with files, commands, and agent execution in the target environment. The desktop app and CLI share core execution capabilities; mobile clients and messaging bots offer more ways to control tasks. +Use SSH to work on a remote host, through a jump host, or inside a container. File access, terminals, and workspace commands target that environment; the Agent Runtime stays on the OpenBitFun host. The desktop app and CLI share core execution capabilities; mobile clients and messaging bots offer more ways to control tasks. + +Same-account device control uses the official Relay by default. Desktop can also run a local Relay for same-network mobile control. Both paths use the online OpenBitFun identity service for sign-in; LAN mode is not an offline-login option. A private Relay requires a matching client build: see the [deployment guide](./src/apps/relay-server/README.md#for-community-developers-and-forks). -Account login, synchronization, and control between devices on the same account run through a [Relay server you deploy](./src/apps/relay-server/README.md). See [Remote Connect](./docs/interactive-capabilities/capabilities/feature.remote-connect.md) and [remote workspaces](./docs/features/remote-workspaces.md) for connection options. +Device-to-device payloads are encrypted end to end with keys generated on the devices. Sessions and files are read from the owning online device on demand; the Relay still handles account, device, and routing metadata. This does not cover traffic to model providers, messaging bots, or published Pages. See the [privacy boundaries](./src/apps/relay-server/FAQ.md#what-can-the-services-see), [Remote Connect](./docs/interactive-capabilities/capabilities/feature.remote-connect.md), and [remote workspaces](./docs/features/remote-workspaces.md).
diff --git a/README.zh-CN.md b/README.zh-CN.md index 7a7040d6de..64b1047fa9 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -57,6 +57,8 @@ OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你 **手机就是远程控制端。** 通过手机或浏览器发送指令、查看进度、补充要求和处理授权。任务始终在所选设备上运行,切换界面或断开控制端连接后仍会继续。 +**官方 Relay 开箱即用,无需部署服务器。** 在各设备上使用同一个 OpenBitFun 账号登录,可选择 GitHub 或受支持的邮箱验证码登录;也可使用同一网络连接。登录、联网与自托管条件见[连接常见问题](./src/apps/relay-server/FAQ.zh-CN.md)。 + **手机端支持单屏、双屏、三屏布局自由切换。** 单屏时专注对话,展开后并排查看会话与文件;界面随屏幕形态调整,让折叠屏的空间真正用起来。 ![在多台电脑间切换完整工作台,并通过手机远程控制所选设备](./png/openbitfun-multi-device.png) @@ -64,9 +66,11 @@ OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你
连接与部署说明 -工作区也可以通过 SSH 连接到远程主机、跳板机或容器,让文件、命令与 Agent 在目标环境中工作。桌面和 CLI 共享核心执行能力,移动端与消息机器人提供更多控制入口。 +工作区也可以通过 SSH 连接到远程主机、跳板机或容器,让文件访问、终端与工作区命令在目标环境中执行;Agent Runtime 仍由 OpenBitFun 宿主运行。桌面和 CLI 共享核心执行能力,移动端与消息机器人提供更多控制入口。 + +同账号设备互控默认使用官方 Relay;桌面端也可启动本地 Relay,供同一网络内的手机连接。两种方式登录时都需要访问 OpenBitFun 在线身份服务,局域网模式不提供离线登录。私有 Relay 需要配套客户端构建,详见[部署指南](./src/apps/relay-server/README.md#for-community-developers-and-forks)。 -同账号设备互控、登录与同步服务由你[自部署 Relay](./src/apps/relay-server/README.md)。更多连接方式见[远程连接](./docs/interactive-capabilities/capabilities/feature.remote-connect.md)与[远程工作区](./docs/features/remote-workspaces.md)。 +设备间传输的内容采用端到端加密,密钥在设备上生成,会话与文件按需从持有它们的在线设备读取;Relay 仍处理账号、设备和路由元数据。这一加密边界不涵盖模型服务商、聊天机器人平台或已发布的 Pages。详见[隐私边界](./src/apps/relay-server/FAQ.zh-CN.md#服务能看到什么)、[远程连接](./docs/interactive-capabilities/capabilities/feature.remote-connect.md)与[远程工作区](./docs/features/remote-workspaces.md)。
diff --git a/deploy/relay-v1/README.md b/deploy/relay-v1/README.md index 1d8fab795f..9f085aaf05 100644 --- a/deploy/relay-v1/README.md +++ b/deploy/relay-v1/README.md @@ -3,6 +3,12 @@ This directory is a community self-deployment template. Example domains and paths must be replaced with your own environment. +Normal Remote Connect use goes through the official Relay and does not require +this deployment. A private endpoint requires matching client builds; setting +these server variables alone does not redirect released clients. Follow the +[fork setup](../../src/apps/relay-server/README.md#for-community-developers-and-forks) +and read the [connection FAQ](../../src/apps/relay-server/FAQ.md) first. + The owner guide is [Relay Server](../../src/apps/relay-server/README.md). Use this independent Compose project for `/v/1.0.2/`. Keep the `/v/1.0.1/` Compose project (`openbitfun-relay-v1.0.1`, port `19701`, `/srv/openbitfun-relay-v1.0.1`) running with its own diff --git a/docs/interactive-capabilities/capabilities.json b/docs/interactive-capabilities/capabilities.json index 3c7bfee1b3..f31137a169 100644 --- a/docs/interactive-capabilities/capabilities.json +++ b/docs/interactive-capabilities/capabilities.json @@ -4,7 +4,7 @@ "title": "OpenBitFun Playbook", "origin": "https://playbook.openbitfun.com", "source": "src/shared/interactive-capabilities/catalog.json", - "digest": "6ae2eeaa19e6342f9dcf7ff33b7c0fa94547ee1c02fc1835f6f4471caab6fbb3", + "digest": "9b42d8bd570aa1f371e2ddfbb4c6d8384e97492e7987c774eef00c1f087db6dc", "ownerDigest": "3cc6d7d869b2c90c2161494a854b5ff7eb72ea69a1a28e40ccd42065fb3382e2", "searchAcceptance": [ { @@ -25571,8 +25571,8 @@ "categoryId": "connect", "titleZh": "Remote Connect 与多设备", "titleEn": "Remote Connect & devices", - "summaryZh": "从手机、Bot 或另一台 OpenBitFun 设备连接当前主机,远程查看会话、回答权限并继续工作。", - "summaryEn": "Connect to this host from mobile, a bot, or another OpenBitFun device to inspect sessions, answer permissions, and continue work remotely.", + "summaryZh": "从手机、Bot 或另一台 OpenBitFun 设备远程查看会话、回答权限并继续工作。手机与同账号设备互控默认使用官方 Relay,无需部署服务器;官方与局域网模式登录时均需联网。", + "summaryEn": "Inspect sessions, answer permissions, and continue work from mobile, a bot, or another OpenBitFun device. Mobile and same-account device control use the official Relay by default, with no server deployment; both official and LAN modes need internet access for sign-in.", "keywordsZh": [ "Remote Connect", "远程控制", @@ -25582,7 +25582,8 @@ "微信", "多设备", "Peer Device", - "GitHub" + "GitHub", + "邮箱登录" ], "keywordsEn": [ "remote connect", @@ -25593,28 +25594,29 @@ "WeChat", "multi-device", "peer device", - "GitHub" + "GitHub", + "email sign-in" ], "highlightsZh": [ - "通过局域网或官方 Relay 连接", + "官方 Relay 无需部署;桌面端可同时运行局域网 Relay", "接入飞书、Telegram 或微信 Bot", - "使用 GitHub 身份管理设备并进入 Peer Device Mode" + "使用同一种登录方式与同一账号管理设备并进入 Peer Device Mode" ], "highlightsEn": [ - "Connect through LAN or the official Relay", + "Use the official Relay without deployment; Desktop can also run a LAN Relay concurrently", "Use Feishu, Telegram, or WeChat bots", - "Use GitHub identity to manage devices and enter Peer Device Mode" + "Use the same login method and account to manage devices and enter Peer Device Mode" ], "items": [ { "id": "connection-methods", - "titleZh": "选择局域网或官方 Relay", - "titleEn": "Choose LAN or the official Relay", + "titleZh": "使用官方 Relay 或桌面内置局域网 Relay;两者可同时运行,登录均需联网", + "titleEn": "Use the official or Desktop-hosted LAN Relay; both can run together and need internet for sign-in", "control": { "kind": "open", "reasonCode": "unstructuredInteraction", - "reasonZh": "“选择局域网或官方 Relay”需要结合当前网络与设备状态,确认目标主机后才能连接;智能体打开连接入口,由用户完成选择。", - "reasonEn": "“Choose LAN or the official Relay” depends on the current network and device state and requires the user to confirm the target host; the Agent opens the connection entry for that choice." + "reasonZh": "“使用官方 Relay 或桌面内置局域网 Relay;两者可同时运行,登录均需联网”需要结合当前网络与设备状态,由用户确认目标主机。官方 Relay 无需部署;私有 Relay 需配套客户端构建,界面没有自定义服务器地址或部署向导。", + "reasonEn": "“Use the official or Desktop-hosted LAN Relay; both can run together and need internet for sign-in” depends on network and device state and requires target confirmation. The official Relay needs no deployment; a private Relay requires matching client builds, with no custom-server field or deployment wizard in the UI." } }, { @@ -25662,13 +25664,13 @@ }, { "id": "account", - "titleZh": "使用 GitHub 登录、退出并查看身份状态", - "titleEn": "Sign in with GitHub, sign out, and inspect identity status", + "titleZh": "通过共享登录页使用 GitHub 或邮箱验证码登录、退出并查看身份状态", + "titleEn": "Sign in through the shared page with GitHub or an email code, sign out, and inspect identity status", "control": { "kind": "open", "reasonCode": "externalAuth", - "reasonZh": "GitHub 账户登录必须由用户在外部认证页面确认;智能体可以打开入口并读取非秘密状态,但不能冒充账户持有人。", - "reasonEn": "GitHub account sign-in requires confirmation on an external authentication page; the Agent may open the entry and read non-secret status but cannot impersonate the account holder." + "reasonZh": "登录必须由用户在外部认证页面完成。GitHub 与邮箱是独立账号,各设备需使用同一种方式和同一账号;旧客户端或服务可能仅支持 GitHub。智能体可打开入口并读取非秘密状态,不能代替用户认证。", + "reasonEn": "The user must complete sign-in on the external authentication page. GitHub and email are independent accounts; devices need the same method and account. Older clients or services may support GitHub only. The Agent may open the entry and read non-secret status, but cannot authenticate for the user." } }, { @@ -25695,14 +25697,16 @@ } ], "stepsZh": [ - "打开 Remote Connect", - "选择网络、Bot 或账户", - "按向导连接并确认安全提示" + "打开 Remote Connect,选择网络、Bot 或账户入口", + "手机或设备互控:宿主与控制端以相同方式登录同一账号,官方 Relay 无需部署", + "手机可扫描官方或桌面局域网邀请,确认目标设备;二维码不授予访问权,目标宿主须保持在线", + "Bot 远控:在对应平台完成机器人配置与配对,检查监听状态" ], "stepsEn": [ - "Open Remote Connect", - "Choose Network, Bot, or Account", - "Follow the connection flow and review its security notice" + "Open Remote Connect and choose Network, Bot, or Account", + "For mobile or device control, sign in on the host and controller with the same method and account; the official Relay needs no deployment", + "On mobile, scan an official or Desktop LAN invitation and confirm the target; the QR code grants no access and the host must stay online", + "For bot control, configure and pair the bot on its platform, then check listener status" ], "agentExamplesZh": [ "打开 Remote Connect", @@ -25904,6 +25908,7 @@ "多设备", "Peer Device", "GitHub", + "邮箱登录", "remote connect", "remote control", "mobile", @@ -25911,22 +25916,23 @@ "WeChat", "multi-device", "peer device", - "通过局域网或官方 Relay 连接", + "email sign-in", + "官方 Relay 无需部署;桌面端可同时运行局域网 Relay", "接入飞书、Telegram 或微信 Bot", - "使用 GitHub 身份管理设备并进入 Peer Device Mode", - "Connect through LAN or the official Relay", + "使用同一种登录方式与同一账号管理设备并进入 Peer Device Mode", + "Use the official Relay without deployment; Desktop can also run a LAN Relay concurrently", "Use Feishu, Telegram, or WeChat bots", - "Use GitHub identity to manage devices and enter Peer Device Mode", - "选择局域网或官方 Relay", - "Choose LAN or the official Relay", + "Use the same login method and account to manage devices and enter Peer Device Mode", + "使用官方 Relay 或桌面内置局域网 Relay;两者可同时运行,登录均需联网", + "Use the official or Desktop-hosted LAN Relay; both can run together and need internet for sign-in", "启动、停止 Remote Connect 并查看实时连接状态和设备信息", "Start or stop Remote Connect and inspect live status and device information", "查看局域网 IP、网络信息与可分享的连接配置", "Inspect LAN IP, network details, and shareable connection configuration", "配置飞书、Telegram、微信等 Bot 并单独停止 Bot", "Configure Feishu, Telegram, WeChat, and other bots, and stop a bot independently", - "使用 GitHub 登录、退出并查看身份状态", - "Sign in with GitHub, sign out, and inspect identity status", + "通过共享登录页使用 GitHub 或邮箱验证码登录、退出并查看身份状态", + "Sign in through the shared page with GitHub or an email code, sign out, and inspect identity status", "列出、连接、查看设备型号与系统、设置别名和删除同账户设备", "List, connect, inspect model and OS, set aliases, and remove same-account devices", "进入 Peer Device Mode,把另一台 OpenBitFun 设备作为命令与事件数据面", @@ -26465,12 +26471,12 @@ } ], "stepsZh": [ - "使用 GitHub 登录", + "登录 OpenBitFun 账号(GitHub 或服务支持的邮箱验证码)", "打开 Pages", "选择页面并确认发布与可见性" ], "stepsEn": [ - "Sign in to a GitHub account", + "Sign in to OpenBitFun with GitHub or an email code supported by the service", "Open Pages", "Choose a page and confirm publishing and visibility" ], diff --git a/docs/interactive-capabilities/capabilities/feature.pages.md b/docs/interactive-capabilities/capabilities/feature.pages.md index c915a6202c..3055639888 100644 --- a/docs/interactive-capabilities/capabilities/feature.pages.md +++ b/docs/interactive-capabilities/capabilities/feature.pages.md @@ -34,8 +34,8 @@ Save page versions and publish them to public or private URLs while managing tit ## 怎么用 / How to use it -1. 使用 GitHub 登录 - Sign in to a GitHub account +1. 登录 OpenBitFun 账号(GitHub 或服务支持的邮箱验证码) + Sign in to OpenBitFun with GitHub or an email code supported by the service 2. 打开 Pages Open Pages 3. 选择页面并确认发布与可见性 diff --git a/docs/interactive-capabilities/capabilities/feature.remote-connect.md b/docs/interactive-capabilities/capabilities/feature.remote-connect.md index 7f717ecb79..ba3e0d4e01 100644 --- a/docs/interactive-capabilities/capabilities/feature.remote-connect.md +++ b/docs/interactive-capabilities/capabilities/feature.remote-connect.md @@ -11,22 +11,22 @@ title_en: "Remote Connect & devices" > 功能 / Feature -从手机、Bot 或另一台 OpenBitFun 设备连接当前主机,远程查看会话、回答权限并继续工作。 +从手机、Bot 或另一台 OpenBitFun 设备远程查看会话、回答权限并继续工作。手机与同账号设备互控默认使用官方 Relay,无需部署服务器;官方与局域网模式登录时均需联网。 -Connect to this host from mobile, a bot, or another OpenBitFun device to inspect sessions, answer permissions, and continue work remotely. +Inspect sessions, answer permissions, and continue work from mobile, a bot, or another OpenBitFun device. Mobile and same-account device control use the official Relay by default, with no server deployment; both official and LAN modes need internet access for sign-in. ## 完整功能清单 / Everything included -- **智能体可定位入口,需交互完成 / Agent opens; interaction required** · 选择局域网或官方 Relay - - Choose LAN or the official Relay +- **智能体可定位入口,需交互完成 / Agent opens; interaction required** · 使用官方 Relay 或桌面内置局域网 Relay;两者可同时运行,登录均需联网 + - Use the official or Desktop-hosted LAN Relay; both can run together and need internet for sign-in - **智能体可直接控制 / Direct Agent control** · 启动、停止 Remote Connect 并查看实时连接状态和设备信息 - Start or stop Remote Connect and inspect live status and device information - **智能体可定位入口,需交互完成 / Agent opens; interaction required** · 查看局域网 IP、网络信息与可分享的连接配置 - Inspect LAN IP, network details, and shareable connection configuration - **智能体可直接控制 / Direct Agent control** · 配置飞书、Telegram、微信等 Bot 并单独停止 Bot - Configure Feishu, Telegram, WeChat, and other bots, and stop a bot independently -- **智能体可定位入口,需交互完成 / Agent opens; interaction required** · 使用 GitHub 登录、退出并查看身份状态 - - Sign in with GitHub, sign out, and inspect identity status +- **智能体可定位入口,需交互完成 / Agent opens; interaction required** · 通过共享登录页使用 GitHub 或邮箱验证码登录、退出并查看身份状态 + - Sign in through the shared page with GitHub or an email code, sign out, and inspect identity status - **智能体可定位入口,需交互完成 / Agent opens; interaction required** · 列出、连接、查看设备型号与系统、设置别名和删除同账户设备 - List, connect, inspect model and OS, set aliases, and remove same-account devices - **智能体可定位入口,需交互完成 / Agent opens; interaction required** · 进入 Peer Device Mode,把另一台 OpenBitFun 设备作为命令与事件数据面 @@ -34,12 +34,14 @@ Connect to this host from mobile, a bot, or another OpenBitFun device to inspect ## 怎么用 / How to use it -1. 打开 Remote Connect - Open Remote Connect -2. 选择网络、Bot 或账户 - Choose Network, Bot, or Account -3. 按向导连接并确认安全提示 - Follow the connection flow and review its security notice +1. 打开 Remote Connect,选择网络、Bot 或账户入口 + Open Remote Connect and choose Network, Bot, or Account +2. 手机或设备互控:宿主与控制端以相同方式登录同一账号,官方 Relay 无需部署 + For mobile or device control, sign in on the host and controller with the same method and account; the official Relay needs no deployment +3. 手机可扫描官方或桌面局域网邀请,确认目标设备;二维码不授予访问权,目标宿主须保持在线 + On mobile, scan an official or Desktop LAN invitation and confirm the target; the QR code grants no access and the host must stay online +4. Bot 远控:在对应平台完成机器人配置与配对,检查监听状态 + For bot control, configure and pair the bot on its platform, then check listener status 入口 / Entry: OpenBitFun 内的对应控制界面 diff --git a/docs/interactive-capabilities/technical/product-control-open-audit.json b/docs/interactive-capabilities/technical/product-control-open-audit.json index cd61df7f2a..09f9ea2252 100644 --- a/docs/interactive-capabilities/technical/product-control-open-audit.json +++ b/docs/interactive-capabilities/technical/product-control-open-audit.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "generatedFrom": "src/shared/interactive-capabilities/catalog.json", - "catalogDigest": "6ae2eeaa19e6342f9dcf7ff33b7c0fa94547ee1c02fc1835f6f4471caab6fbb3", + "catalogDigest": "9b42d8bd570aa1f371e2ddfbb4c6d8384e97492e7987c774eef00c1f087db6dc", "count": 205, "reasonCounts": { "externalAuth": 4, @@ -1969,17 +1969,19 @@ { "capabilityId": "feature.remote-connect", "itemId": "connection-methods", - "titleZh": "选择局域网或官方 Relay", - "titleEn": "Choose LAN or the official Relay", + "titleZh": "使用官方 Relay 或桌面内置局域网 Relay;两者可同时运行,登录均需联网", + "titleEn": "Use the official or Desktop-hosted LAN Relay; both can run together and need internet for sign-in", "reasonCode": "unstructuredInteraction", - "reasonZh": "“选择局域网或官方 Relay”需要结合当前网络与设备状态,确认目标主机后才能连接;智能体打开连接入口,由用户完成选择。", - "reasonEn": "“Choose LAN or the official Relay” depends on the current network and device state and requires the user to confirm the target host; the Agent opens the connection entry for that choice.", + "reasonZh": "“使用官方 Relay 或桌面内置局域网 Relay;两者可同时运行,登录均需联网”需要结合当前网络与设备状态,由用户确认目标主机。官方 Relay 无需部署;私有 Relay 需配套客户端构建,界面没有自定义服务器地址或部署向导。", + "reasonEn": "“Use the official or Desktop-hosted LAN Relay; both can run together and need internet for sign-in” depends on network and device state and requires target confirmation. The official Relay needs no deployment; a private Relay requires matching client builds, with no custom-server field or deployment wizard in the UI.", "presentationTarget": { "kind": "event", "eventName": "openbitfun:open-remote-connect" }, "evidence": [ - "command:remote_connect_get_methods" + "command:remote_connect_get_methods", + "source:src/apps/desktop/src/api/remote_connect_api/relay_routes_tests.rs#dual_relay_rpc_persistence_and_teardown_are_independent", + "source:src/crates/services/relay-service/src/identity.rs#IDENTITY_ME_URL" ] }, { @@ -2004,11 +2006,11 @@ { "capabilityId": "feature.remote-connect", "itemId": "account", - "titleZh": "使用 GitHub 登录、退出并查看身份状态", - "titleEn": "Sign in with GitHub, sign out, and inspect identity status", + "titleZh": "通过共享登录页使用 GitHub 或邮箱验证码登录、退出并查看身份状态", + "titleEn": "Sign in through the shared page with GitHub or an email code, sign out, and inspect identity status", "reasonCode": "externalAuth", - "reasonZh": "GitHub 账户登录必须由用户在外部认证页面确认;智能体可以打开入口并读取非秘密状态,但不能冒充账户持有人。", - "reasonEn": "GitHub account sign-in requires confirmation on an external authentication page; the Agent may open the entry and read non-secret status but cannot impersonate the account holder.", + "reasonZh": "登录必须由用户在外部认证页面完成。GitHub 与邮箱是独立账号,各设备需使用同一种方式和同一账号;旧客户端或服务可能仅支持 GitHub。智能体可打开入口并读取非秘密状态,不能代替用户认证。", + "reasonEn": "The user must complete sign-in on the external authentication page. GitHub and email are independent accounts; devices need the same method and account. Older clients or services may support GitHub only. The Agent may open the entry and read non-secret status, but cannot authenticate for the user.", "presentationTarget": { "kind": "event", "eventName": "openbitfun:open-remote-connect" @@ -2018,7 +2020,8 @@ "command:account_github_poll", "command:account_github_info", "command:account_logout", - "command:account_status" + "command:account_status", + "source:src/crates/services/services-integrations/src/account_identity/mod.rs#/auth/desktop/start?methods=all" ] }, { diff --git a/docs/interactive-capabilities/technical/tauri-command-map.json b/docs/interactive-capabilities/technical/tauri-command-map.json index b12f13a00d..4803cc4b80 100644 --- a/docs/interactive-capabilities/technical/tauri-command-map.json +++ b/docs/interactive-capabilities/technical/tauri-command-map.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "generatedFrom": "src/shared/interactive-capabilities/catalog.json", - "catalogDigest": "6ae2eeaa19e6342f9dcf7ff33b7c0fa94547ee1c02fc1835f6f4471caab6fbb3", + "catalogDigest": "9b42d8bd570aa1f371e2ddfbb4c6d8384e97492e7987c774eef00c1f087db6dc", "commandCount": 709, "coverage": { "commandCount": 709, diff --git a/src/apps/desktop/AGENTS-CN.md b/src/apps/desktop/AGENTS-CN.md index 7dc85621ed..88de17453b 100644 --- a/src/apps/desktop/AGENTS-CN.md +++ b/src/apps/desktop/AGENTS-CN.md @@ -23,7 +23,7 @@ Peer Device Mode 的所有权和边界见 `docs/architecture/peer-device-mode.md`。 前端防回归清单见 `src/web-ui/src/infrastructure/peer-device/README.md`。 -GitHub 身份统一由 `account_identity_api.rs` 提供;Relay 设备注册和生命周期位于 +OpenBitFun 账号身份(GitHub 或邮箱验证码登录)统一由 `account_identity_api.rs` 提供;Relay 设备注册和生命周期位于 `src/api/remote_connect_api.rs`。设置留在所属设备,不再提供云端/本地同步选择。 Relay 部署向导已移除。保留 `src/apps/relay-server` 下供开发者使用的脚本和 [运维文档](../relay-server/README.md),不要重新加入产品 UI。 diff --git a/src/apps/desktop/AGENTS.md b/src/apps/desktop/AGENTS.md index 0afde0bad6..a992e41428 100644 --- a/src/apps/desktop/AGENTS.md +++ b/src/apps/desktop/AGENTS.md @@ -26,7 +26,7 @@ Peer Device Mode ownership and boundaries: Frontend regression guards: `src/web-ui/src/infrastructure/peer-device/README.md`. -GitHub identity is shared through `account_identity_api.rs`. Relay device +OpenBitFun account identity (GitHub or email-code sign-in) is shared through `account_identity_api.rs`. Relay device registration and lifecycle live in `src/api/remote_connect_api.rs`; settings remain on their owning device and there is no cloud/local sync choice. diff --git a/src/apps/desktop/README.md b/src/apps/desktop/README.md index 0184ed4a61..a0df236c92 100644 --- a/src/apps/desktop/README.md +++ b/src/apps/desktop/README.md @@ -109,12 +109,13 @@ completion quality, total latency, model/cache usage and auxiliary request cost. ## Remote Connect -Sign in once with the shared GitHub account. The official Relay and **Same -network** (the embedded LAN Relay) can run at the same time. Each tab shows its -own connection and connected browsers; **Disconnect** affects that tab only. +Sign in with the same OpenBitFun account on each device, using the same GitHub +or email-code login method. The official Relay needs no user deployment. The +official Relay and **Same network** (the embedded LAN Relay) can run at the same +time. Each tab shows its own connection and connected browsers; **Disconnect** affects that tab only. Closing a connection code keeps an established connection running. -**My devices**, Peer Device Mode, account synchronization and detached dispatch +**My devices**, Peer Device Mode, account synchronization and account-device detached dispatch use the official Relay. Starting or stopping the LAN Relay does not switch their account or endpoint. LAN invitations advertise the selected network interface; select it again and create a new invitation after changing networks. @@ -125,6 +126,10 @@ LAN session in the account slot attempt to restore the official Relay from the shared identity; failed sign-in leaves the previous credential on disk. Signing out closes both connections. +Both modes require the online identity service for sign-in. Same-network mode +does not provide offline login. See the [Relay FAQ](../relay-server/FAQ.md) for +privacy, service availability, and private-deployment requirements. + ## Global agent instructions Put personal instructions for local OpenBitFun sessions in diff --git a/src/apps/miniapp-market-server/README.md b/src/apps/miniapp-market-server/README.md index bd7bba45ad..b8537d675e 100644 --- a/src/apps/miniapp-market-server/README.md +++ b/src/apps/miniapp-market-server/README.md @@ -68,7 +68,8 @@ cargo run -p openbitfun-miniapp-market-server ``` 开发默认 secret 不能用于 release 或生产。GitHub OAuth 未配置时,健康响应中的 -`githubAuthConfigured` 为 `false`,登录功能不可用。 +`githubAuthConfigured` 为 `false`,仅 GitHub 登录不可用。邮箱验证码登录由 +`emailAuthConfigured` 单独报告,需配置 SMTP;详见[身份服务说明](../../crates/services/miniapp-market-service/README.md#邮箱验证码登录)。 ## 环境变量 diff --git a/src/apps/mobile/README.md b/src/apps/mobile/README.md index 58aec703df..3c0859aaa0 100644 --- a/src/apps/mobile/README.md +++ b/src/apps/mobile/README.md @@ -6,11 +6,15 @@ This directory contains the native mobile product surfaces for OpenBitFun: - `ios/`: iOS application code and resources. - `harmonyos/`: HarmonyOS application code and resources. -The mobile apps are remote controllers: GitHub login and the account device +The mobile apps are remote controllers: OpenBitFun account sign-in and the device directory select a desktop or CLI host that owns configuration and Agent Runtime execution. Phones submit tasks and display results; they do not synchronize model configuration or execute agents locally. +The official Relay needs no user deployment. Use the same login method and +account on the phone and host; GitHub and email-code accounts are independent. +See the [Relay FAQ](../relay-server/FAQ.md) for connection and privacy boundaries. + Each platform directory owns its native UI, lifecycle, permissions, packaging, and platform adapters. Product logic and stable contracts should remain in the platform-agnostic Rust layers and be exposed to these apps through explicit diff --git a/src/apps/mobile/harmonyos/AGENTS.md b/src/apps/mobile/harmonyos/AGENTS.md index 6d2e45728b..9445cda054 100644 --- a/src/apps/mobile/harmonyos/AGENTS.md +++ b/src/apps/mobile/harmonyos/AGENTS.md @@ -6,7 +6,7 @@ These rules apply to all changes under `src/apps/mobile/harmonyos`. Phone, tablet, and foldable entrypoints are remote controllers. They must not instantiate a local Agent Runtime, model provider, local chat command owner, or -model configuration store. GitHub identity and the authenticated device directory +model configuration store. OpenBitFun account identity and the authenticated device directory are the authority for selection and reconnect; QR data supplies only a device id. Keep old persisted records readable and retained without activating legacy room credentials or local execution. Compact and wide hosts enforce the same boundary. diff --git a/src/apps/relay-server/FAQ.md b/src/apps/relay-server/FAQ.md new file mode 100644 index 0000000000..5e3856b807 --- /dev/null +++ b/src/apps/relay-server/FAQ.md @@ -0,0 +1,126 @@ +# Relay, accounts, and remote connections + +[中文](FAQ.zh-CN.md) · [Operator guide](README.md) + +## Do I need to deploy a server? + +No. Released clients use the official Relay for same-account device control. +Sign in on the host and controller with the same OpenBitFun account and follow +the Remote Connect invitation or device-selection flow. Keep the host running +and reachable. The official endpoint is `https://remote.openbitfun.com/v/1.0.2`; +the path is a service-protocol prefix, not the current desktop release number. + +| Connection | What you need | +| --- | --- | +| Official Relay | Internet access and the same account on both devices; no server deployment or Relay URL configuration | +| Same network | A Desktop host running its embedded LAN Relay, reachable by the controller; internet access for sign-in | +| Private Relay | Your own service deployment and matching client builds; see the [fork guide](README.md#for-community-developers-and-forks) | +| SSH / Docker workspace | Access to the target environment; independent of Relay login | + +Desktop can keep official and LAN connections active together. **My devices**, +Peer Device Mode, account synchronization, and account-device Detached Dispatch +continue to use the official account endpoint; LAN mode does not move them to a +private server. CLI does not host an embedded LAN Relay. Messaging bots have +their own provider configuration and pairing flow. + +## Is GitHub required? + +Current clients offer GitHub and email verification-code sign-in when enabled +by the shared identity service. Email sign-in needs no password. The two login +methods create independent accounts; matching email addresses do not merge them. +Use the same method and account on each device to see the same devices. + +Older clients and services can offer GitHub only. If an expected login option is +missing, check the installed client and service support. Local work and SSH / +Docker workspace connections do not require a Relay account; model and external +service credentials are separate. + +An invitation identifies a Relay endpoint and target device. Scanning it does +not grant access: the controller must sign in and resolve the device in its +same-account directory. + +## Can I use LAN mode without internet access? + +LAN device traffic stays on the selected local Relay, but both LAN and official +modes use `auth.openbitfun.com` for identity verification at sign-in. A local +Relay therefore does not provide an offline account-setup or sign-in flow. +An existing authenticated connection is not a guarantee that a new login or +credential renewal will work during an outage. + +For an isolated environment, local work and SSH / Docker remain separate +options, subject to their own connectivity and model requirements. A private +Relay alone does not remove the online identity dependency: an independent +deployment must also adapt the identity service and clients. The shipped +product does not provide a turnkey air-gapped identity mode. + +## What can the services see? + +Device-control payloads are encrypted end to end. Devices generate X25519 +private keys locally, retrieve peer public keys from the authenticated account +directory, and derive AES-GCM keys using X25519 and HKDF-SHA256. The Relay does +not receive device private keys. Session history and workspace files are read +from the owning online host on demand, rather than a Relay-hosted session backup. + +The Relay still processes account IDs, device registrations, public keys, +presence, and routing metadata. The identity service processes sign-in; the +identity service and authenticated public-key directory remain part of the +trust boundary. Payload encryption does not mean that no data reaches an +operated service, nor does it protect a compromised endpoint. + +Published Pages, Page data/functions, marketplaces, model-provider requests, and +messaging-bot traffic have separate data flows. Publishing a Page uploads its +content to the publishing service under the selected visibility rules. Do not +apply the device-control encryption claim to all OpenBitFun network traffic. + +## Is the official Relay free? What are the quotas and SLA? + +This repository documents technical resource controls, but does not publish a +Relay pricing schedule, monthly traffic allowance, or service-level agreement +(SLA). Check current service announcements or ask the maintainers through the +[repository](https://github.com/GCWing/OpenBitFun) before relying on specific +commercial or availability terms. Open-source licensing does not establish +hosted-service terms. + +The [resource-control table](README.md#public-service-resource-controls) +documents enforced device, connection, request, and payload limits. These are +technical limits, not a subscription quota or an unlimited-use promise; the +deployment and reverse proxy may enforce tighter limits. Historical 0.2.x +“Beta free” descriptions do not establish permanent free service or current +limits. Legacy anonymous pairing, password provisioning, and deployment-wizard +instructions do not describe the current account-based connection flow. + +## What happens if a service or device is unavailable? + +New sign-ins require the identity service. Official remote control requires +the Relay and the selected host to be reachable. If the host is offline, its +session history and files are unavailable through that connection. A controller +disconnect does not cancel work already running on the host, but the host must +stay running and tasks waiting for approval still need an answer. + +Desktop's same-network connection can provide a separate route when the devices +can reach each other, subject to the sign-in requirement above. It is not an +automatic failover for My devices, Peer Device Mode, or account-device dispatch. +Local work and independently configured SSH / Docker access are not Relay +routes. Reconnect and inspect the existing task before submitting it again. + +## What does self-hosting actually involve? + +The public mode has a fixed official endpoint, with no editable custom-server +field or deployment wizard. A private Relay needs coordinated client endpoint +changes, a compatible Relay/mobile-web build, persistent storage, TLS and proxy +configuration, and ongoing backups, upgrades, monitoring, and capacity planning. +If you also operate identity, configure the supported login providers and their +callbacks or email delivery. A VPS alone does not complete this setup; there is +no universal monthly-cost estimate. + +Start with the [fork guide](README.md#for-community-developers-and-forks) and +[versioned deployment guide](../../../deploy/relay-v1/README.md). Changing server +environment variables does not redirect already released clients. + +## Implementation references + +- [Official endpoint and account identities](../../crates/contracts/product-domains/src/account.rs) +- [Shared sign-in and older-client compatibility](../../crates/services/miniapp-market-service/README.md#邮箱验证码登录) +- [Desktop connection lifecycle](../desktop/README.md#remote-connect) +- [Device key derivation](../../crates/services/services-integrations/src/remote_connect/device_crypto.rs) and [Relay identity verification](../../crates/services/relay-service/src/identity.rs) +- [Remote workspace ownership](../../../docs/architecture/remote-workspace-transport.md#controller-and-runtime-ownership) diff --git a/src/apps/relay-server/FAQ.zh-CN.md b/src/apps/relay-server/FAQ.zh-CN.md new file mode 100644 index 0000000000..be63b55e93 --- /dev/null +++ b/src/apps/relay-server/FAQ.zh-CN.md @@ -0,0 +1,104 @@ +# Relay、账号与远程连接常见问题 + +[English](FAQ.md) · [运维指南](README.md) + +## 需要自己部署服务器吗? + +不需要。发布版客户端默认通过官方 Relay 实现同账号设备互控。在宿主与控制端 +登录同一个 OpenBitFun 账号,按 Remote Connect 的邀请或设备选择流程连接即可。 +宿主需要保持运行且可连接。官方端点为 `https://remote.openbitfun.com/v/1.0.2`, +路径中的版本是服务协议前缀,不代表当前桌面客户端版本。 + +| 连接方式 | 使用条件 | +| --- | --- | +| 官方 Relay | 两端可联网并登录同一账号;无需部署服务器或配置 Relay 地址 | +| 同一网络 | 桌面宿主启动内置 LAN Relay,控制端能访问该宿主;登录时仍需联网 | +| 私有 Relay | 自行部署服务并构建配套客户端,见[分支部署指南](README.md#for-community-developers-and-forks) | +| SSH / Docker 工作区 | 能访问目标环境;不依赖 Relay 登录 | + +桌面端可同时维持官方与局域网连接。「我的设备」、Peer Device Mode、账号同步 +以及通过账号设备派发的 Detached Dispatch 仍使用官方账号端点;开启局域网不会 +把这些功能迁移到私有服务器。CLI 不提供内置 LAN Relay。聊天机器人使用各自 +平台的配置与配对流程。 + +## 必须使用 GitHub 吗? + +新版客户端支持 GitHub 与邮箱验证码登录,具体入口取决于共享身份服务是否启用。 +邮箱登录不需要设置密码。这两种方式创建独立账号,即使邮箱相同也不会自动合并。 +各设备必须使用相同的登录方式与账号,才能看到同一组设备。 + +旧客户端或旧服务可能只提供 GitHub 登录。缺少预期入口时,应核对客户端版本与 +服务支持情况。本地使用及 SSH / Docker 工作区连接不需要 Relay 账号;模型和 +外部服务的凭据另行配置。 + +邀请只标识 Relay 端点与目标设备,扫码本身不授予访问权。控制端仍需登录,并在 +同账号设备目录中找到目标设备。 + +## 局域网模式能完全离线使用吗? + +局域网设备流量留在所选的本地 Relay,但局域网与官方模式登录时都要通过 +`auth.openbitfun.com` 验证身份。本地 Relay 不提供离线开户或登录流程。 +已有连接仍处于登录状态,也不代表断网后能完成新的登录或凭据续期。 + +隔离网络中可考虑本地工作或 SSH / Docker,但仍需满足各自的连接与模型运行条件。 +仅自建 Relay 不能去掉在线身份依赖;独立部署还需适配身份服务和客户端。 +当前发布版没有开箱即用的隔离网络身份模式。 + +## 服务能看到什么? + +设备控制的传输内容采用端到端加密。各设备在本地生成 X25519 私钥,从已认证的 +账号目录获取对端公钥,再通过 X25519 与 HKDF-SHA256 派生 AES-GCM 密钥。 +Relay 不接收设备私钥。会话历史与工作区文件按需从持有它们的在线宿主读取, +不以 Relay 中的会话备份作为数据源。 + +Relay 仍会处理账号 ID、设备注册信息、公钥、在线状态与路由元数据;身份服务 +负责登录验证。身份服务与已认证的公钥目录仍在信任边界内。因此,内容加密不能 +等同于「数据不经过运营服务」,也不能保护已经被攻破的设备。 + +已发布的 Pages、Page 数据与函数、市场、模型请求及聊天机器人有各自的数据流。 +发布 Page 会按所选可见性规则把内容上传到发布服务。不能把设备控制的加密范围 +扩展成对 OpenBitFun 全部网络流量的承诺。 + +## 官方 Relay 免费吗?有什么额度和 SLA? + +仓库记录了技术资源限制,但没有发布 Relay 价目表、月度流量额度或服务等级协议 +(SLA)。依赖具体费用或可用性条款前,请查阅当期服务公告,或通过 +[项目仓库](https://github.com/GCWing/OpenBitFun)向维护者核实。开源许可证不能 +代替托管服务的运营条款。 + +[资源限制表](README.md#public-service-resource-controls)列出了设备、连接、 +请求与消息大小等限制。这些是技术限制,不是订阅额度或无限使用承诺;实际部署 +与反向代理还可能采用更严格的限制。旧 0.2.x「Beta 免费」描述不能作为永久免费 +或当前额度的依据。旧匿名配对、密码开户和部署向导说明,也不适用于当前的账号 +连接流程。 + +## 服务或设备不可用时怎么办? + +新登录需要身份服务可用;官方远控需要 Relay 与目标宿主均可连接。宿主离线时, +不能通过该连接读取它的会话历史与文件。控制端断开不会取消已在宿主上运行的 +任务,但宿主必须继续运行,等待授权的任务也仍需有人回答。 + +设备能互相访问时,桌面端的同一网络连接可提供另一条路径,但仍受上述登录条件 +约束。它不会自动接管「我的设备」、Peer Device Mode 或账号设备派发。本地工作 +与另行配置的 SSH / Docker 访问不走 Relay。恢复连接后先检查已有任务,再决定 +是否重新提交。 + +## 自托管实际需要做什么? + +公开模式使用固定官方端点,没有可手填的服务器地址或部署向导。私有 Relay 需要 +统一修改客户端端点、构建兼容的 Relay 与手机网页端、配置持久化存储、TLS 和 +反向代理,并持续负责备份、升级、监控与容量规划。如果还要自行运营身份服务, +也需配置受支持的登录方式及其回调或邮件发送。购买一台 VPS 并不能完成这些工作, +费用也没有适用于所有部署的固定估算。 + +请从[分支部署指南](README.md#for-community-developers-and-forks)与 +[版本化部署指南](../../../deploy/relay-v1/README.md)开始。只修改服务器环境变量 +不会改变已发布客户端的连接地址。 + +## 实现参考 + +- [官方端点与账号身份](../../crates/contracts/product-domains/src/account.rs) +- [共享登录及旧客户端兼容](../../crates/services/miniapp-market-service/README.md#邮箱验证码登录) +- [桌面连接生命周期](../desktop/README.md#remote-connect) +- [设备密钥派生](../../crates/services/services-integrations/src/remote_connect/device_crypto.rs)与[Relay 身份验证](../../crates/services/relay-service/src/identity.rs) +- [远程工作区归属](../../../docs/architecture/remote-workspace-transport.md#controller-and-runtime-ownership) diff --git a/src/apps/relay-server/README.md b/src/apps/relay-server/README.md index 4eaad53727..3afc520574 100644 --- a/src/apps/relay-server/README.md +++ b/src/apps/relay-server/README.md @@ -1,29 +1,41 @@ # OpenBitFun Relay Server -The official Relay connects devices signed in to the same GitHub identity. -GitHub identity is shared with the marketplaces. Users sign in -from OpenBitFun; they do not create a Relay account or deploy a server. +The official Relay connects devices signed in to the same OpenBitFun account. +The identity service is shared with the marketplaces. Current clients offer +GitHub or email verification-code sign-in when enabled by the identity service; +these are independent accounts, so use the same method and account on each device. +Users sign in from OpenBitFun; they do not provision a separate Relay account or +deploy a server. Older clients can remain on the GitHub-only authorization flow. + +For connection choices, internet requirements, privacy, service limits, and +self-hosting, see the user FAQ: [English](FAQ.md) / [中文](FAQ.zh-CN.md). The official endpoint is `https://remote.openbitfun.com/v/1.0.2`. This release is deployed with its own process, database, assets, and reverse-proxy location. An existing `/relay` deployment remains on its existing binary and data directory. -The Relay forwards opaque encrypted messages. Each device generates an X25519 -private key locally and registers its public key after GitHub identity -verification. Peers obtain public keys through the authenticated same-account +For device-to-device control, the Relay forwards opaque encrypted payloads. +Each device generates an X25519 private key locally and registers its public key +after account identity verification. Peers obtain public keys through the authenticated same-account directory and derive an AES-GCM key with X25519 and HKDF-SHA256. The Relay does not receive device private keys or upload copies of settings and sessions. -Sessions and files are read from the owning online device on demand. +Sessions and files are read from the owning online device on demand. Account, +device, public-key, and routing metadata remain visible to the service. Published +Pages and their server-side storage/functions are separate from this encrypted +device-control path; see the [privacy boundary](FAQ.md#what-can-the-services-see). Selecting **Same network** starts the same Relay implementation inside the Desktop host at `http://:9700`. Its SQLite database is local to that host (`/relay-v1.0.0/local-server/relay.db`), separate from the -official server database. Login, device registration, device discovery, -public-key lookup, RPC and presence all use the selected Relay endpoint. -The two modes differ only in endpoint and host startup; no device traffic is -forwarded from the local Relay to the official Relay. - -Both modes verify GitHub identity through `auth.openbitfun.com`, so signing in +official server database. The official and embedded LAN connections can run +concurrently. Each connection uses its own Relay for device registration, +discovery, public-key lookup, RPC, and presence; the local Relay does not forward +its device traffic to the official Relay. **My devices**, Peer Device Mode, +account synchronization, and account-device Detached Dispatch continue to use +the official account endpoint. Starting or stopping LAN mode does not switch +that endpoint. See the [Desktop connection lifecycle](../desktop/README.md#remote-connect). + +Both modes verify account identity through `auth.openbitfun.com`, so signing in requires internet access. An invitation contains only the selected endpoint and device id (`/#/pair?did=`); scanning it grants no authority. The controller must sign in and resolve that id in its same-account directory. @@ -38,16 +50,17 @@ Relay URL. A private Relay therefore needs a matching client build. 1. Fork this workspace and read `CONTRIBUTING.md`. Build the Relay and mobile controller from the same revision. Keep your fork's changes in source control. -2. Select your HTTPS endpoint in `product-domains/src/account.rs`, then align +2. Select your HTTPS endpoint in `src/crates/contracts/product-domains/src/account.rs`, then align the frontend constants in `src/web-ui/src/infrastructure/remote-connect/remoteConnectionState.ts` and `src/mobile-web/src/services/pairingLink.ts`. Native clients have matching constants in KMP `core-transport/AccountDeviceLink.kt` and HarmonyOS `services/AccountDeviceLink.ets`; update the HarmonyOS account-link parser too. Search for `https://remote.openbitfun.com/v/1.0.2` to verify every runtime reference and corresponding test before building your distribution. -3. Decide who owns identity. You can retain the official GitHub identity +3. Decide who owns identity. You can retain the official OpenBitFun identity authority, or run the [shared identity service](../../../deploy/miniapp-market/README.md) - with your own GitHub OAuth application. For an independent authority, change + with your own GitHub OAuth application and/or email delivery configuration. + For an independent authority, change `IDENTITY_ME_URL` in `relay-service/src/identity.rs` and `DEFAULT_ACCOUNT_API_URL` in `services-integrations/src/account_identity/mod.rs` together, and adapt the market sign-in links and callback/completion host. @@ -56,7 +69,7 @@ Relay URL. A private Relay therefore needs a matching client build. readable. Relay never accepts an identity authority from a client request. 4. Use separate persistent data and asset directories, configure exact browser CORS origins, then put the service behind your own TLS reverse proxy. Build - and exercise two devices using the same GitHub identity before distributing + and exercise two devices using the same login method and account before distributing your fork. The public web controller must come from that matching build. The scripts remain in this directory: `deploy.sh` deploys on the machine where @@ -65,7 +78,7 @@ it runs, `common.sh` contains Docker/health helpers, and `mirror.sh` and `bash deploy.sh --help` first. For fork code use `bash deploy.sh --build-from-source --global-mirror`; the default image path pulls a published upstream release, so it will not include your modifications. -An empty account database is normal: successful GitHub verification creates an +An empty account database is normal: successful account verification creates an identity. Do not run retired `add-user` or password-reset commands. The legacy script uses its own Compose project and defaults. For a fresh @@ -82,7 +95,7 @@ shared HTTP/WebSocket implementation lives in `src/crates/services/relay-service Set `RELAY_DB_PATH` to a persistent SQLite database before starting the service. Startup fails if it is missing; anonymous public relay mode is unsupported. -The service validates OpenBitFun access tokens against the fixed GitHub identity +The service validates OpenBitFun access tokens against the fixed OpenBitFun identity authority at `https://auth.openbitfun.com/api/v1/me`. ```bash @@ -96,7 +109,7 @@ Use the isolated [v1 Compose project](../../../deploy/relay-v1/README.md). Set `RELAY_LISTEN_ADDR=127.0.0.1:19702` with host networking so the service can verify the immediate loopback proxy peer. Invalid listener values fail startup. Expose only the TLS reverse proxy. Keep the database and asset paths distinct from older deployments. -`relay-admin` supports listing and explicitly deleting accounts; GitHub login +`relay-admin` supports listing and explicitly deleting accounts; verified sign-in creates identities. Password provisioning, password reset, and user-entered Relay server URLs are retired. @@ -112,7 +125,7 @@ They are implemented in the shared Relay service, not in the agent loop. | Concurrent HTTP API requests | 2,048; overload returns 503 | | Body read / API handler | 15 seconds / 130 seconds | | HTTP request rate | 6,000/minute per source IP, and per account on the device API; overload returns 429 | -| GitHub authorization start / poll | 10 / 120 per minute per IP | +| Account authorization start / poll | 10 / 120 per minute per IP | | Identity verification | 10 attempts/minute per IP; 3-second connect and 5-second response timeout; 64 concurrent outbound requests | | WebSocket connections | 4,096 active sockets per Relay process; a further handshake is rejected with `connection capacity exceeded` | | WebSocket connect / heartbeat | Namespace connect must finish within 15 seconds; ping every 15 seconds with a 45-second pong timeout; 30-second acknowledgement lifetime | @@ -217,7 +230,7 @@ location and process. | Endpoint | Purpose | |---|---| | `GET /health`, `GET /api/info` | Health and service version | -| `POST /api/auth/github/start`, `/api/auth/github/poll` | Browser GitHub authorization | +| `POST /api/auth/github/start`, `/api/auth/github/poll` | Shared browser authorization with `methods=all` on start; legacy requests keep GitHub-only authorization | | `POST /api/auth/login` | Exchange verified identity for a keyed device credential | | `POST /api/auth/logout` | Revoke a credential | | `POST /api/auth/delegate` | Issue a separately keyed, restricted controller credential | diff --git a/src/apps/relay-server/static/homepage/i18n.json b/src/apps/relay-server/static/homepage/i18n.json index e93a2fde2d..3d76f3e5e8 100644 --- a/src/apps/relay-server/static/homepage/i18n.json +++ b/src/apps/relay-server/static/homepage/i18n.json @@ -2,17 +2,17 @@ "zh-CN": { "languageToggle": "语言:简体", "status": "服务运行中", - "desc": "桌面端与移动端之间的中继服务,提供配对与消息转发能力。", - "f1t": "建立连接", - "f1d": "承接配对请求,建立远程会话。", - "f2t": "消息转发", - "f2d": "桥接 WebSocket 与 HTTP 双向通信。", - "f3t": "自托管友好", - "f3d": "私有部署、自定义域名与反向代理。", - "flowDesktop": "桌面端", + "desc": "连接同一 OpenBitFun 账号下的设备,使用官方 Relay 无需部署服务器。", + "f1t": "账号验证", + "f1d": "各设备登录同一账号,邀请本身不授予访问权。", + "f2t": "加密转发", + "f2d": "设备控制内容端到端加密,路由元数据仍对服务可见。", + "f3t": "部署方式", + "f3d": "可直接使用官方服务;私有 Relay 需要配套客户端构建。", + "flowDesktop": "桌面端 / CLI", "flowDesktopSub": "OpenBitFun 智能体", "flowRelay": "中继服务", - "flowRelaySub": "配对 & 转发", + "flowRelaySub": "设备消息", "flowMobile": "移动端", "flowMobileSub": { "$shared": "features.remoteControl" @@ -21,17 +21,17 @@ "zh-TW": { "languageToggle": "語言:繁體", "status": "服務運行中", - "desc": "桌面端與移動端之間的中繼服務,提供配對與消息轉發能力。", - "f1t": "建立連接", - "f1d": "承接配對請求,建立遠程會話。", - "f2t": "消息轉發", - "f2d": "橋接 WebSocket 與 HTTP 雙向通信。", - "f3t": "自託管友好", - "f3d": "私有部署、自定義域名與反向代理。", - "flowDesktop": "桌面端", + "desc": "連接同一 OpenBitFun 帳號下的裝置,使用官方 Relay 無需部署伺服器。", + "f1t": "帳號驗證", + "f1d": "各裝置登入同一帳號,邀請本身不授予存取權。", + "f2t": "加密轉發", + "f2d": "裝置控制內容端到端加密,路由中繼資料仍對服務可見。", + "f3t": "部署方式", + "f3d": "可直接使用官方服務;私有 Relay 需要配套用戶端建置。", + "flowDesktop": "桌面端 / CLI", "flowDesktopSub": "OpenBitFun 智能體", "flowRelay": "中繼服務", - "flowRelaySub": "配對 & 轉發", + "flowRelaySub": "裝置訊息", "flowMobile": "移動端", "flowMobileSub": { "$shared": "features.remoteControl" @@ -40,17 +40,17 @@ "en-US": { "languageToggle": "Language: EN", "status": "Service Running", - "desc": "Relay service between desktop and mobile, enabling pairing and message forwarding.", - "f1t": "Connect", - "f1d": "Handle pairing requests, create remote sessions.", - "f2t": "Relay", - "f2d": "Bridge WebSocket and HTTP bidirectionally.", - "f3t": "Self-Host", - "f3d": "Private deploy, custom domains and reverse proxy.", - "flowDesktop": "Desktop", + "desc": "Connect devices on the same OpenBitFun account. The official Relay needs no server deployment.", + "f1t": "Account access", + "f1d": "Sign in with the same account. An invitation alone does not grant access.", + "f2t": "Encrypted forwarding", + "f2d": "Device-control payloads are encrypted end to end; routing metadata remains visible.", + "f3t": "Deployment", + "f3d": "Use the official service, or build matching clients for a private Relay.", + "flowDesktop": "Desktop / CLI", "flowDesktopSub": "OpenBitFun Agent", "flowRelay": "Relay Server", - "flowRelaySub": "Pair and Forward", + "flowRelaySub": "Device messages", "flowMobile": "Mobile", "flowMobileSub": { "$shared": "features.remoteControl" diff --git a/src/apps/relay-server/static/homepage/index.html b/src/apps/relay-server/static/homepage/index.html index d4206058fd..966586f64a 100644 --- a/src/apps/relay-server/static/homepage/index.html +++ b/src/apps/relay-server/static/homepage/index.html @@ -168,7 +168,7 @@

OpenBitFun Relay Server

-

Relay service between desktop and mobile, enabling pairing and message forwarding.

+

Connect devices on the same OpenBitFun account. The official Relay needs no server deployment.

WebSocket
@@ -195,7 +195,7 @@

OpenBitFun Relay Server

Relay Server - Pair and Forward + Device messages
HTTP
@@ -211,32 +211,32 @@

OpenBitFun Relay Server

-

Connect

+

Account access

-

Handle pairing requests, create remote sessions.

+

Sign in with the same account. An invitation alone does not grant access.

-

Relay

+

Encrypted forwarding

-

Bridge WebSocket and HTTP bidirectionally.

+

Device-control payloads are encrypted end to end; routing metadata remains visible.

-

Self-Host

+

Deployment

-

Private deploy, custom domains and reverse proxy.

+

Use the official service, or build matching clients for a private Relay.

-
OpenBitFun Relay Server · Self-Hosted Gateway for Remote Connect
+
OpenBitFun Relay Server · Remote Connect