@qwen-code/arena-agent 0.0.9-dev.8 → 0.0.10-dev.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 (87) hide show
  1. package/.env.example +54 -19
  2. package/README.md +218 -45
  3. package/dist/agent.d.ts +4 -2
  4. package/dist/agent.js +167 -21
  5. package/dist/agent.js.map +1 -1
  6. package/dist/anthropic.d.ts +1 -0
  7. package/dist/anthropic.js +90 -23
  8. package/dist/anthropic.js.map +1 -1
  9. package/dist/attachments.d.ts +1 -1
  10. package/dist/attachments.js +16 -4
  11. package/dist/attachments.js.map +1 -1
  12. package/dist/brave-search.d.ts +10 -0
  13. package/dist/brave-search.js +238 -0
  14. package/dist/brave-search.js.map +1 -0
  15. package/dist/canonical-data.js +2 -2
  16. package/dist/canonical-data.js.map +1 -1
  17. package/dist/cli.js +64 -18
  18. package/dist/cli.js.map +1 -1
  19. package/dist/code-tools.d.ts +0 -5
  20. package/dist/code-tools.js +29 -353
  21. package/dist/code-tools.js.map +1 -1
  22. package/dist/compaction.js +8 -2
  23. package/dist/compaction.js.map +1 -1
  24. package/dist/config.d.ts +30 -0
  25. package/dist/config.js +57 -3
  26. package/dist/config.js.map +1 -1
  27. package/dist/fetch-page.d.ts +1 -0
  28. package/dist/fetch-page.js +1 -1
  29. package/dist/fetch-page.js.map +1 -1
  30. package/dist/history.d.ts +3 -2
  31. package/dist/history.js +7 -2
  32. package/dist/history.js.map +1 -1
  33. package/dist/image-input-fallback.d.ts +9 -0
  34. package/dist/image-input-fallback.js +47 -0
  35. package/dist/image-input-fallback.js.map +1 -0
  36. package/dist/image.d.ts +16 -0
  37. package/dist/image.js +380 -0
  38. package/dist/image.js.map +1 -0
  39. package/dist/mock.d.ts +1 -0
  40. package/dist/mock.js +38 -0
  41. package/dist/mock.js.map +1 -1
  42. package/dist/model-capabilities.js +12 -2
  43. package/dist/model-capabilities.js.map +1 -1
  44. package/dist/model-diagnostics.js +16 -5
  45. package/dist/model-diagnostics.js.map +1 -1
  46. package/dist/model-router-media.d.ts +26 -0
  47. package/dist/model-router-media.js +274 -0
  48. package/dist/model-router-media.js.map +1 -0
  49. package/dist/openai-responses.d.ts +28 -0
  50. package/dist/openai-responses.js +473 -0
  51. package/dist/openai-responses.js.map +1 -0
  52. package/dist/process-manager.d.ts +38 -0
  53. package/dist/process-manager.js +486 -0
  54. package/dist/process-manager.js.map +1 -0
  55. package/dist/prompts.js +3 -1
  56. package/dist/prompts.js.map +1 -1
  57. package/dist/provider.d.ts +7 -0
  58. package/dist/provider.js +291 -27
  59. package/dist/provider.js.map +1 -1
  60. package/dist/routify-web-fetch.d.ts +17 -0
  61. package/dist/routify-web-fetch.js +188 -0
  62. package/dist/routify-web-fetch.js.map +1 -0
  63. package/dist/sdk.d.ts +9 -2
  64. package/dist/sdk.js +5 -2
  65. package/dist/sdk.js.map +1 -1
  66. package/dist/server.d.ts +3 -0
  67. package/dist/server.js +112 -21
  68. package/dist/server.js.map +1 -1
  69. package/dist/spec.js +15 -1
  70. package/dist/spec.js.map +1 -1
  71. package/dist/tools.d.ts +2 -1
  72. package/dist/tools.js +250 -340
  73. package/dist/tools.js.map +1 -1
  74. package/dist/tui.d.ts +3 -0
  75. package/dist/tui.js +18 -11
  76. package/dist/tui.js.map +1 -1
  77. package/dist/types.d.ts +17 -6
  78. package/dist/voice-registry.d.ts +30 -0
  79. package/dist/voice-registry.js +82 -0
  80. package/dist/voice-registry.js.map +1 -0
  81. package/dist/web/app.js +67 -6
  82. package/dist/web/app.js.map +1 -1
  83. package/docs/BINARY_DISTRIBUTION.md +25 -18
  84. package/docs/MODES_AND_RELEASES.md +8 -4
  85. package/docs/SDK.md +28 -4
  86. package/package.json +21 -3
  87. package/web/styles.css +28 -7
@@ -0,0 +1,473 @@
1
+ function record(value) {
2
+ return value !== null && typeof value === "object" && !Array.isArray(value)
3
+ ? value
4
+ : {};
5
+ }
6
+ function stringValue(value) {
7
+ return typeof value === "string" ? value : "";
8
+ }
9
+ function numericValue(value) {
10
+ if (typeof value === "number" && Number.isFinite(value))
11
+ return value;
12
+ if (typeof value !== "string" || !value.trim())
13
+ return undefined;
14
+ const parsed = Number(value);
15
+ return Number.isFinite(parsed) ? parsed : undefined;
16
+ }
17
+ function responsesUserContent(content) {
18
+ if (!Array.isArray(content))
19
+ return content;
20
+ return content.map((part) => {
21
+ const value = record(part);
22
+ if (typeof value.image === "string") {
23
+ return {
24
+ type: "input_image",
25
+ image_url: value.image,
26
+ detail: "auto",
27
+ };
28
+ }
29
+ if (value.type === "image_url") {
30
+ const imageUrl = record(value.image_url);
31
+ return {
32
+ type: "input_image",
33
+ image_url: stringValue(imageUrl.url),
34
+ detail: stringValue(imageUrl.detail) || "auto",
35
+ };
36
+ }
37
+ return { type: "input_text", text: stringValue(value.text) };
38
+ });
39
+ }
40
+ /** Convert Arena's durable history into Responses API input items. */
41
+ export function responsesInput(messages) {
42
+ const input = [];
43
+ for (const message of messages) {
44
+ if (message.role === "system" || message.role === "user") {
45
+ input.push({
46
+ role: message.role,
47
+ content: responsesUserContent(message.content),
48
+ });
49
+ continue;
50
+ }
51
+ if (message.role === "tool") {
52
+ input.push({
53
+ type: "function_call_output",
54
+ call_id: message.tool_call_id,
55
+ output: message.content,
56
+ });
57
+ continue;
58
+ }
59
+ if (message.openai_response_items?.length) {
60
+ input.push(...structuredClone(message.openai_response_items));
61
+ continue;
62
+ }
63
+ // Compatibility fallback for histories created before Arena persisted
64
+ // native Responses output items.
65
+ if (message.content) {
66
+ input.push({ role: "assistant", content: message.content });
67
+ }
68
+ for (const call of message.tool_calls || []) {
69
+ input.push({
70
+ type: "function_call",
71
+ call_id: call.id,
72
+ name: call.function.name,
73
+ arguments: call.function.arguments,
74
+ });
75
+ }
76
+ }
77
+ return input;
78
+ }
79
+ function responsesTools(tools) {
80
+ return tools.map((tool) => ({
81
+ type: "function",
82
+ name: tool.function.name,
83
+ ...(tool.function.description
84
+ ? { description: tool.function.description }
85
+ : {}),
86
+ parameters: tool.function.parameters,
87
+ }));
88
+ }
89
+ /** Build a native OpenAI Responses request without Chat Completions fields. */
90
+ export function responsesRequestBody(request, model) {
91
+ const allTurnsReasoning = model.toLowerCase().includes("gpt-5.6");
92
+ const reasoning = request.reasoningEffort || allTurnsReasoning
93
+ ? {
94
+ ...(request.reasoningEffort
95
+ ? { effort: request.reasoningEffort }
96
+ : {}),
97
+ ...(allTurnsReasoning ? { context: "all_turns" } : {}),
98
+ }
99
+ : undefined;
100
+ return {
101
+ model,
102
+ input: responsesInput(request.messages),
103
+ ...(request.tools.length
104
+ ? { tools: responsesTools(request.tools), tool_choice: request.toolChoice }
105
+ : {}),
106
+ ...(request.maxTokens !== undefined
107
+ ? { max_output_tokens: request.maxTokens }
108
+ : {}),
109
+ // Do not inherit Arena's generic temperature on the native Responses path:
110
+ // reasoning models reject sampling controls. Non-reasoning models can opt
111
+ // in explicitly through ARENA_EXTRA_BODY, which is merged by the client.
112
+ ...(reasoning ? { reasoning } : {}),
113
+ stream: true,
114
+ // Keep the transport stateless. Completed output items, including opaque
115
+ // encrypted reasoning, are persisted by Arena and replayed in input.
116
+ store: false,
117
+ include: ["reasoning.encrypted_content"],
118
+ };
119
+ }
120
+ function responsesUsage(value) {
121
+ const usage = record(value);
122
+ if (!Object.keys(usage).length)
123
+ return undefined;
124
+ const inputTokens = usage.input_tokens;
125
+ const outputTokens = usage.output_tokens;
126
+ const totalTokens = usage.total_tokens;
127
+ return {
128
+ ...usage,
129
+ ...(typeof inputTokens === "number" ? { prompt_tokens: inputTokens } : {}),
130
+ ...(typeof outputTokens === "number"
131
+ ? { completion_tokens: outputTokens }
132
+ : {}),
133
+ ...(typeof totalTokens === "number" ? { total_tokens: totalTokens } : {}),
134
+ };
135
+ }
136
+ export const RESPONSES_CAPACITY_ERROR_CODE = "ARENA_UPSTREAM_CAPACITY";
137
+ export const RESPONSES_TRANSIENT_ERROR_CODE = "ARENA_UPSTREAM_TRANSIENT";
138
+ const transientResponsesErrorIdentifiers = new Set([
139
+ "overloaded_error",
140
+ "rate_limit_exceeded",
141
+ "request_timeout",
142
+ "server_error",
143
+ "service_unavailable",
144
+ "temporarily_unavailable",
145
+ "timeout",
146
+ ]);
147
+ function isCapacityErrorMessage(message) {
148
+ const normalized = message.toLowerCase();
149
+ return (normalized.includes("experiencing high demand") ||
150
+ normalized.includes("maximum usage size allowed during peak load") ||
151
+ normalized.includes("provisioned throughput"));
152
+ }
153
+ function isTransientResponsesError(upstreamCode, upstreamType, status) {
154
+ if (status === 408 ||
155
+ status === 409 ||
156
+ status === 429 ||
157
+ (status !== undefined && status >= 500 && status <= 599)) {
158
+ return true;
159
+ }
160
+ return [upstreamCode, upstreamType].some((value) => value !== undefined &&
161
+ transientResponsesErrorIdentifiers.has(value.toLowerCase()));
162
+ }
163
+ /** Structured failure delivered inside an otherwise-successful Responses SSE request. */
164
+ export class OpenAIResponsesStreamError extends Error {
165
+ eventType;
166
+ upstreamCode;
167
+ upstreamType;
168
+ status;
169
+ code;
170
+ constructor(options) {
171
+ super(options.message);
172
+ this.name = "OpenAIResponsesStreamError";
173
+ this.eventType = options.eventType;
174
+ this.upstreamCode = options.upstreamCode;
175
+ this.upstreamType = options.upstreamType;
176
+ this.status = options.status;
177
+ if (isCapacityErrorMessage(options.message)) {
178
+ this.code = RESPONSES_CAPACITY_ERROR_CODE;
179
+ }
180
+ else if (isTransientResponsesError(options.upstreamCode, options.upstreamType, options.status)) {
181
+ this.code = RESPONSES_TRANSIENT_ERROR_CODE;
182
+ }
183
+ else {
184
+ this.code = options.upstreamCode;
185
+ }
186
+ }
187
+ }
188
+ function responsesError(event) {
189
+ const error = record(event.error);
190
+ const response = record(event.response);
191
+ const responseError = record(response.error);
192
+ const message = stringValue(error.message) ||
193
+ stringValue(responseError.message) ||
194
+ stringValue(event.message) ||
195
+ `OpenAI Responses stream failed (${stringValue(event.type) || "unknown event"})`;
196
+ return new OpenAIResponsesStreamError({
197
+ message,
198
+ eventType: stringValue(event.type) || "unknown",
199
+ upstreamCode: stringValue(error.code) ||
200
+ stringValue(responseError.code) ||
201
+ stringValue(event.code) ||
202
+ undefined,
203
+ upstreamType: stringValue(error.type) ||
204
+ stringValue(responseError.type) ||
205
+ undefined,
206
+ status: numericValue(error.status) ??
207
+ numericValue(responseError.status) ??
208
+ numericValue(response.status) ??
209
+ numericValue(event.status),
210
+ });
211
+ }
212
+ function toolIndex(event, fallback) {
213
+ return typeof event.output_index === "number" ? event.output_index : fallback;
214
+ }
215
+ function toolDelta(state, values) {
216
+ return {
217
+ choices: [
218
+ {
219
+ delta: {
220
+ tool_calls: [
221
+ {
222
+ index: state.index,
223
+ ...(values.id ? { id: values.id, type: "function" } : {}),
224
+ function: {
225
+ ...(values.name ? { name: values.name } : {}),
226
+ ...(values.arguments !== undefined
227
+ ? { arguments: values.arguments }
228
+ : {}),
229
+ },
230
+ },
231
+ ],
232
+ },
233
+ },
234
+ ],
235
+ };
236
+ }
237
+ /** Translate native Responses SSE events into Arena's provider-neutral chunks. */
238
+ export async function* responsesChunks(stream) {
239
+ const reader = stream.getReader();
240
+ const decoder = new TextDecoder();
241
+ const tools = new Map();
242
+ const completedItemIndexes = new Set();
243
+ let buffer = "";
244
+ const captureOutputItem = function* (index, item, replace = false) {
245
+ if (!Object.keys(item).length ||
246
+ (!replace && completedItemIndexes.has(index))) {
247
+ return;
248
+ }
249
+ completedItemIndexes.add(index);
250
+ yield {
251
+ openai_response_items: [{ index, item: structuredClone(item) }],
252
+ };
253
+ };
254
+ const processEvent = function* (event) {
255
+ const type = stringValue(event.type);
256
+ const response = record(event.response);
257
+ if (type === "error" || type === "response.failed") {
258
+ throw responsesError(event);
259
+ }
260
+ if (type === "response.created" || type === "response.in_progress") {
261
+ return;
262
+ }
263
+ if (type === "response.output_text.delta" || type === "response.refusal.delta") {
264
+ yield {
265
+ choices: [{ delta: { content: stringValue(event.delta) } }],
266
+ };
267
+ return;
268
+ }
269
+ if (type === "response.reasoning_summary_text.delta" ||
270
+ type === "response.reasoning_text.delta") {
271
+ yield {
272
+ choices: [{ delta: { reasoning_content: stringValue(event.delta) } }],
273
+ };
274
+ return;
275
+ }
276
+ if (type === "response.output_item.added") {
277
+ const item = record(event.item);
278
+ if (item.type !== "function_call")
279
+ return;
280
+ const index = toolIndex(event, tools.size);
281
+ const state = {
282
+ index,
283
+ id: stringValue(item.call_id),
284
+ name: stringValue(item.name),
285
+ arguments: stringValue(item.arguments),
286
+ headerEmitted: true,
287
+ };
288
+ tools.set(index, state);
289
+ yield {
290
+ ...toolDelta(state, {
291
+ id: state.id,
292
+ name: state.name,
293
+ ...(state.arguments ? { arguments: state.arguments } : {}),
294
+ }),
295
+ };
296
+ return;
297
+ }
298
+ if (type === "response.function_call_arguments.delta") {
299
+ const index = toolIndex(event, tools.size);
300
+ const state = tools.get(index) || {
301
+ index,
302
+ id: "",
303
+ name: "",
304
+ arguments: "",
305
+ headerEmitted: false,
306
+ };
307
+ const delta = stringValue(event.delta);
308
+ state.arguments += delta;
309
+ tools.set(index, state);
310
+ yield {
311
+ ...toolDelta(state, { arguments: delta }),
312
+ };
313
+ return;
314
+ }
315
+ if (type === "response.function_call_arguments.done" ||
316
+ type === "response.output_item.done") {
317
+ const item = record(event.item);
318
+ const index = toolIndex(event, tools.size);
319
+ if (type === "response.output_item.done") {
320
+ yield* captureOutputItem(index, item);
321
+ }
322
+ if (type === "response.output_item.done" && item.type !== "function_call") {
323
+ return;
324
+ }
325
+ const state = tools.get(index) || {
326
+ index,
327
+ id: "",
328
+ name: "",
329
+ arguments: "",
330
+ headerEmitted: false,
331
+ };
332
+ const id = stringValue(item.call_id) || state.id;
333
+ const name = stringValue(item.name) || state.name;
334
+ const completeArguments = stringValue(event.arguments) || stringValue(item.arguments);
335
+ const suffix = completeArguments.startsWith(state.arguments)
336
+ ? completeArguments.slice(state.arguments.length)
337
+ : state.arguments
338
+ ? ""
339
+ : completeArguments;
340
+ if (!state.headerEmitted || suffix) {
341
+ yield {
342
+ ...toolDelta(state, {
343
+ ...(!state.headerEmitted && id ? { id } : {}),
344
+ ...(!state.headerEmitted && name ? { name } : {}),
345
+ ...(suffix ? { arguments: suffix } : {}),
346
+ }),
347
+ };
348
+ }
349
+ state.id = id;
350
+ state.name = name;
351
+ state.arguments = completeArguments || state.arguments;
352
+ state.headerEmitted = true;
353
+ tools.set(index, state);
354
+ return;
355
+ }
356
+ if (type === "response.completed" || type === "response.incomplete") {
357
+ const completed = response;
358
+ if (Array.isArray(completed.output)) {
359
+ for (const [index, rawItem] of completed.output.entries()) {
360
+ // The completed response is authoritative and may carry fields such
361
+ // as encrypted_content that were absent from an earlier added/done
362
+ // event emitted by a compatible gateway.
363
+ yield* captureOutputItem(index, record(rawItem), true);
364
+ }
365
+ }
366
+ const incompleteDetails = record(completed.incomplete_details);
367
+ const incompleteReason = stringValue(incompleteDetails.reason);
368
+ yield {
369
+ ...(responsesUsage(completed.usage)
370
+ ? { usage: responsesUsage(completed.usage) }
371
+ : {}),
372
+ choices: [
373
+ {
374
+ delta: {},
375
+ finish_reason: type === "response.incomplete" || incompleteReason
376
+ ? incompleteReason === "max_output_tokens"
377
+ ? "length"
378
+ : "incomplete"
379
+ : tools.size
380
+ ? "tool_calls"
381
+ : "stop",
382
+ },
383
+ ],
384
+ };
385
+ }
386
+ };
387
+ const consumeFrame = function* (frame) {
388
+ const payload = frame
389
+ .split("\n")
390
+ .filter((line) => line.startsWith("data:"))
391
+ .map((line) => line.slice(5).trimStart())
392
+ .join("\n");
393
+ if (!payload || payload === "[DONE]")
394
+ return;
395
+ yield* processEvent(JSON.parse(payload));
396
+ };
397
+ while (true) {
398
+ const { done, value } = await reader.read();
399
+ buffer += decoder.decode(value, { stream: !done }).replace(/\r\n/g, "\n");
400
+ let boundary = buffer.indexOf("\n\n");
401
+ while (boundary !== -1) {
402
+ yield* consumeFrame(buffer.slice(0, boundary));
403
+ buffer = buffer.slice(boundary + 2);
404
+ boundary = buffer.indexOf("\n\n");
405
+ }
406
+ if (done)
407
+ break;
408
+ }
409
+ if (buffer)
410
+ yield* consumeFrame(buffer);
411
+ }
412
+ /** Translate a non-streaming Responses object into one Arena chunk. */
413
+ export function responsesFallbackChunk(value) {
414
+ const output = Array.isArray(value.output) ? value.output : [];
415
+ const content = [];
416
+ const reasoning = [];
417
+ const toolCalls = [];
418
+ for (const rawItem of output) {
419
+ const item = record(rawItem);
420
+ if (item.type === "message" && Array.isArray(item.content)) {
421
+ for (const rawPart of item.content) {
422
+ const part = record(rawPart);
423
+ if (part.type === "output_text" || part.type === "refusal") {
424
+ content.push(stringValue(part.text) || stringValue(part.refusal));
425
+ }
426
+ }
427
+ }
428
+ else if (item.type === "reasoning" && Array.isArray(item.summary)) {
429
+ for (const rawPart of item.summary) {
430
+ reasoning.push(stringValue(record(rawPart).text));
431
+ }
432
+ }
433
+ else if (item.type === "function_call") {
434
+ toolCalls.push({
435
+ index: toolCalls.length,
436
+ id: stringValue(item.call_id),
437
+ type: "function",
438
+ function: {
439
+ name: stringValue(item.name),
440
+ arguments: stringValue(item.arguments),
441
+ },
442
+ });
443
+ }
444
+ }
445
+ const incompleteDetails = record(value.incomplete_details);
446
+ const incompleteReason = stringValue(incompleteDetails.reason);
447
+ return {
448
+ openai_response_items: output.map((rawItem, index) => ({
449
+ index,
450
+ item: structuredClone(record(rawItem)),
451
+ })),
452
+ usage: responsesUsage(value.usage),
453
+ choices: [
454
+ {
455
+ delta: {
456
+ ...(content.length ? { content: content.join("") } : {}),
457
+ ...(reasoning.length
458
+ ? { reasoning_content: reasoning.join("") }
459
+ : {}),
460
+ ...(toolCalls.length ? { tool_calls: toolCalls } : {}),
461
+ },
462
+ finish_reason: incompleteReason
463
+ ? incompleteReason === "max_output_tokens"
464
+ ? "length"
465
+ : "incomplete"
466
+ : toolCalls.length
467
+ ? "tool_calls"
468
+ : "stop",
469
+ },
470
+ ],
471
+ };
472
+ }
473
+ //# sourceMappingURL=openai-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-responses.js","sourceRoot":"","sources":["../src/openai-responses.ts"],"names":[],"mappings":"AAUA,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,MAAM,EAAE,MAAM;aACf,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzC,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACpC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM;aAC/C,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,cAAc,CAAC,QAAwB;IACrD,MAAM,KAAK,GAAwB,EAAE,CAAC;IACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC;aAC/C,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,OAAO,CAAC,YAAY;gBAC7B,MAAM,EAAE,OAAO,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,qBAAqB,EAAE,MAAM,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,sEAAsE;QACtE,iCAAiC;QACjC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBACxB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAuB;IAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;QACxB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW;YAC3B,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;KACrC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB,CAClC,OAAqB,EACrB,KAAa;IAEb,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,SAAS,GACb,OAAO,CAAC,eAAe,IAAI,iBAAiB;QAC1C,CAAC,CAAC;YACE,GAAG,CAAC,OAAO,CAAC,eAAe;gBACzB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE;gBACrC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO;QACL,KAAK;QACL,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;YACtB,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE;YAC3E,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,SAAS,EAAE;YAC1C,CAAC,CAAC,EAAE,CAAC;QACP,2EAA2E;QAC3E,0EAA0E;QAC1E,yEAAyE;QACzE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,IAAI;QACZ,yEAAyE;QACzE,qEAAqE;QACrE,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,CAAC,6BAA6B,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACjD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;IACzC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;IACvC,OAAO;QACL,GAAG,KAAK;QACR,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,YAAY,KAAK,QAAQ;YAClC,CAAC,CAAC,EAAE,iBAAiB,EAAE,YAAY,EAAE;YACrC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAUD,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;AACvE,MAAM,CAAC,MAAM,8BAA8B,GAAG,0BAA0B,CAAC;AAEzE,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAC;IACjD,kBAAkB;IAClB,qBAAqB;IACrB,iBAAiB;IACjB,cAAc;IACd,qBAAqB;IACrB,yBAAyB;IACzB,SAAS;CACV,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAAC,OAAe;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC/C,UAAU,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAClE,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,YAAgC,EAChC,YAAgC,EAChC,MAA0B;IAE1B,IACE,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,MAAM,KAAK,GAAG;QACd,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,EACxD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,IAAI,CACtC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,KAAK,SAAS;QACnB,kCAAkC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC1C,SAAS,CAAS;IAClB,YAAY,CAAU;IACtB,YAAY,CAAU;IACtB,MAAM,CAAU;IAChB,IAAI,CAAU;IAEvB,YAAY,OAMX;QACC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC5C,CAAC;aAAM,IACL,yBAAyB,CACvB,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,MAAM,CACf,EACD,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AAED,SAAS,cAAc,CACrB,KAA8B;IAE9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GACX,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1B,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC;QAClC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1B,mCAAmC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,eAAe,GAAG,CAAC;IACnF,OAAO,IAAI,0BAA0B,CAAC;QACpC,OAAO;QACP,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS;QAC/C,YAAY,EACV,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YACvB,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC;YAC/B,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YACvB,SAAS;QACX,YAAY,EACV,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YACvB,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC;YAC/B,SAAS;QACX,MAAM,EACJ,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1B,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;YAClC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,KAA8B,EAAE,QAAgB;IACjE,OAAO,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,SAAS,SAAS,CAChB,KAAsB,EACtB,MAA0D;IAE1D,OAAO;QACL,OAAO,EAAE;YACP;gBACE,KAAK,EAAE;oBACL,UAAU,EAAE;wBACV;4BACE,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACzD,QAAQ,EAAE;gCACR,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC7C,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;oCAChC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;oCACjC,CAAC,CAAC,EAAE,CAAC;6BACR;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,MAAkC;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/C,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,EACjC,KAAa,EACb,IAA6B,EAC7B,OAAO,GAAG,KAAK;QAEf,IACE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;YACzB,CAAC,CAAC,OAAO,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAC7C,CAAC;YACD,OAAO;QACT,CAAC;QACD,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM;YACJ,qBAAqB,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;SAChE,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,EAC5B,KAA8B;QAE9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACnD,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACnE,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,4BAA4B,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC/E,MAAM;gBACJ,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;aAC5D,CAAC;YACF,OAAO;QACT,CAAC;QACD,IACE,IAAI,KAAK,uCAAuC;YAChD,IAAI,KAAK,+BAA+B,EACxC,CAAC;YACD,MAAM;gBACJ,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;aACtE,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,4BAA4B,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe;gBAAE,OAAO;YAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAoB;gBAC7B,KAAK;gBACL,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7B,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtC,aAAa,EAAE,IAAI;aACpB,CAAC;YACF,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxB,MAAM;gBACJ,GAAG,SAAS,CAAC,KAAK,EAAE;oBAClB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC3D,CAAC;aACH,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,wCAAwC,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;gBAChC,KAAK;gBACL,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,KAAK;aACrB,CAAC;YACF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxB,MAAM;gBACJ,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;aAC1C,CAAC;YACF,OAAO;QACT,CAAC;QACD,IACE,IAAI,KAAK,uCAAuC;YAChD,IAAI,KAAK,2BAA2B,EACpC,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBACzC,KAAK,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,IAAI,KAAK,2BAA2B,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC1E,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;gBAChC,KAAK;gBACL,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE,EAAE;gBACR,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,KAAK;aACrB,CAAC;YACF,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;YAClD,MAAM,iBAAiB,GACrB,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC1D,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;gBACjD,CAAC,CAAC,KAAK,CAAC,SAAS;oBACf,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,iBAAiB,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC;gBACnC,MAAM;oBACJ,GAAG,SAAS,CAAC,KAAK,EAAE;wBAClB,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7C,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACzC,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAClB,KAAK,CAAC,SAAS,GAAG,iBAAiB,IAAI,KAAK,CAAC,SAAS,CAAC;YACvD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACpE,MAAM,SAAS,GAAG,QAAQ,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC1D,oEAAoE;oBACpE,mEAAmE;oBACnE,yCAAyC;oBACzC,KAAK,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YAC/D,MAAM,gBAAgB,GAAG,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC/D,MAAM;gBACJ,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC;oBACjC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,EAAE;oBACP;wBACE,KAAK,EAAE,EAAE;wBACT,aAAa,EACX,IAAI,KAAK,qBAAqB,IAAI,gBAAgB;4BAChD,CAAC,CAAC,gBAAgB,KAAK,mBAAmB;gCACxC,CAAC,CAAC,QAAQ;gCACV,CAAC,CAAC,YAAY;4BAChB,CAAC,CAAC,KAAK,CAAC,IAAI;gCACV,CAAC,CAAC,YAAY;gCACd,CAAC,CAAC,MAAM;qBACf;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,KAAa;QAC3C,MAAM,OAAO,GAAG,KAAK;aAClB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ;YAAE,OAAO;QAC7C,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1E,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC/C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACpC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI;YAAE,MAAM;IAClB,CAAC;IACD,IAAI,MAAM;QAAE,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,sBAAsB,CACpC,KAA8B;IAE9B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,SAAS,GAEG,EAAE,CAAC;IACrB,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC3D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,SAAS,CAAC,MAAM;gBACvB,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7B,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACR,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC5B,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;iBACvC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO;QACL,qBAAqB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrD,KAAK;YACL,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SACvC,CAAC,CAAC;QACH,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,OAAO,EAAE;YACP;gBACE,KAAK,EAAE;oBACL,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxD,GAAG,CAAC,SAAS,CAAC,MAAM;wBAClB,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;wBAC3C,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD;gBACD,aAAa,EAAE,gBAAgB;oBAC7B,CAAC,CAAC,gBAAgB,KAAK,mBAAmB;wBACxC,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,YAAY;oBAChB,CAAC,CAAC,SAAS,CAAC,MAAM;wBAChB,CAAC,CAAC,YAAY;wBACd,CAAC,CAAC,MAAM;aACb;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,38 @@
1
+ export interface ListeningPort {
2
+ port: number;
3
+ address: string;
4
+ }
5
+ export interface StartProcessOptions {
6
+ command: string;
7
+ cwd: string;
8
+ env: NodeJS.ProcessEnv;
9
+ name: string;
10
+ signal?: AbortSignal;
11
+ startupWaitSeconds: number;
12
+ }
13
+ export interface GetProcessOutputOptions {
14
+ processId: string;
15
+ signal?: AbortSignal;
16
+ tailLines: number;
17
+ waitFor?: "port" | "log" | "exit";
18
+ waitPattern?: string;
19
+ waitTimeoutSeconds: number;
20
+ }
21
+ export interface BackgroundProcessManagerOptions {
22
+ previewHostTemplate?: string;
23
+ previewProbeTimeoutMs?: number;
24
+ }
25
+ export declare function listeningPorts(): Promise<ListeningPort[]>;
26
+ export declare class BackgroundProcessManager {
27
+ private readonly processes;
28
+ private readonly logsRoot;
29
+ private readonly previewHostTemplate?;
30
+ private readonly previewProbeTimeoutMs;
31
+ constructor(workspace: string, options?: BackgroundProcessManagerOptions);
32
+ private alive;
33
+ private state;
34
+ start(options: StartProcessOptions): Promise<Record<string, unknown>>;
35
+ get(options: GetProcessOutputOptions): Promise<Record<string, unknown>>;
36
+ stop(processIdValue: string): Promise<Record<string, unknown>>;
37
+ }
38
+ export declare function processManagerForWorkspace(workspace: string): BackgroundProcessManager;