ghcralph 0.1.2 → 0.1.4

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 (39) hide show
  1. package/README.md +23 -16
  2. package/dist/commands/run.d.ts.map +1 -1
  3. package/dist/commands/run.js +66 -19
  4. package/dist/commands/run.js.map +1 -1
  5. package/dist/core/action-executor.d.ts +13 -0
  6. package/dist/core/action-executor.d.ts.map +1 -1
  7. package/dist/core/action-executor.js +32 -0
  8. package/dist/core/action-executor.js.map +1 -1
  9. package/dist/core/checkpoint-manager.d.ts +50 -11
  10. package/dist/core/checkpoint-manager.d.ts.map +1 -1
  11. package/dist/core/checkpoint-manager.js +287 -187
  12. package/dist/core/checkpoint-manager.js.map +1 -1
  13. package/dist/core/config-schema.d.ts +9 -1
  14. package/dist/core/config-schema.d.ts.map +1 -1
  15. package/dist/core/config-schema.js +14 -0
  16. package/dist/core/config-schema.js.map +1 -1
  17. package/dist/core/context-builder.d.ts.map +1 -1
  18. package/dist/core/context-builder.js +61 -16
  19. package/dist/core/context-builder.js.map +1 -1
  20. package/dist/core/index.d.ts +4 -4
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js +1 -1
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/loop-engine.d.ts +6 -1
  25. package/dist/core/loop-engine.d.ts.map +1 -1
  26. package/dist/core/loop-engine.js +72 -4
  27. package/dist/core/loop-engine.js.map +1 -1
  28. package/dist/core/loop-state.d.ts +8 -0
  29. package/dist/core/loop-state.d.ts.map +1 -1
  30. package/dist/core/loop-state.js.map +1 -1
  31. package/dist/core/progress-tracker.d.ts +73 -3
  32. package/dist/core/progress-tracker.d.ts.map +1 -1
  33. package/dist/core/progress-tracker.js +192 -2
  34. package/dist/core/progress-tracker.js.map +1 -1
  35. package/dist/core/prompt-examples.d.ts +11 -3
  36. package/dist/core/prompt-examples.d.ts.map +1 -1
  37. package/dist/core/prompt-examples.js +47 -5
  38. package/dist/core/prompt-examples.js.map +1 -1
  39. package/package.json +2 -1
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * Checkpoint Manager
3
3
  *
4
- * Manages automatic git commits after each loop iteration
4
+ * Manages automatic git commits after each loop iteration.
5
+ * Uses a mutex to prevent race conditions when multiple git operations
6
+ * are attempted concurrently.
5
7
  */
6
8
  import { exec } from 'node:child_process';
7
9
  import { promisify } from 'node:util';
10
+ import { Mutex } from 'async-mutex';
8
11
  import { debug, warn } from '../utils/index.js';
9
12
  const execAsync = promisify(exec);
10
13
  /**
@@ -15,12 +18,32 @@ const DEFAULT_CONFIG = {
15
18
  messagePrefix: 'ghcralph:',
16
19
  cwd: process.cwd(),
17
20
  };
21
+ /**
22
+ * Truncate at word boundary to avoid mid-word cuts
23
+ */
24
+ function truncateAtWord(str, maxLen) {
25
+ if (str.length <= maxLen)
26
+ return str;
27
+ const ellipsis = '...';
28
+ const targetLen = maxLen - ellipsis.length;
29
+ const truncated = str.substring(0, targetLen);
30
+ const lastSpace = truncated.lastIndexOf(' ');
31
+ // Use word boundary if in the latter half
32
+ if (lastSpace > targetLen * 0.5) {
33
+ return truncated.substring(0, lastSpace) + ellipsis;
34
+ }
35
+ return truncated + ellipsis;
36
+ }
18
37
  /**
19
38
  * Checkpoint Manager class
39
+ *
40
+ * Provides thread-safe git operations using a mutex to prevent
41
+ * concurrent access that causes "index.lock" and "HEAD locked" errors.
20
42
  */
21
43
  export class CheckpointManager {
22
44
  config;
23
45
  checkpoints = [];
46
+ gitMutex = new Mutex();
24
47
  constructor(config = {}) {
25
48
  this.config = { ...DEFAULT_CONFIG, ...config };
26
49
  }
@@ -50,6 +73,12 @@ export class CheckpointManager {
50
73
  * Check if there are any modified files to commit
51
74
  */
52
75
  async hasChangesToCommit() {
76
+ return this.gitMutex.runExclusive(() => this.hasChangesToCommitUnsafe());
77
+ }
78
+ /**
79
+ * Internal: Check for changes without acquiring mutex
80
+ */
81
+ async hasChangesToCommitUnsafe() {
53
82
  try {
54
83
  const { stdout } = await execAsync('git status --porcelain', { cwd: this.config.cwd });
55
84
  return stdout.trim().length > 0;
@@ -62,6 +91,12 @@ export class CheckpointManager {
62
91
  * Get list of modified files
63
92
  */
64
93
  async getModifiedFiles() {
94
+ return this.gitMutex.runExclusive(() => this.getModifiedFilesUnsafe());
95
+ }
96
+ /**
97
+ * Internal: Get modified files without acquiring mutex
98
+ */
99
+ async getModifiedFilesUnsafe() {
65
100
  try {
66
101
  const { stdout } = await execAsync('git status --porcelain', { cwd: this.config.cwd });
67
102
  return stdout
@@ -78,6 +113,12 @@ export class CheckpointManager {
78
113
  * Stage all modified files
79
114
  */
80
115
  async stageAllChanges() {
116
+ return this.gitMutex.runExclusive(() => this.stageAllChangesUnsafe());
117
+ }
118
+ /**
119
+ * Internal: Stage changes without acquiring mutex
120
+ */
121
+ async stageAllChangesUnsafe() {
81
122
  try {
82
123
  await execAsync('git add -A', { cwd: this.config.cwd });
83
124
  debug('Staged all changes');
@@ -89,74 +130,137 @@ export class CheckpointManager {
89
130
  }
90
131
  }
91
132
  /**
92
- * Create a checkpoint commit
133
+ * Create a checkpoint commit (mutex-protected)
134
+ * @param iteration - Iteration number within the current task
135
+ * @param summary - Summary of changes made
136
+ * @param tokensUsed - Tokens used in this iteration
137
+ * @param taskContext - Optional task context for "task X/Y" numbering in commit message
93
138
  */
94
- async createCheckpoint(iteration, summary, tokensUsed) {
139
+ async createCheckpoint(iteration, summary, tokensUsed, taskContext) {
95
140
  if (!this.config.autoCommit) {
96
141
  debug('Auto-commit disabled, skipping checkpoint');
97
142
  return null;
98
143
  }
99
- // Check if there are changes to commit
100
- const hasChanges = await this.hasChangesToCommit();
101
- if (!hasChanges) {
102
- debug('No changes to commit for checkpoint');
103
- return null;
104
- }
105
- // Get list of modified files before staging
106
- const filesModified = await this.getModifiedFiles();
107
- // Stage all changes
108
- const staged = await this.stageAllChanges();
109
- if (!staged) {
110
- return null;
111
- }
112
- // Build commit message
113
- const truncatedSummary = summary.length > 50
114
- ? summary.substring(0, 47) + '...'
115
- : summary;
116
- const message = `${this.config.messagePrefix} iteration ${iteration} - ${truncatedSummary}`;
117
- const fullMessage = `${message}\n\nTokens used: ${tokensUsed}\nFiles modified: ${filesModified.length}`;
118
- try {
119
- // Create commit
120
- await execAsync(`git commit -m "${fullMessage.replace(/"/g, '\\"')}"`, { cwd: this.config.cwd });
121
- // Get commit hash
122
- const { stdout } = await execAsync('git rev-parse HEAD', { cwd: this.config.cwd });
123
- const commitHash = stdout.trim();
124
- const checkpoint = {
125
- iteration,
126
- commitHash,
127
- message,
128
- filesModified,
129
- timestamp: new Date(),
130
- tokensUsed,
131
- };
132
- this.checkpoints.push(checkpoint);
133
- debug(`Created checkpoint: ${commitHash.substring(0, 7)} - ${message}`);
134
- return checkpoint;
135
- }
136
- catch (err) {
137
- warn('Failed to create checkpoint commit: ' + (err instanceof Error ? err.message : String(err)));
138
- return null;
139
- }
144
+ // Use mutex to prevent concurrent git operations
145
+ return this.gitMutex.runExclusive(async () => {
146
+ // Check if there are changes to commit
147
+ const hasChanges = await this.hasChangesToCommitUnsafe();
148
+ if (!hasChanges) {
149
+ debug('No changes to commit for checkpoint');
150
+ return null;
151
+ }
152
+ // Get list of modified files before staging
153
+ const filesModified = await this.getModifiedFilesUnsafe();
154
+ // Stage all changes
155
+ const staged = await this.stageAllChangesUnsafe();
156
+ if (!staged) {
157
+ return null;
158
+ }
159
+ // Build commit message with optional task context
160
+ // Summary is already truncated by extractSummary(), use word-boundary truncation as safety
161
+ const truncatedSummary = truncateAtWord(summary, 50);
162
+ let message;
163
+ if (taskContext) {
164
+ message = `${this.config.messagePrefix} task ${taskContext.taskNumber}/${taskContext.totalTasks} iter ${iteration} - ${truncatedSummary}`;
165
+ }
166
+ else {
167
+ message = `${this.config.messagePrefix} iteration ${iteration} - ${truncatedSummary}`;
168
+ }
169
+ const fullMessage = `${message}\n\nTokens used: ${tokensUsed}\nFiles modified: ${filesModified.length}`;
170
+ try {
171
+ // Create commit
172
+ await execAsync(`git commit -m "${fullMessage.replace(/"/g, '\\"')}"`, { cwd: this.config.cwd });
173
+ // Get commit hash
174
+ const { stdout } = await execAsync('git rev-parse HEAD', { cwd: this.config.cwd });
175
+ const commitHash = stdout.trim();
176
+ const checkpoint = {
177
+ iteration,
178
+ commitHash,
179
+ message,
180
+ filesModified,
181
+ timestamp: new Date(),
182
+ tokensUsed,
183
+ };
184
+ this.checkpoints.push(checkpoint);
185
+ debug(`Created checkpoint: ${commitHash.substring(0, 7)} - ${message}`);
186
+ return checkpoint;
187
+ }
188
+ catch (err) {
189
+ warn('Failed to create checkpoint commit: ' + (err instanceof Error ? err.message : String(err)));
190
+ return null;
191
+ }
192
+ });
140
193
  }
141
194
  /**
142
- * Rollback to a specific checkpoint
195
+ * Rollback to a specific checkpoint (mutex-protected)
143
196
  */
144
197
  async rollbackTo(commitHash) {
145
- try {
146
- // Soft reset to keep changes in working directory for review
147
- await execAsync(`git reset --soft "${commitHash}"`, { cwd: this.config.cwd });
148
- debug(`Rolled back to ${commitHash.substring(0, 7)}`);
149
- return true;
150
- }
151
- catch (err) {
152
- warn('Failed to rollback: ' + (err instanceof Error ? err.message : String(err)));
153
- return false;
154
- }
198
+ return this.gitMutex.runExclusive(async () => {
199
+ try {
200
+ // Soft reset to keep changes in working directory for review
201
+ await execAsync(`git reset --soft "${commitHash}"`, { cwd: this.config.cwd });
202
+ debug(`Rolled back to ${commitHash.substring(0, 7)}`);
203
+ return true;
204
+ }
205
+ catch (err) {
206
+ warn('Failed to rollback: ' + (err instanceof Error ? err.message : String(err)));
207
+ return false;
208
+ }
209
+ });
155
210
  }
156
211
  /**
157
- * Hard rollback to a specific checkpoint (discard changes)
212
+ * Hard rollback to a specific checkpoint (mutex-protected)
158
213
  */
159
214
  async hardRollbackTo(commitHash) {
215
+ return this.gitMutex.runExclusive(async () => {
216
+ try {
217
+ await execAsync(`git reset --hard "${commitHash}"`, { cwd: this.config.cwd });
218
+ debug(`Hard rolled back to ${commitHash.substring(0, 7)}`);
219
+ return true;
220
+ }
221
+ catch (err) {
222
+ warn('Failed to hard rollback: ' + (err instanceof Error ? err.message : String(err)));
223
+ return false;
224
+ }
225
+ });
226
+ }
227
+ /**
228
+ * Rollback by N iterations (mutex-protected)
229
+ */
230
+ async rollbackIterations(count = 1) {
231
+ return this.gitMutex.runExclusive(async () => {
232
+ if (this.checkpoints.length < count) {
233
+ warn(`Cannot rollback ${count} iterations, only ${this.checkpoints.length} checkpoints available`);
234
+ return false;
235
+ }
236
+ // Get the checkpoint to rollback to
237
+ const targetIndex = this.checkpoints.length - count - 1;
238
+ if (targetIndex < 0) {
239
+ // Rollback before first checkpoint - get parent of first checkpoint
240
+ const firstCheckpoint = this.checkpoints[0];
241
+ if (!firstCheckpoint)
242
+ return false;
243
+ try {
244
+ const { stdout } = await execAsync(`git rev-parse "${firstCheckpoint.commitHash}^"`, { cwd: this.config.cwd });
245
+ const parentHash = stdout.trim();
246
+ // Call internal version to avoid re-acquiring mutex
247
+ return this.hardRollbackToUnsafe(parentHash);
248
+ }
249
+ catch {
250
+ warn('Cannot find parent commit for rollback');
251
+ return false;
252
+ }
253
+ }
254
+ const targetCheckpoint = this.checkpoints[targetIndex];
255
+ if (!targetCheckpoint)
256
+ return false;
257
+ return this.hardRollbackToUnsafe(targetCheckpoint.commitHash);
258
+ });
259
+ }
260
+ /**
261
+ * Internal: Hard rollback without acquiring mutex
262
+ */
263
+ async hardRollbackToUnsafe(commitHash) {
160
264
  try {
161
265
  await execAsync(`git reset --hard "${commitHash}"`, { cwd: this.config.cwd });
162
266
  debug(`Hard rolled back to ${commitHash.substring(0, 7)}`);
@@ -168,164 +272,160 @@ export class CheckpointManager {
168
272
  }
169
273
  }
170
274
  /**
171
- * Rollback by N iterations
275
+ * Get the initial commit hash before Ralph started (mutex-protected)
172
276
  */
173
- async rollbackIterations(count = 1) {
174
- if (this.checkpoints.length < count) {
175
- warn(`Cannot rollback ${count} iterations, only ${this.checkpoints.length} checkpoints available`);
176
- return false;
177
- }
178
- // Get the checkpoint to rollback to
179
- const targetIndex = this.checkpoints.length - count - 1;
180
- if (targetIndex < 0) {
181
- // Rollback before first checkpoint - get parent of first checkpoint
277
+ async getInitialCommit() {
278
+ return this.gitMutex.runExclusive(async () => {
279
+ if (this.checkpoints.length === 0) {
280
+ return null;
281
+ }
182
282
  const firstCheckpoint = this.checkpoints[0];
183
283
  if (!firstCheckpoint)
184
- return false;
284
+ return null;
185
285
  try {
186
286
  const { stdout } = await execAsync(`git rev-parse "${firstCheckpoint.commitHash}^"`, { cwd: this.config.cwd });
187
- const parentHash = stdout.trim();
188
- return this.hardRollbackTo(parentHash);
287
+ return stdout.trim();
189
288
  }
190
289
  catch {
191
- warn('Cannot find parent commit for rollback');
192
- return false;
290
+ return null;
193
291
  }
194
- }
195
- const targetCheckpoint = this.checkpoints[targetIndex];
196
- if (!targetCheckpoint)
197
- return false;
198
- return this.hardRollbackTo(targetCheckpoint.commitHash);
199
- }
200
- /**
201
- * Get the initial commit hash before Ralph started
202
- */
203
- async getInitialCommit() {
204
- if (this.checkpoints.length === 0) {
205
- return null;
206
- }
207
- const firstCheckpoint = this.checkpoints[0];
208
- if (!firstCheckpoint)
209
- return null;
210
- try {
211
- const { stdout } = await execAsync(`git rev-parse "${firstCheckpoint.commitHash}^"`, { cwd: this.config.cwd });
212
- return stdout.trim();
213
- }
214
- catch {
215
- return null;
216
- }
292
+ });
217
293
  }
218
294
  /**
219
- * Rollback all Ralph changes (to state before Ralph started)
295
+ * Rollback all Ralph changes (mutex-protected)
220
296
  */
221
297
  async rollbackAll() {
222
- const initialCommit = await this.getInitialCommit();
223
- if (!initialCommit) {
224
- warn('No checkpoints to rollback');
225
- return false;
226
- }
227
- return this.hardRollbackTo(initialCommit);
298
+ return this.gitMutex.runExclusive(async () => {
299
+ if (this.checkpoints.length === 0) {
300
+ warn('No checkpoints to rollback');
301
+ return false;
302
+ }
303
+ const firstCheckpoint = this.checkpoints[0];
304
+ if (!firstCheckpoint)
305
+ return false;
306
+ try {
307
+ const { stdout } = await execAsync(`git rev-parse "${firstCheckpoint.commitHash}^"`, { cwd: this.config.cwd });
308
+ const initialCommit = stdout.trim();
309
+ return this.hardRollbackToUnsafe(initialCommit);
310
+ }
311
+ catch {
312
+ warn('Cannot find initial commit for rollback');
313
+ return false;
314
+ }
315
+ });
228
316
  }
229
317
  /**
230
- * Create a task completion checkpoint commit
318
+ * Create a task completion checkpoint commit (mutex-protected)
319
+ * @param taskTitle - Title of the completed task
320
+ * @param taskId - ID of the completed task
321
+ * @param summary - Summary of the task completion
322
+ * @param taskContext - Optional task context for "task X/Y" numbering in commit message
231
323
  */
232
- async createTaskCheckpoint(taskTitle, taskId, summary) {
324
+ async createTaskCheckpoint(taskTitle, taskId, summary, taskContext) {
233
325
  if (!this.config.autoCommit) {
234
326
  debug('Auto-commit disabled, skipping task checkpoint');
235
327
  return null;
236
328
  }
237
- // Check if there are changes to commit
238
- const hasChanges = await this.hasChangesToCommit();
239
- if (!hasChanges) {
240
- debug('No changes to commit for task checkpoint');
241
- return null;
242
- }
243
- // Get list of modified files before staging
244
- const filesModified = await this.getModifiedFiles();
245
- // Stage all changes
246
- const staged = await this.stageAllChanges();
247
- if (!staged) {
248
- return null;
249
- }
250
- // Build commit message for task completion
251
- const truncatedTitle = taskTitle.length > 40
252
- ? taskTitle.substring(0, 37) + '...'
253
- : taskTitle;
254
- const message = `${this.config.messagePrefix} task complete - ${truncatedTitle}`;
255
- const fullMessage = `${message}\n\nTask ID: ${taskId}\nSummary: ${summary}\nFiles modified: ${filesModified.length}`;
256
- try {
257
- // Create commit
258
- await execAsync(`git commit -m "${fullMessage.replace(/"/g, '\\"')}"`, { cwd: this.config.cwd });
259
- // Get commit hash
260
- const { stdout } = await execAsync('git rev-parse HEAD', { cwd: this.config.cwd });
261
- const commitHash = stdout.trim();
262
- const checkpoint = {
263
- iteration: 0, // Task-level checkpoint, not iteration-level
264
- commitHash,
265
- message,
266
- filesModified,
267
- timestamp: new Date(),
268
- tokensUsed: 0,
269
- };
270
- this.checkpoints.push(checkpoint);
271
- debug(`Created task checkpoint: ${commitHash.substring(0, 7)} - ${message}`);
272
- return checkpoint;
273
- }
274
- catch (err) {
275
- warn('Failed to create task checkpoint commit: ' + (err instanceof Error ? err.message : String(err)));
276
- return null;
277
- }
329
+ return this.gitMutex.runExclusive(async () => {
330
+ // Check if there are changes to commit
331
+ const hasChanges = await this.hasChangesToCommitUnsafe();
332
+ if (!hasChanges) {
333
+ debug('No changes to commit for task checkpoint');
334
+ return null;
335
+ }
336
+ // Get list of modified files before staging
337
+ const filesModified = await this.getModifiedFilesUnsafe();
338
+ // Stage all changes
339
+ const staged = await this.stageAllChangesUnsafe();
340
+ if (!staged) {
341
+ return null;
342
+ }
343
+ // Build commit message for task completion with optional task context
344
+ const truncatedTitle = truncateAtWord(taskTitle, 50);
345
+ let message;
346
+ if (taskContext) {
347
+ message = `${this.config.messagePrefix} task ${taskContext.taskNumber}/${taskContext.totalTasks} complete - ${truncatedTitle}`;
348
+ }
349
+ else {
350
+ message = `${this.config.messagePrefix} task complete - ${truncatedTitle}`;
351
+ }
352
+ const fullMessage = `${message}\n\nTask ID: ${taskId}\nSummary: ${summary}\nFiles modified: ${filesModified.length}`;
353
+ try {
354
+ // Create commit
355
+ await execAsync(`git commit -m "${fullMessage.replace(/"/g, '\\"')}"`, { cwd: this.config.cwd });
356
+ // Get commit hash
357
+ const { stdout } = await execAsync('git rev-parse HEAD', { cwd: this.config.cwd });
358
+ const commitHash = stdout.trim();
359
+ const checkpoint = {
360
+ iteration: 0, // Task-level checkpoint, not iteration-level
361
+ commitHash,
362
+ message,
363
+ filesModified,
364
+ timestamp: new Date(),
365
+ tokensUsed: 0,
366
+ };
367
+ this.checkpoints.push(checkpoint);
368
+ debug(`Created task checkpoint: ${commitHash.substring(0, 7)} - ${message}`);
369
+ return checkpoint;
370
+ }
371
+ catch (err) {
372
+ warn('Failed to create task checkpoint commit: ' + (err instanceof Error ? err.message : String(err)));
373
+ return null;
374
+ }
375
+ });
278
376
  }
279
377
  /**
280
- * Create a failure checkpoint commit (preserves state for post-mortem)
378
+ * Create a failure checkpoint commit (mutex-protected)
281
379
  */
282
380
  async createFailureCheckpoint(taskTitle, taskId, attempt, error) {
283
381
  if (!this.config.autoCommit) {
284
382
  debug('Auto-commit disabled, skipping failure checkpoint');
285
383
  return null;
286
384
  }
287
- // Check if there are changes to commit
288
- const hasChanges = await this.hasChangesToCommit();
289
- if (!hasChanges) {
290
- debug('No changes to commit for failure checkpoint');
291
- return null;
292
- }
293
- // Get list of modified files before staging
294
- const filesModified = await this.getModifiedFiles();
295
- // Stage all changes
296
- const staged = await this.stageAllChanges();
297
- if (!staged) {
298
- return null;
299
- }
300
- // Build commit message for task failure
301
- const truncatedTitle = taskTitle.length > 30
302
- ? taskTitle.substring(0, 27) + '...'
303
- : taskTitle;
304
- const message = `${this.config.messagePrefix} task failed (attempt ${attempt}) - ${truncatedTitle}`;
305
- const errorInfo = error ? `\nError: ${error.substring(0, 200)}` : '';
306
- const fullMessage = `${message}\n\nTask ID: ${taskId}\nAttempt: ${attempt}${errorInfo}\nFiles modified: ${filesModified.length}`;
307
- try {
308
- // Create commit
309
- await execAsync(`git commit -m "${fullMessage.replace(/"/g, '\\"')}"`, { cwd: this.config.cwd });
310
- // Get commit hash
311
- const { stdout } = await execAsync('git rev-parse HEAD', { cwd: this.config.cwd });
312
- const commitHash = stdout.trim();
313
- const checkpoint = {
314
- iteration: 0, // Task-level checkpoint
315
- commitHash,
316
- message,
317
- filesModified,
318
- timestamp: new Date(),
319
- tokensUsed: 0,
320
- };
321
- this.checkpoints.push(checkpoint);
322
- debug(`Created failure checkpoint: ${commitHash.substring(0, 7)} - ${message}`);
323
- return checkpoint;
324
- }
325
- catch (err) {
326
- warn('Failed to create failure checkpoint commit: ' + (err instanceof Error ? err.message : String(err)));
327
- return null;
328
- }
385
+ return this.gitMutex.runExclusive(async () => {
386
+ // Check if there are changes to commit
387
+ const hasChanges = await this.hasChangesToCommitUnsafe();
388
+ if (!hasChanges) {
389
+ debug('No changes to commit for failure checkpoint');
390
+ return null;
391
+ }
392
+ // Get list of modified files before staging
393
+ const filesModified = await this.getModifiedFilesUnsafe();
394
+ // Stage all changes
395
+ const staged = await this.stageAllChangesUnsafe();
396
+ if (!staged) {
397
+ return null;
398
+ }
399
+ // Build commit message for task failure
400
+ const truncatedTitle = taskTitle.length > 30
401
+ ? taskTitle.substring(0, 27) + '...'
402
+ : taskTitle;
403
+ const message = `${this.config.messagePrefix} task failed (attempt ${attempt}) - ${truncatedTitle}`;
404
+ const errorInfo = error ? `\nError: ${error.substring(0, 200)}` : '';
405
+ const fullMessage = `${message}\n\nTask ID: ${taskId}\nAttempt: ${attempt}${errorInfo}\nFiles modified: ${filesModified.length}`;
406
+ try {
407
+ // Create commit
408
+ await execAsync(`git commit -m "${fullMessage.replace(/"/g, '\\"')}"`, { cwd: this.config.cwd });
409
+ // Get commit hash
410
+ const { stdout } = await execAsync('git rev-parse HEAD', { cwd: this.config.cwd });
411
+ const commitHash = stdout.trim();
412
+ const checkpoint = {
413
+ iteration: 0, // Task-level checkpoint
414
+ commitHash,
415
+ message,
416
+ filesModified,
417
+ timestamp: new Date(),
418
+ tokensUsed: 0,
419
+ };
420
+ this.checkpoints.push(checkpoint);
421
+ debug(`Created failure checkpoint: ${commitHash.substring(0, 7)} - ${message}`);
422
+ return checkpoint;
423
+ }
424
+ catch (err) {
425
+ warn('Failed to create failure checkpoint commit: ' + (err instanceof Error ? err.message : String(err)));
426
+ return null;
427
+ }
428
+ });
329
429
  }
330
430
  }
331
431
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../src/core/checkpoint-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../src/core/checkpoint-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAwBlC;;GAEG;AACH,MAAM,cAAc,GAAqB;IACvC,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,WAAW;IAC1B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;CACnB,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,MAAc;IACjD,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IAErC,MAAM,QAAQ,GAAG,KAAK,CAAC;IACvB,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE7C,0CAA0C;IAC1C,IAAI,SAAS,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;IACtD,CAAC;IACD,OAAO,SAAS,GAAG,QAAQ,CAAC;AAC9B,CAAC;AAoBD;;;;;GAKG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAmB;IACzB,WAAW,GAAiB,EAAE,CAAC;IAC/B,QAAQ,GAAU,IAAI,KAAK,EAAE,CAAC;IAEtC,YAAY,SAAoC,EAAE;QAChD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACvF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACvF,OAAO,MAAM;iBACV,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB;QACjC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACxD,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,gBAAgB,CACpB,SAAiB,EACjB,OAAe,EACf,UAAkB,EAClB,WAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5B,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iDAAiD;QACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,uCAAuC;YACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,4CAA4C;YAC5C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE1D,oBAAoB;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,kDAAkD;YAClD,2FAA2F;YAC3F,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAErD,IAAI,OAAe,CAAC;YACpB,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,SAAS,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,SAAS,SAAS,MAAM,gBAAgB,EAAE,CAAC;YAC5I,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,cAAc,SAAS,MAAM,gBAAgB,EAAE,CAAC;YACxF,CAAC;YACD,MAAM,WAAW,GAAG,GAAG,OAAO,oBAAoB,UAAU,qBAAqB,aAAa,CAAC,MAAM,EAAE,CAAC;YAExG,IAAI,CAAC;gBACH,gBAAgB;gBAChB,MAAM,SAAS,CAAC,kBAAkB,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAEjG,kBAAkB;gBAClB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBACnF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAEjC,MAAM,UAAU,GAAe;oBAC7B,SAAS;oBACT,UAAU;oBACV,OAAO;oBACP,aAAa;oBACb,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,UAAU;iBACX,CAAC;gBAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAClC,KAAK,CAAC,uBAAuB,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;gBAExE,OAAO,UAAU,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,sCAAsC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClG,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC;gBACH,6DAA6D;gBAC7D,MAAM,SAAS,CAAC,qBAAqB,UAAU,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC9E,KAAK,CAAC,kBAAkB,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,sBAAsB,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClF,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,UAAkB;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,qBAAqB,UAAU,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC9E,KAAK,CAAC,uBAAuB,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvF,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,QAAgB,CAAC;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,mBAAmB,KAAK,qBAAqB,IAAI,CAAC,WAAW,CAAC,MAAM,wBAAwB,CAAC,CAAC;gBACnG,OAAO,KAAK,CAAC;YACf,CAAC;YAED,oCAAoC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;YAExD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,oEAAoE;gBACpE,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,eAAe;oBAAE,OAAO,KAAK,CAAC;gBAEnC,IAAI,CAAC;oBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,eAAe,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC/G,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;oBACjC,oDAAoD;oBACpD,OAAO,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,CAAC,wCAAwC,CAAC,CAAC;oBAC/C,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACvD,IAAI,CAAC,gBAAgB;gBAAE,OAAO,KAAK,CAAC;YAEpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,UAAkB;QACnD,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,qBAAqB,UAAU,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,uBAAuB,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,eAAe;gBAAE,OAAO,IAAI,CAAC;YAElC,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,eAAe,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/G,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBACnC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,eAAe;gBAAE,OAAO,KAAK,CAAC;YAEnC,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,eAAe,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/G,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,oBAAoB,CACxB,SAAiB,EACjB,MAAc,EACd,OAAe,EACf,WAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5B,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,uCAAuC;YACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAClD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,4CAA4C;YAC5C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE1D,oBAAoB;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,sEAAsE;YACtE,MAAM,cAAc,GAAG,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAErD,IAAI,OAAe,CAAC;YACpB,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,SAAS,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,eAAe,cAAc,EAAE,CAAC;YACjI,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,oBAAoB,cAAc,EAAE,CAAC;YAC7E,CAAC;YACD,MAAM,WAAW,GAAG,GAAG,OAAO,gBAAgB,MAAM,cAAc,OAAO,qBAAqB,aAAa,CAAC,MAAM,EAAE,CAAC;YAErH,IAAI,CAAC;gBACH,gBAAgB;gBAChB,MAAM,SAAS,CAAC,kBAAkB,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAEjG,kBAAkB;gBAClB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBACnF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAEjC,MAAM,UAAU,GAAe;oBAC7B,SAAS,EAAE,CAAC,EAAE,6CAA6C;oBAC3D,UAAU;oBACV,OAAO;oBACP,aAAa;oBACb,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,UAAU,EAAE,CAAC;iBACd,CAAC;gBAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAClC,KAAK,CAAC,4BAA4B,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;gBAE7E,OAAO,UAAU,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,2CAA2C,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvG,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,SAAiB,EACjB,MAAc,EACd,OAAe,EACf,KAAc;QAEd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5B,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAC3C,uCAAuC;YACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,4CAA4C;YAC5C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE1D,oBAAoB;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,wCAAwC;YACxC,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,GAAG,EAAE;gBAC1C,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;gBACpC,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,yBAAyB,OAAO,OAAO,cAAc,EAAE,CAAC;YACpG,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,WAAW,GAAG,GAAG,OAAO,gBAAgB,MAAM,cAAc,OAAO,GAAG,SAAS,qBAAqB,aAAa,CAAC,MAAM,EAAE,CAAC;YAEjI,IAAI,CAAC;gBACH,gBAAgB;gBAChB,MAAM,SAAS,CAAC,kBAAkB,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBAEjG,kBAAkB;gBAClB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;gBACnF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAEjC,MAAM,UAAU,GAAe;oBAC7B,SAAS,EAAE,CAAC,EAAE,wBAAwB;oBACtC,UAAU;oBACV,OAAO;oBACP,aAAa;oBACb,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,UAAU,EAAE,CAAC;iBACd,CAAC;gBAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAClC,KAAK,CAAC,+BAA+B,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;gBAEhF,OAAO,UAAU,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,8CAA8C,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1G,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAkC;IACxE,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}