Contratos de capacidades
scripts/test-capability-contracts.mjs exige este inventario. Una capacidad de proveedor no está completa hasta que coinciden su esquema y asignación en el catálogo, el controlador ejecutable, el cliente de navegador correspondiente, la acción de interfaz designada, la documentación, la prueba de comportamiento específica y las definiciones incluidas.
| Capacidad | Tipos de plugin | Ruta ejecutable | Cliente del navegador | Acción de la interfaz | Documentación | Pruebas de comportamiento específicas | Definiciones incluidas |
|---|---|---|---|---|---|---|---|
| Chat / finalización | 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) — el enrutamiento exacto del plugin llega al proveedor seleccionado para solicitudes normales y en streaming | anthropic, codex-oauth, gemini, github, groq, huggingface, kimi-code, llama-cpp, mistral, mlx-lm, openai, openrouter |
| Embeddings | embedding | POST /api/ollama/embedGET /api/embeddings/models (solo descubrimiento) | 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) — las capacidades de Hugging Face omiten el endpoint genérico de Chat y utilizan cargas específicas de la tarea | huggingface |
| Generación de imágenes | 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) — la generación de imágenes utiliza el proveedor seleccionado y los ajustes de OpenAI propios del usuario | comfyui, huggingface, openai, openrouter |
| Voz a texto | 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 envía una solicitud multiparte compatible con OpenAI a la ruta seleccionadafrontend/e2e/stt.spec.ts (test:e2e) — la entrada de voz del proveedor muestra su ruta y transcribe el audio grabado | huggingface, openai |
| Texto a voz | 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 dirige un alias de modelo compartido mediante el plugin y la válvula del usuario seleccionadosfrontend/e2e/tts-playback.spec.ts (test:e2e) — la lectura por lotes reutiliza la voz guardada seleccionada en cada lote | elevenlabs, huggingface, kyutai-tts-1.6b, kyutai-tts, longcat-audiodit, openai-tts, openai, openrouter, qwen-tts |
| Generación de audio | 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) — los modelos de salida de audio de OpenRouter transmiten los bytes de sonido generados | openrouter |
| Generación de vídeo | 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) — la generación de vídeo envía, sondea y descarga mediante el endpoint del proveedorscripts/test-openrouter-media-routing.mjs (test:package) — la preparación y reanudación de publicaciones resuelven confirmaciones perdidas | openrouter |
Aplicación
La puerta de control del paquete rechaza esquemas o tipos de plugin no declarados, asignaciones de catálogo obsoletas, rutas de descubrimiento presentadas como ejecución, controladores sin transporte de navegador correspondiente, acciones de interfaz sin invocación y activador visible, documentación sin afirmaciones específicas de la capacidad, pruebas sin comportamiento dentro del caso indicado, inventarios generados obsoletos y endpoints, mapas de modelos o valores predeterminados no válidos en los manifiestos.
La generación de embeddings se ejecuta mediante POST /api/ollama/embed y puede dirigirse a un plugin de embeddings seleccionado. GET /api/embeddings/models enumera modelos; la puerta lo registra solo como descubrimiento y nunca lo acepta como prueba de que la generación funcione.
El contrato fuente identifica cada prueba de comportamiento específica y su ejecutor. Los scripts del backend deben registrarse en test:package; las especificaciones del frontend deben ser detectables por el script test:e2e basado en Playwright. El descubrimiento en vivo puede reducir un catálogo de modelos, pero no crea una capacidad ejecutable nueva.