@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.
@@ -13,7 +13,7 @@ export function filterSkillBodyForMode(body, mode) {
13
13
  if (labelMode)
14
14
  return labelMode === effectiveMode;
15
15
  }
16
- // 中文化正文用「」与中文冒号,上游 ASCII 引号正则失配;兼容两种形态
16
+ // 上游正文用 ASCII 引号,本仓历史中文版用「」与中文冒号;两种形态都要能识别
17
17
  const exampleLabel = line.match(/^-\s*([^:]+)(?::|:)\s*["「]/);
18
18
  if (exampleLabel) {
19
19
  const labelMode = normalizeMode(exampleLabel[1].trim());
@@ -26,38 +26,38 @@ export function filterSkillBodyForMode(body, mode) {
26
26
  }
27
27
  export function getFallbackInstructions(mode) {
28
28
  const m = mode;
29
- return ('PONYTAIL 已激活 \u2014 等级:' +
29
+ return ('PONYTAIL active - level: ' +
30
30
  m +
31
31
  '\n\n' +
32
- '你是一位懒惰的资深工程师,懒惰意味着高效,而不是马虎。最好的代码就是没写的代码。\n\n' +
33
- '## 持久化\n\n' +
34
- '每一次回复都生效,不会退化。仅在「stop ponytail / 正常模式」时关闭。\n\n' +
35
- '当前等级:**' +
32
+ 'You are a lazy senior developer. Lazy means efficient, not careless. The best code is the code never written.\n\n' +
33
+ '## Persistence\n\n' +
34
+ 'ACTIVE EVERY RESPONSE. Off only: "stop ponytail" / "normal mode".\n\n' +
35
+ 'Current level: **' +
36
36
  m +
37
- '**,切换方式:`/ponytail lite|full|ultra`。\n\n' +
38
- '## 梯子\n\n' +
39
- '写代码前,先站在第一个站得住的横档上(先理解问题,再选解法):\n' +
40
- '1. 这东西真的需要存在吗?(YAGNI)\n' +
41
- '2. 代码库里已经有了吗?直接复用,不要重写。\n' +
42
- '3. 标准库能做吗?用标准库。\n' +
43
- '4. 平台原生能力能覆盖吗?用原生。\n' +
44
- '5. 已安装的依赖能解决吗?用它。\n' +
45
- '6. 能用一行写完吗?就写一行。\n' +
46
- '7. 只有到这里:再写能工作的最小代码。\n\n' +
47
- '修 Bug = 修根因:先 grep 要改函数的所有调用方,在共享函数里修一次,而不是在每个调用方各打一个补丁。\n\n' +
48
- '## 规则\n\n' +
49
- '不做未被要求的抽象,不引入可避免的依赖,不写没人要的样板。删除优于新增,无聊优于巧妙,文件数越少越好。' +
50
- '先给懒人版,并在同一条回复里追问复杂需求是否真的需要。两个等大的标准库方案选边界更正确的那个。' +
51
- '有意简化的已知天花板用 `ponytail:` 注释标出天花板和升级路径。\n\n' +
52
- '## 输出\n\n' +
53
- '先给代码,再用最多三行短句说明跳过了什么、何时再加。若解释比代码还长,删掉解释。用户明确要求的解释请完整给出。\n\n' +
54
- '## 何时不要偷懒\n\n' +
55
- '永远不要为偷懒而简化掉:对问题的完整理解、信任边界的输入校验、防止数据丢失的错误处理、安全、无障碍、硬件所需的校准、用户明确要求保留的内容。' +
56
- '非平凡逻辑留下一个可运行的最小校验(基于 assert 的自检或单个小测试文件),平凡的一行不需要测试。\n\n' +
57
- '## 边界\n\n' +
58
- 'Ponytail 管的是怎么构建,而不是怎么说话。「stop ponytail / 正常模式」即退出,等级保持到被修改或会话结束。');
37
+ '**. Switch: `/ponytail lite|full|ultra`.\n\n' +
38
+ '## The ladder\n\n' +
39
+ 'Stop at the first rung that holds (understand the problem first, then pick):\n' +
40
+ '1. Does this need to exist at all? (YAGNI)\n' +
41
+ '2. Already in this codebase? Reuse it, do not re-write.\n' +
42
+ '3. Stdlib does it? Use the stdlib.\n' +
43
+ '4. Native platform feature covers it? Use native.\n' +
44
+ '5. Already-installed dependency solves it? Use it.\n' +
45
+ '6. Can it be one line? One line.\n' +
46
+ '7. Only then: the minimum code that works.\n\n' +
47
+ 'Bug fix = root cause: grep every caller of the function you are about to change, fix it once in the shared place instead of patching each caller.\n\n' +
48
+ '## Rules\n\n' +
49
+ 'No unrequested abstractions, no avoidable dependencies, no boilerplate nobody asked for. Deletion over addition, boring over clever, fewest files possible. ' +
50
+ 'Ship the lazy version and question complex requests in the same response. Between two same-size stdlib options, take the one that is correct on edge cases. ' +
51
+ 'Mark deliberate simplifications with a known ceiling using a `ponytail:` comment naming the ceiling and upgrade path.\n\n' +
52
+ '## Output\n\n' +
53
+ 'Code first, then at most three short lines: what was skipped, when to add it. If the explanation is longer than the code, delete it. Give in full any explanation the user explicitly asked for.\n\n' +
54
+ '## When NOT to be lazy\n\n' +
55
+ 'Never simplify away: understanding the problem, input validation at trust boundaries, error handling that prevents data loss, security, accessibility, hardware calibration, anything explicitly requested. ' +
56
+ 'Non-trivial logic leaves one runnable check (an assert-based self-check or one small test file); a trivial one-liner needs no test.\n\n' +
57
+ '## Boundaries\n\n' +
58
+ 'Ponytail governs what you build, not how you talk. "stop ponytail" / "normal mode" reverts; the level persists until changed or session end.');
59
59
  }
60
- // 兼容旧路径解析:给定 skillDir 返回主技能路径
60
+ // 路径解析:给定 skillDir 返回主技能路径
61
61
  export function getMainSkillPath(skillDir) {
62
62
  return join(skillDir, 'ponytail', 'SKILL.md');
63
63
  }
@@ -71,11 +71,11 @@ const INDEPENDENT_MODES = new Set(['review']);
71
71
  */
72
72
  export function render(skillDir, mode) {
73
73
  if (INDEPENDENT_MODES.has(mode)) {
74
- return 'PONYTAIL 已激活 — 等级:' + mode + ',行为由 /ponytail-' + mode + ' 技能定义。';
74
+ return 'PONYTAIL active - level: ' + mode + '. Behavior is defined by the /ponytail-' + mode + ' skill.';
75
75
  }
76
76
  try {
77
77
  const raw = readFileSync(getMainSkillPath(skillDir), 'utf8');
78
- return 'PONYTAIL 已激活 — 等级:' + mode + '\n\n' + filterSkillBodyForMode(raw, mode);
78
+ return 'PONYTAIL active - level: ' + mode + '\n\n' + filterSkillBodyForMode(raw, mode);
79
79
  }
80
80
  catch {
81
81
  return getFallbackInstructions(mode);
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-instructions.js","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ponytail-instructions.js","sourceRoot":"","sources":["../src/ponytail-instructions.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * 回答一个用户反复踩的问题:「我在界面上点了等级,为什么没反应?」
5
5
  * 根因永远是某一级更高优先级的配置把界面写入的值盖掉了。
6
6
  * 本模块把「哪一级在说话」从 apply() 与 HTTP 路由里剥出来,
7
- * 由宿主一次读齐四个来源的真值后传入,产出可直接渲染的诊断链。
7
+ * 由宿主一次读齐三个来源的真值后传入,产出可直接渲染的诊断链。
8
8
  *
9
9
  * 设计约束:纯函数,不读文件、不读环境变量。
10
10
  * 所有外部事实由调用方读好后传入,因此单测无需触碰磁盘与环境变量,
@@ -43,7 +43,7 @@ export interface PriorityReport {
43
43
  effective: RuntimeMode;
44
44
  }
45
45
  /**
46
- * 解析四级优先级链,得出最终生效档与每一级的命中/被覆盖/问题状态。
46
+ * 解析三级优先级链,得出最终生效档与每一级的命中/被覆盖/问题状态。
47
47
  *
48
48
  * @param input.envRaw - 环境变量 PONYTAIL_DEFAULT_MODE 的原始值;undefined 表示未设置
49
49
  * @param input.patchMode - cordis.patch.yml 显式声明的 defaultMode;undefined 表示未声明
@@ -4,7 +4,7 @@
4
4
  * 回答一个用户反复踩的问题:「我在界面上点了等级,为什么没反应?」
5
5
  * 根因永远是某一级更高优先级的配置把界面写入的值盖掉了。
6
6
  * 本模块把「哪一级在说话」从 apply() 与 HTTP 路由里剥出来,
7
- * 由宿主一次读齐四个来源的真值后传入,产出可直接渲染的诊断链。
7
+ * 由宿主一次读齐三个来源的真值后传入,产出可直接渲染的诊断链。
8
8
  *
9
9
  * 设计约束:纯函数,不读文件、不读环境变量。
10
10
  * 所有外部事实由调用方读好后传入,因此单测无需触碰磁盘与环境变量,
@@ -31,7 +31,7 @@ const PROBLEMS = {
31
31
  fallback: '',
32
32
  };
33
33
  /**
34
- * 解析四级优先级链,得出最终生效档与每一级的命中/被覆盖/问题状态。
34
+ * 解析三级优先级链,得出最终生效档与每一级的命中/被覆盖/问题状态。
35
35
  *
36
36
  * @param input.envRaw - 环境变量 PONYTAIL_DEFAULT_MODE 的原始值;undefined 表示未设置
37
37
  * @param input.patchMode - cordis.patch.yml 显式声明的 defaultMode;undefined 表示未声明
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * ponytail-remote — 只读推导值的官方跨端通道
3
3
  *
4
- * 迁移到官方配置组合后,可持久化字段(defaultMode、disabledSkills)由 Cordis Config 的
5
- * volatile 字段承载,官方表单负责读写;但「优先级诊断链」与「当前生效等级」是**运行时推导值**,
6
- * 不是配置——它们由环境变量、profile 补丁与内置兜底三层按优先级合并得出,
4
+ * 迁移到官方配置组合后,可持久化字段(defaultMode、disabledSkills、skillDescriptionLang)由
5
+ * Cordis Config 的 volatile 字段承载,官方表单负责读写;但「优先级诊断链」与「当前生效等级」
6
+ * 是**运行时推导值**,不是配置——它们由环境变量、profile 补丁与内置兜底三层按优先级合并得出,
7
7
  * 写进配置层等于让缓存永久盖住真值(env 只有进程重启才变,落盘反而会遮蔽新值)。
8
8
  *
9
9
  * 因此这两个值走 DSH 官方的 Typert 通道下发,而不是自制 HTTP:
@@ -12,29 +12,38 @@
12
12
  * 无需在任何注册表里登记;
13
13
  * - 浏览器侧以 `ctx.remote.ponytail.snapshot()` 调用,走已有的 RPC 载体。
14
14
  *
15
- * 本模块同时承载技能元数据读取(SKILL.md frontmatter 为唯一真源),
16
- * 原先它挂在 HTTP 端点上,删除 HTTP 后由这里继续提供。
15
+ * 技能描述的语言也在这个通道上:模型目录与配置面板消费的是同一个字符串,
16
+ * 由配置决定下哪一套,缓存的构建期常量会让切换停在旧语言。
17
17
  */
18
18
  import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
19
19
  import type { Context } from '@deepseek-ai/cordis';
20
20
  import type { PriorityReport } from './ponytail-priority.js';
21
+ /** 技能描述的语言。与 Config.skillDescriptionLang 同一取值域。 */
22
+ export type SkillLang = 'zh' | 'en';
21
23
  export interface SkillMeta {
22
24
  id: string;
23
25
  name: string;
24
26
  description: string;
25
27
  }
26
28
  /**
27
- * 从 skills/ 目录读取全部技能元数据(SKILL.md frontmatter 为唯一真源)。
28
- * 不按禁用状态过滤——面板需要展示全部 6 项(enabled 由 state.isSkillEnabled 标记)。
29
- * 目录/文件不可读时回退 FALLBACK_SKILL_META(不抛错)。
29
+ * 从包内描述文件读取技能元数据;文件不可读或缺项时回退短描述。
30
+ *
31
+ * lang 缺省或非法一律按 zh 处理:调用方(面板、Provider)读的是配置值,
32
+ * 而配置可能来自手写的补丁,不保证取值域干净。
30
33
  */
31
- export declare function readSkillMeta(skillDirPath: string): SkillMeta[];
34
+ export declare function readSkillMeta(lang?: SkillLang): SkillMeta[];
35
+ /** 读 skills/descriptions.<lang>.json;不可读返回 null 由调用方回退。 */
36
+ export declare function readSkillDescriptions(lang?: SkillLang): Record<string, string> | null;
32
37
  /** 跨端下发的只读快照:形状必须是 lossless JSON(typert-protocol 的 isRemoteJsonValue) */
33
38
  export interface PonytailRemoteSnapshot {
34
39
  /** 当前会话生效的等级(null 表示关闭,序列化为字符串 'off') */
35
40
  currentMode: string;
36
- /** 四级优先级诊断链 */
41
+ /** 三级优先级诊断链 */
37
42
  priority: PriorityReport;
43
+ /** 技能描述语言(与配置同源,面板据此展示) */
44
+ skillLang: SkillLang;
45
+ /** 6 个技能元数据,描述已按 skillLang 取好 */
46
+ skills: SkillMeta[];
38
47
  }
39
48
  export interface PonytailRemoteDeps {
40
49
  snapshot(): PonytailRemoteSnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-remote.d.ts","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAiB5D,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE;AAiB5E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,CAgB/D;AAED,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe;IACf,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,IAAI,sBAAsB,CAAA;CACnC;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;gBAE7B,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB;IAMlD,QAAQ,IAAI,sBAAsB;CAGnC"}
1
+ {"version":3,"file":"ponytail-remote.d.ts","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AAiCnC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAQ3D;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBrF;AAED,yEAAyE;AACzE,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe;IACf,QAAQ,EAAE,cAAc,CAAA;IACxB,2BAA2B;IAC3B,SAAS,EAAE,SAAS,CAAA;IACpB,iCAAiC;IACjC,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,IAAI,sBAAsB,CAAA;CACnC;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;gBAE7B,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB;IAMlD,QAAQ,IAAI,sBAAsB;CAGnC"}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * ponytail-remote — 只读推导值的官方跨端通道
3
3
  *
4
- * 迁移到官方配置组合后,可持久化字段(defaultMode、disabledSkills)由 Cordis Config 的
5
- * volatile 字段承载,官方表单负责读写;但「优先级诊断链」与「当前生效等级」是**运行时推导值**,
6
- * 不是配置——它们由环境变量、profile 补丁与内置兜底三层按优先级合并得出,
4
+ * 迁移到官方配置组合后,可持久化字段(defaultMode、disabledSkills、skillDescriptionLang)由
5
+ * Cordis Config 的 volatile 字段承载,官方表单负责读写;但「优先级诊断链」与「当前生效等级」
6
+ * 是**运行时推导值**,不是配置——它们由环境变量、profile 补丁与内置兜底三层按优先级合并得出,
7
7
  * 写进配置层等于让缓存永久盖住真值(env 只有进程重启才变,落盘反而会遮蔽新值)。
8
8
  *
9
9
  * 因此这两个值走 DSH 官方的 Typert 通道下发,而不是自制 HTTP:
@@ -12,8 +12,8 @@
12
12
  * 无需在任何注册表里登记;
13
13
  * - 浏览器侧以 `ctx.remote.ponytail.snapshot()` 调用,走已有的 RPC 载体。
14
14
  *
15
- * 本模块同时承载技能元数据读取(SKILL.md frontmatter 为唯一真源),
16
- * 原先它挂在 HTTP 端点上,删除 HTTP 后由这里继续提供。
15
+ * 技能描述的语言也在这个通道上:模型目录与配置面板消费的是同一个字符串,
16
+ * 由配置决定下哪一套,缓存的构建期常量会让切换停在旧语言。
17
17
  */
18
18
  var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
19
19
  var useValue = arguments.length > 2;
@@ -49,60 +49,63 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
49
49
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
50
50
  done = true;
51
51
  };
52
- import { readFileSync, readdirSync } from 'node:fs';
53
- import { join } from 'node:path';
54
- import { parse as parseYaml } from 'yaml';
52
+ import { readFileSync } from 'node:fs';
55
53
  import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
56
- // 兜底元数据:仅当 frontmatter 目录不可读时使用(正常路径以 SKILL.md 为唯一真源,
57
- // 见 readSkillMeta)。与客户端构建期快照同源,防目录不可读时面板空白。
58
- const FALLBACK_SKILL_META = [
59
- { id: 'ponytail', name: 'ponytail', description: '懒人模式本体:3 档强度,梯子七阶注入' },
60
- { id: 'ponytail-review', name: 'ponytail-review', description: '过度设计评审:只挑能删的代码,一行一条' },
61
- { id: 'ponytail-audit', name: 'ponytail-audit', description: '全仓过度设计审计:按可删行数降序猎取臃肿' },
62
- { id: 'ponytail-debt', name: 'ponytail-debt', description: '债务台账收割:收割所有 ponytail: 注释,建立债务台账' },
63
- { id: 'ponytail-gain', name: 'ponytail-gain', description: '收益看板:展示 benchmark 中位数收益' },
64
- { id: 'ponytail-help', name: 'ponytail-help', description: '速查卡:模式、技能、命令与配置速查' },
65
- ];
66
- function parseSkillFrontmatter(filePath) {
67
- try {
68
- const raw = readFileSync(filePath, 'utf8').replace(/^\uFEFF/, '').replace(/\r\n/g, '\n');
69
- if (!raw.startsWith('---\n'))
70
- return null;
71
- const end = raw.indexOf('\n---\n');
72
- if (end < 0)
73
- return null;
74
- const fm = parseYaml(raw.slice(4, end));
75
- if (typeof fm !== 'object' || fm === null || Array.isArray(fm))
76
- return null;
77
- const desc = fm['description'];
78
- return { description: typeof desc === 'string' ? desc : undefined };
79
- }
80
- catch {
81
- return null;
82
- }
83
- }
54
+ /** 技能 id 列表与描述的唯一真源:skills/descriptions.{lang}.json */
55
+ const SKILL_IDS = ['ponytail', 'ponytail-review', 'ponytail-audit', 'ponytail-debt', 'ponytail-gain', 'ponytail-help'];
56
+ /**
57
+ * 短描述兜底:描述文件不可读时用(模型目录与面板至少有一行说明,不至于空白)。
58
+ * 完整描述在 skills/descriptions.{lang}.json,不在此重复。
59
+ */
60
+ const FALLBACK_DESCRIPTION = {
61
+ zh: {
62
+ 'ponytail': '懒人模式本体:7 阶梯子,lite/full/ultra 三档强度',
63
+ 'ponytail-review': '过度设计评审:只挑能删的代码,一行一条',
64
+ 'ponytail-audit': '全仓过度设计审计:按可删行数降序猎取臃肿',
65
+ 'ponytail-debt': '收割 ponytail: 注释列成债务台账',
66
+ 'ponytail-gain': '收益看板:benchmark 中位数实测收益',
67
+ 'ponytail-help': '速查卡:模式、技能与命令',
68
+ },
69
+ en: {
70
+ 'ponytail': 'Lazy senior dev mode: seven-rung ladder, lite/full/ultra',
71
+ 'ponytail-review': 'Over-engineering review: only what can be deleted',
72
+ 'ponytail-audit': 'Whole-repo audit for over-engineering, ranked by cut size',
73
+ 'ponytail-debt': 'Harvest ponytail: shortcut comments into a debt ledger',
74
+ 'ponytail-gain': 'Measured-impact scoreboard from benchmark medians',
75
+ 'ponytail-help': 'Quick reference: modes, skills, commands',
76
+ },
77
+ };
84
78
  /**
85
- * 从 skills/ 目录读取全部技能元数据(SKILL.md frontmatter 为唯一真源)。
86
- * 不按禁用状态过滤——面板需要展示全部 6 项(enabled 由 state.isSkillEnabled 标记)。
87
- * 目录/文件不可读时回退 FALLBACK_SKILL_META(不抛错)。
79
+ * 从包内描述文件读取技能元数据;文件不可读或缺项时回退短描述。
80
+ *
81
+ * lang 缺省或非法一律按 zh 处理:调用方(面板、Provider)读的是配置值,
82
+ * 而配置可能来自手写的补丁,不保证取值域干净。
88
83
  */
89
- export function readSkillMeta(skillDirPath) {
90
- let names = [];
84
+ export function readSkillMeta(lang) {
85
+ const safeLang = lang === 'en' ? 'en' : 'zh';
86
+ const text = readSkillDescriptions(safeLang);
87
+ return SKILL_IDS.map((id) => ({
88
+ id,
89
+ name: id,
90
+ description: text?.[id] ?? FALLBACK_DESCRIPTION[safeLang][id] ?? id,
91
+ }));
92
+ }
93
+ /** 读 skills/descriptions.<lang>.json;不可读返回 null 由调用方回退。 */
94
+ export function readSkillDescriptions(lang) {
91
95
  try {
92
- names = readdirSync(skillDirPath, { withFileTypes: true })
93
- .filter((d) => d.isDirectory() && !d.name.startsWith('.'))
94
- .map((d) => d.name)
95
- .sort();
96
+ const raw = readFileSync(new URL(`../skills/descriptions.${lang === 'en' ? 'en' : 'zh'}.json`, import.meta.url), 'utf8').replace(/^\uFEFF/, '');
97
+ const parsed = JSON.parse(raw);
98
+ const out = {};
99
+ for (const id of SKILL_IDS) {
100
+ const value = parsed[id];
101
+ if (typeof value === 'string' && value.length > 0)
102
+ out[id] = value;
103
+ }
104
+ return Object.keys(out).length === SKILL_IDS.length ? out : null;
96
105
  }
97
106
  catch {
98
- return FALLBACK_SKILL_META.map((m) => ({ ...m }));
99
- }
100
- const metas = [];
101
- for (const name of names) {
102
- const fm = parseSkillFrontmatter(join(skillDirPath, name, 'SKILL.md'));
103
- metas.push({ id: name, name, description: fm?.description ?? name });
107
+ return null;
104
108
  }
105
- return metas.length > 0 ? metas : FALLBACK_SKILL_META.map((m) => ({ ...m }));
106
109
  }
107
110
  /**
108
111
  * 远程服务:只暴露 snapshot 一个只读端点。
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-remote.js","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ponytail-remote.js","sourceRoot":"","sources":["../src/ponytail-remote.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  * 事件监听,注册处一行构造调用。
9
9
  *
10
10
  * 边界:skillDir 由 entry 解析后传入(config.skillDir 的优先级归 entry 模块)。
11
+ * 描述语言由 getDescriptionLang 闭包现读,来源 skills/descriptions.{lang}.json。
11
12
  * 与 @deepseek-ai/dsh-skill 的关系:实现其 SkillProvider 接口;
12
13
  * 字段以该包 lib/types/index.d.ts 的生成类型为准。
13
14
  */
@@ -19,11 +20,20 @@ export declare class PonytailProvider implements SkillProvider {
19
20
  private readonly ctx;
20
21
  private readonly control;
21
22
  private readonly isSkillEnabled?;
23
+ /** 当前配置要求的描述语言;每次求值现读 volatile 引用,不缓存 */
24
+ private readonly getDescriptionLang?;
22
25
  constructor(ctx: Context, control: SkillProviderControl, options: {
23
26
  providerName?: string;
24
27
  skillDir: string;
25
28
  isSkillEnabled?: (name: string) => boolean;
29
+ getDescriptionLang?: () => 'zh' | 'en';
26
30
  });
31
+ /**
32
+ * 当前语言的描述表;描述文件不可读时返回 null,调用方回退 frontmatter 里的英文。
33
+ * 每次现读:配置改动经 loader/volatile-update 就地更新引用并触发目录失效,
34
+ * 缓存表会让切换停在旧语言。
35
+ */
36
+ private descriptions;
27
37
  invalidate(): void;
28
38
  list(options: SkillLookupOptions): Promise<readonly SkillCandidate[] | SkillProviderObservation>;
29
39
  get(candidate: SkillCandidate, options: SkillLookupOptions): Promise<SkillDefinition | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-skills.d.ts","sourceRoot":"","sources":["../src/ponytail-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAmK/B,qBAAa,gBAAiB,YAAW,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA2B;gBAGzD,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE;IASlG,UAAU,IAAI,IAAI;IAQZ,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,GAAG,wBAAwB,CAAC;IAyDhG,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;CA0BxG"}
1
+ {"version":3,"file":"ponytail-skills.d.ts","sourceRoot":"","sources":["../src/ponytail-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAuK/B,qBAAa,gBAAiB,YAAW,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA2B;IAC3D,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAmB;gBAGrD,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,QAAQ,EAAE,MAAM,CAAA;QAChB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;QAC1C,kBAAkB,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;KACvC;IAUH;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAIpB,UAAU,IAAI,IAAI;IAQZ,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,GAAG,wBAAwB,CAAC;IA+DhG,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;CAgCxG"}
@@ -8,12 +8,14 @@
8
8
  * 事件监听,注册处一行构造调用。
9
9
  *
10
10
  * 边界:skillDir 由 entry 解析后传入(config.skillDir 的优先级归 entry 模块)。
11
+ * 描述语言由 getDescriptionLang 闭包现读,来源 skills/descriptions.{lang}.json。
11
12
  * 与 @deepseek-ai/dsh-skill 的关系:实现其 SkillProvider 接口;
12
13
  * 字段以该包 lib/types/index.d.ts 的生成类型为准。
13
14
  */
14
15
  import { readdir, readFile } from 'node:fs/promises';
15
16
  import { dirname, join } from 'node:path';
16
17
  import { parse } from 'yaml';
18
+ import { readSkillDescriptions } from './ponytail-remote.js';
17
19
  const SKILL_NAME_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
18
20
  const PONYTAIL_RANK = 550;
19
21
  function isSkillName(v) {
@@ -126,11 +128,14 @@ async function parseSkillFile(path, signal) {
126
128
  /**
127
129
  * 私有组装流水线:从 frontmatter 提取并验证公共基础字段。
128
130
  * 校验失败或格式非法时抛出 Error,由外层根据上下文决定记录日志或静默处理。
131
+ *
132
+ * 描述不在这里决定:SKILL.md 的 frontmatter 只保留英文原文(上游真源),
133
+ * 中文描述在 skills/descriptions.zh.json,由 Provider 按配置选择下发哪一套。
134
+ * frontmatter 的 description 因此只作为「文件可解析」的存在性校验与缺项兜底。
129
135
  */
130
- function assembleSkillBase(data, filePath, providerName) {
136
+ function assembleSkillBase(data, filePath, providerName, description) {
131
137
  const name = readString(data, 'name');
132
- const description = readString(data, 'description');
133
- if (!name || !description) {
138
+ if (!name || !readString(data, 'description')) {
134
139
  throw new Error('frontmatter 必须包含 name 和 description');
135
140
  }
136
141
  if (!isSkillName(name)) {
@@ -157,12 +162,23 @@ export class PonytailProvider {
157
162
  ctx;
158
163
  control;
159
164
  isSkillEnabled;
165
+ /** 当前配置要求的描述语言;每次求值现读 volatile 引用,不缓存 */
166
+ getDescriptionLang;
160
167
  constructor(ctx, control, options) {
161
168
  this.ctx = ctx;
162
169
  this.control = control;
163
170
  this.name = options.providerName ?? 'ponytail';
164
171
  this.skillDir = options.skillDir;
165
172
  this.isSkillEnabled = options.isSkillEnabled;
173
+ this.getDescriptionLang = options.getDescriptionLang;
174
+ }
175
+ /**
176
+ * 当前语言的描述表;描述文件不可读时返回 null,调用方回退 frontmatter 里的英文。
177
+ * 每次现读:配置改动经 loader/volatile-update 就地更新引用并触发目录失效,
178
+ * 缓存表会让切换停在旧语言。
179
+ */
180
+ descriptions() {
181
+ return readSkillDescriptions(this.getDescriptionLang?.() ?? 'zh');
166
182
  }
167
183
  invalidate() {
168
184
  try {
@@ -206,9 +222,10 @@ export class PonytailProvider {
206
222
  this.ctx.logger.warn(`[ponytail] 跳过 ${entry.name}:缺少或无效的 frontmatter`);
207
223
  continue;
208
224
  }
225
+ const descriptions = this.descriptions();
209
226
  let base;
210
227
  try {
211
- base = assembleSkillBase(parsed.data, skillPath, this.name);
228
+ base = assembleSkillBase(parsed.data, skillPath, this.name, descriptions?.[entry.name] ?? readString(parsed.data, 'description'));
212
229
  }
213
230
  catch (err) {
214
231
  this.ctx.logger.warn(`[ponytail] 跳过 ${skillPath}:${err.message}`);
@@ -243,7 +260,8 @@ export class PonytailProvider {
243
260
  return undefined;
244
261
  let base;
245
262
  try {
246
- base = assembleSkillBase(parsed.data, targetPath, this.name);
263
+ const descriptions = this.descriptions();
264
+ base = assembleSkillBase(parsed.data, targetPath, this.name, descriptions?.[candidate.name] ?? readString(parsed.data, 'description'));
247
265
  }
248
266
  catch {
249
267
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail-skills.js","sourceRoot":"","sources":["../src/ponytail-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ponytail-skills.js","sourceRoot":"","sources":["../src/ponytail-skills.ts"],"names":[],"mappings":"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"}
package/lib/ponytail.d.ts CHANGED
@@ -16,11 +16,13 @@ export declare const Config: Schema<Schemastery.ObjectS<NoInfer<{
16
16
  skillDir: Schema<string, string, "plain">;
17
17
  defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
18
18
  disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
19
+ skillDescriptionLang: Schema<"zh" | "en", "zh" | "en", "volatile-defined">;
19
20
  }>>, Schemastery.ObjectT<NoInfer<{
20
21
  providerName: Schema<string, string, "defined">;
21
22
  skillDir: Schema<string, string, "plain">;
22
23
  defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
23
24
  disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
25
+ skillDescriptionLang: Schema<"zh" | "en", "zh" | "en", "volatile-defined">;
24
26
  }>>, "plain">;
25
27
  export declare const name = "ponytail";
26
28
  export declare const inject: readonly ["skills", "systemPrompt"];
@@ -33,11 +35,13 @@ declare const _default: {
33
35
  skillDir: Schema<string, string, "plain">;
34
36
  defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
35
37
  disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
38
+ skillDescriptionLang: Schema<"zh" | "en", "zh" | "en", "volatile-defined">;
36
39
  }>>, Schemastery.ObjectT<NoInfer<{
37
40
  providerName: Schema<string, string, "defined">;
38
41
  skillDir: Schema<string, string, "plain">;
39
42
  defaultMode: Schema<"full" | "off" | "lite" | "ultra", "full" | "off" | "lite" | "ultra", "volatile">;
40
43
  disabledSkills: Schema<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
44
+ skillDescriptionLang: Schema<"zh" | "en", "zh" | "en", "volatile-defined">;
41
45
  }>>, "plain">;
42
46
  apply: typeof apply;
43
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ponytail.d.ts","sourceRoot":"","sources":["../src/ponytail.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAkB7B,MAAM,MAAM,MAAM,GAAG,cAAc,CAAA;AAInC,eAAO,MAAM,MAAM;;;;;;;;;;aAgBjB,CAAA;AAMF,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B,eAAO,MAAM,MAAM,qCAAsC,CAAA;AA0DzD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAqB,GAAG,IAAI,CA+QvE;;;;;;;;;;;;;;;;;AAED,wBAA8C"}
1
+ {"version":3,"file":"ponytail.d.ts","sourceRoot":"","sources":["../src/ponytail.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAkB7B,MAAM,MAAM,MAAM,GAAG,cAAc,CAAA;AAInC,eAAO,MAAM,MAAM;;;;;;;;;;;;aAmBjB,CAAA;AAMF,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B,eAAO,MAAM,MAAM,qCAAsC,CAAA;AA0DzD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAqB,GAAG,IAAI,CAoSvE;;;;;;;;;;;;;;;;;;;AAED,wBAA8C"}