能力契约
此清单由 scripts/test-capability-contracts.mjs 强制执行。只有架构与目录映射、可执行处理程序、对应浏览器客户端、命名 UI 操作、文档、针对性行为测试和内置清单定义全部一致,提供商能力才算完整。
| 能力 | 插件类型 | 可执行路由 | 浏览器客户端 | 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 | 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 能力绕过通用 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 兼容的多部分请求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 通过所选插件和用户阀门路由共享模型别名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 操作、缺少能力特定声明的文档、指定测试用例中没有行为的测试、过期生成清单,以及无效的清单端点、模型映射或默认值。
嵌入生成通过 POST /api/ollama/embed 执行,也可路由到所选嵌入插件。GET /api/embeddings/models 只列出模型;门禁将其记录为仅发现路由,绝不视为嵌入生成可用的证明。
源契约标明每个针对性行为测试及其运行器。后端脚本必须注册到 test:package;前端规范必须能被基于 Playwright 的 test:e2e 脚本发现。实时发现可以缩小模型目录,但不会创建新的可执行能力。