@eddyskywalker/dsh-chatgpt-subscription 0.11.7 → 0.12.1
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 +11 -0
- package/README.md +34 -2
- package/lib/client.js +125 -4
- package/lib/client.js.map +1 -1
- package/lib/index.js +349 -19
- package/lib/types/client/CodexSubscriptionSection.d.ts +18 -0
- package/lib/types/client/CodexSubscriptionSection.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +45 -5
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/host/antigravity/mapper.d.ts +3 -2
- package/lib/types/host/antigravity/mapper.d.ts.map +1 -1
- package/lib/types/host/antigravity/tool-schema.d.ts +13 -1
- package/lib/types/host/antigravity/tool-schema.d.ts.map +1 -1
- package/lib/types/host/claude/mapper.d.ts +57 -3
- package/lib/types/host/claude/mapper.d.ts.map +1 -1
- package/lib/types/host/codex-fetch.d.ts.map +1 -1
- package/lib/types/host/fetch-address-policy.d.ts +2 -1
- package/lib/types/host/fetch-address-policy.d.ts.map +1 -1
- package/lib/types/host/fetch-configuration.d.ts +6 -0
- package/lib/types/host/fetch-configuration.d.ts.map +1 -0
- package/lib/types/host/routes.d.ts +2 -2
- package/lib/types/host/routes.d.ts.map +1 -1
- package/lib/types/host/search-provider-switcher.d.ts +2 -0
- package/lib/types/host/search-provider-switcher.d.ts.map +1 -1
- package/lib/types/index.d.ts +7 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/contracts.d.ts +11 -0
- package/lib/types/shared/contracts.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
- **Antigravity Claude 工具 schema 兼容(#39)**:仅对 Claude 目标在出站边界折叠 `anyOf` / `oneOf` / `allOf` 与类型联合,优先保留可填写的对象形状,把原始备选形式与约束摘要放入描述;同类型枚举合并保留空字符串重置值。Gemini 继续沿用原转换路径,原工具 schema 不被修改。覆盖调度参数、权限枚举、引用、数组、根联合、可空和单分支。折叠是网关兼容降级,并非等价 JSON Schema 转换:声明形式可能收窄,工具端仍校验参数。验证使用离线序列化请求;禁用折叠后 5 条回归立即失败,恢复后通过。两项 issue 修复组合的强制源码/测试类型检查、构建通过,全量测试 2456 passed / 7 skipped。未使用真实 Antigravity 账号复测上游,也未部署到当前运行中的 GUI。
|
|
6
|
+
|
|
7
|
+
- **网页抓取选择与上限可配置(#40)**:插件 Config 新增 `fetchProvider: auto | plugin | dsh`(默认 auto 保持既有行为)、`fetchMaxBodyChars`(默认 100000)和 `fetchMaxResponseBytes`(默认 2097152),上限须为正安全整数。显式 dsh 优先于代理检测和 Codex 搜索选择,plugin 则独立启用插件抓取。状态接口、设置页及不含代理凭据的切换日志展示配置与上限;README 说明如何修改插件 Config 并重载。回归覆盖真实插件注册、provider 重载、超过十万字符、多字节文本的字节/字符截断、显式模式优先级与诊断信息。临时恢复原注册接线后 3 条上限测试均复现 100000 字符截断,恢复原选择逻辑后显式 DSH 测试复现错误接管;修复恢复后全部通过。生命周期测试固定离线 DNS,不再依赖本机代理。DSH 抓取模式不使用插件上限;工具层另有输出限制,不承诺放大插件上限后可拿到整页。
|
|
8
|
+
|
|
9
|
+
- **修复 Claude(订阅)会话因一张宽图被永久卡死**:`messages.N.content.M.image.source.base64.data: At least one of the image dimensions exceed max allowed size for many-image requests: 2000 pixels`。
|
|
10
|
+
- **根因**:Messages 接口限制单张图片最长边为 8000 px;一次请求的图片**超过 20 张**时,每张图的最长边还不能超过 **2000 px**。DSH 存图时按总像素 2048×2048、最长边 8192 归一化,所以 2904×1272 这类并排对比截图会原样存下来;本线路随后按原样发送。会话历史不会丢掉旧图,图片只会越积越多。一旦超过 20 张、其中有一张宽于 2000 px,整次请求就会返回 400,之后每一轮(包括 fork 出来的会话)都会带上这张图,同样失败,无法自行恢复。
|
|
11
|
+
- **修法**:`resolveRequestImages` 先统计本次请求的图片块数(同一附件重复出现按多次计,tool-result 里嵌套的图片也计入),据此确定最长边上限(超过 20 张取 2000,否则取 8000)。只有超出上限的图片才通过 harness 的 `attachments.readImageRequest` 取一份按最长边缩小、结果确定的请求版本;已在上限内的图片仍按原字节发送,提示缓存前缀保持不变。存储的原图和会话历史都不改动。取不到缩小版本(后端不支持派生,或返回的版本仍然超限)时,这张图改成可见的「image unavailable」占位文本,而不是把原图发出去,导致整次请求失败。取消(abort)照常向上抛出。缩小版本的字节目标为原始 3.5 MiB(base64 约 4.9 MB),低于单图 5 MB 的上限。peer 范围内的每一代 harness(0.1.2-alpha.5 起)都声明了 `readImageRequest`,但旧代使用 `maxPixels` 而新版使用宽高目标;请求同时携带两套参数,旧代像素预算按未取整宽高比计算,避免窄图取整后越过最长边上限。新增 4 条旧代投影算法回归(横图、竖图和极窄图),无需升级 harness。
|
|
12
|
+
- **测试**:`test/claude-mapper.test.ts` 新增「Request image edge limits」7 条:20 张图以内宽图原样发送;超过 20 张时只缩小那张 2904×1272 的图(目标为 2000×876),线上的 tool_result 里携带的是缩小后的字节,其余 20 张原样发送;计数包括重复附件和嵌套图片;单张 4000×8192 的图会被压到 8000 上限;竖图按最长边保持宽高比,缺少尺寸的引用保持不动;无法派生或派生结果仍超限时改为占位文本;取消会原样传播。**已实测承重**:让 `resolveRequestImages` 恢复为按原样发送后,其中 4 条立即失败。
|
|
13
|
+
- **验证**:`npm run typecheck` 0 错误;`npm run build` 通过;全量 `npm test` 2405 passed / 9 skipped,只有 `test/web-provider-lifecycle.test.ts` 的 3 条失败。这 3 条与本次无关:本机代理把 `example.com` 解析成假 IP(198.18.0.206 / fc00::ce),在未改动的 master 上同样失败。另外用一个真实卡死会话的历史(34 张图,其中三张为 2904×1272)离线回放:只有那三张被缩小到 2000×876,其余 31 张原样发送。
|
|
14
|
+
- **边界**:未覆盖调用方直接内联 base64、不带附件引用的图片;这类图片没有尺寸信息,无法派生缩小版本,按原样发送。
|
|
15
|
+
|
|
5
16
|
- **插件内上下文预算恢复**:Kimi Code、MiniMax Code、Command Code、Claude、WorkBuddy 的模型请求在 HTTP 400/422 明确报告完整且一致的窗口、输入和输出 token 计数时,若输入仍能放下、上游输出预留等于实际发送的上限,会保留完整消息和工具,只降低输出上限并重试一次(预留 1024 tokens 余量,至少保留 1024 输出 tokens)。普通请求与摘要请求共用此路径,不修改 DSH、不截断历史。显式 thinking budget 不满足时不强行重试;鉴权、限流、字节限制、模糊计数、服务端忽略参数和流内错误保持原处理,输出截断也仍报告失败。Kimi/MiniMax 共用的输入估算补计推理文本和工具调用参数,避免将这些实际输入计为零。验证:截图预算的三种输出字段回归、MiniMax 普通/摘要真实 LLM 服务调用、Kimi Chat Completions 与 Command Code Responses 适配器回归通过;全量插件测试、强制源码及测试类型检查、构建通过。Codex 不支持输出上限字段,未套用此恢复;未进行真实账号端到端验证,不能据此认定截图中未知线路的所有压缩故障已解决。
|
|
6
17
|
|
|
7
18
|
- **修复设置页「订阅服务」整页样式丢失(只剩标签栏有样式)**。
|
package/README.md
CHANGED
|
@@ -375,9 +375,41 @@ DSH 模型选择器应显示 **“Codex(ChatGPT 订阅)”**。GPT-6 系列
|
|
|
375
375
|
|
|
376
376
|
额度卡片展示:**套餐名**(由订阅返回的机器 id 查表得出,表在 `src/host/command-code/plans.ts`,按最长前缀匹配)、**订阅状态与续费日期**、**滚动窗口用量**(`windowLimits` 的 `fiveHour` / `weekly`,按官方 CLI 同款标签 `5-hour` / `Weekly` 显示,并各自带重置倒计时),以及**余额明细**(月度额度 / 已购额度 / 赠送额度,另附合计)。服务只回报数字不回报名称的字段一律补上可读标签——窗口按 key 命名,余额按池命名,实在没有名字的兜底为 `Extra allowance` 并注明来源,不会渲染成 `meter-1` 这类无意义编号。
|
|
377
377
|
|
|
378
|
-
|
|
378
|
+
**搜索来源** 切换 DSH 的**搜索**后端;网页**抓取**来源由下面的**抓取模式**决定。模式为 `auto`(默认)时跟随此处的搜索选择:选择 ChatGPT 来源后,网页也改由本插件在 Host 抓取,并使用上述网络代理设置;模式为 `dsh` 时即使选了 ChatGPT 搜索,抓取也仍由 DSH 原有来源完成。纯 TUN 模式可使用直连,流量由虚拟网卡接管。来源切换即时生效,DSH web 服务重载后会重新注册插件后端,并保留切回 DSH 默认来源所需的配置。设置页在该选择器下方**只读**展示 Host 上报的抓取来源、切换器状态、抓取模式与插件上限;Host 未提供这些字段(较旧的 Host)时整个区块不显示。
|
|
379
379
|
|
|
380
|
-
**网页抓取后端(web_fetch)** DSH 内置抓取 provider 会先解析域名、校验并固定解析结果,而且只在进程环境变量里读到代理时才走代理——系统代理对它不可见。代理工具(Clash/Mihomo 等)常把域名解析成自己的 fake-ip 地址(默认 `198.18.0.0/15`),于是内置 provider 直接以 `WEB_BLOCKED_URL`(resolves to a non-public IP address
|
|
380
|
+
**网页抓取后端(web_fetch)** DSH 内置抓取 provider 会先解析域名、校验并固定解析结果,而且只在进程环境变量里读到代理时才走代理——系统代理对它不可见。代理工具(Clash/Mihomo 等)常把域名解析成自己的 fake-ip 地址(默认 `198.18.0.0/15`),于是内置 provider 直接以 `WEB_BLOCKED_URL`(resolves to a non-public IP address)拒绝,代理根本没被用上。因此在 `auto` 模式下,只要插件配置了可用代理(**网络代理** 选系统代理且检测到,或填写自定义代理),`web_fetch` 就改用本插件的 provider:由代理解析源站,与 DSH 对“走代理的请求”采用的语义一致;未配置代理时仍由 DSH 内置 provider 抓取,保留其解析与固定策略。若在纯 TUN 模式下把代理设为**直连**,内置 provider 会重新接管(`auto` 模式下),此时可改回系统代理让插件接管抓取。代理如果在 DSH 启动之后才可用(代理工具后启动,或首次探测失败),插件会在下一次探测到代理时重新选择抓取后端,不必重启或改设置。
|
|
381
|
+
|
|
382
|
+
#### 抓取模式与上限(插件 Config)
|
|
383
|
+
|
|
384
|
+
抓取**模式**与**上限**属于插件部署配置,不在设置页的偏好里:设置页只读展示当前值,要改写在 profile 的 `cordis.patch.yml` 里,**重载插件或重启 DSH 后生效**。
|
|
385
|
+
|
|
386
|
+
写在**安装时已有的那一条插件行**上(`id: dsh-chatgpt-subscription`,包名 `@eddyskywalker/dsh-chatgpt-subscription`)的 `config` 片段:
|
|
387
|
+
|
|
388
|
+
```yaml
|
|
389
|
+
# $DSH_HOME/profiles/<profile>/cordis.patch.yml
|
|
390
|
+
- id: dsh-chatgpt-subscription
|
|
391
|
+
config:
|
|
392
|
+
fetchProvider: auto # auto | plugin | dsh
|
|
393
|
+
fetchMaxBodyChars: 100000 # 解码后正文保留的字符数
|
|
394
|
+
fetchMaxResponseBytes: 2097152 # 响应体保留的字节数(2 MiB)
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
> patch 按 id 定位条目并**整体替换**它的 `config`,所以在这一行上追加字段时请保留原有的其它字段。
|
|
398
|
+
|
|
399
|
+
| 字段 | 默认 | 含义 |
|
|
400
|
+
|---|---|---|
|
|
401
|
+
| `fetchProvider` | `auto` | `auto` 跟随搜索来源(有可用代理或选了 Codex 搜索时用插件抓取);`plugin` 始终用本插件抓取;`dsh` **强制保留 DSH 原有的抓取来源**,即使有代理或选了 Codex 搜索也不接管 |
|
|
402
|
+
| `fetchMaxBodyChars` | `100000` | 解码后交给工具的正文上限(字符) |
|
|
403
|
+
| `fetchMaxResponseBytes` | `2097152` | 进入解码前的响应体上限(字节) |
|
|
404
|
+
|
|
405
|
+
两者都必须是**正安全整数**,否则该配置不被接受(DSH 不会把非法值当成 0 使用)。
|
|
406
|
+
|
|
407
|
+
必须说清的四条边界:
|
|
408
|
+
|
|
409
|
+
- **`fetchMaxResponseBytes` 是“读进来之后再截断”,不是下载量或内存的硬上限。** 实现仍是 `response.arrayBuffer()` 先把整个响应体读进内存,超出部分才被切掉;调小它省不下下载流量和峰值内存,只能限制进入解码与工具结果的内容量。
|
|
410
|
+
- **工具层另有上限。** 这两个数字只管本插件 provider 交给 `web_fetch` 的内容,DSH 工具结果本身还有自己的裁剪预算,因此**调大它们并不保证取回完整页面**。
|
|
411
|
+
- **两个上限只在实际使用插件抓取时生效**;走 DSH 原有抓取来源(`dsh` 模式,或 `auto` 模式下本次抓取没落到插件)时不适用。设置页会直接写明这一点。
|
|
412
|
+
- **plugin 抓取不做 DNS 固定(pinning)。** 内置 provider 会解析并固定解析结果,而代理的 fake-ip DNS 让这一步无法照搬;本插件沿用既有安全模型——只做 `http/https` 与**目标地址不得落在私网/回环**的校验,域名交给解析它的代理解析,解析失败也放行。抬高上限不改变这条边界。
|
|
381
413
|
|
|
382
414
|
卸载前建议先在设置页点击 **“注销”**,它会删除当前平台的凭据和 Host 内存中的额度缓存。
|
|
383
415
|
|
package/lib/client.js
CHANGED
|
@@ -1345,6 +1345,10 @@ window.__ModuleLoader__.load({
|
|
|
1345
1345
|
})]
|
|
1346
1346
|
})]
|
|
1347
1347
|
}),
|
|
1348
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(FetchProviderStatusCard, {
|
|
1349
|
+
status,
|
|
1350
|
+
t
|
|
1351
|
+
}),
|
|
1348
1352
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1349
1353
|
className: "dsha-pref-row",
|
|
1350
1354
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("outputVerbosity") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -1624,6 +1628,83 @@ window.__ModuleLoader__.load({
|
|
|
1624
1628
|
})]
|
|
1625
1629
|
});
|
|
1626
1630
|
}
|
|
1631
|
+
const SWITCHER_STATE_LABELS = {
|
|
1632
|
+
idle: "switcherStateIdle",
|
|
1633
|
+
applying: "switcherStateApplying",
|
|
1634
|
+
applied: "switcherStateApplied",
|
|
1635
|
+
missing: "switcherStateMissing",
|
|
1636
|
+
failed: "switcherStateFailed"
|
|
1637
|
+
};
|
|
1638
|
+
const FETCH_MODE_LABELS = {
|
|
1639
|
+
auto: "fetchModeAuto",
|
|
1640
|
+
plugin: "fetchModePlugin",
|
|
1641
|
+
dsh: "fetchModeDsh"
|
|
1642
|
+
};
|
|
1643
|
+
/**
|
|
1644
|
+
* Read-only view of the fetch selection, shown under the search source.
|
|
1645
|
+
*
|
|
1646
|
+
* Both blocks are optional on the status DTO, so every row is rendered only from
|
|
1647
|
+
* a value the host actually reported. That distinction is load-bearing: a
|
|
1648
|
+
* missing `switcher` means the host tells us nothing and the row stays hidden,
|
|
1649
|
+
* while a reported `configuredFetchProvider: null` is a real answer — the host
|
|
1650
|
+
* pinned no provider, which is the DSH default. Guessing an id there would claim
|
|
1651
|
+
* a provider the settings page never observed.
|
|
1652
|
+
*
|
|
1653
|
+
* Nothing here is editable: the mode and the limits live in the plugin Config,
|
|
1654
|
+
* not in the preferences this card sits in, so the numbers cannot be mistaken for
|
|
1655
|
+
* a setting that this page can change.
|
|
1656
|
+
*/
|
|
1657
|
+
function FetchProviderStatusCard({ status, t }) {
|
|
1658
|
+
const switcher = status?.switcher;
|
|
1659
|
+
const configuration = status?.fetchConfiguration;
|
|
1660
|
+
if (switcher === void 0 && configuration === void 0) return null;
|
|
1661
|
+
const state = switcher !== null && switcher !== void 0 && switcher.state in SWITCHER_STATE_LABELS ? switcher.state : null;
|
|
1662
|
+
const mode = configuration !== void 0 && configuration.fetchProvider in FETCH_MODE_LABELS ? configuration.fetchProvider : void 0;
|
|
1663
|
+
const maxBodyChars = fetchLimit(configuration?.fetchMaxBodyChars);
|
|
1664
|
+
const maxResponseBytes = fetchLimit(configuration?.fetchMaxResponseBytes);
|
|
1665
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1666
|
+
className: "dsha-context-settings",
|
|
1667
|
+
"data-fetch-status": state ?? "none",
|
|
1668
|
+
children: [
|
|
1669
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("fetchStatus") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1670
|
+
className: "dsha-muted",
|
|
1671
|
+
children: t("fetchStatusHint")
|
|
1672
|
+
})] }),
|
|
1673
|
+
switcher !== null && switcher !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoRow, {
|
|
1674
|
+
label: t("fetchConfiguredProvider"),
|
|
1675
|
+
value: switcher.configuredFetchProvider || t("fetchProviderDshDefault")
|
|
1676
|
+
}) : null,
|
|
1677
|
+
state !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoRow, {
|
|
1678
|
+
label: t("switcherState"),
|
|
1679
|
+
value: t(SWITCHER_STATE_LABELS[state])
|
|
1680
|
+
}) : null,
|
|
1681
|
+
mode !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoRow, {
|
|
1682
|
+
label: t("fetchMode"),
|
|
1683
|
+
value: t(FETCH_MODE_LABELS[mode])
|
|
1684
|
+
}) : null,
|
|
1685
|
+
maxBodyChars !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoRow, {
|
|
1686
|
+
label: t("fetchMaxBodyChars"),
|
|
1687
|
+
value: `${maxBodyChars} ${t("characters")}`
|
|
1688
|
+
}) : null,
|
|
1689
|
+
maxResponseBytes !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoRow, {
|
|
1690
|
+
label: t("fetchMaxResponseBytes"),
|
|
1691
|
+
value: `${maxResponseBytes} ${t("bytes")}`
|
|
1692
|
+
}) : null,
|
|
1693
|
+
mode !== void 0 && mode !== "plugin" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1694
|
+
className: "dsha-muted",
|
|
1695
|
+
children: t("fetchLimitsInactive")
|
|
1696
|
+
}) : null,
|
|
1697
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1698
|
+
className: "dsha-muted",
|
|
1699
|
+
children: t("fetchConfigSource")
|
|
1700
|
+
})
|
|
1701
|
+
]
|
|
1702
|
+
});
|
|
1703
|
+
}
|
|
1704
|
+
/** A limit is shown only once it is the positive safe integer the Config promises. */
|
|
1705
|
+
function fetchLimit(value) {
|
|
1706
|
+
return value !== void 0 && Number.isSafeInteger(value) && value >= 1 ? value : null;
|
|
1707
|
+
}
|
|
1627
1708
|
function storageLabel$1(storage, t) {
|
|
1628
1709
|
if (storage === void 0 || !storage.available) return t("storageUnavailable");
|
|
1629
1710
|
if (storage.kind === "windows-dpapi") return t("storageWindows");
|
|
@@ -9527,10 +9608,30 @@ window.__ModuleLoader__.load({
|
|
|
9527
9608
|
summaryConcise: "简洁(显示简要推理摘要)",
|
|
9528
9609
|
summaryDetailed: "详细(显示更详细的推理摘要)",
|
|
9529
9610
|
summaryNone: "无(不显示推理摘要)",
|
|
9530
|
-
searchProvider: "
|
|
9531
|
-
searchProviderHint: "选择 DSH
|
|
9611
|
+
searchProvider: "搜索来源",
|
|
9612
|
+
searchProviderHint: "选择 DSH 联网搜索使用默认来源,或改用当前 ChatGPT 订阅的 Codex 来源(自动走代理隧道)。抓取模式为 auto 时,抓取来源跟随此选择。",
|
|
9532
9613
|
searchProviderDsh: "DSH 默认",
|
|
9533
9614
|
searchProviderCodex: "ChatGPT(代理隧道)",
|
|
9615
|
+
fetchStatus: "抓取来源(只读)",
|
|
9616
|
+
fetchStatusHint: "以下内容由 Host 上报,只读展示。",
|
|
9617
|
+
fetchConfiguredProvider: "配置的抓取 Provider",
|
|
9618
|
+
fetchProviderDshDefault: "DSH 默认(Host 未固定抓取 provider)",
|
|
9619
|
+
switcherState: "抓取选择器状态",
|
|
9620
|
+
switcherStateIdle: "空闲(尚未应用选择)",
|
|
9621
|
+
switcherStateApplying: "应用中(正在切换 Host 的 web provider)",
|
|
9622
|
+
switcherStateApplied: "已应用",
|
|
9623
|
+
switcherStateMissing: "未找到可切换的 web 服务",
|
|
9624
|
+
switcherStateFailed: "切换失败,请检查 Host 日志",
|
|
9625
|
+
fetchMode: "抓取模式",
|
|
9626
|
+
fetchModeAuto: "auto(有可用代理或选了 ChatGPT 搜索时用插件抓取)",
|
|
9627
|
+
fetchModePlugin: "plugin(始终用本插件抓取)",
|
|
9628
|
+
fetchModeDsh: "dsh(保留 DSH 原有抓取来源)",
|
|
9629
|
+
fetchMaxBodyChars: "插件正文上限",
|
|
9630
|
+
fetchMaxResponseBytes: "插件响应体上限",
|
|
9631
|
+
characters: "字符",
|
|
9632
|
+
bytes: "字节",
|
|
9633
|
+
fetchLimitsInactive: "仅在实际使用插件抓取时生效;走 DSH 原有抓取来源时不适用这两个上限。",
|
|
9634
|
+
fetchConfigSource: "模式与上限在插件 Config 中修改(不是本页面偏好),修改后重载插件或重启 DSH 生效。",
|
|
9534
9635
|
providerDefault: "使用 Provider 默认值",
|
|
9535
9636
|
contextWindows: "模型上下文窗口",
|
|
9536
9637
|
contextWindowsHint: "只列出已勾选「可用模型」的条目。默认取模型目录值(GPT-6 系列 384K,最高 872K;其余最高 1M),该值用于 DSH 的压缩与溢出判断,可输入 872K、512K 等容量;改过的模型可单独或一键恢复默认。",
|
|
@@ -9660,10 +9761,30 @@ window.__ModuleLoader__.load({
|
|
|
9660
9761
|
summaryConcise: "Concise (brief summary)",
|
|
9661
9762
|
summaryDetailed: "Detailed (in-depth summary)",
|
|
9662
9763
|
summaryNone: "None (hide reasoning summary)",
|
|
9663
|
-
searchProvider: "Search
|
|
9664
|
-
searchProviderHint: "Choose whether DSH web
|
|
9764
|
+
searchProvider: "Search provider",
|
|
9765
|
+
searchProviderHint: "Choose whether DSH web search uses the default provider or the Codex proxy-backed source from this ChatGPT subscription. Fetch mode \"auto\" follows this choice.",
|
|
9665
9766
|
searchProviderDsh: "DSH default",
|
|
9666
9767
|
searchProviderCodex: "ChatGPT (Proxy tunnel)",
|
|
9768
|
+
fetchStatus: "Fetch source (read-only)",
|
|
9769
|
+
fetchStatusHint: "Reported by the host. Read-only.",
|
|
9770
|
+
fetchConfiguredProvider: "Configured fetch provider",
|
|
9771
|
+
fetchProviderDshDefault: "DSH default (the host pins no fetch provider)",
|
|
9772
|
+
switcherState: "Fetch switcher state",
|
|
9773
|
+
switcherStateIdle: "Idle (no selection applied yet)",
|
|
9774
|
+
switcherStateApplying: "Applying (host web provider switch in progress)",
|
|
9775
|
+
switcherStateApplied: "Applied",
|
|
9776
|
+
switcherStateMissing: "No web service found to switch",
|
|
9777
|
+
switcherStateFailed: "Switch failed, check the host log",
|
|
9778
|
+
fetchMode: "Fetch mode",
|
|
9779
|
+
fetchModeAuto: "auto (fetches with the plugin when a proxy is available or the ChatGPT search source is selected)",
|
|
9780
|
+
fetchModePlugin: "plugin (always fetch with this plugin)",
|
|
9781
|
+
fetchModeDsh: "dsh (keep the DSH default fetch source)",
|
|
9782
|
+
fetchMaxBodyChars: "Plugin body limit",
|
|
9783
|
+
fetchMaxResponseBytes: "Plugin response limit",
|
|
9784
|
+
characters: "chars",
|
|
9785
|
+
bytes: "bytes",
|
|
9786
|
+
fetchLimitsInactive: "Only applied when the plugin actually fetches; the DSH default fetch source does not use these two limits.",
|
|
9787
|
+
fetchConfigSource: "Mode and limits are changed in the plugin Config, not in these settings; they take effect after a plugin reload or a DSH restart.",
|
|
9667
9788
|
providerDefault: "Use provider default",
|
|
9668
9789
|
contextWindows: "Model context windows",
|
|
9669
9790
|
contextWindowsHint: "Lists the models checked under Available models. Each starts at its catalog value (384K for the GPT-6 family, up to 872K; up to 1M otherwise); DSH uses it for compaction and overflow detection. Values such as 872K and 512K are accepted, and a changed model can be restored one by one or all at once.",
|