Space App 是安装在 Shadow Space 里的 Web 应用。成员可以从 Space 桌面把它当成窗口打开;Buddy 和 CLI 则通过 Shadow gateway 调用它声明的命令。它的目标不是让你为 AI 重写一套工具协议,而是把已有 Web 应用安全地接入 Space、频道、工作区和 Buddy 协作。
| 你要做的事 | 推荐方式 |
|---|---|
| 给 Space 加一个看板、问答、训练器、小游戏或内容工具 | Space App |
| 只想代表用户调用 Shadow API | OAuth 平台应用 |
| 想打包 Space、频道、Buddy、脚本和运行时 | Cloud 模板 |
| 想给 Buddy 增加少量本地能力 | Skill 或 CLI 工具 |
| 表面 | 给谁用 | 规则 |
|---|---|---|
/.well-known/space-app.json | Shadow 安装和刷新 manifest | 描述 appKey、图标、iframe、命令、权限、Skills、事件。 |
| iframe / Web UI | 人类成员 | 从 Space 桌面或应用窗口打开。UI 调 Space App 自己的 /api/*。 |
/.shadow/* | Shadow 平台 gateway | 只接收 Shadow 签名/短期 token 的命令、备份和恢复请求。浏览器、Buddy、CLI 不直接调用。 |
/api/* 永远属于 Space App 自己。Shadow 平台协议只放在 /.shadow/* 下。这个边界能避免 Space App 业务 API 和平台 gateway 混在一起,也能让你保留自己的 session、RBAC 和数据模型。
运行时至少提供:
如果 Space App 需要绑定 Shadow 用户账号,再提供 OAuth start/callback;如果 Space App 需要被 Cloud 备份和恢复,再提供 /.shadow/backup/* 和 /.shadow/restore/*。
每条命令都要声明:
permission:命令需要的 Space App 权限。action:read、write、manage、delete、generate 之一。dataClass:数据级别,例如 server-private 或 channel-private。approvalMode:是否需要人工审批,写操作通常用 first_time。inputSchema:Shadow gateway 会先校验输入,合规后才转发到 Space App。approvalMode、Buddy grant 和任务上下文处理审批。inputSchema 校验 JSON 或 multipart 输入。/.shadow/commands/*。Space App 收到的请求类似:
SDK 通过 POST /api/space-apps/commands/introspect 校验 token。身份、Space、Space App、命令、权限和任务上下文只来自校验后的响应;协议不再使用路由业务头,也不信任请求体里的身份字段。
TypeScript Space App 推荐使用 @shadowob/sdk:
SDK 负责 manifest 重写、类型生成、command dispatch、token introspection、JSON Schema 校验、actor 归一化和错误格式。除非语言栈不支持,避免手写这些协议细节。
Space App 的 UI 会在 Shadow 里作为 iframe/WebView 打开。Space 桌面会把它显示成窗口,也可以把 Space App 固定成桌面图标。
iframe 启动时会带上 launch token 和事件流地址。Space App 可以用 launch helper 获取 Space 上下文、当前安装、可用 Inbox、事件订阅等信息。保持 iframe URL 稳定;数据刷新优先用事件流、本地状态 patch 或 Space App 自己的 API,而不是频繁重载 iframe。
很多 Space App 不需要 Shadow OAuth,只靠安装上下文和 Space App 自己的 session 就能运行。需要保存用户偏好、读取 Shadow 用户资料、检查商业权益时,再使用 OAuth。
规则:
/.shadow/backup/*、/.shadow/restore/* 接入备份恢复。本地开发:
安装到 Space:
调用命令:
发布到 Cloud 时,保持三个稳定 HTTPS 入口:
/.well-known/space-app.json 的路由优先级必须高于 SPA fallback。
/api/*。/.shadow/*。/.shadow/*。permission、action、dataClass、approvalMode 和 inputSchema。