@fleettools/squawk 0.1.0

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 (68) hide show
  1. package/AGENTS.md +28 -0
  2. package/README.md +117 -0
  3. package/dist/src/db/checkpoint-storage.d.ts +19 -0
  4. package/dist/src/db/checkpoint-storage.d.ts.map +1 -0
  5. package/dist/src/db/checkpoint-storage.js +355 -0
  6. package/dist/src/db/checkpoint-storage.js.map +1 -0
  7. package/dist/src/db/index.d.ts +30 -0
  8. package/dist/src/db/index.d.ts.map +1 -0
  9. package/dist/src/db/index.js +329 -0
  10. package/dist/src/db/index.js.map +1 -0
  11. package/dist/src/db/sqlite.d.ts +31 -0
  12. package/dist/src/db/sqlite.d.ts.map +1 -0
  13. package/dist/src/db/sqlite.js +558 -0
  14. package/dist/src/db/sqlite.js.map +1 -0
  15. package/dist/src/db/types.d.ts +611 -0
  16. package/dist/src/db/types.d.ts.map +1 -0
  17. package/dist/src/db/types.js +4 -0
  18. package/dist/src/db/types.js.map +1 -0
  19. package/dist/src/index.d.ts +2 -0
  20. package/dist/src/index.d.ts.map +1 -0
  21. package/dist/src/index.js +285 -0
  22. package/dist/src/index.js.map +1 -0
  23. package/dist/src/recovery/checkpointing.d.ts +244 -0
  24. package/dist/src/recovery/checkpointing.d.ts.map +1 -0
  25. package/dist/src/recovery/checkpointing.js +511 -0
  26. package/dist/src/recovery/checkpointing.js.map +1 -0
  27. package/dist/src/recovery/detection.d.ts +137 -0
  28. package/dist/src/recovery/detection.d.ts.map +1 -0
  29. package/dist/src/recovery/detection.js +240 -0
  30. package/dist/src/recovery/detection.js.map +1 -0
  31. package/dist/src/recovery/detector.d.ts +34 -0
  32. package/dist/src/recovery/detector.d.ts.map +1 -0
  33. package/dist/src/recovery/detector.js +42 -0
  34. package/dist/src/recovery/detector.js.map +1 -0
  35. package/dist/src/recovery/index.d.ts +3 -0
  36. package/dist/src/recovery/index.d.ts.map +1 -0
  37. package/dist/src/recovery/index.js +3 -0
  38. package/dist/src/recovery/index.js.map +1 -0
  39. package/dist/src/recovery/restorer.d.ts +51 -0
  40. package/dist/src/recovery/restorer.d.ts.map +1 -0
  41. package/dist/src/recovery/restorer.js +266 -0
  42. package/dist/src/recovery/restorer.js.map +1 -0
  43. package/dist/src/schemas.d.ts +142 -0
  44. package/dist/src/schemas.d.ts.map +1 -0
  45. package/dist/src/schemas.js +110 -0
  46. package/dist/src/schemas.js.map +1 -0
  47. package/package.json +21 -0
  48. package/src/db/checkpoint-storage.ts +443 -0
  49. package/src/db/index.d.ts +30 -0
  50. package/src/db/index.d.ts.map +1 -0
  51. package/src/db/index.js.map +1 -0
  52. package/src/db/index.ts +417 -0
  53. package/src/db/schema.sql +112 -0
  54. package/src/db/sqlite.d.ts +31 -0
  55. package/src/db/sqlite.d.ts.map +1 -0
  56. package/src/db/sqlite.js +667 -0
  57. package/src/db/sqlite.js.map +1 -0
  58. package/src/db/sqlite.ts +677 -0
  59. package/src/db/types.d.ts +612 -0
  60. package/src/db/types.d.ts.map +1 -0
  61. package/src/db/types.js +4 -0
  62. package/src/db/types.js.map +1 -0
  63. package/src/db/types.ts +771 -0
  64. package/src/index.ts +332 -0
  65. package/src/recovery/detector.ts +82 -0
  66. package/src/recovery/index.ts +3 -0
  67. package/src/recovery/restorer.ts +377 -0
  68. package/tsconfig.json +32 -0
package/AGENTS.md ADDED
@@ -0,0 +1,28 @@
1
+ # Squawk Workspace Agent Context
2
+
3
+ **Hierarchy Level:** Coordination Service
4
+ **Parent:** [../AGENTS.md](../AGENTS.md)
5
+ **Philosophy:** See [AGENTS.md](../AGENTS.md) Core Philosophy section
6
+
7
+ ## Commands
8
+
9
+ ```bash
10
+ cd squawk
11
+ bun run build # Compile TypeScript to dist/
12
+ bun run dev # bun src/index.ts
13
+ bun start # bun dist/index.js
14
+ ```
15
+
16
+ ## Key Patterns
17
+
18
+ - Bun.serve HTTP server on `SQUAWK_PORT` (default: 3001)
19
+ - Event sourcing with `bun:sqlite` for persistence
20
+ - Mailbox/cursor/lock APIs for agent coordination
21
+ - No external HTTP dependencies (pure Bun APIs)
22
+ - Database initialized on startup, closed on SIGINT
23
+
24
+ ## Architecture
25
+
26
+ - `src/db/` - SQLite adapter with prepared statements
27
+ - `src/recovery/` - Checkpoint restoration logic
28
+ - Entry point: `src/index.ts` with all route handlers
package/README.md ADDED
@@ -0,0 +1,117 @@
1
+ # Squawk - Fleet Coordination System
2
+
3
+ **Squawk** is the agent coordination and durable messaging system for FleetTools, analogous to SwarmTools' `swarm-mail`.
4
+
5
+ ## Purpose
6
+
7
+ Squawk provides:
8
+ - **Durable Mailbox** - Append-only event queue with ordering guarantees
9
+ - **Durable Cursor** - Progress tracking for event processing
10
+ - **Durable Lock** - Distributed file locking (CTK - Consolidated Tool Kit)
11
+ - **Durable Deferred** - Promise-based coordination
12
+ - **Flightline Integration** - Git-backed work tracking
13
+ - **Hive Integration** - Event sourcing for Flightline work orders
14
+
15
+ ## Directory Structure
16
+
17
+ ```
18
+ squawk/
19
+ ├── mail/ # Durable Mailbox implementation
20
+ │ ├── mail.ts # Mailbox API
21
+ │ ├── cursor.ts # Durable Cursor
22
+ │ └── defer.ts # Durable Deferred
23
+ ├── streams/ # Event streaming primitives
24
+ │ ├── event.ts # Event types
25
+ │ ├── store.ts # Append-only event store
26
+ │ └── subscription.ts # Event subscription
27
+ ├── hive/ # Flightline event source
28
+ │ ├── cells.ts # CTK reservation events
29
+ │ ├── work-orders.ts # Work order events
30
+ │ └── projections.ts # Materialized views
31
+ ├── memory/ # Semantic memory integration
32
+ │ ├── embeddings.ts # Memory records with embeddings
33
+ │ └── retrieval.ts # Search APIs
34
+ └── api/ # Squawk API for plugins
35
+ ├── coordinator.ts # Dispatch API
36
+ └── mail.ts # Mailbox API
37
+ ```
38
+
39
+ ## Event Types
40
+
41
+ ### Core Events
42
+ ```typescript
43
+ interface SquawkEvent {
44
+ id: string;
45
+ type: 'work_order.created' | 'work_order.started' | 'work_order.completed' |
46
+ 'cell.reserved' | 'cell.released' | 'tech_order.learned' |
47
+ 'specialist.assigned' | 'specialist.completed';
48
+ stream_id: string; // Work order or tech order ID
49
+ data: Record<string, any>;
50
+ occurred_at: string; // ISO 8601
51
+ causation_id?: string; // For event chaining
52
+ }
53
+ ```
54
+
55
+ ## Mailbox Concepts
56
+
57
+ ### DurableMailbox
58
+ Append-only event queue with ordering guarantees:
59
+ - Events are written to durable storage
60
+ - Sequential numbering per stream
61
+ - No in-place modifications
62
+
63
+ ### DurableCursor
64
+ Progress tracking for event consumers:
65
+ - Points to last processed event
66
+ - Survives restarts
67
+ - Enables resumable processing
68
+
69
+ ### DurableLock
70
+ Distributed file locking mechanism:
71
+ - Prevents conflicting edits to the same file
72
+ - Timeout-based to prevent deadlocks
73
+ - Automatic cleanup on release
74
+
75
+ ### DurableDeferred
76
+ Promise-based coordination:
77
+ - Wait for condition (event, timeout, or manual resolution)
78
+ - Persistent across restarts
79
+ - Used for Specialist handoffs
80
+
81
+ ## Flightline Integration
82
+
83
+ Squawk emits events that are consumed by Flightline to update:
84
+ - Work order manifests
85
+ - Cell reservation records
86
+ - Tech Order promotion
87
+
88
+ ## Memory Integration
89
+
90
+ Squawk can publish memory events:
91
+ - Tech Order learned events
92
+ - Pattern extraction events
93
+ - Specialist behavior patterns
94
+
95
+ These events are consumed by the Memory subsystem to create embeddings.
96
+
97
+ ## API Endpoints
98
+
99
+ ### POST /mailbox/append
100
+ Append events to durable mailbox.
101
+
102
+ ### POST /mailbox/subscribe
103
+ Subscribe to event streams.
104
+
105
+ ### GET /mailbox/stream
106
+ Stream events from a cursor position.
107
+
108
+ ### GET /coordinator/status
109
+ Get Dispatch status and active Specialists.
110
+
111
+ ## Sync Mode Interaction
112
+
113
+ When **Sync Mode** is enabled:
114
+ - Events are published to Zero (projections only)
115
+ - Full event logs remain local
116
+ - CTK locks remain workspace-specific
117
+ - Memory records are synced (metadata only, not embeddings)
@@ -0,0 +1,19 @@
1
+ import type { Checkpoint, CreateCheckpointInput } from './types.js';
2
+ export declare class CheckpointStorage {
3
+ version: string;
4
+ constructor();
5
+ create(input: CreateCheckpointInput): Promise<Checkpoint>;
6
+ getById(checkpointId: string): Promise<Checkpoint | null>;
7
+ getLatest(missionId: string): Promise<Checkpoint | null>;
8
+ list(missionId?: string): Promise<Checkpoint[]>;
9
+ delete(checkpointId: string): Promise<boolean>;
10
+ markConsumed(checkpointId: string): Promise<Checkpoint | null>;
11
+ getStats(): Promise<{
12
+ total_checkpoints: number;
13
+ file_count: number;
14
+ latest_checkpoint?: Checkpoint;
15
+ }>;
16
+ cleanup(): Promise<number>;
17
+ }
18
+ export declare const checkpointStorage: CheckpointStorage;
19
+ //# sourceMappingURL=checkpoint-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-storage.d.ts","sourceRoot":"","sources":["../../../src/db/checkpoint-storage.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EAMtB,MAAM,YAAY,CAAC;AAuOpB,qBAAa,iBAAiB;IAC5B,OAAO,SAAW;;IAMZ,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IAYzD,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAezD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAoCxD,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA8B/C,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB9C,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAe9D,QAAQ,IAAI,OAAO,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,CAAC,EAAE,UAAU,CAAC;KAChC,CAAC;IA6BI,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAsBjC;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -0,0 +1,355 @@
1
+ import { writeFileSync, readFileSync, unlinkSync, existsSync, mkdirSync, symlinkSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { randomUUID } from 'crypto';
4
+ const mockDatabase = require('../../../tests/helpers/mock-database').mockDatabase;
5
+ function validateCheckpoint(checkpoint) {
6
+ const errors = [];
7
+ if (!checkpoint.id || typeof checkpoint.id !== 'string') {
8
+ errors.push('Invalid or missing id');
9
+ }
10
+ if (!checkpoint.mission_id || typeof checkpoint.mission_id !== 'string') {
11
+ errors.push('Invalid or missing mission_id');
12
+ }
13
+ if (!checkpoint.timestamp || typeof checkpoint.timestamp !== 'string') {
14
+ errors.push('Invalid or missing timestamp');
15
+ }
16
+ if (!checkpoint.trigger || !['progress', 'error', 'manual', 'compaction'].includes(checkpoint.trigger)) {
17
+ errors.push('Invalid or missing trigger');
18
+ }
19
+ if (typeof checkpoint.progress_percent !== 'number' ||
20
+ checkpoint.progress_percent < 0 ||
21
+ checkpoint.progress_percent > 100) {
22
+ errors.push('Invalid progress_percent (must be 0-100)');
23
+ }
24
+ if (!checkpoint.created_by || typeof checkpoint.created_by !== 'string') {
25
+ errors.push('Invalid or missing created_by');
26
+ }
27
+ if (!checkpoint.version || typeof checkpoint.version !== 'string') {
28
+ errors.push('Invalid or missing version');
29
+ }
30
+ if (checkpoint.timestamp && isNaN(Date.parse(checkpoint.timestamp))) {
31
+ errors.push('Invalid timestamp format');
32
+ }
33
+ if (!Array.isArray(checkpoint.sorties)) {
34
+ errors.push('sorties must be an array');
35
+ }
36
+ if (!Array.isArray(checkpoint.active_locks)) {
37
+ errors.push('active_locks must be an array');
38
+ }
39
+ if (!Array.isArray(checkpoint.pending_messages)) {
40
+ errors.push('pending_messages must be an array');
41
+ }
42
+ if (!checkpoint.recovery_context || typeof checkpoint.recovery_context !== 'object') {
43
+ errors.push('Invalid or missing recovery_context');
44
+ }
45
+ else {
46
+ const rc = checkpoint.recovery_context;
47
+ if (!rc.last_action || typeof rc.last_action !== 'string') {
48
+ errors.push('Invalid or missing recovery_context.last_action');
49
+ }
50
+ if (!Array.isArray(rc.next_steps)) {
51
+ errors.push('recovery_context.next_steps must be an array');
52
+ }
53
+ if (!Array.isArray(rc.blockers)) {
54
+ errors.push('recovery_context.blockers must be an array');
55
+ }
56
+ if (!Array.isArray(rc.files_modified)) {
57
+ errors.push('recovery_context.files_modified must be an array');
58
+ }
59
+ if (!rc.mission_summary || typeof rc.mission_summary !== 'string') {
60
+ errors.push('Invalid or missing recovery_context.mission_summary');
61
+ }
62
+ if (typeof rc.elapsed_time_ms !== 'number' || rc.elapsed_time_ms < 0) {
63
+ errors.push('Invalid recovery_context.elapsed_time_ms');
64
+ }
65
+ if (!rc.last_activity_at || typeof rc.last_activity_at !== 'string') {
66
+ errors.push('Invalid or missing recovery_context.last_activity_at');
67
+ }
68
+ else if (isNaN(Date.parse(rc.last_activity_at))) {
69
+ errors.push('Invalid recovery_context.last_activity_at format');
70
+ }
71
+ }
72
+ if (errors.length > 0) {
73
+ throw new Error(`Checkpoint validation failed: ${errors.join(', ')}`);
74
+ }
75
+ return checkpoint;
76
+ }
77
+ // STORAGE UTILITIES
78
+ function generateCheckpointId() {
79
+ const uuid = randomUUID().split('-')[0];
80
+ return `chk-${uuid}`;
81
+ }
82
+ function getFlightlineDir() {
83
+ if (process.env.FLIGHTLINE_TEST_DIR) {
84
+ return process.env.FLIGHTLINE_TEST_DIR;
85
+ }
86
+ const homeDir = require('os').homedir();
87
+ return join(homeDir, '.flightline');
88
+ }
89
+ function getCheckpointsDir() {
90
+ return join(getFlightlineDir(), 'checkpoints');
91
+ }
92
+ function getCheckpointFilePath(checkpointId) {
93
+ return join(getCheckpointsDir(), `${checkpointId}.json`);
94
+ }
95
+ function getLatestSymlinkPath() {
96
+ return join(getCheckpointsDir(), 'latest.json');
97
+ }
98
+ function ensureCheckpointsDir() {
99
+ const checkpointsDir = getCheckpointsDir();
100
+ if (!existsSync(checkpointsDir)) {
101
+ mkdirSync(checkpointsDir, { recursive: true });
102
+ }
103
+ }
104
+ function createSymlink(target, linkPath) {
105
+ try {
106
+ if (existsSync(linkPath)) {
107
+ unlinkSync(linkPath);
108
+ }
109
+ symlinkSync(target, linkPath, 'file');
110
+ }
111
+ catch (error) {
112
+ // Fallback: copy file content if symlinks aren't supported
113
+ try {
114
+ const content = readFileSync(target, 'utf-8');
115
+ writeFileSync(linkPath, content);
116
+ }
117
+ catch (copyError) {
118
+ console.warn('Failed to create symlink or fallback copy:', copyError);
119
+ }
120
+ }
121
+ }
122
+ function writeCheckpointFile(checkpoint) {
123
+ const filepath = getCheckpointFilePath(checkpoint.id);
124
+ try {
125
+ ensureCheckpointsDir();
126
+ const content = JSON.stringify(checkpoint, null, 2);
127
+ writeFileSync(filepath, content, 'utf-8');
128
+ createSymlink(filepath, getLatestSymlinkPath());
129
+ }
130
+ catch (error) {
131
+ throw new Error(`Failed to write checkpoint file ${filepath}: ${error}`);
132
+ }
133
+ }
134
+ function readCheckpointFile(checkpointId) {
135
+ const filepath = getCheckpointFilePath(checkpointId);
136
+ try {
137
+ if (!existsSync(filepath)) {
138
+ return null;
139
+ }
140
+ const content = readFileSync(filepath, 'utf-8');
141
+ const data = JSON.parse(content);
142
+ return validateCheckpoint(data);
143
+ }
144
+ catch (error) {
145
+ console.warn(`Failed to read checkpoint file ${filepath}:`, error);
146
+ return null;
147
+ }
148
+ }
149
+ function deleteCheckpointFile(checkpointId) {
150
+ const filepath = getCheckpointFilePath(checkpointId);
151
+ try {
152
+ if (existsSync(filepath)) {
153
+ unlinkSync(filepath);
154
+ return true;
155
+ }
156
+ return false;
157
+ }
158
+ catch (error) {
159
+ console.warn(`Failed to delete checkpoint file ${filepath}:`, error);
160
+ return false;
161
+ }
162
+ }
163
+ function updateLatestSymlink() {
164
+ try {
165
+ const checkpointsDir = getCheckpointsDir();
166
+ if (!existsSync(checkpointsDir)) {
167
+ return;
168
+ }
169
+ const files = require('fs').readdirSync(checkpointsDir)
170
+ .filter((file) => file.endsWith('.json') && file !== 'latest.json')
171
+ .map((file) => {
172
+ const filepath = join(checkpointsDir, file);
173
+ const stats = require('fs').statSync(filepath);
174
+ return { file, filepath, mtime: stats.mtime };
175
+ })
176
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
177
+ if (files.length > 0) {
178
+ createSymlink(files[0].filepath, getLatestSymlinkPath());
179
+ }
180
+ else {
181
+ const symlinkPath = getLatestSymlinkPath();
182
+ if (existsSync(symlinkPath)) {
183
+ unlinkSync(symlinkPath);
184
+ }
185
+ }
186
+ }
187
+ catch (error) {
188
+ console.warn('Failed to update latest symlink:', error);
189
+ }
190
+ }
191
+ // MAIN STORAGE CLASS
192
+ export class CheckpointStorage {
193
+ version = '1.0.0';
194
+ constructor() {
195
+ ensureCheckpointsDir();
196
+ }
197
+ async create(input) {
198
+ try {
199
+ const checkpoint = await mockDatabase.checkpoints.create(input);
200
+ writeCheckpointFile(checkpoint);
201
+ return checkpoint;
202
+ }
203
+ catch (error) {
204
+ throw new Error(`Failed to create checkpoint: ${error}`);
205
+ }
206
+ }
207
+ async getById(checkpointId) {
208
+ try {
209
+ let checkpoint = await mockDatabase.checkpoints.getById(checkpointId);
210
+ if (!checkpoint) {
211
+ checkpoint = readCheckpointFile(checkpointId);
212
+ }
213
+ return checkpoint;
214
+ }
215
+ catch (error) {
216
+ console.warn(`Error retrieving checkpoint ${checkpointId}:`, error);
217
+ return null;
218
+ }
219
+ }
220
+ async getLatest(missionId) {
221
+ try {
222
+ let checkpoint = await mockDatabase.checkpoints.getLatest(missionId);
223
+ // Fallback: read from files if database fails
224
+ if (!checkpoint) {
225
+ const checkpointsDir = getCheckpointsDir();
226
+ if (existsSync(checkpointsDir)) {
227
+ const files = require('fs').readdirSync(checkpointsDir)
228
+ .filter((file) => file.endsWith('.json') && file !== 'latest.json')
229
+ .map((file) => {
230
+ const filepath = join(checkpointsDir, file);
231
+ try {
232
+ const checkpoint = readCheckpointFile(file.replace('.json', ''));
233
+ return checkpoint ? { ...checkpoint, filepath } : null;
234
+ }
235
+ catch {
236
+ return null;
237
+ }
238
+ })
239
+ .filter(Boolean)
240
+ .filter((cp) => cp.mission_id === missionId)
241
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
242
+ if (files.length > 0) {
243
+ checkpoint = files[0];
244
+ }
245
+ }
246
+ }
247
+ return checkpoint;
248
+ }
249
+ catch (error) {
250
+ console.warn(`Error retrieving latest checkpoint for mission ${missionId}:`, error);
251
+ return null;
252
+ }
253
+ }
254
+ async list(missionId) {
255
+ try {
256
+ let checkpoints = await mockDatabase.checkpoints.list(missionId);
257
+ if (checkpoints.length === 0) {
258
+ const checkpointsDir = getCheckpointsDir();
259
+ if (existsSync(checkpointsDir)) {
260
+ const fileCheckpoints = require('fs').readdirSync(checkpointsDir)
261
+ .filter((file) => file.endsWith('.json') && file !== 'latest.json')
262
+ .map((file) => {
263
+ const checkpointId = file.replace('.json', '');
264
+ return readCheckpointFile(checkpointId);
265
+ })
266
+ .filter(Boolean)
267
+ .filter((cp) => !missionId || cp.mission_id === missionId)
268
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
269
+ checkpoints = fileCheckpoints;
270
+ }
271
+ }
272
+ return checkpoints;
273
+ }
274
+ catch (error) {
275
+ console.warn(`Error listing checkpoints${missionId ? ` for mission ${missionId}` : ''}:`, error);
276
+ return [];
277
+ }
278
+ }
279
+ async delete(checkpointId) {
280
+ try {
281
+ const dbDeleted = await mockDatabase.checkpoints.delete(checkpointId);
282
+ const fileDeleted = deleteCheckpointFile(checkpointId);
283
+ if (dbDeleted || fileDeleted) {
284
+ updateLatestSymlink();
285
+ return true;
286
+ }
287
+ return false;
288
+ }
289
+ catch (error) {
290
+ console.warn(`Error deleting checkpoint ${checkpointId}:`, error);
291
+ return false;
292
+ }
293
+ }
294
+ async markConsumed(checkpointId) {
295
+ try {
296
+ const checkpoint = await mockDatabase.checkpoints.markConsumed(checkpointId);
297
+ if (checkpoint) {
298
+ writeCheckpointFile(checkpoint);
299
+ }
300
+ return checkpoint;
301
+ }
302
+ catch (error) {
303
+ console.warn(`Error marking checkpoint ${checkpointId} as consumed:`, error);
304
+ return null;
305
+ }
306
+ }
307
+ async getStats() {
308
+ try {
309
+ const checkpoints = await mockDatabase.checkpoints.list();
310
+ const dbStats = { total_checkpoints: checkpoints.length };
311
+ const checkpointsDir = getCheckpointsDir();
312
+ let fileCount = 0;
313
+ if (existsSync(checkpointsDir)) {
314
+ fileCount = require('fs').readdirSync(checkpointsDir)
315
+ .filter((file) => file.endsWith('.json') && file !== 'latest.json')
316
+ .length;
317
+ }
318
+ const latestCheckpoint = await this.getLatest(''); // Get any latest checkpoint
319
+ return {
320
+ total_checkpoints: dbStats.total_checkpoints,
321
+ file_count: fileCount,
322
+ latest_checkpoint: latestCheckpoint || undefined
323
+ };
324
+ }
325
+ catch (error) {
326
+ console.warn('Error getting checkpoint stats:', error);
327
+ return {
328
+ total_checkpoints: 0,
329
+ file_count: 0
330
+ };
331
+ }
332
+ }
333
+ async cleanup() {
334
+ try {
335
+ let cleanedCount = 0;
336
+ const now = new Date();
337
+ const checkpoints = await this.list();
338
+ for (const checkpoint of checkpoints) {
339
+ if (checkpoint.expires_at && new Date(checkpoint.expires_at) < now) {
340
+ const deleted = await this.delete(checkpoint.id);
341
+ if (deleted) {
342
+ cleanedCount++;
343
+ }
344
+ }
345
+ }
346
+ return cleanedCount;
347
+ }
348
+ catch (error) {
349
+ console.warn('Error during checkpoint cleanup:', error);
350
+ return 0;
351
+ }
352
+ }
353
+ }
354
+ export const checkpointStorage = new CheckpointStorage();
355
+ //# sourceMappingURL=checkpoint-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-storage.js","sourceRoot":"","sources":["../../../src/db/checkpoint-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { SQLiteAdapter } from './sqlite.js';
2
+ import type { Event, Mailbox, Cursor, Lock } from './types.js';
3
+ export declare function initializeDatabase(dbPath?: string): Promise<void>;
4
+ export declare function getAdapter(): SQLiteAdapter;
5
+ export declare function closeDatabase(): Promise<void>;
6
+ export declare const mailboxOps: {
7
+ getAll: () => Promise<any>;
8
+ getById: (id: string) => Promise<any>;
9
+ create: (id: string) => Promise<any>;
10
+ exists: (id: string) => Promise<boolean>;
11
+ };
12
+ export declare const eventOps: {
13
+ getByMailbox: (mailboxId: string) => Promise<any>;
14
+ append: (mailboxId: string, events: any[]) => Promise<Event[]>;
15
+ };
16
+ export declare const cursorOps: {
17
+ getById: (id: string) => Promise<any>;
18
+ getByStream: (streamId: string) => Promise<any>;
19
+ upsert: (cursor: any) => Promise<any>;
20
+ };
21
+ export declare const lockOps: {
22
+ getAll: () => Promise<any>;
23
+ getById: (id: string) => Promise<any>;
24
+ acquire: (lock: any) => Promise<any>;
25
+ release: (id: string) => Promise<any>;
26
+ getExpired: () => Promise<any>;
27
+ releaseExpired: () => Promise<any>;
28
+ };
29
+ export type { Mailbox, Event, Cursor, Lock };
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA8B/D,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvE;AAED,wBAAgB,UAAU,IAAI,aAAa,CAO1C;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAKnD;AAyID,eAAO,MAAM,UAAU;;kBAUD,MAAM;iBAKP,MAAM;iBAUN,MAAM;CAK1B,CAAC;AAEF,eAAO,MAAM,QAAQ;8BACa,MAAM;wBAUZ,MAAM,UAAU,GAAG,EAAE;CAmChD,CAAC;AAEF,eAAO,MAAM,SAAS;kBACA,MAAM;4BAKI,MAAM;qBASb,GAAG;CAuB3B,CAAC;AAEF,eAAO,MAAM,OAAO;;kBAcE,MAAM;oBAKH,GAAG;kBAkCN,MAAM;;;CA8B3B,CAAC;AAKF,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC"}