尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

RuView Cognitum Spaces OAuth 激活指南:基于 `spaces:read` 的只读语义空间投影与 MCP 授权实践

RuView Cognitum Spaces OAuth 激活指南:基于 `spaces:read` 的只读语义空间投影与 MCP 授权实践 RuView Cognitum Spaces OAuth 激活指南基于spaces:read的只读语义空间投影与 MCP 授权实践【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView导读本文是 RuView 仓库中 Cognitum Spaces OAuth activation 操作手册 的完整技术指南讲解如何在不向 Agent 交付 bearer token 或 API key 的前提下激活并安全检查租户隔离的 Cognitum Spaces 语义投影。读完本文你将掌握三条核心技能通过wifi-densepose login --spaces显式申请spaces:read作用域并验证身份通过npx ruvnet/ruview spaces元 harness 对 sites/buildings/floors/spaces/zones/entities/events/alerts 八类版本化集合做分页只读查询以及在 MCP 场景下使用ruview_spaces_list工具时的授权模型、失败关闭语义与结果诚实解读方法。背景为什么需要一条不给凭证的只读激活路径RuView 通过 Wi-Fi CSI 信号在本地实现无摄像头的空间感知姿态、存在、呼吸。当这些感知需要进入云端形成跨房间、跨站点的空间状态时Cognitum Spaces 提供了租户/工作区作用域的云侧投影——它不是第二个传感器而是对边缘状态的语义化同步详见 ADR-325 的决策链RuView RF capture → 语义观察 → HomeCore 权威边缘状态 → Cognitum Spaces 投影 → 受限读客户端。问题的关键在于当把这种能力交给 AI Agent如 Claude Code、Codex或 MCP 服务器使用时直接下发 token 或 API key 会带来严重的凭证泄露风险。本手册定义的安全模型是激活凭证与数据面凭证分离登录授权Authorization Code PKCE与后续只读查询解耦Agent 永不接触裸凭证元 harness 内部持有凭据对外只暴露结构化的、经过二次校验的结果读取权限最小化spaces:read只允许读取语义投影不授予任何配对、发布、写入、命令、策略审批、消费或执行器actuator权限。边界约束Boundary先理解能做什么不能做什么在动手之前必须先明确本投影的语义边界它决定了后续所有命令的使用方式约束维度具体内容投影性质只读的 P2/P3 语义投影HomeCore Edge 始终是权威状态源禁止字段原始 CSI、CIR、RF 张量、录音、姿态帧、生命体征波形、身份观测——一律禁止跨云权限含义spaces:read不授予配对、发布、写入、命令、策略审批、消费或执行器权限副作用一次读取可能刷新即将过期的 OAuth 会话并原子轮换本地凭证文件这是设计内的认证副作用不增加云写权限从源码看这条边界在 spaces.js 中被硬编码为REQUIRED_EXCLUSIONS与FORBIDDEN_FIELDS前者要求每个响应必须携带raw_csi、cir、rf_tensors、recordings、pose_frames、vital_waveforms、identity_observations七项排除声明后者则进一步拦截csi、packetcapture、skeleton、keypoints、faceembedding等别名与近似字段——这是纵深防御即使服务端投影漏了某个字段名客户端也会独立拒绝。激活 OAuthwifi-densepose login --spaces前置条件安装或构建wifi-denseposeCLI仓库内的 Rust 实现位于 v2/crates/wifi-densepose-cliharness 的 guidance 记录中引用其 spaces.rs。OAuth 流程使用 Cognitum 既有的 Authorization Code PKCE 流程公共客户端标识为ruview。显式请求附加作用域wifi-densepose login --spaces该命令会通过 PKCE 流程显式请求spaces:read作用域注册是上限普通感知登录不会静默获得云访问权必须显式加--spaces才会申请授权服务器校验是合取式的ADR-325 第 1 节ES256 签名https://auth.cognitum.one/.well-known/jwks.json、签发者精确为https://auth.cognitum.one、受众精确为ruview、客户端声明精确为ruview、令牌类型为普通accesssetup/workload 令牌拒绝、有效期在 5 秒时钟容差内、作用域精确包含spaces:read、且必须绑定非空 UUID 形式的org_id与workspace_id。无浏览器终端wifi-densepose login --spaces --no-browser用于没有浏览器的 SSH 或 CI 终端场景登录码/设备流由 CLI 自行处理。验证身份并开始查询wifi-densepose whoami npx ruvnet/ruview spaces npx ruvnet/ruview spaces --resource sites npx ruvnet/ruview spaces --resource events --limit 25whoami用于确认账号确实报告spaces:read作用域npx ruvnet/ruview spaces是元 harnessharness/ruview暴露的 CLI 动词其内部实现位于 spaces.js 的listCognitumSpaces通过runProcess以经过净化的子进程环境调用已安装的wifi-densepose二进制spaces --json --base-url https://api.cognitum.one --resource kind --limit n。版本化集合与分页八类版本化集合为sites、buildings、floors、spaces、zones、entities、events、alerts。它们的层级关系遵循 ADR-306 的规范空间词汇表Site - Building - Floor - Space - Zone - Sensor / Person / Object / Track - Observation - Event - Alert分页要点使用响应返回的不透明nextCursor继续下一页不要解码 cursor也不要在不同集合间复用 cursor——cursor 是 API 实现细节跨集合使用违反契约元 harness 侧对 cursor 的校验spaces.js必须是非空字符串、长度 ≤ 512、且不含控制字符--limit的合法范围是1–100默认 50spaces.js 中强制校验非安全整数、越界均返回invalid_limit。凭证路径的谨慎使用wifi-densepose login --spaces --credentials-path /private/ruview/credentials.json--credentials-path private-file只能用于人工调用 CLI 且确实需要非默认凭证存储的场景绝不允许把 bearer token 或 API key 放在命令行上会被 shell 历史、进程列表泄露。在元 harness 中--credentials-path会原样传给wifi-denseposespaces.js但 MCP 调用路径会拒绝该参数见下文。MCP 集成ruview_spaces_list的授权模型默认拒绝MCP 工具名是ruview_spaces_list。尽管云操作本身只读但由于它会消费本地身份凭证并联系外部服务默认情况下该工具被拒绝。对应策略声明位于 policy.jsruview_spaces_list: { class: external-read, readOnly: true, requiredGrant: credential-use, openWorld: true, usesCredentials: true, mayRefreshCredentials: true },这意味着在 mcp-server.js 中MCP 服务器启动时从RUVIEW_MCP_GRANTS环境变量读取逗号分隔的授权列表若该列表不含credential-use任何ruview_spaces_list调用都会在触碰本地凭证或网络之前被authorizeTool拒绝返回authority_denied/requiredGrant: credential-use对应测试见 spaces.test.mjs。运维人员显式授权并绑定凭证路径RUVIEW_MCP_GRANTScredential-use \ RUVIEW_CREDENTIALS_PATH/private/ruview/credentials.json \ npx ruvnet/ruview mcp startRUVIEW_MCP_GRANTScredential-use运维人员显式授予该工具使用凭证的能力RUVIEW_CREDENTIALS_PATH在服务器环境中绑定非默认凭证文件路径这样工具调用参数里就不需要也不允许出现任意文件路径SPACES_ENV_ALLOWLISTspaces.js在默认环境白名单之上仅追加RUVIEW_CREDENTIALS_PATH其余环境变量全部被scrubEnvironment剥离。MCP 调用的硬性限制源码级证据不能选凭证路径listCognitumSpaces在source mcp且传入credentials_path时直接返回credentials_path_not_allowedspaces.js测试 spaces.test.mjs 验证了即使有credential-use授权MCP 也不能选择任意凭证文件工具 schema 没有 token、API-key、工作区覆盖或 base-URL 字段ruview_spaces_list的 inputSchematools.js只暴露credentials_pathCLI 专用、resource、limit、cursor四项API 源固定为https://api.cognitum.onespaces.js不可被调用方覆盖适配器要求已安装的wifi-densepose二进制而不是在持证状态下执行自动检测仓库里的 Cargo 构建脚本cli_missing错误测试见 spaces.test.mjs子进程环境排除COGNITUM_SPACES_API该兼容性环境变量只存放 API key被刻意从允许列表中剔除因此这条 MCP 面只会验证 OAuth 路径绝不会静默走兼容 API-key 路径spaces.js 与测试 spaces.test.mjs 均验证了该变量不会被转发。诚实解读结果空列表也是合法结果{ object: list, data: [], boundary: { authoritativeState: HomeCore Edge, ... } }空的data列表可以是合法的已认证租户结果例如 ADR-325 的线上审计中账号没有配对站点因此认证结果是空列表而非捏造的示例状态空结果证明的是读取路径与隔离行为而不是感知质量——不要把它解读成这个空间没人在的证据也不要用它证明模型或感知的准确性每条被接受的响应必须声明HomeCore Edge为权威状态并携带完整的禁止字段列表spaces.js 的parseSpacesOutput会校验boundary.authoritativeState HomeCore Edge且excluded完整包含七项排除声明缺失即抛incomplete edge privacy boundary。元 harness 的独立语义校验fail-closed 的落实parseSpacesOutputspaces.js在返回给 CLI/MCP 调用者之前会对已经验证过的语义投影再做一次独立校验包括校验项规则违反时错误输出体积≤ 2 MiBCLI response exceeds boundJSON 结构深度 ≤ 16、节点 ≤ 10,000、数组项 ≤ 1000、对象键 ≤ 128、字符串 ≤ 4096 字节JSON structure exceeds node bound等禁止字段任意层级出现raw_csi/packet_capture/poseframe等即拒绝forbidden raw field列表信封object list且data为数组且 ≤ 100 条invalid list envelope版本契约schemaVersion 1.0且kind属于八类集合invalid spatial contract version or kind隐私类每条记录privacy必须为P2或P3non-semantic privacy class置信度若存在则必须为 [0,1] 的有限数值invalid confidence空间身份id匹配^[A-Za-z0-9][A-Za-z0-9_.:-]{0,119}$、tenantId非空版本化记录还要求 UUIDworkspaceId、非负eventSequence、version ≥ 1、可解析的observedAt、attributes/provenance为对象spatial identity is incomplete/versioned spatial identity is incomplete父级血缘floors需buildingIdspaces需buildingIdfloorIdzones/entities/events/alerts需spaceIdspatial parent is incomplete实体隐私entities的entityType限sensor/person/object/track且person/track的identityMode必须为anonymousentity privacy contract is invalid事件/告警events需eventTypealerts需alertType且severity ∈ info/warning/critical、status ∈ open/acknowledged/resolvedevent type is missing/alert contract is invalidCursor非空、≤ 512 字符、无控制字符invalid next cursor任何畸形、超大、非语义或含原始字段的响应都会失败关闭fail closed——返回invalid_spaces_output绝不把未经验证的数据当作成功结果。测试覆盖见 spaces.test.mjs拒绝禁止字段、拒绝不完整边界与非法置信度与 spaces.test.mjs拒绝原始字段别名、非匿名实体身份、非法 workspaceId 与非法时间戳。错误分类与脱敏子进程失败时commandFailurespaces.js会把错误归入spaces_scope_missing、not_logged_in、oauth_refresh_failed、authentication_failed、spaces_command_failed五类原因同时所有输出经redact脱敏——测试 spaces.test.mjs 验证了 JWT 形态令牌与cog_API key 在错误详情中会被替换为REDACTED。端到端实践清单以下是将整套流程投入实际使用的最小操作序列安装/构建 CLI安装wifi-densepose二进制或进入 v2/crates/wifi-densepose-cli 构建并确认其位于PATH激活作用域wifi-densepose login --spaces无浏览器环境加--no-browser按需用--credentials-path指定非默认凭证存储仅限人工 CLI验证身份wifi-densepose whoami确认账号报告spaces:readCLI 查询npx ruvnet/ruview spaces --resource sites、npx ruvnet/ruview spaces --resource events --limit 25用返回的nextCursor翻页MCP 部署以RUVIEW_MCP_GRANTScredential-use与RUVIEW_CREDENTIALS_PATH路径启动npx ruvnet/ruview mcp start之后才允许ruview_spaces_list调用验证通道运行cd harness/ruview node --test test/spaces.test.mjs test/policy.test.mjsguidance 记录cognitum-spaces-oauth中给出的验证命令guidance.js或在仓库内执行wifi-densepose login --spaces node harness/ruview/bin/cli.js spaces --resource events。安全与治理要点小结凭证最小化bearer token 与 API key 永不进入命令行、工具参数或 MCP 消息COGNITUM_SPACES_API兼容密钥被刻意排除在子进程环境外默认拒绝ruview_spaces_list在 MCP 下默认不可用必须由运维人员显式授予credential-use只读且单向spaces:read授予的只是读取语义投影的能力行动授权属于 ADR-321 策略门 的范畴且需携带新鲜能力证书、边界内不确定性、租户/工作区授权、幂等键与见证回执ADR-325 第 8 节防反馈洗白来自 Spaces 的记录若源自 RuView 证据则携带派生血缘返回时只能作为投影/回忆不能提升证据等级、不能作为独立模态融合、不能重置新鲜度ADR-325 第 6 节——空列表证明读取路径而非感知质量这一诚实原则贯穿整个 harness 的ruview_claim_check守卫。【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表