adi_dev_workflow 1.1.1 → 1.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 (111) hide show
  1. package/bin/index.js +8 -8
  2. package/frameworks/agents/qa-staff-engineer.md +311 -311
  3. package/frameworks/agents/qa-validation-expert.md +458 -458
  4. package/frameworks/agents/tech-review-conformance.md +200 -200
  5. package/frameworks/commands/ministack/README.md +2 -0
  6. package/frameworks/commands/ministack/code-review.md +2 -0
  7. package/frameworks/commands/ministack/generate-intent.md +2 -0
  8. package/frameworks/commands/ministack/generate-scope.md +2 -0
  9. package/frameworks/commands/ministack/generate-tasks.md +2 -0
  10. package/frameworks/commands/ministack/generate-tech-direction.md +2 -0
  11. package/frameworks/commands/ministack/run-ministack-tasks.md +3 -0
  12. package/frameworks/commands/ministack/run-ministack-withlinear.md +2 -0
  13. package/frameworks/commands/ministack/status.md +2 -0
  14. package/frameworks/commands/sdd/code-review.md +2 -0
  15. package/frameworks/commands/sdd/generate-prd.md +2 -0
  16. package/frameworks/commands/sdd/generate-task-plan.md +2 -0
  17. package/frameworks/commands/sdd/generate-tech-direction.md +2 -0
  18. package/frameworks/commands/sdd/generate-tech-spec.md +2 -0
  19. package/frameworks/commands/sdd/generate-tests.md +2 -0
  20. package/frameworks/commands/sdd/run_tasks.md +3 -0
  21. package/frameworks/commands/sdd/run_tasks_withlinear.md +2 -0
  22. package/frameworks/commands/sdd/status.md +2 -0
  23. package/frameworks/commands/sdd/validate-sdd.md +2 -0
  24. package/frameworks/commands/sync-tasks-to-linear.md +2 -0
  25. package/frameworks/commands/taskcard/generate-taskcard.md +2 -0
  26. package/frameworks/commands/taskcard/run-taskcard.md +2 -0
  27. package/frameworks/config/ai-framework-config.yaml +112 -0
  28. package/frameworks/skills/ministack-intent-expert/SKILL.md +2 -0
  29. package/frameworks/skills/ministack-scope-expert/SKILL.md +4 -0
  30. package/frameworks/skills/sdd-prd-expert/SKILL.md +2 -0
  31. package/frameworks/skills/sdd-task-plan-expert/SKILL.md +2 -0
  32. package/frameworks/skills/taskcard-expert/SKILL.md +4 -0
  33. package/package.json +28 -28
  34. package/src/cli.js +121 -121
  35. package/src/installer.js +155 -136
  36. package/src/transformer.js +86 -86
  37. package/frameworks/skills/ministack-tasks-expert/SKILL.md +0 -204
  38. package/frameworks/skills/ministack-tasks-expert/templates/task_plan_template.md +0 -78
  39. package/frameworks/skills/ministack-tasks-expert/templates/task_template.md +0 -103
  40. package/frameworks/skills/ministack-tech-direction-expert/SKILL.md +0 -230
  41. package/frameworks/skills/ministack-tech-direction-expert/evals/evals.json +0 -1
  42. package/frameworks/skills/ministack-tech-direction-expert/templates/tech_direction-template.md +0 -17
  43. package/frameworks/skills/prompt-engineer-expert/SKILL.md +0 -232
  44. package/frameworks/skills/prompt-engineer-expert/templates/prompt_template.md +0 -139
  45. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/benchmark.json +0 -99
  46. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/benchmark.md +0 -64
  47. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/eval_metadata.json +0 -12
  48. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/grading.json +0 -32
  49. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/outputs/response.md +0 -134
  50. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/outputs/transcript.md +0 -68
  51. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/with_skill/timing.json +0 -5
  52. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/grading.json +0 -32
  53. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/outputs/response.md +0 -525
  54. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/outputs/transcript.md +0 -30
  55. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-1-happy-path/without_skill/timing.json +0 -5
  56. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/eval_metadata.json +0 -12
  57. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/grading.json +0 -32
  58. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/outputs/response.md +0 -1126
  59. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/outputs/transcript.md +0 -131
  60. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/with_skill/timing.json +0 -5
  61. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/grading.json +0 -32
  62. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/outputs/response.md +0 -452
  63. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/outputs/transcript.md +0 -78
  64. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-2-spec-simples/without_skill/timing.json +0 -5
  65. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/eval_metadata.json +0 -12
  66. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/grading.json +0 -32
  67. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/outputs/response.md +0 -101
  68. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/outputs/transcript.md +0 -133
  69. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/with_skill/timing.json +0 -5
  70. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/grading.json +0 -32
  71. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/outputs/response.md +0 -248
  72. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/outputs/transcript.md +0 -49
  73. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/eval-3-sem-user-stories/without_skill/timing.json +0 -5
  74. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-1/review.html +0 -1325
  75. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/benchmark.json +0 -94
  76. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/benchmark.md +0 -67
  77. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/eval_metadata.json +0 -12
  78. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/grading.json +0 -32
  79. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/outputs/response.md +0 -117
  80. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/outputs/transcript.md +0 -91
  81. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/with_skill/timing.json +0 -1
  82. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/grading.json +0 -32
  83. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/outputs/response.md +0 -694
  84. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/outputs/transcript.md +0 -45
  85. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-1-happy-path/without_skill/timing.json +0 -1
  86. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/eval_metadata.json +0 -12
  87. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/grading.json +0 -32
  88. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/outputs/response.md +0 -1087
  89. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/outputs/transcript.md +0 -124
  90. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/with_skill/timing.json +0 -1
  91. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/grading.json +0 -32
  92. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/outputs/response.md +0 -458
  93. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/outputs/transcript.md +0 -84
  94. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-2-spec-simples/without_skill/timing.json +0 -1
  95. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/eval_metadata.json +0 -12
  96. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/grading.json +0 -32
  97. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/outputs/response.md +0 -70
  98. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/outputs/transcript.md +0 -148
  99. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/with_skill/timing.json +0 -1
  100. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/grading.json +0 -32
  101. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/outputs/response.md +0 -249
  102. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/outputs/transcript.md +0 -80
  103. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/eval-3-sem-user-stories/without_skill/timing.json +0 -1
  104. package/frameworks/skills/sdd-task-plan-expert-workspace/iteration-2/review.html +0 -1325
  105. package/frameworks/skills/sdd-tech-direction-expert/SKILL.md +0 -235
  106. package/frameworks/skills/sdd-tech-direction-expert/evals/evals.json +0 -1
  107. package/frameworks/skills/sdd-tech-direction-expert/templates/tech_direction-template.md +0 -23
  108. package/frameworks/skills/sdd-tech-spec-expert/SKILL.md +0 -317
  109. package/frameworks/skills/sdd-tech-spec-expert/evals/evals.json +0 -199
  110. package/frameworks/skills/sdd-tech-spec-expert/templates/spec_tech_template.md +0 -290
  111. package/frameworks/skills/sdd-tech-spec-expert/templates/tech_direction-template.md +0 -23
package/src/installer.js CHANGED
@@ -1,136 +1,155 @@
1
- import { readdir, readFile, writeFile, mkdir, stat } from 'node:fs/promises';
2
- import { join, dirname } from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
- import { transformContent } from './transformer.js';
5
-
6
- const __dirname = dirname(fileURLToPath(import.meta.url));
7
- const FRAMEWORKS_DIR = join(__dirname, '..', 'frameworks');
8
-
9
- const FRAMEWORK_MAP = {
10
- sdd: {
11
- commands: 'sdd',
12
- skills: ['sdd-prd-expert', 'sdd-spec-tech-expert', 'sdd-task-plan-expert', 'sdd-qa-expert'],
13
- },
14
- ministack: {
15
- commands: 'ministack',
16
- skills: ['ministack-intent-expert', 'ministack-scope-expert', 'ministack-expert', 'ministack-qa-expert'],
17
- },
18
- taskcard: {
19
- commands: 'taskcard',
20
- skills: ['taskcard-expert', 'taskcard-qa-expert'],
21
- },
22
- shared: {
23
- commands: null, // root-level commands
24
- skills: [],
25
- },
26
- };
27
-
28
- const IDE_DIRS = {
29
- claude: '.claude',
30
- cursor: '.cursor',
31
- };
32
-
33
- /**
34
- * Copy a directory recursively, applying transformation.
35
- */
36
- async function copyDir(src, dest, target) {
37
- await mkdir(dest, { recursive: true });
38
- const entries = await readdir(src, { withFileTypes: true });
39
-
40
- for (const entry of entries) {
41
- const srcPath = join(src, entry.name);
42
- const destPath = join(dest, entry.name);
43
-
44
- if (entry.isDirectory()) {
45
- await copyDir(srcPath, destPath, target);
46
- } else if (entry.name.endsWith('.md')) {
47
- const content = await readFile(srcPath, 'utf-8');
48
- const transformed = transformContent(content, target);
49
- await writeFile(destPath, transformed, 'utf-8');
50
- } else {
51
- const content = await readFile(srcPath);
52
- await writeFile(destPath, content);
53
- }
54
- }
55
- }
56
-
57
- /**
58
- * Check if a path exists.
59
- */
60
- async function exists(path) {
61
- try {
62
- await stat(path);
63
- return true;
64
- } catch {
65
- return false;
66
- }
67
- }
68
-
69
- /**
70
- * Install selected frameworks to the target directory.
71
- *
72
- * @param {Object} options
73
- * @param {string} options.cwd - Current working directory
74
- * @param {'claude'|'cursor'} options.target - Target IDE
75
- * @param {string[]} options.frameworks - Frameworks to install ('sdd', 'ministack', 'taskcard', 'shared')
76
- * @returns {Object} Summary of installed items
77
- */
78
- export async function install({ cwd, target, frameworks }) {
79
- const ideDir = join(cwd, IDE_DIRS[target]);
80
- const commandsDir = join(ideDir, 'commands');
81
- const skillsDir = join(ideDir, 'skills');
82
- const templatesDir = join(ideDir, 'templates');
83
-
84
- const summary = { commands: 0, skills: 0, templates: 0 };
85
-
86
- for (const fw of frameworks) {
87
- const config = FRAMEWORK_MAP[fw];
88
- if (!config) continue;
89
-
90
- // Copy commands
91
- if (fw === 'shared') {
92
- // Root-level commands (generate-prompt.md, sync-tasks-to-linear.md)
93
- await mkdir(commandsDir, { recursive: true });
94
- const srcCmds = join(FRAMEWORKS_DIR, 'commands');
95
- const entries = await readdir(srcCmds, { withFileTypes: true });
96
-
97
- for (const entry of entries) {
98
- if (entry.isFile() && entry.name.endsWith('.md')) {
99
- const content = await readFile(join(srcCmds, entry.name), 'utf-8');
100
- const transformed = transformContent(content, target);
101
- await writeFile(join(commandsDir, entry.name), transformed, 'utf-8');
102
- summary.commands++;
103
- }
104
- }
105
-
106
- // Shared templates
107
- const srcTemplates = join(FRAMEWORKS_DIR, 'templates');
108
- if (await exists(srcTemplates)) {
109
- await copyDir(srcTemplates, templatesDir, target);
110
- const tplEntries = await readdir(srcTemplates);
111
- summary.templates += tplEntries.filter((f) => f.endsWith('.md')).length;
112
- }
113
- } else {
114
- // Framework-specific commands
115
- if (config.commands) {
116
- const srcCmdDir = join(FRAMEWORKS_DIR, 'commands', config.commands);
117
- const destCmdDir = join(commandsDir, config.commands);
118
- await copyDir(srcCmdDir, destCmdDir, target);
119
- const entries = await readdir(srcCmdDir);
120
- summary.commands += entries.filter((f) => f.endsWith('.md')).length;
121
- }
122
-
123
- // Framework-specific skills
124
- for (const skillName of config.skills) {
125
- const srcSkillDir = join(FRAMEWORKS_DIR, 'skills', skillName);
126
- const destSkillDir = join(skillsDir, skillName);
127
- if (await exists(srcSkillDir)) {
128
- await copyDir(srcSkillDir, destSkillDir, target);
129
- summary.skills++;
130
- }
131
- }
132
- }
133
- }
134
-
135
- return summary;
136
- }
1
+ import { readdir, readFile, writeFile, mkdir, stat } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { transformContent } from './transformer.js';
5
+
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ const FRAMEWORKS_DIR = join(__dirname, '..', 'frameworks');
8
+
9
+ const FRAMEWORK_MAP = {
10
+ sdd: {
11
+ commands: 'sdd',
12
+ skills: ['sdd-prd-expert', 'sdd-spec-tech-expert', 'sdd-task-plan-expert', 'sdd-qa-expert'],
13
+ },
14
+ ministack: {
15
+ commands: 'ministack',
16
+ skills: ['ministack-intent-expert', 'ministack-scope-expert', 'ministack-expert', 'ministack-qa-expert'],
17
+ },
18
+ taskcard: {
19
+ commands: 'taskcard',
20
+ skills: ['taskcard-expert', 'taskcard-qa-expert'],
21
+ },
22
+ shared: {
23
+ commands: null, // root-level commands
24
+ skills: [],
25
+ },
26
+ };
27
+
28
+ const IDE_DIRS = {
29
+ claude: '.claude',
30
+ cursor: '.cursor',
31
+ };
32
+
33
+ /**
34
+ * Copy a directory recursively, applying transformation.
35
+ */
36
+ async function copyDir(src, dest, target) {
37
+ await mkdir(dest, { recursive: true });
38
+ const entries = await readdir(src, { withFileTypes: true });
39
+
40
+ for (const entry of entries) {
41
+ const srcPath = join(src, entry.name);
42
+ const destPath = join(dest, entry.name);
43
+
44
+ if (entry.isDirectory()) {
45
+ await copyDir(srcPath, destPath, target);
46
+ } else if (entry.name.endsWith('.md')) {
47
+ const content = await readFile(srcPath, 'utf-8');
48
+ const transformed = transformContent(content, target);
49
+ await writeFile(destPath, transformed, 'utf-8');
50
+ } else {
51
+ const content = await readFile(srcPath);
52
+ await writeFile(destPath, content);
53
+ }
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Check if a path exists.
59
+ */
60
+ async function exists(path) {
61
+ try {
62
+ await stat(path);
63
+ return true;
64
+ } catch {
65
+ return false;
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Install selected frameworks to the target directory.
71
+ *
72
+ * @param {Object} options
73
+ * @param {string} options.cwd - Current working directory
74
+ * @param {'claude'|'cursor'} options.target - Target IDE
75
+ * @param {string[]} options.frameworks - Frameworks to install ('sdd', 'ministack', 'taskcard', 'shared')
76
+ * @returns {Object} Summary of installed items
77
+ */
78
+ export async function install({ cwd, target, frameworks }) {
79
+ const ideDir = join(cwd, IDE_DIRS[target]);
80
+ const commandsDir = join(ideDir, 'commands');
81
+ const skillsDir = join(ideDir, 'skills');
82
+ const templatesDir = join(ideDir, 'templates');
83
+ const agentsDir = join(ideDir, 'agents');
84
+
85
+ const summary = { commands: 0, skills: 0, templates: 0, agents: 0, config: 0 };
86
+
87
+ for (const fw of frameworks) {
88
+ const config = FRAMEWORK_MAP[fw];
89
+ if (!config) continue;
90
+
91
+ // Copy commands
92
+ if (fw === 'shared') {
93
+ // Root-level commands (generate-prompt.md, sync-tasks-to-linear.md)
94
+ await mkdir(commandsDir, { recursive: true });
95
+ const srcCmds = join(FRAMEWORKS_DIR, 'commands');
96
+ const entries = await readdir(srcCmds, { withFileTypes: true });
97
+
98
+ for (const entry of entries) {
99
+ if (entry.isFile() && entry.name.endsWith('.md')) {
100
+ const content = await readFile(join(srcCmds, entry.name), 'utf-8');
101
+ const transformed = transformContent(content, target);
102
+ await writeFile(join(commandsDir, entry.name), transformed, 'utf-8');
103
+ summary.commands++;
104
+ }
105
+ }
106
+
107
+ // Shared templates
108
+ const srcTemplates = join(FRAMEWORKS_DIR, 'templates');
109
+ if (await exists(srcTemplates)) {
110
+ await copyDir(srcTemplates, templatesDir, target);
111
+ const tplEntries = await readdir(srcTemplates);
112
+ summary.templates += tplEntries.filter((f) => f.endsWith('.md')).length;
113
+ }
114
+
115
+ // Shared agents
116
+ const srcAgents = join(FRAMEWORKS_DIR, 'agents');
117
+ if (await exists(srcAgents)) {
118
+ await copyDir(srcAgents, agentsDir, target);
119
+ const agentEntries = await readdir(srcAgents);
120
+ summary.agents += agentEntries.filter((f) => f.endsWith('.md')).length;
121
+ }
122
+
123
+ // Config file
124
+ const srcConfig = join(FRAMEWORKS_DIR, 'config', 'ai-framework-config.yaml');
125
+ if (await exists(srcConfig)) {
126
+ const configDestDir = join(ideDir, 'config');
127
+ await mkdir(configDestDir, { recursive: true });
128
+ const content = await readFile(srcConfig);
129
+ await writeFile(join(configDestDir, 'ai-framework-config.yaml'), content);
130
+ summary.config = 1;
131
+ }
132
+ } else {
133
+ // Framework-specific commands
134
+ if (config.commands) {
135
+ const srcCmdDir = join(FRAMEWORKS_DIR, 'commands', config.commands);
136
+ const destCmdDir = join(commandsDir, config.commands);
137
+ await copyDir(srcCmdDir, destCmdDir, target);
138
+ const entries = await readdir(srcCmdDir);
139
+ summary.commands += entries.filter((f) => f.endsWith('.md')).length;
140
+ }
141
+
142
+ // Framework-specific skills
143
+ for (const skillName of config.skills) {
144
+ const srcSkillDir = join(FRAMEWORKS_DIR, 'skills', skillName);
145
+ const destSkillDir = join(skillsDir, skillName);
146
+ if (await exists(srcSkillDir)) {
147
+ await copyDir(srcSkillDir, destSkillDir, target);
148
+ summary.skills++;
149
+ }
150
+ }
151
+ }
152
+ }
153
+
154
+ return summary;
155
+ }
@@ -1,86 +1,86 @@
1
- const REPLACEMENTS = [
2
- // Remove Claude Code specific tool instructions
3
- {
4
- pattern: /- \*\*Claude Code\*\*: use a ferramenta `AskUserQuestion`[^\n]*/g,
5
- replacement: '',
6
- },
7
- {
8
- pattern: /\*\*Claude Code\*\*: use a ferramenta `AskUserQuestion`[^\n]*/g,
9
- replacement: '',
10
- },
11
- // Replace AskUserQuestion references with generic
12
- {
13
- pattern: /`AskUserQuestion`/g,
14
- replacement: 'perguntas interativas ao usuario',
15
- },
16
- {
17
- pattern: /AskUserQuestion/g,
18
- replacement: 'pergunte ao usuario',
19
- },
20
- // Replace directory references
21
- {
22
- pattern: /\.claude\/rules\//g,
23
- replacement: '.cursor/rules/',
24
- },
25
- {
26
- pattern: /\.claude\/templates\//g,
27
- replacement: '.cursor/templates/',
28
- },
29
- {
30
- pattern: /\.claude\/skills\//g,
31
- replacement: '.cursor/skills/',
32
- },
33
- {
34
- pattern: /\.claude\/commands\//g,
35
- replacement: '.cursor/commands/',
36
- },
37
- // Replace .claude/agents/ references
38
- {
39
- pattern: /\.claude\/agents\//g,
40
- replacement: '.cursor/agents/',
41
- },
42
- // Replace all remaining .claude/ references
43
- {
44
- pattern: /`\.claude\//g,
45
- replacement: '`.cursor/',
46
- },
47
- // Replace tool/IDE name references
48
- {
49
- pattern: /no Claude Code/g,
50
- replacement: 'no Cursor',
51
- },
52
- {
53
- pattern: /do Claude Code/g,
54
- replacement: 'do Cursor',
55
- },
56
- {
57
- pattern: /Claude Code Review Agent/g,
58
- replacement: 'Code Review Agent',
59
- },
60
- {
61
- pattern: /\(Claude Code\)/g,
62
- replacement: '(Cursor)',
63
- },
64
- {
65
- pattern: /Claude Code/g,
66
- replacement: 'Cursor',
67
- },
68
- ];
69
-
70
- /**
71
- * Transform file content from Claude Code format to Cursor format.
72
- * Returns unchanged content if target is 'claude'.
73
- */
74
- export function transformContent(content, target) {
75
- if (target === 'claude') return content;
76
-
77
- let result = content;
78
- for (const { pattern, replacement } of REPLACEMENTS) {
79
- result = result.replace(pattern, replacement);
80
- }
81
-
82
- // Clean up empty lines left by removed lines
83
- result = result.replace(/\n{3,}/g, '\n\n');
84
-
85
- return result;
86
- }
1
+ const REPLACEMENTS = [
2
+ // Remove Claude Code specific tool instructions
3
+ {
4
+ pattern: /- \*\*Claude Code\*\*: use a ferramenta `AskUserQuestion`[^\n]*/g,
5
+ replacement: '',
6
+ },
7
+ {
8
+ pattern: /\*\*Claude Code\*\*: use a ferramenta `AskUserQuestion`[^\n]*/g,
9
+ replacement: '',
10
+ },
11
+ // Replace AskUserQuestion references with generic
12
+ {
13
+ pattern: /`AskUserQuestion`/g,
14
+ replacement: 'perguntas interativas ao usuario',
15
+ },
16
+ {
17
+ pattern: /AskUserQuestion/g,
18
+ replacement: 'pergunte ao usuario',
19
+ },
20
+ // Replace directory references
21
+ {
22
+ pattern: /\.claude\/rules\//g,
23
+ replacement: '.cursor/rules/',
24
+ },
25
+ {
26
+ pattern: /\.claude\/templates\//g,
27
+ replacement: '.cursor/templates/',
28
+ },
29
+ {
30
+ pattern: /\.claude\/skills\//g,
31
+ replacement: '.cursor/skills/',
32
+ },
33
+ {
34
+ pattern: /\.claude\/commands\//g,
35
+ replacement: '.cursor/commands/',
36
+ },
37
+ // Replace .claude/agents/ references
38
+ {
39
+ pattern: /\.claude\/agents\//g,
40
+ replacement: '.cursor/agents/',
41
+ },
42
+ // Replace all remaining .claude/ references
43
+ {
44
+ pattern: /`\.claude\//g,
45
+ replacement: '`.cursor/',
46
+ },
47
+ // Replace tool/IDE name references
48
+ {
49
+ pattern: /no Claude Code/g,
50
+ replacement: 'no Cursor',
51
+ },
52
+ {
53
+ pattern: /do Claude Code/g,
54
+ replacement: 'do Cursor',
55
+ },
56
+ {
57
+ pattern: /Claude Code Review Agent/g,
58
+ replacement: 'Code Review Agent',
59
+ },
60
+ {
61
+ pattern: /\(Claude Code\)/g,
62
+ replacement: '(Cursor)',
63
+ },
64
+ {
65
+ pattern: /Claude Code/g,
66
+ replacement: 'Cursor',
67
+ },
68
+ ];
69
+
70
+ /**
71
+ * Transform file content from Claude Code format to Cursor format.
72
+ * Returns unchanged content if target is 'claude'.
73
+ */
74
+ export function transformContent(content, target) {
75
+ if (target === 'claude') return content;
76
+
77
+ let result = content;
78
+ for (const { pattern, replacement } of REPLACEMENTS) {
79
+ result = result.replace(pattern, replacement);
80
+ }
81
+
82
+ // Clean up empty lines left by removed lines
83
+ result = result.replace(/\n{3,}/g, '\n\n');
84
+
85
+ return result;
86
+ }
@@ -1,204 +0,0 @@
1
- ---
2
- name: ministack-tasks-expert
3
- description: Especialista em geracao de TASKS do framework miniStack. Atua como Engenheiro de Software Senior decompondo SCOPE em tasks atomicas e executaveis.
4
- argument-hint: [INTENT aprovada + SCOPE aprovado]
5
- ---
6
-
7
- Voce e um **Engenheiro de Software Senior** que decompoe SCOPE aprovado em tasks atomicas e executaveis.
8
-
9
- Você domina completamente o framework miniStack e seu foco é **EXCLUSIVAMENTE** na geração de TASKS — definindo COMO EXECUTAR a implementação em unidades atômicas de trabalho.
10
-
11
- ---
12
-
13
- # Regra de Acentuação
14
-
15
- Todo artefato gerado por esta skill é um documento em português brasileiro. Todo conteúdo textual (títulos, descrições, instruções, regras, mensagens) deve usar acentuação correta do pt-BR:
16
-
17
- - Títulos e seções: `Descrição`, `Restrições`, `Instruções`, `Validação`, `Configuração`
18
- - Corpo do texto: `não`, `é`, `está`, `será`, `também`, `através`, `após`, `até`, `único`
19
- - Termos técnicos em português: `autenticação`, `paginação`, `migração`, `funcionalidade`
20
-
21
- Apenas nomes de código (funções, variáveis, structs, pacotes) permanecem sem acento por serem em inglês.
22
-
23
- ---
24
-
25
- # Framework miniStack — Especialista TASKS
26
-
27
- ## Visao Geral
28
-
29
- **miniStack** e um framework estruturado para decomposicao e execucao de features de forma colaborativa, baseado em documentacao clara com **3 etapas principais**: INTENT, SCOPE e TASKS.
30
-
31
- ### Fluxo Completo
32
-
33
- ```
34
- Descricao da Feature
35
- |
36
- /generate-intent (ministack-intent-expert)
37
- | (INTENT aprovada)
38
- /generate-scope (ministack-scope-expert)
39
- | (SCOPE aprovado)
40
- /generate-tasks <-- voce esta aqui (ministack-tasks-expert)
41
- | (TASKS aprovadas)
42
- /run-ministack-tasks (comando orquestrador)
43
- |
44
- Feature Implementada
45
- ```
46
-
47
- O TASKS Expert responde: **COMO decompor o SCOPE em unidades atomicas de trabalho?**
48
-
49
- ---
50
-
51
- ## Principio Fundamental
52
-
53
- As TASKS transformam o SCOPE aprovado em **unidades atomicas de trabalho** executaveis por humanos ou agentes de IA.
54
-
55
- ## Regras Obrigatorias
56
-
57
- - **NUNCA** deduzir escopo ou inventar informacoes — na DUVIDA, PERGUNTE AO USUARIO
58
- - **SEMPRE** salvar os arquivos fisicos antes de pedir aprovacao
59
- - **NUNCA** iniciar automaticamente a proxima etapa
60
- - **Claude Code**: use a ferramenta `AskUserQuestion` para esclarecer duvidas com o usuario
61
-
62
- ## Criterios de Qualidade
63
-
64
- | Atributo | Descricao |
65
- |----------|-----------|
66
- | Atomica | Executavel sem novas decisoes |
67
- | Independente | Minimize dependencias |
68
- | Pequena | Se > 3 subtarefas, quebre em tasks |
69
- | Clara | Suficiente para LLM executar |
70
- | Verificavel | Criterio claro de conclusao |
71
- | Ordenada | Ordem e dependencias definidas |
72
-
73
- ## Processo (3 Fases)
74
-
75
- ### Fase 1: Analise e Validacao
76
-
77
- **ANTES de gerar as tasks**, analise Intent e Scope:
78
-
79
- - Intent esta claro sobre o objetivo?
80
- - Scope delimita claramente o que entra e sai?
81
- - Ha ambiguidades que precisam esclarecimento?
82
- - Detectou dependencias ocultas?
83
- - Algo parece inviavel ou conflitante?
84
-
85
- Se houver duvidas, pergunte ao usuario antes de prosseguir.
86
-
87
- ### Fase 2: Geracao das Tasks
88
-
89
- Para cada task, preencha o template individual (`task_template.md`) com:
90
- - **ID**: T1, T2, T3... (unico)
91
- - **Nome**: Descricao curta
92
- - **Objetivo**: O que sera entregue
93
- - **Arquivos**: Criados/modificados (economiza tokens e scans)
94
- - **Dependencias**: Quais tasks antes
95
- - **Criterio de Conclusao**: Como validar
96
- - **Detalhes de Implementacao**: Subtasks com checklist
97
- - **Testes**: Secao controlada pelo comando orquestrador (ver nota abaixo)
98
-
99
- Alem disso, preencha o `task_plan_template.md` com:
100
- - **Macro-Fases**: agrupamento logico das tasks
101
- - **Lista de Tasks**: tabela com links para cada arquivo individual
102
- - **Grafo de Dependencias**: ordem de execucao e paralelismo
103
- - **Visao consolidada de arquivos**: todos os arquivos impactados
104
-
105
- > **IMPORTANTE**: A secao de **Testes** de cada task e controlada pelo comando orquestrador
106
- > (`/ministack:generate-tasks`) que delega ao agente QA especializado (`qa-staff-engineer`).
107
- > Voce NAO deve delegar diretamente ao agente QA — apenas deixe a secao de Testes vazia
108
- > com o marcador `[PENDENTE — sera preenchida pelo agente QA]`.
109
-
110
- ### Fase 3: Salvar Arquivos (OBRIGATORIO)
111
-
112
- 1. Identificar nome da feature a partir da INTENT/SCOPE
113
- 2. **Remover todos os comentarios `<!-- LLM-ONLY: ... -->`** do conteudo antes de salvar — sao instrucoes internas do template e NAO devem aparecer nos arquivos gerados
114
- 3. **Salvar os arquivos fisicos**:
115
- - Task Plan: `docs/[nome-feature]/vN/task_plan.md`
116
- - Cada task individual: `docs/[nome-feature]/vN/tasks/T1.md`, `T2.md`, ...
117
- 4. Confirmar que todos os arquivos foram criados
118
-
119
- ## Templates
120
-
121
- - **Task Plan (indice)**: [task_plan_template.md](templates/task_plan_template.md)
122
- - **Task Individual**: [task_template.md](templates/task_template.md)
123
-
124
- ## Estrutura de Saida
125
-
126
- ```
127
- docs/
128
- <nome-feature>/
129
- vN/
130
- intent.md # INTENT aprovada (ministack-intent-expert)
131
- scope.md # SCOPE aprovado (ministack-scope-expert)
132
- task_plan.md # Indice e coordenacao (voce gera este arquivo)
133
- tasks/
134
- T1.md # Task individual (voce gera cada arquivo)
135
- T2.md
136
- T3.md
137
- ...
138
- ```
139
-
140
- ## Saida Esperada
141
-
142
- ```
143
- Arquivos salvos em: docs/[nome-feature]/vN/
144
- - task_plan.md (indice com [N] tasks)
145
- - tasks/T1.md ... tasks/T[N].md
146
-
147
- Tarefas Geradas
148
- Total: [N] tasks
149
- Sequencia: T1 -> T2 -> T3 (paralelo: T4, T5) -> T6
150
-
151
- Aprova essas tasks para execucao? (sim/nao)
152
- ```
153
-
154
- **IMPORTANTE:**
155
- - NAO inicie `/run-ministack-tasks` automaticamente
156
- - NAO sugira executar o proximo comando
157
- - Apenas aguarde a confirmacao do usuario e encerre
158
-
159
- ---
160
-
161
- ## Guardrails Inviolaveis
162
-
163
- 1. **Aprovacao obrigatoria** — nunca avance sem confirmacao do usuario
164
- 2. **Sem invencao** — se faltar informacao, PERGUNTE ao usuario
165
- 3. **Escopo fechado** — cada documento deve ser auto-suficiente
166
- 4. **Template completo** — todas as secoes devem ser preenchidas
167
- 5. **Arquivos fisicos** — SEMPRE salvar antes de apresentar ao usuario
168
- 6. **AskUserQuestion** — no Claude Code, use esta ferramenta para esclarecer duvidas
169
- 7. **Testes via orquestrador** — NAO delegue testes diretamente, o comando orquestrador faz isso
170
-
171
- ---
172
-
173
- ## Convencoes
174
-
175
- ### Nomenclatura
176
-
177
- | Elemento | Convencao | Exemplo |
178
- |----------|-----------|---------|
179
- | Nome da feature | kebab-case | `auth-oauth2`, `user-profile` |
180
- | ID de task | T + numero | `T1`, `T2`, `T3` |
181
- | Diretorio | `docs/<nome>/vN/` | `docs/auth/v1/` |
182
- | Arquivo task plan | `task_plan.md` | `docs/auth/v1/task_plan.md` |
183
- | Arquivo task individual | `T[N].md` | `docs/auth/v1/tasks/T1.md` |
184
-
185
- ### Estrutura de Diretorios
186
-
187
- ```
188
- docs/
189
- <nome-feature>/
190
- vN/
191
- intent.md # INTENT aprovada (ministack-intent-expert)
192
- scope.md # SCOPE aprovado (ministack-scope-expert)
193
- task_plan.md # Indice e coordenacao (voce gera este arquivo)
194
- tasks/
195
- T1.md # Task individual (voce gera cada arquivo)
196
- T2.md
197
- ...
198
- ```
199
-
200
- ---
201
-
202
- ## Entrada
203
-
204
- $ARGUMENTS