メインコンテンツまでスキップ

Web UI

SPECA は CLI 中心の道具ですが、speca-web でブラウザから操作できる Web UI も同梱しています。位置づけはあくまで CLI Clientscripts/run_phase.pyspeca-cli (issue #3) と同じ操作をブラウザで行うためのフロントエンドです。

SPECA dashboard

できること

  • 過去の audit run の一覧と詳細を眺める
  • Phase の進捗を WebSocket でリアルタイム表示
  • Findings をフィルタ / ソート / Markdown でエクスポート
  • 新規 audit を Picker / Wizard から起動
  • Chat パネルから Claude / Codex / Gemini / Ollama / Copilot と対話 (Settings で切替)
  • Settings から実行 runtime / テーマ (light/dark/system/solarized) / 言語 (EN/JA) を切替

詳細な機能一覧は Web UI の機能 を、runtime 切替の詳細は Multi-runtime バックエンド を参照してください。

起動

uv run speca-web --port 7411 --host 127.0.0.1 --serve-frontend

http://127.0.0.1:7411/ を開けばダッシュボードが表示されます。claude.ai OAuth でログイン済 (claude auth statuslogged_in=true を返す状態) であれば、自動的にダッシュボードへ。未ログインなら paste-code OAuth or API キー入力で認証できます:

Login screen with paste-code OAuth

ローカル限定で動かす

既定では 127.0.0.1 のみで bind し、LAN 経由のアクセスは受け付けません。同一マシン上のローカル使用前提です。LAN 経由で使いたい場合は --host 0.0.0.0 を明示してください (環境次第ですが、Firewall / NAT で守られていない環境では非推奨)。

Run 詳細 — phase 進捗 + 予算ゲージ

Run detail with phase rows and budget gauge

各 phase 行は折り畳み可能。focus 中に l を押せばログペインへ scroll、f で当該 phase だけ force re-run できます。予算ゲージをクリックすると cap-bump モーダル が開いて max_budget_usd を引き上げ / クリアできます:

Budget cap-bump modal

Findings — DSL filter + コードハイライト

Findings 一覧は severity / verdict / phase chip でサーバ側フィルタ、追加の DSL 入力でクライアント側のさらに細かい filter (path glob 等) ができます。Markdown export も。

Findings list

行をクリックすると詳細ページで evidence_snippet が Prism でシンタックスハイライトされます (Solidity / TS / JS / Python / Rust / Go / Java / C / C++):

Finding detail with code highlight

Chat パネル — multi-runtime 対応

右側の Chat ボタン (またはキーボードショートカット c) でチャットパネルが開きます:

Chat panel

会話の駆動先は Settings ページから 5 backend (Claude / Codex / Gemini / Ollama / Copilot) のいずれかを選べます。詳しくは Multi-runtime バックエンド を参照。

Settings — runtime / テーマ / 言語

Runtime selector in Settings

Chat runtime セクションで 5 backend を切替、availability badge ( / !) で各 backend がすぐ使えるかが一目で分かります。Advanced を展開すれば runtime ごとの model / Ollama host を上書き可能。

テーマは light / dark / system に加えて Solarized に対応:

DefaultSolarized
dashboard defaultdashboard solarized

ヘッダの L D A S ボタンで 4-way 切替:

Theme toggle 4 buttons

ショートカット

? を押すといつでも一覧モーダルが出ます:

Keyboard shortcuts help

キー動作
?キーボードショートカット一覧モーダル
Esc開いているモーダル / Chat パネルを閉じる
cChat パネルの開閉
g r / g s / g dRuns / Settings / Diagnostics へ
/Findings filter にフォーカス
j / kFindings 行を次 / 前へ
Phase 行 focus 中: l / fログ展開 / その phase だけ force re-run

すべて IME-safe (composition 中は発火しない)。

アーキテクチャ

  • バックエンド — FastAPI + uvicorn (web/server/)。scripts/run_phase.py をサブプロセスで呼んで pipeline を駆動。orchestrator の Python コードを直接 import はしません (decoupling)。
  • フロントエンド — React 19 + TypeScript + Vite (web/frontend/)。TanStack Query で REST + WebSocket、Zustand で UI state、i18next で EN/JA。
  • 状態保持 — Run state は .speca/runs/<run_id>/state.json、Chat 履歴は ~/.speca/chat/<conversation_id>.json、Runtime 設定は ~/.speca/runtime.json。秘密情報はどれにも入りません。

関連ドキュメント