package core import ( "testing" ) // ★ 适配器**真实装载**必须可观测:`__adapter_install_probe` 要报告全部 6 个 // 自装适配器,且每个都是 ok。 // // 为什么这条判据值得存在(plan §3 第 1 条): // // `luac -p` 对 Lua 长字符串里的适配器代码**无效**(它只看外层插件脚本), // 会给出假绿。真实故障态是「插件加载成功、适配器却没装进去」—— 此时每次 // 调用内核才响亮报 `missing transform_response`,而原因指向内核不像配置。 // // 另一层:cline / qoder 此前**不在探针输出里**,于是「装了但没生效」在这两个 // 适配器上完全不可观测 —— 本轮修 cline 的 `workos:` 前缀时正是因此先卡了一下。 // 装上就该看得见。 func TestAdapterInstallProbeReportsAllSelfInstalled(t *testing.T) { c := kernelTestCore(t) ps := c.Plugins() src, err := readBundledChannels(t) if err != nil { t.Fatal(err) } if err := ps.LoadSource("channels", src); err != nil { t.Fatalf("加载插件: %v", err) } res, err := ps.Call("channels", "__adapter_install_probe", map[string]interface{}{}) if err != nil { t.Fatalf("__adapter_install_probe: %v", err) } // 探针的诊断价值就在于它能在 CI 里跑通(zcode 的基座在 core 测试台里 // 是可得 —— pluginDir 与 adaptersDir 同一套配置)。 top, ok := res.(map[string]interface{}) if !ok { t.Fatalf("探针返回值不是对象: %#v", res) } j, ok := top["json"].(map[string]interface{}) if !ok { t.Fatalf("探针返回值缺 json 层: %#v", top) } // 6 个自装适配器:缺任何一个都是"插件装了、适配器没装"的故障态。 want := []string{"codearts", "trae", "gemini", "zcode", "cline", "qoder"} for _, name := range want { entry, ok := j[name].(map[string]interface{}) if !ok { t.Fatalf("★ 探针未报告 %s 适配器的装载结果(装上就该看得见;"+ "漏报等于问题不可观测): %v", name, j) } if entry["ok"] != true { t.Fatalf("★ %s 适配器装载失败: %v\n"+ " luac -p 对长字符串里的适配器代码**无效**(plan §3 第 1 条),"+ "必须以本探针为准", name, entry["err"]) } } t.Logf("✓ 6/6 自装适配器全部装载成功(probe: %v)", keysOfProbe(j)) } func keysOfProbe(m map[string]interface{}) []string { out := make([]string, 0, len(m)) for k := range m { out = append(out, k) } return out }