swarm-mail 1.2.2 → 1.4.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.
- package/README.md +174 -144
- package/bin/swarm-db.ts +168 -0
- package/dist/adapter.d.ts +2 -2
- package/dist/analytics/formatters.d.ts +50 -0
- package/dist/analytics/formatters.d.ts.map +1 -0
- package/dist/analytics/index.d.ts +35 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/queries/agent-activity.d.ts +21 -0
- package/dist/analytics/queries/agent-activity.d.ts.map +1 -0
- package/dist/analytics/queries/checkpoint-frequency.d.ts +26 -0
- package/dist/analytics/queries/checkpoint-frequency.d.ts.map +1 -0
- package/dist/analytics/queries/failed-decompositions.d.ts +22 -0
- package/dist/analytics/queries/failed-decompositions.d.ts.map +1 -0
- package/dist/analytics/queries/human-feedback.d.ts +26 -0
- package/dist/analytics/queries/human-feedback.d.ts.map +1 -0
- package/dist/analytics/queries/index.d.ts +21 -0
- package/dist/analytics/queries/index.d.ts.map +1 -0
- package/dist/analytics/queries/lock-contention.d.ts +20 -0
- package/dist/analytics/queries/lock-contention.d.ts.map +1 -0
- package/dist/analytics/queries/message-latency.d.ts +24 -0
- package/dist/analytics/queries/message-latency.d.ts.map +1 -0
- package/dist/analytics/queries/recovery-success.d.ts +26 -0
- package/dist/analytics/queries/recovery-success.d.ts.map +1 -0
- package/dist/analytics/queries/scope-violations.d.ts +27 -0
- package/dist/analytics/queries/scope-violations.d.ts.map +1 -0
- package/dist/analytics/queries/strategy-success-rates.d.ts +20 -0
- package/dist/analytics/queries/strategy-success-rates.d.ts.map +1 -0
- package/dist/analytics/queries/task-duration.d.ts +31 -0
- package/dist/analytics/queries/task-duration.d.ts.map +1 -0
- package/dist/analytics/query-builder.d.ts +110 -0
- package/dist/analytics/query-builder.d.ts.map +1 -0
- package/dist/analytics/types.d.ts +36 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/cli/db.d.ts +73 -0
- package/dist/cli/db.d.ts.map +1 -0
- package/dist/db/client.d.ts +68 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/drizzle.d.ts +24 -0
- package/dist/db/drizzle.d.ts.map +1 -0
- package/dist/db/index.d.ts +25 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/migrate.d.ts +81 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/schema/hive.d.ts +1596 -0
- package/dist/db/schema/hive.d.ts.map +1 -0
- package/dist/db/schema/index.d.ts +12 -0
- package/dist/db/schema/index.d.ts.map +1 -0
- package/dist/db/schema/memory.d.ts +214 -0
- package/dist/db/schema/memory.d.ts.map +1 -0
- package/dist/db/schema/streams.d.ts +1601 -0
- package/dist/db/schema/streams.d.ts.map +1 -0
- package/dist/debug-demo.d.ts +12 -0
- package/dist/debug-demo.d.ts.map +1 -0
- package/dist/debug.d.ts +19 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/errors/base-error.d.ts +49 -0
- package/dist/errors/base-error.d.ts.map +1 -0
- package/dist/errors/checkpoint-error.d.ts +10 -0
- package/dist/errors/checkpoint-error.d.ts.map +1 -0
- package/dist/errors/decomposition-error.d.ts +10 -0
- package/dist/errors/decomposition-error.d.ts.map +1 -0
- package/dist/errors/index.d.ts +37 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/reservation-error.d.ts +10 -0
- package/dist/errors/reservation-error.d.ts.map +1 -0
- package/dist/errors/validation-error.d.ts +10 -0
- package/dist/errors/validation-error.d.ts.map +1 -0
- package/dist/hive/adapter.d.ts +8 -8
- package/dist/hive/adapter.d.ts.map +1 -1
- package/dist/hive/dependencies-drizzle.d.ts +31 -0
- package/dist/hive/dependencies-drizzle.d.ts.map +1 -0
- package/dist/hive/dependencies.d.ts.map +1 -1
- package/dist/hive/flush-manager.d.ts +2 -1
- package/dist/hive/flush-manager.d.ts.map +1 -1
- package/dist/hive/jsonl.d.ts.map +1 -1
- package/dist/hive/migrations.d.ts +23 -3
- package/dist/hive/migrations.d.ts.map +1 -1
- package/dist/hive/projections-drizzle.d.ts +43 -0
- package/dist/hive/projections-drizzle.d.ts.map +1 -0
- package/dist/hive/projections.d.ts +8 -0
- package/dist/hive/projections.d.ts.map +1 -1
- package/dist/hive/queries-drizzle.d.ts +52 -0
- package/dist/hive/queries-drizzle.d.ts.map +1 -0
- package/dist/hive/queries.d.ts +38 -0
- package/dist/hive/queries.d.ts.map +1 -1
- package/dist/hive/store.d.ts +36 -14
- package/dist/hive/store.d.ts.map +1 -1
- package/dist/index.d.ts +37 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84673 -38352
- package/dist/libsql.convenience.d.ts +155 -0
- package/dist/libsql.convenience.d.ts.map +1 -0
- package/dist/libsql.d.ts +93 -0
- package/dist/libsql.d.ts.map +1 -0
- package/dist/memory/adapter.d.ts +6 -7
- package/dist/memory/adapter.d.ts.map +1 -1
- package/dist/memory/libsql-schema.d.ts +83 -0
- package/dist/memory/libsql-schema.d.ts.map +1 -0
- package/dist/memory/migrate-legacy.d.ts +3 -0
- package/dist/memory/migrate-legacy.d.ts.map +1 -1
- package/dist/memory/migrations.d.ts +11 -0
- package/dist/memory/migrations.d.ts.map +1 -1
- package/dist/memory/store.d.ts +39 -31
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/test-utils.d.ts +59 -0
- package/dist/memory/test-utils.d.ts.map +1 -0
- package/dist/migrate-pglite-to-libsql.d.ts +73 -0
- package/dist/migrate-pglite-to-libsql.d.ts.map +1 -0
- package/dist/pglite.d.ts +8 -170
- package/dist/pglite.d.ts.map +1 -1
- package/dist/streams/agent-mail.d.ts +13 -0
- package/dist/streams/agent-mail.d.ts.map +1 -1
- package/dist/streams/auto-migrate.d.ts +182 -0
- package/dist/streams/auto-migrate.d.ts.map +1 -0
- package/dist/streams/effect/ask.d.ts +5 -4
- package/dist/streams/effect/ask.d.ts.map +1 -1
- package/dist/streams/effect/cursor.d.ts +3 -2
- package/dist/streams/effect/cursor.d.ts.map +1 -1
- package/dist/streams/effect/deferred.d.ts +12 -9
- package/dist/streams/effect/deferred.d.ts.map +1 -1
- package/dist/streams/effect/lock.d.ts +13 -11
- package/dist/streams/effect/lock.d.ts.map +1 -1
- package/dist/streams/effect/mailbox.d.ts +3 -2
- package/dist/streams/effect/mailbox.d.ts.map +1 -1
- package/dist/streams/events.d.ts +4 -0
- package/dist/streams/events.d.ts.map +1 -1
- package/dist/streams/index.d.ts +20 -74
- package/dist/streams/index.d.ts.map +1 -1
- package/dist/streams/libsql-schema.d.ts +77 -0
- package/dist/streams/libsql-schema.d.ts.map +1 -0
- package/dist/streams/migrations.d.ts +8 -8
- package/dist/streams/migrations.d.ts.map +1 -1
- package/dist/streams/projections-drizzle.d.ts +175 -0
- package/dist/streams/projections-drizzle.d.ts.map +1 -0
- package/dist/streams/projections.d.ts +9 -0
- package/dist/streams/projections.d.ts.map +1 -1
- package/dist/streams/store-drizzle.d.ts +96 -0
- package/dist/streams/store-drizzle.d.ts.map +1 -0
- package/dist/streams/store.d.ts +23 -0
- package/dist/streams/store.d.ts.map +1 -1
- package/dist/streams/swarm-mail.d.ts +9 -0
- package/dist/streams/swarm-mail.d.ts.map +1 -1
- package/dist/test-libsql.d.ts +76 -0
- package/dist/test-libsql.d.ts.map +1 -0
- package/dist/types/adapter.d.ts +3 -3
- package/dist/types/database.d.ts +12 -12
- package/dist/types/hive-adapter.d.ts +5 -5
- package/package.json +10 -6
- package/dist/beads/adapter.d.ts +0 -38
- package/dist/beads/adapter.d.ts.map +0 -1
- package/dist/beads/blocked-cache.d.ts +0 -21
- package/dist/beads/blocked-cache.d.ts.map +0 -1
- package/dist/beads/comments.d.ts +0 -21
- package/dist/beads/comments.d.ts.map +0 -1
- package/dist/beads/dependencies.d.ts +0 -58
- package/dist/beads/dependencies.d.ts.map +0 -1
- package/dist/beads/events.d.ts +0 -163
- package/dist/beads/events.d.ts.map +0 -1
- package/dist/beads/flush-manager.d.ts +0 -71
- package/dist/beads/flush-manager.d.ts.map +0 -1
- package/dist/beads/index.d.ts +0 -25
- package/dist/beads/index.d.ts.map +0 -1
- package/dist/beads/jsonl.d.ts +0 -103
- package/dist/beads/jsonl.d.ts.map +0 -1
- package/dist/beads/labels.d.ts +0 -21
- package/dist/beads/labels.d.ts.map +0 -1
- package/dist/beads/merge.d.ts +0 -99
- package/dist/beads/merge.d.ts.map +0 -1
- package/dist/beads/migrations.d.ts +0 -41
- package/dist/beads/migrations.d.ts.map +0 -1
- package/dist/beads/operations.d.ts +0 -56
- package/dist/beads/operations.d.ts.map +0 -1
- package/dist/beads/projections.d.ts +0 -103
- package/dist/beads/projections.d.ts.map +0 -1
- package/dist/beads/queries.d.ts +0 -77
- package/dist/beads/queries.d.ts.map +0 -1
- package/dist/beads/store.d.ts +0 -98
- package/dist/beads/store.d.ts.map +0 -1
- package/dist/beads/validation.d.ts +0 -75
- package/dist/beads/validation.d.ts.map +0 -1
- package/dist/daemon.d.ts +0 -161
- package/dist/daemon.d.ts.map +0 -1
- package/dist/socket-adapter.d.ts +0 -78
- package/dist/socket-adapter.d.ts.map +0 -1
- package/dist/streams/debug.d.ts +0 -173
- package/dist/streams/debug.d.ts.map +0 -1
- package/dist/test-server.d.ts +0 -64
- package/dist/test-server.d.ts.map +0 -1
- package/dist/types/beads-adapter.d.ts +0 -397
- 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
|
|
2
|
+
* PGLite Compatibility Shim
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
9
|
+
import type { DatabaseAdapter } from "./types/database.js";
|
|
131
10
|
/**
|
|
132
|
-
*
|
|
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
|
-
* @
|
|
169
|
-
* ```typescript
|
|
170
|
-
* // Test teardown
|
|
171
|
-
* afterAll(async () => {
|
|
172
|
-
* await closeAllSwarmMail();
|
|
173
|
-
* });
|
|
174
|
-
* ```
|
|
13
|
+
* @deprecated Use createLibSQLAdapter instead
|
|
175
14
|
*/
|
|
176
|
-
export declare function
|
|
177
|
-
export { PGlite };
|
|
15
|
+
export declare function wrapPGlite(pglite: any): DatabaseAdapter;
|
|
178
16
|
//# sourceMappingURL=pglite.d.ts.map
|
package/dist/pglite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pglite.d.ts","sourceRoot":"","sources":["../src/pglite.ts"],"names":[],"mappings":"AAAA
|
|
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":"
|
|
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
|
-
/**
|
|
51
|
-
readonly
|
|
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
|
|
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,
|
|
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;
|
|
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
|
-
/**
|
|
34
|
-
readonly
|
|
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;
|
|
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"}
|