@wenaixi/dsh-ponytail 5.1.0 → 5.2.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 +130 -241
- package/README.md +99 -104
- package/lib/client.js +58 -16
- package/lib/ponytail-config.d.ts +11 -2
- package/lib/ponytail-config.d.ts.map +1 -1
- package/lib/ponytail-config.js +4 -2
- package/lib/ponytail-config.js.map +1 -1
- package/lib/ponytail-instructions.d.ts.map +1 -1
- package/lib/ponytail-instructions.js +31 -31
- package/lib/ponytail-instructions.js.map +1 -1
- package/lib/ponytail-priority.d.ts +2 -2
- package/lib/ponytail-priority.js +2 -2
- package/lib/ponytail-remote.d.ts +19 -10
- package/lib/ponytail-remote.d.ts.map +1 -1
- package/lib/ponytail-remote.js +55 -52
- package/lib/ponytail-remote.js.map +1 -1
- package/lib/ponytail-skills.d.ts +10 -0
- package/lib/ponytail-skills.d.ts.map +1 -1
- package/lib/ponytail-skills.js +23 -5
- package/lib/ponytail-skills.js.map +1 -1
- package/lib/ponytail.d.ts +4 -0
- package/lib/ponytail.d.ts.map +1 -1
- package/lib/ponytail.js +37 -12
- package/lib/ponytail.js.map +1 -1
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +1 -1
- package/skills/descriptions.en.json +8 -0
- package/skills/descriptions.zh.json +8 -0
- package/skills/ponytail/SKILL.md +89 -46
- package/skills/ponytail-audit/SKILL.md +27 -17
- package/skills/ponytail-debt/SKILL.md +27 -14
- package/skills/ponytail-gain/SKILL.md +32 -19
- package/skills/ponytail-help/SKILL.md +53 -32
- package/skills/ponytail-review/SKILL.md +36 -24
package/CHANGELOG.md
CHANGED
|
@@ -1,360 +1,249 @@
|
|
|
1
|
-
|
|
1
|
+
## [5.2.0] - 2026-10-06
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
> 当前本地版本:`5.1.0`。上游参考:`DietrichGebert/ponytail 4.10.3`(2026-10-04 核验)。历史 `-dsh.N` 记录仅用于追溯,不再作为现行版本规则。
|
|
3
|
+
### Added
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
- 技能描述语言开关 `skillDescriptionLang`(默认中文),面板在「原生技能开关」段内切换。两套描述真源为 `skills/descriptions.{zh,en}.json`,经 remote 快照下发,切换后模型目录与界面同时生效;`loader/volatile-update` 命中该字段即触发技能目录失效,否则模型侧读旧语言。
|
|
6
|
+
- 版本对照的唯一落点改到 `CLAUDE.md`(ADR-0010)。README 不再写版本号。
|
|
8
7
|
|
|
9
8
|
### Changed
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
|
|
10
|
+
- 六个技能正文与 hook 注入文本回归上游 DietrichGebert/ponytail v4.10.3 英文原文(按 tag 逐文件取回),模型读到的指令不再与上游分叉。两处对 DSH 不适用的上游内容就地改写:`ponytail-gain` 的数据来源指向本仓 `assets/*.svg`,`ponytail-help` 的配置与更新章节改为 profile 补丁与 `dsh plugin`。
|
|
11
|
+
- 技能描述从构建期内嵌常量改为 remote 快照下发:语言由配置决定,构建期常量会停在旧语言。描述长度断言对象随之改为描述文件(官方 `catalogDescriptionMaxLength` 默认 500,SKILL.md frontmatter 是上游原文可超长)。
|
|
12
|
+
- 修复 `scripts/version.mjs` 的入口守卫:Windows 下 `new URL(process.argv[1], 'file:')` 不归一反斜杠,改 `pathToFileURL` 后 `pnpm version:set` 才真正写盘。
|
|
13
13
|
|
|
14
14
|
### Fixed
|
|
15
|
-
- 客户端 locale 字典改为 DSH 要求的扁平键,避免界面显示 `panel.title`、`priority.title` 等裸 key。
|
|
16
|
-
- 客户端产物继续禁止 `import.meta` 和 `process.`,避免浏览器导入失败。
|
|
17
15
|
|
|
16
|
+
- 等级控件只显示补丁里真实配置的档。未配置时选中末尾追加的「未设置」段并给出提示;此前回退到运行时推导档,把内置兜底显示成用户已选。
|
|
17
|
+
- README 记录补丁条目必须写在顶层。插件包自带的 `cordis.patch.yml` 用 `insert` 列表,宿主不为它管理 `config` 块,面板写入永远被拒。
|
|
18
|
+
- `verify.mjs` 的 `t()` 键收集正则在 `[a-z]+` 上漏掉全部含大写的键,缺键时界面会静默显示键名。
|
|
19
|
+
- 技能卡与 README 同步三级链与 profile 落点;新增门禁挡住退役表述。
|
|
18
20
|
## [5.1.0] - 2026-10-05
|
|
19
21
|
|
|
20
22
|
### Breaking
|
|
21
23
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
+
- 配置与 flag 的落点从全局数据根改为 profile 目录(`profiles/<name>/ponytail/`)。升级用户当前档位重置为 `full`。
|
|
25
|
+
- 优先级链从四级降为三级 `env > patch > fallback`,`config.json` 层退役。
|
|
24
26
|
|
|
25
27
|
### Added
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
28
|
+
|
|
29
|
+
- 配置与 flag 的 profile 维度,目录来自宿主 `profileContext.dir`。同机多实例不再共享 `$DSH_HOME/ponytail`。
|
|
30
|
+
- `src/ponytail-settings.ts`:settings 通道写入 profile 补丁并带 revision 冲突保护;无 settings 服务时回退读写 profile 内 `config.json`;旧全局 `config.json` 一次性导入后改名。
|
|
31
|
+
- `src/ponytail-remote.ts`:`TypertRemoteService` 子类,只读端点 `snapshot()`(当前等级 + 诊断链)。
|
|
32
|
+
- 客户端 Remote 贡献声明。此前只读命名空间却从未挂载,网关不会按需开通它,面板因此永久显示「诊断信息不可用」;顺手删掉 40 次轮询。
|
|
29
33
|
|
|
30
34
|
### Changed
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
- `patchMode` 改为实时读取 volatile
|
|
34
|
-
-
|
|
35
|
-
- 技能启用态的失效触发点从自制 HTTP 端点直调改为监听宿主 `loader/volatile-update`。
|
|
35
|
+
|
|
36
|
+
- 配置卡改用官方插件配置组合:两个可持久化字段声明为 `.volatile()`,客户端经 `ctx.configForms.get('ponytail')` 读写。
|
|
37
|
+
- `patchMode` 改为实时读取 volatile 引用,不再缓存启动快照。
|
|
38
|
+
- 技能启用态的失效触发点改为监听宿主 `loader/volatile-update`。
|
|
36
39
|
|
|
37
40
|
### Removed
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
+
|
|
42
|
+
- `src/ponytail-http.ts` 与自制端点、`webServer` 注入。
|
|
43
|
+
- `apply()` 里对 `settings.register()` 的调用:dsh-settings 没有这个方法,属于从未生效的死代码。
|
|
44
|
+
- 平台位置(`%APPDATA%` / `XDG_CONFIG_HOME` / `~/.config`)兼容读取。
|
|
41
45
|
|
|
42
46
|
### Fixed
|
|
43
|
-
- 技能禁用状态此前只存在 `config.json` 且只能由 HTTP 端点修改;迁移后 UI 改开关后模型侧目录不收敛(写入链不经过本插件任何函数)。现由 loader 的 volatile 提交事件驱动失效。
|
|
44
|
-
- 客户端配置卡此前自建 `fetch` 状态机(含空配置兜底、加载态、错误态),现完全走官方表单控制器,不发起任何 HTTP 请求。
|
|
45
|
-
- 等级选择器的锁定判定原为「除 patch 与 config 外、只要有层级命中就锁」,而兜底层在没有 env 与 patch 时恒命中,于是按钮永久禁用、提示永远显示「当前有更高优先级的配置在生效」——但兜底不是更高优先级的配置,改补丁立刻生效,文案在说谎。改为只认 env 命中。
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
- 技能禁用开关此前改完模型侧目录不收敛。现由 loader 的 volatile 提交事件驱动失效。
|
|
49
|
+
- 等级选择器把兜底命中当成更高优先级的配置,按钮永久禁用且提示在说谎。改为只认 env 命中。
|
|
48
50
|
|
|
49
|
-
|
|
50
|
-
- 修复默认档持久化后 HTTP 诊断仍读取旧 patch/env 快照的问题:配置端点改用实时 getter,GET 与 POST 共享当前优先级事实。
|
|
51
|
-
- 修复 systemPrompt 生产接线绕过 `renderPromptSection` 的问题,保留技能禁用配置热收敛。
|
|
51
|
+
## [5.0.0] - 2026-10-04
|
|
52
52
|
|
|
53
53
|
### Changed
|
|
54
|
-
- 新增两项生产接线回归测试,覆盖动态 HTTP handler 与外部 flag 变化;行为测试达到 64 项。
|
|
55
|
-
- 延后统一多个 SKILL.md frontmatter 解析器:provider、HTTP 与构建脚本的输入接受范围和 fallback 语义不同,暂不引入共享 seam。
|
|
56
54
|
|
|
57
|
-
|
|
58
|
-
-
|
|
55
|
+
- 版本从 `4.10.0-dsh.12` 切换为独立的标准 SemVer,不再生成 `-dsh.N`。
|
|
56
|
+
- README、架构记录与发布流程明确区分本地版本与上游参考版本。
|
|
57
|
+
- CI 不再写死行为测试数量。
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
- 客户端 locale 字典改为 DSH 要求的扁平键,避免界面显示裸 key。
|
|
62
|
+
|
|
63
|
+
## [4.10.0-dsh.12] - 2026-10-04
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
|
|
67
|
+
- 默认档持久化后 HTTP 诊断仍读旧快照:配置端点改用实时 getter。
|
|
68
|
+
- systemPrompt 生产接线绕过 `renderPromptSection`。
|
|
59
69
|
|
|
60
70
|
## [4.10.0-dsh.11] - 2026-10-04
|
|
61
71
|
|
|
62
72
|
### Fixed
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
原样拼接进 `<script src>` 加载,浏览器解析即 SyntaxError,整个客户端 bundle 加载失败
|
|
67
|
-
(配置面板静默消失)。删除死行;`verify.mjs` 新增反向断言:`lib/client.js` 不得含
|
|
68
|
-
`import.meta` / `process.`(先破坏实测再还原)。
|
|
69
|
-
- **默认档命令层分裂(真 bug)**:apply 启动判定与 UI 面板走 `resolvePriority`(含 patch 层),
|
|
70
|
-
而命令调度器未注入 `getDefaultMode` 时落到 `getDefaultMode()`(无 patch 层)。当
|
|
71
|
-
cordis.patch.yml 显式声明 `defaultMode` 且 config.json 缺失/不同时,`/ponytail foobar`
|
|
72
|
-
(上游 else 兜底切默认档)把等级从 patch 档切到 config 档,裸 `/ponytail` 报告档也错误。
|
|
73
|
-
修复:dispatcher 注入实时 `resolvePriority` 闭包(同 apply/UI 同源同刻),
|
|
74
|
-
三条消费路径统一真源。
|
|
73
|
+
|
|
74
|
+
- **客户端产物内嵌宿侧死代码 `import.meta`**(4.10.0-dsh.10 引入):零引用却让浏览器解析即 SyntaxError,整个客户端 bundle 加载失败、面板静默消失。删除死行,`verify.mjs` 加反向断言。
|
|
75
|
+
- **默认档命令层分裂**:apply 与 UI 面板走 `resolvePriority`(含 patch 层),命令调度器未注入时落到无 patch 层的 `getDefaultMode()`。patch 与 config 不同时,`/ponytail foobar` 把等级切错。三条消费路径统一真源。
|
|
75
76
|
|
|
76
77
|
### Changed
|
|
77
|
-
- **config.json 读侧收敛单一解析出口(C2)**:新增私有 `parseConfigObject(raw)` 归一解析
|
|
78
|
-
唯一真源,`readFullConfig` 退化为薄包装;`getDefaultMode`(无 patch 层、无 trim)与
|
|
79
|
-
`writeFullConfig`(保留未知键)语义不动。
|
|
80
|
-
- **HTTP 快照合并单求值(C3)**:一次 GET/POST 快照内 `resolvePriority` 双调 + 双读盘
|
|
81
|
-
(最坏 4 次 readFileSync)合并为读一次 configMode → 单次求值,`defaultMode ===
|
|
82
|
-
priority.effective` 由结构保证并以行为测试锁定。
|
|
83
|
-
- **技能禁用补文件优先收敛(C1)**:`PonytailState` 新增 `reloadDisabledSkills()`
|
|
84
|
-
(与等级侧 `syncFromFile` 同构,外部手改 config.json 后注入时收敛);「禁用 ponytail →
|
|
85
|
-
关闭等级」规则提为 `isMainSkillDisabled()` 纯函数,HTTP POST 两分支共用同一守卫。
|
|
86
78
|
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
|
|
90
|
-
verify 产物清单同步;`.gitignore` 排除 `.local/`(桌面版调试备份不入库)。
|
|
91
|
-
- **ADR-0007**:记录命令层默认档并入 resolvePriority 真源(修订 ADR-0006 决策 1)、
|
|
92
|
-
读侧收敛、快照合并、flag 内联、C5 维持否决(宿主 collectCache 已兜底 list 侧)。
|
|
79
|
+
- `config.json` 读侧收敛单一解析出口。
|
|
80
|
+
- HTTP 快照合并为单次求值。
|
|
81
|
+
- 技能禁用补文件优先收敛与纯函数判定。
|
|
93
82
|
|
|
94
|
-
###
|
|
95
|
-
- 命令层兜底切档语义变更:从「独立于 patch 层」变为「并入 patch 层」——这是修复而非回归
|
|
96
|
-
(分裂本身就是 bug);无数据丢失,无配置格式变化。
|
|
83
|
+
### Removed
|
|
97
84
|
|
|
85
|
+
- `src/ponytail-runtime.ts`(46 行薄壳)内联进 `ponytail-state.ts`。
|
|
98
86
|
|
|
99
87
|
## [4.10.0-dsh.10] - 2026-10-04
|
|
100
88
|
|
|
101
89
|
### Added
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
90
|
+
|
|
91
|
+
- 客户端面板接入官方 `ctx.locale`,36 键双语字典,语言切换即时刷新。
|
|
92
|
+
- HTTP 配置端点剥离为独立深工厂,依赖全注入不碰 `ctx`,补上此前 0 覆盖的单测。
|
|
93
|
+
- 技能元数据单一真源:`SKILL.md` frontmatter 为唯一真源,删除两处已漂移的硬编码。
|
|
94
|
+
- 行为测试 44 → 59 项。
|
|
107
95
|
|
|
108
96
|
### Changed
|
|
109
|
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
97
|
+
|
|
98
|
+
- 优先级统一为 `resolvePriority` 唯一真源。**行为变更**:patch 的大小写变体与非法值从「生效」改为「忽略」。
|
|
99
|
+
- 配置写盘改为字段级 merge,保留用户手写的未知字段;非法 `defaultMode` 拒绝写盘。
|
|
100
|
+
- 修复 `providerInstance` 死变量:UI 改禁用技能后模型侧目录此前不刷新。
|
|
112
101
|
|
|
113
102
|
### Removed
|
|
114
|
-
- **双孤儿函数**:`ponytail-config.ts` 的 `isDeactivationCommand`(`commands` 版唯一实现保留)与 `normalizeConfigMode`(全仓零调用方),以及失效类型 `VALID_MODES` / `ValidMode`。
|
|
115
|
-
- **HTTP 端点从 `apply()` 剥离**:`src/ponytail.ts` 410 行 → 约 330 行,回归纯生命周期编排。
|
|
116
103
|
|
|
117
|
-
|
|
118
|
-
- 行为变更:曾有非法/大小写 patch 显式值的现有配置在升级后按新语义忽略(落合法档),属有意修复,非数据丢失。
|
|
104
|
+
- 两个孤儿函数与失效类型;HTTP 端点从 `apply()` 剥离。
|
|
119
105
|
|
|
120
106
|
## [4.10.0-dsh.9] - 2026-10-04
|
|
121
107
|
|
|
122
108
|
### Removed
|
|
123
|
-
|
|
124
|
-
-
|
|
109
|
+
|
|
110
|
+
- 移除四条多余 UI 落点(设置窗口 Tab、侧边栏按钮、全局浮层、插件条目)。实测确认面板从 0.6 起就正常显示在插件卡片详情,多余落点让同一面板在三处重复出现。
|
|
111
|
+
- 卡片配置只以包名注册一个 key,bundle id 那条永不会命中。
|
|
125
112
|
|
|
126
113
|
### Changed
|
|
127
|
-
- **门禁改为反向断言**:由「断言五条落点齐全」改为「只允许 `plugins.bundle.config` 一条,出现任何其他 `ctx.slots.inject` 即 FAIL」,锁死 UI 落点不被再次扩散。断言总数 34 → 33。
|
|
128
114
|
|
|
129
|
-
|
|
130
|
-
- **`settings.section` 与宿侧 settings 注册的关系澄清**:宿侧 `settings.register("ponytail", Config)` 保留——它让宿主为插件页卡片 serve「实时 Config 表单」,是卡片面板的数据来源;被移除的只是客户端那条多余的设置窗口 Tab。
|
|
115
|
+
- 门禁由「断言落点齐全」改为「只允许一条,出现任何其他落点即失败」。
|
|
131
116
|
|
|
132
117
|
## [4.10.0-dsh.8] - 2026-10-04
|
|
133
118
|
|
|
134
119
|
### Added
|
|
135
|
-
|
|
136
|
-
-
|
|
120
|
+
|
|
121
|
+
- 两条常驻 UI 落点(侧边栏按钮、全局浮层)。上游参照实现从不把可见性赌在单一页面上。
|
|
137
122
|
|
|
138
123
|
### Changed
|
|
139
|
-
|
|
124
|
+
|
|
125
|
+
- UI 落点由三条扩为五条,门禁同步扩充。
|
|
140
126
|
|
|
141
127
|
## [4.10.0-dsh.7] - 2026-10-04
|
|
142
128
|
|
|
143
129
|
### Added
|
|
144
|
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
130
|
+
|
|
131
|
+
- 设置窗口一级 Tab 作为保底入口,不经插件管理页。
|
|
132
|
+
- 卡片配置双 key 保险:包名与 bundle id 同时注册,只会渲染一份。
|
|
147
133
|
|
|
148
134
|
### Fixed
|
|
149
|
-
- **桌面版设置界面仍无面板**(0.6 修复不彻底):0.6 只补了 `plugins.item`,而该插槽与 `plugins.bundle.config` 同属插件管理页链路——两者都由 plugin-manager 注册到 `main` 时经 `children` 表声明;`slots.inject(key, cb)` 在 spec 缺失时**静默 return 且不报错**(`dsh-client-ui-renderer` 的 `reconcile()`),故插件管理页链路一旦不通,前两条落点会同时失效且无任何错误信号。本次补上不依赖 plugin-manager 的 `settings.section` 作为兜底。
|
|
150
135
|
|
|
151
|
-
|
|
152
|
-
- **UI 落点策略由「双通道」改为「三通道冗余」**:设置窗口 Tab、插件页条目、卡片详情面板各占一条,任一条链路在特定宿主上不可用都不会导致插件完全无 UI。
|
|
136
|
+
- 桌面版设置界面仍无面板。插槽 spec 缺失时回调永不执行且零报错,插件页链路不通时前两条落点同时失效且无任何错误信号。补上不依赖插件管理页的入口。
|
|
153
137
|
|
|
154
138
|
## [4.10.0-dsh.6] - 2026-10-03
|
|
155
139
|
|
|
156
140
|
### Added
|
|
157
|
-
|
|
158
|
-
-
|
|
159
|
-
-
|
|
141
|
+
|
|
142
|
+
- 官方插件页通道 `plugins.item`,组件按视图分态。
|
|
143
|
+
- 宿侧设置命名空间注册,插件页据此 serve 配置表单。
|
|
144
|
+
- UI 落点静态门禁(破坏实测过)。
|
|
160
145
|
|
|
161
146
|
### Fixed
|
|
162
|
-
- **桌面版设置界面无任何 ponytail UI**(根因修复,非渲染问题):此前客户端只挂 `plugins.bundle.config`(已安装包卡片详情),而该区域仅在宿主为该包 serve 配置表单时渲染;宿侧从未注册 settings 命名空间,整块面板因此静默消失。经与 dsh-context(宿侧 `settings.register(NS, Schema)`)对照取证定位。
|
|
163
|
-
- **设置表单与 config.json 的真源对齐**:宿侧注册后于启动时把表单写入的默认档对齐回 `config.json`,保持 ADR-0005 单一真源,避免「界面上改了、运行却不生效」的静默失效。`ponytail:` 注释已标注天花板:仅启动时对齐一次,无实时订阅。
|
|
164
|
-
- **`ctx.inject` 缺失时的降级守卫**:行为测试的精简 ctx 未提供 `ctx.inject`,注册段抛 `TypeError`。守卫与既有 `if ((ctx as any).webServer)` 同款,`ctx.inject` 缺失时整段跳过,不阻断插件其余能力。
|
|
165
147
|
|
|
166
|
-
|
|
167
|
-
-
|
|
148
|
+
- **桌面版设置界面无任何 UI**(根因修复):此前只挂插件卡片详情,而宿侧从未注册命名空间,整块面板静默消失。
|
|
149
|
+
- 设置表单与 `config.json` 真源对齐,避免「界面上改了、运行却不生效」。
|
|
150
|
+
- `ctx.inject` 缺失时的降级守卫。
|
|
168
151
|
|
|
169
152
|
## [4.10.0-dsh.5] - 2026-10-03
|
|
170
153
|
|
|
171
154
|
### Added
|
|
172
|
-
|
|
173
|
-
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
- **配置与 flag 统一归入 DSH 用户数据根(ADR-0005)**:新增 `resolveDshHome()` 与 `getLegacyConfigDir()` / `getLegacyConfigPath()` / `readConfigFileText()`,`config.json` 与 `.ponytail-active` 统一落位于 `$DSH_HOME/ponytail`(默认 `~/.dsh/ponytail`),与 DSH 官方 `@deepseek-ai/dsh-home-paths` 的「所有用户数据收敛于单一根目录」契约一致。
|
|
179
|
-
- **跨平台路径静态门禁**:`scripts/verify.mjs` 新增 `no platform-specific path literals` 断言,扫描 `src/` 与客户端构建期副本,禁止出现 `%APPDATA%` / `XDG_CONFIG_HOME` / `process.platform` 等平台特定字面量(仅豁免旧位置兼容读取分支)。
|
|
180
|
-
- **行为测试扩充 33 → 36 项全绿**:新增 DSH 数据根优先级与 `~` 展开断言、配置目录落点断言、旧位置兼容读取断言。
|
|
181
|
-
- **架构决策记录 `docs/adr/0005-config-under-dsh-home.md`**:记录迁移决策、`dsh-home-paths` 静态 import 会崩的实测证据、动态预热导致行为漂移的否决理由与旧位置兼容策略。
|
|
155
|
+
|
|
156
|
+
- 运行等级四级优先级诊断:新增 `src/ponytail-priority.ts` 纯函数模块,产出诊断链,解决「界面点了等级却没反应」这个长期无诊断手段的痛点。
|
|
157
|
+
- 客户端改用 DSH 原生组件族,不再手写内联视觉。
|
|
158
|
+
- 删除 `src/client.ts`(与构建脚本重复产出同一产物,必然漂移)。
|
|
159
|
+
- 配置与 flag 统一归入 DSH 用户数据根(ADR-0005)。
|
|
160
|
+
- 跨平台路径静态门禁、行为测试 33 → 36 项、ADR-0005。
|
|
182
161
|
|
|
183
162
|
### Changed
|
|
184
|
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
- **Web GUI 面板文案中性化**:客户端构建期模板中写死的 `%APPDATA%\\ponytail\\config.json` 改为「DSH 数据目录下的 ponytail/config.json」,跨平台均准确。
|
|
188
|
-
- **文档同步**:README 三处路径表述、`skills/ponytail-help/SKILL.md` 配置文件说明改为 `$DSH_HOME/ponytail`;`docs/adr/0004` 追加修订注记指向 ADR-0005。
|
|
163
|
+
|
|
164
|
+
- 跨平台一致性修复(根因):路径一律由 DSH 数据根解析,删除三条平台分支。
|
|
165
|
+
- CI 与文档体系校正。
|
|
189
166
|
|
|
190
167
|
### Migration
|
|
191
|
-
|
|
192
|
-
-
|
|
168
|
+
|
|
169
|
+
- 旧位置的 `config.json` 一次性兼容读取,写入只落新位置。
|
|
170
|
+
- 升级后当前等级按默认档重写,与 ADR-0004 迁移同性质;旧 `.ponytail-active` 不做兼容读取。
|
|
193
171
|
|
|
194
172
|
## [4.10.0-dsh.4] - 2026-10-02
|
|
195
173
|
|
|
196
174
|
### Added
|
|
197
|
-
- **状态存储切面(PonytailStorage)**:为 `src/ponytail-state.ts` 的 `createPonytailState` 引入可选 `storage` 契约,生产默认使用 `ponytail-runtime.ts` 的 DSH 配置目录磁盘持久化,单测中可注入纯内存适配器,由真实磁盘与内存存储两个适配器共同证明切面价值(Two adapters justify the seam),消除测试对全局 `XDG_CONFIG_HOME` 环境变量的强依赖。
|
|
198
|
-
- **提示词模块高阶深出口(renderPromptSection)**:`src/ponytail-instructions.ts` 暴露单一高阶出口 `renderPromptSection(skillDir, state): string`,封装状态外部同步(`syncFromFile`)、空值与 `off` 关闭态守卫、按需直读模板(遵循 ADR-0003 无状态按需直读原则)与保底降级全链路;`src/ponytail.ts` 的 `systemPrompt.section` 回调精简收敛为单行。
|
|
199
|
-
- **行为测试扩充 28 → 30 项全绿**:新增针对 `PonytailStorage` 纯内存存储适配器隔离运行与 `renderPromptSection` 全链路状态装配的两项端到端单测。
|
|
200
|
-
- **DSH 真实实例全功能链路深度实测**:在独立的 `ponytail-verify` 验证 profile 下成功完成实机实测,证明 `/ponytail` 状态汇报、`/ponytail default lite` 物理写盘持久化、跨会话启动生命周期对齐与 flag 管理全部 100% 吻合上游契约。
|
|
201
175
|
|
|
202
|
-
|
|
203
|
-
-
|
|
176
|
+
- 状态存储切面:磁盘与内存两个适配器,共同证明该接缝的价值,消除测试对环境变量的强依赖。
|
|
177
|
+
- 提示词模块单一出口 `renderPromptSection`。
|
|
178
|
+
- 行为测试 28 → 30 项,隔离 profile 实机全链路实测。
|
|
204
179
|
|
|
205
180
|
## [4.10.0-dsh.3] - 2026-10-02
|
|
206
181
|
|
|
207
182
|
### Changed
|
|
208
|
-
|
|
209
|
-
-
|
|
183
|
+
|
|
184
|
+
- 收窄为 DSH 单一宿主:删除 Copilot / Codex / Qoder 三路平台探针与外部宿主分支,flag 固定落在 DSH 配置目录(ADR-0004)。
|
|
210
185
|
|
|
211
186
|
### Fixed
|
|
212
|
-
|
|
213
|
-
-
|
|
187
|
+
|
|
188
|
+
- `config.json` 默认档被 Cordis 缺省填充 shadow:schema 去掉 `.default('full')` 后缺省才走 `getDefaultMode()`,否则 `/ponytail default <mode>` 持久化的值在下一会话被静默覆盖回 full。
|
|
214
189
|
|
|
215
190
|
## [4.10.0-dsh.2] - 2026-10-02
|
|
216
191
|
|
|
217
192
|
### Added
|
|
218
|
-
|
|
219
|
-
-
|
|
220
|
-
- **npm 标准测试脚本**:`package.json` 补全缺失的 `"test": "node scripts/behavior.test.mjs"` 标准脚本,并在 `prepublishOnly` 挂载 `npm test` 发布前守卫。
|
|
221
|
-
- **CI/CD 双轨自动化流水线**:`.github/workflows/ci.yml` 扩展 `tags: ["v*"]` 触发器,确保代码 push 与 tag 推送均触发全套测试四件套;`.github/workflows/publish.yml` 补齐 `pnpm typecheck` 并对齐门禁步骤,实现 tag 推送时全套测试门禁 100% 先验通过才触发额外发版。
|
|
222
|
-
- **高杠杆行为测试套件扩充**:`scripts/behavior.test.mjs` 新增 14 项行为测试(覆盖多 block 文本清洗提取、多 message 展开合并、切档与失活状态突变、裸指令防误切安全守卫、嵌套 block 消息指令识别、示例行中文标点裁剪、无 SKILL.md 失败面收敛等)。
|
|
193
|
+
|
|
194
|
+
- 状态模块对偶落盘抽象、命令调度器纯内存沙箱单测、npm 标准 `test` 脚本、CI 双轨流水线、行为测试扩充至 26 项。
|
|
223
195
|
|
|
224
196
|
### Changed
|
|
225
|
-
|
|
226
|
-
-
|
|
227
|
-
-
|
|
228
|
-
- **发布载荷瘦身**:删除与 logo.png MD5 全同的 `assets/logo-dark.png`(676KB×2 → 单源),README dark srcset 收为单一 `<img>`;零引用上游市场物料移出 `package.json` 的 `files` 白名单,发布包体积从约 1.68MB 骤降至约 0.35MB。
|
|
229
|
-
- **架构决策自决与驳回**:正式驳回 Candidate 2(合并 state 与 runtime:破坏上游 1:1 逐行移植锚点与产物守卫,净收益为负)与 Candidate 3(合并 skill 存储与 instructions 渲染:同步高频渲染与异步 Cordis 服务范式正交,强行捏合制造上帝类,违背 YAGNI)。
|
|
197
|
+
|
|
198
|
+
- 命令调度深模块化;插件入口骨架瘦身。
|
|
199
|
+
- 发布载荷瘦身:删除与 logo 完全重复的 dark 版,发布包体积降到约五分之一。
|
|
230
200
|
|
|
231
201
|
### Fixed
|
|
232
|
-
- **配置写入契约闭环**:`src/ponytail-config.ts` 的 `writeDefaultMode` 底层写操作补充顶层 `try/catch` 守卫,遇到磁盘写保护、EACCES 权限受限或 Windows EBUSY 文件锁等底层 I/O 异常时优雅回退 `null`,彻底闭合 `RuntimeMode | null` 类型契约,防止异常击穿上层。
|
|
233
|
-
- **静态门禁产物断言补齐**:`scripts/verify.mjs` 产物检查清单补全遗漏的 `lib/ponytail-commands.js` 与 `lib/ponytail-state.js`,实现全量 7 个编译模块 100% 静态断言覆盖。
|
|
234
|
-
- **技能解析极端格式容错**:`src/ponytail-skills.ts` 的 Frontmatter 解析状态机补充 UTF-8 BOM(`\uFEFF`)清洗与分隔行 `trimEnd()` 容错,彻底兼容 Windows 编辑器特殊换行与尾部空白。
|
|
235
|
-
- **AbortSignal 迅捷响应契约**:`src/ponytail-skills.ts` 的 `list()` 遍历循环首行补位 `options.signal?.throwIfAborted()`,并在 `parseSkillFile` 优先判定 `signal?.aborted`,严格履行 WHATWG / DSH 规范的 `settle promptly` 契约。
|
|
236
|
-
- **技能路径安全解析与调试支持**:`src/ponytail.ts` 的 `resolveDefaultSkillDir` 改用标准 ESM 原生 `new URL('../skills', import.meta.url)`;技能扫描放宽 `!entry.isDirectory() && !entry.isSymbolicLink()`,支持软链接技能目录本地调试;`get()` 增强对 `candidate.locator` 的类型保护与 `dirname(targetPath)` 兜底。
|
|
237
|
-
- **示例行裁剪契约找回**:`filterSkillBodyForMode` 示例行正则兼容中文引号/冒号(原上游 ASCII 引号形态在中文化正文下永久失配,lite/full/ultra 三档示例区此前完全相同)。
|
|
238
|
-
- **list() 失败面收敛**:删除 `stat` 预检,缺失 SKILL.md 与解析失败汇入同一条 warn+跳过路径(`readFile` 本身即可区分)。
|
|
239
|
-
- **监听防御对称**:`agent/pre-step` 防御 catch 补 `warn`,与 `session/event` 失败可见性对齐。
|
|
240
202
|
|
|
241
|
-
|
|
242
|
-
-
|
|
203
|
+
- 配置写入补 `try/catch` 守卫,防止磁盘写保护与文件锁异常击穿上层。
|
|
204
|
+
- 技能解析补 BOM 与分隔行容错;frontmatter 示例行正则兼容中文引号。
|
|
205
|
+
- `AbortSignal` 已 abort 时立即抛 `AbortError`。
|
|
243
206
|
|
|
244
207
|
## [4.10.0-dsh.1] - 2026-10-01
|
|
245
208
|
|
|
246
209
|
### Changed
|
|
247
|
-
- 架构深化(6 候选核实后自决 4 实施 2 否决):
|
|
248
|
-
- 等级状态收敛为深模块 `src/ponytail-state.ts`(`createPonytailState`:`get()/set(mode)/syncFromFile()` 三方法,闭包实例随 HMR 重建);`ponytail.ts` 的 `currentMode` 散落读写(apply 启动、section text 漂移修正、handlePromptText 四处双写、agent/created 镜像)全部收口——`set()` 内存赢原子落盘、`syncFromFile()` 文件赢纠偏(行为与 4.10.0-dsh.0 逐行等价)
|
|
249
|
-
- 指令渲染收敛为深模块 `render(skillDir, mode)`(`src/ponytail-instructions.ts`):`systemPrompt` section 回调只留 off 短路 + 一次调用,review 短路指针 + 裁剪 + 失败回退收进模块内,对齐上游 `getPonytailInstructions(mode)` 单一出口形态(行为无可观察变更)
|
|
250
|
-
- 抽取 SkillProvider 子系统为 `src/ponytail-skills.ts`(frontmatter 解析 + 目录扫描 + `PonytailProvider.list/get`,DSH 专属层);`Config` 接口迁 `src/ponytail-config.ts` 为 `PonytailConfig` 共享类型(entry 侧 `export type Config = PonytailConfig` 别名),消除模块循环依赖;不发明工厂——直接导出同名类,注册保持一行 `new PonytailProvider(ctx, control, { providerName, skillDir })`;`src/ponytail.ts` 由 533 行降至 272 行,只留生命周期与监听器(行为无可观察变更)
|
|
251
|
-
- frontmatter 读取瘦身:`stringField/optionalString/optionalMetadata` 折叠为 `readString/readObject/readMetadata`(调用点零改动,净减行数)
|
|
252
|
-
- `apply` 删不可达死代码 `?? null`(分支守卫已排除 undefined);`?? 'full'` 保留并改为 `DEFAULT_MODE` 常量(DSH 测试路径直接 `apply(ctx)` 真实依赖该兜底)
|
|
253
|
-
- `PONYTAIL_DEFAULT_MODE` env 非法值由静默回退改为 `ctx.logger.warn`(DSH 差分,不改变回退语义,上游仍静默);config 文件非法值保持静默(与上游一致)
|
|
254
|
-
- `scripts/verify.mjs` 静态检查(不注册 tool)由单文件 `src/ponytail.ts` 扩为整个 `src/` 目录扫描(新模块 `ponytail-state.ts` 纳入覆盖)
|
|
255
|
-
|
|
256
|
-
### Added
|
|
257
|
-
- `scripts/behavior.test.mjs` 新增 2 例:`/ponytail default lite` 持久化、`/ponytail default foobar` 非法默认不切换(instruction 解析用例 6 → 8,总数 9 → 11)
|
|
258
210
|
|
|
259
|
-
|
|
260
|
-
- `
|
|
211
|
+
- 架构深化:等级状态收敛为深模块、指令渲染收敛为单一出口、SkillProvider 抽为独立子系统,入口由 533 行降至 272 行。
|
|
212
|
+
- `verify.mjs` 的零 tool 静态检查扩为整个 `src/` 目录。
|
|
261
213
|
|
|
262
214
|
## [4.10.0-dsh.0] - 2026-10-01
|
|
263
215
|
|
|
264
|
-
### Fixed
|
|
265
|
-
- `agent/session-start` 死监听迁移为 `agent/created`:`payload.source` 为 `startup`/`resume` 时对齐 flag 文件(`off` 清空、其余 `setMode(currentMode)`),`clear`/`compact` 不动作——DSH 官方事件模型不存在 `session-start`,原监听永不被触发
|
|
266
|
-
- 对齐官方 defensive-patterns:`agent/created` 与 `session/event` 监听整体 `try/catch`,坏订阅者不再断链
|
|
267
|
-
- `SkillProvider.list()`/`get()` 尊重 `options.signal`:已 abort 时立即抛 `AbortError` 快速 settle(放弃对 fs 调用的 signal 透传)
|
|
268
|
-
- `SkillProvider.list()` ENOENT/ENOTDIR 由记 `warn` 返回 `[]` 改为显式 `{ candidates: [], complete: false }`(显式「发现未完成、不可缓存」)与警告并行
|
|
269
|
-
- `scripts/verify.mjs` description 长度断言改用 `yaml.parse` 按 YAML 折叠块真实语义计算并输出真实长度;实测六个技能均 ≤500(262/162/165/161/104/165),无需压缩
|
|
270
|
-
|
|
271
|
-
### Changed
|
|
272
|
-
- 版本重置:与上游 v4.10.0 对齐由 `4.9.0-dsh.5` 重置为 `4.10.0-dsh.0`(`pnpm run bump:dsh -- 4.10.0`)
|
|
273
|
-
- peer/devDeps 对齐 DSH 0.2.0-rc.2 运行时:`@deepseek-ai/cordis ^4.0.4`、`@deepseek-ai/dsh-skill >=0.1.0-rc.1 <0.2.0-0 || >=0.2.0-rc.1 <0.3.0-0`、`@deepseek-ai/schemastery ^3.18.4`
|
|
274
|
-
- 指令解析核心由 `handlePromptText` 抽取为纯函数 `parsePonytailCommand`(新增 `src/ponytail-commands.ts`),行为等价,可脱离插件单测;`@`/`$` 前缀与 `/ponytail:ponytail`/`/ponytail:ponytail-review` 前缀形式对齐上游 4.10.0 mode-tracker
|
|
275
|
-
- **未知参数语义对齐上游 else 兜底**:`/ponytail <unknown>` 由 `warn` 不切换(4.9.0-dsh.5 引入的 DSH 差分,上游无此分支)改回静默切到默认等级——与上游 mode-tracker 逐分支一致(含默认 `off` 时落入关闭分支)
|
|
276
|
-
|
|
277
216
|
### Added
|
|
278
|
-
- `scripts/behavior.test.mjs` 最小行为测试(node 内置 test runner):指令解析 6 例 + 技能裁剪 2 例 + abort 立即 settle 1 例,9/9 通过
|
|
279
|
-
- `scripts/verify.mjs` 新增六个 SKILL.md `description` ≤500 静态断言(官方 `catalogDescriptionMaxLength` 默认截断线,防回归)
|
|
280
|
-
|
|
281
|
-
### Cleaned
|
|
282
|
-
- 删除无消费方的 `Config.hideStatus`/`Config.quietStartup` 配置项与 `getHideStatus`/`getQuietStartup`/`getPonytailInstructions`/`writeHookOutput`/`getStatePath` 死代码;删除 `normalizePersistedMode` 孤儿导出(README 与 CHANGELOG 无对应表述,无需同步清理)
|
|
283
217
|
|
|
284
|
-
|
|
218
|
+
- 完整移植上游 v4.9.0:6 个 Skill、常驻梯子注入(`order: 50`,随档位动态裁剪)、六个 hook 行为的中文复刻。
|
|
219
|
+
- `CLAUDE.md` 记忆库、`LICENSE`、`README`、`assets`、`AGENTS.md`。
|
|
285
220
|
|
|
286
221
|
### Fixed
|
|
287
|
-
- `isDeactivationCommand` 去除正则重复 `\s`,保持 spec `.!?。!?` + 空白
|
|
288
|
-
- `ponytail-runtime` 平台识别由模块级常量改为函数 `isCopilot()/isCodex()/isQoder()`,修复同进程 env 变更后路径漂移
|
|
289
|
-
- `/ponytail <unknown>` 未知参数由静默切默认改为 `warn` 不切换
|
|
290
|
-
- `extractText` 双路径提取收敛为 `extractTextFromContent` 复用,消除 `agent/pre-step` 与 `session/event` 重复分支
|
|
291
|
-
- `scripts/verify.mjs` 不注册 tool 检查由 `|| / &&` 误优先级改为单正则 `\btools\s*\.\s*register\b|\bdefineTool\b`
|
|
292
|
-
- `publish.yml` 幂等:`VERSION` 检查提到 `if/else` 前共享,`workflow_dispatch` 计入 `if`,`Create Release` 受 `skipped` 守卫
|
|
293
|
-
|
|
294
|
-
### Changed
|
|
295
|
-
- `CLAUDE.md` Flag 描述由“三分支”更正为“四路”;验证命令 `--filter` 补 `scope`
|
|
296
|
-
|
|
297
|
-
## [4.9.0-dsh.4] - 2026-08-22
|
|
298
222
|
|
|
299
|
-
|
|
300
|
-
-
|
|
301
|
-
- README 安装示例移除括号补充说明,保持示例纯净
|
|
302
|
-
|
|
303
|
-
## [4.9.0-dsh.3] - 2026-08-22
|
|
304
|
-
|
|
305
|
-
### Fixed
|
|
306
|
-
- `Config` 声明顺序修正为 `interface` 在前、`Schema` 在后,符合 `references/config.md` 的 Schemastery 规范写法(此前 `const` 在前会导致类型声明顺序与上游 `dsh-superpower` 不一致)
|
|
307
|
-
- `isDeactivationCommand` 补全中文全句匹配 `退出 ponytail` / `正常模式`,并兼容中文标点 `。!?`
|
|
308
|
-
|
|
309
|
-
## [4.9.0-dsh.2] - 2026-08-22
|
|
310
|
-
|
|
311
|
-
### Changed
|
|
312
|
-
- README 去版本化:徽章与正文不再写死 `4.9.0-dsh.x`,默认装 `latest`;`logo-dark` 同步为新 logo 相对路径
|
|
313
|
-
|
|
314
|
-
## [4.9.0-dsh.1] - 2026-08-22
|
|
315
|
-
|
|
316
|
-
### Changed
|
|
317
|
-
- 替换 `assets/logo.png` 为用户指定新 Logo(692KB),原文件已移除;README 徽章同步至 `4.9.0-dsh.1`
|
|
223
|
+
- `agent/session-start` 是 DSH 不存在的事件,原监听永不被触发,迁为 `agent/created`。
|
|
224
|
+
- 未知参数语义对齐上游 else 兜底:静默切到默认等级。
|
|
318
225
|
|
|
319
226
|
## [4.9.0-dsh.0] - 2026-08-21
|
|
320
227
|
|
|
321
228
|
### Added
|
|
322
|
-
- 完整移植上游 v4.9.0:6 个 Skill(`ponytail` / `ponytail-review` / `ponytail-audit` / `ponytail-debt` / `ponytail-gain` / `ponytail-help`)
|
|
323
|
-
- Always-on 梯子注入(`systemPrompt` section, `order: 50`),随 `lite/full/ultra/off/review` 动态裁剪
|
|
324
|
-
- 复刻 hooks 行为:`activate` / `mode-tracker` / `subagent` / `config` / `instructions` / `runtime`
|
|
325
|
-
- `PONYTAIL_DEFAULT_MODE` env > cordis 配置 > 配置文件 > `full` 三级回退,`review` 不可作默认,BOM 处理、`isShellSafe`、`isDeactivationCommand` 全量对齐
|
|
326
|
-
- 中文化:6 个 Skill 的 `description` 与正文、fallback 指令、hook 日志、systemPrompt 注入文本全部中文,触发词兼容中英文
|
|
327
|
-
- `CLAUDE.md` 核心记忆库、`LICENSE`(MIT)、`README.md`、`CHANGELOG.md`、`assets/`、`AGENTS.md`
|
|
328
229
|
|
|
329
|
-
|
|
330
|
-
- DSH 形态:单一插件包 `@wenaixi/dsh-ponytail`,`dsh.bundle.patch = ./cordis.patch.yml`,包名引用挂载
|
|
331
|
-
- 注入文本中文化:`PONYTAIL 已激活 — 等级:…`,`hook` 日志全中文
|
|
332
|
-
- 版本统一带 `-dsh.N` 后缀,初始 `4.9.0-dsh.0`
|
|
333
|
-
|
|
334
|
-
### Fixed
|
|
335
|
-
- `initialMode` 优先级修正为 `env > cordis 显式 config > 文件 > full`,与上游语义一致
|
|
230
|
+
- 首个 DSH 移植版本:单一插件包,`dsh.bundle.patch` 挂载,`PONYTAIL_DEFAULT_MODE` 三级回退(`review` 不可作默认),全部文案中文化,触发词兼容中英文。
|
|
336
231
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
[
|
|
342
|
-
[
|
|
232
|
+
[Unreleased]: https://github.com/Wenaixi/dsh-ponytail/compare/v5.1.0...HEAD
|
|
233
|
+
[5.2.0]: https://github.com/Wenaixi/dsh-ponytail/compare/v5.1.0...v5.2.0
|
|
234
|
+
[5.1.0]: https://github.com/Wenaixi/dsh-ponytail/releases/tag/v5.1.0
|
|
235
|
+
[5.0.0]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.12...v5.0.0
|
|
236
|
+
[4.10.0-dsh.12]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.11...v4.10.0-dsh.12
|
|
237
|
+
[4.10.0-dsh.11]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.10...v4.10.0-dsh.11
|
|
238
|
+
[4.10.0-dsh.10]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.9...v4.10.0-dsh.10
|
|
239
|
+
[4.10.0-dsh.9]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.8...v4.10.0-dsh.9
|
|
240
|
+
[4.10.0-dsh.8]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.7...v4.10.0-dsh.8
|
|
241
|
+
[4.10.0-dsh.7]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.6...v4.10.0-dsh.7
|
|
242
|
+
[4.10.0-dsh.6]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.5...v4.10.0-dsh.6
|
|
243
|
+
[4.10.0-dsh.5]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.4...v4.10.0-dsh.5
|
|
244
|
+
[4.10.0-dsh.4]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.3...v4.10.0-dsh.4
|
|
245
|
+
[4.10.0-dsh.3]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.2...v4.10.0-dsh.3
|
|
343
246
|
[4.10.0-dsh.2]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.1...v4.10.0-dsh.2
|
|
344
247
|
[4.10.0-dsh.1]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.0...v4.10.0-dsh.1
|
|
345
|
-
[4.10.0-dsh.0]: https://github.com/Wenaixi/dsh-ponytail/
|
|
346
|
-
[4.9.0-dsh.5]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.9.0-dsh.4...v4.9.0-dsh.5
|
|
347
|
-
[4.9.0-dsh.4]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.9.0-dsh.3...v4.9.0-dsh.4
|
|
348
|
-
[4.9.0-dsh.3]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.9.0-dsh.2...v4.9.0-dsh.3
|
|
349
|
-
[4.9.0-dsh.2]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.9.0-dsh.1...v4.9.0-dsh.2
|
|
350
|
-
[4.9.0-dsh.1]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.9.0-dsh.0...v4.9.0-dsh.1
|
|
248
|
+
[4.10.0-dsh.0]: https://github.com/Wenaixi/dsh-ponytail/releases/tag/v4.10.0-dsh.0
|
|
351
249
|
[4.9.0-dsh.0]: https://github.com/Wenaixi/dsh-ponytail/releases/tag/v4.9.0-dsh.0
|
|
352
|
-
|
|
353
|
-
[4.10.0-dsh.4]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.3...v4.10.0-dsh.4
|
|
354
|
-
[4.10.0-dsh.5]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.4...v4.10.0-dsh.5
|
|
355
|
-
[4.10.0-dsh.6]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.5...v4.10.0-dsh.6
|
|
356
|
-
[4.10.0-dsh.7]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.6...v4.10.0-dsh.7
|
|
357
|
-
[4.10.0-dsh.8]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.7...v4.10.0-dsh.8
|
|
358
|
-
[4.10.0-dsh.9]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.8...v4.10.0-dsh.9
|
|
359
|
-
[4.10.0-dsh.10]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.9...v4.10.0-dsh.10
|
|
360
|
-
[4.10.0-dsh.11]: https://github.com/Wenaixi/dsh-ponytail/compare/v4.10.0-dsh.10...v4.10.0-dsh.11
|