@zhixuan92/multi-model-agent-core 4.0.6 → 4.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 (141) hide show
  1. package/dist/bounded-execution/index.d.ts +2 -0
  2. package/dist/bounded-execution/index.d.ts.map +1 -1
  3. package/dist/bounded-execution/index.js +2 -0
  4. package/dist/bounded-execution/index.js.map +1 -1
  5. package/dist/bounded-execution/safety-max-turns.d.ts +17 -0
  6. package/dist/bounded-execution/safety-max-turns.d.ts.map +1 -0
  7. package/dist/bounded-execution/safety-max-turns.js +17 -0
  8. package/dist/bounded-execution/safety-max-turns.js.map +1 -0
  9. package/dist/bounded-execution/stall-watchdog.d.ts +16 -0
  10. package/dist/bounded-execution/stall-watchdog.d.ts.map +1 -0
  11. package/dist/bounded-execution/stall-watchdog.js +69 -0
  12. package/dist/bounded-execution/stall-watchdog.js.map +1 -0
  13. package/dist/intake/brief-compiler-slots/delegate.d.ts +18 -0
  14. package/dist/intake/brief-compiler-slots/delegate.d.ts.map +1 -1
  15. package/dist/intake/brief-compiler-slots/delegate.js +36 -3
  16. package/dist/intake/brief-compiler-slots/delegate.js.map +1 -1
  17. package/dist/lifecycle/handlers/execution-context-builder.d.ts.map +1 -1
  18. package/dist/lifecycle/handlers/execution-context-builder.js +2 -1
  19. package/dist/lifecycle/handlers/execution-context-builder.js.map +1 -1
  20. package/dist/lifecycle/handlers/quality-chain-handlers.d.ts.map +1 -1
  21. package/dist/lifecycle/handlers/quality-chain-handlers.js +10 -1
  22. package/dist/lifecycle/handlers/quality-chain-handlers.js.map +1 -1
  23. package/dist/lifecycle/parallel-criteria-dispatcher.d.ts +62 -0
  24. package/dist/lifecycle/parallel-criteria-dispatcher.d.ts.map +1 -0
  25. package/dist/lifecycle/parallel-criteria-dispatcher.js +328 -0
  26. package/dist/lifecycle/parallel-criteria-dispatcher.js.map +1 -0
  27. package/dist/lifecycle/parallel-criteria-routes.d.ts +16 -0
  28. package/dist/lifecycle/parallel-criteria-routes.d.ts.map +1 -0
  29. package/dist/lifecycle/parallel-criteria-routes.js +147 -0
  30. package/dist/lifecycle/parallel-criteria-routes.js.map +1 -0
  31. package/dist/lifecycle/task-runner.d.ts.map +1 -1
  32. package/dist/lifecycle/task-runner.js +268 -97
  33. package/dist/lifecycle/task-runner.js.map +1 -1
  34. package/dist/providers/anthropic-messages-adapter.d.ts.map +1 -1
  35. package/dist/providers/anthropic-messages-adapter.js +8 -1
  36. package/dist/providers/anthropic-messages-adapter.js.map +1 -1
  37. package/dist/providers/provider-factory.d.ts.map +1 -1
  38. package/dist/providers/provider-factory.js +2 -1
  39. package/dist/providers/provider-factory.js.map +1 -1
  40. package/dist/providers/runner-adapter.d.ts +8 -0
  41. package/dist/providers/runner-adapter.d.ts.map +1 -1
  42. package/dist/providers/runner-shell-types.d.ts +7 -0
  43. package/dist/providers/runner-shell-types.d.ts.map +1 -1
  44. package/dist/providers/runner-shell.d.ts +51 -1
  45. package/dist/providers/runner-shell.d.ts.map +1 -1
  46. package/dist/providers/runner-shell.js +130 -0
  47. package/dist/providers/runner-shell.js.map +1 -1
  48. package/dist/reporting/report-parser-slots/investigate-report.d.ts.map +1 -1
  49. package/dist/reporting/report-parser-slots/investigate-report.js +41 -2
  50. package/dist/reporting/report-parser-slots/investigate-report.js.map +1 -1
  51. package/dist/review/annotator-engine.d.ts +7 -1
  52. package/dist/review/annotator-engine.d.ts.map +1 -1
  53. package/dist/review/annotator-engine.js +15 -2
  54. package/dist/review/annotator-engine.js.map +1 -1
  55. package/dist/review/annotator-prompt-builder.d.ts.map +1 -1
  56. package/dist/review/annotator-prompt-builder.js +10 -2
  57. package/dist/review/annotator-prompt-builder.js.map +1 -1
  58. package/dist/review/reviewer-engine.d.ts.map +1 -1
  59. package/dist/review/reviewer-engine.js +4 -3
  60. package/dist/review/reviewer-engine.js.map +1 -1
  61. package/dist/review/templates/annotator-audit.d.ts.map +1 -1
  62. package/dist/review/templates/annotator-audit.js +5 -3
  63. package/dist/review/templates/annotator-audit.js.map +1 -1
  64. package/dist/review/templates/annotator-debug.d.ts.map +1 -1
  65. package/dist/review/templates/annotator-debug.js +11 -7
  66. package/dist/review/templates/annotator-debug.js.map +1 -1
  67. package/dist/review/templates/annotator-investigate.d.ts.map +1 -1
  68. package/dist/review/templates/annotator-investigate.js +6 -3
  69. package/dist/review/templates/annotator-investigate.js.map +1 -1
  70. package/dist/review/templates/annotator-review.d.ts.map +1 -1
  71. package/dist/review/templates/annotator-review.js +13 -6
  72. package/dist/review/templates/annotator-review.js.map +1 -1
  73. package/dist/review/templates/annotator-shared.d.ts +8 -1
  74. package/dist/review/templates/annotator-shared.d.ts.map +1 -1
  75. package/dist/review/templates/annotator-shared.js.map +1 -1
  76. package/dist/review/templates/annotator-verify.d.ts.map +1 -1
  77. package/dist/review/templates/annotator-verify.js +11 -5
  78. package/dist/review/templates/annotator-verify.js.map +1 -1
  79. package/dist/tools/audit/implementer-criteria.d.ts +60 -4
  80. package/dist/tools/audit/implementer-criteria.d.ts.map +1 -1
  81. package/dist/tools/audit/implementer-criteria.js +118 -11
  82. package/dist/tools/audit/implementer-criteria.js.map +1 -1
  83. package/dist/tools/audit/schema.d.ts +3 -10
  84. package/dist/tools/audit/schema.d.ts.map +1 -1
  85. package/dist/tools/audit/schema.js +3 -4
  86. package/dist/tools/audit/schema.js.map +1 -1
  87. package/dist/tools/audit/tool-config.d.ts.map +1 -1
  88. package/dist/tools/audit/tool-config.js +70 -36
  89. package/dist/tools/audit/tool-config.js.map +1 -1
  90. package/dist/tools/criteria-types.d.ts +27 -0
  91. package/dist/tools/criteria-types.d.ts.map +1 -0
  92. package/dist/tools/criteria-types.js +25 -0
  93. package/dist/tools/criteria-types.js.map +1 -0
  94. package/dist/tools/debug/implementer-criteria.d.ts +47 -4
  95. package/dist/tools/debug/implementer-criteria.d.ts.map +1 -1
  96. package/dist/tools/debug/implementer-criteria.js +104 -13
  97. package/dist/tools/debug/implementer-criteria.js.map +1 -1
  98. package/dist/tools/debug/tool-config.d.ts.map +1 -1
  99. package/dist/tools/debug/tool-config.js +31 -4
  100. package/dist/tools/debug/tool-config.js.map +1 -1
  101. package/dist/tools/delegate/implementer-criteria.d.ts +62 -0
  102. package/dist/tools/delegate/implementer-criteria.d.ts.map +1 -0
  103. package/dist/tools/delegate/implementer-criteria.js +114 -0
  104. package/dist/tools/delegate/implementer-criteria.js.map +1 -0
  105. package/dist/tools/execute-plan/implementer-criteria.d.ts +52 -0
  106. package/dist/tools/execute-plan/implementer-criteria.d.ts.map +1 -0
  107. package/dist/tools/execute-plan/implementer-criteria.js +104 -0
  108. package/dist/tools/execute-plan/implementer-criteria.js.map +1 -0
  109. package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
  110. package/dist/tools/execute-plan/tool-config.js +17 -3
  111. package/dist/tools/execute-plan/tool-config.js.map +1 -1
  112. package/dist/tools/investigate/implementer-criteria.d.ts +51 -5
  113. package/dist/tools/investigate/implementer-criteria.d.ts.map +1 -1
  114. package/dist/tools/investigate/implementer-criteria.js +109 -13
  115. package/dist/tools/investigate/implementer-criteria.js.map +1 -1
  116. package/dist/tools/investigate/tool-config.d.ts.map +1 -1
  117. package/dist/tools/investigate/tool-config.js +20 -8
  118. package/dist/tools/investigate/tool-config.js.map +1 -1
  119. package/dist/tools/parallel-criteria-prompt.d.ts +106 -0
  120. package/dist/tools/parallel-criteria-prompt.d.ts.map +1 -0
  121. package/dist/tools/parallel-criteria-prompt.js +86 -0
  122. package/dist/tools/parallel-criteria-prompt.js.map +1 -0
  123. package/dist/tools/review/implementer-criteria.d.ts +50 -1
  124. package/dist/tools/review/implementer-criteria.d.ts.map +1 -1
  125. package/dist/tools/review/implementer-criteria.js +113 -9
  126. package/dist/tools/review/implementer-criteria.js.map +1 -1
  127. package/dist/tools/review/tool-config.d.ts.map +1 -1
  128. package/dist/tools/review/tool-config.js +50 -7
  129. package/dist/tools/review/tool-config.js.map +1 -1
  130. package/dist/tools/verify/implementer-criteria.d.ts +49 -0
  131. package/dist/tools/verify/implementer-criteria.d.ts.map +1 -1
  132. package/dist/tools/verify/implementer-criteria.js +104 -8
  133. package/dist/tools/verify/implementer-criteria.js.map +1 -1
  134. package/dist/tools/verify/tool-config.d.ts.map +1 -1
  135. package/dist/tools/verify/tool-config.js +22 -2
  136. package/dist/tools/verify/tool-config.js.map +1 -1
  137. package/dist/types/run-result.d.ts +18 -0
  138. package/dist/types/run-result.d.ts.map +1 -1
  139. package/dist/types/task-spec.d.ts +11 -0
  140. package/dist/types/task-spec.d.ts.map +1 -1
  141. package/package.json +1 -1
@@ -0,0 +1,328 @@
1
+ import { SAFETY_MAX_TURNS } from '../bounded-execution/safety-max-turns.js';
2
+ import { makeToolDefinitions } from '../providers/tool-definitions.js';
3
+ import { WRITE_TOOL_NAMES, SHELL_TOOL_NAMES } from '../providers/tool-name-sets.js';
4
+ /**
5
+ * Filters out write + shell tools from the standard tool surface so
6
+ * sub-workers in a read-only fan-out can't accidentally mutate the cwd.
7
+ * Read tools (read_file, grep, glob, listFiles) and any other non-write
8
+ * tools (web_search etc.) pass through.
9
+ */
10
+ function filterToReadOnly(defs) {
11
+ return defs.filter(d => !WRITE_TOOL_NAMES.has(d.name) && !SHELL_TOOL_NAMES.has(d.name));
12
+ }
13
+ const TRANSPORT_FAILURE_CODES = new Set([
14
+ 'transport_failure', 'provider_transport_failure', 'api_error', 'network_error',
15
+ ]);
16
+ /** Per-angle wall-clock cap. After this, the sub-worker's abortSignal fires
17
+ * and runOneSubWorker synthesizes a [N/A] finding so the merge annotator
18
+ * drops the angle gracefully. Bounds the worst-case max(angle wall) at
19
+ * 10 min — total route wall ≈ warmer + 10 min + merge ≈ 13 min ceiling. */
20
+ const ANGLE_HARD_CAP_MS = 10 * 60 * 1000;
21
+ /** Soft warning checkpoint. Emits a verbose event so operators can see
22
+ * WHICH angles are slow before they hit the hard cap. No worker-side
23
+ * behavior change. */
24
+ const ANGLE_SOFT_WARN_MS = 5 * 60 * 1000;
25
+ function classifyFailureReason(errorCode) {
26
+ if (!errorCode)
27
+ return 'other';
28
+ if (errorCode === 'timeout' || errorCode.includes('time'))
29
+ return 'timeout';
30
+ if (TRANSPORT_FAILURE_CODES.has(errorCode) || errorCode.includes('transport'))
31
+ return 'transport';
32
+ if (errorCode.includes('parse'))
33
+ return 'parse';
34
+ return 'other';
35
+ }
36
+ async function runOneSubWorker(input, criterion, toolDefs) {
37
+ input.bus?.emit({
38
+ event: 'criteria_subworker_started',
39
+ ts: new Date().toISOString(),
40
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
41
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
42
+ criterionId: criterion.id,
43
+ criterionTitle: criterion.title,
44
+ });
45
+ const startMs = Date.now();
46
+ // Per-angle wall-clock guard: combine task-level abort with an
47
+ // angle-level abort that fires at ANGLE_HARD_CAP_MS. The soft-warning
48
+ // timer at ANGLE_SOFT_WARN_MS is observability-only.
49
+ const angleAbort = new AbortController();
50
+ const combinedAbort = new AbortController();
51
+ if (input.abortSignal) {
52
+ if (input.abortSignal.aborted)
53
+ combinedAbort.abort();
54
+ else
55
+ input.abortSignal.addEventListener('abort', () => combinedAbort.abort(), { once: true });
56
+ }
57
+ angleAbort.signal.addEventListener('abort', () => combinedAbort.abort(), { once: true });
58
+ let capHit = false;
59
+ const softTimer = setTimeout(() => {
60
+ input.bus?.emit({
61
+ event: 'criteria_subworker_soft_warning',
62
+ ts: new Date().toISOString(),
63
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
64
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
65
+ criterionId: criterion.id,
66
+ criterionTitle: criterion.title,
67
+ elapsedMs: ANGLE_SOFT_WARN_MS,
68
+ remainingMs: ANGLE_HARD_CAP_MS - ANGLE_SOFT_WARN_MS,
69
+ });
70
+ }, ANGLE_SOFT_WARN_MS);
71
+ const hardTimer = setTimeout(() => {
72
+ capHit = true;
73
+ input.bus?.emit({
74
+ event: 'criteria_subworker_hard_cap',
75
+ ts: new Date().toISOString(),
76
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
77
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
78
+ criterionId: criterion.id,
79
+ criterionTitle: criterion.title,
80
+ elapsedMs: ANGLE_HARD_CAP_MS,
81
+ });
82
+ angleAbort.abort();
83
+ }, ANGLE_HARD_CAP_MS);
84
+ try {
85
+ const result = await input.shell.run({
86
+ systemPrompt: input.cachedPrefix,
87
+ userMessage: input.buildSuffix(criterion),
88
+ toolDefinitions: toolDefs,
89
+ maxTurns: SAFETY_MAX_TURNS,
90
+ cwd: input.cwd,
91
+ abortSignal: combinedAbort.signal,
92
+ ...(input.deadlineMs !== undefined && { deadlineMs: input.deadlineMs }),
93
+ cacheControl: { type: 'ephemeral' },
94
+ ...(input.bus && { bus: input.bus }),
95
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
96
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
97
+ ...(input.tier !== undefined && { tier: input.tier }),
98
+ stageLabel: `Criterion ${criterion.id}`,
99
+ });
100
+ const text = result.finalAssistantText ?? '';
101
+ const errorCode = result.errorCode;
102
+ // Hard-cap hit: synthesize a [N/A] finding so the merge annotator
103
+ // drops it gracefully. Don't go through retry — the cap was deliberate.
104
+ if (capHit || errorCode === 'aborted') {
105
+ const synthetic = `## Finding 1: [N/A] Angle hit the ${Math.round(ANGLE_HARD_CAP_MS / 60000)}-minute per-angle wall-clock cap\n- Severity: low\n- Issue: This perspective was force-aborted to bound the route's overall wall-clock. Any partial findings collected before the cap have been discarded. The merge annotator drops this finding from the final report; it exists so you can see all angles were attempted.\n`;
106
+ input.bus?.emit({
107
+ event: 'criteria_subworker_completed',
108
+ ts: new Date().toISOString(),
109
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
110
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
111
+ criterionId: criterion.id,
112
+ status: 'cap_hit',
113
+ findingsCount: 0,
114
+ durationMs: Date.now() - startMs,
115
+ cachedReadTokens: result.usage?.cachedReadTokens ?? 0,
116
+ });
117
+ return {
118
+ ok: true,
119
+ capHit: true,
120
+ output: {
121
+ criterionId: criterion.id,
122
+ criterionTitle: criterion.title,
123
+ narrative: synthetic,
124
+ usage: {
125
+ inputTokens: result.usage?.inputTokens ?? 0,
126
+ outputTokens: result.usage?.outputTokens ?? 0,
127
+ cachedReadTokens: result.usage?.cachedReadTokens ?? 0,
128
+ cachedNonReadTokens: result.usage?.cachedNonReadTokens ?? 0,
129
+ },
130
+ turns: result.turns ?? 0,
131
+ toolCallCount: result.toolCalls?.length ?? 0,
132
+ durationMs: result.durationMs ?? Date.now() - startMs,
133
+ costUSD: result.costUSD ?? null,
134
+ },
135
+ };
136
+ }
137
+ const isFailure = (errorCode !== undefined && TRANSPORT_FAILURE_CODES.has(errorCode)) ||
138
+ (text.trim().length === 0 && result.workerStatus !== 'done');
139
+ if (isFailure) {
140
+ input.bus?.emit({
141
+ event: 'criteria_subworker_completed',
142
+ ts: new Date().toISOString(),
143
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
144
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
145
+ criterionId: criterion.id,
146
+ status: 'failed',
147
+ durationMs: Date.now() - startMs,
148
+ cachedReadTokens: result.usage?.cachedReadTokens ?? 0,
149
+ });
150
+ return {
151
+ ok: false,
152
+ failure: {
153
+ id: criterion.id,
154
+ title: criterion.title,
155
+ reason: classifyFailureReason(errorCode),
156
+ lastError: errorCode ?? 'empty output',
157
+ },
158
+ };
159
+ }
160
+ const findingsCount = (text.match(/^## Finding \d+:/gm) ?? []).length;
161
+ input.bus?.emit({
162
+ event: 'criteria_subworker_completed',
163
+ ts: new Date().toISOString(),
164
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
165
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
166
+ criterionId: criterion.id,
167
+ status: 'ok',
168
+ findingsCount,
169
+ durationMs: Date.now() - startMs,
170
+ cachedReadTokens: result.usage?.cachedReadTokens ?? 0,
171
+ });
172
+ return {
173
+ ok: true,
174
+ output: {
175
+ criterionId: criterion.id,
176
+ criterionTitle: criterion.title,
177
+ narrative: text,
178
+ usage: {
179
+ inputTokens: result.usage?.inputTokens ?? 0,
180
+ outputTokens: result.usage?.outputTokens ?? 0,
181
+ cachedReadTokens: result.usage?.cachedReadTokens ?? 0,
182
+ cachedNonReadTokens: result.usage?.cachedNonReadTokens ?? 0,
183
+ },
184
+ turns: result.turns ?? 0,
185
+ toolCallCount: result.toolCalls?.length ?? 0,
186
+ durationMs: result.durationMs ?? Date.now() - startMs,
187
+ costUSD: result.costUSD ?? null,
188
+ },
189
+ };
190
+ }
191
+ catch (err) {
192
+ const message = err instanceof Error ? err.message : String(err);
193
+ return { ok: false, failure: { id: criterion.id, title: criterion.title, reason: 'other', lastError: message } };
194
+ }
195
+ finally {
196
+ clearTimeout(softTimer);
197
+ clearTimeout(hardTimer);
198
+ }
199
+ }
200
+ export async function dispatchParallelCriteria(input) {
201
+ // makeToolDefinitions constructs a CWDValidator that synchronously
202
+ // realpath()s the cwd; if cwd doesn't exist (test fixtures, future
203
+ // ephemeral cwds) we fall back to an empty tool surface — the
204
+ // sub-workers still have the inlined doc/files content in the cached
205
+ // prefix and can answer without reading more files.
206
+ let toolDefs;
207
+ if (input.toolDefinitions) {
208
+ toolDefs = input.toolDefinitions;
209
+ }
210
+ else {
211
+ try {
212
+ toolDefs = filterToReadOnly(makeToolDefinitions({ cwd: input.cwd }));
213
+ }
214
+ catch (err) {
215
+ input.bus?.emit({
216
+ event: 'criteria_fanout_tools_unavailable',
217
+ ts: new Date().toISOString(),
218
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
219
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
220
+ reason: err instanceof Error ? err.message : String(err),
221
+ });
222
+ toolDefs = [];
223
+ }
224
+ }
225
+ input.bus?.emit({
226
+ event: 'criteria_fanout_warm_start',
227
+ ts: new Date().toISOString(),
228
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
229
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
230
+ parallelism: input.criteria.length,
231
+ ...(input.route !== undefined && { route: input.route }),
232
+ });
233
+ const warm = await input.shell.prime(input.cachedPrefix, {
234
+ cwd: input.cwd,
235
+ cacheControl: { type: 'ephemeral' },
236
+ ...(input.abortSignal && { abortSignal: input.abortSignal }),
237
+ ...(input.deadlineMs !== undefined && { deadlineMs: input.deadlineMs }),
238
+ ...(input.bus && { bus: input.bus }),
239
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
240
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
241
+ ...(input.tier !== undefined && { tier: input.tier }),
242
+ stageLabel: 'Cache warmer',
243
+ });
244
+ const firstResults = await Promise.allSettled(input.criteria.map(c => runOneSubWorker(input, c, toolDefs)));
245
+ const succeeded = [];
246
+ const failedIndices = [];
247
+ firstResults.forEach((r, i) => {
248
+ if (r.status === 'fulfilled' && r.value.ok)
249
+ succeeded.push(r.value.output);
250
+ else
251
+ failedIndices.push(i);
252
+ });
253
+ const finalFailures = [];
254
+ if (failedIndices.length > 0) {
255
+ input.bus?.emit({
256
+ event: 'criteria_subworker_retry',
257
+ ts: new Date().toISOString(),
258
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
259
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
260
+ retriedCount: failedIndices.length,
261
+ });
262
+ const retryResults = await Promise.allSettled(failedIndices.map(i => runOneSubWorker(input, input.criteria[i], toolDefs)));
263
+ retryResults.forEach((r, k) => {
264
+ if (r.status === 'fulfilled') {
265
+ const value = r.value;
266
+ if (value.ok) {
267
+ succeeded.push(value.output);
268
+ }
269
+ else {
270
+ finalFailures.push(value.failure);
271
+ }
272
+ }
273
+ else {
274
+ const c = input.criteria[failedIndices[k]];
275
+ finalFailures.push({ id: c.id, title: c.title, reason: 'other', lastError: String(r.reason) });
276
+ }
277
+ });
278
+ }
279
+ succeeded.sort((a, b) => Number(a.criterionId) - Number(b.criterionId));
280
+ finalFailures.sort((a, b) => Number(a.id) - Number(b.id));
281
+ const totalInputTokens = succeeded.reduce((a, s) => a + s.usage.inputTokens, 0);
282
+ const totalCachedReadTokens = succeeded.reduce((a, s) => a + s.usage.cachedReadTokens, 0);
283
+ const cacheHitConfirmed = totalCachedReadTokens > 0;
284
+ // Cache hit ratio = cached_read / (cached_read + fresh_input). 1.0 means
285
+ // every sub-worker served the prefix from cache; 0.0 means the warmer
286
+ // didn't take effect.
287
+ const cacheHitRatio = (totalCachedReadTokens + totalInputTokens) > 0
288
+ ? totalCachedReadTokens / (totalCachedReadTokens + totalInputTokens)
289
+ : 0;
290
+ input.bus?.emit({
291
+ event: 'criteria_fanout_summary',
292
+ ts: new Date().toISOString(),
293
+ ...(input.batchId !== undefined && { batchId: input.batchId }),
294
+ ...(input.taskIndex !== undefined && { taskIndex: input.taskIndex }),
295
+ ...(input.route !== undefined && { route: input.route }),
296
+ parallelism: input.criteria.length,
297
+ succeededCount: succeeded.length,
298
+ failedCount: finalFailures.length,
299
+ coveredIds: succeeded.map(s => s.criterionId),
300
+ failedIds: finalFailures.map(f => f.id),
301
+ warmCacheControlSent: warm.cacheControlSent,
302
+ warmCapHit: warm.capHit,
303
+ cacheHitConfirmed,
304
+ cacheHitRatio: Math.round(cacheHitRatio * 1000) / 1000,
305
+ warmDurationMs: warm.durationMs,
306
+ totalInputTokens,
307
+ totalCachedReadTokens,
308
+ totalOutputTokens: succeeded.reduce((a, s) => a + s.usage.outputTokens, 0),
309
+ totalCostUSD: succeeded.reduce((a, s) => a + (s.costUSD ?? 0), 0),
310
+ longestSubWorkerMs: succeeded.reduce((a, s) => Math.max(a, s.durationMs), 0),
311
+ });
312
+ const totalUsage = succeeded.reduce((acc, s) => ({
313
+ inputTokens: acc.inputTokens + s.usage.inputTokens,
314
+ outputTokens: acc.outputTokens + s.usage.outputTokens,
315
+ cachedReadTokens: acc.cachedReadTokens + s.usage.cachedReadTokens,
316
+ cachedNonReadTokens: acc.cachedNonReadTokens + s.usage.cachedNonReadTokens,
317
+ }), { inputTokens: 0, outputTokens: 0, cachedReadTokens: 0, cachedNonReadTokens: 0 });
318
+ return {
319
+ workerOutputs: succeeded,
320
+ partialCriteriaCovered: succeeded.map(s => s.criterionId),
321
+ partialCriteriaFailed: finalFailures,
322
+ warmCacheControlSent: warm.cacheControlSent,
323
+ cacheHitConfirmed,
324
+ warmDurationMs: warm.durationMs,
325
+ totalUsage,
326
+ };
327
+ }
328
+ //# sourceMappingURL=parallel-criteria-dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-criteria-dispatcher.js","sourceRoot":"","sources":["../../src/lifecycle/parallel-criteria-dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { CriterionEntry } from '../tools/criteria-types.js';
2
+ import { type CachedPrefixTarget } from '../tools/parallel-criteria-prompt.js';
3
+ export type ReadOnlyRouteName = 'audit' | 'review' | 'verify' | 'debug' | 'investigate';
4
+ export interface ReadOnlyRouteSpec {
5
+ criteria: readonly CriterionEntry[];
6
+ buildPrefix: (target: CachedPrefixTarget) => string;
7
+ buildSuffix: (criterion: CriterionEntry) => string;
8
+ }
9
+ /**
10
+ * Per-route configuration consumed by the parallel-criteria dispatcher.
11
+ * Each entry returns the full builders so the orchestrator can fan out
12
+ * without route-specific branching code.
13
+ */
14
+ export declare const READ_ONLY_ROUTES: Record<ReadOnlyRouteName, ReadOnlyRouteSpec>;
15
+ export declare function isReadOnlyRoute(route: string): route is ReadOnlyRouteName;
16
+ //# sourceMappingURL=parallel-criteria-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-criteria-routes.d.ts","sourceRoot":"","sources":["../../src/lifecycle/parallel-criteria-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAGL,KAAK,kBAAkB,EAGxB,MAAM,sCAAsC,CAAC;AAiB9C,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AA4HxF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,WAAW,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,MAAM,CAAC;IACpD,WAAW,EAAE,CAAC,SAAS,EAAE,cAAc,KAAK,MAAM,CAAC;CACpD;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAczB,CAAC;AAElD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB,CAEzE"}
@@ -0,0 +1,147 @@
1
+ import { buildReadOnlyCachedPrefix, buildReadOnlyCriterionSuffix, } from '../tools/parallel-criteria-prompt.js';
2
+ import { AUDIT_PURPOSE_ORIENTATION, EVIDENCE_RULE_AUDIT, SCOPE_RULE_AUDIT, ANNOTATOR_AWARENESS_AUDIT, AUDIT_CRITERIA, } from '../tools/audit/implementer-criteria.js';
3
+ import { REVIEW_PURPOSE_ORIENTATION, EVIDENCE_RULE_REVIEW, SCOPE_RULE_REVIEW, ANNOTATOR_AWARENESS_REVIEW, REVIEW_CRITERIA, } from '../tools/review/implementer-criteria.js';
4
+ import { VERIFY_PURPOSE_ORIENTATION, EVIDENCE_RULE_VERIFY, SCOPE_RULE_VERIFY, ANNOTATOR_AWARENESS_VERIFY, VERIFY_CRITERIA, } from '../tools/verify/implementer-criteria.js';
5
+ import { DEBUG_PURPOSE_ORIENTATION, EVIDENCE_RULE_DEBUG, SCOPE_RULE_DEBUG, ANNOTATOR_AWARENESS_DEBUG, DEBUG_CRITERIA, } from '../tools/debug/implementer-criteria.js';
6
+ import { INVESTIGATE_PURPOSE_ORIENTATION, EVIDENCE_RULE_INVESTIGATE, SCOPE_RULE_INVESTIGATE, ANNOTATOR_AWARENESS_INVESTIGATE, INVESTIGATE_CRITERIA, } from '../tools/investigate/implementer-criteria.js';
7
+ /** Standard finding-format spec — uniform `## Finding N:` shape across
8
+ * all five read-only routes so the downstream parser/annotator only
9
+ * reads one format. The label "Issue" is intentionally route-neutral
10
+ * (interpreted as issue / candidate-answer / verdict / root-cause-
11
+ * hypothesis depending on the route's semantics block). */
12
+ const FINDING_FORMAT_SHARED = [
13
+ 'Per-finding output format (use exactly this shape — `## Finding N:` blocks):',
14
+ '',
15
+ '## Finding 1: <one-line title>',
16
+ '- Severity: critical | high | medium | low',
17
+ '- Location: file:line (when applicable)',
18
+ '- Issue: one-paragraph explanation (the issue OR the candidate-answer OR the verification verdict OR the root-cause hypothesis, per this route\'s "what a finding means")',
19
+ '- Suggestion: one-line follow-up (a fix / how to verify / where to look next)',
20
+ '',
21
+ '## Finding 2: ... (one block per finding)',
22
+ '',
23
+ 'Number findings sequentially starting at 1. Severity / Location / Issue / Suggestion bullets are on their own lines with the labels exactly as shown.',
24
+ ].join('\n');
25
+ /** Per-route semantics. Findings shape and severity tiers are uniform;
26
+ * only the *meaning* of each tier and the per-sub-worker goal differ. */
27
+ const ROUTE_SEMANTICS = {
28
+ audit: {
29
+ goalLine: 'Find ALL issues of THIS specific kind in the artifact above.',
30
+ emptyOutcomeLine: 'If none exist, respond with the literal text "No findings for this criterion." — that is a fully valid outcome. Do NOT pad with low-signal observations to avoid returning empty.',
31
+ findingMeaningParagraph: 'A finding is an ISSUE in the artifact (a contradiction, missing recommendation, fix that violates a constraint, drift, structural inconsistency, etc.). Severity reflects how much the issue blocks the artifact\'s downstream use.',
32
+ severityMeanings: {
33
+ critical: 'a recommendation or claim that, if implemented as written, would fail or cause harm because the artifact is internally incoherent — e.g. a fix that depends on something the doc forbids.',
34
+ high: 'a substantive missing recommendation, an evidence chain that does not support a load-bearing conclusion, OR a fix that violates a stated principle/constraint of the doc.',
35
+ medium: 'argument-soundness gap, fix-actionability gap, drift between sections, structural inconsistency between similar items, scope-creep risk that needs a guardrail.',
36
+ low: 'stylistic / labeling / formatting issue; missing metadata; minor cross-reference fix.',
37
+ },
38
+ mustEmitAtLeastOne: false,
39
+ },
40
+ review: {
41
+ goalLine: 'Find ALL issues of THIS specific kind in the diff / source above.',
42
+ emptyOutcomeLine: 'If none exist, respond with the literal text "No findings for this criterion." — that is a fully valid outcome. Do NOT pad to avoid returning empty.',
43
+ findingMeaningParagraph: 'A finding is an ISSUE introduced or worsened by the change under review (correctness bug, missing test, race, security regression, contract break, etc.). Severity reflects how much the issue blocks merge / ships a regression.',
44
+ severityMeanings: {
45
+ critical: 'security regression / data corruption / build-breaking change — must NOT merge.',
46
+ high: 'real correctness bug, broken tests, race, missing edge case that ships a regression — blocks release.',
47
+ medium: 'contract violation, maintainability issue, doc gap, deprecated API, performance regression on a non-hot path — fix soon, not blocking.',
48
+ low: 'style, naming, comment nit, dead code — nice-to-fix.',
49
+ },
50
+ mustEmitAtLeastOne: false,
51
+ },
52
+ verify: {
53
+ goalLine: 'Apply THIS criterion to the work product against the user\'s checklist. Each finding is a verification verdict for one checklist item: PASS / FAIL / cannot-verify, with the evidence quoted.',
54
+ emptyOutcomeLine: 'If THIS criterion does not apply to any checklist item in the artifact, respond with "No findings for this criterion." — that is a valid outcome. Otherwise, ALWAYS emit a finding per applicable item (even PASS results — the user wants to see what passed).',
55
+ findingMeaningParagraph: 'A finding is a VERIFICATION VERDICT for one checklist item, evaluated through this criterion\'s lens. Title = checklist-item label + verdict (e.g. "Item 3: FAIL — assumed-pass on untested"). Severity reflects how decisive / load-bearing the verdict is.',
56
+ severityMeanings: {
57
+ critical: 'criterion definitively FAILED with concrete contradicting evidence — the user CANNOT trust the work as complete; e.g. claim-without-evidence on a load-bearing checklist item.',
58
+ high: 'important criterion failed but with some ambiguity in the evidence; OR a strong PASS on a load-bearing item with rock-solid evidence.',
59
+ medium: 'partial coverage — some sub-criteria pass, others ambiguous; OR a clear PASS on a non-load-bearing item.',
60
+ low: 'minor stylistic gap in the verification narrative; no impact on the verdict.',
61
+ },
62
+ mustEmitAtLeastOne: true,
63
+ },
64
+ debug: {
65
+ goalLine: 'Apply THIS failure mode as the lens. Each finding is a root-cause hypothesis (or contributing factor), framed against this lens; severity = strength of the evidence chain.',
66
+ emptyOutcomeLine: 'If THIS lens reveals nothing in the failure under investigation, respond with "No findings for this criterion." — valid outcome.',
67
+ findingMeaningParagraph: 'A finding is a ROOT-CAUSE HYPOTHESIS (or contributing factor) for the failure under investigation, viewed through this criterion\'s lens. Title = the proposed cause. Severity reflects how strong the trace from symptom to cause is.',
68
+ severityMeanings: {
69
+ critical: 'root cause definitively identified with reproducible evidence + a concrete fix is implied — the maintainer can act now.',
70
+ high: 'strong root-cause hypothesis with traced upstream evidence (file:line citations along the call/data path), fix path identified.',
71
+ medium: 'likely candidate cause, needs verification — the trace has 1-2 inferred steps, fix scope unclear.',
72
+ low: 'possible contributing factor, low confidence — speculation worth noting but not the primary lead.',
73
+ },
74
+ mustEmitAtLeastOne: true,
75
+ },
76
+ investigate: {
77
+ goalLine: 'Answer the user\'s question above. Each finding is a CANDIDATE ANSWER (or sub-answer / partial answer) to the question, presented through this criterion\'s lens. Pay extra care to AVOID this criterion\'s failure mode (it is a known way investigators go wrong on questions like this).',
78
+ emptyOutcomeLine: 'If you can produce no candidate answer at all under this lens, respond with "No findings for this criterion." — valid but rare outcome. In most cases you can produce at least one low-confidence candidate answer.',
79
+ findingMeaningParagraph: 'A finding is a CANDIDATE ANSWER to the user\'s question (or a sub-answer that contributes to the full answer). Title = the answer in one line. Issue = the answer with reasoning + citations. Severity = your confidence in this answer.',
80
+ severityMeanings: {
81
+ critical: 'THE answer — high-confidence, multiple grounded file:line citations, evidence chain has no inferred steps. The user can act on this without re-verification.',
82
+ high: 'strong answer — fully grounded with file:line citations, evidence chain has at most one inferred step, single-source. The user should sanity-check the inferred step.',
83
+ medium: 'likely answer / partial answer — inference from evidence, some gaps in chain. Mark "verify by reading <file>" so the user knows where to confirm.',
84
+ low: 'possible answer / candidate — weak evidence, presented as an alternative for the user to consider against other sub-workers\' candidates.',
85
+ },
86
+ mustEmitAtLeastOne: true,
87
+ },
88
+ };
89
+ const ROUTE_BLOCKS = {
90
+ audit: {
91
+ orientation: AUDIT_PURPOSE_ORIENTATION,
92
+ evidenceRule: EVIDENCE_RULE_AUDIT,
93
+ scopeRule: SCOPE_RULE_AUDIT,
94
+ annotatorAwareness: ANNOTATOR_AWARENESS_AUDIT,
95
+ criteria: AUDIT_CRITERIA,
96
+ },
97
+ review: {
98
+ orientation: REVIEW_PURPOSE_ORIENTATION,
99
+ evidenceRule: EVIDENCE_RULE_REVIEW,
100
+ scopeRule: SCOPE_RULE_REVIEW,
101
+ annotatorAwareness: ANNOTATOR_AWARENESS_REVIEW,
102
+ criteria: REVIEW_CRITERIA,
103
+ },
104
+ verify: {
105
+ orientation: VERIFY_PURPOSE_ORIENTATION,
106
+ evidenceRule: EVIDENCE_RULE_VERIFY,
107
+ scopeRule: SCOPE_RULE_VERIFY,
108
+ annotatorAwareness: ANNOTATOR_AWARENESS_VERIFY,
109
+ criteria: VERIFY_CRITERIA,
110
+ },
111
+ debug: {
112
+ orientation: DEBUG_PURPOSE_ORIENTATION,
113
+ evidenceRule: EVIDENCE_RULE_DEBUG,
114
+ scopeRule: SCOPE_RULE_DEBUG,
115
+ annotatorAwareness: ANNOTATOR_AWARENESS_DEBUG,
116
+ criteria: DEBUG_CRITERIA,
117
+ },
118
+ investigate: {
119
+ orientation: INVESTIGATE_PURPOSE_ORIENTATION,
120
+ evidenceRule: EVIDENCE_RULE_INVESTIGATE,
121
+ scopeRule: SCOPE_RULE_INVESTIGATE,
122
+ annotatorAwareness: ANNOTATOR_AWARENESS_INVESTIGATE,
123
+ criteria: INVESTIGATE_CRITERIA,
124
+ },
125
+ };
126
+ /**
127
+ * Per-route configuration consumed by the parallel-criteria dispatcher.
128
+ * Each entry returns the full builders so the orchestrator can fan out
129
+ * without route-specific branching code.
130
+ */
131
+ export const READ_ONLY_ROUTES = Object.fromEntries(['audit', 'review', 'verify', 'debug', 'investigate'].map((route) => {
132
+ const semantics = ROUTE_SEMANTICS[route];
133
+ const blocks = {
134
+ ...ROUTE_BLOCKS[route],
135
+ findingFormat: FINDING_FORMAT_SHARED,
136
+ semantics,
137
+ };
138
+ return [route, {
139
+ criteria: ROUTE_BLOCKS[route].criteria,
140
+ buildPrefix: (target) => buildReadOnlyCachedPrefix(blocks, target),
141
+ buildSuffix: (criterion) => buildReadOnlyCriterionSuffix(semantics, criterion),
142
+ }];
143
+ }));
144
+ export function isReadOnlyRoute(route) {
145
+ return route in READ_ONLY_ROUTES;
146
+ }
147
+ //# sourceMappingURL=parallel-criteria-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel-criteria-routes.js","sourceRoot":"","sources":["../../src/lifecycle/parallel-criteria-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../../src/lifecycle/task-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAShE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAcpD;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,KACjB,IAAI,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE;QACT,mBAAmB,EAAE,CAAC,GAAG,EAAE;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,QAAQ,CAAC;YACnB,SAAS,EAAE,SAAS,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;YACzB,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;YAC9D,oBAAoB,CAAC,EAAE,OAAO,CAAC;SAChC,KAAK,IAAI,CAAC;KACZ,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,0BAA0B,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACtF,cAAc,CAAC,EAAE,OAAO,8BAA8B,EAAE,cAAc,CAAC;IACvE,eAAe,CAAC,EAAE,OAAO,+BAA+B,EAAE,eAAe,CAAC;CAC3E;AAED,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,SAAS,EAAE,CAAC,CAuEtB;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;2EACuE;IACvE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB;;6DAEyD;IACzD,iBAAiB,CAAC,EAAE,OAAO,iCAAiC,EAAE,iBAAiB,CAAC;IAChF,0BAA0B,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACtF,cAAc,CAAC,EAAE,OAAO,8BAA8B,EAAE,cAAc,CAAC;IACvE,eAAe,CAAC,EAAE,OAAO,+BAA+B,EAAE,eAAe,CAAC;CAC3E;AAkED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,iBAAiB,EACxB,UAAU,GAAE,mBAA+C,GAC1D,OAAO,CAAC,SAAS,CAAC,CA0IpB"}
1
+ {"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../../src/lifecycle/task-runner.ts"],"names":[],"mappings":"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"}