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.
- package/dist/adapter.d.ts +2 -2
- 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/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 +34 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83666 -38455
- 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 +5 -5
- 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,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swarm Mail Projections Layer - Drizzle Implementation
|
|
3
|
+
*
|
|
4
|
+
* Drizzle-based queries for materialized views.
|
|
5
|
+
* These are the read-side of CQRS - fast queries over denormalized data.
|
|
6
|
+
*
|
|
7
|
+
* Key projections:
|
|
8
|
+
* - getAgents: List registered agents
|
|
9
|
+
* - getInbox: Get messages for an agent
|
|
10
|
+
* - getActiveReservations: Get current file locks
|
|
11
|
+
* - checkConflicts: Detect reservation conflicts
|
|
12
|
+
*/
|
|
13
|
+
import type { SwarmDb } from "../db/client.js";
|
|
14
|
+
export interface Agent {
|
|
15
|
+
id: number;
|
|
16
|
+
name: string;
|
|
17
|
+
program: string;
|
|
18
|
+
model: string;
|
|
19
|
+
task_description: string | null;
|
|
20
|
+
registered_at: number;
|
|
21
|
+
last_active_at: number;
|
|
22
|
+
}
|
|
23
|
+
export interface Message {
|
|
24
|
+
id: number;
|
|
25
|
+
from_agent: string;
|
|
26
|
+
subject: string;
|
|
27
|
+
body?: string;
|
|
28
|
+
thread_id: string | null;
|
|
29
|
+
importance: string;
|
|
30
|
+
ack_required: boolean;
|
|
31
|
+
created_at: number;
|
|
32
|
+
read_at?: number | null;
|
|
33
|
+
acked_at?: number | null;
|
|
34
|
+
}
|
|
35
|
+
export interface Reservation {
|
|
36
|
+
id: number;
|
|
37
|
+
agent_name: string;
|
|
38
|
+
path_pattern: string;
|
|
39
|
+
exclusive: boolean;
|
|
40
|
+
reason: string | null;
|
|
41
|
+
created_at: number;
|
|
42
|
+
expires_at: number;
|
|
43
|
+
}
|
|
44
|
+
export interface Conflict {
|
|
45
|
+
path: string;
|
|
46
|
+
holder: string;
|
|
47
|
+
pattern: string;
|
|
48
|
+
exclusive: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get all agents for a project using Drizzle
|
|
52
|
+
*/
|
|
53
|
+
export declare function getAgentsDrizzle(db: SwarmDb, projectKey: string): Promise<Agent[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Get a specific agent by name using Drizzle
|
|
56
|
+
*/
|
|
57
|
+
export declare function getAgentDrizzle(db: SwarmDb, projectKey: string, agentName: string): Promise<Agent | null>;
|
|
58
|
+
export interface InboxOptions {
|
|
59
|
+
limit?: number;
|
|
60
|
+
urgentOnly?: boolean;
|
|
61
|
+
unreadOnly?: boolean;
|
|
62
|
+
includeBodies?: boolean;
|
|
63
|
+
sinceTs?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get inbox messages for an agent using Drizzle
|
|
67
|
+
*/
|
|
68
|
+
export declare function getInboxDrizzle(db: SwarmDb, projectKey: string, agentName: string, options?: InboxOptions): Promise<Message[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Get a single message by ID with full body using Drizzle
|
|
71
|
+
*/
|
|
72
|
+
export declare function getMessageDrizzle(db: SwarmDb, projectKey: string, messageId: number): Promise<Message | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Get all messages in a thread using Drizzle
|
|
75
|
+
*/
|
|
76
|
+
export declare function getThreadMessagesDrizzle(db: SwarmDb, projectKey: string, threadId: string): Promise<Message[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Get active (non-expired, non-released) reservations using Drizzle
|
|
79
|
+
*/
|
|
80
|
+
export declare function getActiveReservationsDrizzle(db: SwarmDb, projectKey: string, agentName?: string): Promise<Reservation[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Check for conflicts with existing reservations using Drizzle
|
|
83
|
+
*/
|
|
84
|
+
export declare function checkConflictsDrizzle(db: SwarmDb, projectKey: string, agentName: string, paths: string[]): Promise<Conflict[]>;
|
|
85
|
+
export interface EvalRecord {
|
|
86
|
+
id: string;
|
|
87
|
+
project_key: string;
|
|
88
|
+
task: string;
|
|
89
|
+
context: string | null;
|
|
90
|
+
strategy: string;
|
|
91
|
+
epic_title: string;
|
|
92
|
+
subtasks: Array<{
|
|
93
|
+
title: string;
|
|
94
|
+
files: string[];
|
|
95
|
+
priority?: number;
|
|
96
|
+
}>;
|
|
97
|
+
outcomes?: Array<{
|
|
98
|
+
bead_id: string;
|
|
99
|
+
planned_files: string[];
|
|
100
|
+
actual_files: string[];
|
|
101
|
+
duration_ms: number;
|
|
102
|
+
error_count: number;
|
|
103
|
+
retry_count: number;
|
|
104
|
+
success: boolean;
|
|
105
|
+
}>;
|
|
106
|
+
overall_success: boolean | null;
|
|
107
|
+
total_duration_ms: number | null;
|
|
108
|
+
total_errors: number | null;
|
|
109
|
+
human_accepted: boolean | null;
|
|
110
|
+
human_modified: boolean | null;
|
|
111
|
+
human_notes: string | null;
|
|
112
|
+
file_overlap_count: number | null;
|
|
113
|
+
scope_accuracy: number | null;
|
|
114
|
+
time_balance_ratio: number | null;
|
|
115
|
+
created_at: number;
|
|
116
|
+
updated_at: number;
|
|
117
|
+
}
|
|
118
|
+
export interface EvalStats {
|
|
119
|
+
totalRecords: number;
|
|
120
|
+
successRate: number;
|
|
121
|
+
avgDurationMs: number;
|
|
122
|
+
byStrategy: Record<string, number>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get eval records with optional filters using Drizzle
|
|
126
|
+
*/
|
|
127
|
+
export declare function getEvalRecordsDrizzle(db: SwarmDb, projectKey: string, options?: {
|
|
128
|
+
limit?: number;
|
|
129
|
+
strategy?: string;
|
|
130
|
+
}): Promise<EvalRecord[]>;
|
|
131
|
+
/**
|
|
132
|
+
* Get eval statistics for a project using Drizzle
|
|
133
|
+
*/
|
|
134
|
+
export declare function getEvalStatsDrizzle(db: SwarmDb, projectKey: string): Promise<EvalStats>;
|
|
135
|
+
/**
|
|
136
|
+
* Convenience wrapper for getAgentsDrizzle that matches the old signature.
|
|
137
|
+
*/
|
|
138
|
+
export declare function getAgents(projectKey: string, projectPath?: string, dbOverride?: any): Promise<Agent[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Convenience wrapper for getAgentDrizzle
|
|
141
|
+
*/
|
|
142
|
+
export declare function getAgent(projectKey: string, agentName: string, projectPath?: string, dbOverride?: any): Promise<Agent | null>;
|
|
143
|
+
/**
|
|
144
|
+
* Convenience wrapper for getInboxDrizzle
|
|
145
|
+
*/
|
|
146
|
+
export declare function getInbox(projectKey: string, agentName: string, options?: InboxOptions, projectPath?: string, dbOverride?: any): Promise<Message[]>;
|
|
147
|
+
/**
|
|
148
|
+
* Convenience wrapper for getMessageDrizzle
|
|
149
|
+
*/
|
|
150
|
+
export declare function getMessage(projectKey: string, messageId: number, projectPath?: string, dbOverride?: any): Promise<Message | null>;
|
|
151
|
+
/**
|
|
152
|
+
* Convenience wrapper for getThreadMessagesDrizzle
|
|
153
|
+
*/
|
|
154
|
+
export declare function getThreadMessages(projectKey: string, threadId: string, projectPath?: string, dbOverride?: any): Promise<Message[]>;
|
|
155
|
+
/**
|
|
156
|
+
* Convenience wrapper for getActiveReservationsDrizzle
|
|
157
|
+
*/
|
|
158
|
+
export declare function getActiveReservations(projectKey: string, projectPath?: string, agentName?: string, dbOverride?: any): Promise<Reservation[]>;
|
|
159
|
+
/**
|
|
160
|
+
* Convenience wrapper for checkConflictsDrizzle
|
|
161
|
+
*/
|
|
162
|
+
export declare function checkConflicts(projectKey: string, agentName: string, paths: string[], projectPath?: string, dbOverride?: any): Promise<Conflict[]>;
|
|
163
|
+
/**
|
|
164
|
+
* Convenience wrapper for getEvalRecordsDrizzle
|
|
165
|
+
*/
|
|
166
|
+
export declare function getEvalRecords(projectKey: string, options?: {
|
|
167
|
+
limit?: number;
|
|
168
|
+
offset?: number;
|
|
169
|
+
strategy?: string;
|
|
170
|
+
}, projectPath?: string, dbOverride?: any): Promise<EvalRecord[]>;
|
|
171
|
+
/**
|
|
172
|
+
* Convenience wrapper for getEvalStatsDrizzle
|
|
173
|
+
*/
|
|
174
|
+
export declare function getEvalStats(projectKey: string, projectPath?: string, dbOverride?: any): Promise<EvalStats>;
|
|
175
|
+
//# sourceMappingURL=projections-drizzle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projections-drizzle.d.ts","sourceRoot":"","sources":["../../src/streams/projections-drizzle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swarm Mail Projections Layer (DEPRECATED - use projections-drizzle.ts)
|
|
3
|
+
*
|
|
4
|
+
* Legacy PGlite-based projections. This file exists only for backward compatibility.
|
|
5
|
+
* New code should use projections-drizzle.ts instead.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Use projections-drizzle.ts with DatabaseAdapter
|
|
8
|
+
*/
|
|
1
9
|
import type { DatabaseAdapter } from "../types/database";
|
|
2
10
|
export interface Agent {
|
|
3
11
|
id: number;
|
|
@@ -28,6 +36,7 @@ export interface Reservation {
|
|
|
28
36
|
reason: string | null;
|
|
29
37
|
created_at: number;
|
|
30
38
|
expires_at: number;
|
|
39
|
+
lock_holder_id?: string | null;
|
|
31
40
|
}
|
|
32
41
|
export interface Conflict {
|
|
33
42
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/streams/projections.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/streams/projections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Store - Drizzle ORM Implementation
|
|
3
|
+
*
|
|
4
|
+
* Drizzle-based implementation of event store operations.
|
|
5
|
+
* Replaces raw SQL queries with type-safe Drizzle query builder.
|
|
6
|
+
*
|
|
7
|
+
* Core operations:
|
|
8
|
+
* - appendEvent(): Add events to the log
|
|
9
|
+
* - readEvents(): Read events with filters
|
|
10
|
+
* - getLatestSequence(): Get max sequence number
|
|
11
|
+
*
|
|
12
|
+
* All state changes go through events. Projections compute current state.
|
|
13
|
+
*/
|
|
14
|
+
import type { SwarmDb } from "../db/client.js";
|
|
15
|
+
import type { AgentEvent } from "./events.js";
|
|
16
|
+
/**
|
|
17
|
+
* Append an event to the log using Drizzle
|
|
18
|
+
*
|
|
19
|
+
* @param db - Drizzle database instance
|
|
20
|
+
* @param event - Event to append
|
|
21
|
+
* @returns Event with id and sequence
|
|
22
|
+
*/
|
|
23
|
+
export declare function appendEventDrizzle(db: SwarmDb, event: AgentEvent): Promise<AgentEvent & {
|
|
24
|
+
id: number;
|
|
25
|
+
sequence: number;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Read events with optional filters using Drizzle
|
|
29
|
+
*
|
|
30
|
+
* @param db - Drizzle database instance
|
|
31
|
+
* @param options - Filter options
|
|
32
|
+
* @returns Array of events with id and sequence
|
|
33
|
+
*/
|
|
34
|
+
export declare function readEventsDrizzle(db: SwarmDb, options?: {
|
|
35
|
+
projectKey?: string;
|
|
36
|
+
types?: AgentEvent["type"][];
|
|
37
|
+
since?: number;
|
|
38
|
+
until?: number;
|
|
39
|
+
afterSequence?: number;
|
|
40
|
+
limit?: number;
|
|
41
|
+
offset?: number;
|
|
42
|
+
}): Promise<Array<AgentEvent & {
|
|
43
|
+
id: number;
|
|
44
|
+
sequence: number;
|
|
45
|
+
}>>;
|
|
46
|
+
/**
|
|
47
|
+
* Get the latest sequence number using Drizzle
|
|
48
|
+
*
|
|
49
|
+
* @param db - Drizzle database instance
|
|
50
|
+
* @param projectKey - Optional project key to filter by
|
|
51
|
+
* @returns Latest sequence number (0 if no events)
|
|
52
|
+
*/
|
|
53
|
+
export declare function getLatestSequenceDrizzle(db: SwarmDb, projectKey?: string): Promise<number>;
|
|
54
|
+
/**
|
|
55
|
+
* Utility: Get or create database adapter with schema initialization
|
|
56
|
+
*
|
|
57
|
+
* CRITICAL: Uses the cached adapter from store.ts to ensure all callers
|
|
58
|
+
* (appendEvent, sendSwarmMessage, getInbox) use the SAME database instance.
|
|
59
|
+
*
|
|
60
|
+
* Fixes bug where sendSwarmMessage created a different adapter than the test,
|
|
61
|
+
* causing empty inbox (messages written to adapter A, read from adapter B).
|
|
62
|
+
*
|
|
63
|
+
* NOTE: Parameter order matches store-drizzle.ts convention (projectPath, dbOverride)
|
|
64
|
+
* but delegates to store.ts which uses (dbOverride, projectPath). We swap them here.
|
|
65
|
+
*
|
|
66
|
+
* @internal Exported for use by swarm-mail.ts to ensure adapter consistency
|
|
67
|
+
*/
|
|
68
|
+
export declare function getOrCreateAdapter(projectPath?: string, dbOverride?: any): Promise<any>;
|
|
69
|
+
/**
|
|
70
|
+
* Convenience wrapper for appendEventDrizzle that matches the old signature.
|
|
71
|
+
* Gets database from adapter and converts to SwarmDb.
|
|
72
|
+
*/
|
|
73
|
+
export declare function appendEvent(event: AgentEvent, projectPath?: string, dbOverride?: any): Promise<AgentEvent & {
|
|
74
|
+
id: number;
|
|
75
|
+
sequence: number;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Convenience wrapper for readEventsDrizzle
|
|
79
|
+
*/
|
|
80
|
+
export declare function readEvents(options?: {
|
|
81
|
+
projectKey?: string;
|
|
82
|
+
types?: AgentEvent["type"][];
|
|
83
|
+
since?: number;
|
|
84
|
+
until?: number;
|
|
85
|
+
afterSequence?: number;
|
|
86
|
+
limit?: number;
|
|
87
|
+
offset?: number;
|
|
88
|
+
}, projectPath?: string, dbOverride?: any): Promise<Array<AgentEvent & {
|
|
89
|
+
id: number;
|
|
90
|
+
sequence: number;
|
|
91
|
+
}>>;
|
|
92
|
+
/**
|
|
93
|
+
* Convenience wrapper for getLatestSequenceDrizzle
|
|
94
|
+
*/
|
|
95
|
+
export declare function getLatestSequence(projectKey?: string, projectPath?: string, dbOverride?: any): Promise<number>;
|
|
96
|
+
//# sourceMappingURL=store-drizzle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-drizzle.d.ts","sourceRoot":"","sources":["../../src/streams/store-drizzle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EACV,UAAU,EAIX,MAAM,aAAa,CAAC;AAerB;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BxD;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,OAAO,EACX,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GACL,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAmD/D;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,OAAO,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAWjB;AA+XD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAK7F;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,UAAU,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,GAAG,GACf,OAAO,CAAC,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAOxD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,EACN,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,GAAG,GACf,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAO/D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,GAAG,GACf,OAAO,CAAC,MAAM,CAAC,CAOjB"}
|
package/dist/streams/store.d.ts
CHANGED
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import type { DatabaseAdapter } from "../types/database";
|
|
2
|
+
/**
|
|
3
|
+
* Clear the adapter cache (primarily for test isolation)
|
|
4
|
+
*
|
|
5
|
+
* In production, adapters are long-lived. In tests, call this in afterEach
|
|
6
|
+
* to ensure each test gets a fresh database instance.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare function clearAdapterCache(): void;
|
|
11
|
+
/**
|
|
12
|
+
* Get or create a DatabaseAdapter
|
|
13
|
+
*
|
|
14
|
+
* If dbOverride is provided, returns it directly (dependency injection).
|
|
15
|
+
* Otherwise, creates/reuses a cached adapter for the given projectPath.
|
|
16
|
+
*
|
|
17
|
+
* @param dbOverride - Optional explicit adapter (for dependency injection)
|
|
18
|
+
* @param projectPath - Optional project path (uses global DB if not provided)
|
|
19
|
+
* @returns DatabaseAdapter instance
|
|
20
|
+
*
|
|
21
|
+
* @internal Exported for use by store-drizzle.ts to ensure adapter consistency
|
|
22
|
+
*/
|
|
23
|
+
export declare function getOrCreateAdapter(dbOverride?: DatabaseAdapter, projectPath?: string): Promise<DatabaseAdapter>;
|
|
2
24
|
import { type AgentEvent, type AgentRegisteredEvent, type MessageSentEvent, type FileReservedEvent } from "./events";
|
|
3
25
|
/**
|
|
4
26
|
* Append an event to the log
|
|
@@ -164,6 +186,7 @@ export declare function reserveFiles(projectKey: string, agentName: string, path
|
|
|
164
186
|
reason?: string;
|
|
165
187
|
exclusive?: boolean;
|
|
166
188
|
ttlSeconds?: number;
|
|
189
|
+
lockHolderIds?: string[];
|
|
167
190
|
}, projectPath?: string, dbOverride?: DatabaseAdapter): Promise<FileReservedEvent & {
|
|
168
191
|
id: number;
|
|
169
192
|
sequence: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/streams/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/streams/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export interface InitSwarmAgentOptions {
|
|
|
8
8
|
program?: string;
|
|
9
9
|
model?: string;
|
|
10
10
|
taskDescription?: string;
|
|
11
|
+
dbOverride?: any;
|
|
11
12
|
}
|
|
12
13
|
export interface SendSwarmMessageOptions {
|
|
13
14
|
projectPath: string;
|
|
@@ -18,6 +19,7 @@ export interface SendSwarmMessageOptions {
|
|
|
18
19
|
threadId?: string;
|
|
19
20
|
importance?: "low" | "normal" | "high" | "urgent";
|
|
20
21
|
ackRequired?: boolean;
|
|
22
|
+
dbOverride?: any;
|
|
21
23
|
}
|
|
22
24
|
export interface SendSwarmMessageResult {
|
|
23
25
|
success: boolean;
|
|
@@ -32,6 +34,7 @@ export interface GetSwarmInboxOptions {
|
|
|
32
34
|
urgentOnly?: boolean;
|
|
33
35
|
unreadOnly?: boolean;
|
|
34
36
|
includeBodies?: boolean;
|
|
37
|
+
dbOverride?: any;
|
|
35
38
|
}
|
|
36
39
|
export interface SwarmInboxMessage {
|
|
37
40
|
id: number;
|
|
@@ -51,6 +54,7 @@ export interface ReadSwarmMessageOptions {
|
|
|
51
54
|
messageId: number;
|
|
52
55
|
agentName?: string;
|
|
53
56
|
markAsRead?: boolean;
|
|
57
|
+
dbOverride?: any;
|
|
54
58
|
}
|
|
55
59
|
export interface ReserveSwarmFilesOptions {
|
|
56
60
|
projectPath: string;
|
|
@@ -60,6 +64,7 @@ export interface ReserveSwarmFilesOptions {
|
|
|
60
64
|
exclusive?: boolean;
|
|
61
65
|
ttlSeconds?: number;
|
|
62
66
|
force?: boolean;
|
|
67
|
+
dbOverride?: any;
|
|
63
68
|
}
|
|
64
69
|
export interface GrantedSwarmReservation {
|
|
65
70
|
id: number;
|
|
@@ -81,6 +86,7 @@ export interface ReleaseSwarmFilesOptions {
|
|
|
81
86
|
agentName: string;
|
|
82
87
|
paths?: string[];
|
|
83
88
|
reservationIds?: number[];
|
|
89
|
+
dbOverride?: any;
|
|
84
90
|
}
|
|
85
91
|
export interface ReleaseSwarmFilesResult {
|
|
86
92
|
released: number;
|
|
@@ -90,6 +96,7 @@ export interface AcknowledgeSwarmOptions {
|
|
|
90
96
|
projectPath: string;
|
|
91
97
|
messageId: number;
|
|
92
98
|
agentName: string;
|
|
99
|
+
dbOverride?: any;
|
|
93
100
|
}
|
|
94
101
|
export interface AcknowledgeSwarmResult {
|
|
95
102
|
acknowledged: boolean;
|
|
@@ -148,6 +155,8 @@ export declare function releaseSwarmFiles(options: ReleaseSwarmFilesOptions): Pr
|
|
|
148
155
|
export declare function acknowledgeSwarmMessage(options: AcknowledgeSwarmOptions): Promise<AcknowledgeSwarmResult>;
|
|
149
156
|
/**
|
|
150
157
|
* Check if the swarm mail store is healthy
|
|
158
|
+
*
|
|
159
|
+
* Migrated from PGlite to libSQL adapter pattern.
|
|
151
160
|
*/
|
|
152
161
|
export declare function checkSwarmHealth(projectPath?: string): Promise<SwarmHealthResult>;
|
|
153
162
|
//# sourceMappingURL=swarm-mail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm-mail.d.ts","sourceRoot":"","sources":["../../src/streams/swarm-mail.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swarm-mail.d.ts","sourceRoot":"","sources":["../../src/streams/swarm-mail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LibSQL Test Database Helper
|
|
3
|
+
*
|
|
4
|
+
* Replaces test-server.ts for libSQL-based tests.
|
|
5
|
+
* Creates in-memory libSQL databases with full schema.
|
|
6
|
+
*
|
|
7
|
+
* ## Performance Impact
|
|
8
|
+
* - libSQL in-memory initialization is faster than PGlite WASM (~10ms vs ~500ms)
|
|
9
|
+
* - Each test gets a fresh database (no shared state concerns)
|
|
10
|
+
* - No TRUNCATE needed between tests (create new instance instead)
|
|
11
|
+
*
|
|
12
|
+
* ## Usage
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createTestLibSQLDb } from './test-libsql';
|
|
15
|
+
*
|
|
16
|
+
* test("my test", async () => {
|
|
17
|
+
* const { client, db } = await createTestLibSQLDb();
|
|
18
|
+
* // Use client for raw SQL, db for Drizzle queries
|
|
19
|
+
* await db.query.agents.findMany();
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ## Schema Coverage
|
|
24
|
+
* - All streams tables (events, agents, messages, reservations, locks)
|
|
25
|
+
* - All hive tables (beads, dependencies, labels, comments)
|
|
26
|
+
* - All durable primitive tables (cursors, deferred)
|
|
27
|
+
* - All memory tables (memories with vector support, FTS5)
|
|
28
|
+
* - Learning system tables (eval_records, swarm_contexts)
|
|
29
|
+
*
|
|
30
|
+
* ## Key Differences from PGlite
|
|
31
|
+
* - SERIAL → INTEGER PRIMARY KEY AUTOINCREMENT
|
|
32
|
+
* - JSONB → TEXT (store JSON.stringify)
|
|
33
|
+
* - TIMESTAMPTZ → TEXT (ISO 8601)
|
|
34
|
+
* - BOOLEAN → INTEGER (0/1)
|
|
35
|
+
* - $1, $2 params → ? params
|
|
36
|
+
* - vector(N) → F32_BLOB(N)
|
|
37
|
+
* - TEXT[] → TEXT (JSON array as string)
|
|
38
|
+
*/
|
|
39
|
+
import type { Client } from "@libsql/client";
|
|
40
|
+
import type { SwarmDb } from "./db/client.js";
|
|
41
|
+
import type { DatabaseAdapter } from "./types/database.js";
|
|
42
|
+
/**
|
|
43
|
+
* Create a test DatabaseAdapter with automatic $N → ? conversion.
|
|
44
|
+
*
|
|
45
|
+
* Wraps a libSQL client to transparently convert PostgreSQL-style parameters
|
|
46
|
+
* to libSQL-style parameters. Use this in tests that need to run hive SQL
|
|
47
|
+
* queries without manual conversion.
|
|
48
|
+
*
|
|
49
|
+
* @param client - libSQL client instance
|
|
50
|
+
* @returns DatabaseAdapter with automatic conversion
|
|
51
|
+
*/
|
|
52
|
+
export declare function createTestDatabaseAdapter(client: Client): DatabaseAdapter;
|
|
53
|
+
/**
|
|
54
|
+
* Create a test libSQL database with full schema.
|
|
55
|
+
*
|
|
56
|
+
* Returns the raw libSQL client, Drizzle-wrapped db instance, and a DatabaseAdapter
|
|
57
|
+
* with automatic $N → ? parameter conversion for hive tests.
|
|
58
|
+
* Schema includes all tables from streams, hive, memory, and learning systems.
|
|
59
|
+
*
|
|
60
|
+
* @returns Object containing client, db, and adapter instances
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const { client, db, adapter } = await createTestLibSQLDb();
|
|
65
|
+
* // Use adapter for PostgreSQL-style queries
|
|
66
|
+
* await adapter.query("SELECT * FROM beads WHERE id = $1", ["bd-123"]);
|
|
67
|
+
* // Use db for Drizzle queries
|
|
68
|
+
* await db.query.agents.findMany();
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare function createTestLibSQLDb(): Promise<{
|
|
72
|
+
client: Client;
|
|
73
|
+
db: SwarmDb;
|
|
74
|
+
adapter: DatabaseAdapter;
|
|
75
|
+
}>;
|
|
76
|
+
//# sourceMappingURL=test-libsql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-libsql.d.ts","sourceRoot":"","sources":["../src/test-libsql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AAyDxE;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAEzE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC,CAqhBD"}
|
package/dist/types/adapter.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* reservations, locks) to enable different storage backends.
|
|
6
6
|
*
|
|
7
7
|
* ## Design Goals
|
|
8
|
-
* - Database-agnostic (works with
|
|
8
|
+
* - Database-agnostic (works with libSQL, SQLite, PostgreSQL, etc.)
|
|
9
9
|
* - Matches existing swarm-mail API surface
|
|
10
10
|
* - No implementation details leak through interface
|
|
11
11
|
*
|
|
@@ -290,10 +290,10 @@ export interface SwarmMailAdapter extends EventStoreAdapter, AgentAdapter, Messa
|
|
|
290
290
|
*
|
|
291
291
|
* @example
|
|
292
292
|
* ```typescript
|
|
293
|
-
* import {
|
|
293
|
+
* import { createLibSQLAdapter } from '@opencode/swarm-mail/adapters/libsql';
|
|
294
294
|
* import { createSQLiteAdapter } from '@opencode/swarm-mail/adapters/sqlite';
|
|
295
295
|
*
|
|
296
|
-
* const adapter =
|
|
296
|
+
* const adapter = createLibSQLAdapter({ path: './streams.db' });
|
|
297
297
|
* const adapter2 = createSQLiteAdapter({ path: './streams.db' });
|
|
298
298
|
* ```
|
|
299
299
|
*/
|
package/dist/types/database.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DatabaseAdapter - Database-agnostic interface for swarm-mail
|
|
3
3
|
*
|
|
4
|
-
* Abstracts
|
|
4
|
+
* Abstracts database-specific operations to support multiple database backends.
|
|
5
5
|
* Based on coursebuilder's adapter-drizzle pattern.
|
|
6
6
|
*
|
|
7
7
|
* ## Design Goals
|
|
8
|
-
* - Zero
|
|
9
|
-
* - Support for
|
|
8
|
+
* - Zero database-specific types in this interface
|
|
9
|
+
* - Support for libSQL, better-sqlite3, PostgreSQL
|
|
10
10
|
* - Transaction support optional (some adapters may not support it)
|
|
11
11
|
*
|
|
12
12
|
* ## Implementation Strategy
|
|
@@ -27,7 +27,7 @@ export interface QueryResult<T = unknown> {
|
|
|
27
27
|
* DatabaseAdapter interface
|
|
28
28
|
*
|
|
29
29
|
* Minimal interface for executing SQL queries and managing transactions.
|
|
30
|
-
* Adapters implement this for
|
|
30
|
+
* Adapters implement this for libSQL, SQLite, PostgreSQL, etc.
|
|
31
31
|
*/
|
|
32
32
|
export interface DatabaseAdapter {
|
|
33
33
|
/**
|
|
@@ -85,19 +85,19 @@ export interface DatabaseAdapter {
|
|
|
85
85
|
/**
|
|
86
86
|
* Close the database connection (optional)
|
|
87
87
|
*
|
|
88
|
-
* Some adapters (like
|
|
88
|
+
* Some adapters (like libSQL) need explicit cleanup.
|
|
89
89
|
* If not provided, swarm-mail assumes connection is managed externally.
|
|
90
90
|
*/
|
|
91
91
|
close?(): Promise<void>;
|
|
92
92
|
/**
|
|
93
93
|
* Force a checkpoint to flush WAL to data files (optional)
|
|
94
94
|
*
|
|
95
|
-
*
|
|
95
|
+
* CHECKPOINT command forces write-ahead log (WAL) to be written
|
|
96
96
|
* to data files, allowing WAL to be recycled. Critical for preventing WAL
|
|
97
|
-
* bloat in embedded databases
|
|
97
|
+
* bloat in embedded databases.
|
|
98
98
|
*
|
|
99
|
-
* Root cause from
|
|
100
|
-
* explicit CHECKPOINT, causing
|
|
99
|
+
* Root cause from historical migration: Embedded databases accumulated 930 WAL files (930MB)
|
|
100
|
+
* without explicit CHECKPOINT, causing resource exhaustion.
|
|
101
101
|
*
|
|
102
102
|
* Call after batch operations:
|
|
103
103
|
* - Migration batches
|
|
@@ -115,9 +115,9 @@ export interface DatabaseAdapter {
|
|
|
115
115
|
* Get WAL statistics (optional)
|
|
116
116
|
*
|
|
117
117
|
* Returns current size and file count of write-ahead log (WAL) files.
|
|
118
|
-
* Use for monitoring WAL bloat to prevent
|
|
118
|
+
* Use for monitoring WAL bloat to prevent resource exhaustion.
|
|
119
119
|
*
|
|
120
|
-
* For
|
|
120
|
+
* For libSQL: checks WAL directory in dataDir
|
|
121
121
|
* For PostgreSQL: queries pg_stat_wal (if available)
|
|
122
122
|
*
|
|
123
123
|
* @returns WAL stats with size in bytes and file count
|
|
@@ -136,7 +136,7 @@ export interface DatabaseAdapter {
|
|
|
136
136
|
* Check WAL health against threshold (optional)
|
|
137
137
|
*
|
|
138
138
|
* Monitors WAL size and warns when it exceeds a configurable threshold.
|
|
139
|
-
* Default threshold: 100MB (warns before critical
|
|
139
|
+
* Default threshold: 100MB (warns before critical resource exhaustion).
|
|
140
140
|
*
|
|
141
141
|
* Returns health status with message describing current WAL state.
|
|
142
142
|
*
|