开发与工程 websocketsseend-to-end-encryptionrelaytunnelruntime-transportreconnect-backoffopencode

OpenChamber 中继传输技能

为 OpenChamber 的端到端加密中继隧道正确编写 WebSocket、SSE 与流式端点,避免只在桌面直连下能通过的隐性中继缺陷。

FollowSkills 评估 · FSRS-2.0
推荐
58/ 100 五分制 2.9 / 5
1 2 3 4 5 6
1信任安全19 / 25 · 3.8/5

该技能安全意识突出:明确要求走共享运行时传输而非自建连接、禁止宿主分发器注入凭据、禁止将回环地址当作认证依据、要求真实源/令牌门控的测试而非宽松桩。前端指令对用户无直接外部副作用,许可证为 MIT,仓库内含 SECURITY.md 与负责任披露渠道。扣分项:未验证的发布者、令牌铸造与转发流程未在本文件内完整展开,E2EE 实现细节需依赖外部文件确认。

2可靠稳定8 / 20 · 2.0/5

技能内部一致且经验证命令具体:bun test 逐文件运行、type-check、lint、node --check,并给出明确失败模式(如 WKWebView 中 origin 为 'null' 导致 403、原始 WebSocket 报 'The string did not match the expected pattern')。扣分项:静态审查未执行;承认测试套件存在顺序敏感问题;所引用的 cross-compat.test.js 等测试覆盖是否完整未在本文件中可见。

3适用触发11 / 15 · 3.7/5

frontmatter 描述精确界定触发场景(新增/修改 WebSocket、SSE、流式、relay 模块等),并明确与 ui-api-decoupling 技能的边界分工,避免误触发;分支结构(WS 端点、线格式、运行时传输、重连)覆盖输入与预期输出。扣分项:适用范围局限于本项目代码库,对环境(中国大陆可达性、中文支持)无相关说明;核心功能为项目内部开发,不涉及外部服务依赖,无需扣网络分。

4规范维护10 / 15 · 3.3/5

信息架构良好:概览、心智模型、按变更类型分支、验证与完成标准,渐进披露合理,指向上层文档 DOCUMENTATION.md;许可证 MIT 明确,frontmatter 含 compatibility 字段。扣分项:技能本身无版本号或变更日志;对引用的 18 个技能生态中的依赖关系(ui-api-decoupling)可用性无保证;未披露技能自身的已知限制清单。

5有效结果6 / 15 · 2.0/5

针对高频且隐蔽的 relay 类 bug(移动端首个 WS、双白名单、令牌铸造、origin 陷阱)提供可执行检查清单,边际价值显著,比人工踩坑成本低得多。扣分项:静态审查无法验证执行后结果;完成标准依赖大量上下文文件与测试基础设施,实际可复用性对非本仓库维护者有限。

6证据核验4 / 10 · 2.0/5

关键主张可追溯到具体文件路径(tunnel-host.js、ui-auth.js、runtime-socket.ts、cross-compat.test.js),仓库含 CI 工作流与测试脚本。扣分项:未展示这些测试对 relay 关键路径的实际覆盖内容,无第三方独立验证,历史 bug 叙述(origin 检查 bug)仅有作者自述,事实与推断的区分度一般。

证据充分度: 评估于 2026年9月9日 审查版本 f8b929edf989
上游仓库在本次评估后已有新提交;当前评分仍对应所示审查版本,可能尚未覆盖最新改动。
使用前请注意
  • 本评估为静态源码审查,未执行任何测试或验证命令,置信度为低。
  • 该技能仅适用于 openchamber/openchamber 仓库内部的 relay 传输开发,对其他项目无直接复用价值。
  • 技能引用了多个未在本次评估范围内审查的文件(如 tunnel-host.js、cross-compat.test.js、ui-api-decoupling 技能),其实际状态未经核实。
  • 测试套件自述存在顺序敏感性,执行时需按文件单独运行。
  • 发布者未经 FollowSkills 注册表验证,身份信息按未知处理,不构成扣分但也不提供背书。
查看完整评分方法 →

这个 Skill 能做什么,适合哪些场景?

relay-transport 是 OpenChamber 仓库(openchamber/openchamber,MIT 许可)内置的 18 个技能之一,位于 .agents/skills/relay-transport/SKILL.md。它规范了 OpenChamber 私有中继的开发规则:客户端通过 OpenChamber 托管的中继、经由端到端加密隧道访问用户实例,所有 HTTP、SSE 事件流和 WebSocket 流量在同一连接上多路复用。技能的核心价值来自踩坑经验——中继缺陷不会在普通桌面测试中暴露,尤其 WebSocket 无法携带认证头,必须使用短时效的 URL 作用域令牌。它明确划分了职责:本技能负责中继机制,共享 UI/运行时边界归 ui-api-decoupling 技能所有。

技能提供四条规则分支:(1)WebSocket 端点分支——必须通过 openRuntimeWebSocket 而非原生 new WebSocket 连接;在 ALLOWED_WS_PATHS 和 isUrlAuthWebSocketPath 两个白名单中都注册路径;连接前用 refreshRuntimeUrlAuthToken() 铸造 oc_url_token;不得改动来源(Origin)处理;必须在真实中继上测试。(2)线上格式与编解码分支——TS 实现(normative)与 JS 主机镜像必须字节兼容,帧类型需在 protocol.ts、tunnel-codec.ts、tunnel-codec.js 三处一致,帧批量需保留能力协商与单帧回退,加密计数器按方向严格递增。(3)运行时传输分支——重构 runtime-switch/fetch/url/socket/auth 时保留中继与直连两条分支,主机调度器不得注入凭据。(4)重连分支——SSE/WS 无限重连须用指数退避、离线/隐藏时长退避上限、永久 4xx 长退避、可被 online/可见性/中止信号打断,仅在真正健康后重置。验证环节要求镜像真实认证与来源门控、按文件跑 bun test、对两侧做类型检查与 node --check。

  1. 为 OpenChamber 新增 WebSocket 端点(如终端或听写类功能)的开发者,需要它通过中继隧道在移动端正常工作
  2. 修改 E2EE 或帧格式编解码的维护者,需要 TS 与 JS 两侧镜像更新并保持 cross-compat 测试通过
  3. 重构 runtime-fetch / runtime-socket 等运行时传输模块的工程师,需保证非中继运行时行为不变
  4. 实现 SSE 或 WebSocket 自动重连的开发者,需要避免离线或后台页面的盲目重试耗电并刷爆服务端日志
  5. 为中继链路写集成测试的人,需要复刻真实的 oc_url_token 认证与 Origin 校验门控,而非使用宽松的 stub 服务器

这个 Skill 有哪些优点和局限?

优点
  • 规则源自真实反复出现的中继故障(如 iOS WKWebView 中 Origin 为 null 导致 403),极具针对性
  • 覆盖完整交付路径:白名单、URL 令牌、来源处理、双侧编解码兼容、测试与验证清单
  • 明确划分与 ui-api-decoupling 的职责边界,避免技能间规则冲突
  • 包含帧批量能力协商、重连退避等易被忽略的细节要求
局限
  • 仅适用于 OpenChamber 代码库,对其他项目没有直接复用价值
  • SKILL.md 标注 compatibility: opencode,按 Agent Skills 通用标准外使用可能需要适配
  • 中继测试套件存在顺序敏感性,须按文件逐个运行 bun test
  • 部分流程(如具体的令牌时效、部署配置)需查阅 packages/web/server/lib/relay/DOCUMENTATION.md,技能本身未完全覆盖

如何安装这个 Skill?

该技能随 OpenChamber 仓库发布。获取整个仓库:git clone https://github.com/openchamber/openchamber,技能位于 .agents/skills/relay-transport/。若 OpenChamber 自身使用 OpenCode Agent Skills 机制,该目录中的技能按其技能目录/本地技能管理功能加载;README 未给出单独安装此技能的步骤。

如何使用这个 Skill?

当任务涉及修改 OpenChamber 的 WebSocket、SSE、流式端点、共享 UI socket、运行时传输内部、私有中继行为或 ui/server relay 模块下的文件时,让智能体加载并遵循该 SKILL.md。例如提示:'为 OpenChamber 新增一个 /api/terminal-ws WebSocket 端点,按 relay-transport 技能执行'。若改动还涉及共享运行时 API 或 URL/认证契约,需同时加载 ui-api-decoupling 技能。

这个 Skill 与同类方案有什么区别?

SKILL.md 指出本技能与同仓库的 ui-api-decoupling 技能互补:relay-transport 负责中继传输机制,ui-api-decoupling 负责共享 UI/运行时边界(API、URL/认证契约、桥接与代理)。未提及外部竞品。

常见问题

这个技能是给谁用的?
仅面向参与 OpenChamber 开发、需要改动其中继、传输或实时端点代码的贡献者与维护者;它不是通用 WebSocket 教程。
为什么新增 WebSocket 功能桌面正常但移动端失败?
这是技能存在的原因:事件流锁定为 SSE,新 WebSocket 往往是第一个真正穿越隧道的 WS。它不能发送认证头,必须先用 refreshRuntimeUrlAuthToken() 铸造 oc_url_token 并通过 openRuntimeWebSocket 连接,否则在中继模式下会 401 或报 URL 格式错误。
成本或权限方面有什么要求?
技能为 MIT 许可,本身免费。开发验证需要 bun 运行中继测试、node --check 校验 JS 文件,以及 TS 类型检查与 lint;测试应针对真实认证与来源门控而非宽松 stub。
如果只改 HTTP/SSE 端点,需要遵守哪些规则?
HTTP 与 SSE 用 bearer token 认证头,对白名单 /api/*、/auth/*、/health 路径可透明穿透隧道,无需铸造 URL 令牌;但涉及线上格式或重连逻辑的规则仍然适用。

同仓库的其他 Skills

均来自 openchamber/openchamber

开发与工程

Locale UI Patterns —— OpenChamber 界面文案国际化规范

为 OpenChamber 项目编写或修改任何用户可见文案时,确保每个语言的字典都拿到真正的翻译,而不是英文占位符。

开发与工程

Clack CLI 模式规范

为 OpenChamber 终端命令定义统一的交互提示、--quiet 与 -- 输出契约,确保任何运行模式下策略校验先行、行为确定一致。

开发与工程

OpenChamber 桌面外壳技能

在修改 OpenChamber 的 Electron 主进程、preload、IPC 或打包逻辑时,为 AI 代理提供正确的架构边界与安全规则。

开发与工程

OpenChamber UI/API 分层规范

为 OpenChamber 共享界面代码划定数据访问边界:官方走 SDK、自有能力走 RuntimeAPIs,避免硬编码 URL、令牌与传输假设。

开发与工程

OpenChamber 性能工程技能

在优化单条操作之前先消除结构性浪费:为交互、渲染、轮询、缓存与大规模数据路径提供以测量为准的性能优化方法论。

设计与前端

OpenChamber 拖拽排序技能(drag-to-reorder)

一份沉淀自真实项目的 @dnd-kit 拖拽排序实践指南,专门解决变宽条目、换行布局和移动端触摸交互中最容易踩的坑。

设计与前端

OpenChamber 主题系统技能

在修改 OpenChamber UI 时,强制使用语义化主题令牌、共享按钮/图标契约与键盘导航规范,避免硬编码颜色和重复实现。

设计与前端

OpenChamber 设置界面模式指南

在修改 OpenChamber 设置页面、对话框和搜索行为时,强制代理使用共享原语与本地化、搜索注册约定,避免各页面各自造轮子。

开发与工程

OpenChamber 变更纪律

在修改 OpenChamber 代码库时,强制执行“最小完整变更 + 最窄级别验证”的工程纪律,防止局部修复演变成投机性重写。

开发与工程

serve-sim — 终端里的 iOS 模拟器遥控器

无需打开 Xcode,就能在终端中启动、安装、串流并操控 Apple 模拟器里的 Capacitor iOS 应用。

开发与工程

OpenChamber 同步状态不变量守则

在改动会话同步、事件归约器、轮询与缓存逻辑时,一套强制执行的状态所有权与失败语义规范,防止数据误删与状态错乱。

相关 Skills