Skip to main content
Studio は arkor dev を実行したときに起動するローカル Web UI です。ローカルで動き、同じ CLI プロセスとループバック越しに通信し、dev サーバーを止めれば消えます。サインアップも公開 URL もありません。 http://localhost:4000arkor dev --port で変更可)で開いてください。

レイアウト

ヘッダーには現在の ID が <mode> · <org>[ / <project>][ · <baseUrl-host>] の形で表示されます。modeanonymousoauth。クラウド API ホスト suffix は CLI が本番エンドポイントを指しているときは隠され、それ以外で表示されます。 4 ページ、アプリ内ナビ(Overview / Jobs / Playground / Endpoints)で切り替えます: Jobs ページは #/jobs/:id でジョブ単位の詳細(ライブステータス、Loss チャート、イベントログ)も開けます。ナビタブではなく Jobs のサブルートとして提供しています。

アーキテクチャ

/api/* リクエストごとに 3 つのチェックが走ります:
  1. Host ヘッダーのガード。 127.0.0.1localhost のみ受理。127.0.0.1 に DNS リバインディングされる悪意あるサイトに誘導された被害者でも、送信されるのは Host: evil.com で、ミドルウェアは HTTP 403 で拒否します。
  2. 起動ごとの CSRF トークン。 arkor dev は起動ごとに 32 バイトのトークン(base64url)を生成し、<meta name="arkor-studio-token"> として index.html にインジェクトし、すべての /api/* 呼び出しに必須化します(ヘッダー X-Arkor-Studio-Token、または EventSource リクエスト用に ?studioToken=)。クロスオリジンタブは meta を読めないので、preflight をスキップする「simple」なクロスオリジン POST も拒否されます。比較には timingSafeEqual を使用しているため、タイミング攻撃に対して安全です。
  3. CORS なし。 SPA は同一オリジンなので CORS には意味がありません。* を反射すると「simple」なクロスオリジン POST(text/plainurlencoded)を素通りさせてしまうので、トークンチェックがそれを拒否します。
トークンは arkor dev 起動のたびにローテートされるので、前回起動時の古いタブはリロードするまで HTTP 403 で失敗します。

現在できること

まだないもの

これらは SDK や HTTP API レベルでは存在しますが、Studio UI としては今のところありません:

Studio を使うべきでない場面

Studio は開発ツールです。ループバックでのみ、arkor dev が立ち上がっている間だけリッスンし、起動ごとに CSRF トークンをローテートします。プロダクション利用では Studio にユーザーを向けるのではなく、自前のアプリケーションコード(あるいはデプロイ済みの推論層)から infer を呼んでください。