仕組み
データモデル、レビューのループ、公開範囲と権限、表示の隔離。
データモデル
workspace(チーム)
└─ project(成果物の置き場所)
└─ artifact(成果物)
└─ version(投稿ごとに増える。書き換え不可)- workspace — メンバーと課金の単位。メンバーは owner / admin / member / viewer のいずれかのロールを持ちます。
- project — 成果物をまとめる単位。folder で階層化もできます。公開範囲のデフォルトは project 単位で設定します。
- artifact — 1つの成果物(HTML)。タイトル・slug・公開範囲を持ちます。
- version — 投稿のたびに追加される版。一度投稿した version の内容は変更できません。修正は常に新しい version の投稿として行います。
レビューのループ
TrayPage の中心は「AI が作る → チームがコメントする → AI が直す」のループです。
- AI ツールが
publish_html_artifactで成果物を投稿する - チームがレビューページでテキストを選択してコメントする
- AI ツールが
get_revision_promptで未解決コメントを修正指示(revision prompt)として取得する - AI が修正した HTML を
publish_new_artifact_versionで新しい version として投稿する - コメントを resolve し、必要なら version を承認・公開する
各 artifact には「最新版(latest)」と「公開済み版(published)」の2つの参照があります。レビュー中は latest が進み、承認した version を published として固定することで、共有相手には承認済みの内容だけが見えます。
公開範囲(visibility)
artifact ごとに、誰が閲覧できるかをプリセットで設定します。
| プリセット | 閲覧できる人 |
|---|---|
private | 明示的に許可された人だけ |
project_members | project のメンバー(デフォルト) |
workspace_members | workspace の全メンバー |
workspace_domain_users | 指定ドメインのメールアドレスでログインしたユーザー |
link_login_required | リンクを知っていて、かつログインしている人 |
共有リンクを発行すると、リンク経由のアクセスに対して閲覧やコメントの権限を個別に付与できます。
権限
操作権限は viewer(閲覧)/ commenter(閲覧+コメント)/ editor(+新しい version の投稿)/ admin(+承認・アクセス管理)の4段階です。workspace の owner / admin は配下のすべての artifact に対して admin 相当になります。Web・API トークン・MCP・共有リンクのどこから操作しても、同じ権限リゾルバで判定されます。
表示の隔離
投稿された HTML はスクリプトを含むため、アプリ本体とは隔離して表示されます。
- HTML は専用の viewer URL から、CSP の
sandbox allow-scripts付きで配信されます - レビューページは viewer を
sandbox属性付きの iframe として埋め込みます - 本番では viewer は別オリジンから配信され、アプリの Cookie にはアクセスできません
成果物内のスクリプトがアプリのセッションやデータに触れることはありません。