@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,431 @@
1
+ /**
2
+ * Pre-built SubagentContracts for each subagent role.
3
+ *
4
+ * Each factory accepts role-specific parameters and returns a fully-formed
5
+ * SubagentContract ready for dispatch. The contracts encode:
6
+ * - The exact permission set the subagent needs
7
+ * - Which files it may own (modify) vs. read
8
+ * - A structured prompt template
9
+ * - An optional output schema for validation
10
+ */
11
+ // ---------------------------------------------------------------------------
12
+ // Permission presets
13
+ // ---------------------------------------------------------------------------
14
+ const READ_ONLY = {
15
+ readFiles: true,
16
+ searchCode: true,
17
+ runCommands: false,
18
+ writeFiles: false,
19
+ gitOperations: false,
20
+ };
21
+ const READ_SEARCH = {
22
+ readFiles: true,
23
+ searchCode: true,
24
+ runCommands: false,
25
+ writeFiles: false,
26
+ gitOperations: false,
27
+ };
28
+ const READ_RUN = {
29
+ readFiles: true,
30
+ searchCode: true,
31
+ runCommands: true,
32
+ writeFiles: false,
33
+ gitOperations: false,
34
+ };
35
+ const FULL_ACCESS = {
36
+ readFiles: true,
37
+ searchCode: true,
38
+ runCommands: true,
39
+ writeFiles: true,
40
+ gitOperations: true,
41
+ };
42
+ // ---------------------------------------------------------------------------
43
+ // Contract factories
44
+ // ---------------------------------------------------------------------------
45
+ /**
46
+ * Explorer contract: read-only, searches the codebase to answer questions
47
+ * about structure, dependencies, patterns, or specific implementations.
48
+ */
49
+ export function explorerContract(params) {
50
+ const reads = [...params.searchPaths, ...(params.readFiles ?? [])];
51
+ const questionsBlock = params.questions && params.questions.length > 0
52
+ ? `\n\n## Questions to Answer\n\n${params.questions.map((q, i) => `${i + 1}. ${q}`).join('\n')}`
53
+ : '';
54
+ const prompt = [
55
+ `Search the codebase for information related to: **${params.query}**`,
56
+ '',
57
+ `## Search Scope`,
58
+ '',
59
+ params.searchPaths.map((p) => `- \`${p}\``).join('\n'),
60
+ '',
61
+ 'For each relevant file found, report:',
62
+ '- File path and purpose',
63
+ '- Key exports, functions, or classes',
64
+ '- Dependencies and imports',
65
+ '- Any notable patterns or issues',
66
+ questionsBlock,
67
+ ].join('\n');
68
+ return {
69
+ permissions: READ_SEARCH,
70
+ prompt,
71
+ owns: [],
72
+ reads,
73
+ };
74
+ }
75
+ /**
76
+ * Implementer contract: writes code, runs tests, works in isolation.
77
+ * The implementer owns specific files and may modify them.
78
+ */
79
+ export function implementerContract(params) {
80
+ const constraintsBlock = params.constraints && params.constraints.length > 0
81
+ ? `\n\n## Constraints\n\n${params.constraints.map((c) => `- ${c}`).join('\n')}`
82
+ : '';
83
+ const testBlock = params.testCommand
84
+ ? `\n\n## Verification\n\nAfter implementing, run this command to verify:\n\n\`\`\`bash\n${params.testCommand}\n\`\`\``
85
+ : '';
86
+ const prompt = [
87
+ `Implement the following task:`,
88
+ '',
89
+ params.task,
90
+ '',
91
+ '## Files You Own (may modify)',
92
+ '',
93
+ params.ownedFiles.map((f) => `- \`${f}\``).join('\n'),
94
+ '',
95
+ '## Approach',
96
+ '',
97
+ '1. Read all owned files to understand current state',
98
+ '2. Implement the changes',
99
+ '3. Verify the code compiles',
100
+ '4. Run the test command if provided',
101
+ '5. Report what you changed and why',
102
+ constraintsBlock,
103
+ testBlock,
104
+ '',
105
+ '## Output Format',
106
+ '',
107
+ 'Respond with a JSON block containing:',
108
+ '```json',
109
+ '{ "summary": "...", "filesChanged": [...], "testResult": "..." }',
110
+ '```',
111
+ ].join('\n');
112
+ return {
113
+ permissions: FULL_ACCESS,
114
+ outputSchema: {
115
+ summary: 'string',
116
+ filesChanged: 'object',
117
+ testResult: 'string',
118
+ },
119
+ prompt,
120
+ owns: [...params.ownedFiles],
121
+ reads: [...(params.readFiles ?? []), ...params.ownedFiles],
122
+ };
123
+ }
124
+ /**
125
+ * Reviewer contract: reads code changes and produces a structured review
126
+ * report covering correctness, style, security, and performance.
127
+ */
128
+ export function reviewerContract(params) {
129
+ const focusBlock = params.focusAreas && params.focusAreas.length > 0
130
+ ? `\n\n## Focus Areas\n\n${params.focusAreas.map((a) => `- ${a}`).join('\n')}`
131
+ : '';
132
+ const criteriaBlock = params.criteria && params.criteria.length > 0
133
+ ? `\n\n## Review Criteria\n\n${params.criteria.map((c) => `- ${c}`).join('\n')}`
134
+ : '';
135
+ const prompt = [
136
+ `Review the following change:`,
137
+ '',
138
+ `> ${params.target}`,
139
+ '',
140
+ '## Files to Review',
141
+ '',
142
+ params.reviewFiles.map((f) => `- \`${f}\``).join('\n'),
143
+ '',
144
+ '## Review Checklist',
145
+ '',
146
+ 'For each file, evaluate:',
147
+ '- **Correctness**: Does the logic do what it claims?',
148
+ '- **Edge Cases**: Are boundary conditions handled?',
149
+ '- **Error Handling**: Are errors caught and handled gracefully?',
150
+ '- **Immutability**: Are objects/arrays mutated or replaced?',
151
+ '- **Naming**: Are names clear and conventional?',
152
+ '- **Security**: Any injection risks, leaked secrets, or unsafe patterns?',
153
+ '- **Performance**: Any obvious N+1 queries, unnecessary allocations, or blocking calls?',
154
+ focusBlock,
155
+ criteriaBlock,
156
+ '',
157
+ '## Output Format',
158
+ '',
159
+ 'Respond with a JSON block containing:',
160
+ '```json',
161
+ '{ "verdict": "approve|request_changes|comment", "summary": "...", "findings": [{ "severity": "critical|high|medium|low", "file": "...", "line": ..., "message": "...", "suggestion": "..." }] }',
162
+ '```',
163
+ ].join('\n');
164
+ return {
165
+ permissions: READ_ONLY,
166
+ outputSchema: {
167
+ verdict: 'string',
168
+ summary: 'string',
169
+ findings: 'object',
170
+ },
171
+ prompt,
172
+ owns: [],
173
+ reads: [...params.reviewFiles],
174
+ };
175
+ }
176
+ /**
177
+ * Debugger contract: analyses failures, identifies root causes, and
178
+ * proposes minimal fixes. Read-only unless explicitly allowed to write.
179
+ */
180
+ export function debuggerContract(params) {
181
+ const errorBlock = params.errorOutput
182
+ ? `\n\n## Error Output\n\n\`\`\`\n${params.errorOutput}\n\`\`\``
183
+ : '';
184
+ const reproBlock = params.reproSteps && params.reproSteps.length > 0
185
+ ? `\n\n## Reproduction Steps\n\n${params.reproSteps.map((s, i) => `${i + 1}. ${s}`).join('\n')}`
186
+ : '';
187
+ const prompt = [
188
+ `Investigate and find the root cause of this issue:`,
189
+ '',
190
+ `> ${params.issue}`,
191
+ '',
192
+ '## Suspect Files',
193
+ '',
194
+ params.suspectFiles.map((f) => `- \`${f}\``).join('\n'),
195
+ errorBlock,
196
+ reproBlock,
197
+ '',
198
+ '## Process',
199
+ '',
200
+ '1. Read each suspect file carefully',
201
+ '2. Trace the execution path that leads to the failure',
202
+ '3. Identify the root cause (not just the symptom)',
203
+ '4. Propose a minimal, safe fix',
204
+ '5. Explain why the fix addresses the root cause',
205
+ '',
206
+ '## Output Format',
207
+ '',
208
+ 'Respond with a JSON block containing:',
209
+ '```json',
210
+ '{ "rootCause": "...", "confidence": "high|medium|low", "fixDescription": "...", "affectedFiles": [...], "prevention": "..." }',
211
+ '```',
212
+ ].join('\n');
213
+ return {
214
+ permissions: READ_RUN,
215
+ outputSchema: {
216
+ rootCause: 'string',
217
+ confidence: 'string',
218
+ fixDescription: 'string',
219
+ affectedFiles: 'object',
220
+ prevention: 'string',
221
+ },
222
+ prompt,
223
+ owns: [],
224
+ reads: [...params.suspectFiles],
225
+ };
226
+ }
227
+ /**
228
+ * Verifier contract: goal-backward verification. Checks that the
229
+ * implemented changes actually satisfy the original requirements by
230
+ * working backward from the goal through each acceptance criterion.
231
+ */
232
+ export function verifierContract(params) {
233
+ const criteriaList = params.acceptanceCriteria
234
+ .map((c, i) => `${i + 1}. ${c}`)
235
+ .join('\n');
236
+ const prompt = [
237
+ `Verify that the implemented changes satisfy the original goal.`,
238
+ '',
239
+ '## Original Goal',
240
+ '',
241
+ params.goal,
242
+ '',
243
+ '## Execution Plan',
244
+ '',
245
+ params.plan,
246
+ '',
247
+ '## Changed Files',
248
+ '',
249
+ params.changedFiles.map((f) => `- \`${f}\``).join('\n'),
250
+ '',
251
+ '## Acceptance Criteria',
252
+ '',
253
+ criteriaList,
254
+ '',
255
+ '## Verification Process',
256
+ '',
257
+ 'Work backward from each acceptance criterion:',
258
+ '1. For each criterion, identify what evidence would prove it is met',
259
+ '2. Check the changed files for that evidence',
260
+ '3. Mark each criterion as PASS, FAIL, or UNCERTAIN',
261
+ '4. If any criterion fails, explain the gap',
262
+ '5. Produce a final verdict',
263
+ '',
264
+ '## Output Format',
265
+ '',
266
+ 'Respond with a JSON block containing:',
267
+ '```json',
268
+ '{ "verdict": "pass|fail|partial", "criteriaResults": [{ "criterion": "...", "status": "pass|fail|uncertain", "evidence": "..." }], "gaps": [...], "recommendation": "..." }',
269
+ '```',
270
+ ].join('\n');
271
+ return {
272
+ permissions: READ_ONLY,
273
+ outputSchema: {
274
+ verdict: 'string',
275
+ criteriaResults: 'object',
276
+ gaps: 'object',
277
+ recommendation: 'string',
278
+ },
279
+ prompt,
280
+ owns: [],
281
+ reads: [...params.changedFiles],
282
+ };
283
+ }
284
+ /**
285
+ * Researcher contract: searches the internet for information on a topic.
286
+ * Returns structured research findings with sources.
287
+ */
288
+ export function researcherContract(params) {
289
+ const scopeText = {
290
+ technical: 'Focus on technical documentation, GitHub repos, Stack Overflow, and official docs.',
291
+ business: 'Focus on industry reports, market analysis, and business news.',
292
+ security: 'Focus on CVE databases, security advisories, and best practices.',
293
+ general: 'Broad search across all sources.',
294
+ }[params.scope ?? 'general'];
295
+ const questionsBlock = params.questions && params.questions.length > 0
296
+ ? `\n\n## Specific Questions to Answer\n\n${params.questions.map((q, i) => `${i + 1}. ${q}`).join('\n')}`
297
+ : '';
298
+ const timeRangeText = params.timeRange
299
+ ? `\n\n## Time Range\nPrioritize results from the last ${params.timeRange}.`
300
+ : '';
301
+ const prompt = [
302
+ `Research the following topic: **${params.topic}**`,
303
+ '',
304
+ '## Search Scope',
305
+ '',
306
+ scopeText,
307
+ timeRangeText,
308
+ '',
309
+ '## Instructions',
310
+ '',
311
+ '1. Search the internet for relevant, authoritative sources',
312
+ '2. For each source, evaluate: credibility, recency, relevance',
313
+ '3. Synthesize findings into actionable insights',
314
+ '4. Note any conflicting information or uncertainties',
315
+ '',
316
+ '## Source Quality Guidelines',
317
+ '',
318
+ '- **Technical**: Official docs > GitHub repos > Stack Overflow > Blog posts',
319
+ '- **Business**: Industry reports > News articles > Company blogs',
320
+ '- **Security**: CVE databases > Official advisories > Security blogs',
321
+ '',
322
+ '## Anti-Patterns to Avoid',
323
+ '',
324
+ '- Do NOT rely on outdated information (>2 years old unless historical)',
325
+ '- Do NOT cite low-credibility sources (unverified blogs, forums)',
326
+ '- Do NOT make assumptions beyond what sources confirm',
327
+ '',
328
+ '## Output Format',
329
+ '',
330
+ 'Respond with a JSON block containing:',
331
+ '```json',
332
+ '{',
333
+ ' "summary": "Executive summary (2-3 sentences)",',
334
+ ' "findings": [',
335
+ ' {',
336
+ ' "insight": "Key finding or answer",',
337
+ ' "confidence": "high|medium|low",',
338
+ ' "sources": [{ "title": "...", "url": "...", "date": "..." }]',
339
+ ' }',
340
+ ' ],',
341
+ ' "recommendations": ["Actionable recommendations based on research"],',
342
+ ' "knowledgeGaps": ["Questions that could not be answered"]',
343
+ '}',
344
+ '```',
345
+ questionsBlock,
346
+ ].join('\n');
347
+ return {
348
+ permissions: {
349
+ ...READ_ONLY,
350
+ // Researcher needs web search capability
351
+ runCommands: true, // For web search/fetch via subagent
352
+ },
353
+ outputSchema: {
354
+ summary: 'string',
355
+ findings: 'object',
356
+ recommendations: 'object',
357
+ knowledgeGaps: 'object',
358
+ },
359
+ prompt,
360
+ owns: [],
361
+ reads: [],
362
+ };
363
+ }
364
+ /**
365
+ * Worktree contract: Creates isolated git worktrees for parallel work.
366
+ * Replaces the worktree-start skill with a direct subagent dispatch.
367
+ */
368
+ export function worktreeContract(params) {
369
+ const baseBranch = params.baseBranch || 'main';
370
+ const worktreePath = `.claude/worktrees/${params.branchName}`;
371
+ const prompt = [
372
+ `Create a git worktree for branch: ${params.branchName}`,
373
+ '',
374
+ `**Base Branch**: ${baseBranch}`,
375
+ `**Worktree Path**: ${worktreePath}`,
376
+ '',
377
+ '## Steps',
378
+ '',
379
+ '1. Inspect current repo state:',
380
+ ' - `git rev-parse --show-toplevel` — get repo root',
381
+ ' - `git status --porcelain --branch` — check current branch',
382
+ ' - `git branch -a` — list all branches',
383
+ '',
384
+ '2. Create worktree:',
385
+ ` - If branch exists: \`git worktree add ${worktreePath} ${params.branchName}\``,
386
+ ` - If branch does not exist: \`git worktree add ${worktreePath} -b ${params.branchName} origin/${baseBranch}\``,
387
+ '',
388
+ '3. Verify creation:',
389
+ ' - `git worktree list`',
390
+ '',
391
+ '## Error Recovery',
392
+ '',
393
+ `- If worktree path exists: \`git worktree remove ${worktreePath} --force\` then retry`,
394
+ `- If branch exists but worktree missing: \`git worktree add ${worktreePath} ${params.branchName}\``,
395
+ '',
396
+ '## Output Format',
397
+ '',
398
+ 'Return JSON:',
399
+ '```json',
400
+ '{',
401
+ ' "worktreePath": "absolute/path/to/worktree",',
402
+ ' "branchName": "' + params.branchName + '",',
403
+ ' "baseBranch": "' + baseBranch + '",',
404
+ ' "repoRoot": "absolute/path/to/repo",',
405
+ ' "status": "created|reused|failed",',
406
+ ' "error": "error message if failed"',
407
+ '}',
408
+ '```',
409
+ ].join('\n');
410
+ return {
411
+ permissions: {
412
+ readFiles: true,
413
+ searchCode: false,
414
+ runCommands: true,
415
+ writeFiles: false,
416
+ gitOperations: true,
417
+ },
418
+ outputSchema: {
419
+ worktreePath: 'string',
420
+ branchName: 'string',
421
+ baseBranch: 'string',
422
+ repoRoot: 'string',
423
+ status: 'string',
424
+ error: 'string',
425
+ },
426
+ prompt,
427
+ owns: [],
428
+ reads: [],
429
+ };
430
+ }
431
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/agents/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { SubagentConfig, SubagentContract } from './types.js';
2
+ declare enum CircuitState {
3
+ CLOSED = "closed",
4
+ OPEN = "open",
5
+ HALF_OPEN = "half-open"
6
+ }
7
+ interface CircuitBreakerConfig {
8
+ failureThreshold: number;
9
+ successThreshold: number;
10
+ timeout: number;
11
+ }
12
+ interface RetryPolicyConfig {
13
+ maxRetries: number;
14
+ baseDelay: number;
15
+ maxDelay: number;
16
+ backoffMultiplier: number;
17
+ retryableErrors: string[];
18
+ }
19
+ export declare class ResilientDispatcher {
20
+ private circuitBreaker;
21
+ private retryPolicy;
22
+ private tokenBudget;
23
+ constructor(circuitConfig?: Partial<CircuitBreakerConfig>, retryConfig?: Partial<RetryPolicyConfig>);
24
+ /**
25
+ * Dispatch a subagent with resilience
26
+ */
27
+ dispatch<T>(config: SubagentConfig, contract: SubagentContract, options?: {
28
+ fallback?: () => T;
29
+ onRetry?: (attempt: number, error: Error) => void;
30
+ }): Promise<T>;
31
+ /**
32
+ * Dispatch multiple subagents in parallel with resilience
33
+ */
34
+ dispatchParallel<T>(configs: SubagentConfig[], contract: SubagentContract): Promise<(T | {
35
+ success: false;
36
+ error: string;
37
+ })[]>;
38
+ /**
39
+ * Build fresh prompt with minimal context
40
+ */
41
+ private buildFreshPrompt;
42
+ /**
43
+ * Spawn subagent process
44
+ */
45
+ private spawnSubagent;
46
+ /**
47
+ * Parse subagent result
48
+ */
49
+ private parseResult;
50
+ /**
51
+ * Generate unique ID
52
+ */
53
+ private generateId;
54
+ /**
55
+ * Get health status
56
+ */
57
+ getHealth(): {
58
+ circuitState: CircuitState;
59
+ tokenUsage: {
60
+ used: number;
61
+ limit: number;
62
+ percentage: number;
63
+ };
64
+ };
65
+ }
66
+ export { CircuitState };
67
+ export type { CircuitBreakerConfig, RetryPolicyConfig };
68
+ //# sourceMappingURL=dispatcher-enhanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher-enhanced.d.ts","sourceRoot":"","sources":["../../../src/agents/dispatcher-enhanced.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAiC,MAAM,YAAY,CAAA;AAGjG,aAAK,YAAY;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;CACxB;AAGD,UAAU,oBAAoB;IAC5B,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;CAChB;AAGD,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AA0GD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;gBAG9B,aAAa,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAC7C,WAAW,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAmB1C;;OAEG;IACG,QAAQ,CAAC,CAAC,EACd,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAA;QAClB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;KAClD,GACA,OAAO,CAAC,CAAC,CAAC;IAmBb;;OAEG;IACG,gBAAgB,CAAC,CAAC,EACtB,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC;IAsBrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;YACW,aAAa;IAsF3B;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,SAAS,IAAI;QACX,YAAY,EAAE,YAAY,CAAA;QAC1B,UAAU,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAChE;CAMF;AAED,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAA"}