@fleettools/squawk 0.1.0 → 0.1.1

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 (66) hide show
  1. package/package.json +1 -1
  2. package/AGENTS.md +0 -28
  3. package/dist/src/db/checkpoint-storage.d.ts +0 -19
  4. package/dist/src/db/checkpoint-storage.d.ts.map +0 -1
  5. package/dist/src/db/checkpoint-storage.js +0 -355
  6. package/dist/src/db/checkpoint-storage.js.map +0 -1
  7. package/dist/src/db/index.d.ts +0 -30
  8. package/dist/src/db/index.d.ts.map +0 -1
  9. package/dist/src/db/index.js +0 -329
  10. package/dist/src/db/index.js.map +0 -1
  11. package/dist/src/db/sqlite.d.ts +0 -31
  12. package/dist/src/db/sqlite.d.ts.map +0 -1
  13. package/dist/src/db/sqlite.js +0 -558
  14. package/dist/src/db/sqlite.js.map +0 -1
  15. package/dist/src/db/types.d.ts +0 -611
  16. package/dist/src/db/types.d.ts.map +0 -1
  17. package/dist/src/db/types.js +0 -4
  18. package/dist/src/db/types.js.map +0 -1
  19. package/dist/src/index.d.ts +0 -2
  20. package/dist/src/index.d.ts.map +0 -1
  21. package/dist/src/index.js +0 -285
  22. package/dist/src/index.js.map +0 -1
  23. package/dist/src/recovery/checkpointing.d.ts +0 -244
  24. package/dist/src/recovery/checkpointing.d.ts.map +0 -1
  25. package/dist/src/recovery/checkpointing.js +0 -511
  26. package/dist/src/recovery/checkpointing.js.map +0 -1
  27. package/dist/src/recovery/detection.d.ts +0 -137
  28. package/dist/src/recovery/detection.d.ts.map +0 -1
  29. package/dist/src/recovery/detection.js +0 -240
  30. package/dist/src/recovery/detection.js.map +0 -1
  31. package/dist/src/recovery/detector.d.ts +0 -34
  32. package/dist/src/recovery/detector.d.ts.map +0 -1
  33. package/dist/src/recovery/detector.js +0 -42
  34. package/dist/src/recovery/detector.js.map +0 -1
  35. package/dist/src/recovery/index.d.ts +0 -3
  36. package/dist/src/recovery/index.d.ts.map +0 -1
  37. package/dist/src/recovery/index.js +0 -3
  38. package/dist/src/recovery/index.js.map +0 -1
  39. package/dist/src/recovery/restorer.d.ts +0 -51
  40. package/dist/src/recovery/restorer.d.ts.map +0 -1
  41. package/dist/src/recovery/restorer.js +0 -266
  42. package/dist/src/recovery/restorer.js.map +0 -1
  43. package/dist/src/schemas.d.ts +0 -142
  44. package/dist/src/schemas.d.ts.map +0 -1
  45. package/dist/src/schemas.js +0 -110
  46. package/dist/src/schemas.js.map +0 -1
  47. package/src/db/checkpoint-storage.ts +0 -443
  48. package/src/db/index.d.ts +0 -30
  49. package/src/db/index.d.ts.map +0 -1
  50. package/src/db/index.js.map +0 -1
  51. package/src/db/index.ts +0 -417
  52. package/src/db/schema.sql +0 -112
  53. package/src/db/sqlite.d.ts +0 -31
  54. package/src/db/sqlite.d.ts.map +0 -1
  55. package/src/db/sqlite.js +0 -667
  56. package/src/db/sqlite.js.map +0 -1
  57. package/src/db/sqlite.ts +0 -677
  58. package/src/db/types.d.ts +0 -612
  59. package/src/db/types.d.ts.map +0 -1
  60. package/src/db/types.js +0 -4
  61. package/src/db/types.js.map +0 -1
  62. package/src/db/types.ts +0 -771
  63. package/src/index.ts +0 -332
  64. package/src/recovery/detector.ts +0 -82
  65. package/src/recovery/index.ts +0 -3
  66. package/src/recovery/restorer.ts +0 -377
package/dist/src/index.js DELETED
@@ -1,285 +0,0 @@
1
- import { closeDatabase, mailboxOps, eventOps, cursorOps, lockOps } from './db/index.js';
2
- console.log('Squawk API database initialized');
3
- const server = Bun.serve({
4
- port: parseInt(process.env.SQUAWK_PORT || '3001', 10),
5
- async fetch(request) {
6
- const url = new URL(request.url);
7
- const path = url.pathname;
8
- // CORS headers
9
- const headers = {
10
- 'Access-Control-Allow-Origin': '*',
11
- 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
12
- 'Access-Control-Allow-Headers': 'Content-Type',
13
- };
14
- if (request.method === 'OPTIONS') {
15
- return new Response(null, { headers });
16
- }
17
- if (path === '/health') {
18
- return new Response(JSON.stringify({
19
- status: 'healthy',
20
- service: 'squawk',
21
- timestamp: new Date().toISOString(),
22
- }), {
23
- headers: { ...headers, 'Content-Type': 'application/json' },
24
- });
25
- }
26
- // === MAILBOX ENDPOINTS ===
27
- if (path === '/api/v1/mailbox/append' && request.method === 'POST') {
28
- try {
29
- const body = await request.json();
30
- const { stream_id, events } = body;
31
- if (!stream_id || !Array.isArray(events)) {
32
- return new Response(JSON.stringify({ error: 'stream_id and events array are required' }), {
33
- status: 400,
34
- headers: { ...headers, 'Content-Type': 'application/json' },
35
- });
36
- }
37
- if (!(await mailboxOps.exists(stream_id))) {
38
- await mailboxOps.create(stream_id);
39
- }
40
- const formattedEvents = events.map((e) => ({
41
- type: e.type,
42
- stream_id,
43
- data: JSON.stringify(e.data),
44
- occurred_at: new Date().toISOString(),
45
- causation_id: e.causation_id || null,
46
- metadata: e.metadata ? JSON.stringify(e.metadata) : null,
47
- }));
48
- const inserted = await eventOps.append(stream_id, formattedEvents);
49
- const mailbox = await mailboxOps.getById(stream_id);
50
- const mailboxEvents = await eventOps.getByMailbox(stream_id);
51
- return new Response(JSON.stringify({
52
- mailbox: { ...mailbox, events: mailboxEvents },
53
- inserted: inserted.length
54
- }), {
55
- headers: { ...headers, 'Content-Type': 'application/json' },
56
- });
57
- }
58
- catch (error) {
59
- console.error('Error appending to mailbox:', error);
60
- return new Response(JSON.stringify({ error: 'Failed to append to mailbox' }), {
61
- status: 500,
62
- headers: { ...headers, 'Content-Type': 'application/json' },
63
- });
64
- }
65
- }
66
- if (path.startsWith('/api/v1/mailbox/') && request.method === 'GET') {
67
- const streamId = path.split('/').pop();
68
- if (!streamId) {
69
- return new Response(JSON.stringify({ error: 'Invalid stream ID' }), {
70
- status: 400,
71
- headers: { ...headers, 'Content-Type': 'application/json' },
72
- });
73
- }
74
- try {
75
- const mailbox = await mailboxOps.getById(streamId);
76
- if (!mailbox) {
77
- return new Response(JSON.stringify({ error: 'Mailbox not found' }), {
78
- status: 404,
79
- headers: { ...headers, 'Content-Type': 'application/json' },
80
- });
81
- }
82
- const events = eventOps.getByMailbox(streamId);
83
- return new Response(JSON.stringify({ mailbox: { ...mailbox, events } }), {
84
- headers: { ...headers, 'Content-Type': 'application/json' },
85
- });
86
- }
87
- catch (error) {
88
- console.error('Error getting mailbox:', error);
89
- return new Response(JSON.stringify({ error: 'Failed to get mailbox' }), {
90
- status: 500,
91
- headers: { ...headers, 'Content-Type': 'application/json' },
92
- });
93
- }
94
- }
95
- // === CURSOR ENDPOINTS ===
96
- if (path === '/api/v1/cursor/advance' && request.method === 'POST') {
97
- try {
98
- const body = await request.json();
99
- const { stream_id, position } = body;
100
- if (!stream_id || typeof position !== 'number') {
101
- return new Response(JSON.stringify({ error: 'stream_id and position are required' }), {
102
- status: 400,
103
- headers: { ...headers, 'Content-Type': 'application/json' },
104
- });
105
- }
106
- if (!(await mailboxOps.exists(stream_id))) {
107
- await mailboxOps.create(stream_id);
108
- }
109
- const cursor = await cursorOps.upsert({ stream_id, position: position, updated_at: new Date().toISOString() });
110
- return new Response(JSON.stringify({ cursor }), {
111
- headers: { ...headers, 'Content-Type': 'application/json' },
112
- });
113
- }
114
- catch (error) {
115
- console.error('Error advancing cursor:', error);
116
- return new Response(JSON.stringify({ error: 'Failed to advance cursor' }), {
117
- status: 500,
118
- headers: { ...headers, 'Content-Type': 'application/json' },
119
- });
120
- }
121
- }
122
- if (path.startsWith('/api/v1/cursor/') && request.method === 'GET') {
123
- const cursorId = path.split('/').pop();
124
- if (!cursorId) {
125
- return new Response(JSON.stringify({ error: 'Invalid cursor ID' }), {
126
- status: 400,
127
- headers: { ...headers, 'Content-Type': 'application/json' },
128
- });
129
- }
130
- try {
131
- const cursor = await cursorOps.getById(cursorId);
132
- if (!cursor) {
133
- return new Response(JSON.stringify({ error: 'Cursor not found' }), {
134
- status: 404,
135
- headers: { ...headers, 'Content-Type': 'application/json' },
136
- });
137
- }
138
- return new Response(JSON.stringify({ cursor }), {
139
- headers: { ...headers, 'Content-Type': 'application/json' },
140
- });
141
- }
142
- catch (error) {
143
- console.error('Error getting cursor:', error);
144
- return new Response(JSON.stringify({ error: 'Failed to get cursor' }), {
145
- status: 500,
146
- headers: { ...headers, 'Content-Type': 'application/json' },
147
- });
148
- }
149
- }
150
- // === LOCK ENDPOINTS ===
151
- if (path === '/api/v1/lock/acquire' && request.method === 'POST') {
152
- try {
153
- const body = await request.json();
154
- const { file, specialist_id, timeout_ms = 30000 } = body;
155
- if (!file || !specialist_id) {
156
- return new Response(JSON.stringify({ error: 'file and specialist_id are required' }), {
157
- status: 400,
158
- headers: { ...headers, 'Content-Type': 'application/json' },
159
- });
160
- }
161
- const lock = await lockOps.acquire({
162
- file: file,
163
- reserved_by: specialist_id,
164
- reserved_at: new Date().toISOString(),
165
- released_at: null,
166
- purpose: 'edit',
167
- checksum: null,
168
- timeout_ms,
169
- metadata: null,
170
- });
171
- return new Response(JSON.stringify({ lock }), {
172
- headers: { ...headers, 'Content-Type': 'application/json' },
173
- });
174
- }
175
- catch (error) {
176
- console.error('Error acquiring lock:', error);
177
- return new Response(JSON.stringify({ error: 'Failed to acquire lock' }), {
178
- status: 500,
179
- headers: { ...headers, 'Content-Type': 'application/json' },
180
- });
181
- }
182
- }
183
- if (path === '/api/v1/lock/release' && request.method === 'POST') {
184
- try {
185
- const body = await request.json();
186
- const { lock_id, specialist_id } = body;
187
- if (!lock_id) {
188
- return new Response(JSON.stringify({ error: 'lock_id is required' }), {
189
- status: 400,
190
- headers: { ...headers, 'Content-Type': 'application/json' },
191
- });
192
- }
193
- const lock = await lockOps.getById(lock_id);
194
- if (!lock) {
195
- return new Response(JSON.stringify({ error: 'Lock not found' }), {
196
- status: 404,
197
- headers: { ...headers, 'Content-Type': 'application/json' },
198
- });
199
- }
200
- if (lock.reserved_by !== specialist_id) {
201
- return new Response(JSON.stringify({ error: 'Cannot release lock: wrong specialist' }), {
202
- status: 403,
203
- headers: { ...headers, 'Content-Type': 'application/json' },
204
- });
205
- }
206
- const updatedLock = await lockOps.release(lock_id);
207
- return new Response(JSON.stringify({ lock: updatedLock }), {
208
- headers: { ...headers, 'Content-Type': 'application/json' },
209
- });
210
- }
211
- catch (error) {
212
- console.error('Error releasing lock:', error);
213
- return new Response(JSON.stringify({ error: 'Failed to release lock' }), {
214
- status: 500,
215
- headers: { ...headers, 'Content-Type': 'application/json' },
216
- });
217
- }
218
- }
219
- if (path === '/api/v1/locks' && request.method === 'GET') {
220
- try {
221
- const locks = await lockOps.getAll();
222
- return new Response(JSON.stringify({ locks }), {
223
- headers: { ...headers, 'Content-Type': 'application/json' },
224
- });
225
- }
226
- catch (error) {
227
- console.error('Error listing locks:', error);
228
- return new Response(JSON.stringify({ error: 'Failed to list locks' }), {
229
- status: 500,
230
- headers: { ...headers, 'Content-Type': 'application/json' },
231
- });
232
- }
233
- }
234
- // === COORDINATOR ENDPOINTS ===
235
- if (path === '/api/v1/coordinator/status' && request.method === 'GET') {
236
- try {
237
- const mailboxes = await mailboxOps.getAll();
238
- const locks = await lockOps.getAll();
239
- return new Response(JSON.stringify({
240
- active_mailboxes: mailboxes.length,
241
- active_locks: locks.length,
242
- timestamp: new Date().toISOString(),
243
- }), {
244
- headers: { ...headers, 'Content-Type': 'application/json' },
245
- });
246
- }
247
- catch (error) {
248
- console.error('Error getting coordinator status:', error);
249
- return new Response(JSON.stringify({ error: 'Failed to get status' }), {
250
- status: 500,
251
- headers: { ...headers, 'Content-Type': 'application/json' },
252
- });
253
- }
254
- }
255
- // 404
256
- return new Response(JSON.stringify({ error: 'Not found' }), {
257
- status: 404,
258
- headers: { ...headers, 'Content-Type': 'application/json' },
259
- });
260
- },
261
- });
262
- setInterval(async () => {
263
- const released = await lockOps.releaseExpired();
264
- if (released > 0) {
265
- console.log(`Released ${released} expired locks`);
266
- }
267
- }, 30000); // Check every 30 seconds
268
- console.log(`Squawk API server listening on port ${server.port}`);
269
- console.log('Endpoints:');
270
- console.log(' POST /api/v1/mailbox/append - Append events to mailbox');
271
- console.log(' GET /api/v1/mailbox/:streamId - Get mailbox contents');
272
- console.log(' POST /api/v1/cursor/advance - Advance cursor position');
273
- console.log(' GET /api/v1/cursor/:cursorId - Get cursor position');
274
- console.log(' POST /api/v1/lock/acquire - Acquire file lock (CTK)');
275
- console.log(' POST /api/v1/lock/release - Release file lock (CTK)');
276
- console.log(' GET /api/v1/locks - List all active locks');
277
- console.log(' GET /api/v1/coordinator/status - Get coordinator status');
278
- console.log(' GET /health - Health check');
279
- process.on('SIGINT', () => {
280
- console.log('Shutting down...');
281
- closeDatabase();
282
- server.stop();
283
- process.exit(0);
284
- });
285
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExF,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAE/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,EAAE,EAAE,CAAC;IACrD,KAAK,CAAC,KAAK,CAAC,OAAO;QACjB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE1B,eAAe;QACf,MAAM,OAAO,GAA2B;YACtC,6BAA6B,EAAE,GAAG;YAClC,8BAA8B,EAAE,iCAAiC;YACjE,8BAA8B,EAAE,cAAc;SAC/C,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACjC,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,EAAE;gBACF,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAC5D,CAAC,CAAC;QACL,CAAC;QAED,4BAA4B;QAG5B,IAAI,IAAI,KAAK,wBAAwB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAA4C,CAAC;gBAC5E,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBAEnC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,EAAE;wBACxF,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;oBAC1C,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACrC,CAAC;gBAED,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBAC9C,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,SAAS;oBACT,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI;oBACpC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;iBACzD,CAAC,CAAC,CAAC;gBAEJ,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;gBACnE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAE7D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE;oBAC9C,QAAQ,EAAE,QAAQ,CAAC,MAAM;iBAC1B,CAAC,EAAE;oBACF,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,EAAE;oBAC5E,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAEvC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE;oBAClE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE;wBAClE,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE;oBACvE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,EAAE;oBACtE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,2BAA2B;QAG3B,IAAI,IAAI,KAAK,wBAAwB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAA+C,CAAC;gBAC/E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;gBAErC,IAAI,CAAC,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,EAAE;wBACpF,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;oBAC1C,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACrC,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAS,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAChH,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;oBAC9C,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;gBAChD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,EAAE;oBACzE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAEvC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE;oBAClE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE;wBACjE,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;oBAC9C,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC9C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,EAAE;oBACrE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,yBAAyB;QAGzB,IAAI,IAAI,KAAK,sBAAsB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACjE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAoE,CAAC;gBACpG,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;gBAEzD,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC5B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,EAAE;wBACpF,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;oBACjC,IAAI,EAAE,IAAK;oBACX,WAAW,EAAE,aAAc;oBAC3B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,IAAI;oBACd,UAAU;oBACV,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBAEH,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;oBAC5C,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC9C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,EAAE;oBACvE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,KAAK,sBAAsB,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACjE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAkD,CAAC;gBAClF,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;gBAExC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,EAAE;wBACpE,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC;gBAE7C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE;wBAC/D,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,IAAI,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;oBACvC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC,EAAE;wBACtF,MAAM,EAAE,GAAG;wBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC;gBACpD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE;oBACzD,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;gBAC9C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,EAAE;oBACvE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAGD,IAAI,IAAI,KAAK,eAAe,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBACrC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;oBAC7C,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;gBAC7C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,EAAE;oBACrE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,gCAAgC;QAGhC,IAAI,IAAI,KAAK,4BAA4B,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACtE,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;gBAErC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,gBAAgB,EAAE,SAAS,CAAC,MAAM;oBAClC,YAAY,EAAE,KAAK,CAAC,MAAM;oBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,EAAE;oBACF,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;gBAC1D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,EAAE;oBACrE,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM;QACN,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE;YAC1D,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH,WAAW,CAAC,KAAK,IAAI,EAAE;IACrB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAChD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,gBAAgB,CAAC,CAAC;IACpD,CAAC;AACH,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB;AAEpC,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAClE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1B,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;AAC5E,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;AACzE,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;AAC3E,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;AACvE,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;AAC3E,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;AAC1E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;AAC5E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;AAC5E,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;AAEnE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,aAAa,EAAE,CAAC;IAChB,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,244 +0,0 @@
1
- /**
2
- * Phase 3: Checkpoint Triggering System
3
- *
4
- * Implements automatic checkpoint creation based on:
5
- * - Progress milestones (25%, 50%, 75%)
6
- * - Error conditions (exceptions, API errors, lock timeouts, message failures)
7
- * - Manual triggers (user-initiated)
8
- *
9
- * All checkpoint operations are non-blocking async to avoid delaying mission progress.
10
- *
11
- * @since 1.0.0
12
- */
13
- import type { Checkpoint, CreateCheckpointInput, CheckpointTrigger, Mission, Sortie, Lock, Message, AppendEventInput } from '../db/types.js';
14
- export interface ProgressCheckpointTriggerOptions {
15
- /** Milestones to trigger checkpoints at (default: [25, 50, 75]) */
16
- milestones?: number[];
17
- /** Minimum time between checkpoints in ms (default: 60000 = 1 minute) */
18
- minIntervalMs?: number;
19
- }
20
- /**
21
- * Monitors mission progress and creates checkpoints at milestones
22
- *
23
- * Triggers checkpoints at 25%, 50%, 75% completion to enable recovery
24
- * from context window compaction at natural breakpoints.
25
- */
26
- export declare class ProgressCheckpointTrigger {
27
- private lastCheckpointProgress;
28
- private lastCheckpointTime;
29
- private milestones;
30
- private minIntervalMs;
31
- constructor(options?: ProgressCheckpointTriggerOptions);
32
- /**
33
- * Check if progress milestone has been reached
34
- *
35
- * Returns true if:
36
- * 1. Current progress crosses a milestone threshold
37
- * 2. Minimum interval since last checkpoint has passed
38
- */
39
- shouldCheckpoint(currentProgress: number): boolean;
40
- /**
41
- * Record that a checkpoint was created at this progress level
42
- */
43
- recordCheckpoint(progress: number): void;
44
- /**
45
- * Get the next milestone after current progress
46
- */
47
- getNextMilestone(currentProgress: number): number | null;
48
- }
49
- export interface BlockerInfo {
50
- type: 'lock_timeout' | 'api_error' | 'dependency' | 'exception' | 'message_failure' | 'other';
51
- description: string;
52
- affected_sortie?: string;
53
- resolution_hint?: string;
54
- timestamp?: string;
55
- error_code?: string;
56
- error_details?: Record<string, unknown>;
57
- }
58
- export interface ErrorCheckpointTriggerOptions {
59
- /** Enable automatic error checkpoints (default: true) */
60
- enabled?: boolean;
61
- /** Minimum time between error checkpoints in ms (default: 30000 = 30 seconds) */
62
- minIntervalMs?: number;
63
- }
64
- /**
65
- * Detects error conditions and creates checkpoints to preserve state
66
- *
67
- * Monitors for:
68
- * - Unhandled exceptions in sorties
69
- * - API errors (4xx/5xx responses)
70
- * - Lock acquisition timeouts
71
- * - Message delivery failures
72
- *
73
- * Captures error details in recovery context for debugging and recovery.
74
- */
75
- export declare class ErrorCheckpointTrigger {
76
- private lastErrorCheckpointTime;
77
- private minIntervalMs;
78
- private enabled;
79
- private recentErrors;
80
- constructor(options?: ErrorCheckpointTriggerOptions);
81
- /**
82
- * Check if error checkpoint should be created
83
- *
84
- * Returns true if:
85
- * 1. Error detection is enabled
86
- * 2. Minimum interval since last error checkpoint has passed
87
- */
88
- shouldCheckpoint(): boolean;
89
- /**
90
- * Record an unhandled exception
91
- */
92
- recordException(sortieId: string, error: Error | unknown, context?: Record<string, unknown>): BlockerInfo;
93
- /**
94
- * Record an API error
95
- */
96
- recordApiError(sortieId: string, statusCode: number, message: string, endpoint?: string): BlockerInfo;
97
- /**
98
- * Record a lock acquisition timeout
99
- */
100
- recordLockTimeout(sortieId: string, filePath: string, heldBy?: string): BlockerInfo;
101
- /**
102
- * Record a message delivery failure
103
- */
104
- recordMessageFailure(sortieId: string, messageId: string, reason: string): BlockerInfo;
105
- /**
106
- * Record a dependency blocker
107
- */
108
- recordDependencyBlocker(sortieId: string, dependsOn: string, reason?: string): BlockerInfo;
109
- /**
110
- * Record a generic blocker
111
- */
112
- recordBlocker(sortieId: string, blocker: BlockerInfo): BlockerInfo;
113
- /**
114
- * Get all blockers for a sortie
115
- */
116
- getBlockers(sortieId: string): BlockerInfo[];
117
- /**
118
- * Get all blockers across all sorties
119
- */
120
- getAllBlockers(): BlockerInfo[];
121
- /**
122
- * Clear blockers for a sortie (after recovery)
123
- */
124
- clearBlockers(sortieId: string): void;
125
- /**
126
- * Record that error checkpoint was created
127
- */
128
- recordCheckpoint(): void;
129
- /**
130
- * Internal: Add blocker to tracking
131
- */
132
- private addBlocker;
133
- }
134
- export interface CheckpointCreatorOptions {
135
- /** Database instance for storing checkpoints and events */
136
- db: {
137
- checkpoints: {
138
- create: (input: CreateCheckpointInput) => Promise<Checkpoint>;
139
- };
140
- events: {
141
- append: (input: AppendEventInput) => Promise<any>;
142
- };
143
- missions: {
144
- getById: (id: string) => Promise<Mission | null>;
145
- };
146
- sorties: {
147
- getByMission: (missionId: string) => Promise<Sortie[]>;
148
- };
149
- locks: {
150
- getActiveLocks: (missionId: string) => Promise<Lock[]>;
151
- };
152
- messages: {
153
- getPendingMessages: (missionId: string) => Promise<Message[]>;
154
- };
155
- };
156
- /** Agent ID creating the checkpoint */
157
- agentId: string;
158
- }
159
- /**
160
- * Creates checkpoints with full state snapshots
161
- *
162
- * Captures:
163
- * - Mission and sortie state
164
- * - Active file locks
165
- * - Pending messages
166
- * - Recovery context for LLM prompt injection
167
- */
168
- export declare class CheckpointCreator {
169
- private db;
170
- private agentId;
171
- constructor(options: CheckpointCreatorOptions);
172
- /**
173
- * Create a checkpoint with full state snapshot
174
- *
175
- * Non-blocking: returns immediately, checkpoint creation happens in background
176
- */
177
- createCheckpoint(missionId: string, trigger: CheckpointTrigger, options?: {
178
- triggerDetails?: string;
179
- progressPercent?: number;
180
- blockers?: BlockerInfo[];
181
- ttlHours?: number;
182
- }): Promise<Checkpoint>;
183
- /**
184
- * Build recovery context for LLM prompt injection
185
- */
186
- private buildRecoveryContext;
187
- /**
188
- * Emit checkpoint_created event (non-blocking)
189
- */
190
- private emitCheckpointEvent;
191
- }
192
- export interface CheckpointCleanupOptions {
193
- /** TTL for checkpoints in days (default: 7) */
194
- ttlDays?: number;
195
- /** Minimum checkpoints to keep per mission (default: 3) */
196
- keepPerMission?: number;
197
- /** Include completed missions in cleanup (default: false) */
198
- includeCompletedMissions?: boolean;
199
- /** Run cleanup job automatically (default: true) */
200
- autoCleanup?: boolean;
201
- /** Cleanup job interval in ms (default: 86400000 = 24 hours) */
202
- cleanupIntervalMs?: number;
203
- }
204
- /**
205
- * Manages checkpoint lifecycle and cleanup
206
- *
207
- * Implements:
208
- * - TTL-based expiration (default 7 days)
209
- * - Per-mission retention (keep at least N checkpoints)
210
- * - Automatic cleanup job (runs daily)
211
- * - Archive support for old checkpoints
212
- */
213
- export declare class CheckpointCleanupService {
214
- private db;
215
- private ttlDays;
216
- private keepPerMission;
217
- private includeCompletedMissions;
218
- private cleanupIntervalMs;
219
- private cleanupTimer?;
220
- constructor(db: CheckpointCleanupService['db'], options?: CheckpointCleanupOptions);
221
- /**
222
- * Start automatic cleanup job
223
- */
224
- startAutoCleanup(): void;
225
- /**
226
- * Stop automatic cleanup job
227
- */
228
- stopAutoCleanup(): void;
229
- /**
230
- * Run cleanup immediately
231
- *
232
- * Removes checkpoints older than TTL, keeping minimum per mission
233
- */
234
- cleanup(): Promise<number>;
235
- /**
236
- * Get cleanup statistics
237
- */
238
- getStats(): Promise<{
239
- total_checkpoints: number;
240
- expired_checkpoints: number;
241
- by_mission: Record<string, number>;
242
- }>;
243
- }
244
- //# sourceMappingURL=checkpointing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkpointing.d.ts","sourceRoot":"","sources":["../../../src/recovery/checkpointing.ts"],"names":[],"mappings":"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"}