批次A admin 端点(原本 404 变 200 真实数据): - GET /admin/llm:读 s.cfg.LLM 组 openai+anthropic 两 provider(enabled=当前 Provider、multimodal=配 VisionModel),APIKey 不进 wire 零泄露。 - GET /admin/automations:*automations.Service.List()(reminders+event rules+cron schedules,cron 加只读登记)。 - GET /admin/users:cfg.AdminUser + *auth.APIKey.List()(密钥掩码);无用户存储,恒先返回当前 admin 账号。 - GET /admin/backthink:*backthink.Backthink.List(ctx,50)。均只读、owner/admin RBAC、{data} 信封。 批次B 视觉真推理 + 语音: - rest.go chatRequest 加 Image?;流式 publishChatStream 带 image;userChatMessages 构造 ImageMessage(model.go:71)。 - loop/vision.go:ImageResolver 可注入(MVP 先看图再对话);run.go Run 开头 resolveImages,无 resolver 透传直交主模型。 - vision/resolver.go:MessageResolver 调 vision.Router.Route——KindMain 保留图片交主模型多模态、KindVisionTool/OCRTool 经 dispatcher.Invoke 折叠成 [图片内容] 文本、KindUnsupported 记日志保留原图不崩。 - gateway/voice.go:VoiceService 接口 + SetVoice 注入点 + handleVoiceInput(未注入回 error 不崩)+ runVoiceTurn 异步 STT→loop chat→TTS→定向 voice_output 帧。 - ws_hub/ws_route:voice_input 接 handleVoiceInput;前端 ws.ts decodeBase64/playVoiceAudio/case voice_output。 第3步 wire.go 收口(唯一碰 wire.go 的一步): - Deps 补传 Automations:a.automation / Backthink:a.backthink / Users:auth.NewAPIKey(a.cfg.Auth)(*auth.APIKey 原生满足 UserStore,避免 admin 重复的复合类型)。 - gw.SetVoice(a.voice);loop.Options.Vision = vision.NewMessageResolver(router, info, dispatcher.Invoke)(router=NewRouter(WithVisionTool/WithOCRTool)、info=cfg.LLM.VisionModel)。 实机验证:四 admin 端点 200 真实数据(llm 双 provider 脱敏、users=admin,yeij0942,owner);WS 握手正常。go build/vet/test 全绿 + 前端 tsc。wire.go 557 行。
打通前端 ws.ts 里那批死消费者事件(thinking/mood/tool_used/subagent_event/ task_output/device_update/reminder/backthink),并给 loop 接真 token 流式。 - wire.go:loop 建时传 OnStream(streamChunk 闭包把 delta 发 bus ws.stream_chunk); gateway.Deps 注入 Scheduler/Tasks/Streaming;iot 接共享总线 iot.WithBus(a.bus)。 - ws_bridge.go:hub 额外订阅 iot.>/task.>/automation.>/reminder.>/cyrene.agent.*.event, normalizeEvent 归一为 ws.*(device_update/task_output/task_done/automation_result/ reminder/subagent_event);不订阅 cyrene.agent.> 以免 ask/reply 内部事件进 relay。 - ws_route.go:voice_input→ws.voice_input;subagent_ask→Scheduler.AuditContext(真实 上下文审计,替换 pending stub);task_output_query→Manager.TaskOutput(真实输出, 替换空 {})。 - server.go:新增 SubagentAuditor/TaskOutputStore 接口 + Deps.Scheduler/Tasks/Streaming。 - orchestration/auditcontext.go:Scheduler.AuditContext(full/tail/keyword)。 - task/manager.go:Manager.TaskOutput(id)。 - backthink:record() 补发 ws.backthink 事件。 - json tag 修正(device_update/reminder/task output 结构体加小写 tag + DeviceUpdate 补 message),使前端分支能真正渲染。 实机验证:WS 握手 101、task manager ready、iot manager initialized(WithBus 生效)。 go build/vet/test 全绿;TestHubBridgeDeviceUpdate/TestHubBridgeSubagentProgress 覆盖 映射。dev 推至后续版本。