spec-wave 2.1.1

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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +327 -0
  3. package/README.zh-CN.md +327 -0
  4. package/RELEASING.md +52 -0
  5. package/assets/README.md +30 -0
  6. package/assets/ci/samples/README.md +76 -0
  7. package/assets/ci/samples/hgm-ingest.yml.example +42 -0
  8. package/assets/ci/samples/lint-wiki-delta.pin.yml.example +47 -0
  9. package/assets/ci/samples/lint-wiki-delta.yml.example +49 -0
  10. package/assets/ci/samples/pytest.yml.example +49 -0
  11. package/assets/ci/samples/quality.yml.example +56 -0
  12. package/assets/ci/samples/skills-validate.yml.example +38 -0
  13. package/assets/ci/samples/tech-graph.yml.example +55 -0
  14. package/assets/coding_wiki/templates/README.md +115 -0
  15. package/assets/coding_wiki/templates/_index.md +19 -0
  16. package/assets/coding_wiki/templates/context.md +18 -0
  17. package/assets/coding_wiki/templates/stable.md +26 -0
  18. package/assets/coding_wiki/templates/topics/wiki_layout.md +13 -0
  19. package/assets/coding_wiki/templates/topics/wikilinks_export.md +13 -0
  20. package/assets/coding_wiki/templates/volatile.md +25 -0
  21. package/assets/docs/POINTER_ONBOARDING.md +9 -0
  22. package/assets/docs/POINTER_RUNBOOK_wiki_delta.md +18 -0
  23. package/assets/docs/POINTER_SDD_HAT_FLOW.md +8 -0
  24. package/assets/docs/POINTER_USER_GUIDE.md +8 -0
  25. package/assets/graph/stubs/README.md +6 -0
  26. package/assets/graph/templates/00_main.graph.yaml +72 -0
  27. package/assets/graph/templates/00_main.md +85 -0
  28. package/assets/graph/templates/01_struct.md +38 -0
  29. package/assets/graph/templates/02_version.md +7 -0
  30. package/assets/graph/templates/10_flow_MAIN.graph.yaml +105 -0
  31. package/assets/graph/templates/10_flow_MAIN.md +103 -0
  32. package/assets/graph/templates/99_mermaid_protocol.md +156 -0
  33. package/assets/graph/templates/README.md +66 -0
  34. package/assets/harness/README.md +18 -0
  35. package/assets/harness/discipline-coverage.yaml +320 -0
  36. package/assets/harness/invokes/README.md +22 -0
  37. package/assets/harness/invokes/TEMPLATE_invoke.md +61 -0
  38. package/assets/harness/lifecycle.yaml +127 -0
  39. package/assets/harness/prompts/00-orchestrator.md +91 -0
  40. package/assets/harness/prompts/10-spec-requirements.md +63 -0
  41. package/assets/harness/prompts/10-task-requirements.md +70 -0
  42. package/assets/harness/prompts/20-spec-audit.md +50 -0
  43. package/assets/harness/prompts/20-task-audit.md +90 -0
  44. package/assets/harness/prompts/30-execute-code.md +64 -0
  45. package/assets/harness/prompts/40-self-check.md +65 -0
  46. package/assets/harness/prompts/FRAGMENT_00_delegate_only_v1_zh.md +19 -0
  47. package/assets/harness/prompts/FRAGMENT_30_gate_verify_v1_zh.md +34 -0
  48. package/assets/harness/prompts/FRAGMENT_30_invoke_block_v1_zh.md +28 -0
  49. package/assets/harness/prompts/FRAGMENT_hat_reanchor_v1_zh.md +19 -0
  50. package/assets/harness/prompts/README.md +67 -0
  51. package/assets/harness/prompts/TEMPLATE_30_gate_stop.md +36 -0
  52. package/assets/harness/templates/FRAGMENT_task_domain_infer_v1_zh.md +16 -0
  53. package/assets/harness/templates/ONTOLOGY_consumer_slice_v1.md +41 -0
  54. package/assets/harness/templates/QUICKREF_v1_zh.md +35 -0
  55. package/assets/harness/templates/README.md +50 -0
  56. package/assets/harness/templates/TASK_TEMPLATE.md +133 -0
  57. package/assets/harness/templates/TASK_done_README.md +76 -0
  58. package/assets/harness/templates/TASK_epic.md +103 -0
  59. package/assets/harness/templates/TASK_graph_bootstrap.md +115 -0
  60. package/assets/harness/templates/VIEW_done_by_domain.md +66 -0
  61. package/assets/harness/templates/VIEW_done_thin_pointer.md +16 -0
  62. package/assets/ide/adapters/AGENTS.md.fragment.example +33 -0
  63. package/assets/ide/adapters/CLAUDE.md.fragment.example +32 -0
  64. package/assets/ide/adapters/README.md +57 -0
  65. package/assets/ide/adapters/cursor-harness-starter.mdc.example +39 -0
  66. package/assets/ide/commands/claude/kit/apply-standards.md +10 -0
  67. package/assets/ide/commands/claude/kit/gate-status.md +10 -0
  68. package/assets/ide/commands/claude/kit/graph-check.md +8 -0
  69. package/assets/ide/commands/claude/kit/hat-00-delegate.md +9 -0
  70. package/assets/ide/commands/claude/kit/hat-10-spec.md +9 -0
  71. package/assets/ide/commands/claude/kit/hat-10-task.md +9 -0
  72. package/assets/ide/commands/claude/kit/hat-20-spec-audit.md +9 -0
  73. package/assets/ide/commands/claude/kit/hat-20-task-audit.md +9 -0
  74. package/assets/ide/commands/claude/kit/hat-reanchor.md +8 -0
  75. package/assets/ide/commands/claude/kit/init-guide.md +16 -0
  76. package/assets/ide/commands/claude/kit/sync-prompts-guide.md +9 -0
  77. package/assets/ide/commands/claude/kit/verify.md +16 -0
  78. package/assets/ide/commands/cursor/kit-apply-standards.md +12 -0
  79. package/assets/ide/commands/cursor/kit-gate-status.md +12 -0
  80. package/assets/ide/commands/cursor/kit-graph-check.md +10 -0
  81. package/assets/ide/commands/cursor/kit-hat-00-delegate.md +11 -0
  82. package/assets/ide/commands/cursor/kit-hat-10-spec.md +11 -0
  83. package/assets/ide/commands/cursor/kit-hat-10-task.md +11 -0
  84. package/assets/ide/commands/cursor/kit-hat-20-spec-audit.md +11 -0
  85. package/assets/ide/commands/cursor/kit-hat-20-task-audit.md +11 -0
  86. package/assets/ide/commands/cursor/kit-hat-reanchor.md +10 -0
  87. package/assets/ide/commands/cursor/kit-init-guide.md +18 -0
  88. package/assets/ide/commands/cursor/kit-sync-prompts-guide.md +11 -0
  89. package/assets/ide/commands/cursor/kit-verify.md +18 -0
  90. package/assets/ide/host-adapt/README.md +113 -0
  91. package/assets/ide/host-adapt/examples/mvp-hosts.yaml +78 -0
  92. package/assets/ide/host-adapt/host-adapt.schema.json +97 -0
  93. package/assets/ide/skills-orch/README.md +16 -0
  94. package/assets/ide/skills-orch/kit-apply-standards/SKILL.md +17 -0
  95. package/assets/ide/skills-orch/kit-gate-status/SKILL.md +17 -0
  96. package/assets/ide/skills-orch/kit-hat-reanchor/SKILL.md +15 -0
  97. package/assets/ide/skills-orch/kit-init-guide/SKILL.md +23 -0
  98. package/assets/ide/skills-orch/kit-verify/SKILL.md +23 -0
  99. package/assets/ontology.yaml +113 -0
  100. package/assets/skills/README.md +37 -0
  101. package/assets/skills/harness-00-delegate-only/SKILL.md +19 -0
  102. package/assets/skills/harness-10-spec/SKILL.md +63 -0
  103. package/assets/skills/harness-10-task/SKILL.md +70 -0
  104. package/assets/skills/harness-20-spec-audit/SKILL.md +50 -0
  105. package/assets/skills/harness-20-task-audit/SKILL.md +90 -0
  106. package/assets/skills/harness-20-task-audit/references/TEMPLATE_30_gate_stop.md +36 -0
  107. package/assets/skills/harness-hat-reanchor/SKILL.md +19 -0
  108. package/assets/standards/POINTER_workspace_truth_v1_zh.md +42 -0
  109. package/assets/standards/README.md +35 -0
  110. package/assets/standards/SOURCES_v1_zh.md +49 -0
  111. package/assets/standards/TEMPLATE_CODING_BASELINE_L1_v1_zh.md +88 -0
  112. package/assets/standards/TEMPLATE_CODING_BASELINE_L2_backend_v1_zh.md +75 -0
  113. package/assets/standards/TEMPLATE_CODING_BASELINE_L2_frontend_v1_zh.md +76 -0
  114. package/bin/dsh-coding-kit.js +7 -0
  115. package/bin/specgate.js +7 -0
  116. package/bin/validate_template_compliance.py +470 -0
  117. package/cordis.patch.yml +5 -0
  118. package/lib/cli-checks.d.ts +68 -0
  119. package/lib/cli-checks.js +812 -0
  120. package/lib/cli-checks.js.map +1 -0
  121. package/lib/cli-graph-hgm.d.ts +74 -0
  122. package/lib/cli-graph-hgm.js +416 -0
  123. package/lib/cli-graph-hgm.js.map +1 -0
  124. package/lib/cli-graph-yaml.d.ts +79 -0
  125. package/lib/cli-graph-yaml.js +602 -0
  126. package/lib/cli-graph-yaml.js.map +1 -0
  127. package/lib/cli-graph.d.ts +1 -0
  128. package/lib/cli-graph.js +199 -0
  129. package/lib/cli-graph.js.map +1 -0
  130. package/lib/cli-host.d.ts +24 -0
  131. package/lib/cli-host.js +1197 -0
  132. package/lib/cli-host.js.map +1 -0
  133. package/lib/cli-lifecycle.d.ts +2 -0
  134. package/lib/cli-lifecycle.js +401 -0
  135. package/lib/cli-lifecycle.js.map +1 -0
  136. package/lib/cli-refresh-ide-blocks.d.ts +66 -0
  137. package/lib/cli-refresh-ide-blocks.js +484 -0
  138. package/lib/cli-refresh-ide-blocks.js.map +1 -0
  139. package/lib/cli-shared.d.ts +74 -0
  140. package/lib/cli-shared.js +281 -0
  141. package/lib/cli-shared.js.map +1 -0
  142. package/lib/cli-skills.d.ts +52 -0
  143. package/lib/cli-skills.js +363 -0
  144. package/lib/cli-skills.js.map +1 -0
  145. package/lib/cli-status.d.ts +2 -0
  146. package/lib/cli-status.js +251 -0
  147. package/lib/cli-status.js.map +1 -0
  148. package/lib/cli-sync-prompts.d.ts +25 -0
  149. package/lib/cli-sync-prompts.js +158 -0
  150. package/lib/cli-sync-prompts.js.map +1 -0
  151. package/lib/cli-sync.d.ts +2 -0
  152. package/lib/cli-sync.js +124 -0
  153. package/lib/cli-sync.js.map +1 -0
  154. package/lib/cli-task-extra.d.ts +53 -0
  155. package/lib/cli-task-extra.js +408 -0
  156. package/lib/cli-task-extra.js.map +1 -0
  157. package/lib/cli-timeline.d.ts +28 -0
  158. package/lib/cli-timeline.js +68 -0
  159. package/lib/cli-timeline.js.map +1 -0
  160. package/lib/cli-wiki.d.ts +21 -0
  161. package/lib/cli-wiki.js +189 -0
  162. package/lib/cli-wiki.js.map +1 -0
  163. package/lib/cli.d.ts +22 -0
  164. package/lib/cli.js +1034 -0
  165. package/lib/cli.js.map +1 -0
  166. package/lib/host-contract.d.ts +23 -0
  167. package/lib/host-contract.js +143 -0
  168. package/lib/host-contract.js.map +1 -0
  169. package/lib/index.d.ts +18 -0
  170. package/lib/index.js +290 -0
  171. package/lib/index.js.map +1 -0
  172. package/lib/yaml.d.ts +4 -0
  173. package/lib/yaml.js +10 -0
  174. package/lib/yaml.js.map +1 -0
  175. package/package.json +87 -0
@@ -0,0 +1,281 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ export class CliError extends Error {
5
+ constructor(message, exitCode = 1) {
6
+ super(message);
7
+ this.name = 'CliError';
8
+ this.exitCode = exitCode;
9
+ }
10
+ }
11
+ export const STATUS_RE = /\*\*状态\*\*:?\s*`?([a-z_]+)/i;
12
+ const META_TICK_RE = /\|\s*\*\*([^*]+)\*\*\s*\|\s*`([^`]+)`/;
13
+ const META_PLAIN_RE = /\|\s*\*\*([^*]+)\*\*\s*\|\s*([^|\n]+)\|/;
14
+ const GATE_ROW_RE = /^\|\s*(?:\*\*)?([^*|]+?)(?:\*\*)?\s*\|\s*([^|]+)\|\s*([^|]+)\|\s*([^|]*)\|/;
15
+ export function packageRoot() {
16
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
17
+ }
18
+ export function resolveTarget(cwd, targetArg) {
19
+ return path.resolve(targetArg || cwd);
20
+ }
21
+ export function takeOption(args, name) {
22
+ const idx = args.indexOf(name);
23
+ if (idx === -1 || idx + 1 >= args.length)
24
+ return { value: undefined, rest: args };
25
+ const value = args[idx + 1];
26
+ const rest = args.slice(0, idx).concat(args.slice(idx + 2));
27
+ return { value, rest };
28
+ }
29
+ export function fail(message, exitCode = 1) {
30
+ throw new CliError(message, exitCode);
31
+ }
32
+ /**
33
+ * S2 过程域前缀唯一真值源(F1 / X7)。
34
+ * 规范三路径 + legacy 裸前缀并集;判定用「相等或前缀/」——禁止各命令本地再硬编码等价列表。
35
+ */
36
+ export const S2_TRUTH_PREFIXES = [
37
+ 'docs/tasks',
38
+ 'docs/harness/reviews',
39
+ 'docs/harness/invokes/by-task',
40
+ 'reviews',
41
+ 'invokes/by-task',
42
+ ];
43
+ export function normalizeSlashPath(p) {
44
+ return p.replace(/\\/g, '/');
45
+ }
46
+ /** 相对路径(仓内 rel)是否命中 S2 */
47
+ export function isS2RelPath(destRel) {
48
+ const n = normalizeSlashPath(destRel).replace(/^\.\//, '');
49
+ return S2_TRUTH_PREFIXES.some((seg) => n === seg || n.startsWith(`${seg}/`));
50
+ }
51
+ /**
52
+ * 绝对路径是否命中 S2。
53
+ * `.dsh/skills` 安装落点白名单:永不视为 S2(与 skills install 历史语义一致)。
54
+ */
55
+ export function isS2AbsPath(absPath) {
56
+ const n = normalizeSlashPath(absPath);
57
+ if (n.endsWith('/.dsh/skills') || n.includes('/.dsh/skills/'))
58
+ return false;
59
+ return S2_TRUTH_PREFIXES.some((seg) => {
60
+ const needle = `/${seg}`;
61
+ return n.endsWith(needle) || n.includes(`${needle}/`);
62
+ });
63
+ }
64
+ export function assertNotS2Abs(absPath, message, exitCode = 2) {
65
+ if (isS2AbsPath(absPath)) {
66
+ fail(message ??
67
+ `拒写:路径命中 S2 过程域(${S2_TRUTH_PREFIXES.join(' · ')}): ${absPath}`, exitCode);
68
+ }
69
+ }
70
+ function escapeRegExp(s) {
71
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
72
+ }
73
+ /** 现行落盘根(F4 方案 B) */
74
+ export const KIT_LAYOUT_DIR = '.coding-kit';
75
+ /** legacy 只读探测根(不再作为新写默认目标) */
76
+ export const LEGACY_LAYOUT_DIR = '.cyning-harness';
77
+ export function kitLayoutJoin(target, ...parts) {
78
+ return path.join(target, KIT_LAYOUT_DIR, ...parts);
79
+ }
80
+ export function legacyLayoutJoin(target, ...parts) {
81
+ return path.join(target, LEGACY_LAYOUT_DIR, ...parts);
82
+ }
83
+ /**
84
+ * 解析布局内相对文件:优先 `.coding-kit/`,否则 legacy `.cyning-harness/`。
85
+ * `source=none` 时 `abs` 仍指向新布局路径(供写入)。
86
+ */
87
+ export function resolveLayoutFile(target, relWithinLayout) {
88
+ const kit = kitLayoutJoin(target, relWithinLayout);
89
+ if (existsSync(kit))
90
+ return { abs: kit, source: 'kit' };
91
+ const legacy = legacyLayoutJoin(target, relWithinLayout);
92
+ if (existsSync(legacy))
93
+ return { abs: legacy, source: 'legacy' };
94
+ return { abs: kit, source: 'none' };
95
+ }
96
+ export function legacyLayoutHint(target) {
97
+ const hasLegacy = existsSync(path.join(target, LEGACY_LAYOUT_DIR));
98
+ const hasKit = existsSync(path.join(target, KIT_LAYOUT_DIR));
99
+ if (hasLegacy && !hasKit) {
100
+ return (`提示: 检测到 legacy 目录 ${LEGACY_LAYOUT_DIR}/;新落盘已统一为 ${KIT_LAYOUT_DIR}/。` +
101
+ `请运行 \`npx spec-wave upgrade --yes\` 将 manifest 写入新目录(旧目录只读保留,不删除)。`);
102
+ }
103
+ if (hasLegacy && hasKit) {
104
+ return `提示: ${LEGACY_LAYOUT_DIR}/ 为 legacy 只读;现行落盘为 ${KIT_LAYOUT_DIR}/。`;
105
+ }
106
+ return null;
107
+ }
108
+ export function extractSection(content, startMarker, endMarker) {
109
+ const startRe = new RegExp(`^${escapeRegExp(startMarker)}`, 'm');
110
+ const startMatch = content.match(startRe);
111
+ if (!startMatch || startMatch.index === undefined)
112
+ return null;
113
+ const start = startMatch.index;
114
+ let end = content.length;
115
+ if (endMarker) {
116
+ const next = content.indexOf(endMarker, start + startMarker.length);
117
+ if (next !== -1)
118
+ end = next;
119
+ }
120
+ return content.slice(start, end);
121
+ }
122
+ export function normalizeCell(raw) {
123
+ return raw.replace(/[`*]/g, '').trim();
124
+ }
125
+ export function parseHarnessMeta(content) {
126
+ const meta = {};
127
+ const section = extractSection(content, '## Harness 元信息', '###');
128
+ if (!section)
129
+ return meta;
130
+ for (const line of section.split('\n')) {
131
+ const tick = line.match(META_TICK_RE);
132
+ if (tick) {
133
+ meta[tick[1].trim()] = tick[2].trim();
134
+ continue;
135
+ }
136
+ const plain = line.match(META_PLAIN_RE);
137
+ if (!plain)
138
+ continue;
139
+ const key = plain[1].trim();
140
+ const val = plain[2].trim();
141
+ if (!key || key === '字段')
142
+ continue;
143
+ if (/^[-:\s]+$/.test(val))
144
+ continue;
145
+ if (!(key in meta))
146
+ meta[key] = val;
147
+ }
148
+ return meta;
149
+ }
150
+ // K1(task wiki-delta-section-diagnostics):错节诊断 helper —— 诊断非兼容。
151
+ // parseHarnessMeta 权威节名仍只认 '## Harness 元信息'(不改);本 helper 仅在解析落空时
152
+ // 全文查找「写在其他节的 wiki_delta 字段行」,供 lint-wiki-delta(wiki_delta_wrong_section)
153
+ // 与 task lint(E8)输出指向正确节的诊断。key 单元格须恰为 wiki_delta(不误伤 wiki_delta_note);
154
+ // 启发式可能命中正文代码块示例(residual_risk 已登记)——诊断 detail 带行号便于人判。
155
+ const WIKI_DELTA_ROW_RE = /^\s*\|?\s*(?:\*\*)?wiki_delta(?:\*\*)?\s*[|:]/;
156
+ const HEADING_RE = /^(#{1,6})\s+(.+?)\s*$/;
157
+ export function findWikiDeltaOutsideMetaSection(content) {
158
+ const lines = content.split('\n');
159
+ let inMeta = false;
160
+ let section = '(文首 · 无节)';
161
+ for (let i = 0; i < lines.length; i += 1) {
162
+ const line = lines[i];
163
+ const heading = line.match(HEADING_RE);
164
+ if (heading) {
165
+ const level = heading[1].length;
166
+ const title = heading[2];
167
+ if (level === 2 && title === 'Harness 元信息') {
168
+ inMeta = true;
169
+ continue;
170
+ }
171
+ // 与 extractSection(content, '## Harness 元信息', '###') 同口径:节域止于下一个
172
+ // ### 及以上标题(level >= 3);后继 ## 节仍在解析节域内(与解析器行为一致,避免误报)
173
+ if (inMeta && level >= 3)
174
+ inMeta = false;
175
+ if (!inMeta)
176
+ section = `${heading[1]} ${title}`;
177
+ continue;
178
+ }
179
+ if (inMeta)
180
+ continue;
181
+ if (WIKI_DELTA_ROW_RE.test(line))
182
+ return { line: i + 1, section };
183
+ }
184
+ return null;
185
+ }
186
+ export function parseHumanGates(content) {
187
+ const section = extractSection(content, '### 人工闸', '\n##');
188
+ if (!section)
189
+ return [];
190
+ const gates = [];
191
+ for (const line of section.split('\n')) {
192
+ const match = line.match(GATE_ROW_RE);
193
+ if (!match)
194
+ continue;
195
+ const id = match[1].trim();
196
+ if (!id.startsWith('HG-') || id.includes('human_gate'))
197
+ continue;
198
+ gates.push({
199
+ id,
200
+ status: normalizeCell(match[2]),
201
+ blocksHats: normalizeCell(match[3]),
202
+ });
203
+ }
204
+ return gates;
205
+ }
206
+ export function findGate(gates, prefix) {
207
+ return gates.find((g) => g.id === prefix || g.id.startsWith(`${prefix}(`) || g.id.startsWith(`${prefix}(`));
208
+ }
209
+ export function evaluateMayStart30(gates) {
210
+ const audit = findGate(gates, 'HG-AUDIT-R1');
211
+ const draft = findGate(gates, 'HG-TASK-DRAFT');
212
+ const graph = findGate(gates, 'HG-GRAPH-MODULES');
213
+ if (audit?.status !== 'approved') {
214
+ return { ok: false, reason: 'HG-AUDIT-R1 pending' };
215
+ }
216
+ if (draft && draft.status !== 'approved' && draft.blocksHats.includes('30')) {
217
+ return { ok: false, reason: 'HG-TASK-DRAFT pending' };
218
+ }
219
+ if (graph?.status === 'pending') {
220
+ return { ok: false, reason: 'HG-GRAPH-MODULES pending' };
221
+ }
222
+ return { ok: true, reason: null };
223
+ }
224
+ export function extractTaskSlug(fileName) {
225
+ let base = path.basename(fileName).replace(/\.md$/, '');
226
+ base = base.replace(/^(task_|done_)/, '');
227
+ base = base.replace(/_(\d{8}|\d{4}-\d{2}-\d{2})$/, '');
228
+ base = base.replace(/_v\d+$/, '');
229
+ return base;
230
+ }
231
+ export function normalizeSlug(slug) {
232
+ return String(slug).replace(/_/g, '-');
233
+ }
234
+ export function resolveTaskPath(target, taskFile) {
235
+ return path.isAbsolute(taskFile) ? taskFile : path.join(target, taskFile);
236
+ }
237
+ export function readTextIfExists(file) {
238
+ if (!existsSync(file))
239
+ return null;
240
+ return readFileSync(file, 'utf8');
241
+ }
242
+ export function toRel(target, abs) {
243
+ const rel = path.relative(target, abs);
244
+ if (!rel || rel.startsWith('..'))
245
+ return abs.replace(/\\/g, '/');
246
+ return rel.split(path.sep).join('/');
247
+ }
248
+ export function extractHatsFromInvokeFilename(name) {
249
+ const base = path.basename(name, '.md');
250
+ const parts = base.split('_');
251
+ if (parts.length >= 3 && parts[0] === 'invoke') {
252
+ return [parts[2]];
253
+ }
254
+ return [];
255
+ }
256
+ // 异常态兜底:canonical 模板(assets/harness/templates/TASK_TEMPLATE.md)亦不可读时的最小节。
257
+ const CANONICAL_META_FALLBACK = '## Harness 元信息\n\n| 字段 | 值 |\n|------|-----|\n| **task_slug** | `<slug>` |';
258
+ export function canonicalHarnessMetaSection() {
259
+ try {
260
+ const tpl = readFileSync(path.join(packageRoot(), 'assets', 'harness', 'templates', 'TASK_TEMPLATE.md'), 'utf8');
261
+ const section = extractSection(tpl, '## Harness 元信息', '###');
262
+ if (section)
263
+ return section.trimEnd();
264
+ }
265
+ catch {
266
+ // 落兜底常量
267
+ }
268
+ return CANONICAL_META_FALLBACK;
269
+ }
270
+ export function buildDoneSnapshot(dest) {
271
+ const content = readFileSync(dest, 'utf8');
272
+ const excerpt = extractSection(content, '## Harness 元信息', '###');
273
+ if (excerpt)
274
+ return { path: dest, harness_meta_section: excerpt.trimEnd(), warn: null };
275
+ return {
276
+ path: dest,
277
+ harness_meta_section: canonicalHarnessMetaSection(),
278
+ warn: '归档文件缺 ## Harness 元信息 节 · done_snapshot 打印 canonical 模板占位(assets/harness/templates/TASK_TEMPLATE.md)',
279
+ };
280
+ }
281
+ //# sourceMappingURL=cli-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-shared.js","sourceRoot":"","sources":["../src/cli-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ export declare const EXECUTE_TRACK = "starter-experimental";
2
+ type Frontmatter = {
3
+ name?: string;
4
+ description?: string;
5
+ compatibility?: string;
6
+ metadata?: {
7
+ hat_id?: string;
8
+ track?: string;
9
+ };
10
+ [k: string]: unknown;
11
+ };
12
+ type SkillPrompt = {
13
+ file: string;
14
+ frontmatter: Frontmatter;
15
+ body: string;
16
+ errors: string[];
17
+ };
18
+ export declare function parseSkillPrompt(content: string): {
19
+ frontmatter: Frontmatter | null;
20
+ body: string;
21
+ parseError?: string;
22
+ };
23
+ export declare function validateSkillFrontmatter(fm: Frontmatter | null, source: string): string[];
24
+ export declare function loadSkillPrompts({ promptsDir }: {
25
+ promptsDir: string;
26
+ }): SkillPrompt[];
27
+ export declare function generateSkills({ promptsDir, withExecuteHats, }: {
28
+ promptsDir: string;
29
+ withExecuteHats?: boolean;
30
+ }): {
31
+ files: Map<string, string>;
32
+ skills: SkillPrompt[];
33
+ errors: string[];
34
+ };
35
+ export declare function buildSkills({ promptsDir, outDir, withExecuteHats, }: {
36
+ promptsDir: string;
37
+ outDir: string;
38
+ withExecuteHats?: boolean;
39
+ }): {
40
+ written: string[];
41
+ };
42
+ export declare function checkSkills({ promptsDir, skillsDir, }: {
43
+ promptsDir: string;
44
+ skillsDir: string;
45
+ }): {
46
+ ok: boolean;
47
+ errors: string[];
48
+ };
49
+ export declare const EXECUTE_HAT_DIRS: Set<string>;
50
+ export declare function isExecuteHatSkipped(parentDir: string, name: string, withExecuteHats: boolean): boolean;
51
+ export declare function cmdSkills(args: string[]): Promise<void>;
52
+ export {};