Capability コントラクト
この一覧は scripts/test-capability-contracts.mjs によって強制されます。プロバイダー Capability は、スキーマとカタログの対応、実行ハンドラー、対応するブラウザクライアント、名前付き UI アクション、ドキュメント、対象を絞った振る舞いテスト、同梱マニフェストのすべてが一致するまで完成とはみなされません。
| Capability | プラグイン種類 | 実行ルート | ブラウザクライアント | UI アクション | ドキュメント | 対象を絞った振る舞いテスト | 同梱定義 |
|---|---|---|---|---|---|---|---|
| チャット/補完 | chat, completion | WS /ws (chat_stream) | frontend/src/hooks/useChat.ts | frontend/src/pages/ChatPage.tsx — handleSendMessage | docs/08-PLUGIN_ARCHITECTURE.md | scripts/test-chat-provider-selection.mjs(test:package)— 通常リクエストとストリーミングリクエストの両方で、選択したプロバイダーへ正確にルーティングされる | anthropic, codex-oauth, gemini, github, groq, huggingface, kimi-code, llama-cpp, mistral, mlx-lm, openai, openrouter |
| Embedding | embedding | POST /api/ollama/embedGET /api/embeddings/models(探索のみ) | frontend/src/utils/api/modelApi.ts | frontend/src/components/ModelManager.tsx — handleGenerateEmbeddings | docs/09-RAG_FEATURE.md | scripts/test-plugin-capability-routing.mjs(test:package)— Hugging Face Capability は汎用 Chat エンドポイントを無視し、タスク用ペイロードを使用する | huggingface |
| 画像生成 | image | POST /api/image-gen/generate | frontend/src/utils/api/imageGenApi.ts | frontend/src/components/ImageGenerationPanel.tsx — handleGenerate | docs/38-MEDIA_GENERATION.md | scripts/test-image-generation-routing.mjs(test:package)— 画像生成が、選択したプロバイダーと利用者スコープの OpenAI 設定を使用する | comfyui, huggingface, openai, openrouter |
| 音声認識 | stt | POST /api/stt/transcribe | frontend/src/utils/api/sttApi.ts | frontend/src/hooks/useDictation.ts — toggle | docs/42-SPEECH_TO_TEXT.md | scripts/test-stt-routing.mjs(test:package)— STT が選択したルートへ OpenAI 互換 multipart リクエストを送るfrontend/e2e/stt.spec.ts(test:e2e)— プロバイダー音声入力が送信先を開示し、録音音声を文字起こしする | huggingface, openai |
| 音声合成 | tts | POST /api/tts/generate | frontend/src/utils/api/ttsApi.ts | frontend/src/components/TTSButton.tsx — handlePlay | docs/38-MEDIA_GENERATION.md | scripts/test-tts-routing.mjs(test:package)— TTS が共有モデルエイリアスを選択済みプラグインと利用者 Valve にルーティングするfrontend/e2e/tts-playback.spec.ts(test:e2e)— バッチ読み上げが、保存済みの選択音声をすべてのバッチで再利用する | elevenlabs, huggingface, kyutai-tts-1.6b, kyutai-tts, longcat-audiodit, openai-tts, openai, openrouter, qwen-tts |
| 音声生成 | audio | POST /api/media/sound/generate | frontend/src/utils/api/mediaApi.ts | frontend/src/components/MediaGenerationPanel.tsx — handleGenerate | docs/38-MEDIA_GENERATION.md | scripts/test-openrouter-media-routing.mjs(test:package)— OpenRouter の音声出力モデルが生成音声バイトをストリーミングする | openrouter |
| 動画生成 | video | POST /api/media/video/generatePOST /api/media/video/jobs/:jobId/resume | frontend/src/utils/api/mediaApi.tsfrontend/src/utils/api/mediaApi.ts | frontend/src/components/MediaGenerationPanel.tsx — handleGenerate | docs/38-MEDIA_GENERATION.md | scripts/test-openrouter-media-routing.mjs(test:package)— 動画生成がプロバイダーのエンドポイントを通じて送信、ポーリング、ダウンロードされるscripts/test-openrouter-media-routing.mjs(test:package)— 準備済みの動画と再開した公開処理が、失われたコミット応答を解決する | openrouter |
強制適用
パッケージゲートは、宣言されていないスキーマまたはプラグイン種類、古いカタログ対応、実行機能として提示された探索専用ルート、対応するブラウザ通信がないハンドラー、呼び出し処理と可視トリガーがない UI アクション、Capability 固有の説明がないドキュメント、指定されたテストケース内に振る舞いがないテスト、古い生成済み一覧、無効なマニフェストのエンドポイント・モデルマップ・既定値を拒否します。
Embedding 生成は POST /api/ollama/embed から実行され、選択した Embedding プラグインへルーティングできます。GET /api/embeddings/models はモデルを列挙するだけです。ゲートはこれを探索専用として記録し、Embedding 生成が動作する証拠として受け入れることはありません。
ソースコントラクトは、対象を絞った各振る舞いテストとそのランナーを指定します。バックエンドスクリプトは test:package に登録され、フロントエンド仕様は Playwright ベースの test:e2e スクリプトから検出可能でなければなりません。ライブ探索によってモデルカタログを絞り込むことはできますが、新しい実行可能 Capability が作成されるわけではありません。