在浏览器与边缘环境安全运行
将服务商无关代码编译到 WASM,同时把长期凭证保留在应用网关之后。
支持范围
Runifold 的服务商无关模型协议与部分 Runtime 组件可以面向 WASM。实际支持仍取决于 启用的 Feature,以及宿主提供的 Executor、时钟、随机数、持久化和网络能力。
从最小 Feature 集合开始。原生数据库 Driver、基于进程的 MCP 传输与部分 Observability Exporter 不适合浏览器 Bundle。
编译最小 Kernel
先安装 Target 并编译 Provider-neutral Core,再添加 Browser 或 Edge Adapter:
rustup target add wasm32-unknown-unknown
cargo check --target wasm32-unknown-unknown \
--no-default-features应用 Crate 只添加明确支持目标 Runtime 的 runifold-providers Adapter。运行
cargo tree -e features,排除意外引入的进程启动、Native TLS 或数据库 Driver。
编译只是第一道门禁,不等于平台兼容性已经得到证明。
凭证边界
永远不要把长期服务商 API Key 打包进浏览器。通过应用 Gateway 访问服务商,由它验证 用户、执行租户策略、附加预算,并限制模型与能力。
短期且限权的 Token 可以减少暴露,但不能替代服务端授权与用量控制。
浏览器传输
浏览器请求受 CORS、代理缓冲、连接生命周期与 Tab 暂停影响。使用 Streaming Fetch 或 SSE 前,应验证目标 Runtime 能保持事件边界并传播取消。
断开连接后的行为必须明确:取消运行、持久化后恢复,或让有界后台任务完成。
验证行为
“可以编译为 WASM”不等于“可以在这个 Edge 平台运行”。针对准确 Target 与部署 Runtime 测试定时器、流式、Abort 传播、Payload 限制与冷启动。
可靠性声明应同时记录平台、Runtime 版本、启用 Feature 和测试日期。
推荐的 Browser 架构
Browser/WASM → 你的认证 Gateway → Runifold Service → Model Provider
↘ 短期应用 Session ↘ Budget、Policy、AuditBrowser 只发送用户输入并接收应用事件。Gateway 持有 Provider 凭证,把用户身份转换成 Capability,创建根 Budget / Deadline,并决定断连时取消还是 Detach。不要把长期 Provider Key、数据库凭证、MCP Stdio Process 或无限制 Model Choice 打进 WASM。
平台验证清单
必须在准确部署 Runtime 上测试,而不只是本地浏览器:
- Release 优化后的 Cold Start 与模块大小;
- DNS / TLS / Fetch 行为与所需 CORS Header;
- 所有 Proxy 后的 Stream Event 边界;
AbortSignal到 Run Cancellation 的传播;- Timer 精度与最大 Request Lifetime;
- Random Source 与 UUID 行为;
- Payload、Memory、CPU 与 Subrequest 限制;
- Tab Suspend、Reconnect、重复提交与 Offline Transition。
如果 Stream 只能在完成后一次性显示,先检查 Proxy Buffering 与 Content Encoding。 如果本地取消有效、远端无效,确认 Gateway 是否真正关闭或 Abort Upstream Request, 并确认后台策略没有故意把 Run Detach。