Pular para o conteúdo principal

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.

CapacidadeTipos de pluginRota executávelCliente do navegadorAção da interfaceDocumentaçãoTestes comportamentais específicosDefinições incluídas
Chat/completionchat, completionWS /ws (chat_stream)frontend/src/hooks/useChat.tsfrontend/src/pages/ChatPage.tsxhandleSendMessagedocs/08-PLUGIN_ARCHITECTURE.mdscripts/test-chat-provider-selection.mjs (test:package) — o roteamento exato do plugin chega ao provedor selecionado em solicitações comuns e por streaminganthropic, codex-oauth, gemini, github, groq, huggingface, kimi-code, llama-cpp, mistral, mlx-lm, openai, openrouter
EmbeddingsembeddingPOST /api/ollama/embed
GET /api/embeddings/models (somente descoberta)
frontend/src/utils/api/modelApi.tsfrontend/src/components/ModelManager.tsxhandleGenerateEmbeddingsdocs/09-RAG_FEATURE.mdscripts/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 tarefahuggingface
Geração de imagensimagePOST /api/image-gen/generatefrontend/src/utils/api/imageGenApi.tsfrontend/src/components/ImageGenerationPanel.tsxhandleGeneratedocs/38-MEDIA_GENERATION.mdscripts/test-image-generation-routing.mjs (test:package) — a geração usa o provedor selecionado e as configurações OpenAI do usuáriocomfyui, huggingface, openai, openrouter
Conversão de fala em textosttPOST /api/stt/transcribefrontend/src/utils/api/sttApi.tsfrontend/src/hooks/useDictation.tstoggledocs/42-SPEECH_TO_TEXT.mdscripts/test-stt-routing.mjs (test:package) — STT envia uma solicitação multipart compatível com OpenAI à rota selecionada
frontend/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 falattsPOST /api/tts/generatefrontend/src/utils/api/ttsApi.tsfrontend/src/components/TTSButton.tsxhandlePlaydocs/38-MEDIA_GENERATION.mdscripts/test-tts-routing.mjs (test:package) — TTS encaminha um alias compartilhado pelo plugin selecionado e pela configuração do usuário
frontend/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 áudioaudioPOST /api/media/sound/generatefrontend/src/utils/api/mediaApi.tsfrontend/src/components/MediaGenerationPanel.tsxhandleGeneratedocs/38-MEDIA_GENERATION.mdscripts/test-openrouter-media-routing.mjs (test:package) — modelos de saída de áudio do OpenRouter transmitem os bytes do som geradoopenrouter
Geração de vídeovideoPOST /api/media/video/generate
POST /api/media/video/jobs/:jobId/resume
frontend/src/utils/api/mediaApi.ts
frontend/src/utils/api/mediaApi.ts
frontend/src/components/MediaGenerationPanel.tsxhandleGeneratedocs/38-MEDIA_GENERATION.mdscripts/test-openrouter-media-routing.mjs (test:package) — envia, consulta e baixa vídeos pelo endpoint do provedor
scripts/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.