From 16c9d4f69e0925b367affee562a4def1e5be3d3e Mon Sep 17 00:00:00 2001 From: root Date: Tue, 20 Oct 2026 09:00:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(startup):=20=E5=90=AF=E5=8A=A8=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E4=B8=A4=E7=B1=BB=E5=99=AA=E5=A3=B0=E5=BD=92=E9=9B=B6?= =?UTF-8?q?=20=E2=80=94=E2=80=94=20=E6=8F=92=E4=BB=B6=20stdout=20=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E4=B8=8E=20CLI=20=E5=9E=8B=E6=8A=80=E8=83=BD=E8=AF=AF?= =?UTF-8?q?=E5=88=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈启动日志里有报错。实测定位到两处,都是真实问题: ## 1. huawei_smarthome 往 stdout 打日志(8 条「收到非法 JSON 帧」) stdout 是 JSON-RPC **协议通道**,它在 plugin.go/handlers.go/service.go 等处 用了 fmt.Printf(31 处),内核每收到一行就把协议解析失败一次。 这不是内核的错,是插件写法错 —— 已在其源码(/home/newqqagent/plugindev/ huawei_smarthome)把 fmt.Printf/Println 全部改成 log.Printf(stderr), 重新 hmapdev 打包并安装。重启后非法帧 0 条、10 个工具正常注册。 ## 2. clawhubadapter 把 CLI 型 main.py 当 JSON-RPC sidecar 判定规则原为「有 main.py 就按 pysidecar 拉起」,但 ClawHub 上大量技能的 main.py 是 **CLI 入口**(`python3 main.py ''`),对它发 ping 必然超时(bilibili、gaode 各等 5 秒)。旧代码只打一行错误就完事 —— 启动日志一片红,而技能既没变成工具、也没交给 skillmgr,等于半死不活。 改为:sidecar 就绪失败即降级为「CLI 型技能」,移交 skillmgr 并给出说明, 日志措辞从「错误」改为「未就绪 → 按 CLI 型处理」。两个技能现已可经 skill_info 读到文档、再用命令执行。 ## 3. 顺带修一条看着像配置泄漏的日志 `dep parser initialized (model: )` —— 空括号是「未配置 ONNX 模型、走内置规则 引擎」的正常回退。改为显式说明,避免误读成缺配置。 ## 验收(本机实例重启后实录) - 「非法 JSON 帧」0 条(此前 8 条) - dep parser 日志:`ready (内置规则引擎;未配置 core.agent.onnx_model_path)` - 剩余 3 条均为说明性:mail-bridge 出站通道兜底、两个 CLI 型技能降级移交 - 13 个内置 + 13 个自启外部插件全部 loaded,agent main started --- internal/kernelmod/onnx/mod.go | 8 +++++++- internal/plugins/clawhubadapter/plugin.go | 12 +++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/internal/kernelmod/onnx/mod.go b/internal/kernelmod/onnx/mod.go index 551a4861..6c86d8d4 100644 --- a/internal/kernelmod/onnx/mod.go +++ b/internal/kernelmod/onnx/mod.go @@ -40,7 +40,13 @@ func (Module) Init(ks *kernelboot.KernelState) error { return nil } nlp.SetDefaultParser(onnxParser) - log.Printf("[homed] dep parser initialized (model: %s)", modelPath) + // 空路径 = 走内置规则引擎(不发 ONNX 推理)。旧日志打成 + // "initialized (model: )" —— 空括号看着像配置泄漏了,实为正常回退。 + if modelPath == "" { + log.Printf("[homed] dep parser ready (内置规则引擎;未配置 core.agent.onnx_model_path)") + } else { + log.Printf("[homed] dep parser ready (ONNX model: %s)", modelPath) + } return nil } diff --git a/internal/plugins/clawhubadapter/plugin.go b/internal/plugins/clawhubadapter/plugin.go index e139a87b..0f1b39ee 100644 --- a/internal/plugins/clawhubadapter/plugin.go +++ b/internal/plugins/clawhubadapter/plugin.go @@ -160,7 +160,17 @@ func (p *Plugin) Start(s *sdk.PluginSDK) error { } case hasMainPy: if err := p.loadPySidecar(s, skillPath, entry.Name()); err != nil { - log.Printf("[clawhubadapter] pysidecar %s: %v", entry.Name(), err) + // ★ main.py 不等于 JSON-RPC sidecar。ClawHub 上大量技能的 + // main.py 是 **CLI 入口**(`python3 main.py ''`), + // 对它发 ping 必然超时(实测 bilibili / gaode 各等 5s)。 + // + // 以前这里只打一行错误就完事 —— 启动日志一片红,而技能既没 + // 变成工具、也没交给 skillmgr,等于半死不活。 + // 现在:失败即降级为「纯指令技能」移交 skillmgr,让模型仍可 + // 按 SKILL 文档用命令跑它;日志改成说明而不是错误。 + log.Printf("[clawhubadapter] pysidecar %s 未就绪(%v);"+ + "按 CLI 型技能处理,移交 skillmgr", entry.Name(), err) + p.publishSkillDetected(s, skillPath) } case hasOCManifest || hasOCPackage: log.Printf("[clawhubadapter] ocplugin %s handled by manager", entry.Name())