@eddyskywalker/dsh-chatgpt-subscription 0.56.0 → 0.58.0
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 +36 -0
- package/README.md +3 -3
- package/lib/client.js +56 -0
- package/lib/client.js.map +1 -1
- package/lib/index.js +964 -491
- package/lib/tool-result-pruner.js +1 -1
- package/lib/types/client/locales-ru/progress-updates.d.ts.map +1 -1
- package/lib/types/client/minimax-code/commands-contract.d.ts +1 -1
- package/lib/types/client/progress-updates/locales.d.ts +8 -2
- package/lib/types/client/progress-updates/locales.d.ts.map +1 -1
- package/lib/types/client/progress-updates/settings-binding.d.ts +8 -1
- package/lib/types/client/progress-updates/settings-binding.d.ts.map +1 -1
- package/lib/types/client/progress-updates/settings-section.d.ts +2 -1
- package/lib/types/client/progress-updates/settings-section.d.ts.map +1 -1
- package/lib/types/compat.d.ts +1 -1
- package/lib/types/entry-tool-result-pruner.d.ts +1 -1
- package/lib/types/host/codex-account-pool.d.ts.map +1 -1
- package/lib/types/host/codex-adopt.d.ts.map +1 -1
- package/lib/types/host/codex-catalog.d.ts +5 -3
- package/lib/types/host/codex-catalog.d.ts.map +1 -1
- package/lib/types/host/codex-identity.d.ts +130 -0
- package/lib/types/host/codex-identity.d.ts.map +1 -0
- package/lib/types/host/kimi-code/repeat-breaker.d.ts +1 -1
- package/lib/types/host/oauth-service.d.ts +0 -16
- package/lib/types/host/oauth-service.d.ts.map +1 -1
- package/lib/types/host/team-policy-cache-guard.d.ts +44 -0
- package/lib/types/host/team-policy-cache-guard.d.ts.map +1 -0
- package/lib/types/host/token-store.d.ts +9 -0
- package/lib/types/host/token-store.d.ts.map +1 -1
- package/lib/types/host/usage-service.d.ts.map +1 -1
- package/lib/types/host/workbuddy/adapter.d.ts.map +1 -1
- package/lib/types/host/workbuddy/client.d.ts.map +1 -1
- package/lib/types/host/workbuddy/model-catalog.d.ts +56 -44
- package/lib/types/host/workbuddy/model-catalog.d.ts.map +1 -1
- package/lib/types/host/workbuddy/routes.d.ts.map +1 -1
- package/lib/types/index.d.ts +14 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/workbuddy-contracts.d.ts +8 -8
- package/package.json +49 -46
- package/presets/dispatch/README.md +26 -6
- package/presets/dispatch/agent.cordis.yml +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,42 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.58.0 - 2026-11-04
|
|
6
|
+
|
|
7
|
+
- **[harness] 支持 DSH 0.2.2-rc.1,并保留 0.2.2-alpha.3、latest 0.2.1-rc.5 与旧代兼容**
|
|
8
|
+
- 开发基线切换到 `0.2.2-rc.1`,同步正式版 Cordis `4.1.0`、Loader `1.1.0` 与 Schemastery `3.19.0`;`peerDependencies` 完整保留自 `0.1.2-alpha.5` 起的全部历史子句并追加 `^0.2.2-rc.1` 及对应正式版 vendor。
|
|
9
|
+
- 核对上游 `dsh-v0.2.2-alpha.3..dsh-v0.2.2-rc.1` 全部变更(387 个 `package.json`,0 个非 `package.json` 源码文件):PTC 独立 executor、计划模式与修剪器 fork、五大宿主缓存守卫及子代理授权接缝均无需改动。上游 `dsh-tool-pwsh-persistent@0.2.2-rc.1` 已补齐发布,`npm exec --package=@deepseek-ai/dsh@0.2.2-rc.1` 闭环恢复正常。
|
|
10
|
+
- **验证**:新基线 `0.2.2-rc.1`、精确 `0.2.2-alpha.3` 洁净室与精确 `0.2.1-rc.5`(当前 npm `latest`)洁净室结果逐项一致,强制全工程类型检查 0 错误,全量 Vitest 均为 **359 文件 / 6584 项通过**(另 2 文件 / 9 项跳过);旧代精确 `0.1.5-rc.1` 洁净室在仅排除已知 `0.1.7+` PTC 测试文件后为 **358 文件 / 6579 项通过**(另 2 文件 / 10 项跳过)。打包产物在本机 `0.2.2-rc.1` 隔离 Web Profile 安装与启动零报错,`/status` 与 13 线路 `/hub/overview` 路由冒烟通过。详见 `.dsh/skills/dsh-harness-upgrade/references/0.2.2-rc.1.md`。
|
|
11
|
+
|
|
12
|
+
- **[codex] 同一工作空间下的不同用户不再互相覆盖:账号池改用「工作空间 + 用户」复合身份(#85)**
|
|
13
|
+
- **缺陷**:账号池的去重键是 `accountId ?? email`,而 `accountId` 来自 `chatgpt_account_id`——同一工作空间的每个成员都共享该值。于是添加第二个成员时命中了第一个成员的行,凭据被原地覆盖:卡片仍显示「已登录 1 个账号」,先前的账号从列表消失、无法再选回。
|
|
14
|
+
- **两种身份分开**:上游工作空间身份(`credentials.accountId`,即请求头 `chatgpt-account-id`)保持不变;本地登录身份改为 `(workspace, user)`,用户 id 优先级 `chatgpt_user_id` → `sub` → 邮箱,且工作空间 id 在有用户声明时**绝不**单独充当身份。
|
|
15
|
+
- 复合身份用显式序列化(JSON 数组)后取 SHA-256 前 32 位十六进制,而不是可读拼接:避免分隔符伪造、`catalogSnapshotName` 把 `[^a-z0-9]` 折成 `_` 后的键碰撞,以及把邮箱写进快照文件名。
|
|
16
|
+
- 新增 `src/host/codex-identity.ts`(`parseJwtClaims`/`extractIdentity` 迁入其中),并把它接进四处身份用途:号池 `dedupeKey`、刷新 single-flight `refreshKey`(回退 `refreshToken`)、模型目录缓存键、无号池路径的额度快照键。
|
|
17
|
+
- **顺带修掉的两处同源问题**:目录缓存原本是单槽且失败回退不看 key,会把 A 账号的目录当成 B 的答案;改为按身份键的有界 Map(8 条)+ 按身份重放持久化快照,失败只回退到**当前身份自己**的条目。`credentials.userId` 随凭据持久化,令令牌轮换不再让一个账号看起来像两个。
|
|
18
|
+
- **兼容**:旧行没有 `userId` 字段,身份从已存令牌的 claims 重新推导,因此升级后重新授权仍命中原行,不会长出重复账号;三个用户声明全缺时才退化为工作空间身份,与改动前一致。
|
|
19
|
+
- **验证**:`test/codex-account-identity.test.ts` 16 项回归(同工作空间两成员独立保存/原地更新/跨工作空间区分/旧行迁移/刷新独立/目录不串/额度不串);把四处规则临时改回旧写法后有 6 项失败,确认测试确实能抓住该缺陷。`npm run typecheck` 0 错误;`npx vitest run` 全量通过。
|
|
20
|
+
|
|
21
|
+
- **[packaging] 补上 `engines.node`:把「旧 LTS 装得上、跑起来才炸」变成安装期可见**
|
|
22
|
+
- 用户反馈称 `package.json` 没有 `engines` 字段、建议补 `">=18.0.0"`。缺字段属实,建议值不成立:`dependencies` 的 `undici ^8.10.0` 自声明 `node >=22.19.0`,且被 tsdown 内联进 `lib/index.js`(宿主侧约 4.2 MB 单文件),代理与 fetch 走的就是这份代码。`>=18.0.0` 会把 Node 18/20 判成受支持,问题只从「装的时候就报」推迟到「运行到代理/流式请求时炸」。
|
|
23
|
+
- 按真实下限声明 `"engines": { "node": ">=22.19.0" }`;README「环境要求」同步写明该数字与来源。
|
|
24
|
+
- `test/package-integrity.test.ts` 新增断言:`engines.node` 必须存在、必须是 `>=X.Y.Z` 写法、且不弱于内置 undici 的下限(防止日后又退回 `>=18.0.0` 这类口号值)。
|
|
25
|
+
- **验证**:`npm run typecheck` 0 错误;`npx vitest run test/package-integrity.test.ts` 全通过。
|
|
26
|
+
|
|
27
|
+
- **[workbuddy] 同步 2026-11-04 随包模型目录与跨区保守能力合并**
|
|
28
|
+
- 按最新国区与国际区实时 `/v3/config` 刷新 `src/host/workbuddy/model-catalog.ts` 离线兜底表:仅最大窗口取并集,默认服务窗口、输出上限、思考档位与图片/关思考开关均取两区交集,避免任一区域网关返回 400;同步更新两区独有模型归属(`regions`)并清空已正式上架的 `UNPUBLISHED_MODELS`。
|
|
29
|
+
- 新增 `isUntouchedModelSelection` 兼容旧版随包默认勾选集合,未手动改过勾选的用户升级后自动获得新目录全集。
|
|
30
|
+
|
|
31
|
+
## 0.57.0 - 2026-11-03
|
|
32
|
+
|
|
33
|
+
- **[team] 与内置 Agent Teams 共存:修正 R0.5 判据,并把策略段改成尾部投递**
|
|
34
|
+
- **前提已变**:harness `#7519` 之后,Agent Teams 不再自己拥有队友创建与消息通道(`spawn_teammate` 已移除),消息与名册改为复用子代理工具;内置团队工具只剩共享任务板 `team_task_create/list/get/update`。旧 R0.5 的「`spawn_teammate` 或 `wait_agent` 任一在场就停」在本代恒真——`wait_agent` 正是 `dispatch` preset 自己挂的工具,每个会话首轮都会被误判为不可编排。
|
|
35
|
+
- R0.5 改为只按 `spawn_teammate` 判代:旧代运行时仍停下并把选择交给用户;现行运行时与调度模式并行,并写明「任务板只是记账,`dispatch_ledger` 仍是派发权威、R5 任务书仍是任务契约,ready 不等于开工,不得用 `reassign` 绕开 R6」。
|
|
36
|
+
- 新增 `team-policy-cache-guard`(默认开启,`teamPolicyCacheGuard`):装配时摘掉内置 `team:policy` 段并捕获官方当次原文,切开关时以尾部用户消息投递一次、关闭时补一条撤销通知;该段从未出现时只报一条 warn。与计划模式守卫同一套接缝,中途切团队开关不再改写 system prompt。
|
|
37
|
+
- 设置卡新增「智能体团队策略段」一行(zh/en/ru),语义与宿主 schema 一致(缺键=开)。
|
|
38
|
+
- **验证**:`npm run typecheck` 0 错误;全量 360 文件 / 6574 项,**6565 通过 / 9 跳过**;`lib/` 干净重建、`npm pack --dry-run` 与真机设置页视觉检查通过。
|
|
39
|
+
|
|
40
|
+
|
|
5
41
|
## 0.56.0 - 2026-11-03
|
|
6
42
|
|
|
7
43
|
- **[dispatch] L2 执行拓扑与同路由父 fork 策略**
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
插件最初为接入 ChatGPT Plus / Pro / Business 订阅的 Codex 模型而建,现已演进为统一的**多订阅服务中枢(Subscription Hub)与编码 Agent 增强套件**:在单一插件包内同时提供 **13 条独立模型供应线路**、跨平台加密多账号池、多模态生图/视频工具链、前缀缓存零漂移保护,以及随包分发的 `dispatch` 多子代理编排预设。
|
|
6
6
|
|
|
7
7
|
- **跨平台支持**:Windows、macOS、Linux(含无桌面密钥环的远程服务器部署模式)
|
|
8
|
-
- **跨代际兼容**:单一代码库兼容 `@deepseek-ai/dsh` **0.1.2-alpha.5 至 0.2.2-
|
|
8
|
+
- **跨代际兼容**:单一代码库兼容 `@deepseek-ai/dsh` **0.1.2-alpha.5 至 0.2.2-rc.1** 全系列版本
|
|
9
9
|
- **全栈多语言**:Web 设置中心与宿主侧提示/报错完整支持 **简体中文(`zh`)/ English(`en`)/ Русский(`ru`)**
|
|
10
10
|
|
|
11
11
|
---
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
## 环境要求
|
|
76
76
|
|
|
77
77
|
- **操作系统**:Windows(需内置 PowerShell 以支持 CurrentUser DPAPI)、macOS 或 Linux
|
|
78
|
-
- **运行时**:Node.js
|
|
79
|
-
- **宿主版本**:DeepSeek Harness `@deepseek-ai/dsh` `0.1.2-alpha.5` 至 `0.2.2-
|
|
78
|
+
- **运行时**:Node.js **≥ 22.19**(内置 `undici` 8 的下限,已写入 `package.json` 的 `engines`;建议 24 LTS)与 npm
|
|
79
|
+
- **宿主版本**:DeepSeek Harness `@deepseek-ai/dsh` `0.1.2-alpha.5` 至 `0.2.2-rc.1`
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
package/lib/client.js
CHANGED
|
@@ -21499,6 +21499,8 @@ window.__ModuleLoader__.load({
|
|
|
21499
21499
|
settingsPlanModePipelineNote: "澄清访谈收敛后自动进入计划模式出计划,再交审批(仅调度模式生效);关闭后该模式会请用户手动输入 /plan",
|
|
21500
21500
|
settingsDispatchExecutionGuardName: "调度执行守卫",
|
|
21501
21501
|
settingsDispatchExecutionGuardNote: "执行期拦截子代理越权调用主控工具及等待子代理时的纯 sleep 空等;不改工具声明面,零损耗保护 Kimi 缓存",
|
|
21502
|
+
settingsTeamPolicyCacheGuardName: "智能体团队策略段",
|
|
21503
|
+
settingsTeamPolicyCacheGuardNote: "把内置 Agent Teams 的策略段从系统提示词摘掉,改为开启团队协作时以尾部消息投递一次;会话中途切开关不再刷掉整段前缀缓存(默认开启)",
|
|
21502
21504
|
settingsThresholdName: "催促阈值",
|
|
21503
21505
|
settingsThresholdNote: "连续这么多轮没有进展时,提醒 agent 汇报一次",
|
|
21504
21506
|
settingsLanguageName: "输出语言",
|
|
@@ -21546,6 +21548,8 @@ window.__ModuleLoader__.load({
|
|
|
21546
21548
|
settingsPlanModePipelineNote: "After the clarification interview converges, enter plan mode, write the plan and send it for approval (dispatch mode only); turning it off makes that mode ask the user to type /plan",
|
|
21547
21549
|
settingsDispatchExecutionGuardName: "Dispatch execution guard",
|
|
21548
21550
|
settingsDispatchExecutionGuardNote: "Block subagents from calling dispatcher-only tools at execution time and reject pure sleep waits while child agents run; keeps tool declarations untouched to protect the Kimi prefix cache",
|
|
21551
|
+
settingsTeamPolicyCacheGuardName: "Agent Teams policy section",
|
|
21552
|
+
settingsTeamPolicyCacheGuardNote: "Lift the built-in Agent Teams policy section out of the system prompt and deliver it as one tail message when team collaboration is switched on, so toggling mid-session no longer rebuilds the whole prefix cache (on by default)",
|
|
21549
21553
|
settingsThresholdName: "Nudge threshold",
|
|
21550
21554
|
settingsThresholdNote: "Remind the agent after this many rounds without an update",
|
|
21551
21555
|
settingsLanguageName: "Output language",
|
|
@@ -22930,6 +22934,8 @@ window.__ModuleLoader__.load({
|
|
|
22930
22934
|
settingsPlanModePipelineNote: "После схождения уточняющего интервью автоматически войти в режим плана, подготовить план и отправить его на утверждение (только в режиме диспетчера); если выключено, этот режим попросит пользователя ввести /plan вручную",
|
|
22931
22935
|
settingsDispatchExecutionGuardName: "Защита выполнения диспетчера",
|
|
22932
22936
|
settingsDispatchExecutionGuardNote: "Блокировать вызовы инструментов диспетчера субагентами во время выполнения и запрещать пустое ожидание sleep при активных дочерних агентах; не меняет объявления инструментов и сохраняет префиксный кеш Kimi",
|
|
22937
|
+
settingsTeamPolicyCacheGuardName: "Раздел политики Agent Teams",
|
|
22938
|
+
settingsTeamPolicyCacheGuardNote: "Убрать встроенный раздел политики Agent Teams из системного промпта и передавать его одним сообщением в хвосте при включении командной работы, чтобы переключение посреди сессии больше не пересобирало весь префиксный кеш (включено по умолчанию)",
|
|
22933
22939
|
settingsThresholdName: "Порог напоминания",
|
|
22934
22940
|
settingsThresholdNote: "Напомнить агенту после стольких раундов без отчёта",
|
|
22935
22941
|
settingsLanguageName: "Язык вывода",
|
|
@@ -55300,6 +55306,34 @@ window.__ModuleLoader__.load({
|
|
|
55300
55306
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M10 3 4.5 5.2v4.6c0 3.8 2.3 6.4 5.5 7.2 3.2-.8 5.5-3.4 5.5-7.2V5.2L10 3Z" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m7.5 10 1.8 1.8 3.4-3.6" })]
|
|
55301
55307
|
});
|
|
55302
55308
|
}
|
|
55309
|
+
/**
|
|
55310
|
+
* 「Agent Teams 策略段」标记:一块带勾选行的共享任务板。
|
|
55311
|
+
* @returns 与其它行同规格的 20px 图标。
|
|
55312
|
+
*/
|
|
55313
|
+
function TeamBoardMark() {
|
|
55314
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
55315
|
+
viewBox: "0 0 20 20",
|
|
55316
|
+
width: "20",
|
|
55317
|
+
height: "20",
|
|
55318
|
+
fill: "none",
|
|
55319
|
+
stroke: "currentColor",
|
|
55320
|
+
strokeWidth: "1.6",
|
|
55321
|
+
strokeLinecap: "round",
|
|
55322
|
+
strokeLinejoin: "round",
|
|
55323
|
+
"aria-hidden": "true",
|
|
55324
|
+
children: [
|
|
55325
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
55326
|
+
x: "3.5",
|
|
55327
|
+
y: "4.5",
|
|
55328
|
+
width: "13",
|
|
55329
|
+
height: "11",
|
|
55330
|
+
rx: "2"
|
|
55331
|
+
}),
|
|
55332
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6.5 8.4 1.4 1.4 2.4-2.6" }),
|
|
55333
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M12 8.6h2M6.5 12.8h7.5" })
|
|
55334
|
+
]
|
|
55335
|
+
});
|
|
55336
|
+
}
|
|
55303
55337
|
function PanelMark() {
|
|
55304
55338
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
55305
55339
|
viewBox: "0 0 20 20",
|
|
@@ -55378,6 +55412,7 @@ window.__ModuleLoader__.load({
|
|
|
55378
55412
|
const cacheWaitWarmup = value.cacheWaitWarmup !== false;
|
|
55379
55413
|
const planModePipeline = value.planModePipeline !== false;
|
|
55380
55414
|
const dispatchExecutionGuard = value.dispatchExecutionGuard !== false;
|
|
55415
|
+
const teamPolicyCacheGuard = value.teamPolicyCacheGuard !== false;
|
|
55381
55416
|
const threshold = typeof value.progressUpdatesNudgeThreshold === "number" ? value.progressUpdatesNudgeThreshold : 8;
|
|
55382
55417
|
const language = value.progressUpdatesLanguage === "zh" || value.progressUpdatesLanguage === "en" || value.progressUpdatesLanguage === "ru" ? value.progressUpdatesLanguage : "auto";
|
|
55383
55418
|
const [draft, setDraft] = (0, react.useState)(() => String(threshold));
|
|
@@ -55578,6 +55613,27 @@ window.__ModuleLoader__.load({
|
|
|
55578
55613
|
}
|
|
55579
55614
|
})
|
|
55580
55615
|
}),
|
|
55616
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
|
|
55617
|
+
part: "settings-row-team-policy-cache-guard",
|
|
55618
|
+
brand: "#8a5a9e",
|
|
55619
|
+
mark: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TeamBoardMark, {}),
|
|
55620
|
+
name: translate("settingsTeamPolicyCacheGuardName"),
|
|
55621
|
+
note: failure?.row === "teamPolicyCacheGuard" ? failure.text : translate("settingsTeamPolicyCacheGuardNote"),
|
|
55622
|
+
danger: failure?.row === "teamPolicyCacheGuard",
|
|
55623
|
+
enabled: teamPolicyCacheGuard,
|
|
55624
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
55625
|
+
type: "button",
|
|
55626
|
+
role: "switch",
|
|
55627
|
+
"aria-checked": teamPolicyCacheGuard,
|
|
55628
|
+
"aria-label": translate("settingsTeamPolicyCacheGuardName"),
|
|
55629
|
+
className: "dsh-progress-switch",
|
|
55630
|
+
"data-dsh-part": "settings-team-policy-cache-guard-switch",
|
|
55631
|
+
disabled: !writable,
|
|
55632
|
+
onClick: () => {
|
|
55633
|
+
write("teamPolicyCacheGuard", "teamPolicyCacheGuard", !teamPolicyCacheGuard);
|
|
55634
|
+
}
|
|
55635
|
+
})
|
|
55636
|
+
}),
|
|
55581
55637
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CardRow, {
|
|
55582
55638
|
part: "settings-row-threshold",
|
|
55583
55639
|
brand: "#2f9e6e",
|