AI がオンラインホワイトボードに画像を追加可能に
ローカル CLI/stdio MCP から現在のルームへ実画像をアップロード・取得・追記できます。本番入口の修正により正確な raster 要求だけが完全な Agent 認可へ進み、他の送信元・パス・MIME は拒否されます。リモート MCP は未展開です。
# AI がオンラインホワイトボードに画像を追加可能に
AI 機能レイヤー第5段階として、オンラインホワイトボードの実画像フローを完成させました。ローカル CLI と stdio MCP から現在のルームの画像をアップロード・取得し、高レベルの `image` 要素として検証済み素材を追記できます。
## 画像操作
- 最大 5 MiB の PNG、JPEG、WebP のみを受け付け、コンテナ境界、主要チャンク/セグメント、宣言寸法、総画素数を厳格に検証します。これは全画素の完全デコードを保証するものではありません。
- アップロードは operation ID と画像 SHA-256 で冪等化します。同じバイト列は安全に再試行でき、異なる内容で同じ ID を使うと競合になります。
- ダウンロードは既存ファイルを既定で上書きしません。stdio MCP は allow-root、実パス、通常ファイルも確認し、ツール出力にはローカルパスや内部ルーム識別子を含めません。
## 権限とルーム分離
`whiteboard:assets` は既定では付与されない独立権限です。アップロードには `whiteboard:write` との両方が必要で、原画像の取得には assets とシーン read(write は read を満たす)が必要です。Agent Bearer に加えて現在の tokenId に結び付いたルーム資格情報も必要です。画像は現在のルーム専用の非公開 R2 名前空間に保存され、別ルームから参照できません。
## 追記専用を維持
サーバーは保存完了済みで、全メタデータが一致する現在ルームの画像だけを受け付けます。通常の write-only 呼び出し、pending 素材、URL、Base64、SVG、HTML、偽造メタデータ、孤立した素材記録、既存要素や素材の変更・削除、リンク、バインディング、任意 Yjs 入力は拒否します。同じ正規素材は複数回配置できます。簡易 Agent SVG/PNG 書き出しは引き続き画像バイトを埋め込まず、警告を返します。
## 本番入口の点検修正
本番点検で Pages の mutation gate に Agent 画像アップロードパスが含まれず、安全な raster 要求が Bearer 認可前に 415 となることを確認しました。1.0.6 では正確な `POST /api/whiteboard/agent/assets` の PNG/JPEG/WebP だけを完全な Agent 認可へ渡します。クロスオリジン、隣接パス、POST 以外、他の MIME は引き続き拒否し、既存の権限、ルーム分離、容量、画像検証は変更していません。
オンラインホワイトボードは 1.0.6 になりました。Quick Transfer は 1.0.6 のままで、転送プロトコルに変更はありません。独立リモート MCP Worker は引き続き未展開です。