dsh-web-search-pro 0.2.0 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +179 -0
- package/README.md +197 -32
- package/assets/skills/dsh-web-search-pro/SKILL.md +14 -13
- package/assets/skills/dsh-web-search-pro/references/config.md +36 -0
- package/assets/skills/dsh-web-search-pro/references/sources.md +19 -4
- package/assets/skills/dsh-web-search-pro/references/troubleshooting.md +3 -1
- package/catalog/sources.v1.json +22 -12
- package/lib/actions/approval.js +50 -1
- package/lib/actions/approval.js.map +1 -1
- package/lib/actions/config.js +274 -0
- package/lib/actions/config.js.map +1 -0
- package/lib/actions/errors.js +8 -1
- package/lib/actions/errors.js.map +1 -1
- package/lib/actions/format.js +10 -0
- package/lib/actions/format.js.map +1 -1
- package/lib/actions/index-view.js +2 -2
- package/lib/actions/index-view.js.map +1 -1
- package/lib/actions/read.js +7 -3
- package/lib/actions/read.js.map +1 -1
- package/lib/actions/registry.js +3 -1
- package/lib/actions/registry.js.map +1 -1
- package/lib/actions/run.js +2 -2
- package/lib/actions/run.js.map +1 -1
- package/lib/actions/schema.js +18 -0
- package/lib/actions/schema.js.map +1 -1
- package/lib/actions/search.js +12 -6
- package/lib/actions/search.js.map +1 -1
- package/lib/actions/sources.js +116 -41
- package/lib/actions/sources.js.map +1 -1
- package/lib/actions/types.js +19 -1
- package/lib/actions/types.js.map +1 -1
- package/lib/browser-access.js +25 -0
- package/lib/browser-access.js.map +1 -1
- package/lib/catalog/recommend.js +11 -3
- package/lib/catalog/recommend.js.map +1 -1
- package/lib/catalog/schema.js +3 -1
- package/lib/catalog/schema.js.map +1 -1
- package/lib/cli/builtin-specs.js +341 -0
- package/lib/cli/builtin-specs.js.map +1 -0
- package/lib/cli/chain.js +193 -0
- package/lib/cli/chain.js.map +1 -0
- package/lib/cli/chains-spec.js +118 -0
- package/lib/cli/chains-spec.js.map +1 -0
- package/lib/cli/engine.js +99 -0
- package/lib/cli/engine.js.map +1 -0
- package/lib/cli/opencli-sites.js +83 -0
- package/lib/cli/opencli-sites.js.map +1 -0
- package/lib/cli/opencli.js +153 -0
- package/lib/cli/opencli.js.map +1 -0
- package/lib/cli/probe.js +128 -0
- package/lib/cli/probe.js.map +1 -0
- package/lib/cli/runner.js +564 -0
- package/lib/cli/runner.js.map +1 -0
- package/lib/cli/spec.js +496 -0
- package/lib/cli/spec.js.map +1 -0
- package/lib/cli/time-text.js +79 -0
- package/lib/cli/time-text.js.map +1 -0
- package/lib/cli/trial.js +57 -0
- package/lib/cli/trial.js.map +1 -0
- package/lib/client/SettingsCard.js +14 -32
- package/lib/client/SettingsCard.js.map +1 -1
- package/lib/client/agent-mark.js +27 -0
- package/lib/client/agent-mark.js.map +1 -0
- package/lib/client/card-frame.js +118 -0
- package/lib/client/card-frame.js.map +1 -0
- package/lib/client/cli-form.js +257 -0
- package/lib/client/cli-form.js.map +1 -0
- package/lib/client/field-docs.js +130 -0
- package/lib/client/field-docs.js.map +1 -0
- package/lib/client/field-keys.js +81 -0
- package/lib/client/field-keys.js.map +1 -0
- package/lib/client/field-rows.js +71 -0
- package/lib/client/field-rows.js.map +1 -0
- package/lib/client/fill.js +3 -0
- package/lib/client/fill.js.map +1 -0
- package/lib/client/form-specs.js +15 -1
- package/lib/client/form-specs.js.map +1 -1
- package/lib/client/form.js +296 -27
- package/lib/client/form.js.map +1 -1
- package/lib/client/group-advanced.js +23 -0
- package/lib/client/group-advanced.js.map +1 -0
- package/lib/client/group-agent.js +28 -0
- package/lib/client/group-agent.js.map +1 -0
- package/lib/client/group-cli.js +136 -0
- package/lib/client/group-cli.js.map +1 -0
- package/lib/client/group-common.js +29 -0
- package/lib/client/group-common.js.map +1 -0
- package/lib/client/group-judge.js +67 -0
- package/lib/client/group-judge.js.map +1 -0
- package/lib/client/group-order.js +201 -0
- package/lib/client/group-order.js.map +1 -0
- package/lib/client/group-runtime.js +33 -0
- package/lib/client/group-runtime.js.map +1 -0
- package/lib/client/group-sources.js +83 -0
- package/lib/client/group-sources.js.map +1 -0
- package/lib/client/groups-basic.js +36 -0
- package/lib/client/groups-basic.js.map +1 -0
- package/lib/client/index.js.map +1 -1
- package/lib/client/json-list.js +50 -0
- package/lib/client/json-list.js.map +1 -0
- package/lib/client/locales.js +666 -215
- package/lib/client/locales.js.map +1 -1
- package/lib/client/order.js +192 -0
- package/lib/client/order.js.map +1 -0
- package/lib/client/overlay-ops.js +46 -0
- package/lib/client/overlay-ops.js.map +1 -0
- package/lib/client/sources-table.js +1 -0
- package/lib/client/sources-table.js.map +1 -1
- package/lib/client/styles.js +74 -47
- package/lib/client/styles.js.map +1 -1
- package/lib/client/text-view.js +98 -0
- package/lib/client/text-view.js.map +1 -0
- package/lib/client/ui-kit.js +120 -0
- package/lib/client/ui-kit.js.map +1 -0
- package/lib/client/validators.js +22 -0
- package/lib/client/validators.js.map +1 -1
- package/lib/client.js +9151 -1987
- package/lib/client.js.map +1 -1
- package/lib/config-fillers.js +53 -0
- package/lib/config-fillers.js.map +1 -0
- package/lib/config-groups.js +49 -0
- package/lib/config-groups.js.map +1 -0
- package/lib/config.js +87 -107
- package/lib/config.js.map +1 -1
- package/lib/default-chain.js +66 -0
- package/lib/default-chain.js.map +1 -0
- package/lib/deps.js +109 -102
- package/lib/deps.js.map +1 -1
- package/lib/engine-error.js +19 -0
- package/lib/engine-error.js.map +1 -0
- package/lib/engines.js +32 -115
- package/lib/engines.js.map +1 -1
- package/lib/fetch.js +23 -4
- package/lib/fetch.js.map +1 -1
- package/lib/index.js +30 -5
- package/lib/index.js.map +1 -1
- package/lib/overlay-types.js +88 -0
- package/lib/overlay-types.js.map +1 -0
- package/lib/overlay.js +683 -0
- package/lib/overlay.js.map +1 -0
- package/lib/pipeline/candidates.js +27 -1
- package/lib/pipeline/candidates.js.map +1 -1
- package/lib/pipeline/compile.js +63 -0
- package/lib/pipeline/compile.js.map +1 -1
- package/lib/pipeline/confidence.js +64 -0
- package/lib/pipeline/confidence.js.map +1 -0
- package/lib/pipeline/fusion.js +50 -3
- package/lib/pipeline/fusion.js.map +1 -1
- package/lib/pipeline/plan.js +2 -2
- package/lib/pipeline/plan.js.map +1 -1
- package/lib/pipeline/render.js +20 -2
- package/lib/pipeline/render.js.map +1 -1
- package/lib/pipeline/run.js +21 -7
- package/lib/pipeline/run.js.map +1 -1
- package/lib/pipeline/sources-spec.js +19 -3
- package/lib/pipeline/sources-spec.js.map +1 -1
- package/lib/providers/builtin.js +13 -14
- package/lib/providers/builtin.js.map +1 -1
- package/lib/providers/deepseek.js +348 -0
- package/lib/providers/deepseek.js.map +1 -0
- package/lib/providers/http.js.map +1 -1
- package/lib/providers/keyed-meta.js +7 -0
- package/lib/providers/keyed-meta.js.map +1 -1
- package/lib/providers/platforms.js +118 -58
- package/lib/providers/platforms.js.map +1 -1
- package/lib/providers/registry.js.map +1 -1
- package/lib/restart.js +47 -0
- package/lib/restart.js.map +1 -0
- package/lib/router.js +203 -27
- package/lib/router.js.map +1 -1
- package/lib/rpc-types.js +15 -0
- package/lib/rpc-types.js.map +1 -0
- package/lib/rpc.js +85 -0
- package/lib/rpc.js.map +1 -0
- package/lib/tools.js +10 -4
- package/lib/tools.js.map +1 -1
- package/lib/types/actions/approval.d.ts +11 -0
- package/lib/types/actions/config.d.ts +54 -0
- package/lib/types/actions/format.d.ts +9 -2
- package/lib/types/actions/run.d.ts +1 -0
- package/lib/types/actions/schema.d.ts +7 -1
- package/lib/types/actions/sources.d.ts +29 -3
- package/lib/types/actions/types.d.ts +28 -2
- package/lib/types/browser-access.d.ts +17 -0
- package/lib/types/catalog/recommend.d.ts +4 -0
- package/lib/types/catalog/schema.d.ts +2 -0
- package/lib/types/cli/builtin-specs.d.ts +38 -0
- package/lib/types/cli/chain.d.ts +83 -0
- package/lib/types/cli/chains-spec.d.ts +48 -0
- package/lib/types/cli/engine.d.ts +50 -0
- package/lib/types/cli/opencli-sites.d.ts +24 -0
- package/lib/types/cli/opencli.d.ts +77 -0
- package/lib/types/cli/probe.d.ts +53 -0
- package/lib/types/cli/runner.d.ts +126 -0
- package/lib/types/cli/spec.d.ts +269 -0
- package/lib/types/cli/time-text.d.ts +12 -0
- package/lib/types/cli/trial.d.ts +19 -0
- package/lib/types/client/SettingsCard.d.ts +17 -1
- package/lib/types/client/agent-mark.d.ts +22 -0
- package/lib/types/client/card-frame.d.ts +35 -0
- package/lib/types/client/cli-form.d.ts +97 -0
- package/lib/types/client/field-docs.d.ts +15 -0
- package/lib/types/client/field-keys.d.ts +41 -0
- package/lib/types/client/field-rows.d.ts +70 -0
- package/lib/types/client/fill.d.ts +2 -0
- package/lib/types/client/form-specs.d.ts +12 -3
- package/lib/types/client/form.d.ts +79 -1
- package/lib/types/client/group-advanced.d.ts +9 -0
- package/lib/types/client/group-agent.d.ts +20 -0
- package/lib/types/client/group-cli.d.ts +52 -0
- package/lib/types/client/group-common.d.ts +12 -0
- package/lib/types/client/group-judge.d.ts +17 -0
- package/lib/types/client/group-order.d.ts +26 -0
- package/lib/types/client/group-runtime.d.ts +15 -0
- package/lib/types/client/group-sources.d.ts +46 -0
- package/lib/types/client/groups-basic.d.ts +18 -0
- package/lib/types/client/index.d.ts +8 -0
- package/lib/types/client/json-list.d.ts +21 -0
- package/lib/types/client/locales.d.ts +1079 -196
- package/lib/types/client/order.d.ts +102 -0
- package/lib/types/client/overlay-ops.d.ts +37 -0
- package/lib/types/client/styles.d.ts +56 -41
- package/lib/types/client/text-view.d.ts +22 -0
- package/lib/types/client/ui-kit.d.ts +200 -0
- package/lib/types/client/validators.d.ts +6 -0
- package/lib/types/config-fillers.d.ts +9 -0
- package/lib/types/config-groups.d.ts +23 -0
- package/lib/types/config.d.ts +265 -216
- package/lib/types/default-chain.d.ts +63 -0
- package/lib/types/deps.d.ts +25 -23
- package/lib/types/engine-error.d.ts +12 -0
- package/lib/types/engines.d.ts +45 -10
- package/lib/types/fetch.d.ts +12 -3
- package/lib/types/index.d.ts +164 -146
- package/lib/types/overlay-types.d.ts +98 -0
- package/lib/types/overlay.d.ts +141 -0
- package/lib/types/pipeline/candidates.d.ts +19 -0
- package/lib/types/pipeline/compile.d.ts +11 -0
- package/lib/types/pipeline/confidence.d.ts +35 -0
- package/lib/types/pipeline/fusion.d.ts +23 -1
- package/lib/types/pipeline/render.d.ts +16 -0
- package/lib/types/pipeline/run.d.ts +3 -1
- package/lib/types/pipeline/sources-spec.d.ts +5 -2
- package/lib/types/pipeline/types.d.ts +37 -0
- package/lib/types/providers/deepseek.d.ts +130 -0
- package/lib/types/providers/http.d.ts +2 -1
- package/lib/types/providers/keyed-meta.d.ts +5 -0
- package/lib/types/providers/platforms.d.ts +15 -3
- package/lib/types/providers/registry.d.ts +10 -0
- package/lib/types/restart.d.ts +52 -0
- package/lib/types/router.d.ts +69 -9
- package/lib/types/rpc-types.d.ts +79 -0
- package/lib/types/rpc.d.ts +41 -0
- package/lib/types/tools.d.ts +6 -0
- package/lib/types/util.d.ts +16 -1
- package/lib/util.js +17 -4
- package/lib/util.js.map +1 -1
- package/package.json +51 -43
- package/scripts/check-client-bundle.mjs +1 -1
- package/scripts/cli-login-check.mjs +214 -0
- package/lib/client/RubricEditor.js +0 -47
- package/lib/client/RubricEditor.js.map +0 -1
- package/lib/client/fields.js +0 -31
- package/lib/client/fields.js.map +0 -1
- package/lib/types/client/RubricEditor.d.ts +0 -6
- package/lib/types/client/fields.d.ts +0 -65
package/lib/client/locales.js
CHANGED
|
@@ -1,226 +1,677 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two dictionaries of the settings card. Each field has a label, a one-line hint (`<key>Hint`) and, where the explanation
|
|
3
|
+
* is longer, a `?` text (`<key>Help`); the keys are named in field-keys.ts. A test pins both dictionaries to the same keys and
|
|
4
|
+
* to every key the card asks for.
|
|
5
|
+
* @module web-search-pro/client/locales
|
|
6
|
+
*/
|
|
1
7
|
export const zh = {
|
|
2
8
|
tab: 'Web Search Pro',
|
|
3
9
|
title: 'Web Search Pro',
|
|
4
|
-
description: '
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
10
|
+
description: '搜索引擎、来源与 Key、评分模型、读取与缓存、平台规则',
|
|
11
|
+
lang: 'zh',
|
|
12
|
+
readOnly: '当前设置文档为只读,无法保存修改。',
|
|
13
|
+
unavailable: '设置暂时不可用:宿主没有提供这个插件的配置表单。',
|
|
14
|
+
reset: '恢复默认', overridden: '已覆盖', overriddenCount: '{n} 项已覆盖', invalid: '输入值无效,请检查范围或格式。', invalidJson: 'JSON 无效;必须是一个对象。', helpLabel: '更多说明',
|
|
15
|
+
edit: '编辑', close: '关闭', done: '完成', emptyDefault: '(默认)', optionOff: 'off', chipRemove: '移除',
|
|
16
|
+
save: '保存', saving: '保存中…', discardChanges: '放弃修改', saveFailed: 'Host 未接受全部修改;草稿已保留,请检查冲突或日志。',
|
|
17
|
+
savebarClean: '没有未保存的修改', savebarDirty: '{n} 项未保存的修改', savebarInvalid: '有无效的输入,修正后才能保存',
|
|
18
|
+
dialogStagesNote: '这里的修改先留在草稿里,点页面底部的“保存”才写入。',
|
|
19
|
+
// summary
|
|
20
|
+
summaryTitle: '当前状态', summaryChain: '默认引擎链', summaryChainEmpty: '(空)', summaryKeys: '已配置 Key 的来源 {n}/{m}', summaryReady: '已就绪', summaryNoKey: '未配置 Key',
|
|
21
|
+
summaryRouteOn: '内置 web 工具:经本插件', summaryRouteOff: '内置 web 工具:未接入', summaryJudge: '评分模型', summarySurface: '工具面',
|
|
22
|
+
summaryWarnings: '{n} 条提示', summaryNoWarnings: '无提示', summaryDetails: '查看详情', warningsTitle: '需要注意的设置', warningsNone: '当前草稿没有校验提示。',
|
|
23
|
+
// units and risks
|
|
24
|
+
unitMs: '毫秒', unitSeconds: '秒', unitChars: '字符', unitCount: '', unitTokens: 'token', unitDays: '天',
|
|
25
|
+
riskNetwork: '网络', riskBilled: '计费', riskModel: '调用模型',
|
|
26
|
+
// groups
|
|
27
|
+
groupCommon: '常用', groupCommonSub: '默认引擎链、结果数、工具面、代理 fake-IP、DeepSeek 搜索',
|
|
28
|
+
groupSources: '来源', groupSourcesSub: '排序策略与每个来源的 Key、地址、请求额度',
|
|
29
|
+
groupReading: '读取与证据', groupReadingSub: '读页字数、补搜轮数、按语言自动选来源',
|
|
30
|
+
groupJudge: '评分模型', groupJudgeSub: '可选的付费 / 本地模型与提示词(默认关闭)',
|
|
31
|
+
groupRoute: '内置 web 工具路由', groupRouteSub: '让宿主内置 web_search / web_fetch 经过本插件',
|
|
32
|
+
groupRuntime: '运行时与后端', groupRuntimeSub: 'CLI / OpenCLI、Twitter 登录值、后端链、平台与浏览器绑定',
|
|
33
|
+
groupNetwork: '网络与缓存', groupNetworkSub: '超时、缓存有效期、数据库路径、诊断日志',
|
|
34
|
+
groupRanking: '排序加权', groupRankingSub: '多来源融合的排名常数与时效 / 权威加分(高级)',
|
|
35
|
+
groupAdvanced: '高级:文本模式', groupAdvancedSub: '带注释的 YAML 视图,可复制',
|
|
36
|
+
// common
|
|
37
|
+
chainNow: '实际尝试顺序:', chainEmpty: '没有可用的引擎', commonDeepseekTitle: 'DeepSeek 搜索 / 抓取(常用)', commonBadge: '常用',
|
|
38
|
+
engines: '默认引擎链', enginesHint: '从上到下依次尝试;用箭头调整顺序。', enginesHelp: '例如 ddg、bing、exa、seam、jina。保持默认列表时,DeepSeek Key 就绪会把 deepseek 排最前;你自己写的列表按所写顺序,调用里的 engines 永远最优先。',
|
|
39
|
+
searchMaxResults: '默认结果数', searchMaxResultsHint: '1–20;调用没写 count 时用。',
|
|
40
|
+
parallelEngines: '并行融合多个引擎', parallelEnginesHint: '同时查全部默认引擎并融合,而非依次回退。',
|
|
41
|
+
toolSurface: '工具面', toolSurfaceHint: '模型看到的工具形态;启动时读取。', toolSurfaceHelp: 'indexed:只暴露 web_index / web_call,常驻文本最少(默认)。flat:每个动作一个工具,仅用于对比和调试。改完需重启。', optIndexed: 'indexed · 两个入口(默认)', optFlat: 'flat · 每动作一个工具(调试)',
|
|
42
|
+
allowProxyFakeIp: '允许代理 fake-IP DNS', allowProxyFakeIpHint: 'Clash / TUN 下搜索报“fake-IP”时打开。', allowProxyFakeIpHelp: '开着 Clash / TUN 等代理时,若搜索报“地址被拦截 / 私网地址”,且域名被解析成 198.18.x.x,就打开它:只信任 fake-IP 段(198.18/15、fdfe:dcba:9876::/64、2001:2::/48),字面 IP、localhost 与其他私网仍被拒绝。',
|
|
43
|
+
deepseekFetch: '用 DeepSeek Fetch 读取网页', deepseekFetchHint: '默认关闭;按请求计费。', deepseekFetchHelp: '开启后 read.fetch 在 Jina、直连都没拿到正文时,改用 DeepSeek Fetch API(每 1000 次成功请求 $0.75,空结果与失败不计费),之后才轮到浏览器渲染;也可显式用 mode=deepseek。与 DeepSeek 搜索共用同一个 Key。',
|
|
44
|
+
// sources
|
|
45
|
+
strategyGroup: '来源策略', strategyNote: '顺序:调用里的 engines / platform 最优先 → 下面的“优先来源” → 你配置了 Key 的来源(“常用”的 DeepSeek 排最前)→ 匿名 / 免费默认。付费来源只在配置了 Key 才会用到。',
|
|
46
|
+
sourcePolicy: '来源策略', sourcePolicyHint: '是否允许自动规划用需要 Key 的来源。', sourcePolicyHelp: 'default:按上述顺序。anonymous-only:即使配置了 Key,自动规划也绝不使用需要 Key、账号或登录的来源(调用里明确指定的仍可用)。',
|
|
47
|
+
optPolicyDefault: 'default · 按顺序(默认)', optPolicyAnonymousOnly: 'anonymous-only · 只用匿名来源',
|
|
48
|
+
srcPriority: '优先来源', srcPriorityHint: '按顺序排最前的来源 id。', srcPriorityHelp: '仅限就绪且适合任务语言与 profile 的来源;例:deepseek, exa。留空 = 不指定。调用里的 engines 仍最优先。',
|
|
49
|
+
srcDisabled: '停用来源', srcDisabledHint: '自动规划与默认引擎链都不再用它们。', srcDisabledHelp: '调用里明确指定的来源仍可用。想关掉按量计费的 DeepSeek 默认,就在这里写 deepseek。',
|
|
50
|
+
sourcesListTitle: '需要 Key 或地址的来源', sourcesListHint: '点“编辑”设置 Key 引用名、Key、地址与请求额度;Key 写入 DSH Credentials,页面从不显示明文。',
|
|
51
|
+
tierPaid: '付费', tierFree: '有免费额度', tierAnonymous: '免 Key', sourceConfigured: '已设置', sourceNotConfigured: '未设置',
|
|
52
|
+
sourceMetaRef: 'Key 引用名 {ref}', sourceMetaCapped: '已设请求上限', sourceMetaNoUrl: '未设置地址',
|
|
53
|
+
sourceDialogTitle: '{name}', sourceResetAll: '恢复本项默认',
|
|
54
|
+
sourceNoteDeepseek: 'DeepSeek 搜索 / 抓取,“常用”来源:有 Key 时中英文都排第一。按请求计费:每 1000 次成功请求 $0.75,空结果与失败不计费;插件直接调用按会计费处理。与 DeepSeek 模型用同一个 DEEPSEEK_API_KEY。页面读取开关在“常用”组。',
|
|
55
|
+
sourceNoteBocha: '博查:中文搜索,付费。账号没有搜索余额时返回 403。', sourceNoteExa: 'Exa:有 Key 走原生 API;没有 Key 时可经 mcporter 的 MCP 回退。', sourceNoteJina: 'Jina:搜索与页面读取;每个新 Key 有一次性免费额度。', sourceNoteGithub: 'GitHub Token 可选,只用来提高 API 限额。', sourceNoteSearxng: '自建 SearXNG 实例(需开启 JSON 格式);设置地址后才有 searxng 来源,无内置公共实例。',
|
|
56
|
+
sourceNoteKeyed: '填入 Key 引用名即可启用;没有 Key 前该来源不可用。地址只在使用代理或私有网关时覆盖。',
|
|
57
|
+
keyedEnv: 'Key 引用名', keyedEnvHint: '凭据 / 环境变量名;留空用默认:', keyedBaseUrl: '接口地址', keyedBaseUrlHint: '留空用内置地址;须为 http(s) URL。', keyedApiKey: 'API Key',
|
|
58
|
+
credentialWriteOnlyHint: '只写输入;留空不会覆盖已保存的密钥。', credentialReadOnlyHint: '当前凭据服务只读,无法在这里写入。', credentialChecking: '检查中…', credentialSet: '已配置', credentialUnset: '未配置',
|
|
59
|
+
bochaApiKeyEnv: '博查 Key 引用名', bochaApiKeyEnvHint: '凭据 / 环境变量名;留空用默认:BOCHA_SEARCH_API_KEY。',
|
|
60
|
+
bochaBaseUrl: '博查接口地址', bochaBaseUrlHint: '默认 https://api.bocha.cn;须为 http(s) URL。',
|
|
61
|
+
bochaSummary: '请求博查长摘要', bochaSummaryHint: '默认开启。', bochaSummaryHelp: '长摘要更利于证据评分;关闭可减少返回体。',
|
|
62
|
+
exaApiKeyEnv: 'Exa Key 引用名', exaApiKeyEnvHint: '凭据 / 环境变量名;留空用默认:EXA_API_KEY。',
|
|
63
|
+
jinaApiKeyEnv: 'Jina Key 引用名', jinaApiKeyEnvHint: '凭据 / 环境变量名;留空用默认:JINA_API_KEY。',
|
|
64
|
+
githubTokenEnv: 'GitHub Token 引用名', githubTokenEnvHint: '凭据 / 环境变量名;留空用默认:GITHUB_TOKEN。',
|
|
65
|
+
searxngUrl: 'SearXNG 地址', searxngUrlHint: '自建实例的 http(s) 地址。',
|
|
66
|
+
openalexMailto: 'OpenAlex 联系邮箱', openalexMailtoHint: '写进请求的 User-Agent,礼貌性,可留空。',
|
|
67
|
+
reqBudgetGroup: '请求额度(可选)', reqBudgetNote: '为这个来源设请求上限,计入用量账本(重启后仍有效);用完后它被跳过并回退到其他来源,不是错误。默认没有上限。',
|
|
68
|
+
reqTotal: '总量上限', reqTotalHint: '累计最多请求次数;留空 = 不限。', reqTotalHelp: '例:博查账号有 1000 次,可设总量 1000、每日 50。已用 / 剩余见 web_call sources.status。',
|
|
69
|
+
reqDaily: '每日上限', reqDailyHint: '每个自然日最多次数;留空 = 不限。', reqDailyHelp: '日界线取评分用量上限里的时区。已用 / 剩余见 web_call sources.status。',
|
|
70
|
+
anonymousTitle: '匿名来源(无需 Key)', anonymousHint: '参考表,不代表此刻可用', anonymousName: '来源', anonymousUse: '用途', sourcesStatusLine: '各来源的实时就绪状态(安装、Key、最近一次成功)由 web_call sources.status 显示。',
|
|
71
|
+
srcUseDdg: '通用网页,默认首选', srcUseBing: '通用网页,与 DuckDuckGo 互补', srcUseWikipedia: '百科事实,中英文', srcUseHackernews: '英文技术讨论与经验', srcUseStackexchange: '编程问答(Stack Overflow)',
|
|
72
|
+
srcUseOpenalex: '学术论文索引', srcUseSemanticscholar: '学术论文;匿名额度常被占满', srcUseAnysearch: '匿名通用搜索,额度有限', srcUseArxiv: '预印本论文', srcUsePubmed: '生物医学文献', srcUseV2ex: '中文社区讨论',
|
|
73
|
+
// reading
|
|
74
|
+
fetchDefaultChars: '页面读取默认字数', fetchDefaultCharsHint: 'read.fetch 单次上限,1000–500000。',
|
|
75
|
+
exaContentsPerUrlChars: 'Exa 正文单 URL 上限', exaContentsPerUrlCharsHint: 'read.contents 每个 URL,至少 500。',
|
|
76
|
+
exaContentsTotalChars: 'Exa 正文总上限', exaContentsTotalCharsHint: 'read.contents 一次调用总计,至少 1000。',
|
|
77
|
+
evAutoProviders: '按语言自动选来源', evAutoProvidersHint: '擅长任务语言的就绪来源排到前面。', evAutoProvidersHelp: '就绪且擅长任务语言的来源(DeepSeek、博查、Exa 等)排到 profile 表前;关闭则完全按表与 engines。',
|
|
78
|
+
evMaxRounds: '最多检索轮数', evMaxRoundsHint: '1 = 不补搜;默认 2。', evMaxQueries: '每任务最多搜索请求', evMaxQueriesHint: '含全部轮次;默认 4。',
|
|
54
79
|
evidenceNote: '保底保留条数(minKeep,3)与证据包字符预算是插件内置默认或每次调用的参数(search.run 的 budget),没有配置项。',
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
rubricActive: '生效版本', rubricBuiltin: '内置', rubricOverrideOn: '已覆盖', rubricCreate: '从内置文本开始覆盖', rubricRestore: '恢复默认',
|
|
74
|
-
rubricVersion: '版本号', rubricVersionHint: '字母数字与 . _ -,至多 32 字符,且不同于内置版本。',
|
|
75
|
-
rubricInstructions: '提示词模板', rubricInstructionsHint: '只能用 {task} {need} {constraint} {candidate} 中该 rubric 允许的变量,且必须含必需变量。',
|
|
76
|
-
rubricCriteria: '评分等级(每行一级,由低到高)', rubricCriteriaHint: '仅评分类 rubric,2–10 级。',
|
|
80
|
+
// judge
|
|
81
|
+
judgeMode: '评分模式', judgeModeHint: '默认 off:不调用任何模型。', judgeModeHelp: 'off 不调用;shadow 只记录对照;control 由模型决定;hybrid 规则为主、模型复评跨语言(及边界)对。同时写入旧键 jevMode / scorer。开启前请确认 Key 与用量上限。', optShadow: 'shadow · 只观察', optControl: 'control · 模型决定', optHybrid: 'hybrid · 混合',
|
|
82
|
+
judgeProvider: '评分 provider', judgeProviderHint: '默认 bocha-jev;预设与自定义 id 可选。',
|
|
83
|
+
hybridBorderline: 'hybrid:边界对也复评', hybridBorderlineHint: '成本约翻倍。', hybridBorderlineHelp: '规则评分为 1 的对也交给模型。',
|
|
84
|
+
maxJevQuestions: '每次搜索最多提问数', maxJevQuestionsHint: '(需求, 文本块)对上限,默认 64。',
|
|
85
|
+
allowLlm: '允许 llm 协议', allowLlmHint: '默认关闭;llm 协议的 provider 要先开它。', allowLlmHelp: '通用 LLM 调用会消耗 token;只在确实要用 llm 协议的 provider 时打开。',
|
|
86
|
+
judgeGroupCoverage: '覆盖判定', judgeGroupCoverageHint: '模型判断摘录是否够答', judgeGroupBudget: '用量上限', judgeGroupBudgetHint: '单次与每日 token', judgeGroupProviders: '自定义评分 provider',
|
|
87
|
+
coverageMode: '覆盖判定模式', coverageModeHint: '默认 off;不随评分模式开启。', coverageModeHelp: 'off(默认);shadow 记录概率;control 把弱支持降级为缺口。',
|
|
88
|
+
coverageProvider: '覆盖判定 provider', coverageProviderHint: '默认同评分 provider。',
|
|
89
|
+
thresholdWeak: '弱阈值', thresholdWeakHint: '概率低于它判为弱;留空用校准值。', thresholdWeakHelp: '留空时用随插件发布的、仅对 bocha-jev + cover.sufficient v1 校准过的值。两个阈值要同时填写,弱 ≤ 覆盖。',
|
|
90
|
+
thresholdCovered: '覆盖阈值', thresholdCoveredHint: '概率不低于它判为覆盖。',
|
|
91
|
+
budgetPerSearch: '单次搜索输入上限', budgetPerSearchHint: '默认 60000;0 = 不调用。', budgetDaily: '每日输入上限', budgetDailyHint: '默认 1000000。', budgetTimezone: '日界时区', budgetTimezoneHint: 'IANA 名称;留空用系统时区。',
|
|
92
|
+
budgetProviders: '按 provider 的上限', budgetProvidersHint: 'JSON;与全局上限取更严者。', judgeProviders: '自定义 provider', judgeProvidersHint: 'JSON;按 id 定义协议、地址、模型、keyRef。',
|
|
93
|
+
rubricsTitle: '提示词(rubric)', rubricNotes: '评分与覆盖判定向模型提的问题文本。覆盖必须换新版本号;改动会改变问题哈希,旧缓存不再复用;无效的覆盖会被忽略。',
|
|
94
|
+
rubricActive: '生效版本', rubricOverrideOn: '已覆盖', rubricCreate: '从默认文本开始覆盖', rubricRestore: '恢复默认', rubricDialogTitle: '编辑提示词:{name}',
|
|
95
|
+
rubricVersion: '版本号', rubricVersionHint: '字母数字与 . _ -,至多 32 字符,须不同于内置。',
|
|
96
|
+
rubricInstructions: '提示词模板', rubricInstructionsHint: '只能用该 rubric 允许的变量,且含必需变量。',
|
|
97
|
+
rubricCriteria: '评分等级', rubricCriteriaHint: '每行一级,由低到高;仅评分类,2–10 级。',
|
|
77
98
|
rubricMaxState: '任务描述字符上限', rubricMaxStateHint: '20–2000。', rubricMaxCandidate: '候选文本字符上限', rubricMaxCandidateHint: '100–8000。',
|
|
78
99
|
rubricUnknown: '设置里有不对应任何内置 rubric 的覆盖,会被忽略:',
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
100
|
+
promptDefaultCol: '默认', promptMineCol: '我的覆盖', promptEmptyIsDefault: '留空 = 用默认', promptStateDefault: '默认',
|
|
101
|
+
jsonEntries: '{n} 项', jsonDialogTitle: '编辑:{name}', jsonDialogHint: '这是一个 JSON 对象;校验与服务端用同一套规则。',
|
|
102
|
+
// route
|
|
103
|
+
registerProvider: '注册为 ctx.web provider', registerProviderHint: '让内置 web_search / web_fetch 可经本插件。', registerProviderHelp: '启动时生效。注册只是“可选”:宿主只在 web 条目写明 id 或它是唯一可用 provider 时才用它,还需要下面的 profile patch。',
|
|
104
|
+
providerId: 'Provider ID', providerIdHint: '被 web 条目或环境变量引用的稳定 id。',
|
|
105
|
+
providerEvidence: '内置 web_search 返回', providerEvidenceHint: 'auto:证据包;off:只返回来源列表。', optAuto: 'auto · 证据包(默认)', optOff: 'off · 来源列表',
|
|
106
|
+
providerDeadlineMs: '证据运行期限', providerDeadlineMsHint: '到点返回已有结果,至少 100。',
|
|
107
|
+
routeOffNote: '未注册:内置 web_search / web_fetch 不经过本插件。', routeHelpTitle: '选中本插件还需要 profile patch', routeHelpFoldHint: '写进 cordis.patch.yml',
|
|
108
|
+
routeHelpIntro: '在 $DSH_HOME/profiles/<profile>/cordis.patch.yml 中写:',
|
|
109
|
+
routeHelpAfter: '也可只设环境变量 DSH_WEB_SEARCH_PROVIDER / DSH_WEB_FETCH_PROVIDER。不要只注册而不写 fetchProvider(宿主自带的 http 与本插件同时可用时 web_fetch 会报 AMBIGUOUS)。重启后用 web_call sources.status 查看 “ctx.web route” 一行。',
|
|
110
|
+
// runtime
|
|
111
|
+
enableCliBackends: '启用 CLI 后端', enableCliBackendsHint: 'bili、yt-dlp、OpenCLI、Agent Reach 等。', enableCliBackendsHelp: '允许本机 CLI 后端;关闭后这些平台后端都不会被运行。',
|
|
112
|
+
opencliEnabled: '启用 OpenCLI', opencliEnabledHint: '经 Chrome Browser Bridge 用站点适配器。', opencliEnabledHelp: '允许通过已连接的 Chrome Browser Bridge 使用站点适配器。',
|
|
113
|
+
agentReachEnabled: '启用 Agent Reach', agentReachEnabledHint: '兼容 Agent Reach 的外部后端。', agentReachEnabledHelp: '允许兼容 Agent Reach 的外部搜索后端。',
|
|
114
|
+
runtimeLoginTitle: '登录值', runtimeBackendsTitle: '后端(JSON)', runtimePlatformsTitle: '平台与浏览器(JSON)',
|
|
115
|
+
twitterGroup: 'Twitter / X(twitter-cli)', twitterGroupHint: 'twitter-cli 需要 auth_token 与 ct0;只通过子进程环境变量传给命令。', twitterPartial: '只配了一个',
|
|
116
|
+
twitterAuthTokenEnv: 'auth_token 引用名', twitterAuthTokenEnvHint: '凭据 / 环境变量名;默认 TWITTER_AUTH_TOKEN。', twitterCt0Env: 'ct0 引用名', twitterCt0EnvHint: '凭据 / 环境变量名;默认 TWITTER_CT0。', twitterAuthToken: 'Twitter auth_token', twitterCt0: 'Twitter ct0',
|
|
117
|
+
playwright: 'Playwright 设置', playwrightHint: 'JSON;浏览器渲染回退与截图目录。', platformBackends: '平台后端顺序', platformBackendsHint: 'JSON;每个平台依次尝试的后端。', cliAdapters: '自定义 CLI 适配', cliAdaptersHint: 'JSON;按 id 定义只读 CLI 适配规格。',
|
|
118
|
+
customPlatforms: '自定义平台', customPlatformsHint: 'JSON;搜索 URL 与选择器,登录态走浏览器绑定。', platformRules: '平台选择器覆盖', platformRulesHint: 'JSON;按平台设 item / title / link 选择器。', browserBindings: '浏览器绑定', browserBindingsHint: 'JSON;平台绑定到 dsh-browser 登录 profile 与规则包。',
|
|
119
|
+
// network
|
|
120
|
+
timeoutMs: '超时预算', timeoutMsHint: '单次增强搜索,至少 1000。', timeoutMsHelp: '单次增强搜索的协作超时;证据运行另有自己的期限。',
|
|
121
|
+
ttlSeconds: '缓存有效期', ttlSecondsHint: '0 = 每次都视为过期。', ttlSecondsHelp: '缓存的搜索与页面保持新鲜多久;改动立即对新请求生效。',
|
|
122
|
+
memoryCacheEntries: '内存缓存条目', memoryCacheEntriesHint: '进程内 LRU 容量,至少 1。', dbPath: 'SQLite 路径', dbPathHint: '留空 = 插件默认路径。', verbose: '详细诊断日志', verboseHint: '写入加载标记并输出更多诊断。',
|
|
123
|
+
// ranking
|
|
124
|
+
rrfConstant: 'RRF 常数', rrfConstantHint: '多来源融合的排名平滑常数 k。', rrfConstantHelp: '融合分 = Σ 1/(k + 名次);k 越大,名次差距的影响越小。默认 60。',
|
|
125
|
+
freshnessBoost: '时效加权', freshnessBoostHint: '0–1,占一个名次的比例。', freshnessBoostHelp: '近期结果的加分,占同一来源相邻两名分差的比例;每个 URL 只加一次。加分合计不会让第 10 名超过第 1 名。',
|
|
126
|
+
freshnessDays: '时效衰减天数', freshnessDaysHint: '多少天内衰减到 0。', authorityBoost: '权威域名加权', authorityBoostHint: '0–1,占一个名次的比例。', authorityBoostHelp: '权威域名(github.com、wikipedia.org、.edu / .gov / .org 与下面的额外域名)的加分。',
|
|
127
|
+
authorityDomains: '额外权威域名', authorityDomainsHint: '不带协议和路径。', rankingNote: '来源自带的 rerank_score / authority(DeepSeek)另有一项很小的加分(0.3 个名次),不在这里配置。',
|
|
128
|
+
// advanced
|
|
129
|
+
textViewTitle: '设置文本', textViewHint: '当前草稿的设置(不含密钥),每个键前有注释:用途、取值、默认值、风险。', textViewCopy: '复制', textViewCopied: '已复制', textViewNote: '这是控件的只读视图:想改设置请用上面的控件;注释行以 # 开头,被读取时忽略。',
|
|
130
|
+
// search order and custom CLI
|
|
131
|
+
groupOrder: '搜索顺序',
|
|
132
|
+
groupOrderSub: '通用搜索与每个平台的后端尝试顺序',
|
|
133
|
+
groupCli: '自定义 CLI',
|
|
134
|
+
groupCliSub: '加入你自己的只读命令行工具',
|
|
135
|
+
orderEnginesTitle: '通用搜索顺序',
|
|
136
|
+
orderListLabel: '引擎顺序',
|
|
137
|
+
orderAdd: '添加来源…',
|
|
138
|
+
orderAddLabel: '添加来源',
|
|
139
|
+
orderRestore: '恢复默认顺序',
|
|
140
|
+
orderEmpty: '列表是空的:至少要留一个来源。',
|
|
141
|
+
orderUp: '上移',
|
|
142
|
+
orderDown: '下移',
|
|
143
|
+
orderRemove: '移除',
|
|
144
|
+
orderConfidenceOf: '{name} 的置信度',
|
|
145
|
+
orderConfidenceBadge: '置信度 {c}',
|
|
146
|
+
orderConfidenceDefault: '默认 {c}',
|
|
147
|
+
orderConfidenceLabel: '置信度',
|
|
148
|
+
orderConfidenceEdit: '点一下修改置信度',
|
|
149
|
+
orderConfidenceHelp: '只在多个来源融合排名时略微降低它的权重;1 = 不调整。',
|
|
150
|
+
orderPlatformFilter: '按平台名或 id 过滤…',
|
|
151
|
+
orderPlatformFilterLabel: '过滤平台',
|
|
152
|
+
orderPlatformFound: '匹配 {n} / {total} 个平台',
|
|
153
|
+
orderPlatformNone: '没有匹配的平台。',
|
|
154
|
+
orderPlatformsMore: '显示其余 {n} 个平台',
|
|
155
|
+
orderPlatformsMoreHint: '先列改过的、有自定义 CLI 的和常用的',
|
|
156
|
+
stateReady: '就绪',
|
|
157
|
+
stateNoKey: '缺 Key',
|
|
158
|
+
stateNoUrl: '未设地址',
|
|
159
|
+
stateNotReady: '未就绪',
|
|
160
|
+
stateUnknown: '未知来源',
|
|
161
|
+
stateSpecOk: '规格合法',
|
|
162
|
+
stateSpecBad: '规格有问题',
|
|
163
|
+
stateNoSpec: '没有这个自定义 CLI',
|
|
164
|
+
kindCustom: '自定义',
|
|
165
|
+
kindSeam: '宿主内置',
|
|
166
|
+
orderWhy: '为什么和列表不同:',
|
|
167
|
+
orderWhySame: '与上面的列表一致。',
|
|
168
|
+
orderWhyCommon: '{ids} 配置了 Key,默认规则把它放在列表前面。',
|
|
169
|
+
orderWhyDisabled: 'sources.disabled 排除了 {ids}。',
|
|
170
|
+
orderWhyPriority: 'sources.priority 把 {ids} 提到了前面。',
|
|
171
|
+
orderWhyAnonymous: '只用免费来源(anonymous-only),{ids} 不会自动加入。',
|
|
172
|
+
orderWhyOwn: '这是你自己写的顺序,{ids} 不会自动加入。',
|
|
173
|
+
orderWhyNone: '所有引擎都被停用,没有可尝试的来源。',
|
|
174
|
+
orderRulesTitle: '三者的关系',
|
|
175
|
+
orderRulesNote: '调用里显式给的 engines 最优先;其次是上面这份列表;“来源”里的 sources.priority / sources.disabled 再对它调整(停用的去掉,优先的提前);最后才是默认规则(DeepSeek 有 Key 时排最前)。',
|
|
176
|
+
orderRulesLink: '去“来源”里设置',
|
|
177
|
+
orderPriorityNow: '优先:{ids}',
|
|
178
|
+
orderDisabledNow: '停用:{ids}',
|
|
179
|
+
orderNone: '无',
|
|
180
|
+
orderPlatformsTitle: '平台后端顺序',
|
|
181
|
+
orderPlatformsNote: '每个平台按顺序尝试这些后端,前一个不可用或失败就落到下一个。没改过的显示内置默认链。',
|
|
182
|
+
orderDefaultBadge: '默认',
|
|
183
|
+
platformDialogTitle: '{name} 的后端顺序',
|
|
184
|
+
platformDialogNote: '改动写入 platformBackends 里这个平台的一项;“恢复默认”删掉这一项,回到内置链。',
|
|
185
|
+
platformChainBad: 'platformBackends 的 JSON 当前无效:先在“高级”里改好,再用这里编辑。',
|
|
186
|
+
platformEmpty: '这条链是空的,平台没有后端可用。',
|
|
187
|
+
platformAddNone: '没有可再加入的后端',
|
|
188
|
+
backendUnknown: '未知后端',
|
|
189
|
+
cliIntroNote: '只读保证和内置适配一样:参数模板逐个 token,不经 shell;写入 / 登录类命令、读 Cookie 的参数会被拒绝;输出和超时有上限。结果带“用户自定义,未经插件验证”的标签和置信度。',
|
|
190
|
+
cliAdd: '新增自定义 CLI',
|
|
191
|
+
cliAddExample: '用 echo 做示例',
|
|
192
|
+
cliEmpty: '还没有自定义 CLI。',
|
|
193
|
+
cliCopy: '复制',
|
|
194
|
+
cliDelete: '删除',
|
|
195
|
+
cliPurposeEngine: '通用引擎',
|
|
196
|
+
cliPurposePlatforms: '平台 {list}',
|
|
197
|
+
cliPurposeNone: '未设用途',
|
|
198
|
+
cliDeleteNote: '删除会在保存后生效;引用它的引擎列表或平台链需要一并改掉。',
|
|
199
|
+
cliDialogNew: '新增自定义 CLI',
|
|
200
|
+
cliDialogEdit: '编辑 {id}',
|
|
201
|
+
cliDialogNote: '表单和下面的 JSON 是同一份规格的两种视图,校验用的是服务端的函数。点“完成”把它放进草稿,保存后才生效。',
|
|
202
|
+
cliCancel: '取消',
|
|
203
|
+
cliApply: '完成',
|
|
204
|
+
cliId: 'ID',
|
|
205
|
+
cliIdHint: '小写字母、数字、. _ -;保存后不能改。',
|
|
206
|
+
cliBin: '命令',
|
|
207
|
+
cliBinHint: 'PATH 上的命令名,不能是路径。',
|
|
208
|
+
cliArgv: '参数模板',
|
|
209
|
+
cliArgvHint: '每个参数一格;不经 shell。',
|
|
210
|
+
cliArgvNote: '占位符:{query} 查询,{count} 结果数,{terms} 把查询按词拆成多个参数。至少要有 {query}(或 {terms})。以 - 开头的写法按参数处理,子命令写在前面。',
|
|
211
|
+
cliArgvAdd: '添加参数',
|
|
212
|
+
cliArgvRemove: '删除参数',
|
|
213
|
+
cliArgvToken: '参数 {n}',
|
|
214
|
+
cliAllowed: '允许的子命令',
|
|
215
|
+
cliAllowedHint: '自动从参数模板推出。',
|
|
216
|
+
cliAllowedNone: '(没有子命令)',
|
|
217
|
+
cliFormat: '输出格式',
|
|
218
|
+
cliFormatHint: '工具打印的结果是什么格式。',
|
|
219
|
+
cliWhole: '整段输出',
|
|
220
|
+
cliWholeHint: '不写字段映射:把 stdout 整体当一条结果。',
|
|
221
|
+
cliWholeNote: '标题是“适配名: 查询”,链接是占位的 cli://<id>?q=…,文本超出上限会截断并写明。这条结果出现在普通搜索里,但不是网页:证据模式不会抓取它,只把它列为来源。',
|
|
222
|
+
cliWholeMax: '最多字符数',
|
|
223
|
+
cliWholeMaxHint: '200–8000;留空 2000。',
|
|
224
|
+
cliItemsPath: '结果数组路径',
|
|
225
|
+
cliItemsPathHint: '例:data.items;留空 = 根数组。',
|
|
226
|
+
cliLinesMode: '文本行方式',
|
|
227
|
+
cliLinesModeHint: '一行一个结果的两种写法。',
|
|
228
|
+
cliOptUrlLines: 'url-lines · 含链接的行',
|
|
229
|
+
cliOptTsv: 'tsv · 制表符分隔的列',
|
|
230
|
+
cliColumns: '列名',
|
|
231
|
+
cliColumnsHint: '逗号分隔,例:id, title, link。',
|
|
232
|
+
cliFields: '字段映射',
|
|
233
|
+
cliFieldsNote: '每个结果字段填一个点路径,指向工具输出里的一条结果。URL 必填,必须是 http(s) 链接。',
|
|
234
|
+
cliFieldUrl: 'URL',
|
|
235
|
+
cliFieldTitle: '标题',
|
|
236
|
+
cliFieldSnippet: '摘要',
|
|
237
|
+
cliFieldPublishedAt: '时间',
|
|
238
|
+
cliFieldUrlHint: '例:link 或 data.url',
|
|
239
|
+
cliFieldTitleHint: '例:title',
|
|
240
|
+
cliFieldSnippetHint: '例:summary',
|
|
241
|
+
cliFieldPublishedAtHint: '例:published_at',
|
|
242
|
+
cliFieldComplex: '较复杂的映射,在 JSON 视图里改',
|
|
243
|
+
cliTimeout: '超时',
|
|
244
|
+
cliTimeoutHint: '1000–180000 毫秒。',
|
|
245
|
+
cliPurpose: '用途',
|
|
246
|
+
cliEngine: '作为通用搜索引擎',
|
|
247
|
+
cliEngineHint: '可加入“通用搜索顺序”,参与融合与去重。',
|
|
248
|
+
cliPlatforms: '服务的平台',
|
|
249
|
+
cliPlatformsHint: '可加入这些平台的后端顺序。',
|
|
250
|
+
cliPlatformUnknown: '没有这个平台的后端链',
|
|
251
|
+
cliPlatformsAdd: '平台 id,回车添加',
|
|
252
|
+
cliConfidenceLabel: '置信度',
|
|
253
|
+
cliConfidenceHint: '0–1;留空 0.5。',
|
|
254
|
+
cliConfidenceNote: '置信度只在多个来源融合排名时让它的权重略低,并随结果显示;1 不改变任何东西。也可以在“搜索顺序”的列表里按来源覆盖。',
|
|
255
|
+
cliAdvanced: '高级',
|
|
256
|
+
cliPackageNote: '安装说明',
|
|
257
|
+
cliPackageNoteHint: '缺这个命令时给用户看。',
|
|
258
|
+
cliHelpArgs: '帮助命令',
|
|
259
|
+
cliHelpArgsHint: '空格分隔,例:search --help',
|
|
260
|
+
cliMustContain: '帮助里必须出现',
|
|
261
|
+
cliMustContainHint: '用来确认命令是对的程序。',
|
|
262
|
+
cliMaxOutput: '输出上限',
|
|
263
|
+
cliMaxOutputHint: '1024–16777216 字节。',
|
|
264
|
+
unitBytes: '字节',
|
|
265
|
+
cliJson: '查看 JSON',
|
|
266
|
+
cliJsonNote: '直接改整份规格;合法的修改会同步回上面的表单。',
|
|
267
|
+
cliJsonBad: 'JSON 无法解析:{why}',
|
|
268
|
+
cliProblems: '这份规格有问题',
|
|
269
|
+
cliValid: '规格合法。',
|
|
270
|
+
cliApplyBlocked: '规格有问题时不能放进草稿。',
|
|
271
|
+
cliTrial: '试运行',
|
|
272
|
+
cliTrialNote: '真的运行一次:先探测命令(版本和帮助),再用示例查询搜索一次;只读,不登录,不保存任何东西。',
|
|
273
|
+
cliTrialQuery: '示例查询',
|
|
274
|
+
cliTrialQueryDefault: 'hello',
|
|
275
|
+
cliTrialRun: '运行一次',
|
|
276
|
+
cliTrialRunning: '运行中…',
|
|
277
|
+
cliTrialUnavailable: '当前宿主没有给插件开通道,这里无法试运行。保存后用 web_call 的 sources.status 看是否就绪,用 search.run 搜一次。',
|
|
278
|
+
cliTrialInvalid: '规格有问题,先修正再试运行。',
|
|
279
|
+
cliTrialOk: '运行成功:解析出 {n} 条,显示前 {m} 条,用时 {ms} ms。',
|
|
280
|
+
cliTrialFailed: '没有成功(停在“{stage}”):',
|
|
281
|
+
cliTrialStageDisabled: '被设置关闭',
|
|
282
|
+
cliTrialStageValidate: '校验',
|
|
283
|
+
cliTrialStageProbe: '探测命令',
|
|
284
|
+
cliTrialStageSearch: '搜索',
|
|
285
|
+
cliTrialRaw: '工具原话',
|
|
286
|
+
cliTrialResults: '解析出的结果',
|
|
287
|
+
cliTrialHint: '建议:{hint}',
|
|
288
|
+
cliTrialLabel: '用户自定义,未经插件验证',
|
|
289
|
+
cliTrialRpcFailed: '试运行没有完成:{why}',
|
|
290
|
+
chainEdit: '编辑顺序 →', advancedRawTitle: '原始 JSON', advancedRawHint: '平台后端顺序和自定义 CLI 的整段 JSON',
|
|
291
|
+
cliOutput: '输出',
|
|
292
|
+
restartBadge: '重启插件后生效',
|
|
293
|
+
restartBadgeSnapshot: '快照目录:重启插件后生效',
|
|
294
|
+
restartWhyToolSurface: '工具(web_index + web_call,或每个动作一个工具)在插件启动时注册,改了要重启插件才会换。',
|
|
295
|
+
restartWhyPlaywright: '快照目录在插件启动时确定;playwright.enabled 则即时生效。',
|
|
296
|
+
restartWhyProviderId: '注册到宿主时就给定了 provider id,改了要重启插件。',
|
|
297
|
+
restartWhyRegisterProvider: '是否注册 ctx.web provider 在插件启动时决定,改了要重启插件。',
|
|
298
|
+
restartWhyTimeoutMs: '每个动作的截止时间和宿主工具上限在启动时定下,改了要重启插件(搜索内部的协作超时预算则即时生效)。',
|
|
299
|
+
restartWhyMemoryCacheEntries: '进程内缓存在启动时按这个容量创建,改了要重启插件。',
|
|
300
|
+
restartWhyDbPath: '数据库(和 agent 修改文件)在启动时打开,改路径要重启插件;旧路径里的数据不会自动搬过去。',
|
|
301
|
+
restartWhyVerbose: '加载标记在启动时写入,改了要重启插件。',
|
|
302
|
+
savebarRestart: '其中 {fields} 要重启插件后才生效。',
|
|
303
|
+
summaryPendingRestart: '待重启 {n} 项',
|
|
304
|
+
pendingRestartLine: '待重启:当前生效 {running},配置为 {configured}',
|
|
305
|
+
pendingEmpty: '(空)',
|
|
306
|
+
groupAgent: 'agent 修改',
|
|
307
|
+
groupAgentSub: 'agent 经 config.* 做的修改:实时生效,不改你的配置',
|
|
308
|
+
agentBadge: 'agent 修改',
|
|
309
|
+
agentTip: 'agent 设为 {value}(你的配置里是 {baseline})· {reason} · {at} · {who}',
|
|
310
|
+
agentNoReason: '(没有记录原因)',
|
|
311
|
+
agentActorAgent: 'agent',
|
|
312
|
+
agentActorUser: '你(面板)',
|
|
313
|
+
agentAdopt: '采纳到配置',
|
|
314
|
+
agentRevoke: '撤销',
|
|
315
|
+
agentRevokeAll: '全部撤销',
|
|
316
|
+
agentRefresh: '刷新',
|
|
317
|
+
agentRefreshing: '读取中…',
|
|
318
|
+
agentNow: '生效:',
|
|
319
|
+
agentConfigHolds: '你的配置:',
|
|
320
|
+
agentCount: '{n} 项',
|
|
321
|
+
agentNote: 'agent 用 config.* 动作改的搜索顺序、来源规则、置信度、平台后端和自定义 CLI 放在一个单独的覆盖文件里,立刻生效,不会改动你的配置。“采纳到配置”把值写进你的配置(和下面的保存一样是一次原子写入)再撤销这条覆盖;“撤销”直接丢弃它。每次修改都记了原因,并留有审计记录。',
|
|
322
|
+
agentEmpty: 'agent 没有做过修改。',
|
|
323
|
+
agentLoading: '正在读取…',
|
|
324
|
+
agentNotLoaded: '还没有读取。点“刷新”。',
|
|
325
|
+
agentUnavailable: '读不到 agent 修改:宿主没有提供这个插件的私有通道,或插件版本较旧。agent 仍可用 config.inspect 查看。',
|
|
326
|
+
agentInvalid: '覆盖文件被整体忽略(插件按你的配置运行):{problem} 点“全部撤销”可把坏文件挪开并重新开始。',
|
|
327
|
+
agentAdoptFailed: '没能写入配置(宿主没有接受),覆盖保持不变。',
|
|
328
|
+
agentAdoptHalf: '值已写进配置,但撤销覆盖没成功:{why} 刷新后可手动撤销。',
|
|
329
|
+
agentRevokeFailed: '撤销失败:{why}',
|
|
330
|
+
agentFile: '覆盖文件 {file} · 版本 {revision}',
|
|
331
|
+
agentAuditTitle: '最近的审计记录({n})',
|
|
332
|
+
agentAuditHint: '每次修改的原因、时间和前后值',
|
|
333
|
+
agentAuditEmpty: '还没有记录。',
|
|
334
|
+
agentKindEngines: '引擎顺序',
|
|
335
|
+
agentKindPriority: '优先来源 sources.priority',
|
|
336
|
+
agentKindDisabled: '停用来源 sources.disabled',
|
|
337
|
+
agentKindConfidence: '置信度',
|
|
338
|
+
agentKindPlatform: '平台后端顺序',
|
|
339
|
+
agentKindCli: '自定义 CLI',
|
|
340
|
+
summaryAgent: 'agent 修改 {n} 项',
|
|
341
|
+
summaryAgentOpen: '查看',
|
|
342
|
+
agentCliTitle: 'agent 添加的 CLI',
|
|
343
|
+
agentCliNote: '这些 CLI 只在覆盖文件里,不在上面的列表里。',
|
|
344
|
+
orderAgentChain: '加上 agent 的修改后实际尝试顺序:',
|
|
345
|
+
orderAgentChainNone: '加上 agent 的修改后没有可用的引擎(全部被停用)。',
|
|
346
|
+
agentNeedsCli: '用到了只存在于覆盖层的自定义 CLI:{ids}。采纳时请连这个 CLI 一起采纳,否则你的配置会引用一个它没有定义的 CLI。',
|
|
113
347
|
};
|
|
114
348
|
export const en = {
|
|
115
349
|
tab: 'Web Search Pro',
|
|
116
|
-
title: 'Web Search Pro',
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
350
|
+
title: 'Web Search Pro',
|
|
351
|
+
description: 'Search engines, sources and keys, scoring model, reading and cache, platform rules',
|
|
352
|
+
lang: 'en',
|
|
353
|
+
readOnly: 'The settings document is read-only, so changes cannot be saved.',
|
|
354
|
+
unavailable: 'Settings are unavailable: the host serves no configuration form for this plugin.',
|
|
355
|
+
reset: 'Restore default', overridden: 'Overridden', overriddenCount: '{n} overridden', invalid: 'Invalid value: check the range or format.', invalidJson: 'Invalid JSON: it must be an object.', helpLabel: 'More about this setting',
|
|
356
|
+
edit: 'Edit', close: 'Close', done: 'Done', emptyDefault: '(default)', optionOff: 'off', chipRemove: 'Remove',
|
|
357
|
+
save: 'Save', saving: 'Saving…', discardChanges: 'Discard', saveFailed: 'The host did not accept every change; the draft is kept, check for conflicts or the log.',
|
|
358
|
+
savebarClean: 'No unsaved changes', savebarDirty: '{n} unsaved change(s)', savebarInvalid: 'Some input is invalid; fix it to save',
|
|
359
|
+
dialogStagesNote: 'Changes here stay in the draft; press Save at the bottom of the page to write them.',
|
|
360
|
+
summaryTitle: 'Status', summaryChain: 'Default chain', summaryChainEmpty: '(empty)', summaryKeys: 'Sources with a key {n}/{m}', summaryReady: 'ready', summaryNoKey: 'no key',
|
|
361
|
+
summaryRouteOn: 'Built-in web tools: routed here', summaryRouteOff: 'Built-in web tools: not routed', summaryJudge: 'Scoring model', summarySurface: 'Tool surface',
|
|
362
|
+
summaryWarnings: '{n} notice(s)', summaryNoWarnings: 'No notices', summaryDetails: 'details', warningsTitle: 'Settings that need attention', warningsNone: 'The current draft has no validation notices.',
|
|
363
|
+
unitMs: 'ms', unitSeconds: 's', unitChars: 'chars', unitCount: '', unitTokens: 'tokens', unitDays: 'days',
|
|
364
|
+
riskNetwork: 'network', riskBilled: 'billed', riskModel: 'calls a model',
|
|
365
|
+
groupCommon: 'Common', groupCommonSub: 'Default engine chain, result count, tool surface, proxy fake-IP, DeepSeek Search',
|
|
366
|
+
groupSources: 'Sources', groupSourcesSub: 'Ranking policy and each source\'s key, endpoint and request budget',
|
|
367
|
+
groupReading: 'Reading and evidence', groupReadingSub: 'Page length, follow-up rounds, language-aware source choice',
|
|
368
|
+
groupJudge: 'Scoring model', groupJudgeSub: 'Optional paid / local model and its prompts (off by default)',
|
|
369
|
+
groupRoute: 'Built-in web tool route', groupRouteSub: 'Route the host\'s web_search / web_fetch through this plugin',
|
|
370
|
+
groupRuntime: 'Runtime and backends', groupRuntimeSub: 'CLI / OpenCLI, Twitter login values, backend chains, platforms and browser bindings',
|
|
371
|
+
groupNetwork: 'Network and cache', groupNetworkSub: 'Timeout, cache lifetime, database path, diagnostics',
|
|
372
|
+
groupRanking: 'Ranking weights', groupRankingSub: 'Rank constant and freshness / authority bonuses for multi-source fusion (advanced)',
|
|
373
|
+
groupAdvanced: 'Advanced: text mode', groupAdvancedSub: 'The settings as commented YAML, to copy',
|
|
374
|
+
chainNow: 'Order a search tries:', chainEmpty: 'no usable engine', commonDeepseekTitle: 'DeepSeek Search / Fetch (common)', commonBadge: 'Common',
|
|
375
|
+
engines: 'Default engine chain', enginesHint: 'Tried top to bottom; use the arrows to reorder.', enginesHelp: 'For example ddg, bing, exa, seam, jina. While this is the default list a ready DeepSeek key puts deepseek first; a list you wrote is used as written, and engines in a call always wins.',
|
|
376
|
+
searchMaxResults: 'Default result count', searchMaxResultsHint: '1-20; used when a call gives no count.',
|
|
377
|
+
parallelEngines: 'Fuse several engines in parallel', parallelEnginesHint: 'Query every default engine at once and fuse, instead of falling back.',
|
|
378
|
+
toolSurface: 'Tool surface', toolSurfaceHint: 'The tools the model sees; read at start-up.', toolSurfaceHelp: 'indexed exposes only web_index / web_call, the least resident text (default). flat is one tool per action, for comparison and debugging. Restart after changing it.', optIndexed: 'indexed · two entry points (default)', optFlat: 'flat · one tool per action (debug)',
|
|
379
|
+
allowProxyFakeIp: 'Allow proxy fake-IP DNS', allowProxyFakeIpHint: 'Turn on when searches fail with "fake-IP" under Clash / TUN.', allowProxyFakeIpHelp: 'With a proxy such as Clash / TUN, if a search fails with "blocked / private address" and the host resolves to 198.18.x.x, turn this on. Only the fake-IP ranges (198.18/15, fdfe:dcba:9876::/64, 2001:2::/48) are trusted; literal IPs, localhost and other private addresses stay blocked.',
|
|
380
|
+
deepseekFetch: 'Read pages with DeepSeek Fetch', deepseekFetchHint: 'Off by default; billed per request.', deepseekFetchHelp: 'When on, read.fetch falls back to the DeepSeek Fetch API (billed $0.75 per 1,000 successful requests; empty results and failures are free) when Jina and a direct request found no content, before browser rendering; mode=deepseek asks for it explicitly. It uses the same key as DeepSeek Search.',
|
|
381
|
+
strategyGroup: 'Ranking policy', strategyNote: 'Order: engines / platform in the call, then "Priority sources" below, then sources you configured a key for (DeepSeek, the common one, first), then the anonymous / free defaults. A paid source is used only once its key is configured.',
|
|
382
|
+
sourcePolicy: 'Source policy', sourcePolicyHint: 'Whether automatic planning may use keyed sources.', sourcePolicyHelp: 'default follows the order above. anonymous-only: automatic planning never uses a source that needs a key, account or login, even a configured one (a source named in the call still runs).',
|
|
383
|
+
optPolicyDefault: 'default · in order (default)', optPolicyAnonymousOnly: 'anonymous-only · anonymous sources only',
|
|
384
|
+
srcPriority: 'Priority sources', srcPriorityHint: 'Source ids ranked first, in this order.', srcPriorityHelp: 'Only ready sources that fit the task language and profile; for example deepseek, exa. Empty = none. engines in the call still wins.',
|
|
385
|
+
srcDisabled: 'Disabled sources', srcDisabledHint: 'Never used by planning or the default chain.', srcDisabledHelp: 'A source named in the call still runs. To opt out of the billed DeepSeek default, put deepseek here.',
|
|
386
|
+
sourcesListTitle: 'Sources that need a key or an address', sourcesListHint: 'Edit sets the key reference, the key, the endpoint and the request budget; keys go to DSH Credentials and are never shown.',
|
|
387
|
+
tierPaid: 'Paid', tierFree: 'Free allowance', tierAnonymous: 'No key', sourceConfigured: 'Set', sourceNotConfigured: 'Not set',
|
|
388
|
+
sourceMetaRef: 'key reference {ref}', sourceMetaCapped: 'request cap set', sourceMetaNoUrl: 'no address set',
|
|
389
|
+
sourceDialogTitle: '{name}', sourceResetAll: 'Restore this source\'s defaults',
|
|
390
|
+
sourceNoteDeepseek: 'DeepSeek Search / Fetch, the common source: with a key it leads in Chinese and English. Billed per request: $0.75 per 1,000 successful requests; empty results and failures are free; direct plugin calls are treated as billed. Same DEEPSEEK_API_KEY as the DeepSeek models. The page-reading switch is in the Common group.',
|
|
391
|
+
sourceNoteBocha: 'Bocha: Chinese search, paid. An account without search balance gets HTTP 403.', sourceNoteExa: 'Exa: with a key it uses the native API; without one it can fall back to the MCP route through mcporter.', sourceNoteJina: 'Jina: search and page reading; every new key comes with a one-time free allowance.', sourceNoteGithub: 'A GitHub token is optional and only raises the API rate limit.', sourceNoteSearxng: 'Your own SearXNG instance (JSON format enabled); the searxng source exists only once an address is set. No public instance is built in.',
|
|
392
|
+
sourceNoteKeyed: 'Naming the key reference enables this source; it is unusable until a key is set. Override the endpoint only for a proxy or private gateway.',
|
|
393
|
+
keyedEnv: 'Key reference', keyedEnvHint: 'Credential / environment variable name; blank uses the default:', keyedBaseUrl: 'Endpoint', keyedBaseUrlHint: 'Blank uses the built-in endpoint; an http(s) URL.', keyedApiKey: 'API Key',
|
|
394
|
+
credentialWriteOnlyHint: 'Write-only; blank leaves the stored secret unchanged.', credentialReadOnlyHint: 'The credential service is read-only, so nothing can be written here.', credentialChecking: 'Checking…', credentialSet: 'Configured', credentialUnset: 'Not configured',
|
|
395
|
+
bochaApiKeyEnv: 'Bocha key reference', bochaApiKeyEnvHint: 'Credential / environment variable; blank: BOCHA_SEARCH_API_KEY.',
|
|
396
|
+
bochaBaseUrl: 'Bocha endpoint', bochaBaseUrlHint: 'Default https://api.bocha.cn; an http(s) URL.',
|
|
397
|
+
bochaSummary: 'Ask Bocha for the long summary', bochaSummaryHint: 'On by default.', bochaSummaryHelp: 'The long summary helps evidence scoring; turn it off for smaller responses.',
|
|
398
|
+
exaApiKeyEnv: 'Exa key reference', exaApiKeyEnvHint: 'Credential / environment variable; blank: EXA_API_KEY.',
|
|
399
|
+
jinaApiKeyEnv: 'Jina key reference', jinaApiKeyEnvHint: 'Credential / environment variable; blank: JINA_API_KEY.',
|
|
400
|
+
githubTokenEnv: 'GitHub token reference', githubTokenEnvHint: 'Credential / environment variable; blank: GITHUB_TOKEN.',
|
|
401
|
+
searxngUrl: 'SearXNG address', searxngUrlHint: 'The http(s) address of your own instance.',
|
|
402
|
+
openalexMailto: 'OpenAlex contact e-mail', openalexMailtoHint: 'Put in the request User-Agent; polite, optional.',
|
|
403
|
+
reqBudgetGroup: 'Request budget (optional)', reqBudgetNote: 'Cap this source\'s requests, counted in the usage ledger (it survives restarts). A used-up source is skipped and the plan falls back to others; it is never an error. No cap by default.',
|
|
404
|
+
reqTotal: 'Total cap', reqTotalHint: 'Most requests ever; blank = no cap.', reqTotalHelp: 'Example: a Bocha account with 1000 requests can use total 1000, daily 50. Used / remaining is in web_call sources.status.',
|
|
405
|
+
reqDaily: 'Daily cap', reqDailyHint: 'Most requests per day; blank = no cap.', reqDailyHelp: 'The day boundary follows the scoring budget time zone. Used / remaining is in web_call sources.status.',
|
|
406
|
+
anonymousTitle: 'Anonymous sources (no key)', anonymousHint: 'reference only, not live state', anonymousName: 'Source', anonymousUse: 'Use', sourcesStatusLine: 'Live readiness of each source (installation, key, last success) is shown by web_call sources.status.',
|
|
407
|
+
srcUseDdg: 'General web, the default first choice', srcUseBing: 'General web, complements DuckDuckGo', srcUseWikipedia: 'Encyclopedic facts, zh / en', srcUseHackernews: 'English tech discussion and experience', srcUseStackexchange: 'Programming Q&A (Stack Overflow)',
|
|
408
|
+
srcUseOpenalex: 'Scholarly paper index', srcUseSemanticscholar: 'Papers; the anonymous pool is often full', srcUseAnysearch: 'Anonymous general search, limited allowance', srcUseArxiv: 'Preprints', srcUsePubmed: 'Biomedical literature', srcUseV2ex: 'Chinese community discussion',
|
|
409
|
+
fetchDefaultChars: 'Page read length', fetchDefaultCharsHint: 'read.fetch per call, 1000-500000.',
|
|
410
|
+
exaContentsPerUrlChars: 'Exa contents per URL', exaContentsPerUrlCharsHint: 'read.contents per URL, at least 500.',
|
|
411
|
+
exaContentsTotalChars: 'Exa contents total', exaContentsTotalCharsHint: 'read.contents per call, at least 1000.',
|
|
412
|
+
evAutoProviders: 'Pick sources by language', evAutoProvidersHint: 'Ready sources strong in the task language go first.', evAutoProvidersHelp: 'Ready sources strong in the task language (DeepSeek, Bocha, Exa, ...) go ahead of the profile table; off keeps the table and engines as they are.',
|
|
413
|
+
evMaxRounds: 'Search rounds', evMaxRoundsHint: '1 = no follow-up; default 2.', evMaxQueries: 'Search requests per task', evMaxQueriesHint: 'Over all rounds; default 4.',
|
|
414
|
+
evidenceNote: 'The keep floor (minKeep, 3) and the evidence pack character budget are built-in defaults or the per-call budget of search.run: they have no setting.',
|
|
415
|
+
judgeMode: 'Scoring mode', judgeModeHint: 'Default off: no model is called.', judgeModeHelp: 'off calls nothing; shadow only records a comparison; control lets the model decide; hybrid keeps the rules and re-scores cross-language (and borderline) pairs with the model. Also writes the legacy keys jevMode / scorer. Check the key and the usage caps first.', optShadow: 'shadow · observe only', optControl: 'control · the model decides', optHybrid: 'hybrid · mixed',
|
|
416
|
+
judgeProvider: 'Scoring provider', judgeProviderHint: 'Default bocha-jev; presets and your ids.',
|
|
417
|
+
hybridBorderline: 'hybrid: re-score borderline pairs', hybridBorderlineHint: 'Roughly doubles the cost.', hybridBorderlineHelp: 'Pairs the rules grade 1 go to the model as well.',
|
|
418
|
+
maxJevQuestions: 'Questions per search', maxJevQuestionsHint: '(need, block) pairs, default 64.',
|
|
419
|
+
allowLlm: 'Allow the llm protocol', allowLlmHint: 'Off by default; llm providers need it.', allowLlmHelp: 'General LLM calls cost tokens; turn it on only for a provider that really speaks the llm protocol.',
|
|
420
|
+
judgeGroupCoverage: 'Coverage judge', judgeGroupCoverageHint: 'the model checks whether excerpts suffice', judgeGroupBudget: 'Usage caps', judgeGroupBudgetHint: 'per search and per day tokens', judgeGroupProviders: 'Custom scoring providers',
|
|
421
|
+
coverageMode: 'Coverage mode', coverageModeHint: 'Default off; not tied to the scoring mode.', coverageModeHelp: 'off (default); shadow records the probability; control turns weak support into a gap.',
|
|
422
|
+
coverageProvider: 'Coverage provider', coverageProviderHint: 'Default: the scoring provider.',
|
|
423
|
+
thresholdWeak: 'Weak threshold', thresholdWeakHint: 'Below it is weak; blank = calibrated value.', thresholdWeakHelp: 'Blank uses the value shipped with the plugin, calibrated only for bocha-jev + cover.sufficient v1. Set both thresholds together, weak <= covered.',
|
|
424
|
+
thresholdCovered: 'Covered threshold', thresholdCoveredHint: 'At or above it counts as covered.',
|
|
425
|
+
budgetPerSearch: 'Input cap per search', budgetPerSearchHint: 'Default 60000; 0 = no calls.', budgetDaily: 'Input cap per day', budgetDailyHint: 'Default 1000000.', budgetTimezone: 'Day boundary time zone', budgetTimezoneHint: 'IANA name; blank = system.',
|
|
426
|
+
budgetProviders: 'Caps per provider', budgetProvidersHint: 'JSON; the stricter cap applies.', judgeProviders: 'Custom providers', judgeProvidersHint: 'JSON; define protocol, baseUrl, model, keyRef by id.',
|
|
427
|
+
rubricsTitle: 'Prompts (rubrics)', rubricNotes: 'The question texts scoring and the coverage judge put to the model. An override needs a new version label; editing changes the question hash, so old cache is not reused; an invalid override is ignored.',
|
|
428
|
+
rubricActive: 'Active', rubricOverrideOn: 'Overridden', rubricCreate: 'Start an override from the default text', rubricRestore: 'Restore default', rubricDialogTitle: 'Edit prompt: {name}',
|
|
429
|
+
rubricVersion: 'Version', rubricVersionHint: 'Letters, digits and . _ -, at most 32; differs from the built-in.',
|
|
430
|
+
rubricInstructions: 'Prompt template', rubricInstructionsHint: 'Only the variables this rubric allows, with the required ones.',
|
|
431
|
+
rubricCriteria: 'Grade levels', rubricCriteriaHint: 'One per line, low to high; scoring rubrics only, 2-10.',
|
|
432
|
+
rubricMaxState: 'Task characters', rubricMaxStateHint: '20-2000.', rubricMaxCandidate: 'Candidate characters', rubricMaxCandidateHint: '100-8000.',
|
|
433
|
+
rubricUnknown: 'Overrides in settings that name no built-in rubric are ignored:',
|
|
434
|
+
promptDefaultCol: 'Default', promptMineCol: 'My override', promptEmptyIsDefault: 'Blank = the default', promptStateDefault: 'Default',
|
|
435
|
+
jsonEntries: '{n} entries', jsonDialogTitle: 'Edit: {name}', jsonDialogHint: 'A JSON object; validated with the server\'s own rules.',
|
|
436
|
+
registerProvider: 'Register as the ctx.web provider', registerProviderHint: 'Lets built-in web_search / web_fetch route here.', registerProviderHelp: 'Takes effect at start-up. Registering only makes it selectable: the host uses a provider only when the web entry names its id or it is the only usable one, which needs the profile patch below.',
|
|
437
|
+
providerId: 'Provider id', providerIdHint: 'The stable id the web entry or environment names.',
|
|
438
|
+
providerEvidence: 'Built-in web_search returns', providerEvidenceHint: 'auto: an evidence pack; off: the source list.', optAuto: 'auto · evidence pack (default)', optOff: 'off · source list',
|
|
439
|
+
providerDeadlineMs: 'Evidence deadline', providerDeadlineMsHint: 'Partial result at the deadline, at least 100.',
|
|
440
|
+
routeOffNote: 'Not registered: built-in web_search / web_fetch do not go through this plugin.', routeHelpTitle: 'Selecting this plugin also needs a profile patch', routeHelpFoldHint: 'goes into cordis.patch.yml',
|
|
441
|
+
routeHelpIntro: 'Write this in $DSH_HOME/profiles/<profile>/cordis.patch.yml:',
|
|
442
|
+
routeHelpAfter: 'Or set only the environment variables DSH_WEB_SEARCH_PROVIDER / DSH_WEB_FETCH_PROVIDER. Do not register without naming fetchProvider (with the host\'s own http provider also usable, web_fetch fails with AMBIGUOUS). After a restart check the "ctx.web route" line of web_call sources.status.',
|
|
443
|
+
enableCliBackends: 'Enable CLI backends', enableCliBackendsHint: 'bili, yt-dlp, OpenCLI, Agent Reach, ...', enableCliBackendsHelp: 'Allows the local CLI backends; when off none of those platform backends runs.',
|
|
444
|
+
opencliEnabled: 'Enable OpenCLI', opencliEnabledHint: 'Site adapters through the Chrome Browser Bridge.', opencliEnabledHelp: 'Allows site adapters through the connected Chrome Browser Bridge.',
|
|
445
|
+
agentReachEnabled: 'Enable Agent Reach', agentReachEnabledHint: 'Agent Reach compatible backends.', agentReachEnabledHelp: 'Allows external search backends compatible with Agent Reach.',
|
|
446
|
+
runtimeLoginTitle: 'Login values', runtimeBackendsTitle: 'Backends (JSON)', runtimePlatformsTitle: 'Platforms and browser (JSON)',
|
|
447
|
+
twitterGroup: 'Twitter / X (twitter-cli)', twitterGroupHint: 'twitter-cli needs auth_token and ct0; handed to the command only through its environment.', twitterPartial: 'only one is set',
|
|
448
|
+
twitterAuthTokenEnv: 'auth_token reference', twitterAuthTokenEnvHint: 'Credential / environment variable; default TWITTER_AUTH_TOKEN.', twitterCt0Env: 'ct0 reference', twitterCt0EnvHint: 'Credential / environment variable; default TWITTER_CT0.', twitterAuthToken: 'Twitter auth_token', twitterCt0: 'Twitter ct0',
|
|
449
|
+
playwright: 'Playwright settings', playwrightHint: 'JSON; browser-render fallback and snapshot directory.', platformBackends: 'Platform backend order', platformBackendsHint: 'JSON; backends tried per platform, in order.', cliAdapters: 'Custom CLI adapters', cliAdaptersHint: 'JSON; read-only CLI adapter specs by id.',
|
|
450
|
+
customPlatforms: 'Custom platforms', customPlatformsHint: 'JSON; search URL and selectors; logins go through browser bindings.', platformRules: 'Platform selector overrides', platformRulesHint: 'JSON; item / title / link selectors per platform.', browserBindings: 'Browser bindings', browserBindingsHint: 'JSON; bind a platform to a dsh-browser login profile and rule pack.',
|
|
451
|
+
timeoutMs: 'Timeout budget', timeoutMsHint: 'One enhanced search, at least 1000.', timeoutMsHelp: 'The cooperative timeout of one enhanced search; the evidence run has its own deadline.',
|
|
452
|
+
ttlSeconds: 'Cache lifetime', ttlSecondsHint: '0 = always stale.', ttlSecondsHelp: 'How long a cached search or page stays fresh; a change applies to new requests at once.',
|
|
453
|
+
memoryCacheEntries: 'Memory cache entries', memoryCacheEntriesHint: 'In-process LRU capacity, at least 1.', dbPath: 'SQLite path', dbPathHint: 'Blank = the plugin default path.', verbose: 'Verbose diagnostics', verboseHint: 'Write a load marker and more diagnostics.',
|
|
454
|
+
rrfConstant: 'RRF constant', rrfConstantHint: 'Rank smoothing constant k of the fusion.', rrfConstantHelp: 'Fusion score = sum of 1/(k + rank); a larger k flattens the difference between ranks. Default 60.',
|
|
455
|
+
freshnessBoost: 'Freshness bonus', freshnessBoostHint: '0-1, a fraction of one rank step.', freshnessBoostHelp: 'Bonus for recent results as a fraction of the score gap between adjacent ranks of one provider; each URL gets it once. The bonuses together never lift rank 10 over rank 1.',
|
|
456
|
+
freshnessDays: 'Freshness decay', freshnessDaysHint: 'Days until the bonus is zero.', authorityBoost: 'Authority bonus', authorityBoostHint: '0-1, a fraction of one rank step.', authorityBoostHelp: 'Bonus for authority hosts (github.com, wikipedia.org, .edu / .gov / .org and the extra domains below).',
|
|
457
|
+
authorityDomains: 'Extra authority domains', authorityDomainsHint: 'No scheme or path.', rankingNote: 'A source\'s own rerank_score / authority (DeepSeek) adds one more small bonus (0.3 of a rank step); it is not configured here.',
|
|
458
|
+
textViewTitle: 'Settings text', textViewHint: 'The current draft (secrets excluded), every key preceded by a comment: use, values, default, risk.', textViewCopy: 'Copy', textViewCopied: 'Copied', textViewNote: 'A read-only view of the controls: edit the controls above. Comment lines start with # and are ignored when read.',
|
|
459
|
+
// search order and custom CLI
|
|
460
|
+
groupOrder: 'Search order',
|
|
461
|
+
groupOrderSub: 'The order of the general search and of each platform\'s backends',
|
|
462
|
+
groupCli: 'Custom CLI',
|
|
463
|
+
groupCliSub: 'Add your own read-only command-line tools',
|
|
464
|
+
orderEnginesTitle: 'General search order',
|
|
465
|
+
orderListLabel: 'Engine order',
|
|
466
|
+
orderAdd: 'Add a source…',
|
|
467
|
+
orderAddLabel: 'Add a source',
|
|
468
|
+
orderRestore: 'Restore default order',
|
|
469
|
+
orderEmpty: 'The list is empty: keep at least one source.',
|
|
470
|
+
orderUp: 'Move up',
|
|
471
|
+
orderDown: 'Move down',
|
|
472
|
+
orderRemove: 'Remove',
|
|
473
|
+
orderConfidenceOf: 'Confidence of {name}',
|
|
474
|
+
orderConfidenceBadge: 'confidence {c}',
|
|
475
|
+
orderConfidenceDefault: 'default {c}',
|
|
476
|
+
orderConfidenceLabel: 'Confidence',
|
|
477
|
+
orderConfidenceEdit: 'Click to change the confidence',
|
|
478
|
+
orderConfidenceHelp: 'Only slightly lowers this source\'s weight when several sources are fused into one ranking; 1 = no adjustment.',
|
|
479
|
+
orderPlatformFilter: 'Filter by platform name or id…',
|
|
480
|
+
orderPlatformFilterLabel: 'Filter platforms',
|
|
481
|
+
orderPlatformFound: '{n} of {total} platforms match',
|
|
482
|
+
orderPlatformNone: 'No platform matches.',
|
|
483
|
+
orderPlatformsMore: 'Show the other {n} platforms',
|
|
484
|
+
orderPlatformsMoreHint: 'changed, custom-CLI and common ones are listed first',
|
|
485
|
+
stateReady: 'Ready',
|
|
486
|
+
stateNoKey: 'No key',
|
|
487
|
+
stateNoUrl: 'No address',
|
|
488
|
+
stateNotReady: 'Not ready',
|
|
489
|
+
stateUnknown: 'Unknown source',
|
|
490
|
+
stateSpecOk: 'Spec valid',
|
|
491
|
+
stateSpecBad: 'Spec has problems',
|
|
492
|
+
stateNoSpec: 'No such custom CLI',
|
|
493
|
+
kindCustom: 'Custom',
|
|
494
|
+
kindSeam: 'Host',
|
|
495
|
+
orderWhy: 'Why it differs from the list:',
|
|
496
|
+
orderWhySame: 'Same as the list above.',
|
|
497
|
+
orderWhyCommon: '{ids}: a key is set, so the default rule puts it in front of the list.',
|
|
498
|
+
orderWhyDisabled: 'sources.disabled leaves out {ids}.',
|
|
499
|
+
orderWhyPriority: 'sources.priority moves {ids} to the front.',
|
|
500
|
+
orderWhyAnonymous: 'Free sources only (anonymous-only): {ids} is not added.',
|
|
501
|
+
orderWhyOwn: 'This is your own order, so {ids} is not added.',
|
|
502
|
+
orderWhyNone: 'Every engine is disabled: there is nothing to try.',
|
|
503
|
+
orderRulesTitle: 'How the three relate',
|
|
504
|
+
orderRulesNote: 'An explicit engines in the call wins; then the list above; then sources.priority / sources.disabled from "Sources" adjust it (disabled ones leave, priority ones move up); the default rule (DeepSeek first once its key is set) comes last.',
|
|
505
|
+
orderRulesLink: 'Set them in "Sources"',
|
|
506
|
+
orderPriorityNow: 'Priority: {ids}',
|
|
507
|
+
orderDisabledNow: 'Disabled: {ids}',
|
|
508
|
+
orderNone: 'none',
|
|
509
|
+
orderPlatformsTitle: 'Platform backend order',
|
|
510
|
+
orderPlatformsNote: 'Each platform tries its backends in order and falls through to the next when one is unavailable or fails. A platform you did not change shows the built-in default chain.',
|
|
511
|
+
orderDefaultBadge: 'Default',
|
|
512
|
+
platformDialogTitle: 'Backend order of {name}',
|
|
513
|
+
platformDialogNote: 'Edits write this platform\'s entry of platformBackends; "Restore default" removes it and the built-in chain applies again.',
|
|
514
|
+
platformChainBad: 'platformBackends is not valid JSON right now: fix it under "Advanced" first.',
|
|
515
|
+
platformEmpty: 'This chain is empty: the platform has no backend.',
|
|
516
|
+
platformAddNone: 'No other backend can serve it',
|
|
517
|
+
backendUnknown: 'Unknown backend',
|
|
518
|
+
cliIntroNote: 'The read-only guarantee is the one of the built-in adapters: the argument template is a list of tokens, never a shell string; write / login commands and cookie-reading flags are refused; output and time are capped. Results carry the label "user-defined, not verified by the plugin" and a confidence.',
|
|
519
|
+
cliAdd: 'Add a custom CLI',
|
|
520
|
+
cliAddExample: 'Add an echo example',
|
|
521
|
+
cliEmpty: 'No custom CLI yet.',
|
|
522
|
+
cliCopy: 'Copy',
|
|
523
|
+
cliDelete: 'Delete',
|
|
524
|
+
cliPurposeEngine: 'General engine',
|
|
525
|
+
cliPurposePlatforms: 'platforms {list}',
|
|
526
|
+
cliPurposeNone: 'no purpose set',
|
|
527
|
+
cliDeleteNote: 'Deleting takes effect on save; lists and chains that name it have to change too.',
|
|
528
|
+
cliDialogNew: 'New custom CLI',
|
|
529
|
+
cliDialogEdit: 'Edit {id}',
|
|
530
|
+
cliDialogNote: 'The form and the JSON below are two views of one spec, validated with the server\'s own functions. "Done" puts it into the draft; it takes effect on save.',
|
|
531
|
+
cliCancel: 'Cancel',
|
|
532
|
+
cliApply: 'Done',
|
|
533
|
+
cliId: 'ID',
|
|
534
|
+
cliIdHint: 'Lower case, digits and . _ -; fixed once saved.',
|
|
535
|
+
cliBin: 'Command',
|
|
536
|
+
cliBinHint: 'A command name on PATH, never a path.',
|
|
537
|
+
cliArgv: 'Argument template',
|
|
538
|
+
cliArgvHint: 'One argument per box; no shell.',
|
|
539
|
+
cliArgvNote: 'Placeholders: {query} the query, {count} the result count, {terms} the query split into one argument per word. {query} (or {terms}) is required. A leading - is a flag; subcommands go first.',
|
|
540
|
+
cliArgvAdd: 'Add argument',
|
|
541
|
+
cliArgvRemove: 'Remove argument',
|
|
542
|
+
cliArgvToken: 'Argument {n}',
|
|
543
|
+
cliAllowed: 'Allowed subcommands',
|
|
544
|
+
cliAllowedHint: 'Derived from the template.',
|
|
545
|
+
cliAllowedNone: '(no subcommands)',
|
|
546
|
+
cliFormat: 'Output format',
|
|
547
|
+
cliFormatHint: 'What the tool prints.',
|
|
548
|
+
cliWhole: 'Whole output',
|
|
549
|
+
cliWholeHint: 'No field mapping: stdout is one result.',
|
|
550
|
+
cliWholeNote: 'The title is "<id>: <query>", the link a stand-in cli://<id>?q=…; text past the limit is cut and says so. It shows up in plain searches, but it is not a web page: evidence mode never fetches it, it only lists it as a source.',
|
|
551
|
+
cliWholeMax: 'Most characters',
|
|
552
|
+
cliWholeMaxHint: '200-8000; empty = 2000.',
|
|
553
|
+
cliItemsPath: 'Result array path',
|
|
554
|
+
cliItemsPathHint: 'e.g. data.items; empty = the root array.',
|
|
555
|
+
cliLinesMode: 'Text line mode',
|
|
556
|
+
cliLinesModeHint: 'Two ways a line becomes a result.',
|
|
557
|
+
cliOptUrlLines: 'url-lines · lines holding a URL',
|
|
558
|
+
cliOptTsv: 'tsv · tab separated columns',
|
|
559
|
+
cliColumns: 'Columns',
|
|
560
|
+
cliColumnsHint: 'Comma separated, e.g. id, title, link.',
|
|
561
|
+
cliFields: 'Field mapping',
|
|
562
|
+
cliFieldsNote: 'A dotted path per result field, into one item of the tool\'s output. The URL is required and must be an http(s) link.',
|
|
563
|
+
cliFieldUrl: 'URL',
|
|
564
|
+
cliFieldTitle: 'Title',
|
|
565
|
+
cliFieldSnippet: 'Snippet',
|
|
566
|
+
cliFieldPublishedAt: 'Time',
|
|
567
|
+
cliFieldUrlHint: 'e.g. link or data.url',
|
|
568
|
+
cliFieldTitleHint: 'e.g. title',
|
|
569
|
+
cliFieldSnippetHint: 'e.g. summary',
|
|
570
|
+
cliFieldPublishedAtHint: 'e.g. published_at',
|
|
571
|
+
cliFieldComplex: 'A more complex mapping: edit it in the JSON view',
|
|
572
|
+
cliTimeout: 'Timeout',
|
|
573
|
+
cliTimeoutHint: '1000-180000 ms.',
|
|
574
|
+
cliPurpose: 'Purpose',
|
|
575
|
+
cliEngine: 'As a general search engine',
|
|
576
|
+
cliEngineHint: 'Can join the general search order, fused and de-duplicated.',
|
|
577
|
+
cliPlatforms: 'Platforms it serves',
|
|
578
|
+
cliPlatformsHint: 'Can join the backend order of these platforms.',
|
|
579
|
+
cliPlatformUnknown: 'No backend chain for this platform',
|
|
580
|
+
cliPlatformsAdd: 'Platform id, Enter adds',
|
|
581
|
+
cliConfidenceLabel: 'Confidence',
|
|
582
|
+
cliConfidenceHint: '0-1; empty = 0.5.',
|
|
583
|
+
cliConfidenceNote: 'Confidence makes this source weigh a little less when several sources are fused, and is printed with its results; 1 changes nothing. The "Search order" list can override it per source.',
|
|
584
|
+
cliAdvanced: 'Advanced',
|
|
585
|
+
cliPackageNote: 'Install note',
|
|
586
|
+
cliPackageNoteHint: 'Shown when the command is missing.',
|
|
587
|
+
cliHelpArgs: 'Help command',
|
|
588
|
+
cliHelpArgsHint: 'Space separated, e.g. search --help',
|
|
589
|
+
cliMustContain: 'Help must contain',
|
|
590
|
+
cliMustContainHint: 'Proves it is the right program.',
|
|
591
|
+
cliMaxOutput: 'Output cap',
|
|
592
|
+
cliMaxOutputHint: '1024-16777216 bytes.',
|
|
593
|
+
unitBytes: 'bytes',
|
|
594
|
+
cliJson: 'View JSON',
|
|
595
|
+
cliJsonNote: 'Edit the whole spec; valid edits sync back into the form above.',
|
|
596
|
+
cliJsonBad: 'The JSON cannot be parsed: {why}',
|
|
597
|
+
cliProblems: 'This spec has problems',
|
|
598
|
+
cliValid: 'The spec is valid.',
|
|
599
|
+
cliApplyBlocked: 'A spec with problems cannot go into the draft.',
|
|
600
|
+
cliTrial: 'Try it',
|
|
601
|
+
cliTrialNote: 'A real run: the command is probed (version and help), then one search runs with the sample query. Read-only, no login, nothing is stored.',
|
|
602
|
+
cliTrialQuery: 'Sample query',
|
|
603
|
+
cliTrialQueryDefault: 'hello',
|
|
604
|
+
cliTrialRun: 'Run once',
|
|
605
|
+
cliTrialRunning: 'Running…',
|
|
606
|
+
cliTrialUnavailable: 'This host gives the plugin no channel, so Try it is unavailable here. After saving, check readiness with web_call sources.status and search once with search.run.',
|
|
607
|
+
cliTrialInvalid: 'The spec has problems: fix them before trying it.',
|
|
608
|
+
cliTrialOk: 'It ran: {n} result(s) parsed, the first {m} shown, {ms} ms.',
|
|
609
|
+
cliTrialFailed: 'It did not succeed (stopped at "{stage}"):',
|
|
610
|
+
cliTrialStageDisabled: 'disabled by settings',
|
|
611
|
+
cliTrialStageValidate: 'validation',
|
|
612
|
+
cliTrialStageProbe: 'probing the command',
|
|
613
|
+
cliTrialStageSearch: 'search',
|
|
614
|
+
cliTrialRaw: 'What the tool said',
|
|
615
|
+
cliTrialResults: 'Parsed results',
|
|
616
|
+
cliTrialHint: 'Suggestion: {hint}',
|
|
617
|
+
cliTrialLabel: 'User-defined, not verified by the plugin',
|
|
618
|
+
cliTrialRpcFailed: 'The trial did not finish: {why}',
|
|
619
|
+
chainEdit: 'Edit the order →', advancedRawTitle: 'Raw JSON', advancedRawHint: 'the whole JSON of the platform backend order and the custom CLIs',
|
|
620
|
+
cliOutput: 'Output',
|
|
621
|
+
restartBadge: 'Applies after a plugin restart',
|
|
622
|
+
restartBadgeSnapshot: 'Snapshot folder: after a plugin restart',
|
|
623
|
+
restartWhyToolSurface: 'The tools (web_index + web_call, or one per action) are registered when the plugin starts, so a change needs a plugin restart.',
|
|
624
|
+
restartWhyPlaywright: 'The snapshot folder is fixed when the plugin starts; playwright.enabled takes effect at once.',
|
|
625
|
+
restartWhyProviderId: 'The provider id is given to the host at registration, so a change needs a plugin restart.',
|
|
626
|
+
restartWhyRegisterProvider: 'Whether the ctx.web provider is registered is decided when the plugin starts, so a change needs a plugin restart.',
|
|
627
|
+
restartWhyTimeoutMs: 'Each action\'s deadline and the host tool ceiling are fixed at start (the time budget inside a search follows the setting at once), so a change needs a plugin restart.',
|
|
628
|
+
restartWhyMemoryCacheEntries: 'The in-process cache is created with this size at start, so a change needs a plugin restart.',
|
|
629
|
+
restartWhyDbPath: 'The database (and the agent overlay file) is opened at start, so a new path needs a plugin restart; data at the old path is not moved.',
|
|
630
|
+
restartWhyVerbose: 'The load marker is written at start, so a change needs a plugin restart.',
|
|
631
|
+
savebarRestart: '{fields}: takes effect only after the plugin restarts.',
|
|
632
|
+
summaryPendingRestart: '{n} setting(s) wait for a restart',
|
|
633
|
+
pendingRestartLine: 'Waiting for a restart: running {running}, configured {configured}',
|
|
634
|
+
pendingEmpty: '(empty)',
|
|
635
|
+
groupAgent: 'Agent changes',
|
|
636
|
+
groupAgentSub: 'What an agent changed with config.*: live, and your configuration is untouched',
|
|
637
|
+
agentBadge: 'Changed by agent',
|
|
638
|
+
agentTip: 'Set to {value} (your configuration holds {baseline}) · {reason} · {at} · {who}',
|
|
639
|
+
agentNoReason: '(no reason recorded)',
|
|
640
|
+
agentActorAgent: 'agent',
|
|
641
|
+
agentActorUser: 'you (panel)',
|
|
642
|
+
agentAdopt: 'Adopt into configuration',
|
|
643
|
+
agentRevoke: 'Revoke',
|
|
644
|
+
agentRevokeAll: 'Revoke all',
|
|
645
|
+
agentRefresh: 'Refresh',
|
|
646
|
+
agentRefreshing: 'Reading…',
|
|
647
|
+
agentNow: 'In force:',
|
|
648
|
+
agentConfigHolds: 'Your configuration:',
|
|
649
|
+
agentCount: '{n} change(s)',
|
|
650
|
+
agentNote: 'The search order, source rules, confidence, platform backends and custom CLIs an agent changed with the config.* actions sit in a separate overlay file. They apply at once and never edit your configuration. "Adopt into configuration" writes the value into your configuration (one atomic write, like Save) and then drops the overlay entry; "Revoke" just drops it. Every change carries a reason and is kept in an audit trail.',
|
|
651
|
+
agentEmpty: 'The agent has changed nothing.',
|
|
652
|
+
agentLoading: 'Reading…',
|
|
653
|
+
agentNotLoaded: 'Not read yet. Press Refresh.',
|
|
654
|
+
agentUnavailable: 'The agent changes cannot be read: the host offers no private channel for this plugin, or the plugin is older. An agent can still call config.inspect.',
|
|
655
|
+
agentInvalid: 'The overlay file is ignored as a whole (the plugin runs on your configuration): {problem} "Revoke all" moves the bad file aside and starts fresh.',
|
|
656
|
+
agentAdoptFailed: 'The configuration was not written (the host refused), so the overlay is unchanged.',
|
|
657
|
+
agentAdoptHalf: 'The value is in your configuration, but the overlay entry could not be dropped: {why} Refresh and revoke it by hand.',
|
|
658
|
+
agentRevokeFailed: 'Revoke failed: {why}',
|
|
659
|
+
agentFile: 'Overlay file {file} · revision {revision}',
|
|
660
|
+
agentAuditTitle: 'Recent audit records ({n})',
|
|
661
|
+
agentAuditHint: 'the reason, time and before / after of every change',
|
|
662
|
+
agentAuditEmpty: 'No records yet.',
|
|
663
|
+
agentKindEngines: 'Engine order',
|
|
664
|
+
agentKindPriority: 'Priority sources',
|
|
665
|
+
agentKindDisabled: 'Disabled sources',
|
|
666
|
+
agentKindConfidence: 'Confidence',
|
|
667
|
+
agentKindPlatform: 'Platform backend order',
|
|
668
|
+
agentKindCli: 'Custom CLI',
|
|
669
|
+
summaryAgent: '{n} agent change(s)',
|
|
670
|
+
summaryAgentOpen: 'view',
|
|
671
|
+
agentCliTitle: 'CLIs added by an agent',
|
|
672
|
+
agentCliNote: 'These CLIs live only in the overlay file, so they are not in the list above.',
|
|
673
|
+
orderAgentChain: 'With the agent\'s changes a search tries:',
|
|
674
|
+
orderAgentChainNone: 'With the agent\'s changes no engine is left (all are disabled).',
|
|
675
|
+
agentNeedsCli: 'Uses a custom CLI that only the overlay holds: {ids}. Adopt that CLI too, or your configuration will name a CLI it does not define.',
|
|
225
676
|
};
|
|
226
677
|
//# sourceMappingURL=locales.js.map
|