@eddyskywalker/dsh-chatgpt-subscription 0.3.1 → 0.3.2

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 CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - **子代理必须写明模型**:授权守卫不再只拒绝「写明且不在白名单内」的路由,而是要求带有允许列表的会话里每次委派都成对给出 `provider` + `model`。此前不写路由的调用会让子代理继承父级模型(设置卡白名单形同虚设,子代理总是跑在主模型上);现在缺省与只写一半都会被拒绝,拒绝理由里给出全部已授权路由并提示先用 `list_subagent_models` 查询。只读取公开接口(`ctx.tools.guard` + 会话日志 + 设置文档),不修改 DSH 本体。
6
+ - 授权相关拒绝文案拆分为「未指定路由」「只指定一半」「路由不在列表内」三种,`delegationDenialReason` 不再回退到父级 `options` 判定继承路由;新增/改写 `test/subagent-model-authorization.test.ts` 用例覆盖这三种拒绝,以及未记录策略与非托管工具名保持放行。
7
+ - 确认 `run_code`(代码模式)无法绕过该守卫:程序里通过 SDK 调用的 `tools["subagent"]` 走的是同一套 `prepare → guard → dispatch` 调度流水线,守卫在调度入口拦截,拒绝理由以 `ToolCallError` 抛回程序。新增 `test/subagent-model-authorization-ptc.test.ts`(3 条)用真实 `ToolRuntime`(code 模式)+ 假 `CodeRuntime` 驱动绑定函数,覆盖「已授权放行 / 缺省拒绝 / 越权拒绝」;这是实测而非假设(先看 DSH 源码确认嵌套子调用确实复用同一调度器,再用用例锁定行为)。
8
+
5
9
  - 新增 Kimi Code(Kimi For Coding 订阅)线路:注册 `kimi-code` Provider,把 Moonshot 的 Kimi Code 订阅作为本插件第四条线路接入 DSH。Kimi Code 与 Moonshot 开放平台(pay-as-you-go)是**两套互不通用的系统**:订阅走 `https://api.kimi.com/coding/v1`、凭据来自 `auth.kimi.com` 的 OAuth;开放平台的 key 与 base URL 在订阅端会被判为 `401 Invalid Authentication`,插件据此把两者严格分开。
6
10
  - OAuth 采用 RFC 8628 设备码流程(`src/host/kimi-code/oauth.ts`),复刻官方 CLI 的协议细节:`POST /api/oauth/device_authorization` 只带 `client_id`(公共客户端,**无 client secret、无 PKCE、无 scope**),`POST /api/oauth/token` 轮询用 `grant_type=urn:ietf:params:oauth:grant-type:device_code`;令牌响应字段(`access_token` / `refresh_token` / `expires_in` / `scope` / `token_type`)与官方实现逐字段对应。`slow_down` 按 RFC 把轮询间隔永久 `+5s`;`authorization_pending` 继续等待;`expired_token` **不当作失败**,而是像官方 CLI 一样重新申请设备码(用户授权慢了仍能登入);`access_denied` 单独分类。设置卡展示用户码、一次性链接与到期时间,可复制用户码、可取消。
7
11
  - 令牌自动续期:阈值取 `max(300s, expires_in × 0.5)`(与官方一致),同一进程内并发调用**共用一次刷新请求**(避免订阅侧并发轮换同一 refresh token);被拒的 refresh token 记入进程级 tombstone 并进入 5 分钟冷却,之后直接提示重新登录而不是反复打扰服务端。
package/README.md CHANGED
@@ -181,16 +181,18 @@ DSH 模型选择器应显示 **“Codex(ChatGPT 订阅)”**。6 Astra 与 G
181
181
 
182
182
  > Windows 文件只能由创建它的用户通过 DPAPI 解密。macOS 凭据由登录钥匙串在本机加密保存。Linux 文件是未额外加密的 JSON,依赖目录 `0700` 和文件 `0600` 隔离;不要复制、打印或提交该文件。跨平台迁移需要重新登录。
183
183
 
184
- ## 子代理模型授权(0.2.15 起)
184
+ ## 子代理模型授权(0.2.15 起,0.3.2 起强制指定模型)
185
185
 
186
186
  DSH 设置页的「Subagent」卡片会把勾选的模型写成会话级的允许列表(会话日志事件 `subagent/model-selection-policy`)。DSH 内置委派工具只拒绝**模型显式填写**且不在列表内的路由;调用里不写 `provider`/`model` 时,子代理会继承父级模型,于是白名单之外的主模型(例如 `deepseek-official/deepseek-flash`)仍会被子代理使用。
187
187
 
188
- 插件在 Host 工具注册表上补一个单调守卫(`ctx.tools.guard`),在委派执行前判定生效路由:
188
+ 插件在 Host 工具注册表上补一个单调守卫(`ctx.tools.guard`),在委派执行前要求**每次委派都必须写明路由**:
189
189
 
190
- - 调用会话(或最近的、记录了策略的祖先会话)带有允许列表时,生效路由必须落在列表内;
191
- - 不写路由的委派按“继承父级模型”判定,因此父级模型不在列表内时会被拒绝;
192
- - 拒绝结果里会列出全部已授权路由(例如 `antigravity/gemini-3.8-flash`),模型照此重试即可;`list_subagent_models` 仍只展示已授权路由;
193
- - 未记录允许列表的会话(例如恢复的旧会话、未启用该设置的会话)保持 DSH 原有行为。
190
+ - 调用会话(或最近的、记录了策略的祖先会话)带有允许列表时,`provider` 与 `model` 必须成对给出,且该路由必须落在列表内——缺省不再回退到配置默认值或父级模型;
191
+ - 只写一半(例如只给 `model`)同样被拒绝,拒绝理由会指出缺的是哪一个字段;
192
+ - **子代理永远和主代理同一个模型**的历史行为由此消失:模型必须先用 `list_subagent_models` 查出已授权路由,再按拒绝理由里列出的路由(例如 `antigravity/gemini-3.8-flash`)重试;该工具也只展示已授权路由;
193
+ - 未记录允许列表的会话(例如恢复的旧会话、未启用该设置的会话)保持 DSH 原有行为(继承父级模型)。
194
+
195
+ 守卫装在 DSH 工具注册表的调度入口上,因此 **`run_code`(代码模式 / PTC)里通过 SDK 调用的 `tools["subagent"]` 同样被拦截**:该子调用走的是与直接调用相同的 `prepare → guard → dispatch` 流水线,拒绝理由以 `ToolCallError` 抛回程序。也就是说模型无法靠把委派写进代码里绕过白名单(`test/subagent-model-authorization-ptc.test.ts` 用真实 `ToolRuntime` + 假 code runtime 验证了放行、缺省拒绝与越权拒绝三条路径)。
194
196
 
195
197
  配置项(插件行 `config`,全部可省略):
196
198
 
@@ -202,6 +204,8 @@ DSH 设置页的「Subagent」卡片会把勾选的模型写成会话级的允
202
204
 
203
205
  改动只在设置卡片里保存过的勾选生效:设置改动只影响之后新建的会话(DSH 的会话快照语义),已运行的会话继续使用它自己记录的那份列表。
204
206
 
207
+ > 升级提示:从 0.3.2 起,带有允许列表的会话里**任何**未写明 `provider` + `model` 的委派都会被拒绝(此前只有写明且不在列表内的路由会被拒绝)。这是有意的行为变更——它消除了「子代理悄悄继承主代理模型」的漏洞;把 `subagentModelAuthorization` 设为 `false` 可回到 DSH 原始行为。
208
+
205
209
  ### Kimi Code
206
210
 
207
211
  1. 重启 `dsh web`;
package/lib/index.js CHANGED
@@ -14494,6 +14494,32 @@ function subagentModelSelectionPreference(settings) {
14494
14494
  function routesInclude(allowed, provider, model) {
14495
14495
  return allowed.some((route) => route.provider === provider && route.model === model);
14496
14496
  }
14497
+ /** The authorized routes rendered for one denial reason. */
14498
+ function authorizedRoutesText(allowed) {
14499
+ return allowed.map((entry) => `${entry.provider}/${entry.model}`).join(", ");
14500
+ }
14501
+ /**
14502
+ * Build the denial reason for a delegation that named no explicit route.
14503
+ * A policy-carrying Session requires the model to choose, so the reason names
14504
+ * every authorized route and the discovery tool that lists them.
14505
+ * @param allowed - Routes the calling Session authorizes.
14506
+ * @returns the corrective reason handed back to the model.
14507
+ */
14508
+ function missingRouteReason(allowed) {
14509
+ return `subagent model selection: this Session requires an explicit child model — this call named neither provider nor model, and an omitted pair never falls back to a default or to the parent's route. Call list_subagent_models and pass ${authorizedRoutesText(allowed)} with an optional reasoning_effort.`;
14510
+ }
14511
+ /**
14512
+ * Build the denial reason for a half-specified route. The built-in delegation
14513
+ * tool completes such a pair from its own configuration, so this reason names
14514
+ * the missing field as well as the authorized routes.
14515
+ * @param missing - The half of the pair the call omitted.
14516
+ * @param supplied - The half the call did provide.
14517
+ * @param allowed - Routes the calling Session authorizes.
14518
+ * @returns the corrective reason handed back to the model.
14519
+ */
14520
+ function partialRouteReason(missing, supplied, allowed) {
14521
+ return `subagent model selection: this Session requires an explicit child model — this call supplied only ${missing === "provider" ? "model" : "provider"} "${supplied}" and ${missing} must be named together with it. Call list_subagent_models and pass ${authorizedRoutesText(allowed)} with an optional reasoning_effort.`;
14522
+ }
14497
14523
  /**
14498
14524
  * Build the denial reason for a delegation that would run on an unauthorized
14499
14525
  * route. The reason names the authorized routes so the next call can select one.
@@ -14505,7 +14531,7 @@ function routesInclude(allowed, provider, model) {
14505
14531
  */
14506
14532
  function unauthorizedRouteReason(provider, model, allowed, explicit) {
14507
14533
  const route = provider === void 0 || model === void 0 ? "the inherited route" : `route "${provider}/${model}"`;
14508
- return `subagent model selection: ${explicit ? "the model this call selected is not on the Session allowlist" : "the route this call would inherit from the parent is not on the Session allowlist"} (${route}). Provide an authorized provider and model — ${allowed.map((entry) => `${entry.provider}/${entry.model}`).join(", ")} — using list_subagent_models to inspect their reasoning efforts.`;
14534
+ return `subagent model selection: ${explicit ? "the model this call selected is not on the Session allowlist" : "the route this call would inherit from the parent is not on the Session allowlist"} (${route}). Provide an authorized provider and model — ${authorizedRoutesText(allowed)} — using list_subagent_models to inspect their reasoning efforts.`;
14509
14535
  }
14510
14536
  /**
14511
14537
  * Decide whether one delegation call may start its child.
@@ -14526,13 +14552,10 @@ function delegationDenialReason(agent, toolName, args, preference, sessions, too
14526
14552
  const request = asRecord(args) ?? {};
14527
14553
  const requestedProvider = asString(request["provider"]);
14528
14554
  const requestedModel = asString(request["model"]);
14529
- const explicit = requestedProvider !== void 0 || requestedModel !== void 0;
14530
- const implicit = requestedProvider === void 0 && requestedModel === void 0;
14531
- const provider = implicit ? asString(agent?.options?.provider) : requestedProvider;
14532
- const model = implicit ? asString(agent?.options?.model) : requestedModel;
14533
- if (provider === void 0 || model === void 0) return;
14534
- if (routesInclude(allowed, provider, model)) return void 0;
14535
- return unauthorizedRouteReason(provider, model, allowed, explicit);
14555
+ if (requestedProvider === void 0) return requestedModel === void 0 ? missingRouteReason(allowed) : partialRouteReason("provider", requestedModel, allowed);
14556
+ if (requestedModel === void 0) return partialRouteReason("model", requestedProvider, allowed);
14557
+ if (routesInclude(allowed, requestedProvider, requestedModel)) return void 0;
14558
+ return unauthorizedRouteReason(requestedProvider, requestedModel, allowed, true);
14536
14559
  }
14537
14560
  /**
14538
14561
  * Build the monotonic tool guard for one deployment. The Host preference is
@@ -3,15 +3,17 @@
3
3
  *
4
4
  * The `subagent-model-selection` preference is sampled into each Session as a
5
5
  * durable route allowlist, but the built-in delegation tool only rejects an
6
- * explicit route outside that list: a call that selects no route lets the child
7
- * inherit the parent's model, so a DeepSeek parent could spawn DeepSeek
8
- * children even though the allowlist authorizes only other models.
6
+ * explicit route outside that list: a call that omits `provider` or `model`
7
+ * silently falls back to the configured child defaults or to the parent's own
8
+ * route, so a DeepSeek parent could spawn DeepSeek children even though the
9
+ * allowlist authorizes only other models.
9
10
  *
10
11
  * This guard closes that gap from the plugin plane. Whenever the calling
11
12
  * Session (or the nearest ancestor that recorded one) carries an allowlist,
12
- * a delegation whose effective child route the list does not authorize is
13
- * denied before the child starts, with the authorized routes in the reason so
14
- * the model can retry and pick one of them.
13
+ * every delegation must name an authorized `provider` and `model`; a call that
14
+ * names neither, names only half of the pair, or names a route outside the list
15
+ * is denied before the child starts, with the authorized routes in the reason so
16
+ * the model can call `list_subagent_models` and retry with one of them.
15
17
  * @module dsh-chatgpt-subscription/subagent-model-authorization
16
18
  */
17
19
  import type { Context } from '@deepseek-ai/cordis';
@@ -88,6 +90,24 @@ export declare function authorizedRoutesFor(agent: AuthorizationAgent | undefine
88
90
  * @returns the resolved preference, or undefined without a settings service.
89
91
  */
90
92
  export declare function subagentModelSelectionPreference(settings: SettingsProvider | undefined): SubagentModelSelectionPreference | undefined;
93
+ /**
94
+ * Build the denial reason for a delegation that named no explicit route.
95
+ * A policy-carrying Session requires the model to choose, so the reason names
96
+ * every authorized route and the discovery tool that lists them.
97
+ * @param allowed - Routes the calling Session authorizes.
98
+ * @returns the corrective reason handed back to the model.
99
+ */
100
+ export declare function missingRouteReason(allowed: readonly AllowedModelRoute[]): string;
101
+ /**
102
+ * Build the denial reason for a half-specified route. The built-in delegation
103
+ * tool completes such a pair from its own configuration, so this reason names
104
+ * the missing field as well as the authorized routes.
105
+ * @param missing - The half of the pair the call omitted.
106
+ * @param supplied - The half the call did provide.
107
+ * @param allowed - Routes the calling Session authorizes.
108
+ * @returns the corrective reason handed back to the model.
109
+ */
110
+ export declare function partialRouteReason(missing: 'provider' | 'model', supplied: string, allowed: readonly AllowedModelRoute[]): string;
91
111
  /**
92
112
  * Build the denial reason for a delegation that would run on an unauthorized
93
113
  * route. The reason names the authorized routes so the next call can select one.
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-model-authorization.d.ts","sourceRoot":"","sources":["../../../src/host/subagent-model-authorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAIjE,kEAAkE;AAClE,eAAO,MAAM,kCAAkC,6BAA6B,CAAA;AAE5E,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,oCAAoC,CAAA;AAEtE,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAAiB,CAAA;AAEvE,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,gFAAgF;AAChF,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,aAAa,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACrD;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;QACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KACjC,CAAA;CACF;AAED,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAA;CAC3C;AAED,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC7E;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB;AA+BD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,EAAE,GAAG,SAAS,CAajF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,iBAAiB,EAAE,GAAG,SAAS,CAiBlG;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,QAAQ,EAAE,gBAAgB,GACzB,iBAAiB,EAAE,GAAG,SAAS,CAYjC;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,gBAAgB,GAAG,SAAS,GACrC,gCAAgC,GAAG,SAAS,CAwB9C;AAWD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,QAAQ,EAAE,OAAO,GAChB,MAAM,CAWR;AAED,oEAAoE;AACpE,MAAM,MAAM,kBAAkB;AAC5B;;;;GAIG;AACD,SAAS;AACX;;;;GAIG;GACD,YAAY,CAAA;AAEhB;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,gCAAgC,GAAG,SAAS,EACxD,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,GAAE,SAAS,MAAM,EAA6B,EACvD,KAAK,GAAE,kBAA8B,GACpC,MAAM,GAAG,SAAS,CA0BpB;AAED,4CAA4C;AAC5C,MAAM,WAAW,4BAA4B;IAC3C,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IACpC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAA;CACpC;AAED,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,CAC5B,KAAK,EAAE,kBAAkB,GAAG,SAAS,EACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,KACV,MAAM,GAAG,SAAS,CAAA;AAEvB;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,eAAe,CAUjB;AAED,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAKrE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAUlF;AAED,2EAA2E;AAC3E,MAAM,WAAW,gCAAgC;IAC/C,kDAAkD;IAClD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAA;CACpC;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,GAAE,gCAAqC,GAC5C,MAAM,IAAI,CAOZ;AACD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAK7E"}
1
+ {"version":3,"file":"subagent-model-authorization.d.ts","sourceRoot":"","sources":["../../../src/host/subagent-model-authorization.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eddyskywalker/dsh-chatgpt-subscription",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "DSH provider plugin for Codex access through a ChatGPT subscription.",
5
5
  "author": {
6
6
  "name": "eddyskywalker",