swarm-mail 1.2.2 → 1.3.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 (140) hide show
  1. package/dist/adapter.d.ts +2 -2
  2. package/dist/db/client.d.ts +68 -0
  3. package/dist/db/client.d.ts.map +1 -0
  4. package/dist/db/drizzle.d.ts +24 -0
  5. package/dist/db/drizzle.d.ts.map +1 -0
  6. package/dist/db/index.d.ts +25 -0
  7. package/dist/db/index.d.ts.map +1 -0
  8. package/dist/db/migrate.d.ts +81 -0
  9. package/dist/db/migrate.d.ts.map +1 -0
  10. package/dist/db/schema/hive.d.ts +1596 -0
  11. package/dist/db/schema/hive.d.ts.map +1 -0
  12. package/dist/db/schema/index.d.ts +12 -0
  13. package/dist/db/schema/index.d.ts.map +1 -0
  14. package/dist/db/schema/memory.d.ts +214 -0
  15. package/dist/db/schema/memory.d.ts.map +1 -0
  16. package/dist/db/schema/streams.d.ts +1601 -0
  17. package/dist/db/schema/streams.d.ts.map +1 -0
  18. package/dist/hive/adapter.d.ts +8 -8
  19. package/dist/hive/adapter.d.ts.map +1 -1
  20. package/dist/hive/dependencies-drizzle.d.ts +31 -0
  21. package/dist/hive/dependencies-drizzle.d.ts.map +1 -0
  22. package/dist/hive/dependencies.d.ts.map +1 -1
  23. package/dist/hive/flush-manager.d.ts +2 -1
  24. package/dist/hive/flush-manager.d.ts.map +1 -1
  25. package/dist/hive/jsonl.d.ts.map +1 -1
  26. package/dist/hive/migrations.d.ts +23 -3
  27. package/dist/hive/migrations.d.ts.map +1 -1
  28. package/dist/hive/projections-drizzle.d.ts +43 -0
  29. package/dist/hive/projections-drizzle.d.ts.map +1 -0
  30. package/dist/hive/projections.d.ts +8 -0
  31. package/dist/hive/projections.d.ts.map +1 -1
  32. package/dist/hive/queries-drizzle.d.ts +52 -0
  33. package/dist/hive/queries-drizzle.d.ts.map +1 -0
  34. package/dist/hive/queries.d.ts +38 -0
  35. package/dist/hive/queries.d.ts.map +1 -1
  36. package/dist/hive/store.d.ts +36 -14
  37. package/dist/hive/store.d.ts.map +1 -1
  38. package/dist/index.d.ts +34 -18
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +83666 -38455
  41. package/dist/libsql.convenience.d.ts +155 -0
  42. package/dist/libsql.convenience.d.ts.map +1 -0
  43. package/dist/libsql.d.ts +93 -0
  44. package/dist/libsql.d.ts.map +1 -0
  45. package/dist/memory/adapter.d.ts +6 -7
  46. package/dist/memory/adapter.d.ts.map +1 -1
  47. package/dist/memory/libsql-schema.d.ts +83 -0
  48. package/dist/memory/libsql-schema.d.ts.map +1 -0
  49. package/dist/memory/migrate-legacy.d.ts +3 -0
  50. package/dist/memory/migrate-legacy.d.ts.map +1 -1
  51. package/dist/memory/migrations.d.ts +11 -0
  52. package/dist/memory/migrations.d.ts.map +1 -1
  53. package/dist/memory/store.d.ts +39 -31
  54. package/dist/memory/store.d.ts.map +1 -1
  55. package/dist/memory/test-utils.d.ts +59 -0
  56. package/dist/memory/test-utils.d.ts.map +1 -0
  57. package/dist/migrate-pglite-to-libsql.d.ts +73 -0
  58. package/dist/migrate-pglite-to-libsql.d.ts.map +1 -0
  59. package/dist/pglite.d.ts +8 -170
  60. package/dist/pglite.d.ts.map +1 -1
  61. package/dist/streams/agent-mail.d.ts +13 -0
  62. package/dist/streams/agent-mail.d.ts.map +1 -1
  63. package/dist/streams/auto-migrate.d.ts +182 -0
  64. package/dist/streams/auto-migrate.d.ts.map +1 -0
  65. package/dist/streams/effect/ask.d.ts +5 -4
  66. package/dist/streams/effect/ask.d.ts.map +1 -1
  67. package/dist/streams/effect/cursor.d.ts +3 -2
  68. package/dist/streams/effect/cursor.d.ts.map +1 -1
  69. package/dist/streams/effect/deferred.d.ts +12 -9
  70. package/dist/streams/effect/deferred.d.ts.map +1 -1
  71. package/dist/streams/effect/lock.d.ts +13 -11
  72. package/dist/streams/effect/lock.d.ts.map +1 -1
  73. package/dist/streams/effect/mailbox.d.ts +3 -2
  74. package/dist/streams/effect/mailbox.d.ts.map +1 -1
  75. package/dist/streams/events.d.ts +4 -0
  76. package/dist/streams/events.d.ts.map +1 -1
  77. package/dist/streams/index.d.ts +20 -74
  78. package/dist/streams/index.d.ts.map +1 -1
  79. package/dist/streams/libsql-schema.d.ts +77 -0
  80. package/dist/streams/libsql-schema.d.ts.map +1 -0
  81. package/dist/streams/migrations.d.ts +8 -8
  82. package/dist/streams/migrations.d.ts.map +1 -1
  83. package/dist/streams/projections-drizzle.d.ts +175 -0
  84. package/dist/streams/projections-drizzle.d.ts.map +1 -0
  85. package/dist/streams/projections.d.ts +9 -0
  86. package/dist/streams/projections.d.ts.map +1 -1
  87. package/dist/streams/store-drizzle.d.ts +96 -0
  88. package/dist/streams/store-drizzle.d.ts.map +1 -0
  89. package/dist/streams/store.d.ts +23 -0
  90. package/dist/streams/store.d.ts.map +1 -1
  91. package/dist/streams/swarm-mail.d.ts +9 -0
  92. package/dist/streams/swarm-mail.d.ts.map +1 -1
  93. package/dist/test-libsql.d.ts +76 -0
  94. package/dist/test-libsql.d.ts.map +1 -0
  95. package/dist/types/adapter.d.ts +3 -3
  96. package/dist/types/database.d.ts +12 -12
  97. package/dist/types/hive-adapter.d.ts +5 -5
  98. package/package.json +5 -5
  99. package/dist/beads/adapter.d.ts +0 -38
  100. package/dist/beads/adapter.d.ts.map +0 -1
  101. package/dist/beads/blocked-cache.d.ts +0 -21
  102. package/dist/beads/blocked-cache.d.ts.map +0 -1
  103. package/dist/beads/comments.d.ts +0 -21
  104. package/dist/beads/comments.d.ts.map +0 -1
  105. package/dist/beads/dependencies.d.ts +0 -58
  106. package/dist/beads/dependencies.d.ts.map +0 -1
  107. package/dist/beads/events.d.ts +0 -163
  108. package/dist/beads/events.d.ts.map +0 -1
  109. package/dist/beads/flush-manager.d.ts +0 -71
  110. package/dist/beads/flush-manager.d.ts.map +0 -1
  111. package/dist/beads/index.d.ts +0 -25
  112. package/dist/beads/index.d.ts.map +0 -1
  113. package/dist/beads/jsonl.d.ts +0 -103
  114. package/dist/beads/jsonl.d.ts.map +0 -1
  115. package/dist/beads/labels.d.ts +0 -21
  116. package/dist/beads/labels.d.ts.map +0 -1
  117. package/dist/beads/merge.d.ts +0 -99
  118. package/dist/beads/merge.d.ts.map +0 -1
  119. package/dist/beads/migrations.d.ts +0 -41
  120. package/dist/beads/migrations.d.ts.map +0 -1
  121. package/dist/beads/operations.d.ts +0 -56
  122. package/dist/beads/operations.d.ts.map +0 -1
  123. package/dist/beads/projections.d.ts +0 -103
  124. package/dist/beads/projections.d.ts.map +0 -1
  125. package/dist/beads/queries.d.ts +0 -77
  126. package/dist/beads/queries.d.ts.map +0 -1
  127. package/dist/beads/store.d.ts +0 -98
  128. package/dist/beads/store.d.ts.map +0 -1
  129. package/dist/beads/validation.d.ts +0 -75
  130. package/dist/beads/validation.d.ts.map +0 -1
  131. package/dist/daemon.d.ts +0 -161
  132. package/dist/daemon.d.ts.map +0 -1
  133. package/dist/socket-adapter.d.ts +0 -78
  134. package/dist/socket-adapter.d.ts.map +0 -1
  135. package/dist/streams/debug.d.ts +0 -173
  136. package/dist/streams/debug.d.ts.map +0 -1
  137. package/dist/test-server.d.ts +0 -64
  138. package/dist/test-server.d.ts.map +0 -1
  139. package/dist/types/beads-adapter.d.ts +0 -397
  140. package/dist/types/beads-adapter.d.ts.map +0 -1
@@ -0,0 +1,73 @@
1
+ /**
2
+ * PGlite → libSQL Migration Tool
3
+ *
4
+ * Migrates all data from PGlite (streams/) to libSQL (streams.db):
5
+ * - memories + embeddings
6
+ * - beads (cells)
7
+ * - messages
8
+ * - agents
9
+ * - reservations
10
+ * - events
11
+ *
12
+ * ## Usage
13
+ *
14
+ * ```typescript
15
+ * import { migratePGliteToLibSQL } from 'swarm-mail';
16
+ *
17
+ * const result = await migratePGliteToLibSQL({
18
+ * pglitePath: '/path/to/streams',
19
+ * libsqlPath: '/path/to/streams.db',
20
+ * dryRun: false,
21
+ * });
22
+ * ```
23
+ *
24
+ * @module migrate-pglite-to-libsql
25
+ */
26
+ export interface MigrationOptions {
27
+ /** Path to PGlite data directory (contains PG_VERSION) */
28
+ pglitePath: string;
29
+ /** Path to libSQL database file */
30
+ libsqlPath: string;
31
+ /** If true, only report what would be migrated */
32
+ dryRun?: boolean;
33
+ /** Callback for progress updates */
34
+ onProgress?: (message: string) => void;
35
+ }
36
+ export interface MigrationResult {
37
+ memories: {
38
+ migrated: number;
39
+ skipped: number;
40
+ failed: number;
41
+ };
42
+ beads: {
43
+ migrated: number;
44
+ skipped: number;
45
+ failed: number;
46
+ };
47
+ messages: {
48
+ migrated: number;
49
+ skipped: number;
50
+ failed: number;
51
+ };
52
+ agents: {
53
+ migrated: number;
54
+ skipped: number;
55
+ failed: number;
56
+ };
57
+ events: {
58
+ migrated: number;
59
+ skipped: number;
60
+ failed: number;
61
+ };
62
+ errors: string[];
63
+ dryRun: boolean;
64
+ }
65
+ /**
66
+ * Check if PGlite database exists at path
67
+ */
68
+ export declare function pgliteExists(path: string): boolean;
69
+ /**
70
+ * Migrate all data from PGlite to libSQL
71
+ */
72
+ export declare function migratePGliteToLibSQL(options: MigrationOptions): Promise<MigrationResult>;
73
+ //# sourceMappingURL=migrate-pglite-to-libsql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-pglite-to-libsql.d.ts","sourceRoot":"","sources":["../src/migrate-pglite-to-libsql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA4E1B"}
package/dist/pglite.d.ts CHANGED
@@ -1,178 +1,16 @@
1
1
  /**
2
- * PGLite Convenience Layer - Simple API for PGLite users
2
+ * PGLite Compatibility Shim
3
3
  *
4
- * This file provides a simplified interface for users who just want to use
5
- * PGLite without manually setting up adapters. For advanced use cases (custom
6
- * database, connection pooling, etc.), use createSwarmMailAdapter directly.
4
+ * Provides wrapPGlite for tests that still use PGLite directly.
5
+ * This is a temporary shim during the libSQL migration.
7
6
  *
8
- * ## Simple API (this file)
9
- * ```typescript
10
- * import { getSwarmMail } from '@opencode/swarm-mail';
11
- *
12
- * const swarmMail = await getSwarmMail('/path/to/project');
13
- * await swarmMail.registerAgent(projectKey, 'agent-name');
14
- * ```
15
- *
16
- * ## Advanced API (adapter pattern)
17
- * ```typescript
18
- * import { createSwarmMailAdapter } from '@opencode/swarm-mail';
19
- * import { createCustomDbAdapter } from './my-adapter';
20
- *
21
- * const db = createCustomDbAdapter({ path: './custom.db' });
22
- * const swarmMail = createSwarmMailAdapter(db, '/path/to/project');
23
- * ```
24
- */
25
- import { PGlite } from "@electric-sql/pglite";
26
- import type { DatabaseAdapter, SwarmMailAdapter } from "./types";
27
- /**
28
- * Wrap PGLite to match DatabaseAdapter interface
29
- *
30
- * PGLite has query() and exec() methods that match DatabaseAdapter,
31
- * but TypeScript needs the explicit wrapper for type safety.
32
- * PGLite's exec() returns Results[] but DatabaseAdapter expects void.
33
- */
34
- export declare function wrapPGlite(pglite: PGlite): DatabaseAdapter;
35
- /**
36
- * Generate a short hash for a project path
37
- *
38
- * Uses SHA256 and takes first 8 characters for uniqueness.
39
- *
40
- * @param projectPath - Project root path
41
- * @returns 8-character hash string
42
- */
43
- export declare function hashProjectPath(projectPath: string): string;
44
- /**
45
- * Get a human-readable project identifier with hash suffix
46
- *
47
- * Format: `opencode-<project-name>-<hash>`
48
- * Example: `opencode-my-project-a1b2c3d4`
49
- *
50
- * @param projectPath - Project root path
51
- * @returns Directory name for the project's temp storage
52
- */
53
- export declare function getProjectTempDirName(projectPath: string): string;
54
- /**
55
- * Get database path in $TMPDIR (ephemeral storage)
56
- *
57
- * Streams data is ephemeral coordination state - messages, reservations,
58
- * agent registrations. It's safe to lose on reboot since:
59
- * - Beads are git-synced separately in .beads/
60
- * - Semantic memory is in ~/.opencode/memory/
61
- * - Agents re-register on session start
62
- *
63
- * Path format: `$TMPDIR/opencode-<project-name>-<hash>/streams`
64
- * Falls back to global `$TMPDIR/opencode-global/streams` if no project path.
65
- *
66
- * @param projectPath - Optional project root path
67
- * @returns Absolute path to database directory
68
- */
69
- export declare function getDatabasePath(projectPath?: string): string;
70
- /**
71
- * Get or create SwarmMail instance for a project
72
- *
73
- * Uses singleton pattern - one instance per database path.
74
- * Safe to call multiple times for the same project.
75
- *
76
- * **Socket Mode (default):**
77
- * - Checks if daemon is running, starts if needed
78
- * - Validates health before connecting
79
- * - Falls back to embedded PGLite on any failure
80
- * - Set `SWARM_MAIL_SOCKET=false` to opt out
81
- *
82
- * **Embedded Mode (opt-out with SWARM_MAIL_SOCKET=false):**
83
- * - Uses embedded PGLite database
84
- * - No daemon required
85
- * - Only use for single-process scenarios
86
- *
87
- * @param projectPath - Optional project root path (defaults to global)
88
- * @returns SwarmMailAdapter instance
89
- *
90
- * @example
91
- * ```typescript
92
- * // Project-local database (daemon mode by default)
93
- * const swarmMail = await getSwarmMail('/path/to/project');
94
- *
95
- * // Opt out of daemon mode (embedded PGLite)
96
- * process.env.SWARM_MAIL_SOCKET = 'false';
97
- * const swarmMail = await getSwarmMail('/path/to/project');
98
- *
99
- * // Global database (shared across all projects)
100
- * const swarmMail = await getSwarmMail();
101
- * ```
102
- */
103
- export declare function getSwarmMail(projectPath?: string): Promise<SwarmMailAdapter>;
104
- /**
105
- * Get SwarmMail instance using socket adapter (explicit socket mode)
106
- *
107
- * Always uses socket connection to pglite-server daemon.
108
- * Auto-starts daemon if not running, validates health before connecting.
109
- *
110
- * **Port/Path Resolution:**
111
- * - Checks SWARM_MAIL_SOCKET_PATH env var for Unix socket
112
- * - Falls back to TCP on SWARM_MAIL_SOCKET_PORT (default: 15433)
113
- * - Host defaults to 127.0.0.1
114
- *
115
- * @param projectPath - Optional project root path
116
- * @returns SwarmMailAdapter instance using socket connection
117
- * @throws Error if daemon fails to start or health check fails
118
- *
119
- * @example
120
- * ```typescript
121
- * // Unix socket (preferred)
122
- * process.env.SWARM_MAIL_SOCKET_PATH = '/tmp/swarm-mail.sock';
123
- * const swarmMail = await getSwarmMailSocket('/path/to/project');
124
- *
125
- * // TCP socket
126
- * process.env.SWARM_MAIL_SOCKET_PORT = '15433';
127
- * const swarmMail = await getSwarmMailSocket('/path/to/project');
128
- * ```
7
+ * @deprecated Use libSQL adapter instead. This file will be removed.
129
8
  */
130
- export declare function getSwarmMailSocket(projectPath?: string): Promise<SwarmMailAdapter>;
9
+ import type { DatabaseAdapter } from "./types/database.js";
131
10
  /**
132
- * Create in-memory SwarmMail instance (for testing)
133
- *
134
- * Not cached - each call creates a new instance.
135
- * Data is lost when instance is closed or process exits.
136
- *
137
- * @param projectKey - Project identifier (defaults to 'test')
138
- * @returns SwarmMailAdapter instance
139
- *
140
- * @example
141
- * ```typescript
142
- * const swarmMail = await createInMemorySwarmMail('test-project');
143
- * await swarmMail.registerAgent('test-project', 'test-agent');
144
- * // ... test code ...
145
- * await swarmMail.close();
146
- * ```
147
- */
148
- export declare function createInMemorySwarmMail(projectKey?: string): Promise<SwarmMailAdapter>;
149
- /**
150
- * Close specific SwarmMail instance
151
- *
152
- * Closes the database connection and removes from cache.
153
- *
154
- * @param projectPath - Optional project root path (defaults to global)
155
- *
156
- * @example
157
- * ```typescript
158
- * await closeSwarmMail('/path/to/project');
159
- * ```
160
- */
161
- export declare function closeSwarmMail(projectPath?: string): Promise<void>;
162
- /**
163
- * Close all SwarmMail instances
164
- *
165
- * Closes all cached database connections.
166
- * Useful for cleanup in test teardown or process shutdown.
11
+ * Wrap a PGlite instance as a DatabaseAdapter
167
12
  *
168
- * @example
169
- * ```typescript
170
- * // Test teardown
171
- * afterAll(async () => {
172
- * await closeAllSwarmMail();
173
- * });
174
- * ```
13
+ * @deprecated Use createLibSQLAdapter instead
175
14
  */
176
- export declare function closeAllSwarmMail(): Promise<void>;
177
- export { PGlite };
15
+ export declare function wrapPGlite(pglite: any): DatabaseAdapter;
178
16
  //# sourceMappingURL=pglite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAS9C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAqDjE;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAkC1D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB5D;AA0HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,YAAY,CAChC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAqD3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAuGD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,SAAS,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUvD;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,CA0CvD"}
@@ -1,3 +1,4 @@
1
+ import type { DatabaseAdapter } from "../types/database";
1
2
  export interface AgentMailContext {
2
3
  projectKey: string;
3
4
  agentName: string;
@@ -8,6 +9,7 @@ export interface InitAgentOptions {
8
9
  program?: string;
9
10
  model?: string;
10
11
  taskDescription?: string;
12
+ dbOverride?: DatabaseAdapter;
11
13
  }
12
14
  export interface SendMessageOptions {
13
15
  projectPath: string;
@@ -60,6 +62,7 @@ export interface ReserveFilesOptions {
60
62
  exclusive?: boolean;
61
63
  ttlSeconds?: number;
62
64
  force?: boolean;
65
+ dbOverride?: DatabaseAdapter;
63
66
  }
64
67
  export interface GrantedReservation {
65
68
  id: number;
@@ -80,6 +83,7 @@ export interface ReleaseFilesOptions {
80
83
  agentName: string;
81
84
  paths?: string[];
82
85
  reservationIds?: number[];
86
+ dbOverride?: DatabaseAdapter;
83
87
  }
84
88
  export interface ReleaseFilesResult {
85
89
  released: number;
@@ -106,6 +110,8 @@ export interface HealthResult {
106
110
  }
107
111
  /**
108
112
  * Initialize an agent for this session
113
+ *
114
+ * Automatically migrates old project-local databases to global DB on first init.
109
115
  */
110
116
  export declare function initAgent(options: InitAgentOptions): Promise<AgentMailContext>;
111
117
  /**
@@ -122,10 +128,14 @@ export declare function getAgentInbox(options: GetInboxOptions): Promise<InboxRe
122
128
  export declare function readAgentMessage(options: ReadMessageOptions): Promise<InboxMessage | null>;
123
129
  /**
124
130
  * Reserve files for exclusive editing
131
+ *
132
+ * Now uses DurableLock underneath for actual mutual exclusion
125
133
  */
126
134
  export declare function reserveAgentFiles(options: ReserveFilesOptions): Promise<ReserveFilesResult>;
127
135
  /**
128
136
  * Release file reservations
137
+ *
138
+ * Now uses DurableLock.release() for actual lock release
129
139
  */
130
140
  export declare function releaseAgentFiles(options: ReleaseFilesOptions): Promise<ReleaseFilesResult>;
131
141
  /**
@@ -134,6 +144,9 @@ export declare function releaseAgentFiles(options: ReleaseFilesOptions): Promise
134
144
  export declare function acknowledgeMessage(options: AcknowledgeOptions): Promise<AcknowledgeResult>;
135
145
  /**
136
146
  * Check if the agent mail store is healthy
147
+ *
148
+ * Migrated from PGlite to libSQL adapter pattern.
149
+ * Delegates to checkSwarmHealth() which uses getSwarmMailLibSQL().
137
150
  */
138
151
  export declare function checkHealth(projectPath?: string): Promise<HealthResult>;
139
152
  //# sourceMappingURL=agent-mail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-mail.d.ts","sourceRoot":"","sources":["../../src/streams/agent-mail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-mail.d.ts","sourceRoot":"","sources":["../../src/streams/agent-mail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Auto-Migration Module - Project DB → Global DB
3
+ *
4
+ * Automatically migrates project-local databases (.opencode/streams.db or .opencode/streams/)
5
+ * to the global database (~/.config/swarm-tools/swarm.db).
6
+ *
7
+ * ## Detection Functions
8
+ * - needsMigration() - fast fs.existsSync check for project DB
9
+ * - getGlobalDbPath() - returns ~/.config/swarm-tools/swarm.db
10
+ * - detectSourceType() - returns 'libsql' | 'pglite' | 'none'
11
+ *
12
+ * ## Migration Functions
13
+ * - migrateProjectToGlobal() - orchestrates full migration
14
+ * - migrateLibSQLToGlobal() - migrates libSQL → global DB
15
+ * - migratePGLiteToGlobal() - migrates PGlite → global DB (delegates to existing migrator)
16
+ * - backupOldDb() - renames old DB with timestamp
17
+ *
18
+ * ## Tables Migrated
19
+ * Streams: events, agents, messages, message_recipients, reservations, cursors, locks
20
+ * Hive: beads, bead_dependencies, bead_labels, bead_comments, blocked_beads_cache, dirty_beads
21
+ * Learning: eval_records, swarm_contexts, deferred
22
+ *
23
+ * ## Error Handling
24
+ * - Handles missing tables gracefully (old DBs may not have all tables)
25
+ * - Uses INSERT OR IGNORE for idempotency
26
+ * - Atomic operations where possible
27
+ *
28
+ * @module streams/auto-migrate
29
+ */
30
+ import type { Client } from "@libsql/client";
31
+ /**
32
+ * Source database type
33
+ */
34
+ export type SourceType = "libsql" | "pglite" | "none";
35
+ /**
36
+ * Migration statistics for a single table
37
+ */
38
+ export interface TableMigrationStats {
39
+ /** Number of rows migrated */
40
+ migrated: number;
41
+ /** Number of rows skipped (already exist) */
42
+ skipped: number;
43
+ /** Number of rows that failed */
44
+ failed: number;
45
+ }
46
+ /**
47
+ * Migration statistics for all tables
48
+ */
49
+ export interface MigrationStats {
50
+ events: number;
51
+ agents: number;
52
+ messages: number;
53
+ messageRecipients: number;
54
+ reservations: number;
55
+ cursors: number;
56
+ locks: number;
57
+ beads: number;
58
+ beadDependencies: number;
59
+ beadLabels: number;
60
+ beadComments: number;
61
+ blockedBeadsCache: number;
62
+ dirtyBeads: number;
63
+ evalRecords: number;
64
+ swarmContexts: number;
65
+ deferred: number;
66
+ /** Any errors encountered during migration */
67
+ errors: string[];
68
+ }
69
+ /**
70
+ * Result of full project migration
71
+ */
72
+ export interface MigrationResult {
73
+ /** Source database type */
74
+ sourceType: SourceType;
75
+ /** Migration statistics */
76
+ stats: MigrationStats;
77
+ /** Path to backup of old database */
78
+ backupPath: string;
79
+ /** Path to global database */
80
+ globalDbPath: string;
81
+ }
82
+ /**
83
+ * Check if project needs migration
84
+ *
85
+ * Fast fs.existsSync check for project-local database.
86
+ *
87
+ * @param projectPath - absolute path to project root
88
+ * @returns true if project has local DB (libSQL or PGlite)
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * if (needsMigration("/path/to/project")) {
93
+ * await migrateProjectToGlobal("/path/to/project");
94
+ * }
95
+ * ```
96
+ */
97
+ export declare function needsMigration(projectPath: string): boolean;
98
+ /**
99
+ * Get global database path
100
+ *
101
+ * @returns ~/.config/swarm-tools/swarm.db
102
+ */
103
+ export declare function getGlobalDbPath(): string;
104
+ /**
105
+ * Detect source database type
106
+ *
107
+ * @param projectPath - absolute path to project root
108
+ * @returns 'libsql' | 'pglite' | 'none'
109
+ */
110
+ export declare function detectSourceType(projectPath: string): SourceType;
111
+ /**
112
+ * Migrate project database to global database
113
+ *
114
+ * Orchestrates full migration:
115
+ * 1. Detect source type
116
+ * 2. Call appropriate migrator
117
+ * 3. Backup old DB
118
+ * 4. Return stats
119
+ *
120
+ * @param projectPath - absolute path to project root
121
+ * @param globalDbPath - path to global database (defaults to ~/.opencode/swarm-mail.db)
122
+ * @returns migration result with stats and backup path
123
+ *
124
+ * @throws Error if migration fails
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const result = await migrateProjectToGlobal("/path/to/project");
129
+ * console.log(`Migrated ${result.stats.events} events`);
130
+ * console.log(`Backup at ${result.backupPath}`);
131
+ * ```
132
+ */
133
+ export declare function migrateProjectToGlobal(projectPath: string, globalDbPath?: string): Promise<MigrationResult>;
134
+ /**
135
+ * Migrate libSQL database to global database
136
+ *
137
+ * Migrates all tables from source libSQL DB to global DB using INSERT OR IGNORE.
138
+ * Handles missing tables gracefully (old DBs may not have all tables).
139
+ *
140
+ * ## Tables Migrated
141
+ * - Streams: events, agents, messages, message_recipients, reservations, cursors, locks
142
+ * - Hive: beads, bead_dependencies, bead_labels, bead_comments, blocked_beads_cache, dirty_beads
143
+ * - Learning: eval_records, swarm_contexts, deferred
144
+ *
145
+ * @param sourcePath - absolute path to source streams.db
146
+ * @param globalDb - libSQL client for global database
147
+ * @returns migration statistics
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const globalDb = createClient({ url: "file:~/.opencode/swarm-mail.db" });
152
+ * const stats = await migrateLibSQLToGlobal("/project/.opencode/streams.db", globalDb);
153
+ * ```
154
+ */
155
+ export declare function migrateLibSQLToGlobal(sourcePath: string, globalDb: Client): Promise<MigrationStats>;
156
+ /**
157
+ * Migrate PGlite database to global database
158
+ *
159
+ * Delegates to existing migratePGliteToLibSQL() implementation.
160
+ * Converts PGlite types (JSONB → JSON, SERIAL → INTEGER) automatically.
161
+ *
162
+ * @param sourcePath - absolute path to PGlite data directory
163
+ * @param _globalDb - libSQL client for global database (unused - delegated to migrator)
164
+ * @returns migration statistics
165
+ */
166
+ export declare function migratePGLiteToGlobal(sourcePath: string, _globalDb: Client): Promise<MigrationStats>;
167
+ /**
168
+ * Backup old database
169
+ *
170
+ * Renames database file or directory with .backup-<ISO-timestamp> suffix.
171
+ *
172
+ * @param path - path to database file or directory
173
+ * @returns path to backup
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * const backupPath = backupOldDb("/project/.opencode/streams.db");
178
+ * // => "/project/.opencode/streams.db.backup-2025-12-21T10:30:00.000Z"
179
+ * ```
180
+ */
181
+ export declare function backupOldDb(path: string): string;
182
+ //# sourceMappingURL=auto-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-migrate.d.ts","sourceRoot":"","sources":["../../src/streams/auto-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAa7C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAGd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IAGnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,2BAA2B;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,2BAA2B;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAiBhE;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,CAC3C,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,MAA0B,GACtC,OAAO,CAAC,eAAe,CAAC,CAwC1B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,qBAAqB,CAC1C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAyMzB;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAC1C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CA+BzB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWhD"}
@@ -31,6 +31,7 @@ import { DurableCursor } from "./cursor";
31
31
  import { DurableMailbox, type Mailbox } from "./mailbox";
32
32
  import { DurableDeferred } from "./deferred";
33
33
  import type { TimeoutError, NotFoundError } from "./deferred";
34
+ import type { DatabaseAdapter } from "../../types/database";
34
35
  /**
35
36
  * Configuration for ask() request
36
37
  */
@@ -47,8 +48,8 @@ export interface AskConfig<Req> {
47
48
  readonly threadId?: string;
48
49
  /** Optional importance level */
49
50
  readonly importance?: "low" | "normal" | "high" | "urgent";
50
- /** Optional project path for database isolation */
51
- readonly projectPath?: string;
51
+ /** Database adapter for deferred storage */
52
+ readonly db: DatabaseAdapter;
52
53
  }
53
54
  /**
54
55
  * Request/response pattern combining mailbox send + deferred await
@@ -102,7 +103,7 @@ export declare function askWithMailbox<Req, Res>(config: {
102
103
  readonly ttlSeconds?: number;
103
104
  readonly threadId?: string;
104
105
  readonly importance?: "low" | "normal" | "high" | "urgent";
105
- readonly projectPath?: string;
106
+ readonly db: DatabaseAdapter;
106
107
  }): Effect.Effect<Res, TimeoutError | NotFoundError, DurableDeferred | DurableMailbox | DurableCursor>;
107
108
  /**
108
109
  * Respond to a message envelope by resolving its replyTo deferred
@@ -120,5 +121,5 @@ export declare function askWithMailbox<Req, Res>(config: {
120
121
  */
121
122
  export declare function respond<T>(envelope: {
122
123
  readonly replyTo?: string;
123
- }, value: T, projectPath?: string): Effect.Effect<void, NotFoundError, DurableDeferred>;
124
+ }, value: T, db: DatabaseAdapter): Effect.Effect<void, NotFoundError, DurableDeferred>;
124
125
  //# sourceMappingURL=ask.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../../src/streams/effect/ask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM9D;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,GAAG;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,sBAAsB;IACtB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3D,mDAAmD;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAC1B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GACrB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,EAAE,eAAe,CAAC,CAwBnE;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,MAAM,CAAC,MAAM,CACf,GAAG,EACH,YAAY,GAAG,aAAa,EAC5B,eAAe,GAAG,cAAc,GAAG,aAAa,CACjD,CAoBA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,QAAQ,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EACvC,KAAK,EAAE,CAAC,EACR,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAUrD"}
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../../src/streams/effect/ask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,GAAG;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,sBAAsB;IACtB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3D,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;CAC9B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAC1B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GACrB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,EAAE,eAAe,CAAC,CAwBnE;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3D,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;CAC9B,GAAG,MAAM,CAAC,MAAM,CACf,GAAG,EACH,YAAY,GAAG,aAAa,EAC5B,eAAe,GAAG,cAAc,GAAG,aAAa,CACjD,CAoBA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,QAAQ,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EACvC,KAAK,EAAE,CAAC,EACR,EAAE,EAAE,eAAe,GAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAUrD"}
@@ -22,6 +22,7 @@
22
22
  */
23
23
  import { Context, Effect } from "effect";
24
24
  import type { AgentEvent } from "../events";
25
+ import type { DatabaseAdapter } from "../../types/database";
25
26
  /**
26
27
  * Configuration for creating a cursor
27
28
  */
@@ -30,8 +31,8 @@ export interface CursorConfig {
30
31
  readonly stream: string;
31
32
  /** Checkpoint identifier (e.g. "agents/bar/position") */
32
33
  readonly checkpoint: string;
33
- /** Project path for database location */
34
- readonly projectPath?: string;
34
+ /** Database adapter for cursor storage */
35
+ readonly db: DatabaseAdapter;
35
36
  /** Batch size for reading events (default: 100) */
36
37
  readonly batchSize?: number;
37
38
  /** Optional filters for event types */
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/streams/effect/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAGtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,CAChB,CAAC,GAAG,UAAU,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,OAC5C,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CAClE;;AAMD;;GAEG;AACH,qBAAa,aAAc,SAAQ,kBAGhC;CAAG;AAuLN;;GAEG;AACH,eAAO,MAAM,iBAAiB,sBAE5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB,gCAG9B,CAAC"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/streams/effect/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,CAChB,CAAC,GAAG,UAAU,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,OAC5C,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CAClE;;AAMD;;GAEG;AACH,qBAAa,aAAc,SAAQ,kBAGhC;CAAG;AAoLN;;GAEG;AACH,eAAO,MAAM,iBAAiB,sBAE5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB,gCAG9B,CAAC"}