Contratos de capacidades
Este inventário é aplicado por scripts/test-capability-contracts.mjs. Uma capacidade de provedor só está completa quando seu esquema e mapeamento de catálogo, manipulador executável, cliente de navegador correspondente, ação nomeada da interface, documentação, teste comportamental específico e manifestos incluídos estão de acordo.
| Capacidade | Tipos de plugin | Rota executável | Cliente do navegador | Ação da interface | Documentação | Testes comportamentais específicos | Definições incluídas |
|---|---|---|---|---|---|---|---|
| Chat/completion | 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) — o roteamento exato do plugin chega ao provedor selecionado em solicitações comuns e por 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 (somente descoberta) | 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) — as capacidades do Hugging Face ignoram o endpoint genérico de Chat e usam payloads próprios da tarefa | huggingface |
| Geração de imagens | 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) — a geração usa o provedor selecionado e as configurações OpenAI do usuário | comfyui, huggingface, openai, openrouter |
| Conversão de fala em 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 envia uma solicitação multipart compatível com OpenAI à rota selecionadafrontend/e2e/stt.spec.ts (test:e2e) — a entrada de voz informa sua rota e transcreve o áudio gravado | huggingface, openai |
| Conversão de texto em fala | 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 encaminha um alias compartilhado pelo plugin selecionado e pela configuração do usuáriofrontend/e2e/tts-playback.spec.ts (test:e2e) — a leitura em lotes reutiliza a voz salva em cada lote | elevenlabs, huggingface, kyutai-tts-1.6b, kyutai-tts, longcat-audiodit, openai-tts, openai, openrouter, qwen-tts |
| Geração de áudio | 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) — modelos de saída de áudio do OpenRouter transmitem os bytes do som gerado | openrouter |
| Geração 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) — envia, consulta e baixa vídeos pelo endpoint do provedorscripts/test-openrouter-media-routing.mjs (test:package) — publicações preparadas e retomadas resolvem confirmações de commit perdidas | openrouter |
Aplicação
O bloqueio do pacote rejeita tipos de esquema ou plugin não declarados, mapeamentos desatualizados, rotas apenas de descoberta apresentadas como execução, manipuladores sem transporte correspondente no navegador, ações da interface sem chamada e acionador visível, documentação sem afirmações específicas da capacidade, testes sem comportamento no caso nomeado, inventário gerado desatualizado e endpoints, mapas de modelos ou padrões inválidos em manifestos.
A geração de embeddings ocorre por POST /api/ollama/embed e pode ser encaminhada a um plugin de embeddings selecionado. GET /api/embeddings/models lista modelos; o bloqueio a registra como somente descoberta e nunca a aceita como prova de que a geração funciona.
O contrato-fonte identifica cada teste comportamental e seu executor. Scripts de backend devem estar registrados em test:package; especificações de frontend devem ser localizáveis pelo script test:e2e baseado em Playwright. A descoberta ao vivo pode restringir um catálogo, mas não cria uma nova capacidade executável.