refactor(search): provider 配置面去 env 化 —— 加新家不再需要动 .env
动因:`.env` 已冻结(基础键不加/不改/不删),而「加一家 provider」原本会逼出 新的 env 键(一家一个 struct 字段 + searchProviderVector 逐家读 + 逐家写死的 switch)⇒ 想接腾讯云元宝/秘塔就只能破红线。面板本来就该是插件配置的一等来源 ($DATA_DIR/config/plugins/web-search.json),故让**文件成为权威**。 - plugins/tools/io/search/registry.go:接入位表加 defaultBaseURL(「没配 baseUrl 回落代码默认值」从此只有一个出处);新增 Descriptor(s)/DefaultBaseURL。 - cmd/cyrene/websearch_providers.go(新):按接入位表逐家算出生效投影 —— 加一家时这里**零改动**,这正是本片的核心;顺手把 wire_io_tools.go 从 430 行 降到 342(它逼近 §10 的 500 行上限)。 - cmd/cyrene/wire_plugin_actions.go / websearch_action_data.go / websearch_selection.go:基地址判定统一走「文件值 → 接入位默认值」的进位链; checkPrimaryUsable 判据不放松(真没配齐仍 400 primary_not_configured)。 🔴 **一处对我任务书的纠正(子代理提出、我采纳)**:我要求「既有 6 家在文件里 没有该条目时仍回落 .env」。仓库现状**没有**这层回落,且有回归用例把它钉死 (TestWireIOTools_PanelConfigClearedProviderDoesNotReviveFromEnv:「文件里没有 的家不得从 .env 复活」)。本片按「不改变既有行为」实现 —— 我的要求才是错的: 文件一旦存在就是权威,env 只在文件缺失/为空时播种。 验收(主会话复跑 + 亲自变异):go build ./... + 两包 vet 绿;search 包与 cmd/cyrene 全绿;我用 -overlay 让文件里的 apiKey 被忽略 ⇒ 4 条用例变红 (含「无 env 字段的家只认文件也能进注册表」这条核心判据)。 ⚠️ 新家仍未接:腾讯云元宝(tencent_wsa)/ 秘塔(metaso)两片随后串行落地。
This commit is contained in:
1 parent
e5e5207c94
commit
bc1dee3f56
8 files changed
+825
-175
No files matched your search
@@ -252,29 +252,12 @@ func maskedProviderEntry(f runtimeconfig.WebSearchFile, name string) (runtimecon
|
||||
}
|
||||
|
||||
// effectiveBaseURL 给出一条配置**实际会用的**基地址:盘上有就用盘上的,没有就回落到
|
||||
// 代码默认值(各云家的厂商默认地址)。
|
||||
// **该接入位的代码默认基地址**(`plugins/tools/io/search` 的接入位表,唯一出处)。
|
||||
//
|
||||
// searxng 不回落(空地址 = 关掉这家,回落会让「清空地址」变成假话)—— 与
|
||||
// `effectiveSearchConfig` 的同一条权威边界。
|
||||
// 进位链与装配期**同一个函数**(resolveBaseURL):searxng 的默认基地址是空 —— 它的地址
|
||||
// 为空本身就是「关掉这家」,回落会让「清空地址」变成假话。
|
||||
func (e webSearchActionEnv) effectiveBaseURL(name string, entry runtimeconfig.ProviderEntry) string {
|
||||
if base := strings.TrimSpace(entry.BaseURL); base != "" {
|
||||
return base
|
||||
}
|
||||
if strings.EqualFold(name, search.NameSearXNG) {
|
||||
return ""
|
||||
}
|
||||
return e.defaultBaseURL(name)
|
||||
}
|
||||
|
||||
// defaultBaseURL 取某家云 provider 的代码默认基地址(来自 `.env` 解析后的配置,未写该键
|
||||
// 时就是标签默认值)。名字表复用组合根既有那张(`searchProviderVector`),不新造一份。
|
||||
func (e webSearchActionEnv) defaultBaseURL(name string) string {
|
||||
for _, p := range searchProviderVector(e.envCfg) {
|
||||
if strings.EqualFold(p.Name, name) {
|
||||
return strings.TrimSpace(p.BaseURL)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
return resolveBaseURL(name, entry.BaseURL)
|
||||
}
|
||||
|
||||
// probeTimeout 给出一次探针的超时上限:面板文件的 timeout 优先(面板里刚存的就是它),
|
||||
|
||||
Reference in new issue
Block a user