@eddyskywalker/dsh-chatgpt-subscription 0.48.0 → 0.48.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 +19 -0
- package/lib/client.js.map +1 -1
- package/lib/index.js +523 -77
- package/lib/types/compat.d.ts +1 -1
- package/lib/types/host/compaction-policy-guard.d.ts.map +1 -1
- package/lib/types/host/plan-mode-cache-guard.d.ts.map +1 -1
- package/lib/types/host/ptc-sdk-cache-guard.d.ts.map +1 -1
- package/lib/types/host/tool-result-pruner-guard.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.48.2 - 2026-10-30
|
|
6
|
+
|
|
7
|
+
- **[fix / guards] 修复两个宿主级缓存守卫吞掉 Cordis 瀑布的 `next()`:每一轮都崩成 `Cannot read properties of undefined (reading 'kind')`**
|
|
8
|
+
- 根因:DSH 的 `agent/pre-step` / `agent/request` / `agent/request-error` 是 Cordis **瀑布**事件(`ctx.waterfall`),监听器签名是 `(payload, next)`,而瀑布的返回值是**最外层监听器的返回值**。`src/host/tool-result-pruner-guard.ts` 与 `src/host/compaction-policy-guard.ts` 的 `handleAgentEvent` 只做副作用扫描(包装修剪器实例 / 观测 provider-model),从不调用也不返回尾部的 `next`——于是瀑布在第一步就被短路:后续监听器(含 `compaction-basic` 在 `agent/request-error` 上的溢出重试)一个都不跑,瀑布返回 `undefined`,`agent-loop`(`packages/core/agent-loop/src/agent.ts:290`)读 `decision.kind` 时抛 `TypeError: Cannot read properties of undefined (reading 'kind')`,**每一轮都崩**。
|
|
9
|
+
- 修复:两个守卫的 `handleAgentEvent` 改成「扫描照旧(失败只吞扫描本身)→ 无条件调用尾部 `next()` → 原样交回它的结果」。`next` 按结构取(最后一个参数且 `typeof === 'function'`);没有 `next` 的老代 / 替身场景返回 `undefined` 而不抛错。结构探测(`isRecord` / `readContext` / `observeFrom`)本来就以 `typeof value === 'object'` 判定,函数天然被跳过,不会被误当成载荷。
|
|
10
|
+
- 事件面对齐:修剪器守卫此前只订阅 `agent/pre-step` 与 `agent/request-error`,现在与压缩策略守卫一致地订阅 `agent/pre-step` / `agent/request` / `agent/request-error` 三个瀑布事件。
|
|
11
|
+
- 回归:`test/tool-result-pruner.test.ts`(29 例)与 `test/kimi-cache-guards.test.ts`(34 例)新增「瀑布事件的 next() 转交」用例——用 `(payload, next)` 派发,断言监听器调用了 `next()` 并**原样**返回 `{ kind: 'enter', messages: [] }`;覆盖「`agent.ctx` 在场」「`agent.ctx` 缺席」「扫描抛错」三条分支,外加「没有 `next` 参数时返回 `undefined`」。把修复回退后这批用例立刻变红(10 例失败)。
|
|
12
|
+
- 文档:`.dsh/skills/dsh-harness-upgrade/SKILL.md` §3a 新增「Cordis waterfall events: every listener must call and return `next()`」小节,写明这条不变量、四条推导规则与本插件全部瀑布监听器的对照表。
|
|
13
|
+
- 影响面:自 0.48.0 引入宿主级守卫以来,所有装了这四个守卫的会话**每一轮**都受影响。
|
|
14
|
+
|
|
15
|
+
## 0.48.1 - 2026-10-30
|
|
16
|
+
|
|
17
|
+
- **[fix / guards] 修复四个宿主级缓存守卫丢失调用方作用域的缺陷:`tools.register` 等方法不再被钉到根上下文**
|
|
18
|
+
- 根因:Cordis 的 `Service` 代理在读属性时会把方法**绑定到读取它的那一层作用域**。守卫此前用 `const original = tools.register` 取到的是一份**已经绑到根作用域**的函数,再 `original.call(tools, …)` 把根作用域硬塞回每一次注册;`ToolsService.register` 于是按 `scopeOf(this.ctx) === undefined` 落进**全局**工具层,于是第二个 preset 注册同名工具时抛 `tool "list_subagent_models" is already registered (for a per-agent variant, register through that agent's agent.ctx instead)`。
|
|
19
|
+
- 修复:四个守卫统一用 `resolveMethodTarget()` 定位方法——方法在**原型**上时取**原型那份未绑定实现**、并把包装写到原型;包装器一律 `original.call(this, …)`,把**调用方自己的 receiver** 传下去,`this.ctx` 因此留在调用方的 child scope。只有单测里的普通假对象(方法是自有属性)才退回实例。涉及 `src/host/plan-mode-cache-guard.ts`(`tools.register`)、`src/host/ptc-sdk-cache-guard.ts`(`tools.definitions`)、`src/host/tool-result-pruner-guard.ts`(`pruneSession`)、`src/host/compaction-policy-guard.ts`(`compactIfNeeded` / `compactPressure` / `compact` / `summarize`)。
|
|
20
|
+
- 去重:原型由同类的所有实例共享,而修剪器与压缩引擎又是**每个 preset realm 一份**,因此「已包装」按(宿主原型 + 方法名)记账,避免第二个实例叠第二层包装;`dispose()` 还原首次包装时捕获的原型描述符。
|
|
21
|
+
- 回归:新增**真实 Cordis** 多作用域用例——用 `@deepseek-ai/cordis` 的 `Context` / `Service` 造一个按作用域分桶的假工具层,把守卫装在根上下文上,再经 `childA.get('tools').register(…)` 与 `childB.get('tools').register(…)` 注册同名工具,断言 `register` 里的 `this.ctx` 是**调用方**那一层作用域(其原型就是那个子上下文)、两次注册互不撞车(`test/plan-mode-fork.test.ts` 新增 3 例、`test/kimi-cache-guards.test.ts` 新增 2 例)。把 receiver 退回旧的 `original.call(tools, …)` 后这些用例立刻复现现场报错。
|
|
22
|
+
- 文档:`.dsh/skills/dsh-harness-upgrade/SKILL.md` §3a 新增「原型 vs. 代理 receiver」小节,写明这条规则与它的两个衍生陷阱(原型跨实例共享、不得写 `Object.prototype`)。
|
|
23
|
+
|
|
5
24
|
## 0.48.0 - 2026-10-30
|
|
6
25
|
|
|
7
26
|
- **[dispatch / plan-mode] Fork 计划模式服务(`./plan-mode`)并新增宿主跨预设缓存守卫,进出计划模式零前缀重建,恢复完整四段式规划指引**
|