@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,290 @@
1
+ /**
2
+ * Enhanced subagent dispatcher with resilience and token budget
3
+ */
4
+ import { spawn } from 'child_process';
5
+ import { TokenBudget, BudgetExceededError } from './token-budget.js';
6
+ // Circuit breaker states
7
+ var CircuitState;
8
+ (function (CircuitState) {
9
+ CircuitState["CLOSED"] = "closed";
10
+ CircuitState["OPEN"] = "open";
11
+ CircuitState["HALF_OPEN"] = "half-open";
12
+ })(CircuitState || (CircuitState = {}));
13
+ // Circuit breaker implementation
14
+ class CircuitBreaker {
15
+ config;
16
+ state = CircuitState.CLOSED;
17
+ failureCount = 0;
18
+ successCount = 0;
19
+ nextAttempt = 0;
20
+ constructor(config) {
21
+ this.config = config;
22
+ }
23
+ async execute(operation, fallback) {
24
+ if (this.state === CircuitState.OPEN) {
25
+ if (Date.now() < this.nextAttempt) {
26
+ if (fallback) {
27
+ console.log('[CircuitBreaker] Using fallback');
28
+ const result = fallback();
29
+ if (result !== undefined)
30
+ return result;
31
+ }
32
+ throw new Error(`Circuit OPEN. Retry after ${new Date(this.nextAttempt).toISOString()}`);
33
+ }
34
+ this.state = CircuitState.HALF_OPEN;
35
+ console.log('[CircuitBreaker] Entering HALF_OPEN state');
36
+ }
37
+ try {
38
+ const result = await operation();
39
+ this.onSuccess();
40
+ return result;
41
+ }
42
+ catch (error) {
43
+ this.onFailure();
44
+ throw error;
45
+ }
46
+ }
47
+ onSuccess() {
48
+ this.failureCount = 0;
49
+ if (this.state === CircuitState.HALF_OPEN) {
50
+ this.successCount++;
51
+ if (this.successCount >= this.config.successThreshold) {
52
+ console.log('[CircuitBreaker] CLOSED - service recovered');
53
+ this.state = CircuitState.CLOSED;
54
+ this.successCount = 0;
55
+ }
56
+ }
57
+ }
58
+ onFailure() {
59
+ this.failureCount++;
60
+ if (this.state === CircuitState.HALF_OPEN || this.failureCount >= this.config.failureThreshold) {
61
+ console.log(`[CircuitBreaker] OPEN - failures: ${this.failureCount}`);
62
+ this.state = CircuitState.OPEN;
63
+ this.nextAttempt = Date.now() + this.config.timeout;
64
+ this.successCount = 0;
65
+ }
66
+ }
67
+ getState() {
68
+ return this.state;
69
+ }
70
+ }
71
+ // Retry policy implementation
72
+ class RetryPolicy {
73
+ config;
74
+ constructor(config) {
75
+ this.config = config;
76
+ }
77
+ async execute(operation) {
78
+ let lastError;
79
+ for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
80
+ try {
81
+ return await operation();
82
+ }
83
+ catch (error) {
84
+ lastError = error;
85
+ if (!this.isRetryable(error))
86
+ throw error;
87
+ if (attempt < this.config.maxRetries) {
88
+ const delay = this.calculateDelay(attempt);
89
+ console.log(`[RetryPolicy] Attempt ${attempt + 1} failed, retrying in ${Math.round(delay)}ms`);
90
+ await this.sleep(delay);
91
+ }
92
+ }
93
+ }
94
+ throw new Error(`Failed after ${this.config.maxRetries} retries: ${lastError?.message}`);
95
+ }
96
+ isRetryable(error) {
97
+ if (!(error instanceof Error))
98
+ return false;
99
+ const errorName = error.constructor.name;
100
+ return this.config.retryableErrors.some(re => errorName.includes(re) || error.message.includes(re));
101
+ }
102
+ calculateDelay(attempt) {
103
+ const exponentialDelay = this.config.baseDelay * Math.pow(this.config.backoffMultiplier, attempt);
104
+ const jitter = exponentialDelay * 0.25 * (Math.random() * 2 - 1);
105
+ return Math.min(exponentialDelay + jitter, this.config.maxDelay);
106
+ }
107
+ sleep(ms) {
108
+ return new Promise(resolve => setTimeout(resolve, ms));
109
+ }
110
+ }
111
+ // Resilient dispatcher combining circuit breaker and retry
112
+ export class ResilientDispatcher {
113
+ circuitBreaker;
114
+ retryPolicy;
115
+ tokenBudget;
116
+ constructor(circuitConfig, retryConfig) {
117
+ this.circuitBreaker = new CircuitBreaker({
118
+ failureThreshold: 5,
119
+ successThreshold: 3,
120
+ timeout: 60000,
121
+ ...circuitConfig
122
+ });
123
+ this.retryPolicy = new RetryPolicy({
124
+ maxRetries: 3,
125
+ baseDelay: 1000,
126
+ maxDelay: 30000,
127
+ backoffMultiplier: 2,
128
+ retryableErrors: ['RateLimitError', 'TimeoutError', 'NetworkError', 'ECONNREFUSED'],
129
+ ...retryConfig
130
+ });
131
+ this.tokenBudget = new TokenBudget();
132
+ }
133
+ /**
134
+ * Dispatch a subagent with resilience
135
+ */
136
+ async dispatch(config, contract, options) {
137
+ // Check token budget
138
+ const estimatedTokens = TokenBudget.estimateTokens(contract.prompt);
139
+ if (!this.tokenBudget.canAfford(estimatedTokens)) {
140
+ throw new BudgetExceededError();
141
+ }
142
+ return this.circuitBreaker.execute(async () => {
143
+ return await this.retryPolicy.execute(async () => {
144
+ const result = await this.spawnSubagent(config, contract);
145
+ this.tokenBudget.recordUsage(result.tokensUsed || estimatedTokens);
146
+ return this.parseResult(result, contract);
147
+ });
148
+ }, options?.fallback);
149
+ }
150
+ /**
151
+ * Dispatch multiple subagents in parallel with resilience
152
+ */
153
+ async dispatchParallel(configs, contract) {
154
+ const promises = configs.map(async (config) => {
155
+ try {
156
+ return await this.dispatch(config, contract);
157
+ }
158
+ catch (error) {
159
+ console.error(`[Dispatcher] Subagent failed:`, error);
160
+ return { success: false, error: error.message };
161
+ }
162
+ });
163
+ // Use allSettled to ensure one failure doesn't affect others
164
+ const results = await Promise.allSettled(promises);
165
+ return results.map(result => {
166
+ if (result.status === 'fulfilled') {
167
+ return result.value;
168
+ }
169
+ else {
170
+ return { success: false, error: result.reason?.message || 'Unknown error' };
171
+ }
172
+ });
173
+ }
174
+ /**
175
+ * Build fresh prompt with minimal context
176
+ */
177
+ buildFreshPrompt(contract) {
178
+ // Only include: task description + permissions + output format
179
+ // Exclude: previous subagent outputs, main agent thinking
180
+ return `${contract.prompt}\n\nPermissions: ${JSON.stringify(contract.permissions)}`;
181
+ }
182
+ /**
183
+ * Spawn subagent process
184
+ */
185
+ async spawnSubagent(config, contract) {
186
+ const startTime = Date.now();
187
+ const freshPrompt = this.buildFreshPrompt(contract);
188
+ return new Promise((resolve, reject) => {
189
+ // Spawn subagent process
190
+ const subagent = spawn('node', ['-e', `
191
+ // Subagent runner - receives prompt via stdin, outputs result via stdout
192
+ const readline = require('readline');
193
+ const rl = readline.createInterface({ input: process.stdin });
194
+
195
+ let prompt = '';
196
+ rl.on('line', (line) => {
197
+ prompt += line + '\n';
198
+ });
199
+
200
+ rl.on('close', async () => {
201
+ // Simulate subagent execution (replace with actual AI call)
202
+ const result = {
203
+ id: '${this.generateId()}',
204
+ role: '${config.role}',
205
+ status: 'success',
206
+ output: JSON.stringify({ result: 'Task completed', prompt }),
207
+ artifacts: [],
208
+ tokensUsed: ${TokenBudget.estimateTokens(freshPrompt)},
209
+ duration: 0,
210
+ errors: []
211
+ };
212
+ console.log(JSON.stringify(result));
213
+ });
214
+ `], {
215
+ env: { ...process.env, CLAUDE_SUBAGENT: '1' },
216
+ timeout: config.timeout || 120000
217
+ });
218
+ let output = '';
219
+ let stderr = '';
220
+ subagent.stdout.on('data', (data) => {
221
+ output += data.toString();
222
+ });
223
+ subagent.stderr.on('data', (data) => {
224
+ stderr += data.toString();
225
+ });
226
+ subagent.on('error', (error) => {
227
+ reject(error);
228
+ });
229
+ subagent.on('close', (code) => {
230
+ const duration = Date.now() - startTime;
231
+ if (code === 0) {
232
+ try {
233
+ const result = JSON.parse(output);
234
+ resolve({
235
+ ...result,
236
+ duration
237
+ });
238
+ }
239
+ catch {
240
+ resolve({
241
+ id: this.generateId(),
242
+ role: config.role,
243
+ status: 'success',
244
+ output,
245
+ artifacts: [],
246
+ tokensUsed: TokenBudget.estimateTokens(freshPrompt),
247
+ duration,
248
+ errors: []
249
+ });
250
+ }
251
+ }
252
+ else {
253
+ reject(new Error(`Subagent exited with code ${code}: ${stderr}`));
254
+ }
255
+ });
256
+ // Send prompt
257
+ subagent.stdin.write(freshPrompt);
258
+ subagent.stdin.end();
259
+ });
260
+ }
261
+ /**
262
+ * Parse subagent result
263
+ */
264
+ parseResult(result, contract) {
265
+ try {
266
+ const parsed = JSON.parse(result.output);
267
+ return parsed;
268
+ }
269
+ catch {
270
+ return result.output;
271
+ }
272
+ }
273
+ /**
274
+ * Generate unique ID
275
+ */
276
+ generateId() {
277
+ return `sub_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
278
+ }
279
+ /**
280
+ * Get health status
281
+ */
282
+ getHealth() {
283
+ return {
284
+ circuitState: this.circuitBreaker.getState(),
285
+ tokenUsage: this.tokenBudget.getUsage()
286
+ };
287
+ }
288
+ }
289
+ export { CircuitState };
290
+ //# sourceMappingURL=dispatcher-enhanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher-enhanced.js","sourceRoot":"","sources":["../../../src/agents/dispatcher-enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Subagent Dispatcher - Spawns isolated subagents to do all real work
3
+ *
4
+ * Constructs prompts from contracts, manages timeouts, validates outputs,
5
+ * and collects results. Uses a pluggable executor backend so the dispatch
6
+ * mechanism can be swapped (process, HTTP, in-process) without changing
7
+ * the orchestration logic.
8
+ */
9
+ import type { SubagentConfig, SubagentContract, SubagentResult } from './types.js';
10
+ import type { Logger } from '../types.js';
11
+ export interface ExecutorOptions {
12
+ id: string;
13
+ model?: string;
14
+ timeout?: number;
15
+ workDir?: string;
16
+ }
17
+ export interface ExecutorResult {
18
+ output: string;
19
+ tokensUsed: number;
20
+ errors: string[];
21
+ }
22
+ export interface SubagentExecutor {
23
+ execute(prompt: string, options: ExecutorOptions): Promise<ExecutorResult>;
24
+ abort(id: string): Promise<void>;
25
+ }
26
+ export interface ProcessExecutorConfig {
27
+ /** CLI command to invoke (default: "claude") */
28
+ command: string;
29
+ /** CLI arguments appended after the prompt */
30
+ args: string[];
31
+ /** Environment variables to forward */
32
+ env: Record<string, string>;
33
+ }
34
+ /**
35
+ * Creates a SubagentExecutor that spawns a subprocess for each dispatch.
36
+ *
37
+ * The executor writes the prompt to a temp file, invokes the configured
38
+ * CLI command with `--input-file`, collects stdout/stderr, and cleans up.
39
+ */
40
+ export declare function createProcessExecutor(config?: Partial<ProcessExecutorConfig>): SubagentExecutor;
41
+ export declare class SubagentDispatcher {
42
+ private readonly executor;
43
+ private readonly logger;
44
+ private readonly activeIds;
45
+ constructor(executor: SubagentExecutor, logger: Logger);
46
+ /**
47
+ * Dispatch a single subagent with the given config and contract.
48
+ *
49
+ * Constructs a structured prompt from the contract, sends it to the
50
+ * executor, validates the output against the optional output schema,
51
+ * and returns a typed SubagentResult.
52
+ */
53
+ dispatch(config: SubagentConfig, contract: SubagentContract): Promise<SubagentResult>;
54
+ /**
55
+ * Dispatch multiple subagents in parallel.
56
+ *
57
+ * All subagents run concurrently. Use when tasks are independent
58
+ * of each other (e.g. exploring multiple directories at once).
59
+ */
60
+ dispatchParallel(configs: readonly SubagentConfig[], contracts: readonly SubagentContract[]): Promise<SubagentResult[]>;
61
+ /**
62
+ * Dispatch multiple subagents sequentially.
63
+ *
64
+ * Each subagent receives the output of all previous subagents as
65
+ * additional context. The pipeline stops early if a subagent fails
66
+ * or times out. Use when tasks form a pipeline (e.g. explore ->
67
+ * implement -> review -> verify).
68
+ */
69
+ dispatchSequential(configs: readonly SubagentConfig[], contracts: readonly SubagentContract[]): Promise<SubagentResult[]>;
70
+ /**
71
+ * Abort a running subagent by its ID.
72
+ */
73
+ abort(id: string): Promise<void>;
74
+ /**
75
+ * Build a structured subagent prompt from config and contract.
76
+ *
77
+ * The prompt follows the Claude Code agent tool pattern: explicit
78
+ * permissions, owned/read file scopes, isolation instructions,
79
+ * token budget, output format requirements, and the task itself.
80
+ */
81
+ private buildPrompt;
82
+ /**
83
+ * Wraps a promise with a timeout. If the timeout fires first the
84
+ * subagent is aborted and the promise rejects.
85
+ */
86
+ private withTimeout;
87
+ /**
88
+ * Validate subagent output against an optional schema.
89
+ * The schema is a Record<string, unknown> where values are type strings
90
+ * like "string", "number", "boolean", "object".
91
+ *
92
+ * Returns an array of validation error messages (empty = valid).
93
+ */
94
+ private validateOutput;
95
+ }
96
+ export interface DispatcherOptions {
97
+ executor?: SubagentExecutor;
98
+ processConfig?: Partial<ProcessExecutorConfig>;
99
+ }
100
+ /**
101
+ * Create a SubagentDispatcher with sensible defaults.
102
+ *
103
+ * If no executor is provided, a process-based executor is created
104
+ * using `createProcessExecutor` which spawns a CLI command.
105
+ */
106
+ export declare function createDispatcher(logger: Logger, options?: DispatcherOptions): SubagentDispatcher;
107
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../../src/agents/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EAIf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAM1C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3E,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAMD,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAQD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAC1C,gBAAgB,CAuFlB;AA2CD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;gBAE5B,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM;IAUtD;;;;;;OAMG;IACG,QAAQ,CACZ,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,cAAc,CAAC;IAuE1B;;;;;OAKG;IACG,gBAAgB,CACpB,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,SAAS,EAAE,SAAS,gBAAgB,EAAE,GACrC,OAAO,CAAC,cAAc,EAAE,CAAC;IA6B5B;;;;;;;OAOG;IACG,kBAAkB,CACtB,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,SAAS,EAAE,SAAS,gBAAgB,EAAE,GACrC,OAAO,CAAC,cAAc,EAAE,CAAC;IAgC5B;;OAEG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActC;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;OAGG;IACH,OAAO,CAAC,WAAW;IA+BnB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;CAyCvB;AAyJD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAChD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,kBAAkB,CAIpB"}