@wenaixi/dsh-ponytail 4.9.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.
Files changed (40) hide show
  1. package/AGENTS.md +32 -0
  2. package/CHANGELOG.md +26 -0
  3. package/LICENSE +21 -0
  4. package/README.en.md +100 -0
  5. package/README.md +139 -0
  6. package/assets/benchmark-3model.svg +21 -0
  7. package/assets/benchmark-agentic.svg +62 -0
  8. package/assets/logo-dark.png +0 -0
  9. package/assets/logo-dark.svg +115 -0
  10. package/assets/logo-greenpt-dark.svg +27 -0
  11. package/assets/logo-greenpt.svg +27 -0
  12. package/assets/logo.png +0 -0
  13. package/assets/social-preview.png +0 -0
  14. package/assets/waitlist-banner-es.png +0 -0
  15. package/assets/waitlist-banner-ko.png +0 -0
  16. package/assets/waitlist-banner.png +0 -0
  17. package/cordis.patch.yml +3 -0
  18. package/lib/ponytail-config.d.ts +28 -0
  19. package/lib/ponytail-config.d.ts.map +1 -0
  20. package/lib/ponytail-config.js +125 -0
  21. package/lib/ponytail-config.js.map +1 -0
  22. package/lib/ponytail-instructions.d.ts +5 -0
  23. package/lib/ponytail-instructions.d.ts.map +1 -0
  24. package/lib/ponytail-instructions.js +81 -0
  25. package/lib/ponytail-instructions.js.map +1 -0
  26. package/lib/ponytail-runtime.d.ts +16 -0
  27. package/lib/ponytail-runtime.d.ts.map +1 -0
  28. package/lib/ponytail-runtime.js +63 -0
  29. package/lib/ponytail-runtime.js.map +1 -0
  30. package/lib/ponytail.d.ts +74 -0
  31. package/lib/ponytail.d.ts.map +1 -0
  32. package/lib/ponytail.js +553 -0
  33. package/lib/ponytail.js.map +1 -0
  34. package/package.json +77 -0
  35. package/skills/ponytail/SKILL.md +77 -0
  36. package/skills/ponytail-audit/SKILL.md +31 -0
  37. package/skills/ponytail-debt/SKILL.md +31 -0
  38. package/skills/ponytail-gain/SKILL.md +37 -0
  39. package/skills/ponytail-help/SKILL.md +65 -0
  40. package/skills/ponytail-review/SKILL.md +45 -0
@@ -0,0 +1,553 @@
1
+ /**
2
+ * dsh-ponytail — DSH 完整移植版 ponytail (dietrichgebert/ponytail 4.9.0)
3
+ *
4
+ * 能力全集:
5
+ * - always-on 梯子注入(systemPrompt section,随 mode 动态裁剪)
6
+ * - 6 个 skill:ponytail / ponytail-review / ponytail-audit / ponytail-debt / ponytail-gain / ponytail-help
7
+ * - 完整复刻 hooks 行为:activate / mode-tracker / subagent / config / instructions / runtime
8
+ * - 不注册空 tool,全部能力经 Skill 暴露
9
+ */
10
+ import { readdir, readFile, stat } from 'node:fs/promises';
11
+ import { readFileSync } from 'node:fs';
12
+ import { dirname, join, resolve } from 'node:path';
13
+ import { fileURLToPath } from 'node:url';
14
+ import { parse } from 'yaml';
15
+ import Schema from '@deepseek-ai/schemastery';
16
+ import { getDefaultMode, isDeactivationCommand, isShellSafe, normalizeMode, writeDefaultMode, } from './ponytail-config.js';
17
+ import { filterSkillBodyForMode, getFallbackInstructions, getMainSkillPath } from './ponytail-instructions.js';
18
+ import { clearMode, isCopilot, readMode, setMode } from './ponytail-runtime.js';
19
+ // ---------------------------------------------------------------------------
20
+ // Config — 遵循 references/config.md:Schemastery + 默认值进 schema
21
+ // ---------------------------------------------------------------------------
22
+ export const Config = Schema.object({
23
+ /** 注册到 ctx.skills 的 provider 名称 */
24
+ providerName: Schema.string().default('ponytail'),
25
+ /** skill 目录绝对路径,默认取包内 skills/ */
26
+ skillDir: Schema.string(),
27
+ /** 默认强度,off 则不自动激活 */
28
+ defaultMode: Schema.union(['off', 'lite', 'full', 'ultra']).default('full'),
29
+ /** 是否隐藏状态提示(兼容上游 hideStatus) */
30
+ hideStatus: Schema.boolean().default(false),
31
+ /** 是否静默启动提示 */
32
+ quietStartup: Schema.boolean().default(false),
33
+ });
34
+ // ---------------------------------------------------------------------------
35
+ // 插件元信息
36
+ // ---------------------------------------------------------------------------
37
+ export const name = 'ponytail';
38
+ export const inject = ['skills', 'systemPrompt'];
39
+ // ---------------------------------------------------------------------------
40
+ // 工具函数(与 superpowers 同款健壮版)
41
+ // ---------------------------------------------------------------------------
42
+ const SKILL_NAME_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
43
+ const PONYTAIL_RANK = 550;
44
+ function isSkillName(v) {
45
+ return SKILL_NAME_RE.test(v);
46
+ }
47
+ function stringField(data, key) {
48
+ const v = data[key];
49
+ return typeof v === 'string' && v.length > 0 ? v : undefined;
50
+ }
51
+ function optionalString(data, key) {
52
+ const v = data[key];
53
+ return typeof v === 'string' && v.length > 0 ? { [key]: v } : {};
54
+ }
55
+ function frontmatterBoolean(data, key) {
56
+ if (!Object.hasOwn(data, key))
57
+ return undefined;
58
+ const v = data[key];
59
+ if (typeof v === 'boolean')
60
+ return v;
61
+ if (v === 1 || v === '1')
62
+ return true;
63
+ if (v === 0 || v === '0')
64
+ return false;
65
+ if (typeof v === 'string') {
66
+ switch (v.toLowerCase()) {
67
+ case 'true':
68
+ case 'yes':
69
+ case 'on':
70
+ return true;
71
+ case 'false':
72
+ case 'no':
73
+ case 'off':
74
+ return false;
75
+ }
76
+ }
77
+ throw new TypeError(`frontmatter field "${key}" must be a boolean`);
78
+ }
79
+ function rejectLegacyKey(data, legacy, canonical) {
80
+ if (Object.hasOwn(data, legacy)) {
81
+ throw new Error(`frontmatter field "${legacy}" is unsupported; use "${canonical}"`);
82
+ }
83
+ }
84
+ function parseInvocationPolicy(data) {
85
+ rejectLegacyKey(data, 'disableModelInvocation', 'disable-model-invocation');
86
+ rejectLegacyKey(data, 'modelInvocable', 'disable-model-invocation');
87
+ rejectLegacyKey(data, 'userInvocable', 'user-invocable');
88
+ const disableModelInvocation = frontmatterBoolean(data, 'disable-model-invocation');
89
+ const userInvocable = frontmatterBoolean(data, 'user-invocable');
90
+ return {
91
+ modelInvocable: disableModelInvocation !== true,
92
+ userInvocable: userInvocable !== false,
93
+ };
94
+ }
95
+ function optionalMetadata(data) {
96
+ const v = data['metadata'];
97
+ if (typeof v === 'object' && v !== null && !Array.isArray(v))
98
+ return { metadata: v };
99
+ return {};
100
+ }
101
+ function findClosingFrontmatter(raw, start) {
102
+ let lineStart = start;
103
+ while (lineStart <= raw.length) {
104
+ const nl = raw.indexOf('\n', lineStart);
105
+ const lineEnd = nl < 0 ? raw.length : nl;
106
+ if (raw.slice(lineStart, lineEnd).replace(/\r$/, '') === '---') {
107
+ return { start: lineStart, bodyStart: nl < 0 ? raw.length : nl + 1 };
108
+ }
109
+ if (nl < 0)
110
+ return undefined;
111
+ lineStart = nl + 1;
112
+ }
113
+ return undefined;
114
+ }
115
+ function parseFrontmatter(raw) {
116
+ const firstNl = raw.indexOf('\n');
117
+ if (firstNl < 0)
118
+ return undefined;
119
+ if (raw.slice(0, firstNl).replace(/\r$/, '') !== '---')
120
+ return undefined;
121
+ const start = firstNl + 1;
122
+ const closing = findClosingFrontmatter(raw, start);
123
+ if (!closing)
124
+ return undefined;
125
+ const parsed = parse(raw.slice(start, closing.start));
126
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
127
+ return undefined;
128
+ return { data: parsed, body: raw.slice(closing.bodyStart) };
129
+ }
130
+ function resolveDefaultSkillDir(configSkillDir) {
131
+ if (configSkillDir)
132
+ return resolve(configSkillDir);
133
+ try {
134
+ const here = fileURLToPath(import.meta.url);
135
+ return resolve(dirname(here), '..', 'skills');
136
+ }
137
+ catch {
138
+ return resolve('skills');
139
+ }
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // SkillProvider(完整复刻上游 6 skill 的 discovery)
143
+ // ---------------------------------------------------------------------------
144
+ class PonytailProvider {
145
+ name;
146
+ skillDir;
147
+ ctx;
148
+ constructor(ctx, _control, config) {
149
+ this.ctx = ctx;
150
+ this.name = config.providerName ?? 'ponytail';
151
+ this.skillDir = resolveDefaultSkillDir(config['skillDir']);
152
+ }
153
+ async list(_options) {
154
+ const candidates = [];
155
+ let entries;
156
+ try {
157
+ entries = await readdir(this.skillDir, { withFileTypes: true });
158
+ }
159
+ catch (err) {
160
+ const code = err?.code;
161
+ if (code === 'ENOENT' || code === 'ENOTDIR') {
162
+ this.ctx.logger.warn(`[ponytail] 未找到 skill 目录:${this.skillDir}`);
163
+ return [];
164
+ }
165
+ throw err;
166
+ }
167
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
168
+ if (!entry.isDirectory())
169
+ continue;
170
+ if (entry.name.startsWith('.'))
171
+ continue;
172
+ const skillPath = join(this.skillDir, entry.name, 'SKILL.md');
173
+ try {
174
+ await stat(skillPath);
175
+ }
176
+ catch {
177
+ continue;
178
+ }
179
+ const parsed = await parseSkillFile(skillPath);
180
+ if (!parsed) {
181
+ this.ctx.logger.warn(`[ponytail] 跳过 ${entry.name}:缺少或无效的 frontmatter`);
182
+ continue;
183
+ }
184
+ const { data, body } = parsed;
185
+ const skillName = stringField(data, 'name');
186
+ const description = stringField(data, 'description');
187
+ if (!skillName || !description) {
188
+ this.ctx.logger.warn(`[ponytail] 跳过 ${skillPath}:frontmatter 必须包含 name 和 description`);
189
+ continue;
190
+ }
191
+ if (!isSkillName(skillName)) {
192
+ this.ctx.logger.warn(`[ponytail] 跳过 ${skillPath}:无效的 skill 名称 "${skillName}"`);
193
+ continue;
194
+ }
195
+ if (skillName !== entry.name) {
196
+ this.ctx.logger.warn(`[ponytail] skill 名称 "${skillName}" 与目录 "${entry.name}" 不一致(以 frontmatter 为准)`);
197
+ }
198
+ let invocation;
199
+ try {
200
+ invocation = parseInvocationPolicy(data);
201
+ }
202
+ catch (e) {
203
+ this.ctx.logger.warn(`[ponytail] 跳过 ${skillPath}:${String(e)}`);
204
+ continue;
205
+ }
206
+ candidates.push({
207
+ name: skillName,
208
+ description,
209
+ ...optionalString(data, 'whenToUse'),
210
+ invocation,
211
+ source: 'bundled',
212
+ provider: this.name,
213
+ rank: PONYTAIL_RANK,
214
+ locator: { path: skillPath, directory: dirname(skillPath) },
215
+ resourceBase: { kind: 'directory', path: dirname(skillPath) },
216
+ path: skillPath,
217
+ ...optionalMetadata(data),
218
+ });
219
+ void body;
220
+ }
221
+ return candidates;
222
+ }
223
+ async get(candidate, _options) {
224
+ const locator = candidate.locator;
225
+ const raw = await readFile(locator.path, 'utf8').catch(() => undefined);
226
+ if (raw === undefined)
227
+ return undefined;
228
+ const parsed = parseFrontmatter(raw);
229
+ if (!parsed)
230
+ return undefined;
231
+ const data = parsed.data;
232
+ const skillName = stringField(data, 'name');
233
+ const description = stringField(data, 'description');
234
+ if (!skillName || !description)
235
+ return undefined;
236
+ if (skillName !== candidate.name)
237
+ return undefined;
238
+ let invocation;
239
+ try {
240
+ invocation = parseInvocationPolicy(data);
241
+ }
242
+ catch {
243
+ return undefined;
244
+ }
245
+ return {
246
+ name: skillName,
247
+ description,
248
+ ...optionalString(data, 'whenToUse'),
249
+ invocation,
250
+ source: 'bundled',
251
+ provider: this.name,
252
+ resourceBase: { kind: 'directory', path: locator.directory },
253
+ path: locator.path,
254
+ ...optionalMetadata(data),
255
+ content: parsed.body.trim(),
256
+ };
257
+ }
258
+ }
259
+ async function parseSkillFile(path) {
260
+ let raw;
261
+ try {
262
+ raw = await readFile(path, 'utf8');
263
+ }
264
+ catch {
265
+ return undefined;
266
+ }
267
+ try {
268
+ const parsed = parseFrontmatter(raw);
269
+ if (!parsed)
270
+ return undefined;
271
+ return parsed;
272
+ }
273
+ catch {
274
+ return undefined;
275
+ }
276
+ }
277
+ // ---------------------------------------------------------------------------
278
+ // 插件入口
279
+ // ---------------------------------------------------------------------------
280
+ export function apply(ctx, config = {}) {
281
+ const rawConfig = config;
282
+ const resolved = {
283
+ providerName: rawConfig['providerName'] ?? 'ponytail',
284
+ ...(rawConfig['skillDir'] !== undefined ? { skillDir: rawConfig['skillDir'] } : {}),
285
+ defaultMode: rawConfig['defaultMode'] ?? 'full',
286
+ hideStatus: rawConfig['hideStatus'] ?? false,
287
+ quietStartup: rawConfig['quietStartup'] ?? false,
288
+ };
289
+ // 优先级:PONYTAIL_DEFAULT_MODE env > cordis config 的 defaultMode(显式)> 配置文件 > full
290
+ // 与上游 ponytail-config.js 的 getDefaultMode(env > file > full) 保持一致,
291
+ // 但 cordis 显式配置应夹在 env 与 file 之间
292
+ const envRaw = process.env['PONYTAIL_DEFAULT_MODE'];
293
+ const envMode = envRaw ? normalizeMode(envRaw) : null;
294
+ let initialMode;
295
+ if (envMode) {
296
+ initialMode = envMode;
297
+ }
298
+ else if (rawConfig['defaultMode'] !== undefined) {
299
+ initialMode = resolved.defaultMode ?? null;
300
+ }
301
+ else {
302
+ initialMode = getDefaultMode();
303
+ }
304
+ const skillDir = resolveDefaultSkillDir(resolved.skillDir);
305
+ const mainSkillPath = getMainSkillPath(skillDir);
306
+ let currentMode = initialMode === 'off' ? null : initialMode;
307
+ if (currentMode && currentMode !== 'off') {
308
+ try {
309
+ setMode(currentMode);
310
+ }
311
+ catch {
312
+ // best-effort
313
+ }
314
+ ctx.logger.info(`[ponytail] 已激活 — 等级:${currentMode}(skillDir: ${skillDir})`);
315
+ }
316
+ else {
317
+ try {
318
+ clearMode();
319
+ }
320
+ catch {
321
+ // best-effort
322
+ }
323
+ ctx.logger.info('[ponytail] 已关闭 — 直到 /ponytail 再次激活前不注入');
324
+ }
325
+ if (skillDir && !isShellSafe(skillDir)) {
326
+ ctx.logger.warn(`[ponytail] skillDir 包含 shell 元字符,请检查路径:${skillDir}`);
327
+ }
328
+ // SkillProvider 注册
329
+ const skills = ctx.skills;
330
+ skills.registerProvider((control) => new PonytailProvider(ctx, control, resolved));
331
+ // 类型不安全的事件监听通过 any 绕过,运行时由 cordis 校验
332
+ const anyCtx = ctx;
333
+ anyCtx.on('skills/change', (..._args) => {
334
+ ctx.logger.debug('[ponytail] 技能目录已变更');
335
+ });
336
+ // Always-on 注入:systemPrompt section,order 50 位于 persona(0) 之后
337
+ const systemPrompt = ctx.systemPrompt;
338
+ systemPrompt.section({
339
+ name: 'ponytail',
340
+ order: 50,
341
+ text: () => {
342
+ try {
343
+ const fileMode = readMode();
344
+ if (fileMode !== null && fileMode !== currentMode) {
345
+ const nm = normalizeMode(fileMode) ?? (fileMode === 'review' ? 'review' : null);
346
+ if (nm !== null || fileMode === 'review')
347
+ currentMode = fileMode;
348
+ else if (fileMode === 'off')
349
+ currentMode = null;
350
+ }
351
+ else if (fileMode === null && currentMode !== null) {
352
+ if (!isCopilot)
353
+ currentMode = null;
354
+ }
355
+ }
356
+ catch {
357
+ // ignore
358
+ }
359
+ if (!currentMode || currentMode === 'off')
360
+ return '';
361
+ if (currentMode === 'review') {
362
+ return 'PONYTAIL 已激活 — 等级:review,行为由 /ponytail-review 技能定义。';
363
+ }
364
+ try {
365
+ const raw = readFileSync(mainSkillPath, 'utf8');
366
+ return 'PONYTAIL 已激活 — 等级:' + currentMode + '\n\n' + filterSkillBodyForMode(raw, currentMode);
367
+ }
368
+ catch {
369
+ return getFallbackInstructions(currentMode);
370
+ }
371
+ },
372
+ });
373
+ // 从 UserMessage.content 提取纯文本
374
+ function extractText(messages) {
375
+ const parts = [];
376
+ for (const m of messages) {
377
+ const content = m.content;
378
+ if (typeof content === 'string') {
379
+ parts.push(content);
380
+ }
381
+ else if (Array.isArray(content)) {
382
+ for (const b of content) {
383
+ if (b && typeof b['text'] === 'string')
384
+ parts.push(b['text']);
385
+ }
386
+ }
387
+ }
388
+ return parts.join('\n').trim();
389
+ }
390
+ function handlePromptText(rawText) {
391
+ const text = String(rawText ?? '').trim();
392
+ const lower = text.toLowerCase();
393
+ if (/^[/@$]ponytail/.test(lower)) {
394
+ const parts = lower.split(/\s+/);
395
+ const cmd = (parts[0] ?? '').replace(/^[@$]/, '/');
396
+ const arg = parts[1] ?? '';
397
+ const arg2 = parts[2] ?? '';
398
+ let mode = null;
399
+ let isReportOnly = false;
400
+ let isDefaultPersist = false;
401
+ let persistMode = null;
402
+ if (cmd === '/ponytail-review' || cmd === '/ponytail:ponytail-review') {
403
+ mode = 'review';
404
+ }
405
+ else if (cmd === '/ponytail' || cmd === '/ponytail:ponytail') {
406
+ if (arg === 'default') {
407
+ isDefaultPersist = true;
408
+ persistMode = arg2;
409
+ }
410
+ else if (arg === 'lite')
411
+ mode = 'lite';
412
+ else if (arg === 'full')
413
+ mode = 'full';
414
+ else if (arg === 'ultra')
415
+ mode = 'ultra';
416
+ else if (arg === 'off')
417
+ mode = 'off';
418
+ else if (arg === '') {
419
+ isReportOnly = true;
420
+ mode = currentMode ?? getDefaultMode();
421
+ }
422
+ else {
423
+ mode = getDefaultMode();
424
+ }
425
+ }
426
+ if (isDefaultPersist) {
427
+ if (persistMode === 'off' || persistMode === 'lite' || persistMode === 'full' || persistMode === 'ultra') {
428
+ const written = writeDefaultMode(persistMode);
429
+ ctx.logger.info(`[ponytail] 默认等级已持久化:${written}`);
430
+ currentMode = persistMode;
431
+ try {
432
+ setMode(persistMode);
433
+ }
434
+ catch { }
435
+ }
436
+ return { handled: true, switched: false };
437
+ }
438
+ if (isReportOnly) {
439
+ ctx.logger.info(`[ponytail] 当前等级:${mode}`);
440
+ return { handled: true, switched: false };
441
+ }
442
+ if (mode && mode !== 'off') {
443
+ currentMode = mode;
444
+ try {
445
+ setMode(mode);
446
+ }
447
+ catch { }
448
+ ctx.logger.info(`[ponytail] 已切换 — 等级:${mode}`);
449
+ return { handled: true, switched: true };
450
+ }
451
+ if (mode === 'off') {
452
+ currentMode = null;
453
+ try {
454
+ clearMode();
455
+ }
456
+ catch { }
457
+ ctx.logger.info('[ponytail] 已关闭');
458
+ return { handled: true, switched: true };
459
+ }
460
+ return { handled: true, switched: false };
461
+ }
462
+ if (isDeactivationCommand(text)) {
463
+ currentMode = null;
464
+ try {
465
+ clearMode();
466
+ }
467
+ catch { }
468
+ ctx.logger.info('[ponytail] 已通过指令退出:' + text);
469
+ return { handled: true, switched: true };
470
+ }
471
+ return { handled: false, switched: false };
472
+ }
473
+ // 监听 agent/pre-step waterfall:模型请求前的最后拦截点(对齐上游 UserPromptSubmit)
474
+ // 必须 return next(),否则短路下游
475
+ anyCtx.on('agent/pre-step', async (...args) => {
476
+ const [payload, next] = args;
477
+ try {
478
+ const text = extractText(payload.messages);
479
+ if (text)
480
+ handlePromptText(text);
481
+ }
482
+ catch {
483
+ // best-effort,不阻断
484
+ }
485
+ return (await next());
486
+ });
487
+ // 同时监听 session/event 的 user/message,覆盖 inject 等非 pre-step 路径
488
+ anyCtx.on('session/event', (...args) => {
489
+ const [_session, event] = args;
490
+ if (event.type !== 'user/message')
491
+ return;
492
+ try {
493
+ const data = event.data;
494
+ const content = data?.content;
495
+ let text = '';
496
+ if (typeof content === 'string')
497
+ text = content;
498
+ else if (Array.isArray(content)) {
499
+ text = content
500
+ .filter((b) => b && typeof b['text'] === 'string')
501
+ .map((b) => b['text'])
502
+ .join('\n');
503
+ }
504
+ if (text)
505
+ handlePromptText(text);
506
+ }
507
+ catch {
508
+ // ignore
509
+ }
510
+ });
511
+ // agent/session-start:对齐 ponytail-activate.js 的 SessionStart 与 Qoder 首轮激活
512
+ anyCtx.on('agent/session-start', (...args) => {
513
+ const [payload] = args;
514
+ if (!currentMode || currentMode === 'off') {
515
+ try {
516
+ clearMode();
517
+ }
518
+ catch { }
519
+ return;
520
+ }
521
+ try {
522
+ setMode(currentMode);
523
+ }
524
+ catch { }
525
+ ctx.logger.debug(`[ponytail] 会话启动(${payload.source})— 等级:${currentMode}`);
526
+ });
527
+ // 子 agent 注入:对齐 ponytail-subagent.js 的 PONYTAIL_SUBAGENT_MATCHER
528
+ const subagentMatcherEnv = process.env['PONYTAIL_SUBAGENT_MATCHER'];
529
+ let subagentRe = null;
530
+ if (subagentMatcherEnv) {
531
+ try {
532
+ subagentRe = new RegExp(subagentMatcherEnv, 'i');
533
+ }
534
+ catch {
535
+ subagentRe = null;
536
+ ctx.logger.warn(`[ponytail] PONYTAIL_SUBAGENT_MATCHER 正则无效:${subagentMatcherEnv}`);
537
+ }
538
+ }
539
+ anyCtx.on('agent/created', (...args) => {
540
+ const [payload] = args;
541
+ if (!subagentRe)
542
+ return;
543
+ ctx.logger.debug(`[ponytail] 子智能体已创建:${String(payload.agent.id)} — 匹配器:${subagentMatcherEnv}`);
544
+ });
545
+ // 清理:HMR 卸载时自动通过 ctx 逆序清理所有注册;额外标记
546
+ ctx.effect(() => {
547
+ return () => {
548
+ ctx.logger.info('[ponytail] 已卸载 — provider 与 prompt 段已移除');
549
+ };
550
+ });
551
+ }
552
+ export default { name, inject, Config, apply };
553
+ //# sourceMappingURL=ponytail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ponytail.js","sourceRoot":"","sources":["../src/ponytail.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "@wenaixi/dsh-ponytail",
3
+ "version": "4.9.0",
4
+ "description": "DSH 完整移植版 dietrichgebert/ponytail — 懒惰 senior 模式,6 个中文 Skill,无空 tool",
5
+ "type": "module",
6
+ "main": "lib/ponytail.js",
7
+ "types": "lib/ponytail.d.ts",
8
+ "files": [
9
+ "lib/",
10
+ "skills/",
11
+ "assets/",
12
+ "cordis.patch.yml",
13
+ "AGENTS.md",
14
+ "README.md",
15
+ "README.en.md",
16
+ "CHANGELOG.md",
17
+ "LICENSE"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "typecheck": "tsc --noEmit",
22
+ "lint": "eslint src --ext .ts 2>&1 || echo \"(no eslint config — skipped)\"",
23
+ "verify": "node scripts/verify.mjs",
24
+ "prepublishOnly": "npm run build && npm run verify"
25
+ },
26
+ "dsh": {
27
+ "bundle": {
28
+ "patch": "./cordis.patch.yml"
29
+ }
30
+ },
31
+ "dependencies": {
32
+ "yaml": "^2.4.2"
33
+ },
34
+ "peerDependencies": {
35
+ "@deepseek-ai/cordis": "^4.0.1",
36
+ "@deepseek-ai/dsh-skill": "^0.1.1-rc.2",
37
+ "@deepseek-ai/schemastery": "^3.18.1"
38
+ },
39
+ "devDependencies": {
40
+ "@deepseek-ai/cordis": "^4.0.1",
41
+ "@deepseek-ai/dsh-skill": "^0.1.1-rc.2",
42
+ "@deepseek-ai/schemastery": "^3.18.1",
43
+ "typescript": "^5.6.0",
44
+ "@types/node": "^22.0.0"
45
+ },
46
+ "license": "MIT",
47
+ "author": {
48
+ "name": "Dietrich Gebert",
49
+ "url": "https://github.com/DietrichGebert"
50
+ },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/Wenaixi/dsh-ponytail.git"
54
+ },
55
+ "homepage": "https://github.com/Wenaixi/dsh-ponytail#readme",
56
+ "bugs": {
57
+ "url": "https://github.com/Wenaixi/dsh-ponytail/issues"
58
+ },
59
+ "keywords": [
60
+ "dsh",
61
+ "dsh-plugin",
62
+ "deepseek-harness",
63
+ "ponytail",
64
+ "yagni",
65
+ "skills",
66
+ "agent-skills",
67
+ "claude-code",
68
+ "lazy",
69
+ "over-engineering"
70
+ ],
71
+ "engines": {
72
+ "node": ">=18"
73
+ },
74
+ "publishConfig": {
75
+ "access": "public"
76
+ }
77
+ }