Contratti delle capability
Questo inventario è imposto da scripts/test-capability-contracts.mjs. Una capability di un provider non è completa finché schema e mappatura del catalogo, handler eseguibile, client del browser corrispondente, azione UI nominata, documentazione, test comportamentale mirato e manifest inclusi non concordano.
| Capability | Tipi di plugin | Route eseguibile | Client del browser | Azione UI | Documentazione | Test comportamentali mirati | Definizioni incluse |
|---|---|---|---|---|---|---|---|
| Chat/completamento | 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) — il routing esatto del plugin raggiunge il provider selezionato per richieste normali e in streaming | 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 (solo scoperta) | 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) — le capability Hugging Face ignorano l'endpoint Chat generico e usano payload specifici dell'attività | huggingface |
| Generazione immagini | 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 generazione usa il provider selezionato e le impostazioni OpenAI limitate all'utente | comfyui, huggingface, openai, openrouter |
| Da voce a testo | 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 invia una richiesta multipart compatibile con OpenAI alla route selezionatafrontend/e2e/stt.spec.ts (test:e2e) — l'input vocale dichiara la destinazione e trascrive l'audio registrato | huggingface, openai |
| Da testo a voce | 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 instrada un alias condiviso tramite il plugin selezionato e la Valve dell'utentefrontend/e2e/tts-playback.spec.ts (test:e2e) — la lettura in batch riutilizza la voce salvata selezionata per ogni batch | elevenlabs, huggingface, kyutai-tts-1.6b, kyutai-tts, longcat-audiodit, openai-tts, openai, openrouter, qwen-tts |
| Generazione 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) — i modelli OpenRouter con output audio trasmettono in streaming i byte sonori generati | openrouter |
| Generazione video | 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) — il video viene inviato, controllato e scaricato tramite l'endpoint del providerscripts/test-openrouter-media-routing.mjs (test:package) — le pubblicazioni preparate e riprese risolvono le conferme di commit perse | openrouter |
Applicazione
Il gate del pacchetto rifiuta tipi di schema o plugin non dichiarati, mappature di catalogo obsolete, route di sola scoperta presentate come esecuzione, handler senza un trasporto browser corrispondente, azioni UI senza invocazione e trigger visibile, documentazione priva di affermazioni specifiche, test senza comportamento nel caso nominato, inventari generati obsoleti ed endpoint, mappe di modelli o valori predefiniti non validi nei manifest.
La generazione degli embedding avviene tramite POST /api/ollama/embed e può essere instradata a un plugin di embedding selezionato. GET /api/embeddings/models elenca i modelli; il gate lo registra come sola scoperta e non lo accetta mai come prova del funzionamento della generazione.
Il contratto sorgente identifica ogni test comportamentale mirato e il relativo runner. Gli script backend devono essere registrati in test:package; le specifiche frontend devono essere rilevabili dallo script test:e2e basato su Playwright. La scoperta live può restringere il catalogo dei modelli, ma non crea una nuova capability eseguibile.