@chenmk/superflow 0.1.2 → 0.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.
Files changed (121) hide show
  1. package/README.md +39 -1
  2. package/README.zh-CN.md +13 -1
  3. package/assets/skills/superflow-design/SKILL.md +16 -8
  4. package/assets/skills/superflow-docs/SKILL.md +17 -8
  5. package/assets/skills/superflow-pipeline/references/api-design-template.md +99 -63
  6. package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +62 -14
  7. package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +114 -67
  8. package/assets/skills/superflow-pipeline/references/quality-gate.md +104 -102
  9. package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +45 -19
  10. package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +35 -0
  11. package/dist/app/cli.js +215 -0
  12. package/dist/app/cli.js.map +1 -0
  13. package/dist/app/commands/archive.js +6 -0
  14. package/dist/app/commands/archive.js.map +1 -0
  15. package/dist/app/commands/check.js +123 -0
  16. package/dist/app/commands/check.js.map +1 -0
  17. package/dist/app/commands/clarify.js +6 -0
  18. package/dist/app/commands/clarify.js.map +1 -0
  19. package/dist/app/commands/config.js +103 -0
  20. package/dist/app/commands/config.js.map +1 -0
  21. package/dist/app/commands/design.js +28 -0
  22. package/dist/app/commands/design.js.map +1 -0
  23. package/dist/app/commands/docs.js +6 -0
  24. package/dist/app/commands/docs.js.map +1 -0
  25. package/dist/app/commands/doctor.js +494 -0
  26. package/dist/app/commands/doctor.js.map +1 -0
  27. package/dist/app/commands/implement.js +6 -0
  28. package/dist/app/commands/implement.js.map +1 -0
  29. package/dist/app/commands/init.js +520 -0
  30. package/dist/app/commands/init.js.map +1 -0
  31. package/dist/app/commands/pipeline.js +6 -0
  32. package/dist/app/commands/pipeline.js.map +1 -0
  33. package/dist/app/commands/scan.js +63 -0
  34. package/dist/app/commands/scan.js.map +1 -0
  35. package/dist/app/commands/status.js +192 -0
  36. package/dist/app/commands/status.js.map +1 -0
  37. package/dist/app/commands/uninstall.js +214 -0
  38. package/dist/app/commands/uninstall.js.map +1 -0
  39. package/dist/app/commands/update.js +193 -0
  40. package/dist/app/commands/update.js.map +1 -0
  41. package/dist/app/commands/verify.js +6 -0
  42. package/dist/app/commands/verify.js.map +1 -0
  43. package/dist/cli/index.js +1 -1
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/commands/archive.js +1 -1
  46. package/dist/commands/archive.js.map +1 -1
  47. package/dist/commands/clarify.js +1 -1
  48. package/dist/commands/clarify.js.map +1 -1
  49. package/dist/commands/design.js +25 -3
  50. package/dist/commands/design.js.map +1 -1
  51. package/dist/commands/docs.js +1 -1
  52. package/dist/commands/docs.js.map +1 -1
  53. package/dist/commands/doctor.js +4 -3
  54. package/dist/commands/doctor.js.map +1 -1
  55. package/dist/commands/implement.js +1 -1
  56. package/dist/commands/implement.js.map +1 -1
  57. package/dist/commands/init.js +13 -12
  58. package/dist/commands/init.js.map +1 -1
  59. package/dist/commands/pipeline.js +1 -1
  60. package/dist/commands/pipeline.js.map +1 -1
  61. package/dist/commands/scan.js +2 -2
  62. package/dist/commands/scan.js.map +1 -1
  63. package/dist/commands/status.js +1 -1
  64. package/dist/commands/status.js.map +1 -1
  65. package/dist/commands/uninstall.js +6 -5
  66. package/dist/commands/uninstall.js.map +1 -1
  67. package/dist/commands/update.js +10 -9
  68. package/dist/commands/update.js.map +1 -1
  69. package/dist/commands/verify.js +1 -1
  70. package/dist/commands/verify.js.map +1 -1
  71. package/dist/core/dependencies.js +1 -1
  72. package/dist/core/dependencies.js.map +1 -1
  73. package/dist/core/detect.js +0 -60
  74. package/dist/core/detect.js.map +1 -1
  75. package/dist/core/skill-check.js +3 -2
  76. package/dist/core/skill-check.js.map +1 -1
  77. package/dist/domains/agent.js +64 -0
  78. package/dist/domains/agent.js.map +1 -0
  79. package/dist/domains/config/cli-help.js +98 -0
  80. package/dist/domains/config/cli-help.js.map +1 -0
  81. package/dist/domains/config/context.js +123 -0
  82. package/dist/domains/config/context.js.map +1 -0
  83. package/dist/domains/config/i18n.js +105 -0
  84. package/dist/domains/config/i18n.js.map +1 -0
  85. package/dist/domains/config/manifest.js +21 -0
  86. package/dist/domains/config/manifest.js.map +1 -0
  87. package/dist/domains/deps.js +146 -0
  88. package/dist/domains/deps.js.map +1 -0
  89. package/dist/domains/hook.js +134 -0
  90. package/dist/domains/hook.js.map +1 -0
  91. package/dist/domains/intent.js +69 -0
  92. package/dist/domains/intent.js.map +1 -0
  93. package/dist/domains/run-state.js +47 -0
  94. package/dist/domains/run-state.js.map +1 -0
  95. package/dist/domains/skill/assets.js +27 -0
  96. package/dist/domains/skill/assets.js.map +1 -0
  97. package/dist/domains/skill/check.js +32 -0
  98. package/dist/domains/skill/check.js.map +1 -0
  99. package/dist/domains/skill/deploy.js +62 -0
  100. package/dist/domains/skill/deploy.js.map +1 -0
  101. package/dist/domains/skill/prompts.js +20 -0
  102. package/dist/domains/skill/prompts.js.map +1 -0
  103. package/dist/domains/skill/rules.js +17 -0
  104. package/dist/domains/skill/rules.js.map +1 -0
  105. package/dist/domains/skill/scripts.js +48 -0
  106. package/dist/domains/skill/scripts.js.map +1 -0
  107. package/dist/domains/state-events.js +32 -0
  108. package/dist/domains/state-events.js.map +1 -0
  109. package/dist/domains/state.js +54 -0
  110. package/dist/domains/state.js.map +1 -0
  111. package/dist/domains/workflow-state.js +47 -0
  112. package/dist/domains/workflow-state.js.map +1 -0
  113. package/dist/platform/fs.js +45 -0
  114. package/dist/platform/fs.js.map +1 -0
  115. package/dist/platform/os.js +14 -0
  116. package/dist/platform/os.js.map +1 -0
  117. package/dist/platform/paths.js +55 -0
  118. package/dist/platform/paths.js.map +1 -0
  119. package/dist/platform/process.js +29 -0
  120. package/dist/platform/process.js.map +1 -0
  121. package/package.json +2 -2
@@ -0,0 +1,494 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from 'fs';
2
+ import { homedir } from 'os';
3
+ import path from 'path';
4
+ import { runCommand } from '../../platform/process.js';
5
+ import { getPlatformPaths } from '../../platform/paths.js';
6
+ import { parseAgentSelection, parseInstallScope, resolveAgents, } from '../../domains/agent.js';
7
+ import { ALL_RULES, ALL_SKILLS, CODEX_PROMPTS, hookScriptsForAgent, scriptsForAgent, } from '../../domains/skill/assets.js';
8
+ const VALID_STATE_FIELDS = new Set([
9
+ 'workflow',
10
+ 'phase',
11
+ 'canonical_spec',
12
+ 'context_compression',
13
+ 'design_doc',
14
+ 'technical_design',
15
+ 'plan',
16
+ 'base_ref',
17
+ 'build_mode',
18
+ 'build_pause',
19
+ 'subagent_dispatch',
20
+ 'tdd_mode',
21
+ 'review_mode',
22
+ 'isolation',
23
+ 'verify_mode',
24
+ 'auto_transition',
25
+ 'verify_result',
26
+ 'verification_report',
27
+ 'branch_status',
28
+ 'archived',
29
+ 'direct_override',
30
+ 'build_command',
31
+ 'verify_command',
32
+ 'handoff_context',
33
+ 'handoff_hash',
34
+ 'superpower_strategy',
35
+ 'implementation_prompt',
36
+ 'worktree_ports',
37
+ 'created_at',
38
+ 'verified_at',
39
+ 'updated_at',
40
+ ]);
41
+ const REQUIRED_STATE_FIELDS = [
42
+ 'workflow',
43
+ 'phase',
44
+ 'canonical_spec',
45
+ 'build_mode',
46
+ 'tdd_mode',
47
+ 'review_mode',
48
+ 'isolation',
49
+ 'verify_mode',
50
+ 'auto_transition',
51
+ 'verify_result',
52
+ 'verification_report',
53
+ 'branch_status',
54
+ 'archived',
55
+ 'handoff_context',
56
+ 'handoff_hash',
57
+ 'created_at',
58
+ 'updated_at',
59
+ ];
60
+ export async function doctorCommand(options = {}) {
61
+ if (options.json) {
62
+ const result = await collectDoctor(options);
63
+ console.log(JSON.stringify(result, null, 2));
64
+ if (result.failed)
65
+ process.exit(1);
66
+ return;
67
+ }
68
+ let failed = false;
69
+ const agents = resolveAgents(parseAgentSelection(options.agent));
70
+ const scope = parseDoctorScope(options.scope);
71
+ const projectPath = path.resolve(options.targetPath ?? process.cwd());
72
+ console.log('[CLI]');
73
+ const which = await runCommand('which', ['superflow']).catch(() => ({ code: 1, stdout: '', stderr: '' }));
74
+ if (which.code === 0) {
75
+ console.log(' ✓ superflow CLI 在 PATH');
76
+ }
77
+ else {
78
+ console.log(' ✗ superflow CLI 不在 PATH(FAIL)');
79
+ failed = true;
80
+ }
81
+ console.log('\n[第三方依赖]');
82
+ const openspec = await runCommand('which', ['openspec']).catch(() => ({ code: 1, stdout: '', stderr: '' }));
83
+ if (openspec.code === 0) {
84
+ console.log(' ✓ openspec CLI 在 PATH');
85
+ }
86
+ else {
87
+ console.log(' ✗ openspec CLI 缺失(FAIL)');
88
+ failed = true;
89
+ }
90
+ const openspecProjectChecks = collectOpenSpecProjectChecks(projectPath);
91
+ for (const check of openspecProjectChecks) {
92
+ if (check.status === 'pass') {
93
+ console.log(` ✓ ${check.check}: ${check.message}`);
94
+ }
95
+ else {
96
+ console.log(` ✗ ${check.check}: ${check.message}`);
97
+ failed = true;
98
+ }
99
+ }
100
+ for (const agent of agents) {
101
+ failed = checkAgentDependencies(agent, failed, firstInstallScope(scope), projectPath);
102
+ }
103
+ for (const currentScope of scopesForDoctor(scope)) {
104
+ for (const agent of agents) {
105
+ const platform = getPlatformPaths(agent, currentScope, projectPath);
106
+ console.log(`\n[脚本: ${platform.name}]`);
107
+ if (existsSync(platform.scriptsDir)) {
108
+ for (const hook of scriptsForAgent(agent)) {
109
+ if (existsSync(path.join(platform.scriptsDir, hook))) {
110
+ console.log(` ✓ ${hook}`);
111
+ }
112
+ else {
113
+ console.log(` ✗ ${hook} 缺失(FAIL)`);
114
+ failed = true;
115
+ }
116
+ }
117
+ if (hookScriptsForAgent(agent).length === 0) {
118
+ console.log(` ⚠ ${platform.name} 未注册自动 hook;使用 /superflow-* command 显式运行门禁(WARN)`);
119
+ }
120
+ else {
121
+ failed = checkHookRegistration(platform.settingsFile, agent, failed);
122
+ }
123
+ }
124
+ else {
125
+ console.log(` ✗ ${platform.scriptsDir} 缺失(FAIL)`);
126
+ failed = true;
127
+ }
128
+ console.log(`\n[Skills: ${platform.name}]`);
129
+ for (const skill of ALL_SKILLS) {
130
+ if (existsSync(path.join(platform.skillsDir, skill, 'SKILL.md'))) {
131
+ console.log(` ✓ ${skill}`);
132
+ }
133
+ else {
134
+ console.log(` ✗ ${skill} 缺失(FAIL)`);
135
+ failed = true;
136
+ }
137
+ }
138
+ if (agent === 'codex' || agent === 'opencode') {
139
+ console.log(`\n[${agent === 'opencode' ? 'Command Alias' : 'Prompt Alias'}: ${platform.name}]`);
140
+ for (const prompt of CODEX_PROMPTS) {
141
+ if (existsSync(path.join(platform.promptsDir, prompt))) {
142
+ console.log(` ✓ /${prompt.replace(/\.md$/, '')}`);
143
+ }
144
+ else {
145
+ console.log(` ✗ /${prompt.replace(/\.md$/, '')} 缺失(FAIL)`);
146
+ failed = true;
147
+ }
148
+ }
149
+ }
150
+ console.log(`\n[Rules: ${platform.name}]`);
151
+ for (const rule of ALL_RULES) {
152
+ if (existsSync(path.join(platform.rulesDir, rule))) {
153
+ console.log(` ✓ ${rule}`);
154
+ }
155
+ else {
156
+ console.log(` ✗ ${rule} 缺失(FAIL)`);
157
+ failed = true;
158
+ }
159
+ }
160
+ }
161
+ }
162
+ const stateChecks = collectSddStateChecks(projectPath);
163
+ if (stateChecks.length > 0) {
164
+ console.log('\n[SuperBridge Flow State]');
165
+ for (const check of stateChecks) {
166
+ if (check.status === 'pass') {
167
+ console.log(` ✓ ${check.check}: ${check.message}`);
168
+ }
169
+ else if (check.status === 'warn') {
170
+ console.log(` ⚠ ${check.check}: ${check.message}`);
171
+ }
172
+ else {
173
+ console.log(` ✗ ${check.check}: ${check.message}`);
174
+ failed = true;
175
+ }
176
+ }
177
+ }
178
+ console.log('');
179
+ if (failed) {
180
+ console.log('→ Exit code: 1 (FAIL)');
181
+ process.exit(1);
182
+ }
183
+ else {
184
+ console.log('→ Exit code: 0 (PASS / 仅 WARN)');
185
+ }
186
+ }
187
+ export async function collectDoctor(options = {}) {
188
+ const agents = resolveAgents(parseAgentSelection(options.agent));
189
+ const scope = parseDoctorScope(options.scope);
190
+ const scopesChecked = scopesForDoctor(scope);
191
+ const projectPath = path.resolve(options.projectPath ?? options.targetPath ?? process.cwd());
192
+ const checks = [];
193
+ const which = await runCommand('which', ['superflow']).catch(() => ({ code: 1, stdout: '', stderr: '' }));
194
+ checks.push({
195
+ check: 'superflow CLI',
196
+ status: which.code === 0 ? 'pass' : 'fail',
197
+ message: which.code === 0 ? 'available in PATH' : 'missing from PATH',
198
+ });
199
+ const openspec = await runCommand('which', ['openspec']).catch(() => ({ code: 1, stdout: '', stderr: '' }));
200
+ checks.push({
201
+ check: 'openspec CLI',
202
+ status: openspec.code === 0 ? 'pass' : 'fail',
203
+ message: openspec.code === 0 ? 'available in PATH' : 'missing from PATH',
204
+ });
205
+ checks.push(...collectOpenSpecProjectChecks(projectPath));
206
+ for (const currentScope of scopesChecked) {
207
+ for (const agent of agents) {
208
+ const platform = getPlatformPaths(agent, currentScope, projectPath);
209
+ checks.push({
210
+ check: `superpowers:${agent}`,
211
+ status: hasSuperpowers(agent) ? 'pass' : 'warn',
212
+ message: hasSuperpowers(agent) ? 'detected' : 'not detected',
213
+ });
214
+ checks.push({
215
+ check: `understand-anything:${agent}`,
216
+ status: hasUnderstand(agent) ? 'pass' : 'warn',
217
+ message: hasUnderstand(agent) ? 'detected' : 'not detected',
218
+ });
219
+ checks.push({
220
+ check: `api-doc-changelog:${agent}`,
221
+ status: existsSync(path.join(platform.skillsDir, 'api-doc-changelog', 'SKILL.md')) ? 'pass' : 'warn',
222
+ message: existsSync(path.join(platform.skillsDir, 'api-doc-changelog', 'SKILL.md')) ? 'detected' : 'missing',
223
+ });
224
+ for (const script of scriptsForAgent(agent)) {
225
+ const scriptPath = path.join(platform.scriptsDir, script);
226
+ checks.push({
227
+ check: `script:${agent}:${currentScope}:${script}`,
228
+ status: existsSync(scriptPath) ? 'pass' : 'fail',
229
+ message: scriptPath,
230
+ });
231
+ }
232
+ const hookScripts = hookScriptsForAgent(agent);
233
+ if (hookScripts.length === 0) {
234
+ checks.push({
235
+ check: `hooks:${agent}:${currentScope}`,
236
+ status: 'warn',
237
+ message: 'native hook registration is not supported; use command aliases',
238
+ });
239
+ }
240
+ else {
241
+ const hookCount = countSddHookCommands(platform.settingsFile, agent);
242
+ checks.push({
243
+ check: `hooks:${agent}:${currentScope}`,
244
+ status: hookCount >= 7 ? 'pass' : 'fail',
245
+ message: `${hookCount} command(s) registered`,
246
+ });
247
+ }
248
+ for (const skill of ALL_SKILLS) {
249
+ const skillPath = path.join(platform.skillsDir, skill, 'SKILL.md');
250
+ checks.push({
251
+ check: `skill:${agent}:${currentScope}:${skill}`,
252
+ status: existsSync(skillPath) ? 'pass' : 'fail',
253
+ message: skillPath,
254
+ });
255
+ }
256
+ if (agent === 'codex' || agent === 'opencode') {
257
+ for (const prompt of CODEX_PROMPTS) {
258
+ const promptPath = path.join(platform.promptsDir, prompt);
259
+ checks.push({
260
+ check: `prompt:${agent}:${currentScope}:${prompt}`,
261
+ status: existsSync(promptPath) ? 'pass' : 'fail',
262
+ message: promptPath,
263
+ });
264
+ }
265
+ }
266
+ for (const rule of ALL_RULES) {
267
+ const ruleFile = path.join(platform.rulesDir, rule);
268
+ checks.push({
269
+ check: `rule:${agent}:${currentScope}:${rule}`,
270
+ status: existsSync(ruleFile) ? 'pass' : 'fail',
271
+ message: ruleFile,
272
+ });
273
+ }
274
+ }
275
+ }
276
+ checks.push(...collectSddStateChecks(projectPath));
277
+ return {
278
+ agents,
279
+ scope,
280
+ scopesChecked,
281
+ projectPath,
282
+ failed: checks.some((check) => check.status === 'fail'),
283
+ checks,
284
+ };
285
+ }
286
+ function collectOpenSpecProjectChecks(projectPath) {
287
+ const changesDir = path.join(projectPath, 'openspec', 'changes');
288
+ const specsDir = path.join(projectPath, 'openspec', 'specs');
289
+ const missing = [
290
+ existsSync(changesDir) ? '' : 'openspec/changes',
291
+ existsSync(specsDir) ? '' : 'openspec/specs',
292
+ ].filter(Boolean);
293
+ return [{
294
+ check: 'openspec project',
295
+ status: missing.length > 0 ? 'fail' : 'pass',
296
+ message: missing.length > 0
297
+ ? `missing ${missing.join(', ')}; run superflow init or openspec init`
298
+ : 'openspec/changes and openspec/specs detected',
299
+ }];
300
+ }
301
+ function collectSddStateChecks(projectPath) {
302
+ const changesDir = path.join(projectPath, 'openspec', 'changes');
303
+ if (!existsSync(changesDir))
304
+ return [];
305
+ const checks = [];
306
+ for (const entry of readdirSync(changesDir).sort()) {
307
+ const changeDir = path.join(changesDir, entry);
308
+ if (!safeIsDirectory(changeDir))
309
+ continue;
310
+ const statePath = path.join(changeDir, '.sdd', 'state.yaml');
311
+ if (!existsSync(statePath))
312
+ continue;
313
+ const state = readFileSync(statePath, 'utf-8');
314
+ const keys = collectTopLevelYamlKeys(state);
315
+ const unknown = keys.filter((key) => !VALID_STATE_FIELDS.has(key));
316
+ const missing = REQUIRED_STATE_FIELDS.filter((key) => !keys.includes(key));
317
+ const invalidHash = invalidHandoffHash(state);
318
+ const problems = [
319
+ unknown.length > 0 ? `unknown field(s): ${unknown.join(', ')}` : '',
320
+ missing.length > 0 ? `missing field(s): ${missing.join(', ')}` : '',
321
+ invalidHash,
322
+ ].filter(Boolean);
323
+ checks.push({
324
+ check: `superflow-state:${entry}`,
325
+ status: problems.length > 0 ? 'fail' : 'pass',
326
+ message: problems.length > 0 ? problems.join('; ') : 'valid',
327
+ });
328
+ }
329
+ return checks;
330
+ }
331
+ function collectTopLevelYamlKeys(content) {
332
+ const keys = [];
333
+ for (const line of content.split(/\r?\n/)) {
334
+ const trimmed = line.trim();
335
+ if (!trimmed || trimmed.startsWith('#'))
336
+ continue;
337
+ if (/^\s/.test(line) || trimmed.startsWith('- '))
338
+ continue;
339
+ const match = line.match(/^['"]?([A-Za-z0-9_-]+)['"]?\s*:/);
340
+ if (match)
341
+ keys.push(match[1]);
342
+ }
343
+ return keys;
344
+ }
345
+ function invalidHandoffHash(content) {
346
+ const match = content.match(/^handoff_hash:\s*(.*)$/m);
347
+ if (!match)
348
+ return '';
349
+ const value = match[1].replace(/\s+#.*$/, '').trim();
350
+ if (!value || value === 'null')
351
+ return '';
352
+ return /^[a-f0-9]{64}$/.test(value)
353
+ ? ''
354
+ : `handoff_hash is not sha256: ${value}`;
355
+ }
356
+ function safeIsDirectory(target) {
357
+ try {
358
+ return statSync(target).isDirectory();
359
+ }
360
+ catch {
361
+ return false;
362
+ }
363
+ }
364
+ function parseDoctorScope(value) {
365
+ if (value === 'auto')
366
+ return 'auto';
367
+ return parseInstallScope(value);
368
+ }
369
+ function scopesForDoctor(scope) {
370
+ return scope === 'auto' ? ['project', 'global'] : [scope];
371
+ }
372
+ function firstInstallScope(scope) {
373
+ return scope === 'auto' ? 'global' : scope;
374
+ }
375
+ function checkAgentDependencies(agent, failed, scope, projectPath) {
376
+ const platform = getPlatformPaths(agent, scope, projectPath);
377
+ const label = agent === 'claude'
378
+ ? 'Claude'
379
+ : agent === 'codex'
380
+ ? 'Codex'
381
+ : 'OpenCode';
382
+ if (hasSuperpowers(agent)) {
383
+ console.log(` ✓ superpowers (${label})`);
384
+ }
385
+ else {
386
+ console.log(` ⚠ superpowers 未检测到(${label},WARN)`);
387
+ }
388
+ if (hasUnderstand(agent)) {
389
+ console.log(` ✓ understand-anything (${label})`);
390
+ }
391
+ else {
392
+ console.log(` ⚠ understand-anything 未检测到(${label},WARN)`);
393
+ }
394
+ if (existsSync(path.join(platform.skillsDir, 'api-doc-changelog', 'SKILL.md'))) {
395
+ console.log(` ✓ api-doc-changelog (${label})`);
396
+ }
397
+ else {
398
+ console.log(` ⚠ api-doc-changelog 缺失(${label},WARN)`);
399
+ }
400
+ return failed;
401
+ }
402
+ function checkHookRegistration(settingsFile, agent, failed) {
403
+ if (!existsSync(settingsFile)) {
404
+ console.log(` ✗ ${settingsFile} 不存在,无法检查 hook 注册(FAIL)`);
405
+ return true;
406
+ }
407
+ const settings = JSON.parse(readFileSync(settingsFile, 'utf-8'));
408
+ const sddCommands = countSddHookCommands(settingsFile, agent, settings);
409
+ if (sddCommands >= 7) {
410
+ console.log(` ✓ ${sddCommands} workflow hook command 已注册到 ${settingsFile}`);
411
+ return failed;
412
+ }
413
+ console.log(` ✗ ${settingsFile} 只有 ${sddCommands} workflow hook command(FAIL,需要 7+)`);
414
+ return true;
415
+ }
416
+ export function countSddHookCommands(settingsFile, agent, parsedSettings) {
417
+ if (!existsSync(settingsFile))
418
+ return 0;
419
+ const settings = parsedSettings ?? JSON.parse(readFileSync(settingsFile, 'utf-8'));
420
+ const hooks = settings.hooks || {};
421
+ let sddCommands = 0;
422
+ const scriptDir = agent === 'claude' ? '/scripts/' : '/hooks/';
423
+ for (const entries of Object.values(hooks)) {
424
+ if (!Array.isArray(entries))
425
+ continue;
426
+ for (const entry of entries) {
427
+ if (!entry?.hooks)
428
+ continue;
429
+ for (const h of entry.hooks) {
430
+ if (h.command?.includes(`${scriptDir}superflow-`) ||
431
+ h.command?.includes(`${scriptDir}sdd-`) ||
432
+ h.command?.includes(`${scriptDir}${agent}-auto-backup`)) {
433
+ sddCommands++;
434
+ }
435
+ }
436
+ }
437
+ }
438
+ return sddCommands;
439
+ }
440
+ function hasSuperpowers(agent) {
441
+ const home = homedir();
442
+ const roots = agent === 'codex'
443
+ ? [
444
+ path.join(home, '.codex', 'plugins', 'cache'),
445
+ path.join(home, '.codex', '.tmp', 'plugins'),
446
+ ]
447
+ : [
448
+ path.join(home, '.claude', 'plugins'),
449
+ path.join(home, '.claude', 'plugins', 'cache'),
450
+ ];
451
+ return roots.some((root) => containsPathSegment(root, 'superpowers'));
452
+ }
453
+ function hasUnderstand(agent) {
454
+ const home = homedir();
455
+ const pluginSkill = path.join(home, '.understand-anything', 'repo', 'understand-anything-plugin', 'skills', 'understand', 'SKILL.md');
456
+ if (!existsSync(pluginSkill))
457
+ return false;
458
+ if (agent === 'codex') {
459
+ return existsSync(path.join(home, '.agents', 'skills', 'understand', 'SKILL.md'));
460
+ }
461
+ return existsSync(pluginSkill);
462
+ }
463
+ function containsPathSegment(root, segment) {
464
+ if (!existsSync(root))
465
+ return false;
466
+ const stack = [root];
467
+ const needle = segment.toLowerCase();
468
+ while (stack.length > 0) {
469
+ const current = stack.pop();
470
+ let entries;
471
+ try {
472
+ entries = readdirSync(current);
473
+ }
474
+ catch {
475
+ continue;
476
+ }
477
+ for (const entry of entries) {
478
+ const full = path.join(current, entry);
479
+ if (entry.toLowerCase().includes(needle))
480
+ return true;
481
+ if (stack.length < 200 && existsSync(full)) {
482
+ try {
483
+ if (statSync(full).isDirectory())
484
+ stack.push(full);
485
+ }
486
+ catch {
487
+ continue;
488
+ }
489
+ }
490
+ }
491
+ }
492
+ return false;
493
+ }
494
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/app/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { checkSkillDeployment } from '../../domains/skill/check.js';
2
+ const SKILL_NAME = 'superflow-implement';
3
+ export async function implementCommand(_task, options = {}) {
4
+ checkSkillDeployment(SKILL_NAME, options);
5
+ }
6
+ //# sourceMappingURL=implement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implement.js","sourceRoot":"","sources":["../../../src/app/commands/implement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA0B,MAAM,8BAA8B,CAAC;AAE5F,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAc,EACd,UAA6B,EAAE;IAE/B,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC"}