@sumicom/quicksave 0.6.0 → 0.6.2

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 (122) hide show
  1. package/dist/ai/asyncQueue.d.ts +7 -6
  2. package/dist/ai/asyncQueue.d.ts.map +1 -1
  3. package/dist/ai/asyncQueue.js +31 -21
  4. package/dist/ai/asyncQueue.js.map +1 -1
  5. package/dist/ai/cardBuilder.d.ts +22 -2
  6. package/dist/ai/cardBuilder.d.ts.map +1 -1
  7. package/dist/ai/cardBuilder.js +275 -30
  8. package/dist/ai/cardBuilder.js.map +1 -1
  9. package/dist/ai/claudeCliProvider.d.ts +21 -0
  10. package/dist/ai/claudeCliProvider.d.ts.map +1 -0
  11. package/dist/ai/claudeCliProvider.js +527 -0
  12. package/dist/ai/claudeCliProvider.js.map +1 -0
  13. package/dist/ai/claudeCodeProvider.d.ts +18 -0
  14. package/dist/ai/claudeCodeProvider.d.ts.map +1 -0
  15. package/dist/ai/claudeCodeProvider.js +30 -0
  16. package/dist/ai/claudeCodeProvider.js.map +1 -0
  17. package/dist/ai/claudeSdkProvider.d.ts +20 -0
  18. package/dist/ai/claudeSdkProvider.d.ts.map +1 -0
  19. package/dist/ai/claudeSdkProvider.js +428 -0
  20. package/dist/ai/claudeSdkProvider.js.map +1 -0
  21. package/dist/ai/codexMcpProvider.d.ts +15 -0
  22. package/dist/ai/codexMcpProvider.d.ts.map +1 -0
  23. package/dist/ai/codexMcpProvider.js +442 -0
  24. package/dist/ai/codexMcpProvider.js.map +1 -0
  25. package/dist/ai/codexSdkProvider.d.ts +35 -0
  26. package/dist/ai/codexSdkProvider.d.ts.map +1 -0
  27. package/dist/ai/codexSdkProvider.js +422 -0
  28. package/dist/ai/codexSdkProvider.js.map +1 -0
  29. package/dist/ai/commitSummary.d.ts +4 -0
  30. package/dist/ai/commitSummary.d.ts.map +1 -1
  31. package/dist/ai/commitSummary.js +80 -40
  32. package/dist/ai/commitSummary.js.map +1 -1
  33. package/dist/ai/debugLogger.d.ts +24 -0
  34. package/dist/ai/debugLogger.d.ts.map +1 -0
  35. package/dist/ai/debugLogger.js +55 -0
  36. package/dist/ai/debugLogger.js.map +1 -0
  37. package/dist/ai/provider.d.ts +57 -0
  38. package/dist/ai/provider.d.ts.map +1 -0
  39. package/dist/ai/provider.js +2 -0
  40. package/dist/ai/provider.js.map +1 -0
  41. package/dist/ai/sandboxMcp.d.ts +12 -0
  42. package/dist/ai/sandboxMcp.d.ts.map +1 -0
  43. package/dist/ai/sandboxMcp.js +12 -0
  44. package/dist/ai/sandboxMcp.js.map +1 -0
  45. package/dist/ai/sandboxMcpStdio.d.ts +16 -0
  46. package/dist/ai/sandboxMcpStdio.d.ts.map +1 -0
  47. package/dist/ai/sandboxMcpStdio.js +127 -0
  48. package/dist/ai/sandboxMcpStdio.js.map +1 -0
  49. package/dist/ai/sessionManager.d.ts +105 -0
  50. package/dist/ai/sessionManager.d.ts.map +1 -0
  51. package/dist/ai/sessionManager.js +716 -0
  52. package/dist/ai/sessionManager.js.map +1 -0
  53. package/dist/ai/sessionRegistry.d.ts +28 -0
  54. package/dist/ai/sessionRegistry.d.ts.map +1 -0
  55. package/dist/ai/sessionRegistry.js +148 -0
  56. package/dist/ai/sessionRegistry.js.map +1 -0
  57. package/dist/config.d.ts +1 -0
  58. package/dist/config.d.ts.map +1 -1
  59. package/dist/config.js +12 -0
  60. package/dist/config.js.map +1 -1
  61. package/dist/connection/connection.d.ts +1 -0
  62. package/dist/connection/connection.d.ts.map +1 -1
  63. package/dist/connection/connection.js +19 -1
  64. package/dist/connection/connection.js.map +1 -1
  65. package/dist/git/operations.d.ts +26 -1
  66. package/dist/git/operations.d.ts.map +1 -1
  67. package/dist/git/operations.js +83 -2
  68. package/dist/git/operations.js.map +1 -1
  69. package/dist/handlers/messageHandler.d.ts +24 -3
  70. package/dist/handlers/messageHandler.d.ts.map +1 -1
  71. package/dist/handlers/messageHandler.js +378 -24
  72. package/dist/handlers/messageHandler.js.map +1 -1
  73. package/dist/index.js +23 -40
  74. package/dist/index.js.map +1 -1
  75. package/dist/service/debugHttpServer.d.ts +27 -0
  76. package/dist/service/debugHttpServer.d.ts.map +1 -0
  77. package/dist/service/debugHttpServer.js +189 -0
  78. package/dist/service/debugHttpServer.js.map +1 -0
  79. package/dist/service/ensureDaemon.d.ts.map +1 -1
  80. package/dist/service/ensureDaemon.js +15 -2
  81. package/dist/service/ensureDaemon.js.map +1 -1
  82. package/dist/service/ipcClient.js +1 -1
  83. package/dist/service/run.d.ts.map +1 -1
  84. package/dist/service/run.js +42 -15
  85. package/dist/service/run.js.map +1 -1
  86. package/dist/service/singleton.d.ts +4 -0
  87. package/dist/service/singleton.d.ts.map +1 -1
  88. package/dist/service/singleton.js +28 -2
  89. package/dist/service/singleton.js.map +1 -1
  90. package/package.json +7 -3
  91. package/dist/ai/asyncQueue.test.d.ts +0 -2
  92. package/dist/ai/asyncQueue.test.d.ts.map +0 -1
  93. package/dist/ai/asyncQueue.test.js +0 -56
  94. package/dist/ai/asyncQueue.test.js.map +0 -1
  95. package/dist/ai/claudeCodeService.d.ts +0 -122
  96. package/dist/ai/claudeCodeService.d.ts.map +0 -1
  97. package/dist/ai/claudeCodeService.js +0 -869
  98. package/dist/ai/claudeCodeService.js.map +0 -1
  99. package/dist/ai/sessionStore.test.d.ts +0 -2
  100. package/dist/ai/sessionStore.test.d.ts.map +0 -1
  101. package/dist/ai/sessionStore.test.js +0 -99
  102. package/dist/ai/sessionStore.test.js.map +0 -1
  103. package/dist/connection/pubsub.test.d.ts +0 -2
  104. package/dist/connection/pubsub.test.d.ts.map +0 -1
  105. package/dist/connection/pubsub.test.js +0 -96
  106. package/dist/connection/pubsub.test.js.map +0 -1
  107. package/dist/git/operations.test.d.ts +0 -2
  108. package/dist/git/operations.test.d.ts.map +0 -1
  109. package/dist/git/operations.test.js +0 -300
  110. package/dist/git/operations.test.js.map +0 -1
  111. package/dist/handlers/messageHandler.test.d.ts +0 -2
  112. package/dist/handlers/messageHandler.test.d.ts.map +0 -1
  113. package/dist/handlers/messageHandler.test.js +0 -361
  114. package/dist/handlers/messageHandler.test.js.map +0 -1
  115. package/dist/service/ipc.test.d.ts +0 -2
  116. package/dist/service/ipc.test.d.ts.map +0 -1
  117. package/dist/service/ipc.test.js +0 -140
  118. package/dist/service/ipc.test.js.map +0 -1
  119. package/dist/service/singleton.test.d.ts +0 -2
  120. package/dist/service/singleton.test.d.ts.map +0 -1
  121. package/dist/service/singleton.test.js +0 -39
  122. package/dist/service/singleton.test.js.map +0 -1
@@ -0,0 +1,422 @@
1
+ import { Codex } from '@openai/codex-sdk';
2
+ // ── Mapping helpers ──
3
+ function mapApprovalPolicy(level) {
4
+ switch (level) {
5
+ case 'bypassPermissions': return 'never';
6
+ case 'acceptEdits': return 'on-request';
7
+ case 'plan':
8
+ case 'default':
9
+ default: return 'untrusted';
10
+ }
11
+ }
12
+ function mapSandboxMode(level, sandboxed) {
13
+ if (level === 'plan')
14
+ return 'read-only';
15
+ if (sandboxed)
16
+ return 'workspace-write';
17
+ return 'danger-full-access';
18
+ }
19
+ /**
20
+ * Consume all events from a Codex runStreamed() call and emit card events.
21
+ * Returns when the event stream is exhausted.
22
+ */
23
+ /** @internal Exported for testing. */
24
+ export async function consumeCodexStream(events, thread, ctx, signal) {
25
+ const { cb, callbacks, streamId } = ctx;
26
+ const emitCard = (event) => callbacks.emitCardEvent(event);
27
+ let textBuffer = '';
28
+ let bufferTimer = null;
29
+ const tracker = { lastAssistantText: '', lastReasoningText: '' };
30
+ let turnEndEmitted = false;
31
+ const flushText = () => {
32
+ if (textBuffer) {
33
+ emitCard(cb.assistantText(textBuffer));
34
+ textBuffer = '';
35
+ }
36
+ if (bufferTimer) {
37
+ clearTimeout(bufferTimer);
38
+ bufferTimer = null;
39
+ }
40
+ };
41
+ const bufferText = (text) => {
42
+ textBuffer += text;
43
+ if (!bufferTimer) {
44
+ bufferTimer = setTimeout(flushText, 150);
45
+ }
46
+ if (textBuffer.length > 2048) {
47
+ flushText();
48
+ }
49
+ };
50
+ const emitStreamEnd = (end) => {
51
+ if (turnEndEmitted)
52
+ return;
53
+ turnEndEmitted = true;
54
+ callbacks.emitStreamEnd(end);
55
+ };
56
+ try {
57
+ for await (const event of events) {
58
+ if (signal?.aborted)
59
+ break;
60
+ switch (event.type) {
61
+ case 'thread.started':
62
+ cb.updateSessionId(event.thread_id);
63
+ ctx.onThreadStarted?.(event.thread_id);
64
+ break;
65
+ case 'turn.started':
66
+ break;
67
+ case 'turn.completed': {
68
+ flushText();
69
+ const fin = cb.finalizeAssistantText();
70
+ if (fin)
71
+ emitCard(fin);
72
+ emitStreamEnd({
73
+ streamId,
74
+ sessionId: thread.id ?? '',
75
+ success: true,
76
+ tokenUsage: event.usage
77
+ ? { input: event.usage.input_tokens, output: event.usage.output_tokens }
78
+ : undefined,
79
+ });
80
+ break;
81
+ }
82
+ case 'turn.failed': {
83
+ flushText();
84
+ const fin = cb.finalizeAssistantText();
85
+ if (fin)
86
+ emitCard(fin);
87
+ emitStreamEnd({
88
+ streamId,
89
+ sessionId: thread.id ?? '',
90
+ success: false,
91
+ error: event.error.message,
92
+ });
93
+ break;
94
+ }
95
+ case 'item.started':
96
+ routeItemStarted(event.item, cb, emitCard, flushText, bufferText, tracker);
97
+ break;
98
+ case 'item.updated':
99
+ routeItemUpdated(event.item, cb, emitCard, bufferText, tracker);
100
+ break;
101
+ case 'item.completed':
102
+ flushText();
103
+ routeItemCompleted(event.item, cb, emitCard);
104
+ break;
105
+ case 'error':
106
+ emitCard(cb.systemMessage(event.message, 'error'));
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ finally {
112
+ if (bufferTimer)
113
+ clearTimeout(bufferTimer);
114
+ }
115
+ // If the stream ended without turn.completed/turn.failed, emit a success end
116
+ if (!turnEndEmitted) {
117
+ flushText();
118
+ const fin = cb.finalizeAssistantText();
119
+ if (fin)
120
+ emitCard(fin);
121
+ emitStreamEnd({
122
+ streamId,
123
+ sessionId: thread.id ?? '',
124
+ success: true,
125
+ });
126
+ }
127
+ }
128
+ function routeItemStarted(item, cb, emitCard, flushText, bufferText, tracker) {
129
+ switch (item.type) {
130
+ case 'reasoning':
131
+ tracker.lastReasoningText = item.text;
132
+ if (item.text)
133
+ emitCard(cb.thinkingBlock(item.text));
134
+ break;
135
+ case 'agent_message':
136
+ tracker.lastAssistantText = item.text;
137
+ if (item.text)
138
+ bufferText(item.text);
139
+ break;
140
+ case 'command_execution':
141
+ flushText();
142
+ emitCard(cb.toolUse('Bash', { command: item.command }, item.id));
143
+ break;
144
+ case 'file_change': {
145
+ flushText();
146
+ const paths = item.changes.map(c => c.path);
147
+ const kinds = item.changes.map(c => c.kind);
148
+ const toolName = kinds.every(k => k === 'add') ? 'Write' : 'Edit';
149
+ emitCard(cb.toolUse(toolName, { files: paths }, item.id));
150
+ break;
151
+ }
152
+ case 'mcp_tool_call':
153
+ flushText();
154
+ emitCard(cb.toolUse(`${item.server}:${item.tool}`, item.arguments ?? {}, item.id));
155
+ break;
156
+ case 'web_search':
157
+ flushText();
158
+ emitCard(cb.toolUse('WebSearch', { query: item.query }, item.id));
159
+ break;
160
+ case 'error':
161
+ emitCard(cb.systemMessage(item.message, 'error'));
162
+ break;
163
+ }
164
+ }
165
+ function routeItemUpdated(item, cb, emitCard, bufferText, tracker) {
166
+ switch (item.type) {
167
+ case 'agent_message': {
168
+ const delta = item.text.slice(tracker.lastAssistantText.length);
169
+ tracker.lastAssistantText = item.text;
170
+ if (delta)
171
+ bufferText(delta);
172
+ break;
173
+ }
174
+ case 'command_execution': {
175
+ const cardEvt = cb.toolResult(item.id, item.aggregated_output, item.status === 'failed');
176
+ if (cardEvt)
177
+ emitCard(cardEvt);
178
+ break;
179
+ }
180
+ case 'reasoning': {
181
+ const delta = item.text.slice(tracker.lastReasoningText.length);
182
+ tracker.lastReasoningText = item.text;
183
+ if (delta.trim())
184
+ emitCard(cb.thinkingBlock(delta));
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ function routeItemCompleted(item, cb, emitCard) {
190
+ switch (item.type) {
191
+ case 'agent_message': {
192
+ // Finalize streaming text
193
+ const fin = cb.finalizeAssistantText();
194
+ if (fin)
195
+ emitCard(fin);
196
+ break;
197
+ }
198
+ case 'command_execution': {
199
+ const resultText = item.aggregated_output
200
+ + (item.exit_code != null ? `\n[exit code: ${item.exit_code}]` : '');
201
+ const cardEvt = cb.toolResult(item.id, resultText, item.status === 'failed');
202
+ if (cardEvt)
203
+ emitCard(cardEvt);
204
+ break;
205
+ }
206
+ case 'file_change': {
207
+ const resultText = item.changes.map(c => `${c.kind}: ${c.path}`).join('\n');
208
+ const cardEvt = cb.toolResult(item.id, resultText, item.status === 'failed');
209
+ if (cardEvt)
210
+ emitCard(cardEvt);
211
+ break;
212
+ }
213
+ case 'mcp_tool_call': {
214
+ let resultText = '';
215
+ if (item.error) {
216
+ resultText = `Error: ${item.error.message}`;
217
+ }
218
+ else if (item.result) {
219
+ resultText = item.result.content
220
+ ?.map((block) => block.text ?? JSON.stringify(block))
221
+ .join('\n') ?? '';
222
+ }
223
+ const cardEvt = cb.toolResult(item.id, resultText, item.status === 'failed');
224
+ if (cardEvt)
225
+ emitCard(cardEvt);
226
+ break;
227
+ }
228
+ case 'web_search': {
229
+ const cardEvt = cb.toolResult(item.id, `Search: ${item.query}`, false);
230
+ if (cardEvt)
231
+ emitCard(cardEvt);
232
+ break;
233
+ }
234
+ }
235
+ }
236
+ // ============================================================================
237
+ // CodexSdkSession — wraps a Codex Thread for the ProviderSession interface
238
+ // ============================================================================
239
+ class CodexSdkSession {
240
+ pendingStreamIds = [];
241
+ thread;
242
+ abortController = null;
243
+ cardBuilder;
244
+ callbacks;
245
+ closed = false;
246
+ constructor(args) {
247
+ this.thread = args.thread;
248
+ this.cardBuilder = args.cardBuilder;
249
+ this.callbacks = args.callbacks;
250
+ }
251
+ get alive() {
252
+ return !this.closed;
253
+ }
254
+ sendUserMessage(prompt) {
255
+ if (this.closed)
256
+ return;
257
+ const streamId = this.pendingStreamIds.shift() ?? `codex-stream-${Date.now()}`;
258
+ void this.runTurn(prompt, streamId);
259
+ }
260
+ interrupt() {
261
+ if (this.abortController) {
262
+ this.abortController.abort();
263
+ this.abortController = null;
264
+ }
265
+ }
266
+ kill() {
267
+ this.closed = true;
268
+ this.interrupt();
269
+ }
270
+ /** Expose abort controller and streaming state for the initial turn (set from outside). */
271
+ setAbortController(ac) { this.abortController = ac; }
272
+ clearAbortController() { this.abortController = null; }
273
+ async runTurn(prompt, streamId) {
274
+ if (this.closed)
275
+ return;
276
+ this.abortController = new AbortController();
277
+ const cb = this.cardBuilder;
278
+ cb.startNewTurn(streamId);
279
+ cb.userMessage(prompt);
280
+ try {
281
+ const streamed = await this.thread.runStreamed(prompt, {
282
+ signal: this.abortController.signal,
283
+ });
284
+ await consumeCodexStream(streamed.events, this.thread, {
285
+ cb,
286
+ callbacks: this.callbacks,
287
+ streamId,
288
+ }, this.abortController.signal);
289
+ }
290
+ catch (error) {
291
+ const aborted = this.abortController?.signal.aborted;
292
+ const sessionId = this.thread.id ?? '';
293
+ const emitCard = (e) => this.callbacks.emitCardEvent(e);
294
+ if (aborted) {
295
+ emitCard(cb.systemMessage('User interrupted'));
296
+ this.callbacks.emitStreamEnd({
297
+ streamId, sessionId, success: false, interrupted: true,
298
+ });
299
+ }
300
+ else {
301
+ const msg = error instanceof Error ? error.message : 'Codex turn failed';
302
+ console.error(`[codex-sdk] turn error:`, msg);
303
+ this.callbacks.emitStreamEnd({
304
+ streamId, sessionId, success: false, error: msg,
305
+ });
306
+ }
307
+ }
308
+ finally {
309
+ this.abortController = null;
310
+ await cb.persistCards().catch((err) => {
311
+ console.error('[codex-sdk] failed to persist cards:', err);
312
+ });
313
+ cb.clearCards();
314
+ }
315
+ }
316
+ }
317
+ // ============================================================================
318
+ // CodexSdkProvider — implements CodingAgentProvider via @openai/codex-sdk
319
+ // ============================================================================
320
+ export class CodexSdkProvider {
321
+ id = 'codex';
322
+ historyMode = 'memory';
323
+ async startSession(opts, cardBuilder, callbacks) {
324
+ const codex = new Codex({ apiKey: process.env.OPENAI_API_KEY });
325
+ const threadOptions = buildThreadOptions(opts);
326
+ const thread = codex.startThread(threadOptions);
327
+ const session = new CodexSdkSession({
328
+ thread,
329
+ cardBuilder,
330
+ callbacks,
331
+ });
332
+ // Run the first turn, waiting for thread.started to get the sessionId
333
+ const sessionId = await this.runFirstTurn(thread, opts.prompt, opts.streamId, session, cardBuilder, callbacks);
334
+ return { sessionId, session };
335
+ }
336
+ async resumeSession(opts, cardBuilder, callbacks) {
337
+ const codex = new Codex({ apiKey: process.env.OPENAI_API_KEY });
338
+ const threadOptions = buildThreadOptions(opts);
339
+ const thread = codex.resumeThread(opts.sessionId, threadOptions);
340
+ cardBuilder.updateSessionId(opts.sessionId);
341
+ const session = new CodexSdkSession({
342
+ thread,
343
+ cardBuilder,
344
+ callbacks,
345
+ });
346
+ // Already have sessionId — fire and forget
347
+ session.sendUserMessage(opts.prompt);
348
+ return { sessionId: opts.sessionId, session };
349
+ }
350
+ /**
351
+ * Run the first turn, awaiting `thread.started` for the sessionId.
352
+ * The rest of the event stream processes in the background.
353
+ */
354
+ runFirstTurn(thread, prompt, streamId, session, cardBuilder, callbacks) {
355
+ return new Promise((resolve, reject) => {
356
+ const timeout = setTimeout(() => {
357
+ reject(new Error('Timeout waiting for Codex thread.started event'));
358
+ }, 30_000);
359
+ let resolved = false;
360
+ const ac = new AbortController();
361
+ session.setAbortController(ac);
362
+ cardBuilder.startNewTurn(streamId);
363
+ cardBuilder.userMessage(prompt);
364
+ (async () => {
365
+ try {
366
+ const streamed = await thread.runStreamed(prompt, { signal: ac.signal });
367
+ await consumeCodexStream(streamed.events, thread, {
368
+ cb: cardBuilder,
369
+ callbacks,
370
+ streamId,
371
+ onThreadStarted: (threadId) => {
372
+ if (!resolved) {
373
+ resolved = true;
374
+ clearTimeout(timeout);
375
+ resolve(threadId);
376
+ }
377
+ },
378
+ }, ac.signal);
379
+ }
380
+ catch (error) {
381
+ if (!resolved) {
382
+ clearTimeout(timeout);
383
+ reject(error);
384
+ return;
385
+ }
386
+ // Already resolved — emit error to the stream
387
+ const msg = error instanceof Error ? error.message : 'Codex turn failed';
388
+ console.error(`[codex-sdk] initial turn error:`, msg);
389
+ callbacks.emitStreamEnd({
390
+ streamId,
391
+ sessionId: thread.id ?? '',
392
+ success: false,
393
+ error: msg,
394
+ });
395
+ }
396
+ finally {
397
+ session.clearAbortController();
398
+ await cardBuilder.persistCards().catch((err) => {
399
+ console.error('[codex-sdk] failed to persist cards:', err);
400
+ });
401
+ cardBuilder.clearCards();
402
+ // If thread.started never arrived but thread.id was set by the SDK
403
+ if (!resolved) {
404
+ clearTimeout(timeout);
405
+ resolve(thread.id ?? `codex-${Date.now()}`);
406
+ }
407
+ }
408
+ })();
409
+ });
410
+ }
411
+ }
412
+ function buildThreadOptions(opts) {
413
+ const model = 'model' in opts ? opts.model : undefined;
414
+ return {
415
+ model: model && !model.startsWith('claude-') ? model : undefined,
416
+ workingDirectory: opts.cwd,
417
+ sandboxMode: mapSandboxMode(opts.permissionLevel, opts.sandboxed),
418
+ approvalPolicy: mapApprovalPolicy(opts.permissionLevel),
419
+ skipGitRepoCheck: true,
420
+ };
421
+ }
422
+ //# sourceMappingURL=codexSdkProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codexSdkProvider.js","sourceRoot":"","sources":["../../src/ai/codexSdkProvider.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,10 @@ export interface GenerateSummaryOptions {
3
3
  diffs: FileDiff[];
4
4
  context?: string;
5
5
  model?: ClaudeModel;
6
+ recentCommits?: string[];
7
+ branchName?: string;
8
+ conventions?: string;
9
+ attribution?: boolean;
6
10
  }
7
11
  export interface GenerateSummaryResult {
8
12
  summary: string;
@@ -1 +1 @@
1
- {"version":3,"file":"commitSummary.d.ts","sourceRoot":"","sources":["../../src/ai/commitSummary.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAeD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,eAAe,CAAqD;gBAEhE,MAAM,EAAE,MAAM;IAIpB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAoCxE,iBAAiB;IAyB/B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,aAAa;CAyBtB"}
1
+ {"version":3,"file":"commitSummary.d.ts","sourceRoot":"","sources":["../../src/ai/commitSummary.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAkCD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,eAAe,CAAqD;gBAEhE,MAAM,EAAE,MAAM;IAIpB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAyCxE,iBAAiB;IAmC/B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,WAAW;IAwCnB,OAAO,CAAC,aAAa;CAmCtB"}
@@ -1,6 +1,24 @@
1
1
  import Anthropic from '@anthropic-ai/sdk';
2
2
  import { createHash } from 'crypto';
3
3
  const DEFAULT_MODEL = 'claude-haiku-4-5';
4
+ const COMMIT_MESSAGE_TOOL = {
5
+ name: 'commit_message',
6
+ description: 'Generate a structured git commit message',
7
+ input_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ summary: {
11
+ type: 'string',
12
+ description: 'The commit summary line (under 72 characters, conventional commit format)',
13
+ },
14
+ description: {
15
+ type: 'string',
16
+ description: 'Optional extended description for complex changes',
17
+ },
18
+ },
19
+ required: ['summary'],
20
+ },
21
+ };
4
22
  // Max characters per file diff for AI generation (roughly 1KB)
5
23
  const MAX_DIFF_CHARS_PER_FILE = 1000;
6
24
  // Max total characters for all diffs combined
@@ -15,12 +33,12 @@ export class CommitSummaryService {
15
33
  this.client = new Anthropic({ apiKey });
16
34
  }
17
35
  async generateSummary(options) {
18
- const { diffs, context, model = DEFAULT_MODEL } = options;
36
+ const { diffs, context, model = DEFAULT_MODEL, recentCommits, branchName, conventions, attribution = true } = options;
19
37
  const diffText = this.formatDiffsForPrompt(diffs);
20
38
  if (!diffText.trim()) {
21
39
  return { summary: 'Update files' };
22
40
  }
23
- // Generate cache key from diff content and model
41
+ // Generate cache key from diff content, model, and context
24
42
  const cacheKey = this.getCacheKey(diffText, context, model);
25
43
  // Check cache first
26
44
  const cached = this.getFromCache(cacheKey);
@@ -34,7 +52,12 @@ export class CommitSummaryService {
34
52
  return { ...result, cached: true };
35
53
  }
36
54
  // Create the request promise and store it
37
- const requestPromise = this.executeGeneration(diffText, context, model, cacheKey);
55
+ const requestPromise = this.executeGeneration(diffText, context, model, cacheKey, {
56
+ recentCommits,
57
+ branchName,
58
+ conventions,
59
+ attribution,
60
+ });
38
61
  this.pendingRequests.set(cacheKey, requestPromise);
39
62
  try {
40
63
  return await requestPromise;
@@ -43,14 +66,22 @@ export class CommitSummaryService {
43
66
  this.pendingRequests.delete(cacheKey);
44
67
  }
45
68
  }
46
- async executeGeneration(diffText, context, model, cacheKey) {
47
- const prompt = this.buildPrompt(diffText, context);
69
+ async executeGeneration(diffText, context, model, cacheKey, extra) {
70
+ const prompt = this.buildPrompt(diffText, context, extra);
48
71
  const response = await this.client.messages.create({
49
72
  model,
50
73
  max_tokens: 500,
51
74
  messages: [{ role: 'user', content: prompt }],
75
+ tools: [COMMIT_MESSAGE_TOOL],
76
+ tool_choice: { type: 'tool', name: 'commit_message' },
52
77
  });
53
78
  const result = this.parseResponse(response);
79
+ if (extra.attribution !== false) {
80
+ const aiTrailer = 'Commit-message-by: Quicksave AI <save@quicksave.dev>';
81
+ result.description = result.description
82
+ ? `${result.description}\n\n${aiTrailer}`
83
+ : aiTrailer;
84
+ }
54
85
  // Store in cache
55
86
  this.cache.set(cacheKey, {
56
87
  result,
@@ -98,48 +129,57 @@ export class CommitSummaryService {
98
129
  }
99
130
  return formattedDiffs.join('\n\n---\n\n');
100
131
  }
101
- buildPrompt(diffText, context) {
102
- return `You are a helpful assistant that generates concise, descriptive git commit messages.
103
-
104
- Analyze the following git diff and generate a commit message following these guidelines:
105
- - Use conventional commit format when appropriate (feat:, fix:, docs:, refactor:, etc.)
106
- - Keep the summary line under 72 characters
107
- - Focus on WHAT changed and WHY, not HOW
108
- - Be specific but concise
109
-
110
- ${context ? `Additional context from the user: ${context}\n\n` : ''}
111
- Git diff:
112
- \`\`\`
113
- ${diffText}
114
- \`\`\`
115
-
116
- Respond in this exact JSON format:
117
- {
118
- "summary": "the commit summary line",
119
- "description": "optional extended description if the changes are complex"
120
- }`;
132
+ buildPrompt(diffText, context, extra) {
133
+ const sections = [
134
+ 'Generate a concise, descriptive git commit message for the following changes.',
135
+ '',
136
+ 'Guidelines:',
137
+ '- Use conventional commit format (feat:, fix:, docs:, refactor:, chore:, test:, style:, perf:, ci:, build:)',
138
+ '- Keep the summary line under 72 characters',
139
+ '- Focus on WHAT changed and WHY, not HOW',
140
+ '- Be specific but concise',
141
+ ];
142
+ if (extra?.conventions) {
143
+ sections.push('', 'Project commit conventions:', extra.conventions);
144
+ }
145
+ if (extra?.recentCommits?.length) {
146
+ sections.push('', 'Recent commits (match this style):', ...extra.recentCommits.map((msg) => `- ${msg}`));
147
+ }
148
+ if (extra?.branchName) {
149
+ sections.push('', `Branch: ${extra.branchName}`);
150
+ }
151
+ if (context) {
152
+ sections.push('', `User context: ${context}`);
153
+ }
154
+ sections.push('', 'Git diff:', '```', diffText, '```');
155
+ return sections.join('\n');
121
156
  }
122
157
  parseResponse(response) {
123
- const content = response.content[0];
124
- if (content.type !== 'text') {
125
- throw new Error('Unexpected response format');
126
- }
127
158
  const tokenUsage = {
128
159
  inputTokens: response.usage.input_tokens,
129
160
  outputTokens: response.usage.output_tokens,
130
161
  };
131
- // Parse JSON from response
132
- const jsonMatch = content.text.match(/\{[\s\S]*\}/);
133
- if (!jsonMatch) {
134
- // Fallback: use the raw text as summary
135
- return { summary: content.text.trim().slice(0, 72), tokenUsage };
162
+ // Extract from tool_use block (structured output)
163
+ const toolUse = response.content.find((block) => block.type === 'tool_use');
164
+ if (toolUse) {
165
+ const input = toolUse.input;
166
+ return {
167
+ summary: input.summary || 'Update code',
168
+ description: input.description,
169
+ tokenUsage,
170
+ };
136
171
  }
137
- const parsed = JSON.parse(jsonMatch[0]);
138
- return {
139
- summary: parsed.summary || 'Update code',
140
- description: parsed.description,
141
- tokenUsage,
142
- };
172
+ // Fallback: parse from text if tool_use not present
173
+ const textBlock = response.content.find((block) => block.type === 'text');
174
+ if (textBlock) {
175
+ const jsonMatch = textBlock.text.match(/\{[\s\S]*\}/);
176
+ if (jsonMatch) {
177
+ const parsed = JSON.parse(jsonMatch[0]);
178
+ return { summary: parsed.summary || 'Update code', description: parsed.description, tokenUsage };
179
+ }
180
+ return { summary: textBlock.text.trim().slice(0, 72), tokenUsage };
181
+ }
182
+ return { summary: 'Update code', tokenUsage };
143
183
  }
144
184
  }
145
185
  //# sourceMappingURL=commitSummary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commitSummary.js","sourceRoot":"","sources":["../../src/ai/commitSummary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commitSummary.js","sourceRoot":"","sources":["../../src/ai/commitSummary.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAyBpC,MAAM,aAAa,GAAgB,kBAAkB,CAAC;AAEtD,MAAM,mBAAmB,GAAmB;IAC1C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,0CAA0C;IACvD,YAAY,EAAE;QACZ,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2EAA2E;aACzF;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mDAAmD;aACjE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AACF,+DAA+D;AAC/D,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,8CAA8C;AAC9C,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,uBAAuB;AACvB,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,MAAM,OAAO,oBAAoB;IACvB,MAAM,CAAY;IAClB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,eAAe,GAAG,IAAI,GAAG,EAA0C,CAAC;IAE5E,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA+B;QACnD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAEtH,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAElD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QACrC,CAAC;QAED,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAE5D,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,oEAAoE;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC7B,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,0CAA0C;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;YAChF,aAAa;YACb,UAAU;YACV,WAAW;YACX,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,OAAO,MAAM,cAAc,CAAC;QAC9B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,QAAgB,EAChB,OAA2B,EAC3B,KAAkB,EAClB,QAAgB,EAChB,KAAqG;QAErG,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAE1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjD,KAAK;YACL,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7C,KAAK,EAAE,CAAC,mBAAmB,CAAC;YAC5B,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE;SACtD,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,sDAAsD,CAAC;YACzE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;gBACrC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,OAAO,SAAS,EAAE;gBACzC,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;YACvB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,QAAgB,EAAE,OAA2B,EAAE,KAAkB;QACnF,MAAM,OAAO,GAAG,GAAG,KAAK,IAAI,OAAO,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;QACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,gCAAgC;QAChC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAEO,oBAAoB,CAAC,KAAiB;QAC5C,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,cAAc,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC;gBACzD,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjE,IAAI,WAAW,GAAG,YAAY,CAAC;YAE/B,wCAAwC;YACxC,IAAI,WAAW,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBACjD,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,GAAG,mBAAmB,CAAC;YACpF,CAAC;YAED,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAEvD,gDAAgD;YAChD,IAAI,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC;gBACzD,cAAc,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,aAAa,CAAC,CAAC;gBAClF,MAAM;YACR,CAAC;YAED,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC/B,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC;QACjC,CAAC;QAED,OAAO,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;IAEO,WAAW,CACjB,QAAgB,EAChB,OAAgB,EAChB,KAA+E;QAE/E,MAAM,QAAQ,GAAa;YACzB,+EAA+E;YAC/E,EAAE;YACF,aAAa;YACb,6GAA6G;YAC7G,6CAA6C;YAC7C,0CAA0C;YAC1C,2BAA2B;SAC5B,CAAC;QAEF,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,6BAA6B,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CACX,EAAE,EACF,oCAAoC,EACpC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,CAChD,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,EAAE,UAAU,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,iBAAiB,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEvD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,aAAa,CAAC,QAA2B;QAC/C,MAAM,UAAU,GAAe;YAC7B,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;YACxC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;SAC3C,CAAC;QAEF,kDAAkD;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,KAAK,EAAmC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CACtE,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,OAAO,CAAC,KAAkD,CAAC;YACzE,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,aAAa;gBACvC,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,UAAU;aACX,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CACrC,CAAC,KAAK,EAAgC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAC/D,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACtD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;YACnG,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;QACrE,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;IAChD,CAAC;CACF"}