@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,454 @@
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 { nanoid } from 'nanoid';
10
+ const DEFAULT_PROCESS_CONFIG = {
11
+ command: 'claude',
12
+ args: ['--print', '--output-format', 'json'],
13
+ env: {},
14
+ };
15
+ /**
16
+ * Creates a SubagentExecutor that spawns a subprocess for each dispatch.
17
+ *
18
+ * The executor writes the prompt to a temp file, invokes the configured
19
+ * CLI command with `--input-file`, collects stdout/stderr, and cleans up.
20
+ */
21
+ export function createProcessExecutor(config = {}) {
22
+ const resolved = {
23
+ ...DEFAULT_PROCESS_CONFIG,
24
+ ...config,
25
+ };
26
+ const active = new Map();
27
+ return {
28
+ async execute(prompt, options) {
29
+ const { spawn } = await import('child_process');
30
+ const { writeFile, mkdir, rm } = await import('fs/promises');
31
+ const { join } = await import('path');
32
+ const { tmpdir } = await import('os');
33
+ const workDir = options.workDir ?? join(tmpdir(), `yi-subagent-${options.id}`);
34
+ await mkdir(workDir, { recursive: true });
35
+ const promptPath = join(workDir, 'prompt.md');
36
+ await writeFile(promptPath, prompt, 'utf-8');
37
+ const child = spawn(resolved.command, [...resolved.args, '--input-file', promptPath], {
38
+ env: { ...process.env, ...resolved.env },
39
+ stdio: ['ignore', 'pipe', 'pipe'],
40
+ timeout: options.timeout ? options.timeout * 1000 : undefined,
41
+ });
42
+ active.set(options.id, child);
43
+ const outputChunks = [];
44
+ const errorChunks = [];
45
+ child.stdout?.on('data', (chunk) => outputChunks.push(chunk));
46
+ child.stderr?.on('data', (chunk) => errorChunks.push(chunk));
47
+ try {
48
+ const exitCode = await new Promise((resolve, reject) => {
49
+ child.on('close', resolve);
50
+ child.on('error', reject);
51
+ });
52
+ active.delete(options.id);
53
+ const stdout = Buffer.concat(outputChunks).toString('utf-8').trim();
54
+ const stderr = Buffer.concat(errorChunks).toString('utf-8').trim();
55
+ const errors = [];
56
+ if (exitCode !== 0) {
57
+ errors.push(`Subprocess exited with code ${exitCode}`);
58
+ }
59
+ if (stderr) {
60
+ errors.push(stderr);
61
+ }
62
+ // Best-effort cleanup
63
+ await rm(workDir, { recursive: true, force: true }).catch(() => undefined);
64
+ // Rough token estimate: ~4 chars per token
65
+ const tokensUsed = Math.ceil((prompt.length + stdout.length) / 4);
66
+ return { output: stdout, tokensUsed, errors };
67
+ }
68
+ catch (err) {
69
+ active.delete(options.id);
70
+ await rm(workDir, { recursive: true, force: true }).catch(() => undefined);
71
+ return {
72
+ output: '',
73
+ tokensUsed: Math.ceil(prompt.length / 4),
74
+ errors: [String(err)],
75
+ };
76
+ }
77
+ },
78
+ async abort(id) {
79
+ const child = active.get(id);
80
+ if (child) {
81
+ child.kill('SIGTERM');
82
+ active.delete(id);
83
+ }
84
+ },
85
+ };
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // Constants
89
+ // ---------------------------------------------------------------------------
90
+ const DEFAULT_TIMEOUT_SECONDS = 300;
91
+ // ---------------------------------------------------------------------------
92
+ // Role-specific system instructions
93
+ // ---------------------------------------------------------------------------
94
+ const ROLE_INSTRUCTIONS = {
95
+ explorer: 'You are an EXPLORER subagent. Your job is to search and read the codebase. You CANNOT write or modify any files.',
96
+ implementer: 'You are an IMPLEMENTER subagent. Your job is to write code, run tests, and verify your changes compile and pass.',
97
+ reviewer: 'You are a REVIEWER subagent. Your job is to read code changes and produce a structured review report. You CANNOT write files.',
98
+ planner: 'You are a PLANNER subagent. Your job is to analyse requirements and create implementation plans.',
99
+ debugger: 'You are a DEBUGGER subagent. Your job is to analyse failures, identify root causes, and propose fixes.',
100
+ verifier: 'You are a VERIFIER subagent. Your job is to verify that implemented changes satisfy the original requirements. You CANNOT write files.',
101
+ general: 'You are a GENERAL subagent. Complete the assigned task within your permissions.',
102
+ researcher: 'You are a RESEARCHER subagent. Your job is to research topics and provide findings.',
103
+ };
104
+ const PERMISSION_LABELS = {
105
+ readFiles: 'Read Files',
106
+ searchCode: 'Search Code',
107
+ runCommands: 'Run Commands',
108
+ writeFiles: 'Write Files',
109
+ gitOperations: 'Git Operations',
110
+ };
111
+ // ---------------------------------------------------------------------------
112
+ // Subagent Dispatcher
113
+ // ---------------------------------------------------------------------------
114
+ export class SubagentDispatcher {
115
+ executor;
116
+ logger;
117
+ activeIds;
118
+ constructor(executor, logger) {
119
+ this.executor = executor;
120
+ this.logger = logger;
121
+ this.activeIds = new Set();
122
+ }
123
+ // -----------------------------------------------------------------------
124
+ // Public API
125
+ // -----------------------------------------------------------------------
126
+ /**
127
+ * Dispatch a single subagent with the given config and contract.
128
+ *
129
+ * Constructs a structured prompt from the contract, sends it to the
130
+ * executor, validates the output against the optional output schema,
131
+ * and returns a typed SubagentResult.
132
+ */
133
+ async dispatch(config, contract) {
134
+ const id = nanoid();
135
+ const startTime = Date.now();
136
+ const timeoutSeconds = config.timeout ?? DEFAULT_TIMEOUT_SECONDS;
137
+ this.activeIds.add(id);
138
+ this.logger.info(`[Dispatcher] Dispatching ${id} (role=${config.role})`);
139
+ try {
140
+ const prompt = this.buildPrompt(config, contract);
141
+ const executorResult = await this.withTimeout(this.executor.execute(prompt, {
142
+ id,
143
+ model: config.model,
144
+ timeout: timeoutSeconds,
145
+ }), timeoutSeconds * 1000, id);
146
+ const duration = Date.now() - startTime;
147
+ const validationErrors = this.validateOutput(executorResult.output, contract.outputSchema);
148
+ const allErrors = [...executorResult.errors, ...validationErrors];
149
+ const status = allErrors.length > 0 ? 'failure' : 'success';
150
+ const artifacts = extractArtifacts(executorResult.output);
151
+ this.logger.info(`[Dispatcher] Subagent ${id} completed: status=${status} duration=${duration}ms tokens=${executorResult.tokensUsed}`);
152
+ return {
153
+ id,
154
+ role: config.role,
155
+ status,
156
+ output: executorResult.output,
157
+ artifacts,
158
+ tokensUsed: executorResult.tokensUsed,
159
+ duration,
160
+ errors: allErrors,
161
+ };
162
+ }
163
+ catch (error) {
164
+ const duration = Date.now() - startTime;
165
+ const errorMessage = error instanceof Error ? error.message : String(error);
166
+ const isTimeout = errorMessage.includes('timed out');
167
+ this.logger.error(`[Dispatcher] Subagent ${id} failed: ${errorMessage}`);
168
+ return {
169
+ id,
170
+ role: config.role,
171
+ status: isTimeout ? 'timeout' : 'failure',
172
+ output: '',
173
+ artifacts: [],
174
+ tokensUsed: 0,
175
+ duration,
176
+ errors: [errorMessage],
177
+ };
178
+ }
179
+ finally {
180
+ this.activeIds.delete(id);
181
+ }
182
+ }
183
+ /**
184
+ * Dispatch multiple subagents in parallel.
185
+ *
186
+ * All subagents run concurrently. Use when tasks are independent
187
+ * of each other (e.g. exploring multiple directories at once).
188
+ */
189
+ async dispatchParallel(configs, contracts) {
190
+ if (configs.length !== contracts.length) {
191
+ throw new Error(`configs.length (${configs.length}) must equal contracts.length (${contracts.length})`);
192
+ }
193
+ this.logger.info(`[Dispatcher] Dispatching ${configs.length} subagents in parallel`);
194
+ const pairs = configs.map((config, i) => ({ config, contract: contracts[i] }));
195
+ const results = await Promise.all(pairs.map(({ config, contract }) => this.dispatch(config, contract)));
196
+ const counts = {
197
+ success: results.filter((r) => r.status === 'success').length,
198
+ failure: results.filter((r) => r.status === 'failure').length,
199
+ timeout: results.filter((r) => r.status === 'timeout').length,
200
+ };
201
+ this.logger.info(`[Dispatcher] Parallel batch complete: ${counts.success} success, ${counts.failure} failure, ${counts.timeout} timeout`);
202
+ return results;
203
+ }
204
+ /**
205
+ * Dispatch multiple subagents sequentially.
206
+ *
207
+ * Each subagent receives the output of all previous subagents as
208
+ * additional context. The pipeline stops early if a subagent fails
209
+ * or times out. Use when tasks form a pipeline (e.g. explore ->
210
+ * implement -> review -> verify).
211
+ */
212
+ async dispatchSequential(configs, contracts) {
213
+ if (configs.length !== contracts.length) {
214
+ throw new Error(`configs.length (${configs.length}) must equal contracts.length (${contracts.length})`);
215
+ }
216
+ this.logger.info(`[Dispatcher] Dispatching ${configs.length} subagents sequentially`);
217
+ const results = [];
218
+ for (let i = 0; i < configs.length; i++) {
219
+ const augmentedContract = augmentWithPreviousResults(contracts[i], results);
220
+ const result = await this.dispatch(configs[i], augmentedContract);
221
+ results.push(result);
222
+ if (result.status === 'failure' || result.status === 'timeout') {
223
+ this.logger.warn(`[Dispatcher] Stopping sequential pipeline at index ${i} (${result.status})`);
224
+ break;
225
+ }
226
+ }
227
+ return results;
228
+ }
229
+ /**
230
+ * Abort a running subagent by its ID.
231
+ */
232
+ async abort(id) {
233
+ if (!this.activeIds.has(id)) {
234
+ this.logger.warn(`[Dispatcher] Cannot abort ${id}: not active`);
235
+ return;
236
+ }
237
+ await this.executor.abort(id);
238
+ this.activeIds.delete(id);
239
+ this.logger.info(`[Dispatcher] Aborted subagent ${id}`);
240
+ }
241
+ // -----------------------------------------------------------------------
242
+ // Prompt construction
243
+ // -----------------------------------------------------------------------
244
+ /**
245
+ * Build a structured subagent prompt from config and contract.
246
+ *
247
+ * The prompt follows the Claude Code agent tool pattern: explicit
248
+ * permissions, owned/read file scopes, isolation instructions,
249
+ * token budget, output format requirements, and the task itself.
250
+ */
251
+ buildPrompt(config, contract) {
252
+ const sections = [];
253
+ sections.push(buildRoleHeader(config.role));
254
+ sections.push(buildPermissionsBlock(contract.permissions));
255
+ sections.push(buildFileScopeBlock(contract.owns, contract.reads));
256
+ if (config.isolation === 'worktree') {
257
+ sections.push(buildIsolationBlock());
258
+ }
259
+ sections.push(buildBudgetBlock(config.tokenBudget));
260
+ sections.push(buildOutputSchemaBlock(contract.outputSchema));
261
+ sections.push(buildTaskBlock(contract.prompt));
262
+ return sections.join('\n\n---\n\n');
263
+ }
264
+ // -----------------------------------------------------------------------
265
+ // Timeout handling
266
+ // -----------------------------------------------------------------------
267
+ /**
268
+ * Wraps a promise with a timeout. If the timeout fires first the
269
+ * subagent is aborted and the promise rejects.
270
+ */
271
+ withTimeout(promise, timeoutMs, id) {
272
+ if (timeoutMs <= 0 || !Number.isFinite(timeoutMs)) {
273
+ return promise;
274
+ }
275
+ return new Promise((resolve, reject) => {
276
+ const timer = setTimeout(() => {
277
+ this.executor.abort(id).catch(() => undefined);
278
+ reject(new Error(`Subagent ${id} timed out after ${timeoutMs}ms`));
279
+ }, timeoutMs);
280
+ promise
281
+ .then((result) => {
282
+ clearTimeout(timer);
283
+ resolve(result);
284
+ })
285
+ .catch((error) => {
286
+ clearTimeout(timer);
287
+ reject(error);
288
+ });
289
+ });
290
+ }
291
+ // -----------------------------------------------------------------------
292
+ // Output validation
293
+ // -----------------------------------------------------------------------
294
+ /**
295
+ * Validate subagent output against an optional schema.
296
+ * The schema is a Record<string, unknown> where values are type strings
297
+ * like "string", "number", "boolean", "object".
298
+ *
299
+ * Returns an array of validation error messages (empty = valid).
300
+ */
301
+ validateOutput(output, schema) {
302
+ if (!schema || Object.keys(schema).length === 0) {
303
+ return [];
304
+ }
305
+ // Try to extract a JSON block from the output
306
+ const jsonMatch = output.match(/```json\s*([\s\S]*?)\s*```/);
307
+ const jsonText = jsonMatch ? jsonMatch[1].trim() : output.trim();
308
+ let parsed;
309
+ try {
310
+ parsed = JSON.parse(jsonText);
311
+ }
312
+ catch {
313
+ return ['Output is not valid JSON'];
314
+ }
315
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
316
+ return ['Output must be a JSON object'];
317
+ }
318
+ const obj = parsed;
319
+ const errors = [];
320
+ for (const [key, expectedType] of Object.entries(schema)) {
321
+ if (!(key in obj)) {
322
+ errors.push(`Missing required field: "${key}"`);
323
+ continue;
324
+ }
325
+ const actualType = typeof obj[key];
326
+ if (actualType !== expectedType) {
327
+ errors.push(`Field "${key}": expected type ${String(expectedType)}, got ${actualType}`);
328
+ }
329
+ }
330
+ return errors;
331
+ }
332
+ }
333
+ // ---------------------------------------------------------------------------
334
+ // Prompt builder helpers (pure functions)
335
+ // ---------------------------------------------------------------------------
336
+ function buildRoleHeader(role) {
337
+ const instruction = ROLE_INSTRUCTIONS[role] ?? ROLE_INSTRUCTIONS.general;
338
+ return `# Role: ${role}\n\n${instruction}`;
339
+ }
340
+ function buildPermissionsBlock(permissions) {
341
+ const lines = ['## Permissions'];
342
+ for (const key of Object.keys(permissions)) {
343
+ const label = PERMISSION_LABELS[key];
344
+ const allowed = permissions[key] ? 'ALLOWED' : 'DENIED';
345
+ lines.push(`- ${label}: ${allowed}`);
346
+ }
347
+ return lines.join('\n');
348
+ }
349
+ function buildFileScopeBlock(owns, reads) {
350
+ const lines = ['## File Scope'];
351
+ lines.push('\n### Owned Files (may modify)');
352
+ if (owns.length === 0) {
353
+ lines.push('- None');
354
+ }
355
+ else {
356
+ for (const file of owns) {
357
+ lines.push(`- ${file}`);
358
+ }
359
+ }
360
+ lines.push('\n### Read-only Files');
361
+ if (reads.length === 0) {
362
+ lines.push('- None');
363
+ }
364
+ else {
365
+ for (const file of reads) {
366
+ lines.push(`- ${file}`);
367
+ }
368
+ }
369
+ return lines.join('\n');
370
+ }
371
+ function buildIsolationBlock() {
372
+ return [
373
+ '## Isolation: Worktree',
374
+ '',
375
+ 'You are running in an isolated git worktree. All changes you make are',
376
+ 'contained within this worktree. You MUST:',
377
+ '- Create and modify files only within the worktree',
378
+ '- Run tests within the worktree',
379
+ '- Commit your changes before exiting',
380
+ '- Never modify files outside the worktree',
381
+ ].join('\n');
382
+ }
383
+ function buildBudgetBlock(tokenBudget) {
384
+ const budget = tokenBudget ?? 32000;
385
+ return [
386
+ '## Token Budget',
387
+ '',
388
+ `You have a budget of **${budget.toLocaleString()} tokens**.`,
389
+ 'Stay within this limit. Be concise. Prefer essential information.',
390
+ ].join('\n');
391
+ }
392
+ function buildOutputSchemaBlock(schema) {
393
+ if (!schema || Object.keys(schema).length === 0) {
394
+ return '## Output Format\n\nProvide your response as plain text or markdown.';
395
+ }
396
+ const keys = Object.keys(schema);
397
+ const lines = [
398
+ '## Required Output Format',
399
+ '',
400
+ 'Your response MUST be a JSON object with these fields:',
401
+ ];
402
+ for (const key of keys) {
403
+ lines.push(`- \`${key}\`: ${String(schema[key])}`);
404
+ }
405
+ lines.push('', 'Wrap your output in a fenced JSON block:', '', '```json', `{ ${keys.map((k) => `"${k}": ...`).join(', ')} }`, '```');
406
+ return lines.join('\n');
407
+ }
408
+ function buildTaskBlock(prompt) {
409
+ return `## Task\n\n${prompt}`;
410
+ }
411
+ /**
412
+ * Augment a contract with output from previous subagents.
413
+ * Used by dispatchSequential to provide pipeline context.
414
+ */
415
+ function augmentWithPreviousResults(contract, previousResults) {
416
+ if (previousResults.length === 0) {
417
+ return contract;
418
+ }
419
+ const context = previousResults
420
+ .map((r) => `### Previous Subagent (role=${r.role}, status=${r.status})\n\n${r.output || '(no output)'}`)
421
+ .join('\n\n');
422
+ return {
423
+ ...contract,
424
+ prompt: `${contract.prompt}\n\n## Context from Previous Steps\n\n${context}`,
425
+ };
426
+ }
427
+ /**
428
+ * Extract structured artifacts from subagent output text.
429
+ * Recognises fenced code blocks (JSON, diff) and converts them
430
+ * to SubagentArtifact records.
431
+ */
432
+ function extractArtifacts(output) {
433
+ const artifacts = [];
434
+ const jsonBlocks = output.matchAll(/```json\s*([\s\S]*?)\s*```/g);
435
+ for (const match of jsonBlocks) {
436
+ artifacts.push({ type: 'report', content: match[1].trim() });
437
+ }
438
+ const diffBlocks = output.matchAll(/```diff\s*([\s\S]*?)\s*```/g);
439
+ for (const match of diffBlocks) {
440
+ artifacts.push({ type: 'diff', content: match[1].trim() });
441
+ }
442
+ return artifacts;
443
+ }
444
+ /**
445
+ * Create a SubagentDispatcher with sensible defaults.
446
+ *
447
+ * If no executor is provided, a process-based executor is created
448
+ * using `createProcessExecutor` which spawns a CLI command.
449
+ */
450
+ export function createDispatcher(logger, options = {}) {
451
+ const executor = options.executor ?? createProcessExecutor(options.processConfig);
452
+ return new SubagentDispatcher(executor, logger);
453
+ }
454
+ //# sourceMappingURL=dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../src/agents/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Agents module index
3
+ *
4
+ * Public API surface for the subagent dispatch engine.
5
+ */
6
+ export type { SubagentConfig, SubagentContract, SubagentResult, SubagentArtifact, SubagentRole, PermissionSet, MainAgentGuard, } from './types.js';
7
+ export { SubagentDispatcher, createDispatcher, createProcessExecutor, } from './dispatcher.js';
8
+ export type { SubagentExecutor, ExecutorOptions, ExecutorResult, ProcessExecutorConfig, DispatcherOptions, } from './dispatcher.js';
9
+ export { explorerContract, implementerContract, reviewerContract, debuggerContract, verifierContract, } from './contracts.js';
10
+ export type { ExplorerParams, ImplementerParams, ReviewerParams, DebuggerParams, VerifierParams, } from './contracts.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Agents module index
3
+ *
4
+ * Public API surface for the subagent dispatch engine.
5
+ */
6
+ // Dispatcher
7
+ export { SubagentDispatcher, createDispatcher, createProcessExecutor, } from './dispatcher.js';
8
+ // Contracts
9
+ export { explorerContract, implementerContract, reviewerContract, debuggerContract, verifierContract, } from './contracts.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,aAAa;AACb,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAUzB,YAAY;AACZ,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Circuit breaker and retry mechanisms for resilient subagent dispatch
3
+ */
4
+ declare enum CircuitState {
5
+ CLOSED = "closed",// Normal operation
6
+ OPEN = "open",// Circuit broken, reject requests
7
+ HALF_OPEN = "half-open"
8
+ }
9
+ export declare class CircuitBreakerError extends Error {
10
+ constructor(message: string);
11
+ }
12
+ export declare class RetryExhaustedError extends Error {
13
+ constructor(message: string);
14
+ }
15
+ export interface CircuitBreakerConfig {
16
+ failureThreshold: number;
17
+ successThreshold: number;
18
+ timeout: number;
19
+ }
20
+ export interface CircuitBreakerMetrics {
21
+ state: CircuitState;
22
+ failureCount: number;
23
+ successCount: number;
24
+ timeUntilRetry: number;
25
+ }
26
+ export declare class CircuitBreaker {
27
+ private state;
28
+ private failureCount;
29
+ private successCount;
30
+ private nextAttempt;
31
+ private config;
32
+ constructor(config?: Partial<CircuitBreakerConfig>);
33
+ /**
34
+ * Execute operation with circuit breaker protection
35
+ */
36
+ execute<T>(operation: () => Promise<T>, fallback?: () => T): Promise<T>;
37
+ private onSuccess;
38
+ private onFailure;
39
+ private tripCircuit;
40
+ getState(): CircuitState;
41
+ getMetrics(): CircuitBreakerMetrics;
42
+ }
43
+ export interface RetryPolicyConfig {
44
+ maxRetries: number;
45
+ baseDelay: number;
46
+ maxDelay: number;
47
+ backoffMultiplier: number;
48
+ retryableErrors: string[];
49
+ }
50
+ export declare class RetryPolicy {
51
+ private config;
52
+ constructor(config?: Partial<RetryPolicyConfig>);
53
+ /**
54
+ * Execute operation with retry logic
55
+ */
56
+ execute<T>(operation: () => Promise<T>): Promise<T>;
57
+ private isRetryable;
58
+ private calculateDelay;
59
+ private sleep;
60
+ }
61
+ export interface ResilientDispatchOptions<T> {
62
+ fallback?: () => T;
63
+ onRetry?: (attempt: number, error: Error) => void;
64
+ onCircuitOpen?: () => void;
65
+ }
66
+ export declare class ResilientDispatcher {
67
+ private circuitBreaker;
68
+ private retryPolicy;
69
+ constructor(config?: {
70
+ circuitBreaker?: Partial<CircuitBreakerConfig>;
71
+ retryPolicy?: Partial<RetryPolicyConfig>;
72
+ });
73
+ /**
74
+ * Dispatch with both circuit breaker and retry
75
+ */
76
+ dispatch<T>(operation: () => Promise<T>, options?: ResilientDispatchOptions<T>): Promise<T>;
77
+ /**
78
+ * Get health metrics
79
+ */
80
+ getHealth(): {
81
+ circuitState: CircuitState;
82
+ metrics: CircuitBreakerMetrics;
83
+ };
84
+ }
85
+ export { CircuitState };
86
+ //# sourceMappingURL=resilience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../../../src/agents/resilience.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,aAAK,YAAY;IACf,MAAM,WAAW,CAAO,mBAAmB;IAC3C,IAAI,SAAS,CAAW,kCAAkC;IAC1D,SAAS,cAAc;CACxB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,YAAY,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAStD;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,GACjB,OAAO,CAAC,CAAC,CAAC;IA4Bb,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,WAAW;IAOnB,QAAQ,IAAI,YAAY;IAIxB,UAAU,IAAI,qBAAqB;CAQpC;AAED,MAAM,WAAW,iBAAiB;IAChC,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;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAWnD;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0BzD,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,KAAK;CAGd;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACjD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;CAC3B;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAa;gBAEpB,MAAM,CAAC,EAAE;QACnB,cAAc,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;QAC9C,WAAW,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;KACzC;IAKD;;OAEG;IACG,QAAQ,CAAC,CAAC,EACd,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,wBAAwB,CAAC,CAAC,CAAM,GACxC,OAAO,CAAC,CAAC,CAAC;IASb;;OAEG;IACH,SAAS,IAAI;QACX,YAAY,EAAE,YAAY,CAAA;QAC1B,OAAO,EAAE,qBAAqB,CAAA;KAC/B;CAMF;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}