重构 API 路由并新增工作流编排功能
后端: - 重构 agents, heartbeats, locks, meetings, resources, roles, workflows 路由 - 新增 orchestrator 和 providers 路由 - 新增 CLI 调用器和流程编排服务 - 添加日志配置和依赖项 前端: - 更新 AgentsPage、SettingsPage、WorkflowPage 页面 - 扩展 api.ts 新增 API 接口 其他: - 清理测试 agent 数据文件 - 新增示例工作流和项目审计报告 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
"""
|
||||
Provider / CLI 检测与配置 API
|
||||
|
||||
提供系统可用的 AI CLI 工具检测和 LLM Provider 状态查询
|
||||
"""
|
||||
|
||||
import os
|
||||
from fastapi import APIRouter
|
||||
from ..services.cli_invoker import detect_available_clis, CLI_REGISTRY
|
||||
|
||||
router = APIRouter(prefix="/providers", tags=["providers"])
|
||||
|
||||
|
||||
# 支持的 CLI 工具元信息
|
||||
CLI_META = {
|
||||
"claude": {
|
||||
"display_name": "Claude Code",
|
||||
"description": "Anthropic Claude CLI",
|
||||
"models": ["claude", "claude-sonnet", "claude-opus"],
|
||||
},
|
||||
"kimi": {
|
||||
"display_name": "Kimi CLI",
|
||||
"description": "Moonshot Kimi CLI",
|
||||
"models": ["kimi", "kimi-k2", "moonshot"],
|
||||
},
|
||||
"opencode": {
|
||||
"display_name": "OpenCode",
|
||||
"description": "OpenCode CLI (支持多种模型)",
|
||||
"models": ["opencode"],
|
||||
},
|
||||
}
|
||||
|
||||
# 支持的 LLM API Provider
|
||||
API_PROVIDERS = {
|
||||
"anthropic": {
|
||||
"display_name": "Anthropic",
|
||||
"env_key": "ANTHROPIC_API_KEY",
|
||||
"models": ["claude-opus-4.6", "claude-sonnet-4.6", "claude-haiku-4.6"],
|
||||
},
|
||||
"openai": {
|
||||
"display_name": "OpenAI",
|
||||
"env_key": "OPENAI_API_KEY",
|
||||
"models": ["gpt-4o", "gpt-4-turbo", "gpt-3.5-turbo"],
|
||||
},
|
||||
"deepseek": {
|
||||
"display_name": "DeepSeek",
|
||||
"env_key": "DEEPSEEK_API_KEY",
|
||||
"models": ["deepseek-chat", "deepseek-coder"],
|
||||
},
|
||||
"google": {
|
||||
"display_name": "Google Gemini",
|
||||
"env_key": "GOOGLE_API_KEY",
|
||||
"models": ["gemini-2.5-pro", "gemini-2.5-flash"],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@router.get("/")
|
||||
async def list_providers():
|
||||
"""
|
||||
列出所有可用的 AI Provider(CLI + API)
|
||||
|
||||
前端用于填充 Agent 注册的模型下拉框和 Settings 的 Provider 配置区
|
||||
"""
|
||||
available_clis = detect_available_clis()
|
||||
|
||||
cli_list = []
|
||||
for name, meta in CLI_META.items():
|
||||
installed = name in available_clis
|
||||
cli_list.append({
|
||||
"id": name,
|
||||
"type": "cli",
|
||||
"display_name": meta["display_name"],
|
||||
"description": meta["description"],
|
||||
"installed": installed,
|
||||
"path": available_clis.get(name, ""),
|
||||
"models": meta["models"],
|
||||
})
|
||||
|
||||
api_list = []
|
||||
for name, meta in API_PROVIDERS.items():
|
||||
has_key = bool(os.environ.get(meta["env_key"]))
|
||||
api_list.append({
|
||||
"id": name,
|
||||
"type": "api",
|
||||
"display_name": meta["display_name"],
|
||||
"env_key": meta["env_key"],
|
||||
"configured": has_key,
|
||||
"models": meta["models"],
|
||||
})
|
||||
|
||||
return {
|
||||
"cli": cli_list,
|
||||
"api": api_list,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/models")
|
||||
async def list_available_models():
|
||||
"""
|
||||
列出当前可用的所有模型(已安装 CLI + 已配置 API Key 的模型)
|
||||
|
||||
前端 Agent 注册弹窗的模型下拉框直接使用此接口
|
||||
"""
|
||||
available_clis = detect_available_clis()
|
||||
models = []
|
||||
|
||||
for name in available_clis:
|
||||
meta = CLI_META.get(name, {})
|
||||
display = meta.get("display_name", name)
|
||||
for model in meta.get("models", [name]):
|
||||
models.append({
|
||||
"value": model,
|
||||
"label": f"{model} ({display})",
|
||||
"provider": name,
|
||||
"type": "cli",
|
||||
})
|
||||
|
||||
for name, meta in API_PROVIDERS.items():
|
||||
if os.environ.get(meta["env_key"]):
|
||||
for model in meta["models"]:
|
||||
models.append({
|
||||
"value": model,
|
||||
"label": f"{model} ({meta['display_name']} API)",
|
||||
"provider": name,
|
||||
"type": "api",
|
||||
})
|
||||
|
||||
return {"models": models}
|
||||
Reference in New Issue
Block a user