@bolt-foundry/gambit 0.8.1 → 0.8.3

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 (53) hide show
  1. package/CHANGELOG.md +78 -2
  2. package/README.md +31 -9
  3. package/esm/gambit/simulator-ui/dist/bundle.js +4744 -4360
  4. package/esm/gambit/simulator-ui/dist/bundle.js.map +4 -4
  5. package/esm/gambit/simulator-ui/dist/favicon.ico +0 -0
  6. package/esm/mod.d.ts +8 -4
  7. package/esm/mod.d.ts.map +1 -1
  8. package/esm/mod.js +6 -2
  9. package/esm/src/cli_utils.d.ts.map +1 -1
  10. package/esm/src/cli_utils.js +39 -3
  11. package/esm/src/openai_compat.d.ts +63 -0
  12. package/esm/src/openai_compat.d.ts.map +1 -0
  13. package/esm/src/openai_compat.js +277 -0
  14. package/esm/src/providers/google.d.ts +16 -0
  15. package/esm/src/providers/google.d.ts.map +1 -0
  16. package/esm/src/providers/google.js +352 -0
  17. package/esm/src/providers/ollama.d.ts +17 -0
  18. package/esm/src/providers/ollama.d.ts.map +1 -0
  19. package/esm/src/providers/ollama.js +509 -0
  20. package/esm/src/providers/openrouter.d.ts +22 -0
  21. package/esm/src/providers/openrouter.d.ts.map +1 -0
  22. package/esm/src/providers/openrouter.js +592 -0
  23. package/esm/src/server.d.ts +2 -0
  24. package/esm/src/server.d.ts.map +1 -1
  25. package/esm/src/server.js +612 -29
  26. package/esm/src/trace.d.ts.map +1 -1
  27. package/esm/src/trace.js +2 -2
  28. package/package.json +3 -2
  29. package/script/gambit/simulator-ui/dist/bundle.js +4744 -4360
  30. package/script/gambit/simulator-ui/dist/bundle.js.map +4 -4
  31. package/script/gambit/simulator-ui/dist/favicon.ico +0 -0
  32. package/script/mod.d.ts +8 -4
  33. package/script/mod.d.ts.map +1 -1
  34. package/script/mod.js +13 -7
  35. package/script/src/cli_utils.d.ts.map +1 -1
  36. package/script/src/cli_utils.js +38 -2
  37. package/script/src/openai_compat.d.ts +63 -0
  38. package/script/src/openai_compat.d.ts.map +1 -0
  39. package/script/src/openai_compat.js +281 -0
  40. package/script/src/providers/google.d.ts +16 -0
  41. package/script/src/providers/google.d.ts.map +1 -0
  42. package/script/src/providers/google.js +359 -0
  43. package/script/src/providers/ollama.d.ts +17 -0
  44. package/script/src/providers/ollama.d.ts.map +1 -0
  45. package/script/src/providers/ollama.js +551 -0
  46. package/script/src/providers/openrouter.d.ts +22 -0
  47. package/script/src/providers/openrouter.d.ts.map +1 -0
  48. package/script/src/providers/openrouter.js +632 -0
  49. package/script/src/server.d.ts +2 -0
  50. package/script/src/server.d.ts.map +1 -1
  51. package/script/src/server.js +612 -29
  52. package/script/src/trace.d.ts.map +1 -1
  53. package/script/src/trace.js +2 -2
@@ -0,0 +1,592 @@
1
+ import * as dntShim from "../../_dnt.shims.js";
2
+ import OpenAI from "openai";
3
+ import { GAMBIT_TOOL_CONTEXT, GAMBIT_TOOL_INIT, } from "@bolt-foundry/gambit-core";
4
+ const logger = console;
5
+ export const OPENROUTER_PREFIX = "openrouter/";
6
+ function normalizeOpenRouterModel(model) {
7
+ return model.startsWith(OPENROUTER_PREFIX)
8
+ ? model.slice(OPENROUTER_PREFIX.length)
9
+ : model;
10
+ }
11
+ function normalizeMessage(content) {
12
+ const toolCalls = content.tool_calls ??
13
+ undefined;
14
+ return {
15
+ role: content.role,
16
+ content: typeof content.content === "string"
17
+ ? content.content
18
+ : Array.isArray(content.content)
19
+ ? content.content
20
+ .map((c) => (typeof c === "string" ? c : ""))
21
+ .join("")
22
+ : "",
23
+ name: content.name,
24
+ tool_call_id: content.tool_call_id,
25
+ tool_calls: toolCalls && toolCalls.length > 0 ? toolCalls : undefined,
26
+ };
27
+ }
28
+ function safeJson(input) {
29
+ try {
30
+ const parsed = JSON.parse(input);
31
+ if (parsed && typeof parsed === "object") {
32
+ return parsed;
33
+ }
34
+ }
35
+ catch {
36
+ // fall through
37
+ }
38
+ return {};
39
+ }
40
+ function isAsyncIterable(value) {
41
+ return Boolean(value &&
42
+ typeof value === "object" &&
43
+ Symbol.asyncIterator in value);
44
+ }
45
+ function mapUsage(usage) {
46
+ if (!usage)
47
+ return undefined;
48
+ return {
49
+ promptTokens: usage.input_tokens ?? 0,
50
+ completionTokens: usage.output_tokens ?? 0,
51
+ totalTokens: usage.total_tokens ?? 0,
52
+ };
53
+ }
54
+ function mapStatus(status) {
55
+ if (!status)
56
+ return undefined;
57
+ if (status === "completed")
58
+ return "completed";
59
+ if (status === "in_progress" || status === "queued")
60
+ return "in_progress";
61
+ return "failed";
62
+ }
63
+ function mapError(error) {
64
+ if (!error)
65
+ return undefined;
66
+ return { code: error.code, message: error.message };
67
+ }
68
+ function mapTools(tools) {
69
+ if (!tools || tools.length === 0)
70
+ return undefined;
71
+ return tools.map((tool) => ({
72
+ type: "function",
73
+ name: tool.function.name,
74
+ description: tool.function.description ?? null,
75
+ parameters: normalizeToolParameters(tool.function.parameters),
76
+ strict: false,
77
+ }));
78
+ }
79
+ function normalizeToolParameters(parameters) {
80
+ const normalized = structuredClone(parameters ?? {});
81
+ if (normalized.type !== "object") {
82
+ return normalized;
83
+ }
84
+ if (normalized.properties === undefined) {
85
+ normalized.properties = {};
86
+ }
87
+ const props = normalized.properties;
88
+ if (props && typeof props === "object" && !Array.isArray(props)) {
89
+ const requiredKeys = Array.isArray(normalized.required)
90
+ ? normalized.required.filter((key) => typeof key === "string" && key in props)
91
+ : [];
92
+ for (const [key, value] of Object.entries(props)) {
93
+ if (!value || typeof value !== "object" || Array.isArray(value))
94
+ continue;
95
+ if (!("type" in value))
96
+ continue;
97
+ if (value.type === "object" && value.additionalProperties !== false) {
98
+ props[key] = {
99
+ ...value,
100
+ additionalProperties: false,
101
+ };
102
+ }
103
+ }
104
+ if (requiredKeys.length > 0) {
105
+ normalized.required = requiredKeys;
106
+ }
107
+ }
108
+ const additional = normalized.additionalProperties;
109
+ if (additional !== false) {
110
+ normalized.additionalProperties = false;
111
+ }
112
+ return normalized;
113
+ }
114
+ function appendSyntheticTools(tools, input) {
115
+ const needed = new Set();
116
+ for (const item of input) {
117
+ if (item.type !== "function_call")
118
+ continue;
119
+ if (item.name === GAMBIT_TOOL_CONTEXT || item.name === GAMBIT_TOOL_INIT) {
120
+ needed.add(item.name);
121
+ }
122
+ }
123
+ for (const name of needed) {
124
+ if (tools.some((tool) => tool.name === name))
125
+ continue;
126
+ tools.push({
127
+ type: "function",
128
+ name,
129
+ description: "Synthetic Gambit context payload.",
130
+ parameters: {
131
+ type: "object",
132
+ properties: {},
133
+ additionalProperties: false,
134
+ required: [],
135
+ },
136
+ strict: false,
137
+ });
138
+ }
139
+ }
140
+ function mapToolChoice(toolChoice) {
141
+ if (!toolChoice)
142
+ return undefined;
143
+ if (toolChoice === "auto" || toolChoice === "required")
144
+ return toolChoice;
145
+ return { type: "function", name: toolChoice.function.name };
146
+ }
147
+ function mapOpenAIOutputItem(item) {
148
+ const itemType = item.type;
149
+ if (itemType === "message") {
150
+ const message = item;
151
+ const content = [];
152
+ for (const part of message.content ?? []) {
153
+ if (part.type === "output_text") {
154
+ content.push({ type: "output_text", text: part.text });
155
+ }
156
+ }
157
+ if (content.length === 0)
158
+ return null;
159
+ return {
160
+ type: "message",
161
+ role: "assistant",
162
+ content,
163
+ id: message.id,
164
+ };
165
+ }
166
+ if (itemType === "function_call") {
167
+ const call = item;
168
+ return {
169
+ type: "function_call",
170
+ call_id: call.call_id,
171
+ name: call.name,
172
+ arguments: call.arguments,
173
+ id: call.id,
174
+ };
175
+ }
176
+ return null;
177
+ }
178
+ function normalizeOpenAIResponse(response) {
179
+ const outputItems = (response.output ?? [])
180
+ .map(mapOpenAIOutputItem)
181
+ .filter((item) => Boolean(item));
182
+ return {
183
+ id: response.id,
184
+ object: "response",
185
+ model: response.model,
186
+ created: response.created_at,
187
+ status: mapStatus(response.status ?? undefined),
188
+ output: outputItems,
189
+ usage: mapUsage(response.usage),
190
+ error: mapError(response.error),
191
+ };
192
+ }
193
+ function toOpenAIInputItems(items) {
194
+ const mapped = [];
195
+ for (const item of items) {
196
+ if (item.type === "message") {
197
+ const isAssistant = item.role === "assistant";
198
+ const content = item.content
199
+ .map((part) => {
200
+ if (part.type === "output_text") {
201
+ return {
202
+ type: "output_text",
203
+ text: part.text,
204
+ };
205
+ }
206
+ if (part.type === "input_text") {
207
+ return {
208
+ type: isAssistant ? "output_text" : "input_text",
209
+ text: part.text,
210
+ };
211
+ }
212
+ return null;
213
+ })
214
+ .filter((part) => Boolean(part));
215
+ if (content.length === 0)
216
+ continue;
217
+ mapped.push({
218
+ type: "message",
219
+ role: item.role,
220
+ content,
221
+ id: item.id,
222
+ });
223
+ continue;
224
+ }
225
+ if (item.type === "function_call") {
226
+ mapped.push({
227
+ type: "function_call",
228
+ call_id: item.call_id,
229
+ name: item.name,
230
+ arguments: item.arguments,
231
+ id: item.id,
232
+ });
233
+ continue;
234
+ }
235
+ if (item.type === "function_call_output") {
236
+ mapped.push({
237
+ type: "function_call_output",
238
+ call_id: item.call_id,
239
+ output: item.output,
240
+ id: item.id,
241
+ });
242
+ }
243
+ }
244
+ return mapped;
245
+ }
246
+ function chatMessagesToResponseItems(messages) {
247
+ const items = [];
248
+ for (const message of messages) {
249
+ if (message.role === "tool") {
250
+ if (message.tool_call_id &&
251
+ typeof message.content === "string") {
252
+ items.push({
253
+ type: "function_call_output",
254
+ call_id: message.tool_call_id,
255
+ output: message.content,
256
+ });
257
+ }
258
+ continue;
259
+ }
260
+ if (message.role === "system" || message.role === "user" ||
261
+ message.role === "assistant") {
262
+ const content = [];
263
+ if (typeof message.content === "string" && message.content.length > 0) {
264
+ content.push({
265
+ type: message.role === "assistant" ? "output_text" : "input_text",
266
+ text: message.content,
267
+ });
268
+ }
269
+ if (content.length > 0) {
270
+ items.push({
271
+ type: "message",
272
+ role: message.role,
273
+ content,
274
+ });
275
+ }
276
+ }
277
+ if (message.role === "assistant" && message.tool_calls) {
278
+ for (const call of message.tool_calls) {
279
+ items.push({
280
+ type: "function_call",
281
+ call_id: call.id,
282
+ name: call.function.name,
283
+ arguments: call.function.arguments,
284
+ });
285
+ }
286
+ }
287
+ }
288
+ return items;
289
+ }
290
+ function responseItemsToChat(items) {
291
+ const textParts = [];
292
+ const toolCalls = [];
293
+ const messageToolCalls = [];
294
+ for (const item of items) {
295
+ if (item.type === "message" && item.role === "assistant") {
296
+ for (const part of item.content) {
297
+ if (part.type === "output_text") {
298
+ textParts.push(part.text);
299
+ }
300
+ }
301
+ }
302
+ if (item.type === "function_call") {
303
+ toolCalls.push({
304
+ id: item.call_id,
305
+ name: item.name,
306
+ args: safeJson(item.arguments),
307
+ });
308
+ messageToolCalls.push({
309
+ id: item.call_id,
310
+ type: "function",
311
+ function: { name: item.name, arguments: item.arguments },
312
+ });
313
+ }
314
+ }
315
+ const content = textParts.length > 0 ? textParts.join("") : null;
316
+ const message = {
317
+ role: "assistant",
318
+ content,
319
+ tool_calls: messageToolCalls.length > 0 ? messageToolCalls : undefined,
320
+ };
321
+ return {
322
+ message,
323
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
324
+ };
325
+ }
326
+ async function createResponse(client, request, onStreamEvent) {
327
+ const baseParams = {
328
+ model: normalizeOpenRouterModel(request.model),
329
+ input: toOpenAIInputItems(request.input),
330
+ instructions: request.instructions,
331
+ tools: undefined,
332
+ tool_choice: mapToolChoice(request.tool_choice),
333
+ stream: request.stream,
334
+ max_output_tokens: request.max_output_tokens,
335
+ metadata: request.metadata,
336
+ };
337
+ const mappedTools = mapTools(request.tools) ?? [];
338
+ appendSyntheticTools(mappedTools, request.input);
339
+ if (mappedTools.length > 0) {
340
+ baseParams.tools = mappedTools;
341
+ }
342
+ const params = { ...(request.params ?? {}), ...baseParams };
343
+ const debugResponses = dntShim.Deno.env.get("GAMBIT_DEBUG_RESPONSES") === "1";
344
+ let responseOrStream;
345
+ try {
346
+ responseOrStream = await client.responses.create(params);
347
+ }
348
+ catch (err) {
349
+ if (debugResponses) {
350
+ logger.error("[responses-debug] request", params);
351
+ if (err instanceof OpenAI.APIError) {
352
+ logger.error("[responses-debug] error", err.error);
353
+ }
354
+ else {
355
+ logger.error("[responses-debug] error", err);
356
+ }
357
+ }
358
+ throw err;
359
+ }
360
+ if (request.stream &&
361
+ isAsyncIterable(responseOrStream)) {
362
+ let completed = null;
363
+ for await (const event of responseOrStream) {
364
+ if (!event || typeof event !== "object" || !("type" in event)) {
365
+ continue;
366
+ }
367
+ switch (event.type) {
368
+ case "response.created": {
369
+ const mapped = normalizeOpenAIResponse(event.response);
370
+ onStreamEvent?.({ type: "response.created", response: mapped });
371
+ break;
372
+ }
373
+ case "response.output_text.delta":
374
+ onStreamEvent?.({
375
+ type: "response.output_text.delta",
376
+ output_index: event.output_index,
377
+ delta: event.delta,
378
+ item_id: event.item_id,
379
+ });
380
+ break;
381
+ case "response.output_text.done":
382
+ onStreamEvent?.({
383
+ type: "response.output_text.done",
384
+ output_index: event.output_index,
385
+ text: event.text,
386
+ item_id: event.item_id,
387
+ });
388
+ break;
389
+ case "response.output_item.added": {
390
+ const item = mapOpenAIOutputItem(event.item);
391
+ if (item) {
392
+ onStreamEvent?.({
393
+ type: "response.output_item.added",
394
+ output_index: event.output_index,
395
+ item,
396
+ });
397
+ }
398
+ break;
399
+ }
400
+ case "response.output_item.done": {
401
+ const item = mapOpenAIOutputItem(event.item);
402
+ if (item) {
403
+ onStreamEvent?.({
404
+ type: "response.output_item.done",
405
+ output_index: event.output_index,
406
+ item,
407
+ });
408
+ }
409
+ break;
410
+ }
411
+ case "response.completed": {
412
+ completed = normalizeOpenAIResponse(event.response);
413
+ onStreamEvent?.({ type: "response.completed", response: completed });
414
+ break;
415
+ }
416
+ case "response.failed": {
417
+ const error = mapError(event.response?.error ?? undefined);
418
+ onStreamEvent?.({
419
+ type: "response.failed",
420
+ error: error ?? {},
421
+ });
422
+ break;
423
+ }
424
+ default:
425
+ break;
426
+ }
427
+ }
428
+ if (completed)
429
+ return completed;
430
+ throw new Error("OpenRouter responses stream ended without completion.");
431
+ }
432
+ return normalizeOpenAIResponse(responseOrStream);
433
+ }
434
+ export function createOpenRouterProvider(opts) {
435
+ const debugStream = dntShim.Deno.env.get("GAMBIT_DEBUG_STREAM") === "1";
436
+ const client = (opts.client ??
437
+ new OpenAI({
438
+ apiKey: opts.apiKey,
439
+ baseURL: opts.baseURL ?? "https://openrouter.ai/api/v1",
440
+ defaultHeaders: {
441
+ "HTTP-Referer": opts.referer ?? "https://gambit.local",
442
+ "X-Title": opts.title ?? "Gambit CLI",
443
+ },
444
+ }));
445
+ return {
446
+ async responses(input) {
447
+ return await createResponse(client, input.request, input.onStreamEvent);
448
+ },
449
+ async chat(input) {
450
+ const params = input.params ?? {};
451
+ if (opts.enableResponses) {
452
+ const response = await createResponse(client, {
453
+ model: normalizeOpenRouterModel(input.model),
454
+ input: chatMessagesToResponseItems(input.messages),
455
+ tools: input.tools,
456
+ stream: input.stream,
457
+ params,
458
+ }, (event) => {
459
+ if (event.type === "response.output_text.delta") {
460
+ input.onStreamText?.(event.delta);
461
+ }
462
+ });
463
+ const mapped = responseItemsToChat(response.output);
464
+ return {
465
+ message: mapped.message,
466
+ finishReason: mapped.toolCalls ? "tool_calls" : "stop",
467
+ toolCalls: mapped.toolCalls,
468
+ usage: response.usage,
469
+ };
470
+ }
471
+ if (input.stream) {
472
+ if (debugStream) {
473
+ logger.log(`[stream-debug] requesting stream model=${input.model} messages=${input.messages.length} tools=${input.tools?.length ?? 0}`);
474
+ }
475
+ const stream = await client.chat.completions.create({
476
+ model: normalizeOpenRouterModel(input.model),
477
+ messages: input
478
+ .messages,
479
+ tools: input
480
+ .tools,
481
+ tool_choice: "auto",
482
+ stream: true,
483
+ ...params,
484
+ });
485
+ let finishReason = null;
486
+ const contentParts = [];
487
+ const toolCallMap = new Map();
488
+ let chunkCount = 0;
489
+ let streamedChars = 0;
490
+ for await (const chunk of stream) {
491
+ chunkCount++;
492
+ const choice = chunk.choices[0];
493
+ const fr = choice.finish_reason;
494
+ if (fr === "stop" || fr === "tool_calls" || fr === "length" ||
495
+ fr === null) {
496
+ finishReason = fr ?? finishReason;
497
+ }
498
+ const delta = choice.delta;
499
+ if (typeof delta.content === "string") {
500
+ contentParts.push(delta.content);
501
+ input.onStreamText?.(delta.content);
502
+ streamedChars += delta.content.length;
503
+ }
504
+ else if (Array.isArray(delta.content)) {
505
+ const chunkStr = delta.content
506
+ .map((c) => (typeof c === "string" ? c : ""))
507
+ .join("");
508
+ if (chunkStr) {
509
+ contentParts.push(chunkStr);
510
+ input.onStreamText?.(chunkStr);
511
+ streamedChars += chunkStr.length;
512
+ }
513
+ }
514
+ for (const tc of delta.tool_calls ?? []) {
515
+ const idx = tc.index ?? 0;
516
+ const existing = toolCallMap.get(idx) ??
517
+ {
518
+ id: tc.id,
519
+ function: { name: tc.function?.name, arguments: "" },
520
+ };
521
+ if (tc.id)
522
+ existing.id = tc.id;
523
+ if (tc.function?.name)
524
+ existing.function.name = tc.function.name;
525
+ if (tc.function?.arguments) {
526
+ existing.function.arguments += tc.function.arguments;
527
+ }
528
+ toolCallMap.set(idx, existing);
529
+ }
530
+ }
531
+ if (debugStream) {
532
+ logger.log(`[stream-debug] completed stream chunks=${chunkCount} streamedChars=${streamedChars} finishReason=${finishReason}`);
533
+ }
534
+ const tool_calls = Array.from(toolCallMap.values()).map((tc) => ({
535
+ id: tc.id ?? crypto.randomUUID().replace(/-/g, "").slice(0, 24),
536
+ type: "function",
537
+ function: {
538
+ name: tc.function.name ?? "",
539
+ arguments: tc.function.arguments,
540
+ },
541
+ }));
542
+ const message = normalizeMessage({
543
+ role: "assistant",
544
+ content: contentParts.length ? contentParts.join("") : null,
545
+ tool_calls,
546
+ });
547
+ const toolCalls = tool_calls.length > 0
548
+ ? tool_calls.map((tc) => ({
549
+ id: tc.id,
550
+ name: tc.function.name,
551
+ args: safeJson(tc.function.arguments),
552
+ }))
553
+ : undefined;
554
+ return {
555
+ message,
556
+ finishReason: finishReason ?? "stop",
557
+ toolCalls,
558
+ };
559
+ }
560
+ const response = await client.chat.completions.create({
561
+ model: normalizeOpenRouterModel(input.model),
562
+ messages: input
563
+ .messages,
564
+ tools: input
565
+ .tools,
566
+ tool_choice: "auto",
567
+ stream: false,
568
+ ...params,
569
+ });
570
+ const choice = response.choices[0];
571
+ const message = choice.message;
572
+ const normalizedMessage = normalizeMessage(message);
573
+ const toolCalls = message.tool_calls?.map((tc) => ({
574
+ id: tc.id,
575
+ name: tc.function.name,
576
+ args: safeJson(tc.function.arguments),
577
+ }));
578
+ return {
579
+ message: normalizedMessage,
580
+ finishReason: (choice.finish_reason ?? "stop"),
581
+ toolCalls,
582
+ usage: response.usage
583
+ ? {
584
+ promptTokens: response.usage.prompt_tokens ?? 0,
585
+ completionTokens: response.usage.completion_tokens ?? 0,
586
+ totalTokens: response.usage.total_tokens ?? 0,
587
+ }
588
+ : undefined,
589
+ };
590
+ },
591
+ };
592
+ }
@@ -15,7 +15,9 @@ export declare function startWebSocketSimulator(opts: {
15
15
  signal?: AbortSignal;
16
16
  sessionDir?: string;
17
17
  autoBundle?: boolean;
18
+ forceBundle?: boolean;
18
19
  sourceMap?: boolean;
19
20
  bundlePlatform?: "deno" | "browser";
21
+ responsesMode?: boolean;
20
22
  }): ReturnType<typeof dntShim.Deno.serve>;
21
23
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAY5C,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AAuanC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CA2xExC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/src/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAY5C,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AA2mBnC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CA2tFxC"}