@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,452 @@
1
+ /**
2
+ * Enhanced Plan Skill - Orchestrates analysis, debugging, and planning
3
+ *
4
+ * Architecture: Orchestrator pattern
5
+ * - Analyzes input to determine what preprocessing is needed
6
+ * - May spawn debugging subagent for bug investigation
7
+ * - Delegates actual planning to planner subagent
8
+ * - Wave grouping and validation
9
+ *
10
+ * Examples:
11
+ * "/to-plan 实现登录功能" → Direct planning
12
+ * "/to-plan 出现xxbug,查明原因并制定计划" → Debug → Plan
13
+ * "/to-plan 性能问题,先分析再计划" → Explore → Plan
14
+ */
15
+ import { z } from 'zod';
16
+ import { Skill } from '../skill.js';
17
+ // HookType constants
18
+ const HookType = {
19
+ PRE_PLAN: 'pre-plan',
20
+ POST_PLAN: 'post-plan',
21
+ ON_ERROR: 'on-error',
22
+ };
23
+ const PlanInputSchema = z.object({
24
+ goal: z.string(),
25
+ constraints: z.array(z.string()).optional(),
26
+ model: z.string().optional(),
27
+ previousIssues: z.array(z.string()).optional(),
28
+ // Analysis hints
29
+ symptom: z.string().optional(), // Bug symptom
30
+ reproduceCommand: z.string().optional(), // How to reproduce
31
+ logs: z.string().optional(), // Error logs
32
+ recentChanges: z.string().optional(), // Recent git changes
33
+ });
34
+ const PlanOutputSchema = z.object({
35
+ plan: z.custom(),
36
+ waves: z.array(z.custom()),
37
+ // If debugging was performed
38
+ rootCause: z.string().optional(),
39
+ confidence: z.enum(['high', 'medium', 'low']).optional(),
40
+ // Metadata
41
+ analysisPerformed: z.boolean(),
42
+ tokensUsed: z.number()
43
+ });
44
+ export class ToPlanSkill extends Skill {
45
+ name = 'to-plan';
46
+ description = 'Orchestrates analysis, debugging, and planning with fresh-context subagents';
47
+ requires = ['systematic-debugging', 'quick-task'];
48
+ async execute(input, context) {
49
+ let analysisPerformed = false;
50
+ let rootCause;
51
+ let confidence;
52
+ let tokensUsed = 0;
53
+ // 1. Initialize persistence
54
+ if (context.persistence) {
55
+ await context.persistence.state.initialize(input.goal);
56
+ }
57
+ // 2. Trigger pre-plan hooks
58
+ await this.triggerHook(context, HookType.PRE_PLAN, { goal: input.goal });
59
+ try {
60
+ // 3. Analyze input and determine workflow
61
+ const analysis = this.analyzeInput(input);
62
+ console.log(`[ToPlanSkill] Analysis: ${analysis.type}`);
63
+ // 4. Perform preprocessing if needed
64
+ let enrichedGoal = input.goal;
65
+ if (analysis.needsDebugging) {
66
+ console.log('[ToPlanSkill] Bug detected, running systematic debugging...');
67
+ // Use systematic-debugging skill
68
+ const debugResult = await this.runDebugging(input, context);
69
+ analysisPerformed = true;
70
+ rootCause = debugResult.rootCause;
71
+ confidence = debugResult.confidence;
72
+ tokensUsed += debugResult.tokensUsed;
73
+ // Enrich goal with root cause
74
+ enrichedGoal = `${input.goal}\n\nRoot Cause (confidence: ${confidence}): ${rootCause}`;
75
+ console.log(`[ToPlanSkill] Debug complete: ${rootCause.slice(0, 100)}...`);
76
+ }
77
+ if (analysis.needsExploration) {
78
+ console.log('[ToPlanSkill] Exploration needed, gathering context...');
79
+ // Run exploration
80
+ const exploreResult = await this.runExploration(input, context);
81
+ tokensUsed += exploreResult.tokensUsed;
82
+ // Enrich goal with findings
83
+ enrichedGoal = `${enrichedGoal}\n\nContext: ${exploreResult.findings}`;
84
+ analysisPerformed = true;
85
+ }
86
+ // 5. Generate plan with planner subagent
87
+ console.log('[ToPlanSkill] Generating plan...');
88
+ const planResult = await this.spawnPlannerSubagent({ ...input, goal: enrichedGoal }, context);
89
+ tokensUsed += planResult.tokensUsed;
90
+ // 6. Parse and validate plan
91
+ let plan = this.parsePlanResponse(planResult.output);
92
+ let validation = this.validatePlan(plan);
93
+ // 7. Retry once if validation fails
94
+ if (!validation.valid && !input.previousIssues) {
95
+ console.log('[ToPlanSkill] Validation failed, retrying with feedback...');
96
+ const retryResult = await this.spawnPlannerSubagent({
97
+ ...input,
98
+ goal: enrichedGoal,
99
+ previousIssues: validation.issues
100
+ }, context);
101
+ tokensUsed += retryResult.tokensUsed;
102
+ plan = this.parsePlanResponse(retryResult.output);
103
+ validation = this.validatePlan(plan);
104
+ }
105
+ // 8. Group tasks into waves
106
+ const waves = this.groupIntoWaves(plan);
107
+ plan.waves = waves;
108
+ // 9. Write to persistence
109
+ if (context.persistence) {
110
+ await context.persistence.plan.writePlan(plan);
111
+ await context.persistence.state.recordPlan(plan);
112
+ await context.persistence.state.updatePhase('planning');
113
+ }
114
+ // 10. Trigger post-plan hooks
115
+ await this.triggerHook(context, HookType.POST_PLAN, {
116
+ plan,
117
+ waves,
118
+ analysisPerformed,
119
+ rootCause
120
+ });
121
+ return {
122
+ plan,
123
+ waves,
124
+ rootCause,
125
+ confidence,
126
+ analysisPerformed,
127
+ tokensUsed
128
+ };
129
+ }
130
+ catch (error) {
131
+ await this.triggerHook(context, HookType.ON_ERROR, {
132
+ phase: 'plan',
133
+ error: error.message
134
+ });
135
+ throw error;
136
+ }
137
+ }
138
+ /**
139
+ * Analyze input to determine what preprocessing is needed
140
+ */
141
+ analyzeInput(input) {
142
+ const goal = input.goal.toLowerCase();
143
+ // Bug indicators
144
+ const bugPatterns = [
145
+ /bug|错误|故障|崩溃|crash|exception|error/i,
146
+ /查明原因|调查|定位|诊断|debug|fix/i,
147
+ /出现.*问题|发生.*错误|不工作|失败|fail/i
148
+ ];
149
+ // Exploration indicators
150
+ const explorePatterns = [
151
+ /分析.*代码|了解.*架构|探索|调研/i,
152
+ /refactor|重构.*前/i,
153
+ /不熟悉|不清楚|unknown/i
154
+ ];
155
+ const hasBugKeywords = bugPatterns.some(p => p.test(goal));
156
+ const hasExploreKeywords = explorePatterns.some(p => p.test(goal));
157
+ // Explicit symptom provided
158
+ const hasSymptom = !!input.symptom || !!input.logs || !!input.reproduceCommand;
159
+ const needsDebugging = hasBugKeywords || hasSymptom;
160
+ const needsExploration = hasExploreKeywords;
161
+ if (needsDebugging && needsExploration) {
162
+ return { type: 'combined', needsDebugging: true, needsExploration: true };
163
+ }
164
+ else if (needsDebugging) {
165
+ return { type: 'bug', needsDebugging: true, needsExploration: false };
166
+ }
167
+ else if (needsExploration) {
168
+ return { type: 'exploration', needsDebugging: false, needsExploration: true };
169
+ }
170
+ else {
171
+ return { type: 'direct', needsDebugging: false, needsExploration: false };
172
+ }
173
+ }
174
+ /**
175
+ * Run systematic debugging using debugging skill
176
+ */
177
+ async runDebugging(input, context) {
178
+ // Try to use systematic-debugging skill if available
179
+ const debugSkill = context.skills.get('systematic-debugging');
180
+ if (debugSkill) {
181
+ console.log('[ToPlanSkill] Using systematic-debugging skill');
182
+ const result = await debugSkill.execute({
183
+ symptom: input.symptom || input.goal,
184
+ reproduceCommand: input.reproduceCommand,
185
+ logs: input.logs,
186
+ recentChanges: input.recentChanges,
187
+ model: input.model
188
+ }, context);
189
+ return {
190
+ rootCause: result.rootCause,
191
+ confidence: result.confidence,
192
+ tokensUsed: result.tokensUsed
193
+ };
194
+ }
195
+ // Fallback: direct dispatcher
196
+ console.log('[ToPlanSkill] Fallback: direct debugging subagent');
197
+ const result = await context.dispatcher.dispatch({
198
+ role: 'debugger',
199
+ model: input.model,
200
+ timeout: 180000
201
+ }, {
202
+ permissions: {
203
+ readFiles: true,
204
+ searchCode: true,
205
+ runCommands: true,
206
+ writeFiles: false,
207
+ gitOperations: false
208
+ },
209
+ prompt: this.buildDebuggingPrompt(input),
210
+ owns: [],
211
+ reads: []
212
+ });
213
+ return result;
214
+ }
215
+ /**
216
+ * Run exploration to gather context
217
+ */
218
+ async runExploration(input, context) {
219
+ const result = await context.dispatcher.dispatch({
220
+ role: 'explorer',
221
+ model: input.model,
222
+ timeout: 120000
223
+ }, {
224
+ permissions: {
225
+ readFiles: true,
226
+ searchCode: true,
227
+ runCommands: false,
228
+ writeFiles: false,
229
+ gitOperations: false
230
+ },
231
+ prompt: `# Exploration Task
232
+
233
+ Goal: ${input.goal}
234
+
235
+ Explore the codebase to understand:
236
+ 1. Overall architecture and structure
237
+ 2. Relevant files and patterns
238
+ 3. Dependencies and relationships
239
+ 4. Potential challenges or risks
240
+
241
+ Return a concise summary (under 800 tokens) of key findings that will help with planning.`,
242
+ owns: [],
243
+ reads: []
244
+ });
245
+ return result;
246
+ }
247
+ /**
248
+ * Spawn planner subagent with fresh context
249
+ */
250
+ async spawnPlannerSubagent(input, context) {
251
+ const result = await context.dispatcher.dispatch({
252
+ role: 'planner',
253
+ model: input.model,
254
+ timeout: 120000
255
+ }, {
256
+ permissions: {
257
+ readFiles: true,
258
+ searchCode: true,
259
+ runCommands: false,
260
+ writeFiles: false,
261
+ gitOperations: false
262
+ },
263
+ prompt: this.buildPlannerPrompt(input),
264
+ owns: [],
265
+ reads: []
266
+ });
267
+ return { output: result.plan, tokensUsed: 0 };
268
+ }
269
+ buildDebuggingPrompt(input) {
270
+ return `# Systematic Debugging
271
+
272
+ ## Symptom
273
+ ${input.symptom || input.goal}
274
+
275
+ ## Reproduction
276
+ ${input.reproduceCommand ? `Command: ${input.reproduceCommand}` : 'Reproduce the issue'}
277
+
278
+ ${input.logs ? `## Logs\n${input.logs.slice(0, 2000)}` : ''}
279
+
280
+ ${input.recentChanges ? `## Recent Changes\n${input.recentChanges}` : ''}
281
+
282
+ ## Instructions
283
+ 1. Reproduce the issue
284
+ 2. Gather evidence systematically
285
+ 3. Form and test hypotheses
286
+ 4. Identify root cause with confidence level
287
+ 5. Propose fix
288
+
289
+ ## Output Format
290
+ {
291
+ "rootCause": "detailed description",
292
+ "confidence": "high|medium|low",
293
+ "location": { "file": "path", "line": 123, "function": "name" },
294
+ "proposedFix": "description",
295
+ "verification": "how to verify the fix"
296
+ }`;
297
+ }
298
+ buildPlannerPrompt(input) {
299
+ const issueSection = input.previousIssues
300
+ ? `\n\n## Previous Attempt Issues\n${input.previousIssues.map(i => `- ${i}`).join('\n')}\nPlease address these issues in your new plan.`
301
+ : '';
302
+ return `# Planning Task
303
+
304
+ ## Goal
305
+ ${input.goal}
306
+
307
+ ## Constraints
308
+ ${input.constraints?.map(c => `- ${c}`).join('\n') || '- No specific constraints'}
309
+ ${issueSection}
310
+
311
+ ## Instructions
312
+ 1. Break down into small, independent tasks (<50 lines of change each)
313
+ 2. Identify dependencies between tasks explicitly
314
+ 3. Group into parallel execution waves
315
+ 4. Define clear verification criteria
316
+ 5. If this is a bug fix, include regression tests
317
+
318
+ ## Output Format
319
+ Return ONLY a JSON object:
320
+ {
321
+ "goal": "original goal",
322
+ "tasks": [
323
+ {
324
+ "id": "task-1",
325
+ "description": "What to do",
326
+ "estimatedComplexity": "low|medium|high",
327
+ "relatedFiles": ["optional/path"],
328
+ "verificationCriteria": ["How to verify"]
329
+ }
330
+ ],
331
+ "dependencies": {"task-2": ["task-1"]},
332
+ "verificationCriteria": ["Overall acceptance criteria"],
333
+ "estimatedDuration": 300000,
334
+ "rationale": "Why this plan"
335
+ }`;
336
+ }
337
+ parsePlanResponse(response) {
338
+ try {
339
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
340
+ const jsonStr = jsonMatch ? jsonMatch[0] : response;
341
+ const parsed = JSON.parse(jsonStr);
342
+ return {
343
+ goal: parsed.goal || '',
344
+ tasks: parsed.tasks || [],
345
+ dependencies: parsed.dependencies || {},
346
+ waves: parsed.waves || [],
347
+ verificationCriteria: parsed.verificationCriteria || [],
348
+ estimatedDuration: parsed.estimatedDuration || 0,
349
+ rationale: parsed.rationale || ''
350
+ };
351
+ }
352
+ catch (error) {
353
+ console.error('[ToPlanSkill] Failed to parse plan:', error);
354
+ return {
355
+ goal: 'Failed to parse',
356
+ tasks: [],
357
+ dependencies: {},
358
+ waves: [],
359
+ verificationCriteria: [],
360
+ estimatedDuration: 0,
361
+ rationale: 'Parse error'
362
+ };
363
+ }
364
+ }
365
+ validatePlan(plan) {
366
+ const issues = [];
367
+ if (!plan.goal || plan.goal.trim() === '') {
368
+ issues.push('Plan must have a goal');
369
+ }
370
+ if (plan.tasks.length === 0) {
371
+ issues.push('Plan must have at least one task');
372
+ }
373
+ // Check for circular dependencies
374
+ const visited = new Set();
375
+ const recursionStack = new Set();
376
+ const hasCycle = (taskId) => {
377
+ visited.add(taskId);
378
+ recursionStack.add(taskId);
379
+ const deps = plan.dependencies[taskId] || [];
380
+ for (const dep of deps) {
381
+ if (!visited.has(dep)) {
382
+ if (hasCycle(dep))
383
+ return true;
384
+ }
385
+ else if (recursionStack.has(dep)) {
386
+ issues.push(`Circular dependency: ${taskId} -> ${dep}`);
387
+ return true;
388
+ }
389
+ }
390
+ recursionStack.delete(taskId);
391
+ return false;
392
+ };
393
+ for (const task of plan.tasks) {
394
+ if (!visited.has(task.id)) {
395
+ hasCycle(task.id);
396
+ }
397
+ }
398
+ // Validate dependencies exist
399
+ for (const [taskId, deps] of Object.entries(plan.dependencies)) {
400
+ if (!plan.tasks.some(t => t.id === taskId)) {
401
+ issues.push(`Dependency references non-existent task: ${taskId}`);
402
+ }
403
+ for (const dep of deps) {
404
+ if (!plan.tasks.some(t => t.id === dep)) {
405
+ issues.push(`Task ${taskId} depends on non-existent task: ${dep}`);
406
+ }
407
+ }
408
+ }
409
+ return { valid: issues.length === 0, issues };
410
+ }
411
+ groupIntoWaves(plan) {
412
+ const waves = [];
413
+ const completed = new Set();
414
+ const remaining = new Set(plan.tasks.map(t => t.id));
415
+ let waveIndex = 0;
416
+ while (remaining.size > 0) {
417
+ const waveTasks = plan.tasks.filter(t => {
418
+ if (!remaining.has(t.id))
419
+ return false;
420
+ const deps = plan.dependencies[t.id] || [];
421
+ return deps.every(dep => completed.has(dep));
422
+ });
423
+ if (waveTasks.length === 0) {
424
+ console.error('[ToPlanSkill] Circular dependency detected');
425
+ break;
426
+ }
427
+ waves.push({
428
+ id: `wave-${waveIndex}`,
429
+ tasks: waveTasks.map(t => t.id)
430
+ });
431
+ waveTasks.forEach(t => {
432
+ completed.add(t.id);
433
+ remaining.delete(t.id);
434
+ });
435
+ waveIndex++;
436
+ }
437
+ return waves;
438
+ }
439
+ async triggerHook(context, type, data) {
440
+ if (context.hooks) {
441
+ try {
442
+ // Import HookContext from types for proper typing
443
+ const hookContext = data;
444
+ await context.hooks.execute(type, hookContext);
445
+ }
446
+ catch (error) {
447
+ console.warn(`[ToPlanSkill] Hook ${type} failed:`, error);
448
+ }
449
+ }
450
+ }
451
+ }
452
+ //# sourceMappingURL=index-enhanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-enhanced.js","sourceRoot":"","sources":["../../../../src/skills/to-plan/index-enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * To Plan Skill - Creates implementation plans via multi-step subagent dispatch
3
+ *
4
+ * 5-Step Process:
5
+ * Step 1: Classify the request (type, complexity, risk, exploration areas)
6
+ * Step 2: Dispatch 1-3 read-only exploration subagents (in parallel)
7
+ * Step 3: Synthesize findings into a unified plan structure
8
+ * Step 4: Write the plan to disk
9
+ * Step 5: Dispatch plan-checker subagent to validate the plan
10
+ *
11
+ * Main Agent NEVER reads source files directly — all exploration is delegated.
12
+ */
13
+ import { z } from 'zod';
14
+ import { Skill } from '../skill.js';
15
+ import type { SkillContext } from '../types.js';
16
+ declare const ToPlanInputSchema: z.ZodObject<{
17
+ goal: z.ZodString;
18
+ context: z.ZodOptional<z.ZodString>;
19
+ outputPath: z.ZodOptional<z.ZodString>;
20
+ model: z.ZodOptional<z.ZodString>;
21
+ filesHint: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
+ workType: z.ZodOptional<z.ZodEnum<["feature", "bugfix", "migration", "cleanup", "refactor"]>>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ goal: string;
25
+ context?: string | undefined;
26
+ outputPath?: string | undefined;
27
+ model?: string | undefined;
28
+ filesHint?: string[] | undefined;
29
+ workType?: "feature" | "bugfix" | "migration" | "cleanup" | "refactor" | undefined;
30
+ }, {
31
+ goal: string;
32
+ context?: string | undefined;
33
+ outputPath?: string | undefined;
34
+ model?: string | undefined;
35
+ filesHint?: string[] | undefined;
36
+ workType?: "feature" | "bugfix" | "migration" | "cleanup" | "refactor" | undefined;
37
+ }>;
38
+ declare const ToPlanOutputSchema: z.ZodObject<{
39
+ planPath: z.ZodString;
40
+ executionModel: z.ZodEnum<["single-agent", "ordered-non-parallel", "fan-out-fan-in"]>;
41
+ classification: z.ZodObject<{
42
+ type: z.ZodString;
43
+ complexity: z.ZodEnum<["low", "medium", "high"]>;
44
+ risk: z.ZodEnum<["low", "medium", "high"]>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ type: string;
47
+ complexity: "low" | "medium" | "high";
48
+ risk: "low" | "medium" | "high";
49
+ }, {
50
+ type: string;
51
+ complexity: "low" | "medium" | "high";
52
+ risk: "low" | "medium" | "high";
53
+ }>;
54
+ planCheckerPassed: z.ZodBoolean;
55
+ tasks: z.ZodArray<z.ZodObject<{
56
+ id: z.ZodString;
57
+ title: z.ZodString;
58
+ description: z.ZodString;
59
+ owns: z.ZodArray<z.ZodString, "many">;
60
+ reads: z.ZodArray<z.ZodString, "many">;
61
+ dependencies: z.ZodArray<z.ZodString, "many">;
62
+ verification: z.ZodOptional<z.ZodString>;
63
+ }, "strip", z.ZodTypeAny, {
64
+ id: string;
65
+ title: string;
66
+ description: string;
67
+ owns: string[];
68
+ reads: string[];
69
+ dependencies: string[];
70
+ verification?: string | undefined;
71
+ }, {
72
+ id: string;
73
+ title: string;
74
+ description: string;
75
+ owns: string[];
76
+ reads: string[];
77
+ dependencies: string[];
78
+ verification?: string | undefined;
79
+ }>, "many">;
80
+ summary: z.ZodString;
81
+ tokensUsed: z.ZodNumber;
82
+ }, "strip", z.ZodTypeAny, {
83
+ tokensUsed: number;
84
+ summary: string;
85
+ planPath: string;
86
+ executionModel: "single-agent" | "ordered-non-parallel" | "fan-out-fan-in";
87
+ classification: {
88
+ type: string;
89
+ complexity: "low" | "medium" | "high";
90
+ risk: "low" | "medium" | "high";
91
+ };
92
+ planCheckerPassed: boolean;
93
+ tasks: {
94
+ id: string;
95
+ title: string;
96
+ description: string;
97
+ owns: string[];
98
+ reads: string[];
99
+ dependencies: string[];
100
+ verification?: string | undefined;
101
+ }[];
102
+ }, {
103
+ tokensUsed: number;
104
+ summary: string;
105
+ planPath: string;
106
+ executionModel: "single-agent" | "ordered-non-parallel" | "fan-out-fan-in";
107
+ classification: {
108
+ type: string;
109
+ complexity: "low" | "medium" | "high";
110
+ risk: "low" | "medium" | "high";
111
+ };
112
+ planCheckerPassed: boolean;
113
+ tasks: {
114
+ id: string;
115
+ title: string;
116
+ description: string;
117
+ owns: string[];
118
+ reads: string[];
119
+ dependencies: string[];
120
+ verification?: string | undefined;
121
+ }[];
122
+ }>;
123
+ type ToPlanInput = z.infer<typeof ToPlanInputSchema>;
124
+ type ToPlanOutput = z.infer<typeof ToPlanOutputSchema>;
125
+ export declare class ToPlanSkill extends Skill<ToPlanInput, ToPlanOutput> {
126
+ constructor();
127
+ execute(input: ToPlanInput, context: SkillContext): Promise<ToPlanOutput>;
128
+ }
129
+ export declare const toPlanSkill: ToPlanSkill;
130
+ export default toPlanSkill;
131
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/skills/to-plan/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;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;AAY/C,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EAOrB,CAAA;AAYF,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYtB,CAAA;AAEF,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AACpD,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAoStD,qBAAa,WAAY,SAAQ,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC;;IAYzD,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;CAyNhF;AAED,eAAO,MAAM,WAAW,aAAoB,CAAA;AAC5C,eAAe,WAAW,CAAA"}