AI Code2Des — 概要
apps/code2des は completed Page Import capture を versioned native-Figma specification に変換します。packages/code2des-core が DOM hierarchy、paint order、geometry、computed style、SVG、text metrics、image asset、CSS saturation/grayscale を対応する Figma primitive に map します。
LLM は使用しません。そのため output は再現可能で、fidelity failure を capture または deterministic mapping に追跡できます。未対応構造は warning/unmatched node になります。
Backend は独立した二つの PostgreSQL lifecycle を所有します。Page Import completion は Code2Des を enqueue しません。Plugin が selected completed import から新しい Code2Des row を作成して poll/materialize し、過去の generation を canvas に残します。最新 root node ID は PostgreSQL に write back します。
Code2Des と Code2WF は別です。Code2Des は公開 URL の high-fidelity visual reconstruction、Code2WF は別途計画されている repository から low-fidelity wireframe への機能です。
一括インポートと生成
POST /api/v1/organizations/{organization_id}/projects/{project_id}/page-batches は最大 500 件を受け付けます。PostgreSQL の batch と batch_item に入力・進捗を保存します。定期実行のディスパッチャーは子ジョブと SQS メッセージを同じトランザクションで保存し、ページまたはバリエーションごとに 1 メッセージを送信します。期限切れの取得を再試行する際は保存済みメッセージを使い、子ジョブを重複作成しません。
dev Terraform では Page Import の同時実行数を 5、Code2Des を 10 に制限します。SQS の batch_size = 1 と部分失敗応答を維持します。900 秒の制限は各 Lambda 呼び出しに適用し、バッチ全体には適用しません。インタラクティブ状態の探索は引き続き 1 回の Page Import 内で行うため、同じ制限を受けます。
プラグインは進捗を取得し、最大 5 件の並列リクエストで結果を準備します。バッチ全体のフォントを確認してから、フレームを 1 件ずつ配置して記録します。閉じてもバックエンド処理は続きます。同じ Figma ファイルで配置を再開でき、配置応答が失われた場合は既存のルートを再利用します。
デプロイとローカル検証
- バックエンドの
0012_batches.sqlを適用します。 - バッチ API と
POST /internal/page-batches/dispatchを含むバックエンドをデプロイします。 - dev Terraform で毎分の EventBridge ディスパッチ、同時実行制限、CloudWatch アラームを適用します。既存の
BACKEND_INTERNAL_API_KEYを使い、新しいシークレットは不要です。 - 更新したプラグインをビルド・配布します。
ローカル PostgreSQL と LocalStack に接続するバックエンドでは、バッチ作成後に以下を実行します。
curl -X POST http://localhost:8080/internal/page-batches/dispatch \
-H 'X-API-Key: <BACKEND_INTERNAL_API_KEY>'
必要に応じて再実行します。1 度に 5 項目を取得し、1 回の呼び出しで最大 100 項目を扱い、30 秒後は新しい項目を取得しません。取得期限は 90 秒、送信は最大 3 回です。コードベースの失敗項目には新しいアップロード ID が必要です。
CloudWatch はエラー、スロットリング、p95 が 8 分超、キュー待ちが 30 分超、DLQ メッセージを監視します。この変更では通知先を設定しません。ページ単位の処理が 15 分に近づく場合は、Page Import を ECS/Fargate に移すか状態キャプチャを別ジョブに分割します。
ディスパッチャーは最初に各ワーカーの DLQ を確認します(各キュー最大 10 件、SQS の時間枠は 10 秒)。組織・プロジェクト・ジョブ ID・attempt・nonce を検証し、一致する処理中のバッチジョブを失敗に更新した後、DB トランザクション成功後にメッセージを削除します。完了・失敗済みの結果は保持し、不正またはバッチ外のメッセージは DLQ に残します。dev IAM は対象の 2 DLQ のみにアクセスを許可します。経過時間だけで失敗にはしません。500 件のバッチは複数回のディスパッチで送信します。