@haoyiyin/workflow 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 (223) hide show
  1. package/README.md +168 -0
  2. package/SETUP.md +71 -0
  3. package/SKILL.md +68 -0
  4. package/USAGE.md +152 -0
  5. package/dist/bin/yi-workflow.d.ts +3 -0
  6. package/dist/bin/yi-workflow.d.ts.map +1 -0
  7. package/dist/bin/yi-workflow.js +39 -0
  8. package/dist/bin/yi-workflow.js.map +1 -0
  9. package/dist/src/agents/contracts.d.ts +120 -0
  10. package/dist/src/agents/contracts.d.ts.map +1 -0
  11. package/dist/src/agents/contracts.js +431 -0
  12. package/dist/src/agents/contracts.js.map +1 -0
  13. package/dist/src/agents/dispatcher-enhanced.d.ts +68 -0
  14. package/dist/src/agents/dispatcher-enhanced.d.ts.map +1 -0
  15. package/dist/src/agents/dispatcher-enhanced.js +290 -0
  16. package/dist/src/agents/dispatcher-enhanced.js.map +1 -0
  17. package/dist/src/agents/dispatcher.d.ts +107 -0
  18. package/dist/src/agents/dispatcher.d.ts.map +1 -0
  19. package/dist/src/agents/dispatcher.js +454 -0
  20. package/dist/src/agents/dispatcher.js.map +1 -0
  21. package/dist/src/agents/index.d.ts +11 -0
  22. package/dist/src/agents/index.d.ts.map +1 -0
  23. package/dist/src/agents/index.js +10 -0
  24. package/dist/src/agents/index.js.map +1 -0
  25. package/dist/src/agents/resilience.d.ts +86 -0
  26. package/dist/src/agents/resilience.d.ts.map +1 -0
  27. package/dist/src/agents/resilience.js +183 -0
  28. package/dist/src/agents/resilience.js.map +1 -0
  29. package/dist/src/agents/token-budget.d.ts +47 -0
  30. package/dist/src/agents/token-budget.d.ts.map +1 -0
  31. package/dist/src/agents/token-budget.js +63 -0
  32. package/dist/src/agents/token-budget.js.map +1 -0
  33. package/dist/src/agents/types.d.ts +59 -0
  34. package/dist/src/agents/types.d.ts.map +1 -0
  35. package/dist/src/agents/types.js +5 -0
  36. package/dist/src/agents/types.js.map +1 -0
  37. package/dist/src/guard/main-agent.d.ts +72 -0
  38. package/dist/src/guard/main-agent.d.ts.map +1 -0
  39. package/dist/src/guard/main-agent.js +184 -0
  40. package/dist/src/guard/main-agent.js.map +1 -0
  41. package/dist/src/hooks/builtin/index.d.ts +9 -0
  42. package/dist/src/hooks/builtin/index.d.ts.map +1 -0
  43. package/dist/src/hooks/builtin/index.js +9 -0
  44. package/dist/src/hooks/builtin/index.js.map +1 -0
  45. package/dist/src/hooks/builtin/on-error.d.ts +7 -0
  46. package/dist/src/hooks/builtin/on-error.d.ts.map +1 -0
  47. package/dist/src/hooks/builtin/on-error.js +15 -0
  48. package/dist/src/hooks/builtin/on-error.js.map +1 -0
  49. package/dist/src/hooks/builtin/post-execute.d.ts +7 -0
  50. package/dist/src/hooks/builtin/post-execute.d.ts.map +1 -0
  51. package/dist/src/hooks/builtin/post-execute.js +30 -0
  52. package/dist/src/hooks/builtin/post-execute.js.map +1 -0
  53. package/dist/src/hooks/builtin/post-plan.d.ts +7 -0
  54. package/dist/src/hooks/builtin/post-plan.d.ts.map +1 -0
  55. package/dist/src/hooks/builtin/post-plan.js +15 -0
  56. package/dist/src/hooks/builtin/post-plan.js.map +1 -0
  57. package/dist/src/hooks/builtin/pre-execute.d.ts +7 -0
  58. package/dist/src/hooks/builtin/pre-execute.d.ts.map +1 -0
  59. package/dist/src/hooks/builtin/pre-execute.js +22 -0
  60. package/dist/src/hooks/builtin/pre-execute.js.map +1 -0
  61. package/dist/src/hooks/builtin/pre-plan.d.ts +7 -0
  62. package/dist/src/hooks/builtin/pre-plan.d.ts.map +1 -0
  63. package/dist/src/hooks/builtin/pre-plan.js +19 -0
  64. package/dist/src/hooks/builtin/pre-plan.js.map +1 -0
  65. package/dist/src/hooks/index.d.ts +8 -0
  66. package/dist/src/hooks/index.d.ts.map +1 -0
  67. package/dist/src/hooks/index.js +4 -0
  68. package/dist/src/hooks/index.js.map +1 -0
  69. package/dist/src/hooks/loader.d.ts +16 -0
  70. package/dist/src/hooks/loader.d.ts.map +1 -0
  71. package/dist/src/hooks/loader.js +77 -0
  72. package/dist/src/hooks/loader.js.map +1 -0
  73. package/dist/src/hooks/manager.d.ts +20 -0
  74. package/dist/src/hooks/manager.d.ts.map +1 -0
  75. package/dist/src/hooks/manager.js +76 -0
  76. package/dist/src/hooks/manager.js.map +1 -0
  77. package/dist/src/hooks/types-enhanced.d.ts +30 -0
  78. package/dist/src/hooks/types-enhanced.d.ts.map +1 -0
  79. package/dist/src/hooks/types-enhanced.js +22 -0
  80. package/dist/src/hooks/types-enhanced.js.map +1 -0
  81. package/dist/src/hooks/types.d.ts +27 -0
  82. package/dist/src/hooks/types.d.ts.map +1 -0
  83. package/dist/src/hooks/types.js +2 -0
  84. package/dist/src/hooks/types.js.map +1 -0
  85. package/dist/src/index.d.ts +43 -0
  86. package/dist/src/index.d.ts.map +1 -0
  87. package/dist/src/index.js +41 -0
  88. package/dist/src/index.js.map +1 -0
  89. package/dist/src/persistence/index.d.ts +7 -0
  90. package/dist/src/persistence/index.d.ts.map +1 -0
  91. package/dist/src/persistence/index.js +6 -0
  92. package/dist/src/persistence/index.js.map +1 -0
  93. package/dist/src/persistence/plan-md.d.ts +11 -0
  94. package/dist/src/persistence/plan-md.d.ts.map +1 -0
  95. package/dist/src/persistence/plan-md.js +125 -0
  96. package/dist/src/persistence/plan-md.js.map +1 -0
  97. package/dist/src/persistence/state-md.d.ts +17 -0
  98. package/dist/src/persistence/state-md.d.ts.map +1 -0
  99. package/dist/src/persistence/state-md.js +143 -0
  100. package/dist/src/persistence/state-md.js.map +1 -0
  101. package/dist/src/persistence/types.d.ts +85 -0
  102. package/dist/src/persistence/types.d.ts.map +1 -0
  103. package/dist/src/persistence/types.js +5 -0
  104. package/dist/src/persistence/types.js.map +1 -0
  105. package/dist/src/router/classifier.d.ts +108 -0
  106. package/dist/src/router/classifier.d.ts.map +1 -0
  107. package/dist/src/router/classifier.js +476 -0
  108. package/dist/src/router/classifier.js.map +1 -0
  109. package/dist/src/router/guard.d.ts +128 -0
  110. package/dist/src/router/guard.d.ts.map +1 -0
  111. package/dist/src/router/guard.js +370 -0
  112. package/dist/src/router/guard.js.map +1 -0
  113. package/dist/src/router/index.d.ts +10 -0
  114. package/dist/src/router/index.d.ts.map +1 -0
  115. package/dist/src/router/index.js +8 -0
  116. package/dist/src/router/index.js.map +1 -0
  117. package/dist/src/router/router.d.ts +58 -0
  118. package/dist/src/router/router.d.ts.map +1 -0
  119. package/dist/src/router/router.js +78 -0
  120. package/dist/src/router/router.js.map +1 -0
  121. package/dist/src/router/types.d.ts +100 -0
  122. package/dist/src/router/types.d.ts.map +1 -0
  123. package/dist/src/router/types.js +24 -0
  124. package/dist/src/router/types.js.map +1 -0
  125. package/dist/src/skills/agents-md/index.d.ts +9 -0
  126. package/dist/src/skills/agents-md/index.d.ts.map +1 -0
  127. package/dist/src/skills/agents-md/index.js +28 -0
  128. package/dist/src/skills/agents-md/index.js.map +1 -0
  129. package/dist/src/skills/execute-plan/index.d.ts +141 -0
  130. package/dist/src/skills/execute-plan/index.d.ts.map +1 -0
  131. package/dist/src/skills/execute-plan/index.js +784 -0
  132. package/dist/src/skills/execute-plan/index.js.map +1 -0
  133. package/dist/src/skills/index.d.ts +14 -0
  134. package/dist/src/skills/index.d.ts.map +1 -0
  135. package/dist/src/skills/index.js +10 -0
  136. package/dist/src/skills/index.js.map +1 -0
  137. package/dist/src/skills/quick-task/index.d.ts +75 -0
  138. package/dist/src/skills/quick-task/index.d.ts.map +1 -0
  139. package/dist/src/skills/quick-task/index.js +284 -0
  140. package/dist/src/skills/quick-task/index.js.map +1 -0
  141. package/dist/src/skills/registry.d.ts +15 -0
  142. package/dist/src/skills/registry.d.ts.map +1 -0
  143. package/dist/src/skills/registry.js +44 -0
  144. package/dist/src/skills/registry.js.map +1 -0
  145. package/dist/src/skills/review-diff/index.d.ts +96 -0
  146. package/dist/src/skills/review-diff/index.d.ts.map +1 -0
  147. package/dist/src/skills/review-diff/index.js +316 -0
  148. package/dist/src/skills/review-diff/index.js.map +1 -0
  149. package/dist/src/skills/skill.d.ts +24 -0
  150. package/dist/src/skills/skill.d.ts.map +1 -0
  151. package/dist/src/skills/skill.js +39 -0
  152. package/dist/src/skills/skill.js.map +1 -0
  153. package/dist/src/skills/systematic-debugging/index.d.ts +90 -0
  154. package/dist/src/skills/systematic-debugging/index.d.ts.map +1 -0
  155. package/dist/src/skills/systematic-debugging/index.js +305 -0
  156. package/dist/src/skills/systematic-debugging/index.js.map +1 -0
  157. package/dist/src/skills/tdd/index.d.ts +103 -0
  158. package/dist/src/skills/tdd/index.d.ts.map +1 -0
  159. package/dist/src/skills/tdd/index.js +338 -0
  160. package/dist/src/skills/tdd/index.js.map +1 -0
  161. package/dist/src/skills/to-plan/index-enhanced.d.ts +100 -0
  162. package/dist/src/skills/to-plan/index-enhanced.d.ts.map +1 -0
  163. package/dist/src/skills/to-plan/index-enhanced.js +452 -0
  164. package/dist/src/skills/to-plan/index-enhanced.js.map +1 -0
  165. package/dist/src/skills/to-plan/index.d.ts +131 -0
  166. package/dist/src/skills/to-plan/index.d.ts.map +1 -0
  167. package/dist/src/skills/to-plan/index.js +460 -0
  168. package/dist/src/skills/to-plan/index.js.map +1 -0
  169. package/dist/src/skills/types.d.ts +44 -0
  170. package/dist/src/skills/types.d.ts.map +1 -0
  171. package/dist/src/skills/types.js +2 -0
  172. package/dist/src/skills/types.js.map +1 -0
  173. package/dist/src/state/cleanup.d.ts +22 -0
  174. package/dist/src/state/cleanup.d.ts.map +1 -0
  175. package/dist/src/state/cleanup.js +87 -0
  176. package/dist/src/state/cleanup.js.map +1 -0
  177. package/dist/src/state/index.d.ts +9 -0
  178. package/dist/src/state/index.d.ts.map +1 -0
  179. package/dist/src/state/index.js +5 -0
  180. package/dist/src/state/index.js.map +1 -0
  181. package/dist/src/state/manager.d.ts +15 -0
  182. package/dist/src/state/manager.d.ts.map +1 -0
  183. package/dist/src/state/manager.js +73 -0
  184. package/dist/src/state/manager.js.map +1 -0
  185. package/dist/src/state/persistence.d.ts +13 -0
  186. package/dist/src/state/persistence.d.ts.map +1 -0
  187. package/dist/src/state/persistence.js +68 -0
  188. package/dist/src/state/persistence.js.map +1 -0
  189. package/dist/src/state/types.d.ts +26 -0
  190. package/dist/src/state/types.d.ts.map +1 -0
  191. package/dist/src/state/types.js +2 -0
  192. package/dist/src/state/types.js.map +1 -0
  193. package/dist/src/state/validator.d.ts +12 -0
  194. package/dist/src/state/validator.d.ts.map +1 -0
  195. package/dist/src/state/validator.js +56 -0
  196. package/dist/src/state/validator.js.map +1 -0
  197. package/dist/src/types.d.ts +83 -0
  198. package/dist/src/types.d.ts.map +1 -0
  199. package/dist/src/types.js +5 -0
  200. package/dist/src/types.js.map +1 -0
  201. package/dist/src/utils/compress.d.ts +37 -0
  202. package/dist/src/utils/compress.d.ts.map +1 -0
  203. package/dist/src/utils/compress.js +298 -0
  204. package/dist/src/utils/compress.js.map +1 -0
  205. package/dist/src/utils/git.d.ts +9 -0
  206. package/dist/src/utils/git.d.ts.map +1 -0
  207. package/dist/src/utils/git.js +81 -0
  208. package/dist/src/utils/git.js.map +1 -0
  209. package/dist/src/utils/index.d.ts +7 -0
  210. package/dist/src/utils/index.d.ts.map +1 -0
  211. package/dist/src/utils/index.js +7 -0
  212. package/dist/src/utils/index.js.map +1 -0
  213. package/dist/src/utils/logger.d.ts +6 -0
  214. package/dist/src/utils/logger.d.ts.map +1 -0
  215. package/dist/src/utils/logger.js +19 -0
  216. package/dist/src/utils/logger.js.map +1 -0
  217. package/dist/src/utils/paths.d.ts +12 -0
  218. package/dist/src/utils/paths.d.ts.map +1 -0
  219. package/dist/src/utils/paths.js +44 -0
  220. package/dist/src/utils/paths.js.map +1 -0
  221. package/package.json +76 -0
  222. package/scripts/postinstall.js +69 -0
  223. package/yi-workflow.js +17 -0
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Review Diff Skill - Reviews code changes via reviewer subagents
3
+ *
4
+ * Use case: Review PR, branch, commit, or diff-file
5
+ * Pattern: Get diff → Inspect surface → Check requirements → Check tests →
6
+ * Check quality → Return structured review report
7
+ *
8
+ * Spawns reviewer subagent(s) to review diffs.
9
+ * Returns structured review report with severity-classified issues.
10
+ */
11
+ import { z } from 'zod';
12
+ import { Skill } from '../skill.js';
13
+ import { createDispatcher } from '../../agents/dispatcher.js';
14
+ import { createMainAgentGuard } from '../../guard/main-agent.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Schemas
17
+ // ---------------------------------------------------------------------------
18
+ const ReviewDiffInputSchema = z.object({
19
+ target: z.string().min(1),
20
+ targetType: z
21
+ .enum(['pr', 'branch', 'commit', 'diff-file'])
22
+ .default('branch'),
23
+ planPath: z.string().optional(),
24
+ focus: z
25
+ .array(z.enum(['security', 'performance', 'correctness', 'style', 'tests']))
26
+ .optional(),
27
+ model: z.string().optional(),
28
+ });
29
+ const ReviewDiffOutputSchema = z.object({
30
+ decision: z.enum(['approve', 'changes', 'blocked', 'needs-evidence']),
31
+ issues: z.array(z.object({
32
+ severity: z.enum(['blocker', 'major', 'minor', 'note']),
33
+ file: z.string().optional(),
34
+ line: z.number().optional(),
35
+ description: z.string(),
36
+ action: z.string(),
37
+ })),
38
+ specCompliance: z.enum(['pass', 'partial', 'fail']),
39
+ testAssessment: z.enum(['adequate', 'missing', 'failing']),
40
+ strengths: z.array(z.string()),
41
+ summary: z.string(),
42
+ tokensUsed: z.number(),
43
+ });
44
+ // ---------------------------------------------------------------------------
45
+ // Prompt builders (pure functions)
46
+ // ---------------------------------------------------------------------------
47
+ function buildDiffPrompt(targetType, target) {
48
+ const commands = {
49
+ pr: `gh pr diff ${target}`,
50
+ branch: `git diff origin/${target}...HEAD`,
51
+ commit: `git show ${target}`,
52
+ 'diff-file': `cat ${target}`,
53
+ };
54
+ const cmd = commands[targetType] ?? `git diff ${target}`;
55
+ return [
56
+ `Get the diff for ${targetType}: ${target}`,
57
+ '',
58
+ `Run: \`${cmd}\``,
59
+ '',
60
+ 'Return the full diff content. Include changed file paths and line numbers.',
61
+ ].join('\n');
62
+ }
63
+ function buildSurfacePrompt(diff) {
64
+ return [
65
+ 'Analyze the changed surface from this diff:',
66
+ '',
67
+ diff.slice(0, 5000),
68
+ '',
69
+ 'Report:',
70
+ '- Files changed (list each path)',
71
+ '- Lines added / removed per file',
72
+ '- Scope assessment (localized vs wide-ranging)',
73
+ ].join('\n');
74
+ }
75
+ function buildSpecCompliancePrompt(diff, _planPath) {
76
+ return [
77
+ 'Compare implementation to requirements.',
78
+ '',
79
+ 'Read the plan file to understand what was requested.',
80
+ '',
81
+ '## Diff',
82
+ diff.slice(0, 4000),
83
+ '',
84
+ 'Check: Does the implementation satisfy the plan requirements?',
85
+ 'Return: pass, partial, or fail with specific violations listed.',
86
+ ].join('\n');
87
+ }
88
+ function buildQualityReviewPrompt(diff, focusAreas) {
89
+ const focusText = focusAreas.length > 0 ? focusAreas.join(', ') : 'all aspects';
90
+ return [
91
+ `Review code quality focusing on: ${focusText}`,
92
+ '',
93
+ '## Diff',
94
+ diff.slice(0, 5000),
95
+ '',
96
+ '## Check Each Category',
97
+ '',
98
+ '- **Correctness**: Logic errors, edge cases, off-by-one',
99
+ '- **Security**: Injection risks, auth bypass, secrets in code, input validation',
100
+ '- **Performance**: N+1 queries, unnecessary allocations, blocking calls',
101
+ '- **Style**: Naming conventions, consistency with codebase, immutability',
102
+ '- **Error Handling**: Caught errors, graceful degradation, user-facing messages',
103
+ '',
104
+ '## Output Format',
105
+ '',
106
+ 'For each issue found, output one line:',
107
+ '`SEVERITY|FILE|LINE|DESCRIPTION|SUGGESTED_ACTION`',
108
+ '',
109
+ 'Severity values: BLOCKER, MAJOR, MINOR, NOTE',
110
+ 'BLOCKER = must fix before merge (security hole, broken build, data loss)',
111
+ 'MAJOR = should fix (bug, performance problem, missing error handling)',
112
+ 'MINOR = nice to fix (style, naming, minor duplication)',
113
+ 'NOTE = observation, not a problem',
114
+ ].join('\n');
115
+ }
116
+ function parseIssues(output) {
117
+ const issues = [];
118
+ const lines = output.split('\n');
119
+ for (const line of lines) {
120
+ const match = line.match(/^(BLOCKER|MAJOR|MINOR|NOTE)\s*\|\s*([^|]*)\s*\|\s*(\d+)\s*\|\s*([^|]+)\s*\|\s*(.+)$/i);
121
+ if (match) {
122
+ const file = match[2]?.trim();
123
+ issues.push({
124
+ severity: match[1].toLowerCase(),
125
+ file: file || undefined,
126
+ line: parseInt(match[3], 10),
127
+ description: match[4].trim(),
128
+ action: match[5].trim(),
129
+ });
130
+ }
131
+ }
132
+ return issues;
133
+ }
134
+ function determineDecision(issues) {
135
+ if (issues.some((i) => i.severity === 'blocker'))
136
+ return 'blocked';
137
+ if (issues.some((i) => i.severity === 'major'))
138
+ return 'changes';
139
+ return 'approve';
140
+ }
141
+ function assessTests(output) {
142
+ const lower = output.toLowerCase();
143
+ if (lower.includes('missing') || lower.includes('no test'))
144
+ return 'missing';
145
+ if (lower.includes('fail'))
146
+ return 'failing';
147
+ return 'adequate';
148
+ }
149
+ function assessSpecCompliance(output) {
150
+ const lower = output.toLowerCase();
151
+ if (lower.includes('fail'))
152
+ return 'fail';
153
+ if (lower.includes('partial'))
154
+ return 'partial';
155
+ return 'pass';
156
+ }
157
+ // ---------------------------------------------------------------------------
158
+ // Skill class
159
+ // ---------------------------------------------------------------------------
160
+ export class ReviewDiffSkill extends Skill {
161
+ constructor() {
162
+ super({
163
+ name: 'review-diff',
164
+ description: 'Review code changes (diff/branch/PR) with reviewer subagents. Returns structured report.',
165
+ requires: [],
166
+ inputSchema: ReviewDiffInputSchema,
167
+ outputSchema: ReviewDiffOutputSchema,
168
+ });
169
+ }
170
+ async execute(input, context) {
171
+ const { config, logger } = context;
172
+ const dispatcher = createDispatcher(logger);
173
+ const guard = createMainAgentGuard({}, logger);
174
+ guard.activateEmbargo();
175
+ let totalTokens = 0;
176
+ try {
177
+ // Step 1: Get diff
178
+ logger.info(`[review-diff] Getting diff for ${input.targetType}: ${input.target}`);
179
+ const diffResult = await dispatcher.dispatch({
180
+ role: 'explorer',
181
+ model: input.model || config.defaultModel,
182
+ }, {
183
+ permissions: {
184
+ readFiles: true,
185
+ searchCode: false,
186
+ runCommands: true,
187
+ writeFiles: false,
188
+ gitOperations: true,
189
+ },
190
+ prompt: buildDiffPrompt(input.targetType, input.target),
191
+ owns: [],
192
+ reads: [],
193
+ });
194
+ totalTokens += diffResult.tokensUsed;
195
+ if (diffResult.status !== 'success') {
196
+ return {
197
+ decision: 'needs-evidence',
198
+ issues: [
199
+ {
200
+ severity: 'blocker',
201
+ description: 'Cannot access diff',
202
+ action: 'Verify target exists and is accessible',
203
+ },
204
+ ],
205
+ specCompliance: 'fail',
206
+ testAssessment: 'missing',
207
+ strengths: [],
208
+ summary: 'Cannot retrieve diff for review',
209
+ tokensUsed: totalTokens,
210
+ };
211
+ }
212
+ const diffContent = diffResult.output;
213
+ // Step 2: Inspect changed surface
214
+ logger.info('[review-diff] Inspecting changed surface');
215
+ const surfaceResult = await dispatcher.dispatch({
216
+ role: 'explorer',
217
+ model: input.model || config.defaultModel,
218
+ }, {
219
+ permissions: {
220
+ readFiles: true,
221
+ searchCode: false,
222
+ runCommands: false,
223
+ writeFiles: false,
224
+ gitOperations: false,
225
+ },
226
+ prompt: buildSurfacePrompt(diffContent),
227
+ owns: [],
228
+ reads: [],
229
+ });
230
+ totalTokens += surfaceResult.tokensUsed;
231
+ // Step 3: Check requirement compliance (if plan provided)
232
+ let specOutput = 'pass';
233
+ if (input.planPath) {
234
+ logger.info('[review-diff] Checking spec compliance');
235
+ const specResult = await dispatcher.dispatch({
236
+ role: 'reviewer',
237
+ model: input.model || config.defaultModel,
238
+ }, {
239
+ permissions: {
240
+ readFiles: true,
241
+ searchCode: false,
242
+ runCommands: false,
243
+ writeFiles: false,
244
+ gitOperations: false,
245
+ },
246
+ prompt: buildSpecCompliancePrompt(diffContent, input.planPath),
247
+ owns: [],
248
+ reads: [input.planPath],
249
+ });
250
+ totalTokens += specResult.tokensUsed;
251
+ specOutput = specResult.output;
252
+ }
253
+ // Step 4: Check tests
254
+ logger.info('[review-diff] Assessing test coverage');
255
+ const testResult = await dispatcher.dispatch({
256
+ role: 'reviewer',
257
+ model: input.model || config.defaultModel,
258
+ }, {
259
+ permissions: {
260
+ readFiles: true,
261
+ searchCode: false,
262
+ runCommands: true,
263
+ writeFiles: false,
264
+ gitOperations: false,
265
+ },
266
+ prompt: [
267
+ 'Check test coverage in the changed code:',
268
+ '',
269
+ diffContent.slice(0, 4000),
270
+ '',
271
+ 'Do changed files have corresponding test changes?',
272
+ 'Are new functions/classes covered by tests?',
273
+ 'Return: adequate, missing, or failing with details.',
274
+ ].join('\n'),
275
+ owns: [],
276
+ reads: [],
277
+ });
278
+ totalTokens += testResult.tokensUsed;
279
+ // Step 5: Review code quality
280
+ logger.info('[review-diff] Reviewing code quality');
281
+ const qualityResult = await dispatcher.dispatch({
282
+ role: 'reviewer',
283
+ model: input.model || config.defaultModel,
284
+ }, {
285
+ permissions: {
286
+ readFiles: true,
287
+ searchCode: true,
288
+ runCommands: false,
289
+ writeFiles: false,
290
+ gitOperations: false,
291
+ },
292
+ prompt: buildQualityReviewPrompt(diffContent, input.focus ?? []),
293
+ owns: [],
294
+ reads: [],
295
+ });
296
+ totalTokens += qualityResult.tokensUsed;
297
+ // Step 6: Compile final report
298
+ const issues = parseIssues(qualityResult.output);
299
+ return {
300
+ decision: determineDecision(issues),
301
+ issues,
302
+ specCompliance: assessSpecCompliance(specOutput),
303
+ testAssessment: assessTests(testResult.output),
304
+ strengths: ['Reviewed all changed files'],
305
+ summary: `Review complete: ${issues.length} issue(s) found (${issues.filter((i) => i.severity === 'blocker').length} blocker, ${issues.filter((i) => i.severity === 'major').length} major)`,
306
+ tokensUsed: totalTokens,
307
+ };
308
+ }
309
+ finally {
310
+ guard.deactivateEmbargo();
311
+ }
312
+ }
313
+ }
314
+ export const reviewDiffSkill = new ReviewDiffSkill();
315
+ export default reviewDiffSkill;
316
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/skills/review-diff/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Base skill class with validation and error handling
3
+ */
4
+ import { z } from 'zod';
5
+ import type { SkillDefinition, SkillContext } from './types.js';
6
+ export declare abstract class Skill<Input, Output> {
7
+ protected name: string;
8
+ protected description: string;
9
+ protected requires: string[];
10
+ protected inputSchema?: z.ZodSchema<Input>;
11
+ protected outputSchema?: z.ZodSchema<Output>;
12
+ constructor(options: {
13
+ name: string;
14
+ description: string;
15
+ requires?: string[];
16
+ inputSchema?: z.ZodSchema<Input>;
17
+ outputSchema?: z.ZodSchema<Output>;
18
+ });
19
+ abstract execute(input: Input, context: SkillContext): Promise<Output>;
20
+ validateInput(input: unknown): Promise<Input>;
21
+ validateOutput(output: unknown): Promise<Output>;
22
+ toDefinition(): SkillDefinition<any, any>;
23
+ }
24
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/skills/skill.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAA;AAEnB,8BAAsB,KAAK,CAAC,KAAK,EAAE,MAAM;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC5B,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC1C,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;gBAEhC,OAAO,EAAE;QACnB,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAChC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;KACnC;IAQD,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhE,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAO7C,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtD,YAAY,IAAI,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC;CAY1C"}
@@ -0,0 +1,39 @@
1
+ export class Skill {
2
+ name;
3
+ description;
4
+ requires;
5
+ inputSchema;
6
+ outputSchema;
7
+ constructor(options) {
8
+ this.name = options.name;
9
+ this.description = options.description;
10
+ this.requires = options.requires || [];
11
+ this.inputSchema = options.inputSchema;
12
+ this.outputSchema = options.outputSchema;
13
+ }
14
+ async validateInput(input) {
15
+ if (this.inputSchema) {
16
+ return this.inputSchema.parse(input);
17
+ }
18
+ return input;
19
+ }
20
+ async validateOutput(output) {
21
+ if (this.outputSchema) {
22
+ return this.outputSchema.parse(output);
23
+ }
24
+ return output;
25
+ }
26
+ toDefinition() {
27
+ return {
28
+ name: this.name,
29
+ description: this.description,
30
+ requires: this.requires,
31
+ execute: async (input, context) => {
32
+ const validatedInput = await this.validateInput(input);
33
+ const result = await this.execute(validatedInput, context);
34
+ return await this.validateOutput(result);
35
+ },
36
+ };
37
+ }
38
+ }
39
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/skill.ts"],"names":[],"mappings":"AASA,MAAM,OAAgB,KAAK;IACf,IAAI,CAAQ;IACZ,WAAW,CAAQ;IACnB,QAAQ,CAAU;IAClB,WAAW,CAAqB;IAChC,YAAY,CAAsB;IAE5C,YAAY,OAMX;QACC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;IAC1C,CAAC;IAID,KAAK,CAAC,aAAa,CAAC,KAAc;QAChC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;QACD,OAAO,KAAc,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAe;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,MAAgB,CAAA;IACzB,CAAC;IAED,YAAY;QACV,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,KAAK,EAAE,KAAU,EAAE,OAAqB,EAAE,EAAE;gBACnD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;gBAC1D,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAC1C,CAAC;SACF,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Systematic Debugging Skill - Find root cause before fixing
3
+ *
4
+ * Use case: Bug investigation, test failure, unexpected behavior
5
+ * Pattern: Reproduce → Gather Evidence → Diagnose (hypothesize + test) →
6
+ * Apply Fix → Verify
7
+ *
8
+ * CRITICAL RULE: No fix before root cause is confirmed.
9
+ * Spawns debugger subagent(s) for each phase.
10
+ * Prevents the "fix-first-ask-questions-later" anti-pattern.
11
+ */
12
+ import { z } from 'zod';
13
+ import { Skill } from '../skill.js';
14
+ import type { SkillContext } from '../types.js';
15
+ declare const DebugInputSchema: z.ZodObject<{
16
+ symptom: z.ZodString;
17
+ reproduceCommand: z.ZodOptional<z.ZodString>;
18
+ logs: z.ZodOptional<z.ZodString>;
19
+ recentChanges: z.ZodOptional<z.ZodString>;
20
+ model: z.ZodOptional<z.ZodString>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ symptom: string;
23
+ model?: string | undefined;
24
+ reproduceCommand?: string | undefined;
25
+ logs?: string | undefined;
26
+ recentChanges?: string | undefined;
27
+ }, {
28
+ symptom: string;
29
+ model?: string | undefined;
30
+ reproduceCommand?: string | undefined;
31
+ logs?: string | undefined;
32
+ recentChanges?: string | undefined;
33
+ }>;
34
+ declare const DebugOutputSchema: z.ZodObject<{
35
+ rootCause: z.ZodString;
36
+ confidence: z.ZodEnum<["high", "medium", "low"]>;
37
+ location: z.ZodObject<{
38
+ file: z.ZodOptional<z.ZodString>;
39
+ line: z.ZodOptional<z.ZodNumber>;
40
+ function: z.ZodOptional<z.ZodString>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ function?: string | undefined;
43
+ file?: string | undefined;
44
+ line?: number | undefined;
45
+ }, {
46
+ function?: string | undefined;
47
+ file?: string | undefined;
48
+ line?: number | undefined;
49
+ }>;
50
+ fixApplied: z.ZodBoolean;
51
+ fixDescription: z.ZodOptional<z.ZodString>;
52
+ verification: z.ZodString;
53
+ risks: z.ZodArray<z.ZodString, "many">;
54
+ tokensUsed: z.ZodNumber;
55
+ }, "strip", z.ZodTypeAny, {
56
+ tokensUsed: number;
57
+ rootCause: string;
58
+ confidence: "low" | "medium" | "high";
59
+ verification: string;
60
+ risks: string[];
61
+ location: {
62
+ function?: string | undefined;
63
+ file?: string | undefined;
64
+ line?: number | undefined;
65
+ };
66
+ fixApplied: boolean;
67
+ fixDescription?: string | undefined;
68
+ }, {
69
+ tokensUsed: number;
70
+ rootCause: string;
71
+ confidence: "low" | "medium" | "high";
72
+ verification: string;
73
+ risks: string[];
74
+ location: {
75
+ function?: string | undefined;
76
+ file?: string | undefined;
77
+ line?: number | undefined;
78
+ };
79
+ fixApplied: boolean;
80
+ fixDescription?: string | undefined;
81
+ }>;
82
+ type DebugInput = z.infer<typeof DebugInputSchema>;
83
+ type DebugOutput = z.infer<typeof DebugOutputSchema>;
84
+ export declare class SystematicDebuggingSkill extends Skill<DebugInput, DebugOutput> {
85
+ constructor();
86
+ execute(input: DebugInput, context: SkillContext): Promise<DebugOutput>;
87
+ }
88
+ export declare const systematicDebuggingSkill: SystematicDebuggingSkill;
89
+ export default systematicDebuggingSkill;
90
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/skills/systematic-debugging/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAS/C,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAMpB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAarB,CAAA;AAEF,KAAK,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAClD,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AA6KpD,qBAAa,wBAAyB,SAAQ,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC;;IAYpE,OAAO,CACX,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;CAqKxB;AAED,eAAO,MAAM,wBAAwB,0BAAiC,CAAA;AACtE,eAAe,wBAAwB,CAAA"}