swarm-mail 0.5.0 → 1.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 (67) hide show
  1. package/README.md +84 -0
  2. package/bin/daemon-cli.ts +4 -4
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/beads/adapter.d.ts +38 -0
  5. package/dist/beads/adapter.d.ts.map +1 -0
  6. package/dist/beads/blocked-cache.d.ts +21 -0
  7. package/dist/beads/blocked-cache.d.ts.map +1 -0
  8. package/dist/beads/comments.d.ts +21 -0
  9. package/dist/beads/comments.d.ts.map +1 -0
  10. package/dist/beads/dependencies.d.ts +58 -0
  11. package/dist/beads/dependencies.d.ts.map +1 -0
  12. package/dist/beads/events.d.ts +163 -0
  13. package/dist/beads/events.d.ts.map +1 -0
  14. package/dist/beads/flush-manager.d.ts +71 -0
  15. package/dist/beads/flush-manager.d.ts.map +1 -0
  16. package/dist/beads/index.d.ts +25 -0
  17. package/dist/beads/index.d.ts.map +1 -0
  18. package/dist/beads/jsonl.d.ts +103 -0
  19. package/dist/beads/jsonl.d.ts.map +1 -0
  20. package/dist/beads/labels.d.ts +21 -0
  21. package/dist/beads/labels.d.ts.map +1 -0
  22. package/dist/beads/merge.d.ts +99 -0
  23. package/dist/beads/merge.d.ts.map +1 -0
  24. package/dist/beads/migrations.d.ts +41 -0
  25. package/dist/beads/migrations.d.ts.map +1 -0
  26. package/dist/beads/operations.d.ts +56 -0
  27. package/dist/beads/operations.d.ts.map +1 -0
  28. package/dist/beads/projections.d.ts +103 -0
  29. package/dist/beads/projections.d.ts.map +1 -0
  30. package/dist/beads/queries.d.ts +77 -0
  31. package/dist/beads/queries.d.ts.map +1 -0
  32. package/dist/beads/store.d.ts +98 -0
  33. package/dist/beads/store.d.ts.map +1 -0
  34. package/dist/beads/validation.d.ts +75 -0
  35. package/dist/beads/validation.d.ts.map +1 -0
  36. package/dist/daemon.d.ts +8 -9
  37. package/dist/daemon.d.ts.map +1 -1
  38. package/dist/hive/adapter.d.ts.map +1 -1
  39. package/dist/hive/index.d.ts +1 -0
  40. package/dist/hive/index.d.ts.map +1 -1
  41. package/dist/hive/jsonl.d.ts +2 -0
  42. package/dist/hive/jsonl.d.ts.map +1 -1
  43. package/dist/hive/queries.d.ts +23 -0
  44. package/dist/hive/queries.d.ts.map +1 -1
  45. package/dist/index.d.ts +2 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +1530 -866
  48. package/dist/memory/adapter.d.ts +2 -0
  49. package/dist/memory/adapter.d.ts.map +1 -1
  50. package/dist/memory/index.d.ts +1 -0
  51. package/dist/memory/index.d.ts.map +1 -1
  52. package/dist/memory/migrations.d.ts.map +1 -1
  53. package/dist/memory/store.d.ts +2 -0
  54. package/dist/memory/store.d.ts.map +1 -1
  55. package/dist/memory/sync.d.ts +93 -0
  56. package/dist/memory/sync.d.ts.map +1 -0
  57. package/dist/pglite.d.ts +9 -7
  58. package/dist/pglite.d.ts.map +1 -1
  59. package/dist/test-server.d.ts +64 -0
  60. package/dist/test-server.d.ts.map +1 -0
  61. package/dist/types/adapter.d.ts +38 -1
  62. package/dist/types/adapter.d.ts.map +1 -1
  63. package/dist/types/beads-adapter.d.ts +397 -0
  64. package/dist/types/beads-adapter.d.ts.map +1 -0
  65. package/dist/types/database.d.ts +67 -0
  66. package/dist/types/database.d.ts.map +1 -1
  67. package/package.json +6 -3
@@ -0,0 +1,397 @@
1
+ /**
2
+ * BeadsAdapter - High-level interface for beads operations
3
+ *
4
+ * This interface abstracts all beads operations (CRUD, dependencies, labels,
5
+ * comments, epic management) to enable different storage backends.
6
+ *
7
+ * ## Design Goals
8
+ * - Database-agnostic (works with PGLite, SQLite, PostgreSQL, etc.)
9
+ * - Parallel to SwarmMailAdapter pattern
10
+ * - Event sourcing with projections for queries
11
+ * - No implementation details leak through interface
12
+ *
13
+ * ## Layering
14
+ * - DatabaseAdapter: Low-level SQL execution (shared with swarm-mail)
15
+ * - BeadsAdapter: High-level beads operations (uses DatabaseAdapter internally)
16
+ * - Plugin tools: Type-safe Zod-validated wrappers (use BeadsAdapter)
17
+ *
18
+ * ## Relationship to steveyegge/beads
19
+ * This is a TypeScript rewrite of steveyegge/beads internal/storage/storage.go
20
+ * interface, adapted for event sourcing and shared PGLite database.
21
+ */
22
+ import type { DatabaseAdapter } from "./database.js";
23
+ export type BeadStatus = "open" | "in_progress" | "blocked" | "closed" | "tombstone";
24
+ export type BeadType = "bug" | "feature" | "task" | "epic" | "chore" | "message";
25
+ export type DependencyRelationship = "blocks" | "related" | "parent-child" | "discovered-from" | "replies-to" | "relates-to" | "duplicates" | "supersedes";
26
+ /**
27
+ * Full bead record (projection)
28
+ */
29
+ export interface Bead {
30
+ id: string;
31
+ project_key: string;
32
+ type: BeadType;
33
+ status: BeadStatus;
34
+ title: string;
35
+ description: string | null;
36
+ priority: number;
37
+ parent_id: string | null;
38
+ assignee: string | null;
39
+ created_at: number;
40
+ updated_at: number;
41
+ closed_at: number | null;
42
+ closed_reason: string | null;
43
+ deleted_at: number | null;
44
+ deleted_by: string | null;
45
+ delete_reason: string | null;
46
+ created_by: string | null;
47
+ }
48
+ /**
49
+ * Bead creation options
50
+ */
51
+ export interface CreateBeadOptions {
52
+ title: string;
53
+ description?: string;
54
+ type: BeadType;
55
+ priority?: number;
56
+ parent_id?: string;
57
+ assignee?: string;
58
+ created_by?: string;
59
+ metadata?: Record<string, unknown>;
60
+ }
61
+ /**
62
+ * Bead update options
63
+ */
64
+ export interface UpdateBeadOptions {
65
+ title?: string;
66
+ description?: string;
67
+ priority?: number;
68
+ assignee?: string;
69
+ updated_by?: string;
70
+ }
71
+ /**
72
+ * Bead query filters
73
+ */
74
+ export interface QueryBeadsOptions {
75
+ status?: BeadStatus | BeadStatus[];
76
+ type?: BeadType | BeadType[];
77
+ parent_id?: string;
78
+ assignee?: string;
79
+ labels?: string[];
80
+ limit?: number;
81
+ offset?: number;
82
+ /** Include deleted beads */
83
+ include_deleted?: boolean;
84
+ /** Include children for epics */
85
+ include_children?: boolean;
86
+ }
87
+ export interface BeadAdapter {
88
+ /**
89
+ * Create a new bead
90
+ *
91
+ * Emits: bead_created event
92
+ */
93
+ createBead(projectKey: string, options: CreateBeadOptions, projectPath?: string): Promise<Bead>;
94
+ /**
95
+ * Get a bead by ID
96
+ */
97
+ getBead(projectKey: string, beadId: string, projectPath?: string): Promise<Bead | null>;
98
+ /**
99
+ * Query beads with filters
100
+ */
101
+ queryBeads(projectKey: string, options?: QueryBeadsOptions, projectPath?: string): Promise<Bead[]>;
102
+ /**
103
+ * Update bead fields
104
+ *
105
+ * Emits: bead_updated event
106
+ */
107
+ updateBead(projectKey: string, beadId: string, options: UpdateBeadOptions, projectPath?: string): Promise<Bead>;
108
+ /**
109
+ * Change bead status
110
+ *
111
+ * Emits: bead_status_changed event
112
+ */
113
+ changeBeadStatus(projectKey: string, beadId: string, toStatus: BeadStatus, options?: {
114
+ reason?: string;
115
+ changed_by?: string;
116
+ }, projectPath?: string): Promise<Bead>;
117
+ /**
118
+ * Close a bead
119
+ *
120
+ * Emits: bead_closed event
121
+ */
122
+ closeBead(projectKey: string, beadId: string, reason: string, options?: {
123
+ closed_by?: string;
124
+ files_touched?: string[];
125
+ duration_ms?: number;
126
+ }, projectPath?: string): Promise<Bead>;
127
+ /**
128
+ * Reopen a closed bead
129
+ *
130
+ * Emits: bead_reopened event
131
+ */
132
+ reopenBead(projectKey: string, beadId: string, options?: {
133
+ reason?: string;
134
+ reopened_by?: string;
135
+ }, projectPath?: string): Promise<Bead>;
136
+ /**
137
+ * Delete a bead (soft delete)
138
+ *
139
+ * Emits: bead_deleted event
140
+ */
141
+ deleteBead(projectKey: string, beadId: string, options?: {
142
+ reason?: string;
143
+ deleted_by?: string;
144
+ }, projectPath?: string): Promise<void>;
145
+ }
146
+ /**
147
+ * Dependency between beads
148
+ */
149
+ export interface BeadDependency {
150
+ bead_id: string;
151
+ depends_on_id: string;
152
+ relationship: DependencyRelationship;
153
+ created_at: number;
154
+ created_by: string | null;
155
+ }
156
+ export interface DependencyAdapter {
157
+ /**
158
+ * Add a dependency between beads
159
+ *
160
+ * Emits: bead_dependency_added event
161
+ */
162
+ addDependency(projectKey: string, beadId: string, dependsOnId: string, relationship: DependencyRelationship, options?: {
163
+ reason?: string;
164
+ added_by?: string;
165
+ }, projectPath?: string): Promise<BeadDependency>;
166
+ /**
167
+ * Remove a dependency
168
+ *
169
+ * Emits: bead_dependency_removed event
170
+ */
171
+ removeDependency(projectKey: string, beadId: string, dependsOnId: string, relationship: DependencyRelationship, options?: {
172
+ reason?: string;
173
+ removed_by?: string;
174
+ }, projectPath?: string): Promise<void>;
175
+ /**
176
+ * Get all dependencies for a bead
177
+ */
178
+ getDependencies(projectKey: string, beadId: string, projectPath?: string): Promise<BeadDependency[]>;
179
+ /**
180
+ * Get beads that depend on this bead
181
+ */
182
+ getDependents(projectKey: string, beadId: string, projectPath?: string): Promise<BeadDependency[]>;
183
+ /**
184
+ * Check if a bead is blocked
185
+ *
186
+ * Uses blocked_beads_cache for fast lookups
187
+ */
188
+ isBlocked(projectKey: string, beadId: string, projectPath?: string): Promise<boolean>;
189
+ /**
190
+ * Get all blockers for a bead
191
+ */
192
+ getBlockers(projectKey: string, beadId: string, projectPath?: string): Promise<string[]>;
193
+ }
194
+ /**
195
+ * Label on a bead
196
+ */
197
+ export interface BeadLabel {
198
+ bead_id: string;
199
+ label: string;
200
+ created_at: number;
201
+ }
202
+ export interface LabelAdapter {
203
+ /**
204
+ * Add a label to a bead
205
+ *
206
+ * Emits: bead_label_added event
207
+ */
208
+ addLabel(projectKey: string, beadId: string, label: string, options?: {
209
+ added_by?: string;
210
+ }, projectPath?: string): Promise<BeadLabel>;
211
+ /**
212
+ * Remove a label from a bead
213
+ *
214
+ * Emits: bead_label_removed event
215
+ */
216
+ removeLabel(projectKey: string, beadId: string, label: string, options?: {
217
+ removed_by?: string;
218
+ }, projectPath?: string): Promise<void>;
219
+ /**
220
+ * Get all labels for a bead
221
+ */
222
+ getLabels(projectKey: string, beadId: string, projectPath?: string): Promise<string[]>;
223
+ /**
224
+ * Get all beads with a label
225
+ */
226
+ getBeadsWithLabel(projectKey: string, label: string, projectPath?: string): Promise<Bead[]>;
227
+ }
228
+ /**
229
+ * Comment on a bead
230
+ */
231
+ export interface BeadComment {
232
+ id: number;
233
+ bead_id: string;
234
+ author: string;
235
+ body: string;
236
+ parent_id: number | null;
237
+ created_at: number;
238
+ updated_at: number | null;
239
+ }
240
+ export interface CommentAdapter {
241
+ /**
242
+ * Add a comment to a bead
243
+ *
244
+ * Emits: bead_comment_added event
245
+ */
246
+ addComment(projectKey: string, beadId: string, author: string, body: string, options?: {
247
+ parent_id?: number;
248
+ metadata?: Record<string, unknown>;
249
+ }, projectPath?: string): Promise<BeadComment>;
250
+ /**
251
+ * Update a comment
252
+ *
253
+ * Emits: bead_comment_updated event
254
+ */
255
+ updateComment(projectKey: string, commentId: number, newBody: string, updated_by: string, projectPath?: string): Promise<BeadComment>;
256
+ /**
257
+ * Delete a comment
258
+ *
259
+ * Emits: bead_comment_deleted event
260
+ */
261
+ deleteComment(projectKey: string, commentId: number, deleted_by: string, options?: {
262
+ reason?: string;
263
+ }, projectPath?: string): Promise<void>;
264
+ /**
265
+ * Get all comments for a bead
266
+ */
267
+ getComments(projectKey: string, beadId: string, projectPath?: string): Promise<BeadComment[]>;
268
+ }
269
+ export interface EpicAdapter {
270
+ /**
271
+ * Add a child bead to an epic
272
+ *
273
+ * Emits: bead_epic_child_added event
274
+ */
275
+ addChildToEpic(projectKey: string, epicId: string, childId: string, options?: {
276
+ child_index?: number;
277
+ added_by?: string;
278
+ }, projectPath?: string): Promise<void>;
279
+ /**
280
+ * Remove a child from an epic
281
+ *
282
+ * Emits: bead_epic_child_removed event
283
+ */
284
+ removeChildFromEpic(projectKey: string, epicId: string, childId: string, options?: {
285
+ reason?: string;
286
+ removed_by?: string;
287
+ }, projectPath?: string): Promise<void>;
288
+ /**
289
+ * Get all children of an epic
290
+ */
291
+ getEpicChildren(projectKey: string, epicId: string, projectPath?: string): Promise<Bead[]>;
292
+ /**
293
+ * Check if epic is eligible for closure
294
+ *
295
+ * Returns true if all children are closed
296
+ */
297
+ isEpicClosureEligible(projectKey: string, epicId: string, projectPath?: string): Promise<boolean>;
298
+ }
299
+ export interface QueryAdapter {
300
+ /**
301
+ * Get next ready bead (unblocked, highest priority)
302
+ *
303
+ * Implements steveyegge/beads ready_issues view logic
304
+ */
305
+ getNextReadyBead(projectKey: string, projectPath?: string): Promise<Bead | null>;
306
+ /**
307
+ * Get all in-progress beads
308
+ */
309
+ getInProgressBeads(projectKey: string, projectPath?: string): Promise<Bead[]>;
310
+ /**
311
+ * Get all blocked beads with their blockers
312
+ */
313
+ getBlockedBeads(projectKey: string, projectPath?: string): Promise<Array<{
314
+ bead: Bead;
315
+ blockers: string[];
316
+ }>>;
317
+ /**
318
+ * Mark bead as dirty for JSONL export
319
+ */
320
+ markDirty(projectKey: string, beadId: string, projectPath?: string): Promise<void>;
321
+ /**
322
+ * Get all dirty beads (for incremental export)
323
+ */
324
+ getDirtyBeads(projectKey: string, projectPath?: string): Promise<string[]>;
325
+ /**
326
+ * Clear dirty flag after export
327
+ */
328
+ clearDirty(projectKey: string, beadId: string, projectPath?: string): Promise<void>;
329
+ }
330
+ export interface BeadsSchemaAdapter {
331
+ /**
332
+ * Run beads-specific migrations
333
+ *
334
+ * Adds beads tables to shared PGLite database
335
+ */
336
+ runMigrations(projectPath?: string): Promise<void>;
337
+ /**
338
+ * Get beads statistics
339
+ */
340
+ getBeadsStats(projectPath?: string): Promise<{
341
+ total_beads: number;
342
+ open: number;
343
+ in_progress: number;
344
+ blocked: number;
345
+ closed: number;
346
+ by_type: Record<BeadType, number>;
347
+ }>;
348
+ /**
349
+ * Rebuild blocked beads cache
350
+ *
351
+ * Recalculates all blockers and updates blocked_beads_cache
352
+ */
353
+ rebuildBlockedCache(projectKey: string, projectPath?: string): Promise<void>;
354
+ }
355
+ /**
356
+ * BeadsAdapter - Complete interface for beads operations
357
+ *
358
+ * Combines all sub-adapters into a single interface.
359
+ * Implementations provide a DatabaseAdapter and implement all operations.
360
+ *
361
+ * This adapter shares the same PGLite database with SwarmMailAdapter.
362
+ */
363
+ export interface BeadsAdapter extends BeadAdapter, DependencyAdapter, LabelAdapter, CommentAdapter, EpicAdapter, QueryAdapter, BeadsSchemaAdapter {
364
+ /**
365
+ * Get the underlying database adapter
366
+ *
367
+ * Same instance as SwarmMailAdapter uses
368
+ */
369
+ getDatabase(projectPath?: string): Promise<DatabaseAdapter>;
370
+ /**
371
+ * Close the database connection
372
+ *
373
+ * Note: This is shared with SwarmMailAdapter, so closing should be coordinated
374
+ */
375
+ close(projectPath?: string): Promise<void>;
376
+ /**
377
+ * Close all database connections
378
+ */
379
+ closeAll(): Promise<void>;
380
+ }
381
+ /**
382
+ * BeadsAdapterFactory - Function that creates a BeadsAdapter instance
383
+ *
384
+ * Adapters export a factory function with this signature.
385
+ *
386
+ * @example
387
+ * ```typescript
388
+ * import { createPGLiteBeadsAdapter } from '@opencode/swarm-mail/adapters/pglite-beads';
389
+ *
390
+ * const adapter = createPGLiteBeadsAdapter({ path: './streams.db' });
391
+ * ```
392
+ */
393
+ export type BeadsAdapterFactory = (config: {
394
+ path?: string;
395
+ timeout?: number;
396
+ }) => BeadsAdapter;
397
+ //# sourceMappingURL=beads-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads-adapter.d.ts","sourceRoot":"","sources":["../../src/types/beads-adapter.ts"],"names":[],"mappings":"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"}
@@ -89,6 +89,73 @@ export interface DatabaseAdapter {
89
89
  * If not provided, swarm-mail assumes connection is managed externally.
90
90
  */
91
91
  close?(): Promise<void>;
92
+ /**
93
+ * Force a checkpoint to flush WAL to data files (optional)
94
+ *
95
+ * PostgreSQL CHECKPOINT command forces write-ahead log (WAL) to be written
96
+ * to data files, allowing WAL to be recycled. Critical for preventing WAL
97
+ * bloat in embedded databases like PGLite.
98
+ *
99
+ * Root cause from pdf-brain: PGLite accumulated 930 WAL files (930MB) without
100
+ * explicit CHECKPOINT, causing WASM OOM crash.
101
+ *
102
+ * Call after batch operations:
103
+ * - Migration batches
104
+ * - Bulk event appends
105
+ * - Large projection updates
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * await db.exec("CREATE TABLE ...");
110
+ * await db.checkpoint?.(); // Force WAL flush
111
+ * ```
112
+ */
113
+ checkpoint?(): Promise<void>;
114
+ /**
115
+ * Get WAL statistics (optional)
116
+ *
117
+ * Returns current size and file count of write-ahead log (WAL) files.
118
+ * Use for monitoring WAL bloat to prevent WASM OOM crashes in PGLite.
119
+ *
120
+ * For PGLite: checks pg_wal directory in dataDir
121
+ * For PostgreSQL: queries pg_stat_wal (if available)
122
+ *
123
+ * @returns WAL stats with size in bytes and file count
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * const stats = await db.getWalStats?.();
128
+ * console.log(`WAL: ${stats.walSize / 1024 / 1024}MB, ${stats.walFileCount} files`);
129
+ * ```
130
+ */
131
+ getWalStats?(): Promise<{
132
+ walSize: number;
133
+ walFileCount: number;
134
+ }>;
135
+ /**
136
+ * Check WAL health against threshold (optional)
137
+ *
138
+ * Monitors WAL size and warns when it exceeds a configurable threshold.
139
+ * Default threshold: 100MB (warns before critical 930MB from pdf-brain crash).
140
+ *
141
+ * Returns health status with message describing current WAL state.
142
+ *
143
+ * @param thresholdMb - Warning threshold in megabytes (default: 100)
144
+ * @returns Health result with boolean status and descriptive message
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * const health = await db.checkWalHealth?.(100);
149
+ * if (!health.healthy) {
150
+ * console.warn(health.message);
151
+ * await db.checkpoint?.(); // Trigger checkpoint
152
+ * }
153
+ * ```
154
+ */
155
+ checkWalHealth?(thresholdMb?: number): Promise<{
156
+ healthy: boolean;
157
+ message: string;
158
+ }>;
92
159
  }
93
160
  /**
94
161
  * Database configuration options
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/types/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACvC,2BAA2B;IAC3B,IAAI,EAAE,CAAC,EAAE,CAAC;CACV;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAErE;;;;;OAKG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE;QACP,0CAA0C;QAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,qCAAqC;QACrC,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,+BAA+B;QAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;KACd,CAAC;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,eAAe,GACtB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,GAAG,eAAe,CAE7E"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/types/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACvC,2BAA2B;IAC3B,IAAI,EAAE,CAAC,EAAE,CAAC;CACV;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC/B;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7E;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAErE;;;;;OAKG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEnE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,CACd,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE;QACP,0CAA0C;QAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,qCAAqC;QACrC,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,+BAA+B;QAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;KACd,CAAC;CACF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,eAAe,GACtB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,GAAG,eAAe,CAE7E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swarm-mail",
3
- "version": "0.5.0",
3
+ "version": "1.1.0",
4
4
  "description": "Event sourcing primitives for multi-agent coordination. Local-first, no external servers.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,6 +19,10 @@
19
19
  "types": "./dist/index.d.ts"
20
20
  }
21
21
  },
22
+ "publishConfig": {
23
+ "access": "public",
24
+ "registry": "https://registry.npmjs.org/"
25
+ },
22
26
  "repository": {
23
27
  "type": "git",
24
28
  "url": "https://github.com/joelhooks/opencode-swarm-plugin"
@@ -31,8 +35,7 @@
31
35
  "test:beads": "bun test src/beads/ --timeout 60000",
32
36
  "test:integration": "vitest run src/streams/**/*.integration-test.ts --testTimeout 60000",
33
37
  "test:all": "bun test src/ --timeout 60000",
34
- "typecheck": "tsc --noEmit",
35
- "publish:pkg": "npm publish --access public --provenance"
38
+ "typecheck": "tsc --noEmit"
36
39
  },
37
40
  "dependencies": {
38
41
  "@electric-sql/pglite": "0.3.14",