@mengyuly/dsh-ponytail 0.3.1 → 0.3.3
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 +409 -355
- package/LICENSE +21 -21
- package/README.md +183 -168
- package/cordis.patch.yml +3 -3
- package/dist-provenance.json +11 -11
- package/lib/index.js +1912 -1907
- package/lib/invariant.js +23 -23
- package/lib/types/content.d.ts +26 -26
- package/lib/types/index.d.ts +50 -50
- package/lib/types/instructions.d.ts +17 -17
- package/lib/types/invariant.d.ts +15 -15
- package/lib/types/modes.d.ts +114 -112
- package/package.json +50 -60
package/CHANGELOG.md
CHANGED
|
@@ -1,363 +1,417 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to `@mengyuly/dsh-ponytail` are documented here.
|
|
4
|
-
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@mengyuly/dsh-ponytail` are documented here.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
|
+
|
|
6
6
|
## Unreleased
|
|
7
7
|
|
|
8
|
-
## [0.3.
|
|
9
|
-
|
|
10
|
-
### Changed
|
|
11
|
-
|
|
12
|
-
- E2E 规则组补充防误解澄清句:「It does not mean every layer must change:
|
|
13
|
-
the change must be complete across the layers it touches.」——防止把
|
|
14
|
-
「最小完整端到端变更」误解为必须修改所有层(真实数据流那条的补充)。
|
|
15
|
-
其余规则文本不变;审计确认 Full/Ultra 的 E2E 组、Lite 架构保护句、
|
|
16
|
-
Gain 四段口径、主 Skill 指针卡与 modelInvocable:false、docs smoke
|
|
17
|
-
口径(null≠0/环境阻断/静态vs动态/高方差)均已符合,未重复修改。
|
|
18
|
-
|
|
19
|
-
## [0.3.0] - 2026-08-26
|
|
20
|
-
|
|
21
|
-
### Added
|
|
22
|
-
|
|
23
|
-
- **最小正确端到端变更规则**(`instructions.ts` 新增共享 `E2E_RULES` 组,Full
|
|
24
|
-
与 Ultra 均包含):优先「与现有架构兼容的最小完整端到端变更」,而非单个
|
|
25
|
-
文件最少行数;创建组件/抽象/协议/迁移/传输格式/存储格式/依赖前先检查仓库
|
|
26
|
-
既有路径并保留现有契约;任务只要求局部 UI 或行为变化时不得重新设计传输、
|
|
27
|
-
存储、API 形态或持久化;局部更小但改变系统契约的实现并不更小;沿真实数据
|
|
28
|
-
流(input → state → validation → payload → API → persistence →
|
|
29
|
-
response/UI)取最小完整变更;不得仅为更小的 diff 留下 UI-only 字段、
|
|
30
|
-
未用状态、占位路径或断开的 payload。
|
|
31
|
-
- **Safety 边界扩充**:真实端到端数据流、非平凡改动的必要测试、根因修复
|
|
32
|
-
(全模式共享,不可删除)。
|
|
33
|
-
|
|
34
|
-
### Changed
|
|
35
|
-
|
|
36
|
-
- **Lite / Full / Ultra 规则边界重定义**(结构化组合保持,恢复旧的
|
|
37
|
-
Markdown 正则过滤):
|
|
38
|
-
- Lite:完成所有明确要求与验收标准;优先复用/标准库/原生/已装依赖;可
|
|
39
|
-
一句话提示更简方案但不挑战明确要求;**不得仅为减少行数改变现有架构**;
|
|
40
|
-
非平凡改动保留最小合理校验。
|
|
41
|
-
- Full:完整七级阶梯;默认最短正确实现并**优先最小完整端到端变更**;偏好
|
|
42
|
-
删除与复用,但不牺牲正确性、安全、测试、明确要求或现有系统契约。
|
|
43
|
-
- Ultra:先删后加;主动质疑投机性功能、缓存、抽象、配置、**迁移、传输
|
|
44
|
-
变化、存储变化**与新依赖;**取最小完整端到端变更而非最小局部 diff**;
|
|
45
|
-
不为减少行数改变现有契约;不是无脑拒绝(明确要求/安全/校验/无障碍/
|
|
46
|
-
数据保护/验收标准仍强制)。
|
|
47
|
-
- off 仍返回空字符串;同模式输出字节级稳定;三档体积仍远低于旧版 ~1.3k
|
|
48
|
-
tokens。
|
|
49
|
-
- **`/ponytail-gain` 口径重排**:固定顺序「1. Upstream agentic reference →
|
|
50
|
-
2. Upstream single-shot reference → 3. DSH adapter status → 4. Honesty
|
|
51
|
-
boundary」;节省条件补充为「Savings depend on model, workload, prompt
|
|
52
|
-
caching, tool usage, and execution path」;诚实边界明确「缺失的 cost
|
|
53
|
-
字段(null)不是 0 成本」。Skill 描述与 Help 表格中的
|
|
54
|
-
"less code, less cost, more speed" 改为
|
|
55
|
-
"less unnecessary work; token, cost, and latency effects depend on model
|
|
56
|
-
and workload"。
|
|
57
|
-
- README 顶部定位改为「极简编码原则与相关 Skill 的适配」,明确 DSH 的模型
|
|
58
|
-
循环、Prompt 组装、Skill 机制与工具调用不同。
|
|
59
|
-
|
|
60
|
-
### Tests
|
|
61
|
-
|
|
62
|
-
- instructions:Full/Ultra 含端到端规则组;Lite 含架构保护句;三档互异;
|
|
63
|
-
off 为空;安全边界含端到端数据流/必要测试/根因修复。
|
|
64
|
-
- gain:四段顺序、节省条件、null≠0、无 "less code, less cost, more speed"。
|
|
65
|
-
|
|
66
|
-
## [0.2.2] - 2026-08-26
|
|
67
|
-
|
|
68
|
-
### Changed
|
|
69
|
-
|
|
70
|
-
- **`/ponytail-gain` 数据口径修正**:收益数字明确标注为 **Upstream
|
|
71
|
-
reference**(Single-shot:5 任务 × 3 Claude 模型,代码 −80~94%、成本
|
|
72
|
-
−42~75%、延迟 3.1–5.8×;Agentic:真实 Claude Code 会话 × 12 功能任务,
|
|
73
|
-
LOC ~−54%、Token ~−22%、成本 ~−20%、时间 ~−27%、过度构建 −60~94%、
|
|
74
|
-
安全 100%),并注明「These are upstream Ponytail results, not measured
|
|
75
|
-
guarantees for this DSH adapter」「Savings depend on model and workload」
|
|
76
|
-
「Already-minimal tasks may show little or no savings」「Some reasoning
|
|
77
|
-
models may become more expensive」。新增 **DSH adapter status**:当前
|
|
78
|
-
smoke 只支持方向性有效,稳定 Token/成本/延迟节省尚未建立。Skill 描述
|
|
79
|
-
由 "less code, less cost, more speed" 改为 "upstream benchmark reference;
|
|
80
|
-
less unnecessary code, while token, cost, and latency effects depend on
|
|
81
|
-
model and workload"。
|
|
82
|
-
- **主 `ponytail` Skill 自动调用策略**:`invocation` 改为
|
|
83
|
-
`modelInvocable: false, userInvocable: true`——指针卡不再进入模型侧
|
|
84
|
-
Skill Catalog(普通编码任务不再重复加载),`/ponytail` 等命令与用户侧
|
|
85
|
-
入口不受影响(命令经 `ctx.skills.get` 加载,不被 modelInvocable 门控;
|
|
86
|
-
语义依据 `@deepseek-ai/dsh-skill` 的 `isModelInvocable`/`isUserInvocable`
|
|
87
|
-
与 `tool-skill` 的 Catalog 过滤源码核实)。whenToUse/描述缩小为
|
|
88
|
-
「仅在用户询问激活/模式/配置/帮助时使用」。
|
|
89
|
-
- **`/ponytail-help` 模式选择指导**:新增 Lite/Full/Ultra/Off 使用建议
|
|
90
|
-
(中英双语)与声明「Ponytail is not a guaranteed token-saving switch. It
|
|
91
|
-
trades a small fixed prompt cost for a chance to reduce unnecessary work.
|
|
92
|
-
Do not default every task to Ultra.」
|
|
93
|
-
- **README 效率说明改为条件性收益**:移除旧的 369/420/406 手工 Token 数字
|
|
94
|
-
与无出处的 A/B 行;改为实测 Prompt 大小(`npm run measure:prompt`)+
|
|
95
|
-
「收益有条件、非保证」说明 + 「上游数据不是本 DSH 适配版的保证」。
|
|
96
|
-
- **新增 `docs/dsh-smoke-summary.md`**:DSH Smoke Benchmark 摘要与证据
|
|
97
|
-
边界(环境、三轮结果、Token/成本口径、动态验证阻断、结论分级),
|
|
98
|
-
明确 directional smoke test;不把 runs 原始数据打进 npm 包。
|
|
99
|
-
|
|
100
|
-
### Added
|
|
101
|
-
|
|
102
|
-
- **`scripts/measure-prompt.mjs` + `npm run measure:prompt`**:从真实
|
|
103
|
-
`getPonytailInstructions()` 生成四档 Prompt,输出 chars/bytes 与
|
|
104
|
-
`estimated_tokens`(无统一 tokenizer 时为 null;off 恒为 0),明确
|
|
105
|
-
「rough estimate only; tokenizer and model dependent」,不冒充 Provider
|
|
106
|
-
Usage。Node ≥ 22.18(原生 type stripping)。
|
|
107
|
-
|
|
108
|
-
### Fixed
|
|
109
|
-
|
|
110
|
-
- `sync:dist` 成功提示文字补上 `src/`(状态检查列表早已覆盖,仅提示遗漏)。
|
|
111
|
-
- CHANGELOG 重复的 `## Unreleased` 标题清理;0.2.1 的 Security 内容归档归位。
|
|
112
|
-
- 模块顶部注释补齐完整优先级链(会话 override > env > Profile > 用户
|
|
113
|
-
config > full),与 modes.ts / content.ts / README / d.ts 一致。
|
|
114
|
-
|
|
115
|
-
### Tests
|
|
116
|
-
|
|
117
|
-
- Gain Skill:含 upstream reference、区分 single-shot/agentic、不声称
|
|
118
|
-
DSH 适配版保证节省、提示简单任务可能不省与模型差异。
|
|
119
|
-
- 主 `ponytail` Skill:仍为指针卡、不含旧 Full 规则;`modelInvocable:
|
|
120
|
-
false` / `userInvocable: true`;五个一次性 Skill 的 invocation 不变。
|
|
121
|
-
- Prompt:off 为空、三档互不相同、均含安全边界与明确验收项。
|
|
122
|
-
|
|
123
|
-
## [0.2.1] - 2026-08-25
|
|
124
|
-
|
|
125
|
-
### Fixed
|
|
126
|
-
|
|
127
|
-
- P1: 主 `ponytail` 技能不再携带旧版 Full 规则集——技能正文改为指向注入段的
|
|
128
|
-
**模式感知指针卡**(`PONYTAIL MODE ACTIVE` 段是唯一规则源),Lite/Ultra
|
|
129
|
-
会话里模型不会从技能加载到与当前档位冲突的 Full 规则。
|
|
130
|
-
- `/ponytail default` 在「保存值与覆盖源值恰好相同」时(如 env=full 且
|
|
131
|
-
`/ponytail default full`)也会点名覆盖来源,不再漏报。
|
|
132
|
-
- `sync:dist` 的产物变更状态检查补上 `src/`(0.2.0 起同步 src 镜像)。
|
|
133
|
-
- CHANGELOG 章节顺序修正(Unreleased 回到最顶部)。
|
|
134
|
-
- README 兼容矩阵文字更新为 Node 22/24。
|
|
135
|
-
|
|
136
|
-
### Changed
|
|
137
|
-
|
|
138
|
-
- `/ponytail-help` 补充 Profile 级 `defaultMode` 配置与完整优先级链
|
|
139
|
-
(会话 override > env > Profile > 用户 config > full);Ultra 描述改为
|
|
140
|
-
「先删后加、质疑投机,但绝不删明确要求」,与 0.2.0 新语义一致。
|
|
141
|
-
- 模块头部注释同步(content.ts / modes.ts)。
|
|
142
|
-
|
|
143
|
-
### Tests
|
|
144
|
-
|
|
145
|
-
- ponytail 技能指针卡断言(不含旧 Full 规则)。
|
|
146
|
-
- `/ponytail default` 同值覆盖源提示测试。
|
|
147
|
-
- 62 tests passed in the authoritative deepseek-harness monorepo package
|
|
148
|
-
(`packages/community/ponytail/tests/`: instructions.spec.ts + ponytail.spec.ts;
|
|
149
|
-
本机实测 62 passed;CI 矩阵见 `.github/workflows/ci.yml`,Ubuntu/Windows ×
|
|
150
|
-
Node 22/24)。此数字来自权威 monorepo 包测试,不是发行镜像
|
|
151
|
-
`verify:dist` / `verify:pack` / `test:consumer` / `test:regressions` 的合计。
|
|
152
|
-
|
|
153
|
-
### Security
|
|
154
|
-
|
|
155
|
-
- Documented the development-only `child_process` boundary (`SECURITY.md`):
|
|
156
|
-
`scripts/**` is excluded from the npm tarball, has no install lifecycle
|
|
157
|
-
hook, and is unreachable from the installed runtime entry.
|
|
158
|
-
- Added tarball checks preventing `scripts/` (and `src/`, `tests/`, `test/`,
|
|
159
|
-
`tools/`) from being published, plus a post-install assertion that the
|
|
160
|
-
installed package contains no `scripts/`.
|
|
161
|
-
- Added checks preventing `preinstall` / `install` / `postinstall` /
|
|
162
|
-
`prepare` lifecycle hooks from silently invoking development tooling.
|
|
163
|
-
- Classified repository-only `child_process` findings as accepted
|
|
164
|
-
development-tooling risk.
|
|
165
|
-
|
|
166
|
-
## [0.2.0] - 2026-08-24
|
|
167
|
-
|
|
168
|
-
### Added
|
|
169
|
-
|
|
170
|
-
- 真正区分 lite/full/ultra 的 Prompt:从「Markdown 正则过滤同一份正文」改为
|
|
171
|
-
**结构化片段组合**(Common 规则 + 永不可删的 Safety 边界 + 各档独立规则)。
|
|
172
|
-
- `lite`:完整交付明确要求、可一句话提示更简方案、不挑战明确需求;
|
|
173
|
-
- `full`:完整七级阶梯、默认最短正确实现、修根因;
|
|
174
|
-
- `ultra`:先删后加、主动质疑投机性功能/缓存/抽象/配置/新依赖、先给最小
|
|
175
|
-
正确版并说明完整版条件、不是无脑拒绝;
|
|
176
|
-
- 三档共享 Common + Safety(输入校验/数据丢失防护/安全/无障碍/明确验收项)。
|
|
177
|
-
- 常驻注入从 ~1.3k tokens 降到 **lite≈369 / full≈420 / ultra≈406** tokens。
|
|
178
|
-
- **Cordis Profile 级 `defaultMode` 配置**:`config: { defaultMode }` 按
|
|
179
|
-
profile 生效(`web → full`、`tui → lite` 等),优先级
|
|
180
|
-
`会话 override > env > Profile > 用户 config.json > full`;非法值告警一次
|
|
181
|
-
并回退;Profile 配置初始化时读取(Cordis 无公开配置变更事件),重启生效;
|
|
182
|
-
`/ponytail default` 的 saved/effective 提示现在会点名覆盖来源
|
|
183
|
-
(`PONYTAIL_DEFAULT_MODE` / `profile configuration`)。
|
|
184
|
-
- 兼容矩阵:CI 扩展为 **Node 22 × Node 24 × ubuntu × windows**(4 组合);
|
|
185
|
-
`dist-provenance.json` 增加 `generatedBy.cordis`;README 记录实测矩阵
|
|
186
|
-
(含 web profile 本机验证、tui/headless 如实标注未验证)。
|
|
187
|
-
- 结构化 Prompt 的行为测试、快照测试、token 统计测试;Profile 优先级测试
|
|
188
|
-
(env>profile、会话 override>env、非法回退、双 profile 不同默认)。
|
|
189
|
-
|
|
190
|
-
### Changed
|
|
191
|
-
|
|
192
|
-
- 默认模式解析加入 Profile 档(代码/测试/README 三处一致)。
|
|
193
|
-
- README:三档真实差异、Profile 配置示例、兼容矩阵、子代理边界表述。
|
|
194
|
-
|
|
195
|
-
### Fixed
|
|
196
|
-
|
|
197
|
-
- 删除随旧实现遗留的 `filterSkillBodyForMode` 正则过滤路径及其测试
|
|
198
|
-
(被结构化组合取代)。
|
|
199
|
-
|
|
200
|
-
### Security
|
|
201
|
-
|
|
202
|
-
- 无变化(0.1.6 的 eval-free 产物与 dev-tooling 边界保持)。
|
|
203
|
-
## [0.1.6] - 2026-08-24
|
|
204
|
-
|
|
205
|
-
### Fixed
|
|
206
|
-
|
|
207
|
-
- 移除发行产物中的动态代码执行:`new Function` 的调用点来自内联进 bundle 的
|
|
208
|
-
schemastery(其 schema DSL 会把字符串 `callback` 编译成函数)。已把
|
|
209
|
-
`@deepseek-ai/schemastery` 从 bundle **外置**为已发布的 peer(与 cordis
|
|
210
|
-
同等对待),发行 `lib/index.js` 不再包含任何 `new Function` / `eval`
|
|
211
|
-
(CI 的 `check-bundle` 现在断言外链集合精确为
|
|
212
|
-
`cordis + schemastery`,且产物零动态执行)。该调用点在本插件运行时路径上
|
|
213
|
-
本不可达(只构造、不解析),外置是消除扫描告警的根治,也是更诚实的依赖声明。
|
|
214
|
-
|
|
215
|
-
### Changed
|
|
216
|
-
|
|
217
|
-
- 运行时依赖表述更新:bundle 现在 import `@deepseek-ai/cordis` +
|
|
218
|
-
`@deepseek-ai/schemastery`(两者都已发布);`dsh-llm` / `dsh-skill` 仍内联
|
|
219
|
-
(npm 无兼容版本)。
|
|
220
|
-
- `@deepseek-ai/schemastery` 加入 peerDependencies(宿主兼容声明)。
|
|
221
|
-
- `verify-dist` 的运行时导出检查改用链式可调用 stub 加载 bundle
|
|
222
|
-
(schemastery 在模块加载时被急切构建 schema,但本插件路径不解析它们)。
|
|
223
|
-
- 移除只做类型检查、职责与 `sync:dist` 重叠的 `scripts/build.sh`。
|
|
224
|
-
|
|
225
|
-
### Tests
|
|
226
|
-
|
|
227
|
-
- Ubuntu + Windows(CI 矩阵):check-bundle(外链白名单 + 零动态执行)、
|
|
228
|
-
verify:dist、verify:pack、test:consumer、test:regressions。
|
|
229
|
-
- tarball 安装 smoke 现在显式安装 cordis + schemastery 两个运行时 peer。
|
|
230
|
-
|
|
231
|
-
## [0.1.5] - 2026-08-24
|
|
232
|
-
|
|
233
|
-
### Fixed
|
|
234
|
-
|
|
235
|
-
- Windows 下验证脚本无法启动 `npm.cmd`:`spawnSync('npm', …)` 在 Windows 上对
|
|
236
|
-
`.cmd` 无效(`status === null`)。现在统一走 `process.execPath + npm_execpath`
|
|
237
|
-
(npm script 环境内为 npm 自身 CLI,跨平台可靠),并在 `npm_execpath` 缺失或
|
|
238
|
-
指向其他包管理器(pnpm/yarn/bun shim)时回退到 `npm`/`npm.cmd`。
|
|
239
|
-
- `spawnSync` 启动失败时错误信息丢失:统一 `formatSpawnFailure` 输出 command、
|
|
240
|
-
args、cwd、status、signal、`result.error.message`、stdout/stderr 尾部
|
|
241
|
-
(各 4KB 上限);`status === null` 明确判为启动失败或被信号终止,不再显示为
|
|
242
|
-
普通退出码。
|
|
243
|
-
- `verify-dist` 不再有未定义 `existsSync` 的潜伏分支:改为**直接拒绝**任何
|
|
244
|
-
`sourceMappingURL`(与 v0.1.4 起 `declarationMap: false` 的发布策略一致),
|
|
245
|
-
并新增回归测试证明声明文件重现 source map 时验证会明确失败。
|
|
246
|
-
- 删除 CI 中 checkout 后立即执行的无效 `git diff --exit-code -- lib` 步骤
|
|
247
|
-
(工作区天然干净,证明不了任何事);防漂移表述与真实能力对齐。
|
|
248
|
-
|
|
249
|
-
### Changed
|
|
250
|
-
|
|
251
|
-
- `verify-pack` / `test-consumer` 共用 `scripts/lib/run-command.mjs` 跨平台进程
|
|
252
|
-
工具,不再各自维护一套 `spawnSync('npm', …)`。
|
|
253
|
-
- `verify-pack` 如实报告实际安装的依赖(npm 会解析全部声明 peers,包括宿主
|
|
254
|
-
契约 peers;bundle 运行时只 import `@deepseek-ai/cordis` 由独立外链检查证明)。
|
|
255
|
-
- CI 增加 Windows Runner(`windows-latest` + `ubuntu-latest` 矩阵,Node 24,
|
|
256
|
-
不允许跳过或 continue-on-error)。
|
|
257
|
-
- `sync:dist` 生成 `dist-provenance.json`:`sourceCommit` 来自权威 checkout 的
|
|
258
|
-
`git rev-parse HEAD`(真实 SHA,不手工填写),工具链版本取自 checkout 的
|
|
259
|
-
node_modules,不含本机绝对路径;`verify:dist` 校验其格式。
|
|
260
|
-
- tarball 现在包含 `dist-provenance.json`。
|
|
261
|
-
- 产物一致性检查命名与真实能力一致:`verify:dist` 是静态一致性检查(src/d.ts
|
|
262
|
-
导出、关键签名、主入口运行时导出、无 source map、provenance),不是与权威
|
|
263
|
-
构建的字节级等价证明。
|
|
264
|
-
|
|
265
|
-
### Tests
|
|
266
|
-
|
|
267
|
-
- Ubuntu:verify:dist / verify:pack / test:consumer / test:regressions 全部通过。
|
|
268
|
-
- Windows:CI 矩阵真实执行 verify:dist / verify:pack / test:consumer。
|
|
269
|
-
- npm tarball smoke(仅声明依赖安装后加载)。
|
|
270
|
-
- NodeNext + skipLibCheck:false consumer。
|
|
271
|
-
- 子进程启动失败诊断回归测试。
|
|
272
|
-
- declaration source map 回归测试。
|
|
273
|
-
|
|
274
|
-
## [0.1.4] - 2026-08-24
|
|
275
|
-
|
|
276
|
-
### Fixed
|
|
277
|
-
|
|
278
|
-
- 修复运行时 JS 与 TypeScript declarations 不一致:v0.1.3 只同步了
|
|
279
|
-
`lib/index.js`/`lib/invariant.js`,声明文件停留在旧版本。
|
|
280
|
-
- `compileSubagentMatcher` 声明恢复正确(`{ matcher, invalid }`),与运行时一致。
|
|
281
|
-
- 补齐 `readDefaultModeInfo`、`sessionKey` 及诊断类型
|
|
282
|
-
(`DefaultModeIssueKind` / `DefaultModeIssue` / `DefaultModeResolution`)的声明。
|
|
283
|
-
- `writeDefaultMode` 声明注释补充「写入失败会抛出异常」。
|
|
284
|
-
- 移除失效的 declaration source map 引用:声明生成关闭 `declarationMap`,
|
|
285
|
-
发布的 `.d.ts` 不再携带指向不存在 `.d.ts.map` 的 `sourceMappingURL`。
|
|
8
|
+
## [0.3.3] - 2026-09-09
|
|
286
9
|
|
|
287
10
|
### Changed
|
|
288
11
|
|
|
289
|
-
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
- npm tarball smoke test(仅声明 peer 安装后加载)。
|
|
299
|
-
- TypeScript consumer test(打包安装后编译,非相对路径读 src)。
|
|
300
|
-
- 运行时/声明导出一致性验证。
|
|
301
|
-
- src↔d.ts 漂移检查(CI 与 `verify:dist` 双保险)。
|
|
302
|
-
|
|
303
|
-
## [0.1.3] - 2026-08-23
|
|
12
|
+
- Reworked the always-on rules into an outcome-driven execution loop: define
|
|
13
|
+
observable completion, resolve uncertainty from evidence, make the smallest
|
|
14
|
+
complete change, run the narrowest relevant check, inspect the final diff,
|
|
15
|
+
and report only verified results. Lite now emphasizes direct execution;
|
|
16
|
+
Ultra requires evidence before adding code. Restored upstream's guard that
|
|
17
|
+
non-trivial logic leaves exactly one minimal runnable check, without adding
|
|
18
|
+
a test framework or fixtures, and made the ladder a reflex rather than a
|
|
19
|
+
research project. All three prompts remain below their previous byte sizes.
|
|
304
20
|
|
|
305
21
|
### Fixed
|
|
306
22
|
|
|
307
|
-
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
## [0.
|
|
358
|
-
|
|
359
|
-
### Added
|
|
360
|
-
|
|
361
|
-
-
|
|
362
|
-
|
|
363
|
-
|
|
23
|
+
- Improved the surrounding controls and one-shot skills: Chinese whole-message
|
|
24
|
+
deactivation is supported; review and audit
|
|
25
|
+
findings require observable code evidence; debt scans exclude generated
|
|
26
|
+
trees; `/ponytail reset` restores the configured default; status reports
|
|
27
|
+
whether the current mode is a session override or configured default.
|
|
28
|
+
- Added a core behavior gate that locks prompt bytes, safety invariants,
|
|
29
|
+
deactivation behavior, runtime skill surface, and shipped-bundle markers.
|
|
30
|
+
- Removed the Windows `npm.cmd` shell fallback from verification tooling;
|
|
31
|
+
npm now runs through the active Node executable without shell argument
|
|
32
|
+
concatenation or Node's `DEP0190` warning.
|
|
33
|
+
- Clarified that repository verification and release scripts are maintainer-only
|
|
34
|
+
and are intentionally excluded from the npm tarball.
|
|
35
|
+
- Prevented the published package from exposing maintenance commands that are
|
|
36
|
+
unavailable after installation (`package.json` no longer carries the
|
|
37
|
+
`scripts/`-based commands; maintainers use `node scripts/<script>.mjs` with
|
|
38
|
+
the `package.dev.json` command list).
|
|
39
|
+
- Added a regression check for the published package boundary
|
|
40
|
+
(no `scripts/` exposure, no install lifecycle hooks, entry targets exist).
|
|
41
|
+
- Updated the fixed-version Release example to v0.3.2 while keeping the
|
|
42
|
+
stable versionless latest asset URL.
|
|
43
|
+
- Added cross-channel release consistency checks for Git Tag, npm,
|
|
44
|
+
GitHub Release assets, tarball contents, and dist provenance.
|
|
45
|
+
- Prevented stale local checkouts from being reported as validation of the
|
|
46
|
+
currently published version.
|
|
47
|
+
|
|
48
|
+
## [0.3.2] - 2026-08-31
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- Compressed the structured Lite/Full/Ultra prompt by merging shared end-to-end,
|
|
53
|
+
contract-preservation, disconnected-payload, and proportional-investigation rules;
|
|
54
|
+
the safety boundaries and Full seven-rung ladder remain intact. Lite also keeps
|
|
55
|
+
its non-challenge boundary and proportional investigation rule.
|
|
56
|
+
- Fixed the version-pinned GitHub Release example to use the asset name actually
|
|
57
|
+
published by v0.3.1; release-link verification now rejects unpublished
|
|
58
|
+
versioned asset names.
|
|
59
|
+
- Fixed invariant package-name synchronization and added a distribution guard;
|
|
60
|
+
normalized source file modes for publishable metadata.
|
|
61
|
+
|
|
62
|
+
## [0.3.1] - 2026-08-26
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
|
|
66
|
+
- E2E 规则组补充防误解澄清句:「It does not mean every layer must change:
|
|
67
|
+
the change must be complete across the layers it touches.」——防止把
|
|
68
|
+
「最小完整端到端变更」误解为必须修改所有层(真实数据流那条的补充)。
|
|
69
|
+
其余规则文本不变;审计确认 Full/Ultra 的 E2E 组、Lite 架构保护句、
|
|
70
|
+
Gain 四段口径、主 Skill 指针卡与 modelInvocable:false、docs smoke
|
|
71
|
+
口径(null≠0/环境阻断/静态vs动态/高方差)均已符合,未重复修改。
|
|
72
|
+
|
|
73
|
+
## [0.3.0] - 2026-08-26
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
|
|
77
|
+
- **最小正确端到端变更规则**(`instructions.ts` 新增共享 `E2E_RULES` 组,Full
|
|
78
|
+
与 Ultra 均包含):优先「与现有架构兼容的最小完整端到端变更」,而非单个
|
|
79
|
+
文件最少行数;创建组件/抽象/协议/迁移/传输格式/存储格式/依赖前先检查仓库
|
|
80
|
+
既有路径并保留现有契约;任务只要求局部 UI 或行为变化时不得重新设计传输、
|
|
81
|
+
存储、API 形态或持久化;局部更小但改变系统契约的实现并不更小;沿真实数据
|
|
82
|
+
流(input → state → validation → payload → API → persistence →
|
|
83
|
+
response/UI)取最小完整变更;不得仅为更小的 diff 留下 UI-only 字段、
|
|
84
|
+
未用状态、占位路径或断开的 payload。
|
|
85
|
+
- **Safety 边界扩充**:真实端到端数据流、非平凡改动的必要测试、根因修复
|
|
86
|
+
(全模式共享,不可删除)。
|
|
87
|
+
|
|
88
|
+
### Changed
|
|
89
|
+
|
|
90
|
+
- **Lite / Full / Ultra 规则边界重定义**(结构化组合保持,恢复旧的
|
|
91
|
+
Markdown 正则过滤):
|
|
92
|
+
- Lite:完成所有明确要求与验收标准;优先复用/标准库/原生/已装依赖;可
|
|
93
|
+
一句话提示更简方案但不挑战明确要求;**不得仅为减少行数改变现有架构**;
|
|
94
|
+
非平凡改动保留最小合理校验。
|
|
95
|
+
- Full:完整七级阶梯;默认最短正确实现并**优先最小完整端到端变更**;偏好
|
|
96
|
+
删除与复用,但不牺牲正确性、安全、测试、明确要求或现有系统契约。
|
|
97
|
+
- Ultra:先删后加;主动质疑投机性功能、缓存、抽象、配置、**迁移、传输
|
|
98
|
+
变化、存储变化**与新依赖;**取最小完整端到端变更而非最小局部 diff**;
|
|
99
|
+
不为减少行数改变现有契约;不是无脑拒绝(明确要求/安全/校验/无障碍/
|
|
100
|
+
数据保护/验收标准仍强制)。
|
|
101
|
+
- off 仍返回空字符串;同模式输出字节级稳定;三档体积仍远低于旧版 ~1.3k
|
|
102
|
+
tokens。
|
|
103
|
+
- **`/ponytail-gain` 口径重排**:固定顺序「1. Upstream agentic reference →
|
|
104
|
+
2. Upstream single-shot reference → 3. DSH adapter status → 4. Honesty
|
|
105
|
+
boundary」;节省条件补充为「Savings depend on model, workload, prompt
|
|
106
|
+
caching, tool usage, and execution path」;诚实边界明确「缺失的 cost
|
|
107
|
+
字段(null)不是 0 成本」。Skill 描述与 Help 表格中的
|
|
108
|
+
"less code, less cost, more speed" 改为
|
|
109
|
+
"less unnecessary work; token, cost, and latency effects depend on model
|
|
110
|
+
and workload"。
|
|
111
|
+
- README 顶部定位改为「极简编码原则与相关 Skill 的适配」,明确 DSH 的模型
|
|
112
|
+
循环、Prompt 组装、Skill 机制与工具调用不同。
|
|
113
|
+
|
|
114
|
+
### Tests
|
|
115
|
+
|
|
116
|
+
- instructions:Full/Ultra 含端到端规则组;Lite 含架构保护句;三档互异;
|
|
117
|
+
off 为空;安全边界含端到端数据流/必要测试/根因修复。
|
|
118
|
+
- gain:四段顺序、节省条件、null≠0、无 "less code, less cost, more speed"。
|
|
119
|
+
|
|
120
|
+
## [0.2.2] - 2026-08-26
|
|
121
|
+
|
|
122
|
+
### Changed
|
|
123
|
+
|
|
124
|
+
- **`/ponytail-gain` 数据口径修正**:收益数字明确标注为 **Upstream
|
|
125
|
+
reference**(Single-shot:5 任务 × 3 Claude 模型,代码 −80~94%、成本
|
|
126
|
+
−42~75%、延迟 3.1–5.8×;Agentic:真实 Claude Code 会话 × 12 功能任务,
|
|
127
|
+
LOC ~−54%、Token ~−22%、成本 ~−20%、时间 ~−27%、过度构建 −60~94%、
|
|
128
|
+
安全 100%),并注明「These are upstream Ponytail results, not measured
|
|
129
|
+
guarantees for this DSH adapter」「Savings depend on model and workload」
|
|
130
|
+
「Already-minimal tasks may show little or no savings」「Some reasoning
|
|
131
|
+
models may become more expensive」。新增 **DSH adapter status**:当前
|
|
132
|
+
smoke 只支持方向性有效,稳定 Token/成本/延迟节省尚未建立。Skill 描述
|
|
133
|
+
由 "less code, less cost, more speed" 改为 "upstream benchmark reference;
|
|
134
|
+
less unnecessary code, while token, cost, and latency effects depend on
|
|
135
|
+
model and workload"。
|
|
136
|
+
- **主 `ponytail` Skill 自动调用策略**:`invocation` 改为
|
|
137
|
+
`modelInvocable: false, userInvocable: true`——指针卡不再进入模型侧
|
|
138
|
+
Skill Catalog(普通编码任务不再重复加载),`/ponytail` 等命令与用户侧
|
|
139
|
+
入口不受影响(命令经 `ctx.skills.get` 加载,不被 modelInvocable 门控;
|
|
140
|
+
语义依据 `@deepseek-ai/dsh-skill` 的 `isModelInvocable`/`isUserInvocable`
|
|
141
|
+
与 `tool-skill` 的 Catalog 过滤源码核实)。whenToUse/描述缩小为
|
|
142
|
+
「仅在用户询问激活/模式/配置/帮助时使用」。
|
|
143
|
+
- **`/ponytail-help` 模式选择指导**:新增 Lite/Full/Ultra/Off 使用建议
|
|
144
|
+
(中英双语)与声明「Ponytail is not a guaranteed token-saving switch. It
|
|
145
|
+
trades a small fixed prompt cost for a chance to reduce unnecessary work.
|
|
146
|
+
Do not default every task to Ultra.」
|
|
147
|
+
- **README 效率说明改为条件性收益**:移除旧的 369/420/406 手工 Token 数字
|
|
148
|
+
与无出处的 A/B 行;改为实测 Prompt 大小(`npm run measure:prompt`)+
|
|
149
|
+
「收益有条件、非保证」说明 + 「上游数据不是本 DSH 适配版的保证」。
|
|
150
|
+
- **新增 `docs/dsh-smoke-summary.md`**:DSH Smoke Benchmark 摘要与证据
|
|
151
|
+
边界(环境、三轮结果、Token/成本口径、动态验证阻断、结论分级),
|
|
152
|
+
明确 directional smoke test;不把 runs 原始数据打进 npm 包。
|
|
153
|
+
|
|
154
|
+
### Added
|
|
155
|
+
|
|
156
|
+
- **`scripts/measure-prompt.mjs` + `npm run measure:prompt`**:从真实
|
|
157
|
+
`getPonytailInstructions()` 生成四档 Prompt,输出 chars/bytes 与
|
|
158
|
+
`estimated_tokens`(无统一 tokenizer 时为 null;off 恒为 0),明确
|
|
159
|
+
「rough estimate only; tokenizer and model dependent」,不冒充 Provider
|
|
160
|
+
Usage。Node ≥ 22.18(原生 type stripping)。
|
|
161
|
+
|
|
162
|
+
### Fixed
|
|
163
|
+
|
|
164
|
+
- `sync:dist` 成功提示文字补上 `src/`(状态检查列表早已覆盖,仅提示遗漏)。
|
|
165
|
+
- CHANGELOG 重复的 `## Unreleased` 标题清理;0.2.1 的 Security 内容归档归位。
|
|
166
|
+
- 模块顶部注释补齐完整优先级链(会话 override > env > Profile > 用户
|
|
167
|
+
config > full),与 modes.ts / content.ts / README / d.ts 一致。
|
|
168
|
+
|
|
169
|
+
### Tests
|
|
170
|
+
|
|
171
|
+
- Gain Skill:含 upstream reference、区分 single-shot/agentic、不声称
|
|
172
|
+
DSH 适配版保证节省、提示简单任务可能不省与模型差异。
|
|
173
|
+
- 主 `ponytail` Skill:仍为指针卡、不含旧 Full 规则;`modelInvocable:
|
|
174
|
+
false` / `userInvocable: true`;五个一次性 Skill 的 invocation 不变。
|
|
175
|
+
- Prompt:off 为空、三档互不相同、均含安全边界与明确验收项。
|
|
176
|
+
|
|
177
|
+
## [0.2.1] - 2026-08-25
|
|
178
|
+
|
|
179
|
+
### Fixed
|
|
180
|
+
|
|
181
|
+
- P1: 主 `ponytail` 技能不再携带旧版 Full 规则集——技能正文改为指向注入段的
|
|
182
|
+
**模式感知指针卡**(`PONYTAIL MODE ACTIVE` 段是唯一规则源),Lite/Ultra
|
|
183
|
+
会话里模型不会从技能加载到与当前档位冲突的 Full 规则。
|
|
184
|
+
- `/ponytail default` 在「保存值与覆盖源值恰好相同」时(如 env=full 且
|
|
185
|
+
`/ponytail default full`)也会点名覆盖来源,不再漏报。
|
|
186
|
+
- `sync:dist` 的产物变更状态检查补上 `src/`(0.2.0 起同步 src 镜像)。
|
|
187
|
+
- CHANGELOG 章节顺序修正(Unreleased 回到最顶部)。
|
|
188
|
+
- README 兼容矩阵文字更新为 Node 22/24。
|
|
189
|
+
|
|
190
|
+
### Changed
|
|
191
|
+
|
|
192
|
+
- `/ponytail-help` 补充 Profile 级 `defaultMode` 配置与完整优先级链
|
|
193
|
+
(会话 override > env > Profile > 用户 config > full);Ultra 描述改为
|
|
194
|
+
「先删后加、质疑投机,但绝不删明确要求」,与 0.2.0 新语义一致。
|
|
195
|
+
- 模块头部注释同步(content.ts / modes.ts)。
|
|
196
|
+
|
|
197
|
+
### Tests
|
|
198
|
+
|
|
199
|
+
- ponytail 技能指针卡断言(不含旧 Full 规则)。
|
|
200
|
+
- `/ponytail default` 同值覆盖源提示测试。
|
|
201
|
+
- 62 tests passed in the authoritative deepseek-harness monorepo package
|
|
202
|
+
(`packages/community/ponytail/tests/`: instructions.spec.ts + ponytail.spec.ts;
|
|
203
|
+
本机实测 62 passed;CI 矩阵见 `.github/workflows/ci.yml`,Ubuntu/Windows ×
|
|
204
|
+
Node 22/24)。此数字来自权威 monorepo 包测试,不是发行镜像
|
|
205
|
+
`verify:dist` / `verify:pack` / `test:consumer` / `test:regressions` 的合计。
|
|
206
|
+
|
|
207
|
+
### Security
|
|
208
|
+
|
|
209
|
+
- Documented the development-only `child_process` boundary (`SECURITY.md`):
|
|
210
|
+
`scripts/**` is excluded from the npm tarball, has no install lifecycle
|
|
211
|
+
hook, and is unreachable from the installed runtime entry.
|
|
212
|
+
- Added tarball checks preventing `scripts/` (and `src/`, `tests/`, `test/`,
|
|
213
|
+
`tools/`) from being published, plus a post-install assertion that the
|
|
214
|
+
installed package contains no `scripts/`.
|
|
215
|
+
- Added checks preventing `preinstall` / `install` / `postinstall` /
|
|
216
|
+
`prepare` lifecycle hooks from silently invoking development tooling.
|
|
217
|
+
- Classified repository-only `child_process` findings as accepted
|
|
218
|
+
development-tooling risk.
|
|
219
|
+
|
|
220
|
+
## [0.2.0] - 2026-08-24
|
|
221
|
+
|
|
222
|
+
### Added
|
|
223
|
+
|
|
224
|
+
- 真正区分 lite/full/ultra 的 Prompt:从「Markdown 正则过滤同一份正文」改为
|
|
225
|
+
**结构化片段组合**(Common 规则 + 永不可删的 Safety 边界 + 各档独立规则)。
|
|
226
|
+
- `lite`:完整交付明确要求、可一句话提示更简方案、不挑战明确需求;
|
|
227
|
+
- `full`:完整七级阶梯、默认最短正确实现、修根因;
|
|
228
|
+
- `ultra`:先删后加、主动质疑投机性功能/缓存/抽象/配置/新依赖、先给最小
|
|
229
|
+
正确版并说明完整版条件、不是无脑拒绝;
|
|
230
|
+
- 三档共享 Common + Safety(输入校验/数据丢失防护/安全/无障碍/明确验收项)。
|
|
231
|
+
- 常驻注入从 ~1.3k tokens 降到 **lite≈369 / full≈420 / ultra≈406** tokens。
|
|
232
|
+
- **Cordis Profile 级 `defaultMode` 配置**:`config: { defaultMode }` 按
|
|
233
|
+
profile 生效(`web → full`、`tui → lite` 等),优先级
|
|
234
|
+
`会话 override > env > Profile > 用户 config.json > full`;非法值告警一次
|
|
235
|
+
并回退;Profile 配置初始化时读取(Cordis 无公开配置变更事件),重启生效;
|
|
236
|
+
`/ponytail default` 的 saved/effective 提示现在会点名覆盖来源
|
|
237
|
+
(`PONYTAIL_DEFAULT_MODE` / `profile configuration`)。
|
|
238
|
+
- 兼容矩阵:CI 扩展为 **Node 22 × Node 24 × ubuntu × windows**(4 组合);
|
|
239
|
+
`dist-provenance.json` 增加 `generatedBy.cordis`;README 记录实测矩阵
|
|
240
|
+
(含 web profile 本机验证、tui/headless 如实标注未验证)。
|
|
241
|
+
- 结构化 Prompt 的行为测试、快照测试、token 统计测试;Profile 优先级测试
|
|
242
|
+
(env>profile、会话 override>env、非法回退、双 profile 不同默认)。
|
|
243
|
+
|
|
244
|
+
### Changed
|
|
245
|
+
|
|
246
|
+
- 默认模式解析加入 Profile 档(代码/测试/README 三处一致)。
|
|
247
|
+
- README:三档真实差异、Profile 配置示例、兼容矩阵、子代理边界表述。
|
|
248
|
+
|
|
249
|
+
### Fixed
|
|
250
|
+
|
|
251
|
+
- 删除随旧实现遗留的 `filterSkillBodyForMode` 正则过滤路径及其测试
|
|
252
|
+
(被结构化组合取代)。
|
|
253
|
+
|
|
254
|
+
### Security
|
|
255
|
+
|
|
256
|
+
- 无变化(0.1.6 的 eval-free 产物与 dev-tooling 边界保持)。
|
|
257
|
+
## [0.1.6] - 2026-08-24
|
|
258
|
+
|
|
259
|
+
### Fixed
|
|
260
|
+
|
|
261
|
+
- 移除发行产物中的动态代码执行:`new Function` 的调用点来自内联进 bundle 的
|
|
262
|
+
schemastery(其 schema DSL 会把字符串 `callback` 编译成函数)。已把
|
|
263
|
+
`@deepseek-ai/schemastery` 从 bundle **外置**为已发布的 peer(与 cordis
|
|
264
|
+
同等对待),发行 `lib/index.js` 不再包含任何 `new Function` / `eval`
|
|
265
|
+
(CI 的 `check-bundle` 现在断言外链集合精确为
|
|
266
|
+
`cordis + schemastery`,且产物零动态执行)。该调用点在本插件运行时路径上
|
|
267
|
+
本不可达(只构造、不解析),外置是消除扫描告警的根治,也是更诚实的依赖声明。
|
|
268
|
+
|
|
269
|
+
### Changed
|
|
270
|
+
|
|
271
|
+
- 运行时依赖表述更新:bundle 现在 import `@deepseek-ai/cordis` +
|
|
272
|
+
`@deepseek-ai/schemastery`(两者都已发布);`dsh-llm` / `dsh-skill` 仍内联
|
|
273
|
+
(npm 无兼容版本)。
|
|
274
|
+
- `@deepseek-ai/schemastery` 加入 peerDependencies(宿主兼容声明)。
|
|
275
|
+
- `verify-dist` 的运行时导出检查改用链式可调用 stub 加载 bundle
|
|
276
|
+
(schemastery 在模块加载时被急切构建 schema,但本插件路径不解析它们)。
|
|
277
|
+
- 移除只做类型检查、职责与 `sync:dist` 重叠的 `scripts/build.sh`。
|
|
278
|
+
|
|
279
|
+
### Tests
|
|
280
|
+
|
|
281
|
+
- Ubuntu + Windows(CI 矩阵):check-bundle(外链白名单 + 零动态执行)、
|
|
282
|
+
verify:dist、verify:pack、test:consumer、test:regressions。
|
|
283
|
+
- tarball 安装 smoke 现在显式安装 cordis + schemastery 两个运行时 peer。
|
|
284
|
+
|
|
285
|
+
## [0.1.5] - 2026-08-24
|
|
286
|
+
|
|
287
|
+
### Fixed
|
|
288
|
+
|
|
289
|
+
- Windows 下验证脚本无法启动 `npm.cmd`:`spawnSync('npm', …)` 在 Windows 上对
|
|
290
|
+
`.cmd` 无效(`status === null`)。现在统一走 `process.execPath + npm_execpath`
|
|
291
|
+
(npm script 环境内为 npm 自身 CLI,跨平台可靠),并在 `npm_execpath` 缺失或
|
|
292
|
+
指向其他包管理器(pnpm/yarn/bun shim)时回退到 `npm`/`npm.cmd`。
|
|
293
|
+
- `spawnSync` 启动失败时错误信息丢失:统一 `formatSpawnFailure` 输出 command、
|
|
294
|
+
args、cwd、status、signal、`result.error.message`、stdout/stderr 尾部
|
|
295
|
+
(各 4KB 上限);`status === null` 明确判为启动失败或被信号终止,不再显示为
|
|
296
|
+
普通退出码。
|
|
297
|
+
- `verify-dist` 不再有未定义 `existsSync` 的潜伏分支:改为**直接拒绝**任何
|
|
298
|
+
`sourceMappingURL`(与 v0.1.4 起 `declarationMap: false` 的发布策略一致),
|
|
299
|
+
并新增回归测试证明声明文件重现 source map 时验证会明确失败。
|
|
300
|
+
- 删除 CI 中 checkout 后立即执行的无效 `git diff --exit-code -- lib` 步骤
|
|
301
|
+
(工作区天然干净,证明不了任何事);防漂移表述与真实能力对齐。
|
|
302
|
+
|
|
303
|
+
### Changed
|
|
304
|
+
|
|
305
|
+
- `verify-pack` / `test-consumer` 共用 `scripts/lib/run-command.mjs` 跨平台进程
|
|
306
|
+
工具,不再各自维护一套 `spawnSync('npm', …)`。
|
|
307
|
+
- `verify-pack` 如实报告实际安装的依赖(npm 会解析全部声明 peers,包括宿主
|
|
308
|
+
契约 peers;bundle 运行时只 import `@deepseek-ai/cordis` 由独立外链检查证明)。
|
|
309
|
+
- CI 增加 Windows Runner(`windows-latest` + `ubuntu-latest` 矩阵,Node 24,
|
|
310
|
+
不允许跳过或 continue-on-error)。
|
|
311
|
+
- `sync:dist` 生成 `dist-provenance.json`:`sourceCommit` 来自权威 checkout 的
|
|
312
|
+
`git rev-parse HEAD`(真实 SHA,不手工填写),工具链版本取自 checkout 的
|
|
313
|
+
node_modules,不含本机绝对路径;`verify:dist` 校验其格式。
|
|
314
|
+
- tarball 现在包含 `dist-provenance.json`。
|
|
315
|
+
- 产物一致性检查命名与真实能力一致:`verify:dist` 是静态一致性检查(src/d.ts
|
|
316
|
+
导出、关键签名、主入口运行时导出、无 source map、provenance),不是与权威
|
|
317
|
+
构建的字节级等价证明。
|
|
318
|
+
|
|
319
|
+
### Tests
|
|
320
|
+
|
|
321
|
+
- Ubuntu:verify:dist / verify:pack / test:consumer / test:regressions 全部通过。
|
|
322
|
+
- Windows:CI 矩阵真实执行 verify:dist / verify:pack / test:consumer。
|
|
323
|
+
- npm tarball smoke(仅声明依赖安装后加载)。
|
|
324
|
+
- NodeNext + skipLibCheck:false consumer。
|
|
325
|
+
- 子进程启动失败诊断回归测试。
|
|
326
|
+
- declaration source map 回归测试。
|
|
327
|
+
|
|
328
|
+
## [0.1.4] - 2026-08-24
|
|
329
|
+
|
|
330
|
+
### Fixed
|
|
331
|
+
|
|
332
|
+
- 修复运行时 JS 与 TypeScript declarations 不一致:v0.1.3 只同步了
|
|
333
|
+
`lib/index.js`/`lib/invariant.js`,声明文件停留在旧版本。
|
|
334
|
+
- `compileSubagentMatcher` 声明恢复正确(`{ matcher, invalid }`),与运行时一致。
|
|
335
|
+
- 补齐 `readDefaultModeInfo`、`sessionKey` 及诊断类型
|
|
336
|
+
(`DefaultModeIssueKind` / `DefaultModeIssue` / `DefaultModeResolution`)的声明。
|
|
337
|
+
- `writeDefaultMode` 声明注释补充「写入失败会抛出异常」。
|
|
338
|
+
- 移除失效的 declaration source map 引用:声明生成关闭 `declarationMap`,
|
|
339
|
+
发布的 `.d.ts` 不再携带指向不存在 `.d.ts.map` 的 `sourceMappingURL`。
|
|
340
|
+
|
|
341
|
+
### Changed
|
|
342
|
+
|
|
343
|
+
- 发布流程改为同步**完整** `lib/`(两个运行时 bundle + 全部 `.d.ts`):
|
|
344
|
+
`npm run sync:dist`(要求 `DSH_CHECKOUT`,在权威 checkout 中重建后整体同步)。
|
|
345
|
+
- CI 增加防漂移检查:src 导出 ↔ 声明导出、运行时导出 ↔ 声明导出、
|
|
346
|
+
`modes.d.ts` 关键签名、无悬空 source map、tarball 内容/版本/安装后 smoke、
|
|
347
|
+
NodeNext + `skipLibCheck:false` 的声明消费测试。
|
|
348
|
+
- tarball 现在包含 `CHANGELOG.md`。
|
|
349
|
+
|
|
350
|
+
### Tests
|
|
351
|
+
|
|
352
|
+
- npm tarball smoke test(仅声明 peer 安装后加载)。
|
|
353
|
+
- TypeScript consumer test(打包安装后编译,非相对路径读 src)。
|
|
354
|
+
- 运行时/声明导出一致性验证。
|
|
355
|
+
- src↔d.ts 漂移检查(CI 与 `verify:dist` 双保险)。
|
|
356
|
+
|
|
357
|
+
## [0.1.3] - 2026-08-23
|
|
358
|
+
|
|
359
|
+
### Fixed
|
|
360
|
+
|
|
361
|
+
- Bare `/ponytail` on an `off` session now re-enables at the effective default
|
|
362
|
+
(or `full` when that default is `off` too), matching the documented "resume
|
|
363
|
+
anytime with `/ponytail`" behavior. It still only reports when already enabled.
|
|
364
|
+
- `/ponytail default <mode>` no longer bypasses `PONYTAIL_DEFAULT_MODE`: the
|
|
365
|
+
effective default is recomputed after the write, so the env var keeps its
|
|
366
|
+
documented highest priority; the result distinguishes saved vs effective.
|
|
367
|
+
- Typo: `Ponyytail default set` → `Ponytail default set`.
|
|
368
|
+
- Deactivation phrases now also strip CJK sentence enders (`。?!`), so
|
|
369
|
+
`normal mode?` and `stop ponytail。` deactivate as expected.
|
|
370
|
+
- Config writes are now atomic (temp file + rename); a failed write returns an
|
|
371
|
+
error instead of a false success.
|
|
372
|
+
- A temporarily invalid config during hot-reload keeps the last known good
|
|
373
|
+
default instead of snapping back to `full`.
|
|
374
|
+
|
|
375
|
+
### Changed
|
|
376
|
+
|
|
377
|
+
- `/ponytail status` added as a pure query (never modifies the session).
|
|
378
|
+
- Command hints and error text updated to the new surface
|
|
379
|
+
(`[status|default <mode>|lite|full|ultra|off]`).
|
|
380
|
+
- Invalid config JSON / `defaultMode` / read failures and invalid
|
|
381
|
+
`PONYTAIL_SUBAGENT_MATCHER` now warn exactly once (fail-open preserved,
|
|
382
|
+
missing config file stays silent).
|
|
383
|
+
- Session identity is centralized in one `sessionKey(agent)` helper; mode
|
|
384
|
+
overrides are released on `agent/disposed`, so long-running hosts do not
|
|
385
|
+
accumulate stale per-session entries.
|
|
386
|
+
|
|
387
|
+
### Tests
|
|
388
|
+
|
|
389
|
+
- 47 unit/integration tests (was 24): command semantics (bare `/ponytail`
|
|
390
|
+
restore paths, `status`, `default` saved-vs-effective, write failure),
|
|
391
|
+
priority (env > config > full, invalid env falls back to config),
|
|
392
|
+
session isolation and disposal cleanup, CJK/ASCII deactivation punctuation,
|
|
393
|
+
config file edge cases (BOM, empty, invalid JSON, array root, unknown-field
|
|
394
|
+
preservation, atomic write), hot-reload keep-last-good, and a headless
|
|
395
|
+
(no command plane) mount.
|
|
396
|
+
|
|
397
|
+
## [0.1.2] - 2026-08-23
|
|
398
|
+
|
|
399
|
+
### Changed
|
|
400
|
+
|
|
401
|
+
- Self-contained bundle: `dsh-llm` / `dsh-skill` are inlined, so the runtime
|
|
402
|
+
only depends on the `@deepseek-ai/cordis` peer — installable from GitHub,
|
|
403
|
+
tarball, or npm without a dsh source tree.
|
|
404
|
+
- npm scope renamed to `@mengyuly/dsh-ponytail` (matches the npm account).
|
|
405
|
+
|
|
406
|
+
### Tests
|
|
407
|
+
|
|
408
|
+
- CI smoke verifies the bundle leaves no dsh core external and loads with only
|
|
409
|
+
cordis installed.
|
|
410
|
+
|
|
411
|
+
## [0.1.0] - 2026-08-23
|
|
412
|
+
|
|
413
|
+
### Added
|
|
414
|
+
|
|
415
|
+
- Initial release: always-on lazy-senior-developer ruleset, lite/full/ultra/off
|
|
416
|
+
intensities, six skills and slash commands, deactivation phrases,
|
|
417
|
+
`PONYTAIL_DEFAULT_MODE` / config-file defaults, subagent matcher.
|