コンテンツにスキップ

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 ファイルで配置を再開でき、配置応答が失われた場合は既存のルートを再利用します。

デプロイとローカル検証

  1. バックエンドの 0012_batches.sql を適用します。
  2. バッチ API と POST /internal/page-batches/dispatch を含むバックエンドをデプロイします。
  3. dev Terraform で毎分の EventBridge ディスパッチ、同時実行制限、CloudWatch アラームを適用します。既存の BACKEND_INTERNAL_API_KEY を使い、新しいシークレットは不要です。
  4. 更新したプラグインをビルド・配布します。

ローカル 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 件のバッチは複数回のディスパッチで送信します。