@eddyskywalker/dsh-chatgpt-subscription 0.2.12 → 0.2.15
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 +25 -0
- package/README.md +3 -3
- package/lib/client.js +9 -190
- package/lib/client.js.map +1 -1
- package/lib/index.js +73 -108
- package/lib/types/client/CodexSubscriptionSection.d.ts.map +1 -1
- package/lib/types/client/antigravity/AntigravityComposerQuota.d.ts.map +1 -1
- package/lib/types/client/antigravity/AntigravitySection.d.ts.map +1 -1
- package/lib/types/client/antigravity/locales.d.ts +12 -0
- package/lib/types/client/antigravity/locales.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +1 -79
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/compat.d.ts +0 -11
- package/lib/types/compat.d.ts.map +1 -1
- package/lib/types/host/antigravity/adapter.d.ts +0 -1
- package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
- package/lib/types/host/antigravity/client.d.ts.map +1 -1
- package/lib/types/host/antigravity/mapper.d.ts +0 -1
- package/lib/types/host/antigravity/mapper.d.ts.map +1 -1
- package/lib/types/host/antigravity/types.d.ts +0 -1
- package/lib/types/host/antigravity/types.d.ts.map +1 -1
- package/lib/types/host/model-catalog.d.ts.map +1 -1
- package/lib/types/host/preferences.d.ts.map +1 -1
- package/lib/types/host/proxy-manager.d.ts +9 -1
- package/lib/types/host/proxy-manager.d.ts.map +1 -1
- package/lib/types/host/responses-mapper.d.ts +0 -1
- package/lib/types/host/responses-mapper.d.ts.map +1 -1
- package/lib/types/shared/contracts.d.ts +0 -13
- package/lib/types/shared/contracts.d.ts.map +1 -1
- package/lib/types/shared/preferences.d.ts +0 -3
- package/lib/types/shared/preferences.d.ts.map +1 -1
- package/package.json +29 -29
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.14 - 2026-09-10
|
|
4
|
+
|
|
5
|
+
- 移除失效的「子代理最大嵌套深度 / 子代理上下文预算」设置:这两个偏好键在 DSH 侧没有任何消费方(全仓库无引用),插件自身也只有写、没有读,保存了也不生效。它们源于 2026-08-28 的 `5b08e2e`——那次提交迁移到 DSH 原生子代理模型路由,删除了 `subagent-context-adapter` / `subagent-policy` / `SubagentSettingsSection`,但把这两个控件和偏好键留了下来。相关 DTO 字段、schema、路由校验、界面控件、6 条未引用文案与失效单测一并移除;子代理模型与思考深度改用 DSH 自身的“Subagent”设置卡片,最大嵌套深度由 preset 中 `tool-subagent` 的 `maxDepth` 决定,README 同步更正。
|
|
6
|
+
|
|
7
|
+
## 0.2.13 - 2026-09-10
|
|
8
|
+
|
|
9
|
+
- 回退 Codex 与 Antigravity 模型上新增的 `systemPromptUpdate: 'in-history'` 声明:Responses 线路把系统提示词放在顶层 `instructions`,Antigravity 把它放在固定的 `systemInstruction` 加一条 user turn,两条路由都无法把"历史中最后一条 system 消息"当作完整系统提示词。声明该能力会让 DSH 在提示词变化时改为追加 system 节点并保留旧节点,而两个 mapper 会把新旧提示词一并发出。Codex mapper 同时改为只取最新一条非空 system 消息,避免将来重新声明时再次拼接过期提示词。
|
|
10
|
+
- 移除 `src/compat.ts` 对 `@deepseek-ai/dsh-llm` 的 `ContentBlockMap.file` / `LlmResolvedModelInfo.systemPromptUpdate` 模块增强:本地 DSH(`packages/llm/llm`,0.1.5-rc.1)已经声明 `'file': FileBlock`,与增强中的 `Record<string, unknown>` 冲突(TS2717),对着本地依赖编译会直接失败。
|
|
11
|
+
- 移除两个 mapper 中不可达的 `file` 内容块处理:DSH 内核在进入适配器之前已把文件块投影为 `fileHandleText`(`dsh-llm` 的 `projectFilesToText`),适配器永远收不到 `file` 块;原实现读取的 `byteSize` / `savedPath` 在真实 `FileAttachmentRef` 中也不存在(真实字段是 `bytes`)。
|
|
12
|
+
- 移除只完成一半的「智能体团队混合模型规则」(`teamModelRules`):该功能当时只有偏好存储、路由白名单校验、匹配函数和 64 条中英文案,没有任何地方据此选择子代理模型(DSH 内核对子代理模型走 `subagent/model-selection-policy`),因此连同 DTO、schema、路由处理、单测与未引用文案一并移除,等 DSH 提供介入点后再实现。
|
|
13
|
+
- 修复 Antigravity 新账号开通在全部端点失败时静默返回成功:`onboardUser` 现在会在候选端点循环结束后抛出最后一次失败,而不是让调用方误以为已开通。
|
|
14
|
+
- 修复登出竞态:`clearCachedQuota()` 增加 epoch 标记,登出时仍在途的配额请求不再回写 `cachedQuota`,也不再为已登出账号写入模型目录;in-flight 槽位改为按持有者清理,避免"清理后重新拉取"丢失新的在途请求。
|
|
15
|
+
- `/antigravity/api/status` 改用导出的 `ANTIGRAVITY_QUOTA_CACHE_TTL_MS`,不再内联 120000。
|
|
16
|
+
- 移除 Antigravity 设置页与输入框配额胶囊里重复的 `POST /quota`:Host 在 `/status` 中已经会刷新过期缓存,客户端再发一次会让单次挂载产生 2–4 次上游配额请求;配额空态改为明确提示(新增 `quotaEmpty` / `googleValidation` 文案,不再硬编码中文)。
|
|
17
|
+
- `parseEnvProxy` 新增 `envFile` 注入点:`$DSH_HOME/.env` 兜底代理探测现在有测试覆盖(含 `export` 前缀、引号、注释、空值、环境变量优先),既有"无代理返回 null"的断言也不再依赖运行机器上是否真的存在 `~/.dsh/.env`。
|
|
18
|
+
- Antigravity User-Agent 恢复按真实平台填写 `os_type` / `arch`(仍可用 `DSH_ANTIGRAVITY_OS` / `DSH_ANTIGRAVITY_ARCH` 覆盖),不再默认冒充 darwin/arm64。
|
|
19
|
+
- 移除未被引用的 `SANDBOX_ENDPOINT` 并修正端点注释;DSH 依赖区间末项由 `^0.1.5` 改为 `^0.1.5-rc.1`(`^0.1.5` 不匹配本地实际依赖 0.1.5-rc.1),并同步了长期滞后的 `package-lock.json` 根信息。
|
|
20
|
+
|
|
21
|
+
## 0.2.12 - 2026-09-10
|
|
22
|
+
|
|
23
|
+
- Antigravity 登录与开通:对齐官方 2.8.0 User-Agent 格式并支持环境变量覆盖,新增 `loadCodeAssist` 详情解析、免费层资格校验与 Google 账号安全验证链接提取,以及新账号的 `onboardUser` LRO 轮询开通。
|
|
24
|
+
- Antigravity 配额:`/status` 按 2 分钟 TTL 自动拉取配额,`/quota` 支持强制刷新并在并发调用间去重;Web 设置页与输入框配额胶囊自动获取配额,不再需要手动刷新。
|
|
25
|
+
- 代理:`auto` 模式在进程环境之外新增 `$DSH_HOME/.env` 兜底探测。
|
|
26
|
+
- 依赖:`@deepseek-ai/*` peer/dev 版本区间扩展到 `^0.1.3` / `^0.1.4` / `^0.1.5`。
|
|
27
|
+
|
|
3
28
|
## 0.2.10 - 2026-09-06
|
|
4
29
|
|
|
5
30
|
- 修复 Antigravity 模型元数据校验失败导致 Provider 整体消失的问题:在 `resolveModel` 中清洗并安全兜底 `defaultEffort`,确保透传给 DSH 内核的 `defaultEffort` 必定存在于当前模型的 `efforts` 清单内;解决 `gemini-3.1-pro` 等模型(仅支持 `low` / `high`)因默认回退 `medium` 触发 `@deepseek-ai/dsh-llm` 的 `INVALID_MODEL_REASONING` 校验异常导致 Provider 从模型选择列表中消失的问题(Issue #4)。
|
package/README.md
CHANGED
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
**设置页**
|
|
40
40
|
|
|
41
41
|
- 展示账号(脱敏 email、套餐、账号 ID 后四位)、连接状态、额度与订阅增强功能开关;
|
|
42
|
-
-
|
|
43
|
-
-
|
|
42
|
+
- 子代理的模型与思考深度沿用 DSH 自身设置:**设置 → Subagent** 卡片授权 Agent 可以为子代理挑选的模型(来自 DSH 已接入的全部 Provider,包含本插件的 Codex / Antigravity),新 Agent 的默认路由由 DSH 的 `agent-default-model` 设置提供;
|
|
43
|
+
- 最大嵌套深度是 DSH 子代理工具的装配配置(preset 中 `tool-subagent` 的 `maxDepth`,默认 3;`provider-managed` 表示把预算交给进程外提供方),不在本插件设置内;
|
|
44
44
|
- 6 Astra 与 5.6 Sol / Terra / Luna 默认使用 272K 有效上下文;订阅侧 6 Astra 可配置最高 872K,5.6 系列最高 1M,用于 DSH 压缩与溢出判断;其他模型保持目录声明值;
|
|
45
45
|
- 可访问的进度条、窄窗口/200% 缩放布局、深浅主题与 reduced-motion。
|
|
46
46
|
|
|
@@ -116,7 +116,7 @@ npx @deepseek-ai/dsh plugin --profile web add "link:C:\absolute\path\to\dsh-chat
|
|
|
116
116
|
3. 完成 ChatGPT 登录;
|
|
117
117
|
4. 执行 **测试连接**。
|
|
118
118
|
|
|
119
|
-
DSH 模型选择器应显示 **“Codex(ChatGPT 订阅)”**。6 Astra 与 GPT-5.6
|
|
119
|
+
DSH 模型选择器应显示 **“Codex(ChatGPT 订阅)”**。6 Astra 与 GPT-5.6 系列的有效上下文窗口在“Codex 订阅 → 增强功能”中配置。子代理的模型与思考深度由 DSH 自身的设置决定(**设置 → Subagent** 卡片授权的模型清单,以及 `agent-default-model` 的默认路由);最大嵌套深度由 DSH preset 中 `tool-subagent` 的 `maxDepth` 决定。
|
|
120
120
|
|
|
121
121
|
**设置 → Codex 订阅 → 网络代理** 同时控制 GPT 与 Antigravity(Gemini)的 Host 请求,可选择系统代理(自动检测)、自定义代理或直连。Gemini 模型生成、网页登录后的令牌交换、令牌刷新、账号信息、项目发现、配额与模型目录查询均使用此设置;修改后对后续请求生效,无需重启 DSH。浏览器中的 Google 授权页面使用浏览器自己的网络设置。
|
|
122
122
|
|
package/lib/client.js
CHANGED
|
@@ -372,7 +372,6 @@ window.__ModuleLoader__.load({
|
|
|
372
372
|
const [resetCreditNotice, setResetCreditNotice] = (0, react.useState)(null);
|
|
373
373
|
const [connection, setConnection] = (0, react.useState)(null);
|
|
374
374
|
const [contextDrafts, setContextDrafts] = (0, react.useState)({});
|
|
375
|
-
const [subagentContextDraft, setSubagentContextDraft] = (0, react.useState)(null);
|
|
376
375
|
const [customProxyDraft, setCustomProxyDraft] = (0, react.useState)(null);
|
|
377
376
|
const load = (0, react.useCallback)(async (quiet = false) => {
|
|
378
377
|
if (!quiet) setError(null);
|
|
@@ -524,21 +523,6 @@ window.__ModuleLoader__.load({
|
|
|
524
523
|
[model]: String(parsed)
|
|
525
524
|
}));
|
|
526
525
|
};
|
|
527
|
-
const updateSubagentContextWindow = async () => {
|
|
528
|
-
const draft = subagentContextDraft?.trim();
|
|
529
|
-
if (draft === void 0 || draft === "") {
|
|
530
|
-
await updatePreferences({ subagentContextWindow: null });
|
|
531
|
-
setSubagentContextDraft(null);
|
|
532
|
-
return;
|
|
533
|
-
}
|
|
534
|
-
const parsed = parsePositiveCapacity$1(draft);
|
|
535
|
-
if (parsed === null) {
|
|
536
|
-
setError(t("contextWindowInvalid"));
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
await updatePreferences({ subagentContextWindow: parsed });
|
|
540
|
-
setSubagentContextDraft(null);
|
|
541
|
-
};
|
|
542
526
|
const updateCustomProxyUrl = async () => {
|
|
543
527
|
const draft = customProxyDraft?.trim();
|
|
544
528
|
await updatePreferences({ customProxyUrl: draft ? draft : null });
|
|
@@ -906,91 +890,6 @@ window.__ModuleLoader__.load({
|
|
|
906
890
|
]
|
|
907
891
|
})]
|
|
908
892
|
}),
|
|
909
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
910
|
-
className: "dsh-codex-pref-row",
|
|
911
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("subagentMaxDepth") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
912
|
-
className: "dsh-codex-muted",
|
|
913
|
-
children: t("subagentMaxDepthHint")
|
|
914
|
-
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
915
|
-
className: "dsh-codex-select",
|
|
916
|
-
"aria-label": t("subagentMaxDepth"),
|
|
917
|
-
value: preferences?.subagentMaxDepth === null || preferences?.subagentMaxDepth === void 0 ? "" : String(preferences.subagentMaxDepth),
|
|
918
|
-
disabled: busy !== null,
|
|
919
|
-
onChange: (event) => {
|
|
920
|
-
const value = event.currentTarget.value;
|
|
921
|
-
updatePreferences({ subagentMaxDepth: value === "" ? null : Number(value) });
|
|
922
|
-
},
|
|
923
|
-
children: [
|
|
924
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
925
|
-
value: "",
|
|
926
|
-
children: t("providerDefault")
|
|
927
|
-
}),
|
|
928
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("option", {
|
|
929
|
-
value: "0",
|
|
930
|
-
children: [
|
|
931
|
-
"0 (",
|
|
932
|
-
t("subagentDisabled"),
|
|
933
|
-
")"
|
|
934
|
-
]
|
|
935
|
-
}),
|
|
936
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("option", {
|
|
937
|
-
value: "1",
|
|
938
|
-
children: ["1 ", t("levels")]
|
|
939
|
-
}),
|
|
940
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("option", {
|
|
941
|
-
value: "2",
|
|
942
|
-
children: ["2 ", t("levels")]
|
|
943
|
-
}),
|
|
944
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("option", {
|
|
945
|
-
value: "3",
|
|
946
|
-
children: ["3 ", t("levels")]
|
|
947
|
-
})
|
|
948
|
-
]
|
|
949
|
-
})]
|
|
950
|
-
}),
|
|
951
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
952
|
-
className: "dsh-codex-context-settings",
|
|
953
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("subagentContextWindow") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
954
|
-
className: "dsh-codex-muted",
|
|
955
|
-
children: t("subagentContextWindowHint")
|
|
956
|
-
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
957
|
-
className: "dsh-codex-context-row",
|
|
958
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
|
|
959
|
-
htmlFor: "dsh-codex-subagent-context",
|
|
960
|
-
children: t("subagentContextWindow")
|
|
961
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
962
|
-
className: "dsh-codex-capacity-control",
|
|
963
|
-
children: [
|
|
964
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
965
|
-
id: "dsh-codex-subagent-context",
|
|
966
|
-
type: "text",
|
|
967
|
-
inputMode: "numeric",
|
|
968
|
-
placeholder: t("providerDefault"),
|
|
969
|
-
value: subagentContextDraft ?? (preferences?.subagentContextWindow ? formatCapacity$1(preferences.subagentContextWindow) : ""),
|
|
970
|
-
disabled: busy !== null,
|
|
971
|
-
"aria-label": t("subagentContextWindow"),
|
|
972
|
-
onChange: (event) => {
|
|
973
|
-
setSubagentContextDraft(event.currentTarget.value);
|
|
974
|
-
},
|
|
975
|
-
onKeyDown: (event) => {
|
|
976
|
-
if (event.key !== "Enter") return;
|
|
977
|
-
event.preventDefault();
|
|
978
|
-
updateSubagentContextWindow();
|
|
979
|
-
}
|
|
980
|
-
}),
|
|
981
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("tokens") }),
|
|
982
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
983
|
-
className: "dsh-codex-context-save",
|
|
984
|
-
type: "button",
|
|
985
|
-
"aria-label": t("save") + " " + t("subagentContextWindow"),
|
|
986
|
-
disabled: busy !== null || subagentContextDraft === null,
|
|
987
|
-
onClick: () => void updateSubagentContextWindow(),
|
|
988
|
-
children: t("save")
|
|
989
|
-
})
|
|
990
|
-
]
|
|
991
|
-
})]
|
|
992
|
-
})]
|
|
993
|
-
}),
|
|
994
893
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
995
894
|
className: "dsh-codex-context-settings",
|
|
996
895
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("contextWindows") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -1416,13 +1315,6 @@ window.__ModuleLoader__.load({
|
|
|
1416
1315
|
searchProviderDsh: "DSH 默认",
|
|
1417
1316
|
searchProviderCodex: "ChatGPT(代理隧道)",
|
|
1418
1317
|
providerDefault: "使用 Provider 默认值",
|
|
1419
|
-
subagentEnhancements: "子代理设置",
|
|
1420
|
-
subagentContextWindow: "子代理上下文预算",
|
|
1421
|
-
subagentContextWindowHint: "限制子代理运行时的最大上下文 Token 数(例如 128K、256K);留空跟随模型主设置。",
|
|
1422
|
-
subagentMaxDepth: "子代理最大嵌套深度",
|
|
1423
|
-
subagentMaxDepthHint: "限制子代理的递归层级(0–3);0 禁止创建子代理。",
|
|
1424
|
-
subagentDisabled: "已禁用",
|
|
1425
|
-
levels: "层",
|
|
1426
1318
|
contextWindows: "模型上下文窗口",
|
|
1427
1319
|
contextWindowsHint: "默认 272K;6 Astra 最高 872K,GPT-5.6 最高 1M。该值用于 DSH 的压缩与溢出判断,可输入 872K、512K 等容量。",
|
|
1428
1320
|
contextWindow: "上下文窗口",
|
|
@@ -1473,39 +1365,7 @@ window.__ModuleLoader__.load({
|
|
|
1473
1365
|
imagePreviewClose: "关闭",
|
|
1474
1366
|
imagePreviewOpenOriginal: "打开原图",
|
|
1475
1367
|
retry: "重试",
|
|
1476
|
-
unknown: "未知"
|
|
1477
|
-
teamModelRulesTitle: "智能体团队 (Agent Teams) 混合模型规则",
|
|
1478
|
-
teamModelRulesHint: "在 Agent Teams 协同模式下,可根据 Teammate 角色或名称前缀(如 reviewer*、code*、scout)自动匹配不同模型,未匹配项使用默认子代理模型。",
|
|
1479
|
-
teamRulePattern: "匹配角色/前缀",
|
|
1480
|
-
teamRulePatternPlaceholder: "输入通配符,如 reviewer* 或 audit",
|
|
1481
|
-
teamRuleModel: "目标模型",
|
|
1482
|
-
teamRuleModelPlaceholder: "输入模型 ID,如 custom:model-id",
|
|
1483
|
-
teamRuleEffort: "思考档位",
|
|
1484
|
-
teamRuleAdd: "添加团队规则",
|
|
1485
|
-
teamRuleDelete: "删除",
|
|
1486
|
-
teamRuleEmpty: "暂未配置团队规则,所有 Teammate 将使用全局默认子代理模型。",
|
|
1487
|
-
teamRuleQuickPresets: "团队预设模板",
|
|
1488
|
-
teamRuleQuickPresetsHint: "一键为常见团队角色快速注入推荐模型与思考深度。",
|
|
1489
|
-
presetReviewer: "代码审查员 (review* -> 6 Astra)",
|
|
1490
|
-
presetCoder: "实现工程师 (code* -> 5.6 Sol)",
|
|
1491
|
-
presetFast: "轻量助理 (scout/test* -> DeepSeek V41 Flash)",
|
|
1492
|
-
presetReviewerShort: "审查员",
|
|
1493
|
-
presetCoderShort: "工程师",
|
|
1494
|
-
presetFastShort: "轻量探索",
|
|
1495
|
-
teamRuleAddLabel: "添加规则",
|
|
1496
|
-
roleReviewer: "代码审查员 (Reviewer · review*)",
|
|
1497
|
-
roleCoder: "实现工程师 (Coder · code*)",
|
|
1498
|
-
roleTester: "测试与质量 (Tester · test*)",
|
|
1499
|
-
roleScout: "探索调研员 (Scout/Research · scout*)",
|
|
1500
|
-
roleArchitect: "架构规划师 (Architect · design*)",
|
|
1501
|
-
roleDoc: "文档撰写员 (Documentation · doc*)",
|
|
1502
|
-
roleCustom: "自定义角色模式…",
|
|
1503
|
-
modelCustom: "自定义模型 ID…",
|
|
1504
|
-
effortDefault: "默认思考档位",
|
|
1505
|
-
effortLow: "低思考 (low) · 快速响应",
|
|
1506
|
-
effortMedium: "中思考 (medium) · 推荐平衡",
|
|
1507
|
-
effortHigh: "高思考 (high) · 深度推导",
|
|
1508
|
-
effortMax: "极致思考 (max) · 超强推理"
|
|
1368
|
+
unknown: "未知"
|
|
1509
1369
|
},
|
|
1510
1370
|
en: {
|
|
1511
1371
|
title: "ChatGPT",
|
|
@@ -1579,13 +1439,6 @@ window.__ModuleLoader__.load({
|
|
|
1579
1439
|
searchProviderDsh: "DSH default",
|
|
1580
1440
|
searchProviderCodex: "ChatGPT (Proxy tunnel)",
|
|
1581
1441
|
providerDefault: "Use provider default",
|
|
1582
|
-
subagentEnhancements: "Subagent settings",
|
|
1583
|
-
subagentContextWindow: "Subagent context window budget",
|
|
1584
|
-
subagentContextWindowHint: "Limits context capacity in tokens for subagents (e.g. 128K, 256K); leave empty to follow main model settings.",
|
|
1585
|
-
subagentMaxDepth: "Subagent maximum nesting depth",
|
|
1586
|
-
subagentMaxDepthHint: "Limits child levels for subagents (0–3); 0 disables subagents.",
|
|
1587
|
-
subagentDisabled: "Disabled",
|
|
1588
|
-
levels: "levels",
|
|
1589
1442
|
contextWindows: "Model context windows",
|
|
1590
1443
|
contextWindowsHint: "Defaults to 272K, with up to 872K for 6 Astra and 1M for GPT-5.6. DSH uses it for compaction and overflow detection; values such as 872K and 512K are accepted.",
|
|
1591
1444
|
contextWindow: "Context window",
|
|
@@ -1636,39 +1489,7 @@ window.__ModuleLoader__.load({
|
|
|
1636
1489
|
imagePreviewClose: "Close",
|
|
1637
1490
|
imagePreviewOpenOriginal: "Open original",
|
|
1638
1491
|
retry: "Retry",
|
|
1639
|
-
unknown: "Unknown"
|
|
1640
|
-
teamModelRulesTitle: "Agent Teams Hybrid Model Rules",
|
|
1641
|
-
teamModelRulesHint: "In Agent Teams mode, automatically route teammates to specialized models by matching role or name patterns (e.g. reviewer*, code*, scout). Unmatched teammates fall back to the default subagent model.",
|
|
1642
|
-
teamRulePattern: "Pattern / Role",
|
|
1643
|
-
teamRulePatternPlaceholder: "Enter wildcard, e.g. reviewer* or audit",
|
|
1644
|
-
teamRuleModel: "Target Model",
|
|
1645
|
-
teamRuleModelPlaceholder: "Enter model ID, e.g. custom:model-id",
|
|
1646
|
-
teamRuleEffort: "Reasoning Effort",
|
|
1647
|
-
teamRuleAdd: "Add Team Rule",
|
|
1648
|
-
teamRuleDelete: "Delete",
|
|
1649
|
-
teamRuleEmpty: "No team rules configured. All teammates will inherit the default subagent model.",
|
|
1650
|
-
teamRuleQuickPresets: "Team Presets",
|
|
1651
|
-
teamRuleQuickPresetsHint: "One-click presets with recommended models and reasoning efforts.",
|
|
1652
|
-
presetReviewer: "Code Reviewer (review* -> 6 Astra)",
|
|
1653
|
-
presetCoder: "Implementer (code* -> 5.6 Sol)",
|
|
1654
|
-
presetFast: "Fast Assistant (scout/test* -> DeepSeek V41 Flash)",
|
|
1655
|
-
presetReviewerShort: "Reviewer",
|
|
1656
|
-
presetCoderShort: "Coder",
|
|
1657
|
-
presetFastShort: "Fast Scout",
|
|
1658
|
-
teamRuleAddLabel: "Add Rule",
|
|
1659
|
-
roleReviewer: "Code Reviewer (Reviewer · review*)",
|
|
1660
|
-
roleCoder: "Implementer (Coder · code*)",
|
|
1661
|
-
roleTester: "Tester & QA (Tester · test*)",
|
|
1662
|
-
roleScout: "Researcher (Scout/Research · scout*)",
|
|
1663
|
-
roleArchitect: "Architect (Architect · design*)",
|
|
1664
|
-
roleDoc: "Tech Writer (Documentation · doc*)",
|
|
1665
|
-
roleCustom: "Custom Role Pattern…",
|
|
1666
|
-
modelCustom: "Custom Model ID…",
|
|
1667
|
-
effortDefault: "Default Reasoning Effort",
|
|
1668
|
-
effortLow: "Low Effort (low) · Fast",
|
|
1669
|
-
effortMedium: "Medium Effort (medium) · Balanced",
|
|
1670
|
-
effortHigh: "High Effort (high) · Deep Reason",
|
|
1671
|
-
effortMax: "Max Effort (max) · Complex Tasks"
|
|
1492
|
+
unknown: "Unknown"
|
|
1672
1493
|
}
|
|
1673
1494
|
};
|
|
1674
1495
|
//#endregion
|
|
@@ -1830,6 +1651,8 @@ window.__ModuleLoader__.load({
|
|
|
1830
1651
|
quotaDesc: "数据来自 Google Cloud Code Assist 配额服务,页面可见时最多每 60 秒刷新一次。",
|
|
1831
1652
|
refreshQuota: "刷新用量",
|
|
1832
1653
|
refreshingQuota: "刷新中...",
|
|
1654
|
+
quotaEmpty: "暂无配额数据,点击「刷新用量」重试。",
|
|
1655
|
+
googleValidation: "前往 Google 完成账号验证",
|
|
1833
1656
|
resetPrefix: "重置: {time}",
|
|
1834
1657
|
resetUnavailable: "重置: n/a",
|
|
1835
1658
|
resetNow: "现在",
|
|
@@ -1879,6 +1702,8 @@ window.__ModuleLoader__.load({
|
|
|
1879
1702
|
quotaDesc: "Data from Google Cloud Code Assist quota service; refreshes up to once every 60 seconds when visible.",
|
|
1880
1703
|
refreshQuota: "Refresh quota",
|
|
1881
1704
|
refreshingQuota: "Refreshing...",
|
|
1705
|
+
quotaEmpty: "No quota data yet — use “Refresh quota” to retry.",
|
|
1706
|
+
googleValidation: "Verify the account with Google",
|
|
1882
1707
|
resetPrefix: "Reset: {time}",
|
|
1883
1708
|
resetUnavailable: "Reset: n/a",
|
|
1884
1709
|
resetNow: "now",
|
|
@@ -1967,7 +1792,6 @@ window.__ModuleLoader__.load({
|
|
|
1967
1792
|
try {
|
|
1968
1793
|
const data = await fetchApi$1("/status");
|
|
1969
1794
|
setStatus(data);
|
|
1970
|
-
if (data.authenticated && (!data.quota || data.quota.groups.length === 0)) fetchApi$1("/quota", { method: "POST" }).then((updated) => setStatus(updated)).catch(() => void 0);
|
|
1971
1795
|
const drafts = {};
|
|
1972
1796
|
for (const m of data.models) {
|
|
1973
1797
|
const val = data.contextWindowOverrides[m.id] || m.defaultContextWindow;
|
|
@@ -2397,7 +2221,7 @@ window.__ModuleLoader__.load({
|
|
|
2397
2221
|
children: t.signedOut
|
|
2398
2222
|
}) : groups.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
2399
2223
|
className: "dsha-empty",
|
|
2400
|
-
children: busy === "quota" ? t.refreshingQuota :
|
|
2224
|
+
children: busy === "quota" ? t.refreshingQuota : t.quotaEmpty
|
|
2401
2225
|
}) : groups.map((group, gIdx) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2402
2226
|
className: "dsha-quota-card",
|
|
2403
2227
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -2447,7 +2271,7 @@ window.__ModuleLoader__.load({
|
|
|
2447
2271
|
padding: "4px 10px",
|
|
2448
2272
|
fontSize: "12px"
|
|
2449
2273
|
},
|
|
2450
|
-
children:
|
|
2274
|
+
children: t.googleValidation
|
|
2451
2275
|
})
|
|
2452
2276
|
})]
|
|
2453
2277
|
})
|
|
@@ -2587,12 +2411,7 @@ window.__ModuleLoader__.load({
|
|
|
2587
2411
|
setLoading(true);
|
|
2588
2412
|
try {
|
|
2589
2413
|
const data = refresh ? await fetchApi("/quota", { method: "POST" }) : await fetchApi("/status");
|
|
2590
|
-
if (mountedRef.current)
|
|
2591
|
-
setStatus(data);
|
|
2592
|
-
if (data.authenticated && (!data.quota || data.quota.groups.length === 0) && !refresh) fetchApi("/quota", { method: "POST" }).then((updated) => {
|
|
2593
|
-
if (mountedRef.current) setStatus(updated);
|
|
2594
|
-
}).catch(() => void 0);
|
|
2595
|
-
}
|
|
2414
|
+
if (mountedRef.current) setStatus(data);
|
|
2596
2415
|
} catch {} finally {
|
|
2597
2416
|
if (mountedRef.current) setLoading(false);
|
|
2598
2417
|
}
|