用途:该技能说明录制分享如何复用框架共享系统,而非自建分享表。录制通过 server/db/index.ts 中的 registerShareableResource({ type: "recording", ... }) 注册,share-resource、unshare-resource、list-resource-shares、set-resource-visibility 等动作自动挂载,处理按用户/按组织的授权以及 private / org / public 三种可见性。普通录制与上传视频默认 public,嵌入的 bug 报告录制默认组织可见。
主要能力:在框架之上增加 recordings.password(bcrypt 哈希,非所有者需输入)与 recordings.expires_at(过期后非所有者访问被拒),两者只收紧权限、不额外放开。分享 UI 通过 app/components/player/share-dialog.tsx 包装框架 ShareDialog,用 linkTabExtras 放密码与过期控件,用 embedTabContent 替换嵌入选项卡。
嵌入与 Slack:嵌入位于 /embed/:shareId,支持 ?t=80、?autoplay=1、?hideControls=1、?loop=1,建议用 build-embed-url 生成。Slack 展开通过 link_shared 事件调用 /api/slack/unfurl,仅 public 且就绪的录制可生成视频块,密码、过期、归档、私密等不生成可播放块。
智能体可读接口:/api/agent-context.json、/api/agent-transcript.json、/api/agent-frame.jpg,遵循 /api/public-recording 的访问模型,并可用 create-recording-agent-link 生成两小时 agent_access URL;transcript.status 为 pending 时可等待 15-30 秒重试。
观看计数:由 shouldCountView(totalWatchMs, completedPct, scrubbedToEnd) 判定;recording_views 为只追加的逐观看者记录,仅所有者通过 list-clip-views 读取,公开分享页绝不暴露。匿名观看者无需登录,用 cookie id 记录。
限制:必须经 share-resource 操作,不得直写 recording_shares;不得存明文密码;不得绕过 /api/video/:id 的访问检查;其他要求与依赖的 Slack 配置、密钥等细节以原文为准。