attocode 0.1.3 → 0.1.5

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 (133) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/README.md +56 -0
  3. package/dist/src/agent.d.ts +5 -0
  4. package/dist/src/agent.d.ts.map +1 -1
  5. package/dist/src/agent.js +244 -21
  6. package/dist/src/agent.js.map +1 -1
  7. package/dist/src/analysis/feedback-loop.d.ts +115 -0
  8. package/dist/src/analysis/feedback-loop.d.ts.map +1 -0
  9. package/dist/src/analysis/feedback-loop.js +226 -0
  10. package/dist/src/analysis/feedback-loop.js.map +1 -0
  11. package/dist/src/analysis/index.d.ts +9 -0
  12. package/dist/src/analysis/index.d.ts.map +1 -0
  13. package/dist/src/analysis/index.js +9 -0
  14. package/dist/src/analysis/index.js.map +1 -0
  15. package/dist/src/analysis/prompt-templates.d.ts +36 -0
  16. package/dist/src/analysis/prompt-templates.d.ts.map +1 -0
  17. package/dist/src/analysis/prompt-templates.js +198 -0
  18. package/dist/src/analysis/prompt-templates.js.map +1 -0
  19. package/dist/src/analysis/trace-summary.d.ts +56 -0
  20. package/dist/src/analysis/trace-summary.d.ts.map +1 -0
  21. package/dist/src/analysis/trace-summary.js +261 -0
  22. package/dist/src/analysis/trace-summary.js.map +1 -0
  23. package/dist/src/commands/handler.d.ts.map +1 -1
  24. package/dist/src/commands/handler.js +194 -2
  25. package/dist/src/commands/handler.js.map +1 -1
  26. package/dist/src/config.d.ts +3 -0
  27. package/dist/src/config.d.ts.map +1 -1
  28. package/dist/src/config.js.map +1 -1
  29. package/dist/src/defaults.d.ts +11 -2
  30. package/dist/src/defaults.d.ts.map +1 -1
  31. package/dist/src/defaults.js +25 -2
  32. package/dist/src/defaults.js.map +1 -1
  33. package/dist/src/errors/index.d.ts +233 -0
  34. package/dist/src/errors/index.d.ts.map +1 -0
  35. package/dist/src/errors/index.js +427 -0
  36. package/dist/src/errors/index.js.map +1 -0
  37. package/dist/src/integrations/auto-compaction.d.ts +33 -0
  38. package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
  39. package/dist/src/integrations/auto-compaction.js +47 -3
  40. package/dist/src/integrations/auto-compaction.js.map +1 -1
  41. package/dist/src/integrations/dead-letter-queue.d.ts +208 -0
  42. package/dist/src/integrations/dead-letter-queue.d.ts.map +1 -0
  43. package/dist/src/integrations/dead-letter-queue.js +458 -0
  44. package/dist/src/integrations/dead-letter-queue.js.map +1 -0
  45. package/dist/src/integrations/economics.d.ts +94 -2
  46. package/dist/src/integrations/economics.d.ts.map +1 -1
  47. package/dist/src/integrations/economics.js +263 -10
  48. package/dist/src/integrations/economics.js.map +1 -1
  49. package/dist/src/integrations/health-check.d.ts +218 -0
  50. package/dist/src/integrations/health-check.d.ts.map +1 -0
  51. package/dist/src/integrations/health-check.js +400 -0
  52. package/dist/src/integrations/health-check.js.map +1 -0
  53. package/dist/src/integrations/index.d.ts +5 -0
  54. package/dist/src/integrations/index.d.ts.map +1 -1
  55. package/dist/src/integrations/index.js +9 -0
  56. package/dist/src/integrations/index.js.map +1 -1
  57. package/dist/src/integrations/mcp-client.d.ts +9 -0
  58. package/dist/src/integrations/mcp-client.d.ts.map +1 -1
  59. package/dist/src/integrations/mcp-client.js +49 -7
  60. package/dist/src/integrations/mcp-client.js.map +1 -1
  61. package/dist/src/integrations/openrouter-pricing.d.ts +28 -3
  62. package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -1
  63. package/dist/src/integrations/openrouter-pricing.js +57 -16
  64. package/dist/src/integrations/openrouter-pricing.js.map +1 -1
  65. package/dist/src/integrations/retry.d.ts +131 -0
  66. package/dist/src/integrations/retry.d.ts.map +1 -0
  67. package/dist/src/integrations/retry.js +233 -0
  68. package/dist/src/integrations/retry.js.map +1 -0
  69. package/dist/src/integrations/sqlite-store.d.ts +42 -0
  70. package/dist/src/integrations/sqlite-store.d.ts.map +1 -1
  71. package/dist/src/integrations/sqlite-store.js +111 -0
  72. package/dist/src/integrations/sqlite-store.js.map +1 -1
  73. package/dist/src/main.js +88 -7
  74. package/dist/src/main.js.map +1 -1
  75. package/dist/src/modes/repl.d.ts.map +1 -1
  76. package/dist/src/modes/repl.js +37 -1
  77. package/dist/src/modes/repl.js.map +1 -1
  78. package/dist/src/modes/tui.d.ts.map +1 -1
  79. package/dist/src/modes/tui.js +46 -5
  80. package/dist/src/modes/tui.js.map +1 -1
  81. package/dist/src/modes.d.ts.map +1 -1
  82. package/dist/src/modes.js +10 -3
  83. package/dist/src/modes.js.map +1 -1
  84. package/dist/src/persistence/schema.d.ts +4 -0
  85. package/dist/src/persistence/schema.d.ts.map +1 -1
  86. package/dist/src/persistence/schema.js +49 -0
  87. package/dist/src/persistence/schema.js.map +1 -1
  88. package/dist/src/providers/adapters/anthropic.d.ts +24 -2
  89. package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
  90. package/dist/src/providers/adapters/anthropic.js +184 -0
  91. package/dist/src/providers/adapters/anthropic.js.map +1 -1
  92. package/dist/src/tools/bash.d.ts.map +1 -1
  93. package/dist/src/tools/bash.js +7 -4
  94. package/dist/src/tools/bash.js.map +1 -1
  95. package/dist/src/tools/file.d.ts.map +1 -1
  96. package/dist/src/tools/file.js +31 -10
  97. package/dist/src/tools/file.js.map +1 -1
  98. package/dist/src/tools/permission.d.ts +12 -0
  99. package/dist/src/tools/permission.d.ts.map +1 -1
  100. package/dist/src/tools/permission.js +136 -0
  101. package/dist/src/tools/permission.js.map +1 -1
  102. package/dist/src/tools/registry.d.ts +23 -1
  103. package/dist/src/tools/registry.d.ts.map +1 -1
  104. package/dist/src/tools/registry.js +77 -17
  105. package/dist/src/tools/registry.js.map +1 -1
  106. package/dist/src/tools/standard.d.ts.map +1 -1
  107. package/dist/src/tools/standard.js +8 -0
  108. package/dist/src/tools/standard.js.map +1 -1
  109. package/dist/src/tools/types.d.ts +20 -1
  110. package/dist/src/tools/types.d.ts.map +1 -1
  111. package/dist/src/tools/types.js.map +1 -1
  112. package/dist/src/tracing/trace-collector.d.ts +209 -3
  113. package/dist/src/tracing/trace-collector.d.ts.map +1 -1
  114. package/dist/src/tracing/trace-collector.js +407 -15
  115. package/dist/src/tracing/trace-collector.js.map +1 -1
  116. package/dist/src/tracing/types.d.ts +476 -2
  117. package/dist/src/tracing/types.d.ts.map +1 -1
  118. package/dist/src/tracing/types.js +25 -0
  119. package/dist/src/tracing/types.js.map +1 -1
  120. package/dist/src/tui/app.d.ts.map +1 -1
  121. package/dist/src/tui/app.js +161 -4
  122. package/dist/src/tui/app.js.map +1 -1
  123. package/dist/src/types.d.ts +35 -0
  124. package/dist/src/types.d.ts.map +1 -1
  125. package/package.json +6 -3
  126. package/dist/src/hello.d.ts +0 -2
  127. package/dist/src/hello.d.ts.map +0 -1
  128. package/dist/src/hello.js +0 -4
  129. package/dist/src/hello.js.map +0 -1
  130. package/dist/src/test-sqlite.d.ts +0 -2
  131. package/dist/src/test-sqlite.d.ts.map +0 -1
  132. package/dist/src/test-sqlite.js +0 -114
  133. package/dist/src/test-sqlite.js.map +0 -1
@@ -0,0 +1,458 @@
1
+ /**
2
+ * Dead Letter Queue
3
+ *
4
+ * Persists failed operations for later retry or manual intervention.
5
+ * Integrates with SQLite store for durability across sessions.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const dlq = createDeadLetterQueue(db);
10
+ *
11
+ * // On failure, add to DLQ
12
+ * await dlq.add({
13
+ * operation: 'tool:bash',
14
+ * args: { command: 'npm install' },
15
+ * error: new Error('ETIMEDOUT'),
16
+ * sessionId: 'session-123',
17
+ * });
18
+ *
19
+ * // At session start, drain pending items
20
+ * const pending = await dlq.getPending();
21
+ * for (const item of pending) {
22
+ * const success = await retry(item);
23
+ * if (success) await dlq.resolve(item.id);
24
+ * }
25
+ * ```
26
+ */
27
+ import { randomUUID } from 'node:crypto';
28
+ import { ErrorCategory, categorizeError } from '../errors/index.js';
29
+ // =============================================================================
30
+ // DEAD LETTER QUEUE IMPLEMENTATION
31
+ // =============================================================================
32
+ /**
33
+ * Dead letter queue backed by SQLite.
34
+ */
35
+ export class DeadLetterQueue {
36
+ db;
37
+ listeners = new Set();
38
+ stmts;
39
+ constructor(db) {
40
+ this.db = db;
41
+ this.prepareStatements();
42
+ }
43
+ prepareStatements() {
44
+ // Check if table exists
45
+ const tableExists = this.db
46
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='dead_letters'")
47
+ .get();
48
+ if (!tableExists) {
49
+ return; // Table not yet created - will be available after migration
50
+ }
51
+ this.stmts = {
52
+ insert: this.db.prepare(`
53
+ INSERT INTO dead_letters (
54
+ id, session_id, operation, args, error, category,
55
+ attempts, max_attempts, last_attempt, next_retry,
56
+ metadata, status, created_at
57
+ ) VALUES (
58
+ @id, @sessionId, @operation, @args, @error, @category,
59
+ @attempts, @maxAttempts, @lastAttempt, @nextRetry,
60
+ @metadata, @status, @createdAt
61
+ )
62
+ `),
63
+ update: this.db.prepare(`
64
+ UPDATE dead_letters SET
65
+ attempts = @attempts,
66
+ last_attempt = @lastAttempt,
67
+ next_retry = @nextRetry,
68
+ status = @status,
69
+ resolved_at = @resolvedAt
70
+ WHERE id = @id
71
+ `),
72
+ get: this.db.prepare('SELECT * FROM dead_letters WHERE id = ?'),
73
+ delete: this.db.prepare('DELETE FROM dead_letters WHERE id = ?'),
74
+ list: this.db.prepare('SELECT * FROM dead_letters ORDER BY created_at DESC'),
75
+ stats: this.db.prepare(`
76
+ SELECT
77
+ status,
78
+ operation,
79
+ category,
80
+ COUNT(*) as count
81
+ FROM dead_letters
82
+ GROUP BY status, operation, category
83
+ `),
84
+ };
85
+ }
86
+ /**
87
+ * Check if DLQ is available (table exists).
88
+ */
89
+ isAvailable() {
90
+ return this.stmts !== undefined;
91
+ }
92
+ /**
93
+ * Add a failed operation to the dead letter queue.
94
+ */
95
+ async add(input) {
96
+ if (!this.stmts) {
97
+ throw new Error('Dead letter queue not available - migration required');
98
+ }
99
+ const { category } = input.error instanceof Error
100
+ ? categorizeError(input.error)
101
+ : { category: ErrorCategory.INTERNAL };
102
+ const item = {
103
+ id: randomUUID(),
104
+ sessionId: input.sessionId,
105
+ operation: input.operation,
106
+ args: JSON.stringify(input.args),
107
+ error: input.error.message,
108
+ category,
109
+ attempts: 1,
110
+ maxAttempts: input.maxAttempts ?? 3,
111
+ lastAttempt: new Date(),
112
+ nextRetry: this.calculateNextRetry(1, category),
113
+ metadata: input.metadata,
114
+ status: 'pending',
115
+ createdAt: new Date(),
116
+ };
117
+ this.stmts.insert.run({
118
+ id: item.id,
119
+ sessionId: item.sessionId ?? null,
120
+ operation: item.operation,
121
+ args: item.args,
122
+ error: item.error,
123
+ category: item.category,
124
+ attempts: item.attempts,
125
+ maxAttempts: item.maxAttempts,
126
+ lastAttempt: item.lastAttempt.toISOString(),
127
+ nextRetry: item.nextRetry?.toISOString() ?? null,
128
+ metadata: item.metadata ? JSON.stringify(item.metadata) : null,
129
+ status: item.status,
130
+ createdAt: item.createdAt.toISOString(),
131
+ });
132
+ this.emit({ type: 'item.added', item });
133
+ return item;
134
+ }
135
+ /**
136
+ * Get a dead letter item by ID.
137
+ */
138
+ get(id) {
139
+ if (!this.stmts)
140
+ return null;
141
+ const row = this.stmts.get.get(id);
142
+ return row ? this.rowToItem(row) : null;
143
+ }
144
+ /**
145
+ * Get pending items ready for retry.
146
+ */
147
+ getPending(options = {}) {
148
+ if (!this.stmts)
149
+ return [];
150
+ const conditions = ["status = 'pending'"];
151
+ const params = {};
152
+ if (options.operation) {
153
+ conditions.push('operation = @operation');
154
+ params.operation = options.operation;
155
+ }
156
+ if (options.sessionId) {
157
+ conditions.push('session_id = @sessionId');
158
+ params.sessionId = options.sessionId;
159
+ }
160
+ if (options.readyForRetry !== false) {
161
+ conditions.push('(next_retry IS NULL OR next_retry <= @now)');
162
+ params.now = new Date().toISOString();
163
+ }
164
+ const orderBy = options.orderBy ?? 'createdAt';
165
+ const orderCol = orderBy === 'createdAt' ? 'created_at'
166
+ : orderBy === 'lastAttempt' ? 'last_attempt'
167
+ : 'next_retry';
168
+ const limit = options.limit ?? 100;
169
+ const sql = `
170
+ SELECT * FROM dead_letters
171
+ WHERE ${conditions.join(' AND ')}
172
+ ORDER BY ${orderCol} ASC
173
+ LIMIT ${limit}
174
+ `;
175
+ const rows = this.db.prepare(sql).all(params);
176
+ return rows.map(row => this.rowToItem(row));
177
+ }
178
+ /**
179
+ * Query dead letters with filters.
180
+ */
181
+ query(options = {}) {
182
+ if (!this.stmts)
183
+ return [];
184
+ const conditions = [];
185
+ const params = {};
186
+ if (options.status) {
187
+ conditions.push('status = @status');
188
+ params.status = options.status;
189
+ }
190
+ if (options.operation) {
191
+ conditions.push('operation = @operation');
192
+ params.operation = options.operation;
193
+ }
194
+ if (options.sessionId) {
195
+ conditions.push('session_id = @sessionId');
196
+ params.sessionId = options.sessionId;
197
+ }
198
+ if (options.readyForRetry) {
199
+ conditions.push("status = 'pending' AND (next_retry IS NULL OR next_retry <= @now)");
200
+ params.now = new Date().toISOString();
201
+ }
202
+ const orderBy = options.orderBy ?? 'createdAt';
203
+ const orderCol = orderBy === 'createdAt' ? 'created_at'
204
+ : orderBy === 'lastAttempt' ? 'last_attempt'
205
+ : 'next_retry';
206
+ const limit = options.limit ?? 100;
207
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
208
+ const sql = `
209
+ SELECT * FROM dead_letters
210
+ ${whereClause}
211
+ ORDER BY ${orderCol} DESC
212
+ LIMIT ${limit}
213
+ `;
214
+ const rows = this.db.prepare(sql).all(params);
215
+ return rows.map(row => this.rowToItem(row));
216
+ }
217
+ /**
218
+ * Mark an item as being retried.
219
+ */
220
+ markRetrying(id) {
221
+ if (!this.stmts)
222
+ return;
223
+ const item = this.get(id);
224
+ if (!item)
225
+ return;
226
+ const now = new Date();
227
+ this.stmts.update.run({
228
+ id,
229
+ attempts: item.attempts + 1,
230
+ lastAttempt: now.toISOString(),
231
+ nextRetry: this.calculateNextRetry(item.attempts + 1, item.category)?.toISOString() ?? null,
232
+ status: 'retrying',
233
+ resolvedAt: null,
234
+ });
235
+ this.emit({ type: 'item.retrying', item: { ...item, status: 'retrying' } });
236
+ }
237
+ /**
238
+ * Mark an item as resolved (successful retry).
239
+ */
240
+ resolve(id) {
241
+ if (!this.stmts)
242
+ return;
243
+ const item = this.get(id);
244
+ if (!item)
245
+ return;
246
+ const now = new Date();
247
+ this.stmts.update.run({
248
+ id,
249
+ attempts: item.attempts,
250
+ lastAttempt: item.lastAttempt.toISOString(),
251
+ nextRetry: null,
252
+ status: 'resolved',
253
+ resolvedAt: now.toISOString(),
254
+ });
255
+ this.emit({ type: 'item.resolved', item: { ...item, status: 'resolved', resolvedAt: now } });
256
+ }
257
+ /**
258
+ * Mark an item as abandoned (max retries exceeded or non-recoverable).
259
+ */
260
+ abandon(id) {
261
+ if (!this.stmts)
262
+ return;
263
+ const item = this.get(id);
264
+ if (!item)
265
+ return;
266
+ this.stmts.update.run({
267
+ id,
268
+ attempts: item.attempts,
269
+ lastAttempt: item.lastAttempt.toISOString(),
270
+ nextRetry: null,
271
+ status: 'abandoned',
272
+ resolvedAt: new Date().toISOString(),
273
+ });
274
+ this.emit({ type: 'item.abandoned', item: { ...item, status: 'abandoned' } });
275
+ }
276
+ /**
277
+ * Return an item to pending status after a failed retry.
278
+ */
279
+ returnToPending(id) {
280
+ if (!this.stmts)
281
+ return;
282
+ const item = this.get(id);
283
+ if (!item)
284
+ return;
285
+ // Check if max attempts reached
286
+ if (item.attempts >= item.maxAttempts) {
287
+ this.abandon(id);
288
+ return;
289
+ }
290
+ const now = new Date();
291
+ this.stmts.update.run({
292
+ id,
293
+ attempts: item.attempts,
294
+ lastAttempt: now.toISOString(),
295
+ nextRetry: this.calculateNextRetry(item.attempts, item.category)?.toISOString() ?? null,
296
+ status: 'pending',
297
+ resolvedAt: null,
298
+ });
299
+ }
300
+ /**
301
+ * Delete an item from the queue.
302
+ */
303
+ delete(id) {
304
+ if (!this.stmts)
305
+ return;
306
+ this.stmts.delete.run(id);
307
+ this.emit({ type: 'item.deleted', id });
308
+ }
309
+ /**
310
+ * Get queue statistics.
311
+ */
312
+ getStats() {
313
+ if (!this.stmts) {
314
+ return {
315
+ total: 0,
316
+ pending: 0,
317
+ retrying: 0,
318
+ resolved: 0,
319
+ abandoned: 0,
320
+ byOperation: {},
321
+ byCategory: {},
322
+ };
323
+ }
324
+ const rows = this.stmts.stats.all();
325
+ const stats = {
326
+ total: 0,
327
+ pending: 0,
328
+ retrying: 0,
329
+ resolved: 0,
330
+ abandoned: 0,
331
+ byOperation: {},
332
+ byCategory: {},
333
+ };
334
+ for (const row of rows) {
335
+ const count = row.count;
336
+ stats.total += count;
337
+ // Count by status
338
+ if (row.status === 'pending')
339
+ stats.pending += count;
340
+ else if (row.status === 'retrying')
341
+ stats.retrying += count;
342
+ else if (row.status === 'resolved')
343
+ stats.resolved += count;
344
+ else if (row.status === 'abandoned')
345
+ stats.abandoned += count;
346
+ // Count by operation
347
+ stats.byOperation[row.operation] = (stats.byOperation[row.operation] || 0) + count;
348
+ // Count by category
349
+ stats.byCategory[row.category] = (stats.byCategory[row.category] || 0) + count;
350
+ }
351
+ return stats;
352
+ }
353
+ /**
354
+ * Cleanup old resolved/abandoned items.
355
+ */
356
+ cleanup(olderThanDays = 7) {
357
+ if (!this.stmts)
358
+ return 0;
359
+ const cutoff = new Date();
360
+ cutoff.setDate(cutoff.getDate() - olderThanDays);
361
+ const result = this.db.prepare(`
362
+ DELETE FROM dead_letters
363
+ WHERE status IN ('resolved', 'abandoned')
364
+ AND resolved_at < ?
365
+ `).run(cutoff.toISOString());
366
+ return result.changes;
367
+ }
368
+ /**
369
+ * Add an event listener.
370
+ */
371
+ on(listener) {
372
+ this.listeners.add(listener);
373
+ return () => this.listeners.delete(listener);
374
+ }
375
+ emit(event) {
376
+ for (const listener of this.listeners) {
377
+ try {
378
+ listener(event);
379
+ }
380
+ catch {
381
+ // Ignore listener errors
382
+ }
383
+ }
384
+ }
385
+ /**
386
+ * Calculate next retry time based on attempts and error category.
387
+ */
388
+ calculateNextRetry(attempts, category) {
389
+ // Don't retry permanent errors
390
+ if (category === ErrorCategory.PERMANENT || category === ErrorCategory.VALIDATION) {
391
+ return undefined;
392
+ }
393
+ // Exponential backoff: 1min, 5min, 15min, 30min, 1hr
394
+ const delays = [60, 300, 900, 1800, 3600]; // seconds
395
+ const delaySeconds = delays[Math.min(attempts - 1, delays.length - 1)];
396
+ const nextRetry = new Date();
397
+ nextRetry.setSeconds(nextRetry.getSeconds() + delaySeconds);
398
+ return nextRetry;
399
+ }
400
+ rowToItem(row) {
401
+ return {
402
+ id: row.id,
403
+ sessionId: row.session_id,
404
+ operation: row.operation,
405
+ args: row.args,
406
+ error: row.error,
407
+ category: row.category,
408
+ attempts: row.attempts,
409
+ maxAttempts: row.max_attempts,
410
+ lastAttempt: new Date(row.last_attempt),
411
+ nextRetry: row.next_retry ? new Date(row.next_retry) : undefined,
412
+ metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
413
+ status: row.status,
414
+ createdAt: new Date(row.created_at),
415
+ resolvedAt: row.resolved_at ? new Date(row.resolved_at) : undefined,
416
+ };
417
+ }
418
+ }
419
+ // =============================================================================
420
+ // FACTORY FUNCTIONS
421
+ // =============================================================================
422
+ /**
423
+ * Create a dead letter queue instance.
424
+ */
425
+ export function createDeadLetterQueue(db) {
426
+ return new DeadLetterQueue(db);
427
+ }
428
+ // =============================================================================
429
+ // FORMATTING
430
+ // =============================================================================
431
+ /**
432
+ * Format dead letter stats for display.
433
+ */
434
+ export function formatDeadLetterStats(stats) {
435
+ const lines = [];
436
+ lines.push(`Dead Letter Queue Statistics`);
437
+ lines.push(` Total: ${stats.total}`);
438
+ lines.push(` Pending: ${stats.pending}`);
439
+ lines.push(` Retrying: ${stats.retrying}`);
440
+ lines.push(` Resolved: ${stats.resolved}`);
441
+ lines.push(` Abandoned: ${stats.abandoned}`);
442
+ if (Object.keys(stats.byOperation).length > 0) {
443
+ lines.push('');
444
+ lines.push(' By Operation:');
445
+ for (const [op, count] of Object.entries(stats.byOperation)) {
446
+ lines.push(` ${op}: ${count}`);
447
+ }
448
+ }
449
+ if (Object.keys(stats.byCategory).length > 0) {
450
+ lines.push('');
451
+ lines.push(' By Category:');
452
+ for (const [cat, count] of Object.entries(stats.byCategory)) {
453
+ lines.push(` ${cat}: ${count}`);
454
+ }
455
+ }
456
+ return lines.join('\n');
457
+ }
458
+ //# sourceMappingURL=dead-letter-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-letter-queue.js","sourceRoot":"","sources":["../../../src/integrations/dead-letter-queue.ts"],"names":[],"mappings":"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"}
@@ -44,10 +44,50 @@ export interface ProgressState {
44
44
  recentToolCalls: Array<{
45
45
  tool: string;
46
46
  args: string;
47
+ timestamp: number;
47
48
  }>;
48
49
  lastMeaningfulProgress: number;
49
50
  stuckCount: number;
50
51
  }
52
+ /**
53
+ * Doom loop detection state (OpenCode pattern).
54
+ * Detects when agent is stuck calling the same tool repeatedly.
55
+ */
56
+ export interface LoopDetectionState {
57
+ /** Whether a doom loop was detected */
58
+ doomLoopDetected: boolean;
59
+ /** The tool that's being called repeatedly */
60
+ lastTool: string | null;
61
+ /** How many consecutive times the same call was made */
62
+ consecutiveCount: number;
63
+ /** Threshold for doom loop detection (default: 3) */
64
+ threshold: number;
65
+ /** Timestamp of last doom loop warning */
66
+ lastWarningTime: number;
67
+ }
68
+ /**
69
+ * Exploration phase state - tracks whether agent is gathering info vs taking action.
70
+ */
71
+ export interface PhaseState {
72
+ /** Current phase of execution */
73
+ phase: 'exploring' | 'planning' | 'acting' | 'verifying';
74
+ /** Iteration when exploration started */
75
+ explorationStartIteration: number;
76
+ /** Unique files read during exploration */
77
+ uniqueFilesRead: Set<string>;
78
+ /** Unique search queries performed */
79
+ uniqueSearches: Set<string>;
80
+ /** Files that have been modified */
81
+ filesModified: Set<string>;
82
+ /** Number of test runs */
83
+ testsRun: number;
84
+ /** Whether phase transition is recommended */
85
+ shouldTransition: boolean;
86
+ /** Iterations spent in current phase */
87
+ iterationsInPhase: number;
88
+ /** Files read in recent iterations (for diminishing returns) */
89
+ recentNewFiles: number;
90
+ }
51
91
  /**
52
92
  * Budget check result.
53
93
  */
@@ -59,6 +99,10 @@ export interface BudgetCheckResult {
59
99
  isSoftLimit: boolean;
60
100
  percentUsed: number;
61
101
  suggestedAction?: 'continue' | 'request_extension' | 'stop' | 'warn';
102
+ /** Force text-only response (no tool calls allowed) */
103
+ forceTextOnly?: boolean;
104
+ /** Prompt to inject for contextual guidance */
105
+ injectedPrompt?: string;
62
106
  }
63
107
  /**
64
108
  * Extension request.
@@ -99,6 +143,19 @@ export type EconomicsEvent = {
99
143
  } | {
100
144
  type: 'extension.denied';
101
145
  reason: string;
146
+ } | {
147
+ type: 'doom_loop.detected';
148
+ tool: string;
149
+ consecutiveCount: number;
150
+ } | {
151
+ type: 'phase.transition';
152
+ from: string;
153
+ to: string;
154
+ reason: string;
155
+ } | {
156
+ type: 'exploration.saturation';
157
+ filesRead: number;
158
+ iterations: number;
102
159
  };
103
160
  export type EconomicsEventListener = (event: EconomicsEvent) => void;
104
161
  /**
@@ -108,6 +165,8 @@ export declare class ExecutionEconomicsManager {
108
165
  private budget;
109
166
  private usage;
110
167
  private progress;
168
+ private loopState;
169
+ private phaseState;
111
170
  private startTime;
112
171
  private listeners;
113
172
  private extensionHandler?;
@@ -125,9 +184,26 @@ export declare class ExecutionEconomicsManager {
125
184
  */
126
185
  recordLLMUsage(inputTokens: number, outputTokens: number, model?: string, actualCost?: number): void;
127
186
  /**
128
- * Record a tool call for progress tracking.
187
+ * Record a tool call for progress tracking and loop detection.
129
188
  */
130
- recordToolCall(toolName: string, args: Record<string, unknown>, result?: unknown): void;
189
+ recordToolCall(toolName: string, args: Record<string, unknown>, _result?: unknown): void;
190
+ /**
191
+ * Update doom loop detection state.
192
+ * Detects when the same tool+args are called consecutively.
193
+ */
194
+ private updateDoomLoopState;
195
+ /**
196
+ * Update phase tracking state.
197
+ */
198
+ private updatePhaseState;
199
+ /**
200
+ * Transition to a new phase.
201
+ */
202
+ private transitionPhase;
203
+ /**
204
+ * Check for exploration saturation (reading too many files without action).
205
+ */
206
+ private checkExplorationSaturation;
131
207
  /**
132
208
  * Check if execution can continue.
133
209
  */
@@ -158,6 +234,22 @@ export declare class ExecutionEconomicsManager {
158
234
  isStuck: boolean;
159
235
  stuckCount: number;
160
236
  };
237
+ /**
238
+ * Get doom loop detection state.
239
+ */
240
+ getLoopState(): LoopDetectionState;
241
+ /**
242
+ * Get exploration phase state.
243
+ */
244
+ getPhaseState(): {
245
+ phase: string;
246
+ uniqueFilesRead: number;
247
+ uniqueSearches: number;
248
+ filesModified: number;
249
+ testsRun: number;
250
+ shouldTransition: boolean;
251
+ iterationsInPhase: number;
252
+ };
161
253
  /**
162
254
  * Subscribe to events.
163
255
  */
@@ -1 +1 @@
1
- {"version":3,"file":"economics.d.ts","sourceRoot":"","sources":["../../../src/integrations/economics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"economics.d.ts","sourceRoot":"","sources":["../../../src/integrations/economics.ts"],"names":[],"mappings":"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"}