feat(search): 新增腾讯云·元宝搜索与秘塔搜索两家 provider
接入位表六家扩到八家,端点形状与错误码一字未改(契约 v0.87,仅两处名单)。
- tencent_wsa:POST {base}/SearchPro + Authorization Bearer,零签名。
两条官方口径决定实现:HTTP 状态码恒 200(判失败只能读 Response.Error.Code);
Pages 是「JSON 字符串数组」需二次解析。错误码按官方表分类
(UnauthorizedOperation/AuthFailure.* = 凭据、ResourceUnavailable = 欠费、
RequestLimitExceeded* = 限流),文案只带 code 不带上游 Message。
- metaso:POST {base}/api/v1/search,响应 schema 仅第三方来源且互相打架,
实现走宽松解析(数组候选与字段名回退),逐处标「未实测」。
- 零新 env 键:两家只走 $DATA_DIR/config/plugins/web-search.json,
.env / .env.example 未动;组合根 websearch_providers.go 零功能改动。
- 契约 v0.87:values.provider 合法闭集与 plugin.providers 候选各加两条,
计数不变(14 + 25 + 40 = 79)。
This commit is contained in:
1 parent
8e3311cea2
commit
ce9af42945
21 files changed
+1219
-36
No files matched your search
@@ -35,11 +35,15 @@ import (
|
||||
//
|
||||
// 它在 search 包里**没有**登记(`search.Known` 为 false),也没有对应的 `.env` 字段 ——
|
||||
// 于是它正好是判据 ③ 的载体:「没有 env 字段的家,只认文件也能被投影出生效配置」。
|
||||
//
|
||||
// ⚠️ 名字取 `fake_next_provider` 而不是某个真接入位(早先这里写的是 `tencent_wsa`):
|
||||
// `tencent_wsa` 已经**真的登记**(本片新增),沿用旧名会让这条用例的前提断言直接失败 ——
|
||||
// 假接入位必须是一个**永远不会被登记**的名字,用例才钉得住「没 env 字段的家」这件事。
|
||||
func wsFakeNewProviderDef() search.Descriptor {
|
||||
return search.Descriptor{
|
||||
Name: "tencent_wsa",
|
||||
Name: "fake_next_provider",
|
||||
NeedKey: true,
|
||||
DefaultBaseURL: "https://wsa.tencentcloudapi.com",
|
||||
DefaultBaseURL: "https://fake-next.example",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,11 +237,12 @@ func TestWebSearchProviderFromEnvSeedLayer(t *testing.T) {
|
||||
// --- ③ 没有 env 字段的家:只认文件(本片的**核心判据**) ----------------------
|
||||
|
||||
// TestWebSearchProviderWithoutEnvFieldIsProjected 是判据 ③ 的投影层:**没有 env 字段的家**
|
||||
// (测试专用的假接入位 `tencent_wsa`)在文件里有 key ⇒ 照样被投影出生效配置。
|
||||
// (测试专用的假接入位 `fake_next_provider`)在文件里有 key ⇒ 照样被投影出生效配置。
|
||||
//
|
||||
// 这条判据就是本片存在的理由:旧形状的逐家 switch 只认 `.env` 字段表里的 6 家,第 7 家
|
||||
// 想进来只能先加 env 键(破红线)。新形状按**接入位表**逐家投影,因此第 7 家只需在
|
||||
// `plugins/tools/io/search` 登记(加一个接入位文件 + 表里一行),组合根零改动。
|
||||
// `plugins/tools/io/search` 登记(加一个接入位文件 + 表里一行),组合根零改动
|
||||
// —— 本片新接的 `tencent_wsa` / `metaso` 走的正是这条路(它们没有 env 键)。
|
||||
//
|
||||
// 最后一跳(进注册表)由同文件的 TestWebSearchFileOnlyProviderEntersRegistry 用真实接入位
|
||||
// 走完:注册表按名字查的正是同一张接入位表。
|
||||
@@ -252,7 +257,7 @@ func TestWebSearchProviderWithoutEnvFieldIsProjected(t *testing.T) {
|
||||
t.Fatalf("前提被破坏:%s 不该出现在 .env 的字段表里", fake.Name)
|
||||
}
|
||||
}
|
||||
// 前提二:它确实还没登记(登记工作是下一片的:加接入位文件 + 表里一行)。
|
||||
// 前提二:它确实还没登记(假接入位的全部意义就在于此)。
|
||||
if search.Known(fake.Name) {
|
||||
t.Fatalf("前提被破坏:假接入位 %s 不该已经登记", fake.Name)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user