用途:在 ibl.ai 平台上按用户存储自定义数据,例如偏好设置、功能开关、引导进度和任意应用状态。每个用户在每个组织下对应一个无模式 JSON 对象,无需数据库或 localStorage,数据随用户跨设备、跨应用构建同步。
主要能力:提供 useUserSettings<T>() 钩子,对 SDK 的 useGetUserPlatformMetadataQuery / useUpdateUserPlatformMetadataMutation 做带类型、带命名空间的读取、合并与删除;PATCH 合并时未触碰的键会保留。附带 AppPreferences 卡片组件(含两个示例控件,用于 /profile 页面)、app/api/admin/user-metadata/route.ts 管理端路由(以组织权限读取或修改其他用户的元数据,钩子无法做到)、以及命名空间规则的单元测试。
使用方式:需先完成认证并配置 .env.local 中的 NEXT_PUBLIC_MAIN_TENANT_KEY,管理路由还需服务端 IBLAI_API_KEY。安装时渲染 assets 下的 .j2 资源到对应路径(如 lib/iblai/metadata-core.ts、lib/iblai/metadata.ts、components/settings/app-preferences.tsx、app/api/admin/user-metadata/route.ts、tests/metadata.test.ts),并先安装 /iblai-vibe-api 提供的 lib/iblai/platform.ts 辅助文件;需要 shadcn 的 card 和 switch 组件,可运行 pnpm dlx shadcn@latest add card switch。使用示例:在客户端组件中调用 useUserSettings<MySettings>({ favoriteTopic: "", onboardingDone: false }),通过 update 合并、remove 删除,读取出错时回退到默认值。管理端通过 adminFetch 调用 /api/admin/user-metadata 进行 PATCH 或读取。
适用场景:主题、语言、布局选择;引导步骤、已看提示、已关闭横幅;按用户功能开关与测试权限;轻量应用状态(最近打开项、收藏)。不适用于:姓名、简介、头像等身份字段(用 /iblai-vibe-profile);智能体对用户的记忆(用 /iblai-vibe-memory-guide);组织级配置(用 /iblai-vibe-org-metadata);密钥、令牌、支付数据(绝不使用)。
限制:平台不强制任何模式;SDK 钩子仅支持 PATCH,PUT 替换、DELETE 重置和 delete_keys 需直接调用 REST;跨用户读写仅限组织管理员,否则返回 403,未知用户返回 404,写入他人记录前需先征得用户同意。命名空间写入 metadata.apps.<slug>,slug 取自 NEXT_PUBLIC_APP_NAME,否则为 vibe-starter。验证可运行 pnpm typecheck && pnpm test,并在 /profile 切换开关后刷新、换浏览器确认持久化。