feat(wire): 地基④ wire.go 接 vision/voice/mcp/skill/exec 五个子系统,从死代码变可用
- vision:model.Router 绑 WithVisionModel(LLM_VISION_MODEL);vision.RegisterTools(VisualTool/OCRTool) 用同一 OpenAICompatibleAdapter(LLM_BASE_URL 为空则跳过并 Warn)。 - voice:voice.New(cfg.Voice) Chain(cloud→local→edge-tts/espeak→silent)存 a.voice。 - mcp:读 cfg.MCP.ServersJSON → 逐 Enabled server mcp.NewRegistry(...).Register(ctx)(Connect+ DiscoverTools+RegisterTool),注册 KindMCP 能力 mcp:<name> 供 adminListPlugins 枚举; close() 中 Unregister 防 stdio 子进程孤儿;每 server 15s connect 超时,失败 Warn 跳过。 - skills:LoadDir(configs/skills) → skills.Register 为 KindSkill(Runner.Run 仍 ErrRunPending, 执行留后续)。 - exec/terminal:新 terminalTool(sdk.Tool) 内部调 execProv.Execute,注册进 dispatcher; ExecSandbox.Enabled=false 默认拦截(授权默认关)。 - config:LLMConfig 增 VisionModel(LLM_VISION_MODEL);新增 MCPConfig/ServersJSON(MCPSERVERS_JSON)。 - 拆 5 个辅助文件(vision.go/voice.go/mcp.go/skills.go/terminal_tool.go)避免 wire.go 膨胀; wire.go 最终 535 行。 默认配置下各子系统干净跳过不阻断启动(LLM_BASE_URL 已配则 vision 用主模型降级)。 go build/vet/test 全绿(46 包),gofmt 干净。
This commit is contained in:
1 parent
9b207a31e8
commit
eddb9b9891
8 files changed
+362
-1
No files matched your search
@@ -31,6 +31,7 @@ type Config struct {
|
||||
Background BackgroundConfig
|
||||
WSHub WSHubConfig
|
||||
ExecSandbox ExecSandbox
|
||||
MCP MCPConfig
|
||||
}
|
||||
|
||||
// ServerConfig holds the single gateway listener settings.
|
||||
@@ -69,6 +70,10 @@ type LLMConfig struct {
|
||||
Model string `env:"LLM_MODEL"`
|
||||
Fallback string `env:"LLM_FALLBACK_MODEL"`
|
||||
|
||||
// VisionModel is the dedicated model used for image/vision requests. When
|
||||
// set, the model router routes image content to it (see model.Router.WithVisionModel).
|
||||
VisionModel string `env:"LLM_VISION_MODEL"`
|
||||
|
||||
// Anthropic native provider, used when Provider=anthropic. Independent
|
||||
// config block so each vendor is a self-contained config.
|
||||
AnthropicBaseURL string `env:"ANTHROPIC_BASE_URL"`
|
||||
@@ -110,6 +115,24 @@ type WSHubConfig struct {
|
||||
SessionIdleTimeout int `env:"SESSION_IDLE_TIMEOUT_MIN" default:"30"`
|
||||
}
|
||||
|
||||
// MCPConfig holds Model Context Protocol server settings. The reflection-based
|
||||
// loader only supports scalars and []string, so servers are supplied as a JSON
|
||||
// array string (ServersJSON, env MCP_SERVERS_JSON) and parsed at startup by the
|
||||
// MCP wiring (cmd/cyrene/mcp.go).
|
||||
type MCPConfig struct {
|
||||
ServersJSON string `env:"MCP_SERVERS_JSON"`
|
||||
}
|
||||
|
||||
// MCPServer describes a single MCP server: a stdio subprocess (Command/Args) or
|
||||
// an SSE endpoint (URL). Enabled gates activation at startup.
|
||||
type MCPServer struct {
|
||||
Name string `json:"name"`
|
||||
Command string `json:"command"`
|
||||
Args []string `json:"args"`
|
||||
URL string `json:"url"`
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
// Load reads configuration, merging an optional .env file (development only)
|
||||
// with process environment variables. Process environment variables always take
|
||||
// precedence over .env values, which take precedence over code defaults.
|
||||
|
||||
Reference in new issue
Block a user