@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/README.md
CHANGED
|
@@ -5,165 +5,160 @@
|
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
|
|
8
|
+
懒惰的资深工程师,移植到 DeepSeek Harness。<br/>
|
|
9
9
|
<em>The best code is the code you never wrote.</em>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
13
13
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-111111?style=flat-square" alt="MIT"/></a>
|
|
14
14
|
<a href="https://www.npmjs.com/package/@wenaixi/dsh-ponytail"><img src="https://img.shields.io/npm/v/@wenaixi/dsh-ponytail?color=111111&style=flat-square" alt="npm"/></a>
|
|
15
|
-
<img src="https://img.shields.io/badge/DSH-333333?style=flat-square" alt="DSH"/>
|
|
16
|
-
<img src="https://img.shields.io/badge/skills-6-008080?style=flat-square" alt="skills"/>
|
|
17
15
|
</p>
|
|
18
16
|
|
|
19
17
|
<p align="center">
|
|
20
|
-
<a href="CHANGELOG.md">Changelog</a> ·
|
|
18
|
+
<a href="CHANGELOG.md">Changelog</a> ·
|
|
19
|
+
<a href="https://github.com/DietrichGebert/ponytail">上游</a> ·
|
|
20
|
+
<a href="https://www.npmjs.com/package/@wenaixi/dsh-ponytail">npm</a>
|
|
21
21
|
</p>
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
面向 DeepSeek Harness 的常驻插件:把七阶梯子注入系统提示词,提供 6 个中文技能,不注册任何 tool。实现参考 [DietrichGebert/ponytail](https://github.com/DietrichGebert/ponytail),本地版本与上游参考版本独立维护。
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
>
|
|
27
|
-
> **版本对照(2026-10-05 核验)**:本地发行版本为 `5.1.0`;上游参考版本为 `4.10.3`。上游参考版本不会自动决定本地版本号。
|
|
25
|
+
## 安装
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
> `web` 即日常的 DSH Web UI(3080)。示例中的 `demo` 可换成任意 `--profile <name>`。
|
|
27
|
+
装到任意 profile。示例里的 `web` 换成你的 `--profile <name>`。
|
|
32
28
|
|
|
33
29
|
```bash
|
|
34
|
-
# 方式一:npm
|
|
35
30
|
dsh plugin --profile web add @wenaixi/dsh-ponytail
|
|
36
|
-
|
|
37
|
-
# 方式二:GitHub 直装(lib 已提交,无需构建)
|
|
38
|
-
dsh plugin --profile web add github:Wenaixi/dsh-ponytail
|
|
39
|
-
|
|
40
|
-
# 方式三:本地 / tarball
|
|
41
|
-
pnpm install && pnpm build && dsh plugin --profile web add ./
|
|
42
|
-
pnpm pack && dsh plugin --profile web add ./wenaixi-dsh-ponytail-*.tgz
|
|
43
|
-
|
|
44
|
-
# 卸载
|
|
45
31
|
dsh plugin --profile web remove @wenaixi/dsh-ponytail
|
|
46
|
-
|
|
47
|
-
# 验证
|
|
48
32
|
dsh --profile web --dump-config | grep -A2 ponytail
|
|
49
33
|
```
|
|
50
34
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
> **首次安装后若插件卡片只有包名、没有标题描述图标**,说明包的 `exports` 没放行 `./package.json` 与 `./locale/*.json`。这是 DSH 读展示元信息时的硬约束,与安装本身无关。
|
|
35
|
+
`WARN missing peer @deepseek-ai/...` 是正常的,peer 由 DSH 运行时提供。看到 `Packages: +2 Done` 就是装好了。
|
|
54
36
|
|
|
55
|
-
|
|
37
|
+
若插件卡片只有包名、没有标题描述图标,说明包的 `exports` 没放行 `./package.json` 与 `./locale/*.json`。这是 DSH 读取展示元信息的硬约束,与安装本身无关。
|
|
56
38
|
|
|
57
|
-
|
|
58
|
-
- **6 个中文 Skill**(`rank: 550`):`ponytail` / `ponytail-review` / `ponytail-audit` / `ponytail-debt` / `ponytail-gain` / `ponytail-help`
|
|
59
|
-
- **四种运行模式**:`off` / `lite` / `full`(默认)/ `ultra`
|
|
60
|
-
- **无 tool 注册**:全部能力经 `ctx.skills` 暴露
|
|
39
|
+
### 补丁条目要写在顶层
|
|
61
40
|
|
|
62
|
-
|
|
63
|
-
|---|---|
|
|
64
|
-
| `ponytail` | 7 阶梯子,触发词兼容中英文 |
|
|
65
|
-
| `ponytail-review` | diff 评审,`delete/stdlib/native/yagni/shrink` |
|
|
66
|
-
| `ponytail-audit` | 全仓审计,按可删收益排序 |
|
|
67
|
-
| `ponytail-debt` | 收割 `ponytail:` 注释 |
|
|
68
|
-
| `ponytail-gain` | 收益看板(benchmark 中位数) |
|
|
69
|
-
| `ponytail-help` | 速查卡 |
|
|
41
|
+
插件包自带的 `cordis.patch.yml` 用 `insert` 列表声明条目:
|
|
70
42
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
43
|
+
```yaml
|
|
44
|
+
- insert:
|
|
45
|
+
- id: ponytail
|
|
46
|
+
name: "@wenaixi/dsh-ponytail"
|
|
47
|
+
```
|
|
74
48
|
|
|
75
|
-
|
|
76
|
-
|---|---|
|
|
77
|
-
| `ponytail-config.js` | `src/ponytail-config.ts`(`env > 文件 > full`,`review` 不可默认) |
|
|
78
|
-
| `ponytail-instructions.js` | `src/ponytail-instructions.ts`(唯一出口 `renderPromptSection(skillDir, state)`:review 短路 + 按档裁剪 + 中文 fallback 全部内聚) |
|
|
79
|
-
| `ponytail-state.js` | `src/ponytail-state.ts`(`.ponytail-active` 物理存取内联于此——上游 runtime 的 flag 存取已并入 state,DSH 单一宿主无外部探针;技能禁用 reload 收敛同在此) |
|
|
80
|
-
| `ponytail-activate.js` | `src/ponytail.ts` 的 `agent/created`(startup/resume 对齐 flag) |
|
|
81
|
-
| `ponytail-mode-tracker.js` | `src/ponytail-commands.ts` 的 `createCommandDispatcher`(指令解析纯函数 + 状态机副作用) |
|
|
82
|
-
| `ponytail-subagent.js` | `src/ponytail.ts` 的 `agent/created`(`PONYTAIL_SUBAGENT_MATCHER`) |
|
|
49
|
+
**卡片能渲染不等于能写配置。** 宿主的配置编辑器只管理顶层条目的 `config` 块,`insert` 里的条目永远判为被覆盖,面板显示「本部署没有接受这次修改」。要能写,条目得是顶层:
|
|
83
50
|
|
|
51
|
+
```yaml
|
|
52
|
+
- id: ponytail
|
|
53
|
+
name: "@wenaixi/dsh-ponytail"
|
|
54
|
+
config:
|
|
55
|
+
defaultMode: full # off|lite|full|ultra
|
|
84
56
|
```
|
|
85
|
-
启动: env PONYTAIL_DEFAULT_MODE → cordis defaultMode → full
|
|
86
|
-
→ setMode(flag 文件) // 会话启动对齐语义,见下方说明
|
|
87
57
|
|
|
88
|
-
|
|
89
|
-
→ 解析 /ponytail 族 / stop ponytail → 切 currentMode + 写 flag → next()
|
|
58
|
+
本插件的面板不显示只读横幅,所以那句拒绝提示是唯一判据。宿主的判定在 `dsh-config-editor` 的 `edit()`:写入前把新配置与继承层合成结果逐字段比对,不一致就报 `Configuration for "ponytail" is overridden by a home patch or command-line overlay`。
|
|
90
59
|
|
|
91
|
-
|
|
92
|
-
order 50 在 persona(0) 之后、工具(100) 之前;回调收敛为单行 text: () => renderPromptSection(skillDir, state)
|
|
93
|
-
off → 空,review → 指向技能,读盘失败 → 中文 fallback,assembly 前以 readMode() 对齐
|
|
60
|
+
## 用法
|
|
94
61
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
62
|
+
```
|
|
63
|
+
/ponytail 切到 full(七阶梯子全开)
|
|
64
|
+
/ponytail lite 只做最低限度
|
|
65
|
+
/ponytail ultra 先挑战需求本身
|
|
66
|
+
/ponytail off 关闭注入
|
|
67
|
+
/ponytail default lite 跨会话持久化
|
|
68
|
+
stop ponytail 同 off,整句匹配
|
|
98
69
|
```
|
|
99
70
|
|
|
100
|
-
`
|
|
71
|
+
等级在每次会话启动时按 `env > Profile 补丁 > 内置兜底 full` 重置,所以 `/ponytail <档>` 只在本会话有效,跨会话要写 `/ponytail default <档>`。
|
|
101
72
|
|
|
102
|
-
|
|
73
|
+
六档之外的技能:
|
|
103
74
|
|
|
104
|
-
|
|
75
|
+
| 技能 | 作用 |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `/ponytail-review` | 只看 diff,找能删的东西 |
|
|
78
|
+
| `/ponytail-audit` | 全仓审计,按可删收益排序 |
|
|
79
|
+
| `/ponytail-debt` | 收割 `ponytail:` 注释列成待办 |
|
|
80
|
+
| `/ponytail-gain` | 收益看板 |
|
|
81
|
+
| `/ponytail-help` | 速查卡 |
|
|
105
82
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
config:
|
|
111
|
-
providerName: ponytail
|
|
112
|
-
defaultMode: full # off|lite|full|ultra
|
|
83
|
+
命令行调试时任务文本不要写 `headless`,否则整句匹配不上 `/ponytail` 前缀:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
dsh --profile web '<任务>'
|
|
113
87
|
```
|
|
114
88
|
|
|
115
|
-
|
|
89
|
+
## 技能正文与描述语言
|
|
90
|
+
|
|
91
|
+
技能正文是上游 DietrichGebert/ponytail v4.10.3 的英文原文,按 tag 逐文件取回。两处内容对 DSH
|
|
92
|
+
不适用,已就地改写为真实落点:`ponytail-gain` 的数据来源指向 `assets/*.svg`(本仓无上游的
|
|
93
|
+
`benchmarks/`),`ponytail-help` 的配置与更新章节改为 profile 补丁与 `dsh plugin`。
|
|
116
94
|
|
|
117
|
-
|
|
95
|
+
模型目录与配置面板看到的是同一个描述字符串,语言由 `skillDescriptionLang` 决定(默认中文)。
|
|
96
|
+
两套描述的真源是 `skills/descriptions.zh.json` 与 `skills/descriptions.en.json`,
|
|
97
|
+
经 `ctx.remote.ponytail.snapshot()` 下发,因此切换后模型侧与界面同时改变。
|
|
118
98
|
|
|
119
|
-
|
|
99
|
+
描述长度上限来自官方 `dsh-tool-skill` 的 `catalogDescriptionMaxLength`(默认 500),
|
|
100
|
+
超长会在模型目录里被截断,`verify.mjs` 对两册都断言。
|
|
101
|
+
## 配置面板
|
|
120
102
|
|
|
121
|
-
|
|
103
|
+
已安装插件的卡片详情内嵌配置面板:运行等级、6 个技能的独立开关、一键恢复默认,外加一条三级优先级诊断链,逐行显示环境变量、Profile 补丁、内置兜底各自的值与生效状态。
|
|
122
104
|
|
|
123
|
-
|
|
105
|
+
等级控件只显示补丁里真实配置的档。补丁没写 `defaultMode` 时选中末尾追加的「未设置」段,「当前生效」由诊断链顶部的文字给出。把兜底档显示成已配置档就是在骗人。
|
|
106
|
+
|
|
107
|
+
读写走两条官方通道:
|
|
124
108
|
|
|
125
109
|
| 通道 | 内容 | 落点 |
|
|
126
110
|
| --- | --- | --- |
|
|
127
|
-
| `ctx.configForms.get('ponytail')` |
|
|
128
|
-
| `ctx.remote.ponytail.snapshot()` |
|
|
111
|
+
| `ctx.configForms.get('ponytail')` | 默认档、技能启用列表,写入自带 revision 冲突检测 | `profiles/<name>/cordis.patch.yml` |
|
|
112
|
+
| `ctx.remote.ponytail.snapshot()` | 当前生效等级、三级诊断链,只读 | 不落盘,按需拉取 |
|
|
113
|
+
|
|
114
|
+
无 Profile 上下文的组合(headless、CLI)没有 Settings 服务,配置读写回退到 `profiles/<name>/ponytail/config.json`。从旧版本升级时,全局的 `$DSH_HOME/ponytail/config.json` 首次启动时一次性导入 Profile 补丁,旧文件随后被改名 `.imported`;导入失败不影响启动。
|
|
115
|
+
|
|
116
|
+
## 安装、更新、卸载的真实行为
|
|
117
|
+
|
|
118
|
+
| 动作 | 需要重启宿主 | 原因 |
|
|
119
|
+
| --- | --- | --- |
|
|
120
|
+
| 新装 | 否,刷新浏览器即可 | 宿主检测到新增条目,投递新的产物指纹 |
|
|
121
|
+
| 更新 | 是 | 条目 `rev` 在进程启动时算好就冻结,运行中替换文件不触发重算 |
|
|
122
|
+
| 卸载 | 否,但补丁条目要手工删 | `dsh plugin remove` 清 `package.json`、bundles 与物理包,不删 `cordis.patch.yml` 的条目 |
|
|
123
|
+
|
|
124
|
+
卸载后的残留条目每次启动打印 `patch: entry "ponytail" not found`,是警告,不致命。宿主侧确实没有删除条目的能力,只能手工清。
|
|
129
125
|
|
|
130
|
-
|
|
126
|
+
更新后请重启宿主再验证界面。
|
|
131
127
|
|
|
132
|
-
|
|
128
|
+
## 上游映射
|
|
133
129
|
|
|
134
|
-
|
|
130
|
+
上游 `hooks/` 的六个 Hook 合并进单一 DSH 插件:
|
|
135
131
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
132
|
+
| 上游 | DSH 侧 |
|
|
133
|
+
| --- | --- |
|
|
134
|
+
| `ponytail-config.js` | `src/ponytail-config.ts` |
|
|
135
|
+
| `ponytail-instructions.js` | `src/ponytail-instructions.ts`,唯一出口 `renderPromptSection(skillDir, state)` |
|
|
136
|
+
| `ponytail-state.js` | `src/ponytail-state.ts`,flag 文件存取与技能禁用 reload 都在此 |
|
|
137
|
+
| `ponytail-activate.js` | `src/ponytail.ts` 的 `agent/created` |
|
|
138
|
+
| `ponytail-mode-tracker.js` | `src/ponytail-commands.ts` 的 `createCommandDispatcher` |
|
|
139
|
+
| `ponytail-subagent.js` | `src/ponytail.ts` 的 `agent/created`,`PONYTAIL_SUBAGENT_MATCHER` |
|
|
140
|
+
|
|
141
|
+
提示词经 `systemPrompt.section('ponytail')` 注入,`order: 50` 落在 persona(0) 与工具(100) 之间,每次 assemble 动态求值,`off` 时零成本。flag 与配置同源持久化在当前 profile 内,同机多实例互不干扰。
|
|
140
142
|
|
|
141
|
-
##
|
|
143
|
+
## 开发
|
|
142
144
|
|
|
143
145
|
```bash
|
|
144
|
-
#
|
|
145
|
-
pnpm
|
|
146
|
-
|
|
147
|
-
node scripts/verify.mjs
|
|
148
|
-
node scripts/behavior.test.mjs
|
|
149
|
-
|
|
150
|
-
#
|
|
151
|
-
dsh --profile web --patch ./cordis.patch.yml --dump-config # 仅验证补丁解析,不替代真实启动验收
|
|
146
|
+
pnpm typecheck # tsc --noEmit
|
|
147
|
+
pnpm build # tsc 出 lib/,再由 build-client.mjs 生成 lib/client.js
|
|
148
|
+
node scripts/verify.mjs # 静态门禁:产物、技能、零 tool、UI 落点、locale 键集
|
|
149
|
+
node scripts/docs-verify.mjs # 版本策略文档一致性
|
|
150
|
+
node scripts/behavior.test.mjs # 行为测试
|
|
151
|
+
|
|
152
|
+
dsh --profile web --patch ./cordis.patch.yml --dump-config # 只验证补丁解析
|
|
152
153
|
pnpm dsh web --patch ./cordis.patch.yml # 热重载
|
|
153
154
|
```
|
|
154
155
|
|
|
155
|
-
|
|
156
|
-
- **上游参考**:README 记录上游参考版本和核验日期,但上游发布不会自动改变本地版本;是否升级参考实现由本地兼容性评估决定。
|
|
157
|
-
- **发布铁律**:严禁本地 `npm publish` 和未经授权的 `git push`。本地完成门禁后,由授权的 CI tag 流程发布 npm 与 GitHub Release。
|
|
158
|
-
- **客户端产物单一来源**:`lib/client.js` 只由 `scripts/build-client.mjs` 生成。`tsconfig.build.json` 不得把它列入编译输入,否则会出现同名双产物并静默漂移。
|
|
159
|
-
|
|
160
|
-
---
|
|
156
|
+
本地版本用独立的标准 SemVer,`pnpm version:bump` 递增 patch,`pnpm version:set -- 5.2.0` 指定版本。旧的 `-dsh.N` 不再生成。上游发布不会改变本地版本号,是否吸收上游变化由本地兼容性评估决定。
|
|
161
157
|
|
|
162
|
-
|
|
158
|
+
发布只走 tag 触发的 CI。严禁本地 `npm publish`,push 与打 tag 都需要明确授权。
|
|
163
159
|
|
|
164
|
-
|
|
160
|
+
`lib/client.js` 只由 `scripts/build-client.mjs` 生成。`tsconfig.build.json` 不能把它列入编译输入,否则会出现同名双产物并静默漂移。
|
|
165
161
|
|
|
166
|
-
##
|
|
162
|
+
## 许可
|
|
167
163
|
|
|
168
|
-
[MIT](LICENSE)
|
|
169
|
-
© DietrichGebert / Wenaixi
|
|
164
|
+
[MIT](LICENSE),原作 DietrichGebert,移植 Wenaixi。上游仓库 https://github.com/DietrichGebert/ponytail
|
package/lib/client.js
CHANGED
|
@@ -12,8 +12,8 @@ window.__ModuleLoader__.load({
|
|
|
12
12
|
// 官方 locale 接入:注册 ponytail 命名空间双语字典(真源 locale/*.json,构建期内嵌)
|
|
13
13
|
// 技能描述不翻译(用户边界):由 configForms 快照与快照通道下发,字典不含技能描述键
|
|
14
14
|
var NS = "ponytail";
|
|
15
|
-
var ZH = {"button.reset":"恢复默认配置","chain.hit":"生效中","chain.shadowed":"被覆盖","chain.unset":"未设置","chain.valueUnset":"(未设置)","confirm.reset":"确定恢复默认配置吗?等级回到标准(full),并重新启用全部 6 个技能。","error.operation":"操作失败:","error.rejected":"本部署没有接受这次修改,值已保留供你核对。","level.env":"环境变量","level.fallback":"内置兜底","level.patch":"Profile 补丁","meta":{"title":"懒人模式","description":"常驻懒人资深开发者模式与七阶梯子(YAGNI 到最小实现),6 个中文原生技能(本体、评审、审计、债务、收益、帮助),零 Tool 注册。"},"meta.description":"DietrichGebert/ponytail 的 DSH 完整移植:常驻懒人 senior 模式与七阶梯子(YAGNI 到最小实现),6 个中文原生技能(本体、评审、审计、债务、收益、帮助),零 tool 注册。","meta.title":"懒人模式(ponytail)","mode.full":"标准","mode.hint":"控制梯子提示词的注入强度,改动即时生效并写入配置文件,对所有会话生效。","mode.lite":"轻量","mode.lockedHint":"当前有更高优先级的配置在生效,此处的修改不会改变实际运行等级。","mode.off":"关闭","mode.title":"运行强度等级","mode.ultra":"激进","panel.title":"懒人模式配置","priority.intro":"运行等级按下列顺序取第一个有效值;被更高优先级压制的项,在界面上修改不会生效。当前生效:","priority.title":"配置优先级","priority.unavailable":"诊断信息不可用,请确认宿主版本已包含优先级诊断接口。","problem.env":"值无效,已忽略","problem.patch":"值无效,已忽略","skills.enabledToast":"技能 {name} 已启用","skills.hiddenToast":"技能 {name} 已隐藏","skills.hint":"关闭后该技能不会出现在斜杠菜单,也不会被模型加载。","skills.title":"原生技能开关","skills.toggleOn":"启用 {name}","state.loading":"读取中…","state.readOnly":"本部署的设置为只读。","state.saved":"配置保存在当前 profile 的 ponytail 目录","toast.modeChanged":"运行等级已切为「{name}」","toast.resetDone":"已恢复默认配置"};
|
|
16
|
-
var EN = {"button.reset":"Restore defaults","chain.hit":"In effect","chain.shadowed":"Shadowed","chain.unset":"Unset","chain.valueUnset":"(unset)","confirm.reset":"Restore default config? Level returns to Standard (full) and all 6 skills are re-enabled.","error.operation":"Operation failed: ","error.rejected":"This deployment did not accept the change; your value was kept for you to review.","level.env":"Environment variable","level.fallback":"Built-in fallback","level.patch":"Profile patch","meta":{"title":"Lazy Senior Dev Mode","description":"Persistent lazy senior developer mode with a seven-rung ladder (YAGNI down to the smallest implementation), six native skills, and zero tool registration."},"meta.description":"A full DSH port of DietrichGebert/ponytail: the always-on lazy senior developer mode and its seven-rung ladder (YAGNI down to the minimum implementation), with six native Chinese skills (core, review, audit, debt, gain, help) and zero tool registrations.","meta.title":"Ponytail (lazy senior mode)","mode.full":"Standard","mode.hint":"Controls how strongly the ladder prompt is injected. Changes apply immediately and are written to the config file for all sessions.","mode.lite":"Lite","mode.lockedHint":"A higher-priority configuration is in effect; changes here will not affect the actual runtime level.","mode.off":"Off","mode.title":"Intensity Level","mode.ultra":"Ultra","panel.title":"Lazy Senior Dev Mode settings","priority.intro":"The runtime level takes the first valid value in the following order; items shadowed by a higher-priority source cannot be changed from the UI. Current: ","priority.title":"Config Priority","priority.unavailable":"Diagnostics unavailable. Please confirm the host version ships the priority diagnostics endpoint.","problem.env":"Invalid value, ignored","problem.patch":"Invalid value, ignored","skills.enabledToast":"Skill {name} enabled","skills.hiddenToast":"Skill {name} hidden","skills.hint":"Disabled skills disappear from the slash menu and are not loaded by the model.","skills.title":"Native Skills","skills.toggleOn":"Enable {name}","state.loading":"Loading…","state.readOnly":"This deployment stores settings read-only.","state.saved":"Config is stored in the ponytail directory of the current profile","toast.modeChanged":"Level switched to {name}","toast.resetDone":"Defaults restored"};
|
|
15
|
+
var ZH = {"button.reset":"恢复默认配置","chain.hit":"生效中","chain.shadowed":"被覆盖","chain.unset":"未设置","chain.valueUnset":"(未设置)","confirm.reset":"确定恢复默认配置吗?等级回到标准(full),并重新启用全部 6 个技能。","error.operation":"操作失败:","error.rejected":"本部署没有接受这次修改,值已保留供你核对。","lang.changed":"技能描述语言已切为「{name}」","lang.en":"English","lang.title":"技能描述语言","lang.zh":"中文","level.env":"环境变量","level.fallback":"内置兜底","level.patch":"Profile 补丁","meta":{"title":"懒人模式","description":"常驻懒人资深开发者模式与七阶梯子(YAGNI 到最小实现),6 个中文原生技能(本体、评审、审计、债务、收益、帮助),零 Tool 注册。"},"meta.description":"DietrichGebert/ponytail 的 DSH 完整移植:常驻懒人 senior 模式与七阶梯子(YAGNI 到最小实现),6 个中文原生技能(本体、评审、审计、债务、收益、帮助),零 tool 注册。","meta.title":"懒人模式(ponytail)","mode.full":"标准","mode.hint":"控制梯子提示词的注入强度,改动即时生效并写入配置文件,对所有会话生效。","mode.lite":"轻量","mode.lockedHint":"当前有更高优先级的配置在生效,此处的修改不会改变实际运行等级。","mode.off":"关闭","mode.title":"运行强度等级","mode.ultra":"激进","mode.unset":"未设置","mode.unsetHint":"Profile 补丁未配置运行等级,当前由内置兜底决定。点上方任一档位即写入补丁。","panel.title":"懒人模式配置","priority.intro":"运行等级按下列顺序取第一个有效值;被更高优先级压制的项,在界面上修改不会生效。当前生效:","priority.title":"配置优先级","priority.unavailable":"诊断信息不可用,请确认宿主版本已包含优先级诊断接口。","problem.env":"值无效,已忽略","problem.patch":"值无效,已忽略","skills.enabledToast":"技能 {name} 已启用","skills.hiddenToast":"技能 {name} 已隐藏","skills.hint":"关闭后该技能不会出现在斜杠菜单,也不会被模型加载。","skills.title":"原生技能开关","skills.toggleOn":"启用 {name}","state.loading":"读取中…","state.readOnly":"本部署的设置为只读。","state.saved":"配置保存在当前 profile 的 ponytail 目录","toast.modeChanged":"运行等级已切为「{name}」","toast.resetDone":"已恢复默认配置"};
|
|
16
|
+
var EN = {"button.reset":"Restore defaults","chain.hit":"In effect","chain.shadowed":"Shadowed","chain.unset":"Unset","chain.valueUnset":"(unset)","confirm.reset":"Restore default config? Level returns to Standard (full) and all 6 skills are re-enabled.","error.operation":"Operation failed: ","error.rejected":"This deployment did not accept the change; your value was kept for you to review.","lang.changed":"Skill description language switched to {name}","lang.en":"English","lang.title":"Skill description language","lang.zh":"中文","level.env":"Environment variable","level.fallback":"Built-in fallback","level.patch":"Profile patch","meta":{"title":"Lazy Senior Dev Mode","description":"Persistent lazy senior developer mode with a seven-rung ladder (YAGNI down to the smallest implementation), six native skills, and zero tool registration."},"meta.description":"A full DSH port of DietrichGebert/ponytail: the always-on lazy senior developer mode and its seven-rung ladder (YAGNI down to the minimum implementation), with six native Chinese skills (core, review, audit, debt, gain, help) and zero tool registrations.","meta.title":"Ponytail (lazy senior mode)","mode.full":"Standard","mode.hint":"Controls how strongly the ladder prompt is injected. Changes apply immediately and are written to the config file for all sessions.","mode.lite":"Lite","mode.lockedHint":"A higher-priority configuration is in effect; changes here will not affect the actual runtime level.","mode.off":"Off","mode.title":"Intensity Level","mode.ultra":"Ultra","mode.unset":"Unset","mode.unsetHint":"The profile patch has no intensity level; the built-in fallback decides it now. Picking any level above writes it to the patch.","panel.title":"Lazy Senior Dev Mode settings","priority.intro":"The runtime level takes the first valid value in the following order; items shadowed by a higher-priority source cannot be changed from the UI. Current: ","priority.title":"Config Priority","priority.unavailable":"Diagnostics unavailable. Please confirm the host version ships the priority diagnostics endpoint.","problem.env":"Invalid value, ignored","problem.patch":"Invalid value, ignored","skills.enabledToast":"Skill {name} enabled","skills.hiddenToast":"Skill {name} hidden","skills.hint":"Disabled skills disappear from the slash menu and are not loaded by the model.","skills.title":"Native Skills","skills.toggleOn":"Enable {name}","state.loading":"Loading…","state.readOnly":"This deployment stores settings read-only.","state.saved":"Config is stored in the ponytail directory of the current profile","toast.modeChanged":"Level switched to {name}","toast.resetDone":"Defaults restored"};
|
|
17
17
|
// t 在 apply 时经 ctx.locale.bind 赋值;组件读取 factory 级变量(不接收 ctx,铁律)
|
|
18
18
|
var localeCtx = null;
|
|
19
19
|
var t = function (key, params) {
|
|
@@ -110,19 +110,29 @@ window.__ModuleLoader__.load({
|
|
|
110
110
|
},
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
// 档位标签在 apply 时才绑定 locale(t 是 factory
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
// 档位标签在 apply 时才绑定 locale(t 是 factory 级可变变量),因此按需取值而不是模块级求值。
|
|
114
|
+
//
|
|
115
|
+
// configured=false(补丁未写 defaultMode)时末尾追加一段真实的「未设置」选项,而不是把 value
|
|
116
|
+
// 置成一个不在 options 里的值:官方 SegmentedControl 用 options.findIndex 求下标,
|
|
117
|
+
// 下标 -1 会让所有段 tabIndex=-1(键盘不可达)且指示器整颗滑出轨道左缘
|
|
118
|
+
// (dsh-client-ui-primitives/lib/index.js:3410-3492 与 SegmentedControl.module.css)。
|
|
119
|
+
// 「未设置」排在末尾而非首位:未配置态下 关闭/轻量/标准/激进 仍占 0-3 段,
|
|
120
|
+
// 配好之后四档位置不变,用户已有的肌肉记忆不被打断。
|
|
121
|
+
function modeOptions(configured) {
|
|
122
|
+
var options = [
|
|
116
123
|
{ value: "off", label: t("mode.off") },
|
|
117
124
|
{ value: "lite", label: t("mode.lite") },
|
|
118
125
|
{ value: "full", label: t("mode.full") },
|
|
119
126
|
{ value: "ultra", label: t("mode.ultra") },
|
|
120
127
|
];
|
|
128
|
+
if (!configured) options.push({ value: "unset", label: t("mode.unset") });
|
|
129
|
+
return options;
|
|
121
130
|
}
|
|
122
131
|
|
|
123
|
-
//
|
|
132
|
+
// 技能 id 列表是构建期常量;描述与语言来自 remote 快照(与模型目录同源)。
|
|
133
|
+
// 构建期内嵌描述会让语言切换停在旧值,所以这里只带 id。
|
|
124
134
|
// 「是否启用」不再随服务端下发:它就是 configForms 快照里的 disabledSkills 取反。
|
|
125
|
-
const
|
|
135
|
+
const SKILL_IDS = ["ponytail","ponytail-audit","ponytail-debt","ponytail-gain","ponytail-help","ponytail-review"];
|
|
126
136
|
|
|
127
137
|
// 诊断链一行的状态语义:生效 / 被覆盖 / 未设置 / 有问题
|
|
128
138
|
function chainRowState(source) {
|
|
@@ -335,11 +345,15 @@ window.__ModuleLoader__.load({
|
|
|
335
345
|
applyOps([
|
|
336
346
|
{ op: "unset", path: ["defaultMode"] },
|
|
337
347
|
{ op: "unset", path: ["disabledSkills"] },
|
|
348
|
+
{ op: "unset", path: ["skillDescriptionLang"] },
|
|
338
349
|
], t("toast.resetDone"));
|
|
339
350
|
}, [applyOps]);
|
|
340
351
|
|
|
341
352
|
const config = snapshot.value || {};
|
|
342
353
|
const defaultMode = typeof config.defaultMode === "string" ? config.defaultMode : null;
|
|
354
|
+
// 配置值的有无,而不是运行时推导值的有无:defaultMode 无 Schema 默认值
|
|
355
|
+
// (src/ponytail.ts),所以快照里读得到它,就说明用户的 profile 补丁里写了。
|
|
356
|
+
const modeConfigured = defaultMode !== null;
|
|
343
357
|
// 只有环境变量命中才锁:env 压过一切,此时改 patch 确实无效。
|
|
344
358
|
// fallback 命中必须放行——那是「补丁与 env 都没写」的兜底,不是更高优先级的配置,
|
|
345
359
|
// 用户改 patch 立刻生效(此前把 fallback 也当压制源,提示文案在说谎)。
|
|
@@ -347,6 +361,13 @@ window.__ModuleLoader__.load({
|
|
|
347
361
|
return s.level === "env" && s.hit;
|
|
348
362
|
}));
|
|
349
363
|
|
|
364
|
+
// 描述语言:带 Schema 默认值(src/ponytail.ts),读得到即生效值,无需区分「配过没配过」。
|
|
365
|
+
var descLang = typeof config.skillDescriptionLang === "string" ? config.skillDescriptionLang : "zh";
|
|
366
|
+
var setDescLang = React.useCallback(function (lang) {
|
|
367
|
+
applyOps([{ op: "set", path: ["skillDescriptionLang"], value: lang }],
|
|
368
|
+
t("lang.changed", { name: t("lang." + lang) }));
|
|
369
|
+
}, [applyOps]);
|
|
370
|
+
|
|
350
371
|
return e(
|
|
351
372
|
"div",
|
|
352
373
|
{ style: { display: "flex", flexDirection: "column", gap: "16px", maxWidth: "720px" } },
|
|
@@ -361,11 +382,18 @@ window.__ModuleLoader__.load({
|
|
|
361
382
|
e(P.SegmentedControl, {
|
|
362
383
|
id: "ponytail-mode",
|
|
363
384
|
label: t("mode.title"),
|
|
364
|
-
|
|
365
|
-
|
|
385
|
+
// 控件只显示配置值,绝不回退到 priority.effective:那是运行时推导档
|
|
386
|
+
// (env / 补丁 / 兜底合并的结果),回退会让刚安装的用户看到「标准」被高亮,
|
|
387
|
+
// 像亲手选过一样。未配置就如实显示「未设置」段。
|
|
388
|
+
// 「当前生效」由上方优先级链表独占呈现,这里不重复。
|
|
389
|
+
value: modeConfigured ? defaultMode : "unset",
|
|
390
|
+
options: modeOptions(modeConfigured),
|
|
366
391
|
disabled: busy || !writable || levelLocked,
|
|
367
392
|
onChange: setMode,
|
|
368
393
|
}),
|
|
394
|
+
!modeConfigured
|
|
395
|
+
? e("p", { style: L.hint }, t("mode.unsetHint"))
|
|
396
|
+
: null,
|
|
369
397
|
levelLocked
|
|
370
398
|
? e("p", { style: Object.assign({}, L.hint, { color: "var(--dsw-alias-state-warn-primary)" }) }, t("mode.lockedHint"))
|
|
371
399
|
: null,
|
|
@@ -378,25 +406,39 @@ window.__ModuleLoader__.load({
|
|
|
378
406
|
{ style: L.section },
|
|
379
407
|
e("h4", { style: L.title }, t("skills.title")),
|
|
380
408
|
e("p", { style: L.hint }, t("skills.hint")),
|
|
409
|
+
e(P.SegmentedControl, {
|
|
410
|
+
id: "ponytail-desc-lang",
|
|
411
|
+
label: t("lang.title"),
|
|
412
|
+
value: descLang,
|
|
413
|
+
options: [
|
|
414
|
+
{ value: "zh", label: t("lang.zh") },
|
|
415
|
+
{ value: "en", label: t("lang.en") },
|
|
416
|
+
],
|
|
417
|
+
disabled: busy || !writable,
|
|
418
|
+
onChange: setDescLang,
|
|
419
|
+
}),
|
|
381
420
|
e(
|
|
382
421
|
"div",
|
|
383
422
|
{ style: { display: "flex", flexDirection: "column", gap: "6px" } },
|
|
384
|
-
|
|
385
|
-
const enabled = disabled.indexOf(
|
|
423
|
+
SKILL_IDS.map(function (id) {
|
|
424
|
+
const enabled = disabled.indexOf(id) < 0;
|
|
425
|
+
var meta = (remote && Array.isArray(remote.skills)
|
|
426
|
+
? remote.skills.find(function (s) { return s.id === id; })
|
|
427
|
+
: null);
|
|
386
428
|
return e(
|
|
387
429
|
"div",
|
|
388
|
-
{ key:
|
|
430
|
+
{ key: id, style: L.row },
|
|
389
431
|
e(
|
|
390
432
|
"div",
|
|
391
433
|
{ style: L.rowText },
|
|
392
|
-
e("span", { style: L.rowName }, "/" +
|
|
393
|
-
e("span", { style: L.rowDesc },
|
|
434
|
+
e("span", { style: L.rowName }, "/" + id),
|
|
435
|
+
e("span", { style: L.rowDesc }, meta ? meta.description : id)
|
|
394
436
|
),
|
|
395
437
|
e(P.Switch, {
|
|
396
438
|
checked: enabled,
|
|
397
439
|
disabled: busy || !writable,
|
|
398
|
-
label: t("skills.toggleOn", { name:
|
|
399
|
-
onChange: function (next) { toggleSkill(
|
|
440
|
+
label: t("skills.toggleOn", { name: id }),
|
|
441
|
+
onChange: function (next) { toggleSkill(id, next); },
|
|
400
442
|
})
|
|
401
443
|
);
|
|
402
444
|
})
|
package/lib/ponytail-config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ponytail-config — 移植自 hooks/ponytail-config.js
|
|
3
3
|
*
|
|
4
|
-
* 三级默认解析:环境变量 >
|
|
4
|
+
* 三级默认解析:环境变量 > Profile 补丁 > 内置兜底
|
|
5
5
|
* 保留已核对的上游行为边界,并按 DSH 运行时契约适配:
|
|
6
6
|
* - review 不可作默认 (#377)
|
|
7
7
|
* - isDeactivationCommand 全句匹配
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* 数据根契约(见 docs/adr/0005):配置与 flag 一律落在 DSH 统一用户数据根
|
|
12
12
|
* $DSH_HOME/ponytail(默认 ~/.dsh/ponytail),与 cordis 内置包
|
|
13
13
|
* (.credentials.yaml / profiles/ / attachments/ 等)保持同一根,
|
|
14
|
-
* 从而跨平台一致、跟随 DSH_HOME
|
|
14
|
+
* 从而跨平台一致、跟随 DSH_HOME 覆盖。
|
|
15
|
+
* 注意 resolveDshHome() 结构上不含 profile 维度:该目录下的文件被同机所有实例共享,
|
|
16
|
+
* 配置与 flag 的 profile 隔离由 getConfigDir(profileDir) 单独承担(ADR-0009)。
|
|
15
17
|
* 不再使用 XDG / APPDATA 等宿主平台约定(旧位置仅作一次性兼容读取)。
|
|
16
18
|
*/
|
|
17
19
|
export declare const DEFAULT_MODE = "full";
|
|
@@ -88,6 +90,13 @@ export interface PonytailConfig {
|
|
|
88
90
|
skillDir?: string;
|
|
89
91
|
/** 默认强度,off 则不自动激活(volatile 引用) */
|
|
90
92
|
defaultMode?: VolatileRef<'off' | 'lite' | 'full' | 'ultra'>;
|
|
93
|
+
/**
|
|
94
|
+
* 技能描述下发给模型目录与配置面板的语言(volatile 引用,默认 zh)。
|
|
95
|
+
*
|
|
96
|
+
* 与 defaultMode 不同:它不参与优先级链,默认值不会 shadow 任何显式配置,
|
|
97
|
+
* 因此可以带 Schema 默认值(面板要区分「显式选了 en」与「没配」)。
|
|
98
|
+
*/
|
|
99
|
+
skillDescriptionLang?: VolatileRef<'zh' | 'en'>;
|
|
91
100
|
}
|
|
92
101
|
/**
|
|
93
102
|
* 读一个可能是 volatile 引用、可能是裸值、也可能读到 undefined 的字段。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ponytail-config.d.ts","sourceRoot":"","sources":["../src/ponytail-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ponytail-config.d.ts","sourceRoot":"","sources":["../src/ponytail-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,eAAO,MAAM,YAAY,SAAS,CAAA;AAClC,eAAO,MAAM,aAAa,2CAA4C,CAAA;AAEtE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAI9D;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE9C;AAMD,mEAAmE;AACnE,eAAO,MAAM,YAAY,aAAa,CAAA;AAetC;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,MAAM,CAKjH;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAiB/D;AAGD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AA0BD,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAElE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA8B1G;AAED,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAK1E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAMtF;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,GAAG,IAAI,CAAC,CAAA;CACT;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IACtC,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mCAAmC;IACnC,WAAW,CAAC,EAAE,WAAW,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;IAC5D;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;CAChD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,SAAS,CAMpF"}
|
package/lib/ponytail-config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ponytail-config — 移植自 hooks/ponytail-config.js
|
|
3
3
|
*
|
|
4
|
-
* 三级默认解析:环境变量 >
|
|
4
|
+
* 三级默认解析:环境变量 > Profile 补丁 > 内置兜底
|
|
5
5
|
* 保留已核对的上游行为边界,并按 DSH 运行时契约适配:
|
|
6
6
|
* - review 不可作默认 (#377)
|
|
7
7
|
* - isDeactivationCommand 全句匹配
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* 数据根契约(见 docs/adr/0005):配置与 flag 一律落在 DSH 统一用户数据根
|
|
12
12
|
* $DSH_HOME/ponytail(默认 ~/.dsh/ponytail),与 cordis 内置包
|
|
13
13
|
* (.credentials.yaml / profiles/ / attachments/ 等)保持同一根,
|
|
14
|
-
* 从而跨平台一致、跟随 DSH_HOME
|
|
14
|
+
* 从而跨平台一致、跟随 DSH_HOME 覆盖。
|
|
15
|
+
* 注意 resolveDshHome() 结构上不含 profile 维度:该目录下的文件被同机所有实例共享,
|
|
16
|
+
* 配置与 flag 的 profile 隔离由 getConfigDir(profileDir) 单独承担(ADR-0009)。
|
|
15
17
|
* 不再使用 XDG / APPDATA 等宿主平台约定(旧位置仅作一次性兼容读取)。
|
|
16
18
|
*/
|
|
17
19
|
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ponytail-config.js","sourceRoot":"","sources":["../src/ponytail-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ponytail-config.js","sourceRoot":"","sources":["../src/ponytail-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ponytail-instructions.d.ts","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAKxD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC5D;
|
|
1
|
+
{"version":3,"file":"ponytail-instructions.d.ts","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAKxD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBzE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC5D;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAKD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAKlF"}
|