@sumicom/quicksave 0.6.1 → 0.6.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 (98) hide show
  1. package/dist/ai/cardBuilder.d.ts +14 -3
  2. package/dist/ai/cardBuilder.d.ts.map +1 -1
  3. package/dist/ai/cardBuilder.js +217 -66
  4. package/dist/ai/cardBuilder.js.map +1 -1
  5. package/dist/ai/claudeCliProvider.d.ts +2 -0
  6. package/dist/ai/claudeCliProvider.d.ts.map +1 -1
  7. package/dist/ai/claudeCliProvider.js +133 -23
  8. package/dist/ai/claudeCliProvider.js.map +1 -1
  9. package/dist/ai/claudeCodeProvider.d.ts +18 -0
  10. package/dist/ai/claudeCodeProvider.d.ts.map +1 -0
  11. package/dist/ai/claudeCodeProvider.js +30 -0
  12. package/dist/ai/claudeCodeProvider.js.map +1 -0
  13. package/dist/ai/claudeSdkProvider.d.ts +2 -0
  14. package/dist/ai/claudeSdkProvider.d.ts.map +1 -1
  15. package/dist/ai/claudeSdkProvider.js +13 -3
  16. package/dist/ai/claudeSdkProvider.js.map +1 -1
  17. package/dist/ai/codexMcpProvider.d.ts +15 -0
  18. package/dist/ai/codexMcpProvider.d.ts.map +1 -0
  19. package/dist/ai/codexMcpProvider.js +442 -0
  20. package/dist/ai/codexMcpProvider.js.map +1 -0
  21. package/dist/ai/codexSdkProvider.d.ts +35 -0
  22. package/dist/ai/codexSdkProvider.d.ts.map +1 -0
  23. package/dist/ai/codexSdkProvider.js +422 -0
  24. package/dist/ai/codexSdkProvider.js.map +1 -0
  25. package/dist/ai/debugLogger.d.ts +24 -0
  26. package/dist/ai/debugLogger.d.ts.map +1 -0
  27. package/dist/ai/debugLogger.js +54 -0
  28. package/dist/ai/debugLogger.js.map +1 -0
  29. package/dist/ai/provider.d.ts +4 -1
  30. package/dist/ai/provider.d.ts.map +1 -1
  31. package/dist/ai/sessionManager.d.ts +13 -8
  32. package/dist/ai/sessionManager.d.ts.map +1 -1
  33. package/dist/ai/sessionManager.js +150 -28
  34. package/dist/ai/sessionManager.js.map +1 -1
  35. package/dist/ai/sessionRegistry.d.ts +2 -0
  36. package/dist/ai/sessionRegistry.d.ts.map +1 -1
  37. package/dist/ai/sessionRegistry.js +4 -0
  38. package/dist/ai/sessionRegistry.js.map +1 -1
  39. package/dist/config.d.ts +1 -0
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +20 -10
  42. package/dist/config.js.map +1 -1
  43. package/dist/connection/connection.d.ts +1 -0
  44. package/dist/connection/connection.d.ts.map +1 -1
  45. package/dist/connection/connection.js +19 -1
  46. package/dist/connection/connection.js.map +1 -1
  47. package/dist/git/operations.d.ts +20 -0
  48. package/dist/git/operations.d.ts.map +1 -1
  49. package/dist/git/operations.js +52 -0
  50. package/dist/git/operations.js.map +1 -1
  51. package/dist/handlers/messageHandler.d.ts +18 -0
  52. package/dist/handlers/messageHandler.d.ts.map +1 -1
  53. package/dist/handlers/messageHandler.js +420 -20
  54. package/dist/handlers/messageHandler.js.map +1 -1
  55. package/dist/index.js +22 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/service/debugHttpServer.d.ts +27 -0
  58. package/dist/service/debugHttpServer.d.ts.map +1 -0
  59. package/dist/service/debugHttpServer.js +189 -0
  60. package/dist/service/debugHttpServer.js.map +1 -0
  61. package/dist/service/ipcClient.js +1 -1
  62. package/dist/service/run.d.ts.map +1 -1
  63. package/dist/service/run.js +21 -1
  64. package/dist/service/run.js.map +1 -1
  65. package/dist/service/singleton.d.ts +18 -1
  66. package/dist/service/singleton.d.ts.map +1 -1
  67. package/dist/service/singleton.js +43 -18
  68. package/dist/service/singleton.js.map +1 -1
  69. package/dist/service/types.js +1 -1
  70. package/package.json +5 -3
  71. package/dist/ai/asyncQueue.test.d.ts +0 -2
  72. package/dist/ai/asyncQueue.test.d.ts.map +0 -1
  73. package/dist/ai/asyncQueue.test.js +0 -56
  74. package/dist/ai/asyncQueue.test.js.map +0 -1
  75. package/dist/ai/sessionStore.test.d.ts +0 -2
  76. package/dist/ai/sessionStore.test.d.ts.map +0 -1
  77. package/dist/ai/sessionStore.test.js +0 -99
  78. package/dist/ai/sessionStore.test.js.map +0 -1
  79. package/dist/connection/pubsub.test.d.ts +0 -2
  80. package/dist/connection/pubsub.test.d.ts.map +0 -1
  81. package/dist/connection/pubsub.test.js +0 -96
  82. package/dist/connection/pubsub.test.js.map +0 -1
  83. package/dist/git/operations.test.d.ts +0 -2
  84. package/dist/git/operations.test.d.ts.map +0 -1
  85. package/dist/git/operations.test.js +0 -300
  86. package/dist/git/operations.test.js.map +0 -1
  87. package/dist/handlers/messageHandler.test.d.ts +0 -2
  88. package/dist/handlers/messageHandler.test.d.ts.map +0 -1
  89. package/dist/handlers/messageHandler.test.js +0 -361
  90. package/dist/handlers/messageHandler.test.js.map +0 -1
  91. package/dist/service/ipc.test.d.ts +0 -2
  92. package/dist/service/ipc.test.d.ts.map +0 -1
  93. package/dist/service/ipc.test.js +0 -140
  94. package/dist/service/ipc.test.js.map +0 -1
  95. package/dist/service/singleton.test.d.ts +0 -2
  96. package/dist/service/singleton.test.d.ts.map +0 -1
  97. package/dist/service/singleton.test.js +0 -39
  98. package/dist/service/singleton.test.js.map +0 -1
@@ -0,0 +1,442 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ function safeJsonParse(input) {
4
+ try {
5
+ const parsed = JSON.parse(input);
6
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
7
+ ? parsed
8
+ : null;
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ }
14
+ function textFromUnknown(value) {
15
+ if (typeof value === 'string')
16
+ return value;
17
+ if (value == null)
18
+ return '';
19
+ if (Array.isArray(value)) {
20
+ return value
21
+ .map((entry) => textFromUnknown(entry))
22
+ .filter(Boolean)
23
+ .join('\n');
24
+ }
25
+ if (typeof value === 'object') {
26
+ const maybeText = value.text;
27
+ if (typeof maybeText === 'string')
28
+ return maybeText;
29
+ try {
30
+ return JSON.stringify(value);
31
+ }
32
+ catch {
33
+ return String(value);
34
+ }
35
+ }
36
+ return String(value);
37
+ }
38
+ function emitAssistantMessage(cb, callbacks, text) {
39
+ if (!text.trim())
40
+ return;
41
+ callbacks.emitCardEvent(cb.assistantText(text));
42
+ const finalizeEvent = cb.finalizeAssistantText();
43
+ if (finalizeEvent) {
44
+ callbacks.emitCardEvent(finalizeEvent);
45
+ }
46
+ }
47
+ function mapApprovalPolicy(level) {
48
+ switch (level) {
49
+ case 'bypassPermissions':
50
+ return 'never';
51
+ case 'acceptEdits':
52
+ return 'on-request';
53
+ case 'plan':
54
+ case 'default':
55
+ default:
56
+ return 'untrusted';
57
+ }
58
+ }
59
+ function mapSandboxMode(level, sandboxed) {
60
+ if (level === 'plan')
61
+ return 'read-only';
62
+ if (sandboxed)
63
+ return 'workspace-write';
64
+ return 'danger-full-access';
65
+ }
66
+ function buildCodexDeveloperInstructions(opts) {
67
+ const parts = [];
68
+ if (opts.permissionLevel === 'plan') {
69
+ parts.push('Stay in planning mode. Do not modify files or run destructive commands unless the user explicitly changes modes.');
70
+ }
71
+ if (opts.systemPrompt) {
72
+ parts.push(opts.systemPrompt);
73
+ }
74
+ return parts.length > 0 ? parts.join('\n\n') : undefined;
75
+ }
76
+ class CodexMcpSession {
77
+ pendingStreamIds = [];
78
+ client;
79
+ transport;
80
+ cardBuilder;
81
+ callbacks;
82
+ approvalPolicy;
83
+ sandboxMode;
84
+ queue = [];
85
+ activeTurn = null;
86
+ running = false;
87
+ closed = false;
88
+ closeReason = null;
89
+ sessionIdPromiseResolve;
90
+ sessionIdPromiseReject;
91
+ sessionIdPromise;
92
+ sessionIdResolved = false;
93
+ threadId;
94
+ constructor(args) {
95
+ this.client = args.client;
96
+ this.transport = args.transport;
97
+ this.cardBuilder = args.cardBuilder;
98
+ this.callbacks = args.callbacks;
99
+ this.approvalPolicy = args.approvalPolicy;
100
+ this.sandboxMode = args.sandboxMode;
101
+ this.threadId = args.initialSessionId ?? null;
102
+ this.sessionIdPromise = new Promise((resolve, reject) => {
103
+ this.sessionIdPromiseResolve = resolve;
104
+ this.sessionIdPromiseReject = reject;
105
+ });
106
+ if (this.threadId) {
107
+ this.cardBuilder.updateSessionId(this.threadId);
108
+ this.resolveSessionId(this.threadId);
109
+ }
110
+ }
111
+ enqueueInitialTurn(turn) {
112
+ this.queue.push(turn);
113
+ this.ensureRunLoop();
114
+ }
115
+ async waitForSessionId() {
116
+ return this.sessionIdPromise;
117
+ }
118
+ sendUserMessage(prompt) {
119
+ if (this.closed)
120
+ return;
121
+ const streamId = this.pendingStreamIds.shift() ?? `codex-stream-${Date.now()}`;
122
+ this.queue.push({
123
+ prompt,
124
+ streamId,
125
+ initial: false,
126
+ });
127
+ this.ensureRunLoop();
128
+ }
129
+ interrupt() {
130
+ if (this.closed)
131
+ return;
132
+ this.closeReason = 'interrupt';
133
+ void this.close();
134
+ }
135
+ kill() {
136
+ if (this.closed)
137
+ return;
138
+ this.closeReason = 'kill';
139
+ void this.close();
140
+ }
141
+ get alive() {
142
+ return !this.closed && (this.running || this.queue.length > 0);
143
+ }
144
+ ensureRunLoop() {
145
+ if (this.running || this.closed)
146
+ return;
147
+ this.running = true;
148
+ void this.runLoop();
149
+ }
150
+ async runLoop() {
151
+ try {
152
+ while (!this.closed && this.queue.length > 0) {
153
+ const queued = this.queue.shift();
154
+ const turn = { ...queued, ended: false, sawAssistantOutput: false };
155
+ this.activeTurn = turn;
156
+ this.cardBuilder.startNewTurn(turn.streamId);
157
+ this.cardBuilder.userMessage(turn.prompt);
158
+ try {
159
+ const result = await this.client.callTool({
160
+ name: turn.initial ? 'codex' : 'codex-reply',
161
+ arguments: turn.initial
162
+ ? {
163
+ prompt: turn.prompt,
164
+ cwd: turn.cwd,
165
+ sandbox: this.sandboxMode,
166
+ 'approval-policy': this.approvalPolicy,
167
+ ...(turn.model ? { model: turn.model } : {}),
168
+ ...(turn.developerInstructions ? { 'developer-instructions': turn.developerInstructions } : {}),
169
+ }
170
+ : {
171
+ prompt: turn.prompt,
172
+ threadId: this.threadId,
173
+ ...(turn.developerInstructions ? { 'developer-instructions': turn.developerInstructions } : {}),
174
+ },
175
+ });
176
+ const returnedThreadId = result?.structuredContent?.threadId
177
+ ?? result?.threadId
178
+ ?? result?.content?.threadId;
179
+ if (typeof returnedThreadId === 'string') {
180
+ this.resolveSessionId(returnedThreadId);
181
+ }
182
+ const contentText = result?.structuredContent?.content
183
+ ?? result?.content?.content
184
+ ?? result?.content;
185
+ if (!turn.sawAssistantOutput && typeof contentText === 'string' && contentText.trim()) {
186
+ emitAssistantMessage(this.cardBuilder, this.callbacks, contentText);
187
+ turn.sawAssistantOutput = true;
188
+ }
189
+ this.endTurn(turn, {
190
+ streamId: turn.streamId,
191
+ sessionId: this.threadId ?? returnedThreadId ?? '',
192
+ success: true,
193
+ });
194
+ // Clear accumulated cards — memory-mode provider has no JSONL to snapshot
195
+ this.cardBuilder.clearCards();
196
+ }
197
+ catch (error) {
198
+ const sessionId = this.threadId ?? '';
199
+ const interrupted = this.closeReason === 'interrupt';
200
+ if (!this.sessionIdResolved) {
201
+ this.sessionIdPromiseReject(error instanceof Error ? error : new Error(String(error)));
202
+ this.sessionIdResolved = true;
203
+ }
204
+ if (!turn.ended && this.closeReason !== 'kill') {
205
+ this.endTurn(turn, {
206
+ streamId: turn.streamId,
207
+ sessionId,
208
+ success: false,
209
+ interrupted,
210
+ error: interrupted
211
+ ? undefined
212
+ : (error instanceof Error ? error.message : 'Codex MCP request failed'),
213
+ });
214
+ }
215
+ if (this.closeReason)
216
+ break;
217
+ }
218
+ finally {
219
+ this.activeTurn = null;
220
+ }
221
+ }
222
+ }
223
+ finally {
224
+ this.running = false;
225
+ await this.close();
226
+ }
227
+ }
228
+ resolveSessionId(sessionId) {
229
+ this.threadId = sessionId;
230
+ this.cardBuilder.updateSessionId(sessionId);
231
+ if (this.sessionIdResolved)
232
+ return;
233
+ this.sessionIdResolved = true;
234
+ this.sessionIdPromiseResolve(sessionId);
235
+ }
236
+ handleCodexEvent(note) {
237
+ const msg = note?.msg;
238
+ if (!msg)
239
+ return;
240
+ const turn = this.activeTurn;
241
+ if (!turn) {
242
+ if (msg.type === 'session_configured' && typeof msg.session_id === 'string') {
243
+ this.resolveSessionId(msg.session_id);
244
+ if (typeof msg.model === 'string') {
245
+ this.callbacks.onModelDetected(msg.model);
246
+ }
247
+ }
248
+ return;
249
+ }
250
+ if (msg.type === 'session_configured' && typeof msg.session_id === 'string') {
251
+ this.resolveSessionId(msg.session_id);
252
+ if (typeof msg.model === 'string') {
253
+ this.callbacks.onModelDetected(msg.model);
254
+ }
255
+ return;
256
+ }
257
+ if (msg.type === 'raw_response_item') {
258
+ this.handleResponseItem(msg.item, turn);
259
+ return;
260
+ }
261
+ if (msg.type === 'warning') {
262
+ const warningText = typeof msg.message === 'string' ? msg.message : '';
263
+ if (warningText) {
264
+ this.callbacks.emitCardEvent(this.cardBuilder.systemMessage(warningText, 'warning'));
265
+ }
266
+ return;
267
+ }
268
+ if (msg.type === 'stream_error') {
269
+ const errorText = typeof msg.message === 'string' ? msg.message : '';
270
+ if (errorText && !errorText.startsWith('Reconnecting...')) {
271
+ this.callbacks.emitCardEvent(this.cardBuilder.systemMessage(errorText, 'warning'));
272
+ }
273
+ return;
274
+ }
275
+ if (msg.type === 'turn_aborted') {
276
+ this.endTurn(turn, {
277
+ streamId: turn.streamId,
278
+ sessionId: this.threadId ?? '',
279
+ success: false,
280
+ interrupted: msg.reason === 'interrupted',
281
+ error: msg.reason === 'interrupted' ? undefined : `Turn aborted: ${msg.reason ?? 'unknown'}`,
282
+ });
283
+ }
284
+ }
285
+ handleResponseItem(item, turn) {
286
+ if (!item || typeof item !== 'object')
287
+ return;
288
+ if (item.type === 'message' && item.role === 'assistant') {
289
+ const blocks = Array.isArray(item.content) ? item.content : [];
290
+ const text = blocks
291
+ .map((block) => {
292
+ if (typeof block?.text === 'string')
293
+ return block.text;
294
+ if (typeof block?.content === 'string')
295
+ return block.content;
296
+ if (typeof block?.value === 'string')
297
+ return block.value;
298
+ return '';
299
+ })
300
+ .filter(Boolean)
301
+ .join('\n\n');
302
+ if (text) {
303
+ emitAssistantMessage(this.cardBuilder, this.callbacks, text);
304
+ turn.sawAssistantOutput = true;
305
+ }
306
+ return;
307
+ }
308
+ if (item.type === 'reasoning') {
309
+ const summaryText = Array.isArray(item.summary)
310
+ ? item.summary.map((entry) => textFromUnknown(entry)).filter(Boolean).join('\n\n')
311
+ : textFromUnknown(item.summary ?? item.text);
312
+ if (summaryText.trim()) {
313
+ this.callbacks.emitCardEvent(this.cardBuilder.thinkingBlock(summaryText));
314
+ }
315
+ return;
316
+ }
317
+ const itemType = typeof item.type === 'string' ? item.type : '';
318
+ const looksLikeToolResult = itemType.endsWith('_result') || itemType.endsWith('_output');
319
+ const looksLikeToolCall = !looksLikeToolResult
320
+ && itemType !== 'message'
321
+ && itemType !== 'reasoning'
322
+ && (itemType.endsWith('_call') || itemType.endsWith('_tool_call') || itemType === 'function_call');
323
+ if (looksLikeToolCall) {
324
+ const toolUseId = typeof item.call_id === 'string'
325
+ ? item.call_id
326
+ : typeof item.id === 'string'
327
+ ? item.id
328
+ : crypto.randomUUID();
329
+ const toolName = typeof item.name === 'string'
330
+ ? item.name
331
+ : itemType;
332
+ const toolInput = typeof item.arguments === 'string'
333
+ ? (safeJsonParse(item.arguments) ?? { arguments: item.arguments })
334
+ : (item.input && typeof item.input === 'object' && !Array.isArray(item.input))
335
+ ? item.input
336
+ : {};
337
+ this.callbacks.emitCardEvent(this.cardBuilder.toolUse(toolName, toolInput, toolUseId));
338
+ return;
339
+ }
340
+ if (looksLikeToolResult) {
341
+ const parentToolUseId = typeof item.call_id === 'string'
342
+ ? item.call_id
343
+ : typeof item.tool_call_id === 'string'
344
+ ? item.tool_call_id
345
+ : undefined;
346
+ if (!parentToolUseId)
347
+ return;
348
+ const resultText = textFromUnknown(item.output ?? item.result ?? item.content ?? item.text);
349
+ const event = this.cardBuilder.toolResult(parentToolUseId, resultText, !!item.is_error);
350
+ if (event) {
351
+ this.callbacks.emitCardEvent(event);
352
+ }
353
+ }
354
+ }
355
+ endTurn(turn, result) {
356
+ if (turn.ended)
357
+ return;
358
+ turn.ended = true;
359
+ this.callbacks.emitStreamEnd(result);
360
+ }
361
+ async close() {
362
+ if (this.closed)
363
+ return;
364
+ this.closed = true;
365
+ try {
366
+ await this.client.close();
367
+ }
368
+ catch {
369
+ // Ignore shutdown errors.
370
+ }
371
+ try {
372
+ await this.transport.close();
373
+ }
374
+ catch {
375
+ // Ignore shutdown errors.
376
+ }
377
+ }
378
+ bindNotifications() {
379
+ this.client.fallbackNotificationHandler = async (notification) => {
380
+ if (notification.method === 'codex/event') {
381
+ this.handleCodexEvent(notification.params);
382
+ }
383
+ };
384
+ }
385
+ }
386
+ export class CodexMcpProvider {
387
+ id = 'codex';
388
+ historyMode = 'memory';
389
+ async startSession(opts, cardBuilder, callbacks) {
390
+ const transport = new StdioClientTransport({
391
+ command: 'codex',
392
+ args: ['mcp-server'],
393
+ });
394
+ const client = new Client({ name: 'quicksave-codex-provider', version: '0.1.0' }, { capabilities: { roots: { listChanged: false } } });
395
+ const session = new CodexMcpSession({
396
+ client,
397
+ transport,
398
+ cardBuilder,
399
+ callbacks,
400
+ approvalPolicy: mapApprovalPolicy(opts.permissionLevel),
401
+ sandboxMode: mapSandboxMode(opts.permissionLevel, opts.sandboxed),
402
+ });
403
+ session.bindNotifications();
404
+ await client.connect(transport);
405
+ session.enqueueInitialTurn({
406
+ prompt: opts.prompt,
407
+ streamId: opts.streamId,
408
+ initial: true,
409
+ cwd: opts.cwd,
410
+ model: opts.model && !opts.model.startsWith('claude-') ? opts.model : undefined,
411
+ developerInstructions: buildCodexDeveloperInstructions(opts),
412
+ });
413
+ const sessionId = await session.waitForSessionId();
414
+ return { sessionId, session };
415
+ }
416
+ async resumeSession(opts, cardBuilder, callbacks) {
417
+ const transport = new StdioClientTransport({
418
+ command: 'codex',
419
+ args: ['mcp-server'],
420
+ });
421
+ const client = new Client({ name: 'quicksave-codex-provider', version: '0.1.0' }, { capabilities: { roots: { listChanged: false } } });
422
+ const session = new CodexMcpSession({
423
+ client,
424
+ transport,
425
+ cardBuilder,
426
+ callbacks,
427
+ approvalPolicy: mapApprovalPolicy(opts.permissionLevel),
428
+ sandboxMode: mapSandboxMode(opts.permissionLevel, opts.sandboxed),
429
+ initialSessionId: opts.sessionId,
430
+ });
431
+ session.bindNotifications();
432
+ await client.connect(transport);
433
+ session.enqueueInitialTurn({
434
+ prompt: opts.prompt,
435
+ streamId: opts.streamId,
436
+ initial: false,
437
+ developerInstructions: buildCodexDeveloperInstructions(opts),
438
+ });
439
+ return { sessionId: await session.waitForSessionId(), session };
440
+ }
441
+ }
442
+ //# sourceMappingURL=codexMcpProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexMcpProvider.js","sourceRoot":"","sources":["../../src/ai/codexMcpProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AA4BjF,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,CAAC,CAAC,MAAiC;YACnC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aACtC,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAI,KAAiC,CAAC,IAAI,CAAC;QAC1D,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAqB,EAAE,SAA4B,EAAE,IAAY;IAC7F,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO;IACzB,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACjD,IAAI,aAAa,EAAE,CAAC;QAClB,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA0C;IACnE,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,mBAAmB;YACtB,OAAO,OAAO,CAAC;QACjB,KAAK,aAAa;YAChB,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC;QACf;YACE,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,KAA0C,EAC1C,SAAkB;IAElB,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC;IACzC,IAAI,SAAS;QAAE,OAAO,iBAAiB,CAAC;IACxC,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,+BAA+B,CAAC,IAA0C;IACjF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,kHAAkH,CAAC,CAAC;IACjI,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,MAAM,eAAe;IACZ,gBAAgB,GAAa,EAAE,CAAC;IAEtB,MAAM,CAAS;IACf,SAAS,CAAuB;IAChC,WAAW,CAAoB;IAC/B,SAAS,CAAoB;IAC7B,cAAc,CAAsB;IACpC,WAAW,CAAmB;IAC9B,KAAK,GAAiB,EAAE,CAAC;IAClC,UAAU,GAAsB,IAAI,CAAC;IACrC,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAG,KAAK,CAAC;IACf,WAAW,GAAgC,IAAI,CAAC;IAChD,uBAAuB,CAA+B;IACtD,sBAAsB,CAA0B;IACvC,gBAAgB,CAAkB;IAC3C,iBAAiB,GAAG,KAAK,CAAC;IAC1B,QAAQ,CAAgB;IAEhC,YAAY,IAQX;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC;YACvC,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,IAAgB;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,gBAAgB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC/E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,MAAM;YACN,QAAQ;YACR,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAG,CAAC;gBACnC,MAAM,IAAI,GAAe,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;gBAChF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7C,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE1C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACxC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;wBAC5C,SAAS,EAAE,IAAI,CAAC,OAAO;4BACrB,CAAC,CAAC;gCACE,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,GAAG,EAAE,IAAI,CAAC,GAAG;gCACb,OAAO,EAAE,IAAI,CAAC,WAAW;gCACzB,iBAAiB,EAAE,IAAI,CAAC,cAAc;gCACtC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC5C,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAChG;4BACH,CAAC,CAAC;gCACE,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAChG;qBACN,CAAQ,CAAC;oBAEV,MAAM,gBAAgB,GAAG,MAAM,EAAE,iBAAiB,EAAE,QAAQ;2BACvD,MAAM,EAAE,QAAQ;2BAChB,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;oBAC/B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;wBACzC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;oBAC1C,CAAC;oBAED,MAAM,WAAW,GAAG,MAAM,EAAE,iBAAiB,EAAE,OAAO;2BACjD,MAAM,EAAE,OAAO,EAAE,OAAO;2BACxB,MAAM,EAAE,OAAO,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;wBACtF,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;wBACpE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBACjC,CAAC;oBAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;wBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,gBAAgB,IAAI,EAAE;wBAClD,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;oBACH,0EAA0E;oBAC1E,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAChC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;oBACtC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC;oBACrD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBAC5B,IAAI,CAAC,sBAAsB,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACvF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAChC,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;wBAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;4BACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,SAAS;4BACT,OAAO,EAAE,KAAK;4BACd,WAAW;4BACX,KAAK,EAAE,WAAW;gCAChB,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;yBAC1E,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,IAAI,CAAC,WAAW;wBAAE,MAAM;gBAC9B,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,SAAiB;QACxC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAEO,gBAAgB,CAAC,IAAS;QAChC,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC5E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACtC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAClC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACrC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;YACvF,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;YACrF,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;gBAC9B,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,aAAa;gBACzC,KAAK,EAAE,GAAG,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE;aAC7F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,IAAS,EAAE,IAAgB;QACpD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO;QAE9C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM;iBAChB,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE;gBAClB,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC,IAAI,CAAC;gBACvD,IAAI,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC,OAAO,CAAC;gBAC7D,IAAI,OAAO,KAAK,EAAE,KAAK,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC,KAAK,CAAC;gBACzD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,IAAI,IAAI,EAAE,CAAC;gBACT,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC7D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACjC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBACvF,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACzF,MAAM,iBAAiB,GAAG,CAAC,mBAAmB;eACzC,QAAQ,KAAK,SAAS;eACtB,QAAQ,KAAK,WAAW;eACxB,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,KAAK,eAAe,CAAC,CAAC;QAErG,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;gBAChD,CAAC,CAAC,IAAI,CAAC,OAAO;gBACd,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;oBAC3B,CAAC,CAAC,IAAI,CAAC,EAAE;oBACT,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAC5C,CAAC,CAAC,IAAI,CAAC,IAAI;gBACX,CAAC,CAAC,QAAQ,CAAC;YACb,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;gBAClD,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5E,CAAC,CAAC,IAAI,CAAC,KAAgC;oBACvC,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;gBACtD,CAAC,CAAC,IAAI,CAAC,OAAO;gBACd,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;oBACrC,CAAC,CAAC,IAAI,CAAC,YAAY;oBACnB,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,CAAC,eAAe;gBAAE,OAAO;YAC7B,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5F,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxF,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,IAAgB,EAAE,MAAqB;QACrD,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,MAAM,CAAC,2BAA2B,GAAG,KAAK,EAAE,YAAY,EAAE,EAAE;YAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IAClB,EAAE,GAAG,OAAgB,CAAC;IACtB,WAAW,GAAG,QAAiB,CAAC;IAEzC,KAAK,CAAC,YAAY,CAChB,IAAsB,EACtB,WAA8B,EAC9B,SAA4B;QAE5B,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;YACzC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,YAAY,CAAC;SACrB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE,EACtD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CACpD,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;YAClC,MAAM;YACN,SAAS;YACT,WAAW;YACX,SAAS;YACT,cAAc,EAAE,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;YACvD,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;SAClE,CAAC,CAAC;QACH,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,kBAAkB,CAAC;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC/E,qBAAqB,EAAE,+BAA+B,CAAC,IAAI,CAAC;SAC7D,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,IAAuB,EACvB,WAA8B,EAC9B,SAA4B;QAE5B,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;YACzC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,CAAC,YAAY,CAAC;SACrB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE,EACtD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CACpD,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;YAClC,MAAM;YACN,SAAS;YACT,WAAW;YACX,SAAS;YACT,cAAc,EAAE,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC;YACvD,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;YACjE,gBAAgB,EAAE,IAAI,CAAC,SAAS;SACjC,CAAC,CAAC;QACH,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,kBAAkB,CAAC;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,KAAK;YACd,qBAAqB,EAAE,+BAA+B,CAAC,IAAI,CAAC;SAC7D,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC;IAClE,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ import type { Thread, ThreadEvent } from '@openai/codex-sdk';
2
+ import type { StreamCardBuilder } from './cardBuilder.js';
3
+ import type { CodingAgentProvider, ProviderCallbacks, ProviderSession, StartSessionOpts, ResumeSessionOpts } from './provider.js';
4
+ interface TurnContext {
5
+ cb: StreamCardBuilder;
6
+ callbacks: ProviderCallbacks;
7
+ streamId: string;
8
+ /** Resolves with thread_id when thread.started is received. */
9
+ onThreadStarted?: (threadId: string) => void;
10
+ }
11
+ /**
12
+ * Consume all events from a Codex runStreamed() call and emit card events.
13
+ * Returns when the event stream is exhausted.
14
+ */
15
+ /** @internal Exported for testing. */
16
+ export declare function consumeCodexStream(events: AsyncGenerator<ThreadEvent>, thread: Thread, ctx: TurnContext, signal?: AbortSignal): Promise<void>;
17
+ export declare class CodexSdkProvider implements CodingAgentProvider {
18
+ readonly id: "codex";
19
+ readonly historyMode: "memory";
20
+ startSession(opts: StartSessionOpts, cardBuilder: StreamCardBuilder, callbacks: ProviderCallbacks): Promise<{
21
+ sessionId: string;
22
+ session: ProviderSession;
23
+ }>;
24
+ resumeSession(opts: ResumeSessionOpts, cardBuilder: StreamCardBuilder, callbacks: ProviderCallbacks): Promise<{
25
+ sessionId: string;
26
+ session: ProviderSession;
27
+ }>;
28
+ /**
29
+ * Run the first turn, awaiting `thread.started` for the sessionId.
30
+ * The rest of the event stream processes in the background.
31
+ */
32
+ private runFirstTurn;
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=codexSdkProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSdkProvider.d.ts","sourceRoot":"","sources":["../../src/ai/codexSdkProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EAKZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,eAAe,CAAC;AAsBvB,UAAU,WAAW;IACnB,EAAE,EAAE,iBAAiB,CAAC;IACtB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED;;;GAGG;AACH,sCAAsC;AACtC,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAuGf;AAqOD,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,QAAQ,CAAC,EAAE,EAAG,OAAO,CAAU;IAC/B,QAAQ,CAAC,WAAW,EAAG,QAAQ,CAAU;IAEnC,YAAY,CAChB,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC;IAmBrD,aAAa,CACjB,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC;IAmB3D;;;OAGG;IACH,OAAO,CAAC,YAAY;CAmErB"}