agent-inbox 0.1.3 → 0.1.5
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/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -4
- package/dist/index.js.map +1 -1
- package/dist/jsonrpc/mail-server.d.ts.map +1 -1
- package/dist/jsonrpc/mail-server.js +15 -0
- package/dist/jsonrpc/mail-server.js.map +1 -1
- package/dist/storage/sqlite.d.ts +11 -1
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +85 -65
- package/dist/storage/sqlite.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +19 -4
- package/src/jsonrpc/mail-server.ts +15 -0
- package/src/storage/sqlite.ts +92 -66
- package/test/mail-server.test.ts +62 -1
- package/test/sqlite-prefix.test.ts +192 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -86,6 +86,10 @@ export interface CreateOptions {
|
|
|
86
86
|
config?: Partial<InboxConfig>;
|
|
87
87
|
/** Use SQLite storage at this path (":memory:" for in-memory SQLite) */
|
|
88
88
|
sqlitePath?: string;
|
|
89
|
+
/** Use an external better-sqlite3 Database handle (co-locate tables in another DB) */
|
|
90
|
+
sqliteDb?: import("better-sqlite3").Database;
|
|
91
|
+
/** Table name prefix when co-locating in an external DB (e.g. "inbox_") */
|
|
92
|
+
sqlitePrefix?: string;
|
|
89
93
|
/** HTTP port for JSON-RPC endpoint (0 = disabled) */
|
|
90
94
|
httpPort?: number;
|
|
91
95
|
/** Webhook URLs for push notifications */
|
|
@@ -103,10 +107,21 @@ export async function createAgentInbox(
|
|
|
103
107
|
): Promise<AgentInbox> {
|
|
104
108
|
const config = { ...loadConfig(), ...opts.config };
|
|
105
109
|
|
|
106
|
-
// 1. Storage — SQLite
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
// 1. Storage — SQLite (own file, external DB, or in-memory fallback)
|
|
111
|
+
let storage: Storage;
|
|
112
|
+
if (opts.sqliteDb) {
|
|
113
|
+
storage = new SqliteStorage({
|
|
114
|
+
db: opts.sqliteDb,
|
|
115
|
+
prefix: opts.sqlitePrefix,
|
|
116
|
+
});
|
|
117
|
+
} else if (opts.sqlitePath) {
|
|
118
|
+
storage = new SqliteStorage({
|
|
119
|
+
path: opts.sqlitePath,
|
|
120
|
+
prefix: opts.sqlitePrefix,
|
|
121
|
+
});
|
|
122
|
+
} else {
|
|
123
|
+
storage = new InMemoryStorage();
|
|
124
|
+
}
|
|
110
125
|
|
|
111
126
|
// 2. Event bus (internal)
|
|
112
127
|
const events = new EventEmitter();
|
|
@@ -60,6 +60,7 @@ export class MailJsonRpcServer {
|
|
|
60
60
|
updated_at: now,
|
|
61
61
|
};
|
|
62
62
|
this.storage.putConversation(conv);
|
|
63
|
+
this.events.emit("mail.created", conv);
|
|
63
64
|
return conv;
|
|
64
65
|
});
|
|
65
66
|
|
|
@@ -104,6 +105,10 @@ export class MailJsonRpcServer {
|
|
|
104
105
|
});
|
|
105
106
|
conv.updated_at = new Date().toISOString();
|
|
106
107
|
this.storage.putConversation(conv);
|
|
108
|
+
this.events.emit("mail.participant.joined", {
|
|
109
|
+
conversation_id: conv.id,
|
|
110
|
+
agent_id: agentId,
|
|
111
|
+
});
|
|
107
112
|
}
|
|
108
113
|
return { ok: true };
|
|
109
114
|
});
|
|
@@ -164,6 +169,7 @@ export class MailJsonRpcServer {
|
|
|
164
169
|
this.storage.addTurn(turn);
|
|
165
170
|
conv.updated_at = turn.created_at;
|
|
166
171
|
this.storage.putConversation(conv);
|
|
172
|
+
this.events.emit("mail.turn.added", turn);
|
|
167
173
|
return turn;
|
|
168
174
|
});
|
|
169
175
|
|
|
@@ -329,6 +335,15 @@ export class MailJsonRpcServer {
|
|
|
329
335
|
this.events.on("message.created", (msg) => {
|
|
330
336
|
this.broadcast("message.created", msg);
|
|
331
337
|
});
|
|
338
|
+
this.events.on("mail.created", (conv) => {
|
|
339
|
+
this.broadcast("mail.created", conv);
|
|
340
|
+
});
|
|
341
|
+
this.events.on("mail.turn.added", (turn) => {
|
|
342
|
+
this.broadcast("mail.turn.added", turn);
|
|
343
|
+
});
|
|
344
|
+
this.events.on("mail.participant.joined", (data) => {
|
|
345
|
+
this.broadcast("mail.participant.joined", data);
|
|
346
|
+
});
|
|
332
347
|
}
|
|
333
348
|
|
|
334
349
|
private broadcast(eventType: string, data: unknown): void {
|
package/src/storage/sqlite.ts
CHANGED
|
@@ -12,22 +12,42 @@ import type {
|
|
|
12
12
|
import type { Storage, InboxQuery, ThreadQuery } from "./interface.js";
|
|
13
13
|
|
|
14
14
|
export interface SqliteStorageOptions {
|
|
15
|
-
|
|
15
|
+
/** Open a new database at this path (":memory:" for in-memory). Ignored if `db` is provided. */
|
|
16
|
+
path?: string;
|
|
17
|
+
/** Use an externally-managed database handle. When provided, the handle is borrowed —
|
|
18
|
+
* close() will NOT close it (the caller owns its lifecycle). */
|
|
19
|
+
db?: Database.Database;
|
|
20
|
+
/** Table name prefix (e.g. "inbox_"). Defaults to "" (no prefix). */
|
|
21
|
+
prefix?: string;
|
|
16
22
|
}
|
|
17
23
|
|
|
18
24
|
export class SqliteStorage implements Storage {
|
|
19
25
|
private db: Database.Database;
|
|
26
|
+
private externalDb: boolean;
|
|
27
|
+
/** Prefixed table name helper */
|
|
28
|
+
private p: (table: string) => string;
|
|
20
29
|
|
|
21
30
|
constructor(opts: SqliteStorageOptions) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
if (opts.db) {
|
|
32
|
+
this.db = opts.db;
|
|
33
|
+
this.externalDb = true;
|
|
34
|
+
} else {
|
|
35
|
+
const path = opts.path ?? ":memory:";
|
|
36
|
+
this.db = new Database(path);
|
|
37
|
+
this.db.pragma("journal_mode = WAL");
|
|
38
|
+
this.db.pragma("foreign_keys = ON");
|
|
39
|
+
this.externalDb = false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const prefix = opts.prefix ?? "";
|
|
43
|
+
this.p = (table: string) => `${prefix}${table}`;
|
|
25
44
|
this.migrate();
|
|
26
45
|
}
|
|
27
46
|
|
|
28
47
|
private migrate(): void {
|
|
48
|
+
const t = this.p;
|
|
29
49
|
this.db.exec(`
|
|
30
|
-
CREATE TABLE IF NOT EXISTS agents (
|
|
50
|
+
CREATE TABLE IF NOT EXISTS ${t("agents")} (
|
|
31
51
|
agent_id TEXT PRIMARY KEY,
|
|
32
52
|
display_name TEXT,
|
|
33
53
|
program TEXT,
|
|
@@ -39,7 +59,7 @@ export class SqliteStorage implements Storage {
|
|
|
39
59
|
last_active_at TEXT NOT NULL
|
|
40
60
|
);
|
|
41
61
|
|
|
42
|
-
CREATE TABLE IF NOT EXISTS messages (
|
|
62
|
+
CREATE TABLE IF NOT EXISTS ${t("messages")} (
|
|
43
63
|
id TEXT PRIMARY KEY,
|
|
44
64
|
scope TEXT NOT NULL DEFAULT 'default',
|
|
45
65
|
sender_id TEXT NOT NULL,
|
|
@@ -53,7 +73,7 @@ export class SqliteStorage implements Storage {
|
|
|
53
73
|
created_at TEXT NOT NULL
|
|
54
74
|
);
|
|
55
75
|
|
|
56
|
-
CREATE TABLE IF NOT EXISTS recipients (
|
|
76
|
+
CREATE TABLE IF NOT EXISTS ${t("recipients")} (
|
|
57
77
|
message_id TEXT NOT NULL,
|
|
58
78
|
agent_id TEXT NOT NULL,
|
|
59
79
|
kind TEXT NOT NULL DEFAULT 'to',
|
|
@@ -61,10 +81,10 @@ export class SqliteStorage implements Storage {
|
|
|
61
81
|
read_at TEXT,
|
|
62
82
|
ack_at TEXT,
|
|
63
83
|
PRIMARY KEY (message_id, agent_id),
|
|
64
|
-
FOREIGN KEY (message_id) REFERENCES messages(id)
|
|
84
|
+
FOREIGN KEY (message_id) REFERENCES ${t("messages")}(id)
|
|
65
85
|
);
|
|
66
86
|
|
|
67
|
-
CREATE TABLE IF NOT EXISTS conversations (
|
|
87
|
+
CREATE TABLE IF NOT EXISTS ${t("conversations")} (
|
|
68
88
|
id TEXT PRIMARY KEY,
|
|
69
89
|
scope TEXT NOT NULL DEFAULT 'default',
|
|
70
90
|
subject TEXT,
|
|
@@ -74,16 +94,16 @@ export class SqliteStorage implements Storage {
|
|
|
74
94
|
updated_at TEXT NOT NULL
|
|
75
95
|
);
|
|
76
96
|
|
|
77
|
-
CREATE TABLE IF NOT EXISTS participants (
|
|
97
|
+
CREATE TABLE IF NOT EXISTS ${t("participants")} (
|
|
78
98
|
conversation_id TEXT NOT NULL,
|
|
79
99
|
agent_id TEXT NOT NULL,
|
|
80
100
|
role TEXT,
|
|
81
101
|
joined_at TEXT NOT NULL,
|
|
82
102
|
PRIMARY KEY (conversation_id, agent_id),
|
|
83
|
-
FOREIGN KEY (conversation_id) REFERENCES conversations(id)
|
|
103
|
+
FOREIGN KEY (conversation_id) REFERENCES ${t("conversations")}(id)
|
|
84
104
|
);
|
|
85
105
|
|
|
86
|
-
CREATE TABLE IF NOT EXISTS turns (
|
|
106
|
+
CREATE TABLE IF NOT EXISTS ${t("turns")} (
|
|
87
107
|
id TEXT PRIMARY KEY,
|
|
88
108
|
conversation_id TEXT NOT NULL,
|
|
89
109
|
participant_id TEXT NOT NULL,
|
|
@@ -93,62 +113,62 @@ export class SqliteStorage implements Storage {
|
|
|
93
113
|
thread_id TEXT,
|
|
94
114
|
in_reply_to TEXT,
|
|
95
115
|
created_at TEXT NOT NULL,
|
|
96
|
-
FOREIGN KEY (conversation_id) REFERENCES conversations(id)
|
|
116
|
+
FOREIGN KEY (conversation_id) REFERENCES ${t("conversations")}(id)
|
|
97
117
|
);
|
|
98
118
|
|
|
99
|
-
CREATE TABLE IF NOT EXISTS threads (
|
|
119
|
+
CREATE TABLE IF NOT EXISTS ${t("threads")} (
|
|
100
120
|
id TEXT PRIMARY KEY,
|
|
101
121
|
conversation_id TEXT NOT NULL,
|
|
102
122
|
root_turn_id TEXT NOT NULL,
|
|
103
123
|
parent_thread_id TEXT,
|
|
104
124
|
subject TEXT,
|
|
105
125
|
created_at TEXT NOT NULL,
|
|
106
|
-
FOREIGN KEY (conversation_id) REFERENCES conversations(id)
|
|
126
|
+
FOREIGN KEY (conversation_id) REFERENCES ${t("conversations")}(id)
|
|
107
127
|
);
|
|
108
128
|
|
|
109
129
|
-- Indexes for common queries
|
|
110
|
-
CREATE INDEX IF NOT EXISTS
|
|
111
|
-
CREATE INDEX IF NOT EXISTS
|
|
112
|
-
CREATE INDEX IF NOT EXISTS
|
|
113
|
-
CREATE INDEX IF NOT EXISTS
|
|
114
|
-
CREATE INDEX IF NOT EXISTS
|
|
115
|
-
CREATE INDEX IF NOT EXISTS
|
|
116
|
-
CREATE INDEX IF NOT EXISTS
|
|
117
|
-
CREATE INDEX IF NOT EXISTS
|
|
130
|
+
CREATE INDEX IF NOT EXISTS idx_${t("messages")}_scope ON ${t("messages")}(scope);
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_${t("messages")}_sender ON ${t("messages")}(sender_id);
|
|
132
|
+
CREATE INDEX IF NOT EXISTS idx_${t("messages")}_thread_tag ON ${t("messages")}(thread_tag, scope);
|
|
133
|
+
CREATE INDEX IF NOT EXISTS idx_${t("messages")}_conversation ON ${t("messages")}(conversation_id);
|
|
134
|
+
CREATE INDEX IF NOT EXISTS idx_${t("messages")}_created ON ${t("messages")}(created_at);
|
|
135
|
+
CREATE INDEX IF NOT EXISTS idx_${t("recipients")}_agent ON ${t("recipients")}(agent_id);
|
|
136
|
+
CREATE INDEX IF NOT EXISTS idx_${t("turns")}_conversation ON ${t("turns")}(conversation_id);
|
|
137
|
+
CREATE INDEX IF NOT EXISTS idx_${t("agents")}_scope ON ${t("agents")}(scope);
|
|
118
138
|
|
|
119
139
|
-- FTS5 virtual table for full-text search
|
|
120
|
-
CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
|
|
140
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS ${t("messages_fts")} USING fts5(
|
|
121
141
|
id UNINDEXED,
|
|
122
142
|
subject,
|
|
123
143
|
text_content,
|
|
124
|
-
content='messages',
|
|
144
|
+
content='${t("messages")}',
|
|
125
145
|
content_rowid='rowid'
|
|
126
146
|
);
|
|
127
147
|
|
|
128
148
|
-- Triggers to keep FTS in sync
|
|
129
|
-
CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
|
|
130
|
-
INSERT INTO messages_fts(rowid, id, subject, text_content)
|
|
149
|
+
CREATE TRIGGER IF NOT EXISTS ${t("messages_ai")} AFTER INSERT ON ${t("messages")} BEGIN
|
|
150
|
+
INSERT INTO ${t("messages_fts")}(rowid, id, subject, text_content)
|
|
131
151
|
VALUES (NEW.rowid, NEW.id, NEW.subject,
|
|
132
152
|
CASE WHEN json_extract(NEW.content, '$.type') = 'text'
|
|
133
153
|
THEN json_extract(NEW.content, '$.text')
|
|
134
154
|
ELSE '' END);
|
|
135
155
|
END;
|
|
136
156
|
|
|
137
|
-
CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
|
|
138
|
-
INSERT INTO messages_fts(messages_fts, rowid, id, subject, text_content)
|
|
157
|
+
CREATE TRIGGER IF NOT EXISTS ${t("messages_ad")} AFTER DELETE ON ${t("messages")} BEGIN
|
|
158
|
+
INSERT INTO ${t("messages_fts")}(${t("messages_fts")}, rowid, id, subject, text_content)
|
|
139
159
|
VALUES ('delete', OLD.rowid, OLD.id, OLD.subject,
|
|
140
160
|
CASE WHEN json_extract(OLD.content, '$.type') = 'text'
|
|
141
161
|
THEN json_extract(OLD.content, '$.text')
|
|
142
162
|
ELSE '' END);
|
|
143
163
|
END;
|
|
144
164
|
|
|
145
|
-
CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
|
|
146
|
-
INSERT INTO messages_fts(messages_fts, rowid, id, subject, text_content)
|
|
165
|
+
CREATE TRIGGER IF NOT EXISTS ${t("messages_au")} AFTER UPDATE ON ${t("messages")} BEGIN
|
|
166
|
+
INSERT INTO ${t("messages_fts")}(${t("messages_fts")}, rowid, id, subject, text_content)
|
|
147
167
|
VALUES ('delete', OLD.rowid, OLD.id, OLD.subject,
|
|
148
168
|
CASE WHEN json_extract(OLD.content, '$.type') = 'text'
|
|
149
169
|
THEN json_extract(OLD.content, '$.text')
|
|
150
170
|
ELSE '' END);
|
|
151
|
-
INSERT INTO messages_fts(rowid, id, subject, text_content)
|
|
171
|
+
INSERT INTO ${t("messages_fts")}(rowid, id, subject, text_content)
|
|
152
172
|
VALUES (NEW.rowid, NEW.id, NEW.subject,
|
|
153
173
|
CASE WHEN json_extract(NEW.content, '$.type') = 'text'
|
|
154
174
|
THEN json_extract(NEW.content, '$.text')
|
|
@@ -161,7 +181,7 @@ export class SqliteStorage implements Storage {
|
|
|
161
181
|
|
|
162
182
|
getAgent(agentId: string): Agent | undefined {
|
|
163
183
|
const row = this.db
|
|
164
|
-
.prepare(
|
|
184
|
+
.prepare(`SELECT * FROM ${this.p("agents")} WHERE agent_id = ?`)
|
|
165
185
|
.get(agentId) as AgentRow | undefined;
|
|
166
186
|
return row ? rowToAgent(row) : undefined;
|
|
167
187
|
}
|
|
@@ -169,7 +189,7 @@ export class SqliteStorage implements Storage {
|
|
|
169
189
|
putAgent(agent: Agent): void {
|
|
170
190
|
this.db
|
|
171
191
|
.prepare(
|
|
172
|
-
`INSERT OR REPLACE INTO agents
|
|
192
|
+
`INSERT OR REPLACE INTO ${this.p("agents")}
|
|
173
193
|
(agent_id, display_name, program, model, scope, status, metadata, registered_at, last_active_at)
|
|
174
194
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`
|
|
175
195
|
)
|
|
@@ -189,15 +209,15 @@ export class SqliteStorage implements Storage {
|
|
|
189
209
|
listAgents(scope?: string): Agent[] {
|
|
190
210
|
if (scope) {
|
|
191
211
|
return (
|
|
192
|
-
this.db.prepare(
|
|
212
|
+
this.db.prepare(`SELECT * FROM ${this.p("agents")} WHERE scope = ?`).all(scope) as AgentRow[]
|
|
193
213
|
).map(rowToAgent);
|
|
194
214
|
}
|
|
195
|
-
return (this.db.prepare(
|
|
215
|
+
return (this.db.prepare(`SELECT * FROM ${this.p("agents")}`).all() as AgentRow[]).map(rowToAgent);
|
|
196
216
|
}
|
|
197
217
|
|
|
198
218
|
removeAgent(agentId: string): boolean {
|
|
199
219
|
const result = this.db
|
|
200
|
-
.prepare(
|
|
220
|
+
.prepare(`DELETE FROM ${this.p("agents")} WHERE agent_id = ?`)
|
|
201
221
|
.run(agentId);
|
|
202
222
|
return result.changes > 0;
|
|
203
223
|
}
|
|
@@ -206,7 +226,7 @@ export class SqliteStorage implements Storage {
|
|
|
206
226
|
|
|
207
227
|
getMessage(id: string): Message | undefined {
|
|
208
228
|
const row = this.db
|
|
209
|
-
.prepare(
|
|
229
|
+
.prepare(`SELECT * FROM ${this.p("messages")} WHERE id = ?`)
|
|
210
230
|
.get(id) as MessageRow | undefined;
|
|
211
231
|
if (!row) return undefined;
|
|
212
232
|
return this.rowToMessage(row);
|
|
@@ -214,12 +234,12 @@ export class SqliteStorage implements Storage {
|
|
|
214
234
|
|
|
215
235
|
putMessage(message: Message): Message {
|
|
216
236
|
const upsertMsg = this.db.prepare(
|
|
217
|
-
`INSERT OR REPLACE INTO messages
|
|
237
|
+
`INSERT OR REPLACE INTO ${this.p("messages")}
|
|
218
238
|
(id, scope, sender_id, subject, content, thread_tag, in_reply_to, conversation_id, importance, metadata, created_at)
|
|
219
239
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
|
|
220
240
|
);
|
|
221
241
|
const upsertRecipient = this.db.prepare(
|
|
222
|
-
`INSERT OR REPLACE INTO recipients
|
|
242
|
+
`INSERT OR REPLACE INTO ${this.p("recipients")}
|
|
223
243
|
(message_id, agent_id, kind, delivered_at, read_at, ack_at)
|
|
224
244
|
VALUES (?, ?, ?, ?, ?, ?)`
|
|
225
245
|
);
|
|
@@ -240,7 +260,7 @@ export class SqliteStorage implements Storage {
|
|
|
240
260
|
);
|
|
241
261
|
// Delete old recipients and re-insert
|
|
242
262
|
this.db
|
|
243
|
-
.prepare(
|
|
263
|
+
.prepare(`DELETE FROM ${this.p("recipients")} WHERE message_id = ?`)
|
|
244
264
|
.run(message.id);
|
|
245
265
|
for (const r of message.recipients) {
|
|
246
266
|
upsertRecipient.run(
|
|
@@ -258,9 +278,11 @@ export class SqliteStorage implements Storage {
|
|
|
258
278
|
}
|
|
259
279
|
|
|
260
280
|
getInbox(agentId: string, opts?: InboxQuery): Message[] {
|
|
281
|
+
const m = this.p("messages");
|
|
282
|
+
const r = this.p("recipients");
|
|
261
283
|
let sql = `
|
|
262
|
-
SELECT m.* FROM
|
|
263
|
-
JOIN
|
|
284
|
+
SELECT m.* FROM ${m} m
|
|
285
|
+
JOIN ${r} r ON r.message_id = m.id
|
|
264
286
|
WHERE r.agent_id = ?
|
|
265
287
|
`;
|
|
266
288
|
const params: unknown[] = [agentId];
|
|
@@ -285,14 +307,14 @@ export class SqliteStorage implements Storage {
|
|
|
285
307
|
getThread(query: ThreadQuery): Message[] {
|
|
286
308
|
const rows = this.db
|
|
287
309
|
.prepare(
|
|
288
|
-
|
|
310
|
+
`SELECT * FROM ${this.p("messages")} WHERE thread_tag = ? AND scope = ? ORDER BY created_at ASC`
|
|
289
311
|
)
|
|
290
312
|
.all(query.threadTag, query.scope) as MessageRow[];
|
|
291
313
|
return rows.map((row) => this.rowToMessage(row));
|
|
292
314
|
}
|
|
293
315
|
|
|
294
316
|
getSentMessages(agentId: string, limit?: number): Message[] {
|
|
295
|
-
let sql =
|
|
317
|
+
let sql = `SELECT * FROM ${this.p("messages")} WHERE sender_id = ? ORDER BY created_at ASC`;
|
|
296
318
|
const params: unknown[] = [agentId];
|
|
297
319
|
if (limit) {
|
|
298
320
|
sql += " LIMIT ?";
|
|
@@ -303,22 +325,24 @@ export class SqliteStorage implements Storage {
|
|
|
303
325
|
}
|
|
304
326
|
|
|
305
327
|
searchMessages(query: string, scope?: string): Message[] {
|
|
328
|
+
const m = this.p("messages");
|
|
329
|
+
const fts = this.p("messages_fts");
|
|
306
330
|
let sql: string;
|
|
307
331
|
let params: unknown[];
|
|
308
332
|
|
|
309
333
|
if (scope) {
|
|
310
334
|
sql = `
|
|
311
|
-
SELECT m.* FROM
|
|
312
|
-
JOIN
|
|
313
|
-
WHERE
|
|
335
|
+
SELECT m.* FROM ${m} m
|
|
336
|
+
JOIN ${fts} fts ON fts.id = m.id
|
|
337
|
+
WHERE ${fts} MATCH ? AND m.scope = ?
|
|
314
338
|
ORDER BY m.created_at ASC
|
|
315
339
|
`;
|
|
316
340
|
params = [query, scope];
|
|
317
341
|
} else {
|
|
318
342
|
sql = `
|
|
319
|
-
SELECT m.* FROM
|
|
320
|
-
JOIN
|
|
321
|
-
WHERE
|
|
343
|
+
SELECT m.* FROM ${m} m
|
|
344
|
+
JOIN ${fts} fts ON fts.id = m.id
|
|
345
|
+
WHERE ${fts} MATCH ?
|
|
322
346
|
ORDER BY m.created_at ASC
|
|
323
347
|
`;
|
|
324
348
|
params = [query];
|
|
@@ -336,7 +360,7 @@ export class SqliteStorage implements Storage {
|
|
|
336
360
|
private searchMessagesLike(query: string, scope?: string): Message[] {
|
|
337
361
|
const pattern = `%${query}%`;
|
|
338
362
|
let sql = `
|
|
339
|
-
SELECT * FROM messages
|
|
363
|
+
SELECT * FROM ${this.p("messages")}
|
|
340
364
|
WHERE (subject LIKE ? OR content LIKE ?)
|
|
341
365
|
`;
|
|
342
366
|
const params: unknown[] = [pattern, pattern];
|
|
@@ -353,7 +377,7 @@ export class SqliteStorage implements Storage {
|
|
|
353
377
|
|
|
354
378
|
getConversation(id: string): Conversation | undefined {
|
|
355
379
|
const row = this.db
|
|
356
|
-
.prepare(
|
|
380
|
+
.prepare(`SELECT * FROM ${this.p("conversations")} WHERE id = ?`)
|
|
357
381
|
.get(id) as ConversationRow | undefined;
|
|
358
382
|
if (!row) return undefined;
|
|
359
383
|
return this.rowToConversation(row);
|
|
@@ -363,7 +387,7 @@ export class SqliteStorage implements Storage {
|
|
|
363
387
|
this.db.transaction(() => {
|
|
364
388
|
this.db
|
|
365
389
|
.prepare(
|
|
366
|
-
`INSERT OR REPLACE INTO conversations
|
|
390
|
+
`INSERT OR REPLACE INTO ${this.p("conversations")}
|
|
367
391
|
(id, scope, subject, status, metadata, created_at, updated_at)
|
|
368
392
|
VALUES (?, ?, ?, ?, ?, ?, ?)`
|
|
369
393
|
)
|
|
@@ -378,10 +402,10 @@ export class SqliteStorage implements Storage {
|
|
|
378
402
|
);
|
|
379
403
|
// Re-sync participants
|
|
380
404
|
this.db
|
|
381
|
-
.prepare(
|
|
405
|
+
.prepare(`DELETE FROM ${this.p("participants")} WHERE conversation_id = ?`)
|
|
382
406
|
.run(conversation.id);
|
|
383
407
|
const insertP = this.db.prepare(
|
|
384
|
-
`INSERT INTO participants (conversation_id, agent_id, role, joined_at) VALUES (?, ?, ?, ?)`
|
|
408
|
+
`INSERT INTO ${this.p("participants")} (conversation_id, agent_id, role, joined_at) VALUES (?, ?, ?, ?)`
|
|
385
409
|
);
|
|
386
410
|
for (const p of conversation.participants) {
|
|
387
411
|
insertP.run(conversation.id, p.agent_id, p.role ?? null, p.joined_at);
|
|
@@ -394,11 +418,11 @@ export class SqliteStorage implements Storage {
|
|
|
394
418
|
let rows: ConversationRow[];
|
|
395
419
|
if (scope) {
|
|
396
420
|
rows = this.db
|
|
397
|
-
.prepare(
|
|
421
|
+
.prepare(`SELECT * FROM ${this.p("conversations")} WHERE scope = ? ORDER BY updated_at DESC`)
|
|
398
422
|
.all(scope) as ConversationRow[];
|
|
399
423
|
} else {
|
|
400
424
|
rows = this.db
|
|
401
|
-
.prepare(
|
|
425
|
+
.prepare(`SELECT * FROM ${this.p("conversations")} ORDER BY updated_at DESC`)
|
|
402
426
|
.all() as ConversationRow[];
|
|
403
427
|
}
|
|
404
428
|
return rows.map((row) => this.rowToConversation(row));
|
|
@@ -409,7 +433,7 @@ export class SqliteStorage implements Storage {
|
|
|
409
433
|
addTurn(turn: Turn): void {
|
|
410
434
|
this.db
|
|
411
435
|
.prepare(
|
|
412
|
-
`INSERT INTO turns
|
|
436
|
+
`INSERT INTO ${this.p("turns")}
|
|
413
437
|
(id, conversation_id, participant_id, source_message_id, content_type, content, thread_id, in_reply_to, created_at)
|
|
414
438
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`
|
|
415
439
|
)
|
|
@@ -429,7 +453,7 @@ export class SqliteStorage implements Storage {
|
|
|
429
453
|
getTurns(conversationId: string): Turn[] {
|
|
430
454
|
const rows = this.db
|
|
431
455
|
.prepare(
|
|
432
|
-
|
|
456
|
+
`SELECT * FROM ${this.p("turns")} WHERE conversation_id = ? ORDER BY created_at ASC`
|
|
433
457
|
)
|
|
434
458
|
.all(conversationId) as TurnRow[];
|
|
435
459
|
return rows.map(rowToTurn);
|
|
@@ -439,7 +463,7 @@ export class SqliteStorage implements Storage {
|
|
|
439
463
|
|
|
440
464
|
getThread2(id: string): Thread | undefined {
|
|
441
465
|
const row = this.db
|
|
442
|
-
.prepare(
|
|
466
|
+
.prepare(`SELECT * FROM ${this.p("threads")} WHERE id = ?`)
|
|
443
467
|
.get(id) as ThreadRow | undefined;
|
|
444
468
|
return row ? rowToThread(row) : undefined;
|
|
445
469
|
}
|
|
@@ -447,7 +471,7 @@ export class SqliteStorage implements Storage {
|
|
|
447
471
|
putThread(thread: Thread): Thread {
|
|
448
472
|
this.db
|
|
449
473
|
.prepare(
|
|
450
|
-
`INSERT OR REPLACE INTO threads
|
|
474
|
+
`INSERT OR REPLACE INTO ${this.p("threads")}
|
|
451
475
|
(id, conversation_id, root_turn_id, parent_thread_id, subject, created_at)
|
|
452
476
|
VALUES (?, ?, ?, ?, ?, ?)`
|
|
453
477
|
)
|
|
@@ -464,7 +488,7 @@ export class SqliteStorage implements Storage {
|
|
|
464
488
|
|
|
465
489
|
getThreadsByConversation(conversationId: string): Thread[] {
|
|
466
490
|
const rows = this.db
|
|
467
|
-
.prepare(
|
|
491
|
+
.prepare(`SELECT * FROM ${this.p("threads")} WHERE conversation_id = ?`)
|
|
468
492
|
.all(conversationId) as ThreadRow[];
|
|
469
493
|
return rows.map(rowToThread);
|
|
470
494
|
}
|
|
@@ -473,7 +497,7 @@ export class SqliteStorage implements Storage {
|
|
|
473
497
|
|
|
474
498
|
private getRecipients(messageId: string): Recipient[] {
|
|
475
499
|
const rows = this.db
|
|
476
|
-
.prepare(
|
|
500
|
+
.prepare(`SELECT * FROM ${this.p("recipients")} WHERE message_id = ?`)
|
|
477
501
|
.all(messageId) as RecipientRow[];
|
|
478
502
|
return rows.map((r) => ({
|
|
479
503
|
agent_id: r.agent_id,
|
|
@@ -486,7 +510,7 @@ export class SqliteStorage implements Storage {
|
|
|
486
510
|
|
|
487
511
|
private getParticipants(conversationId: string): Participant[] {
|
|
488
512
|
const rows = this.db
|
|
489
|
-
.prepare(
|
|
513
|
+
.prepare(`SELECT * FROM ${this.p("participants")} WHERE conversation_id = ?`)
|
|
490
514
|
.all(conversationId) as ParticipantRow[];
|
|
491
515
|
return rows.map((r) => ({
|
|
492
516
|
agent_id: r.agent_id,
|
|
@@ -526,7 +550,9 @@ export class SqliteStorage implements Storage {
|
|
|
526
550
|
}
|
|
527
551
|
|
|
528
552
|
close(): void {
|
|
529
|
-
this.
|
|
553
|
+
if (!this.externalDb) {
|
|
554
|
+
this.db.close();
|
|
555
|
+
}
|
|
530
556
|
}
|
|
531
557
|
}
|
|
532
558
|
|
package/test/mail-server.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach } from "vitest";
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
3
|
import { InMemoryStorage } from "../src/storage/memory.js";
|
|
4
4
|
import { MessageRouter } from "../src/router/message-router.js";
|
|
@@ -188,6 +188,67 @@ describe("MailJsonRpcServer", () => {
|
|
|
188
188
|
});
|
|
189
189
|
});
|
|
190
190
|
|
|
191
|
+
describe("event emissions", () => {
|
|
192
|
+
it("should emit mail.created on mail/create", async () => {
|
|
193
|
+
const listener = vi.fn();
|
|
194
|
+
events.on("mail.created", listener);
|
|
195
|
+
|
|
196
|
+
await rpc("mail/create", { subject: "Test" });
|
|
197
|
+
|
|
198
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
199
|
+
expect(listener.mock.calls[0][0]).toMatchObject({ subject: "Test" });
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it("should emit mail.turn.added on mail/turn", async () => {
|
|
203
|
+
const listener = vi.fn();
|
|
204
|
+
events.on("mail.turn.added", listener);
|
|
205
|
+
|
|
206
|
+
const createResp = await rpc("mail/create", { subject: "Test" });
|
|
207
|
+
const convId = (createResp.result as { id: string }).id;
|
|
208
|
+
|
|
209
|
+
await rpc("mail/turn", {
|
|
210
|
+
conversationId: convId,
|
|
211
|
+
participantId: "alice",
|
|
212
|
+
content: { type: "text", text: "hello" },
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
216
|
+
expect(listener.mock.calls[0][0]).toMatchObject({
|
|
217
|
+
conversation_id: convId,
|
|
218
|
+
participant_id: "alice",
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it("should emit mail.participant.joined on mail/join", async () => {
|
|
223
|
+
const listener = vi.fn();
|
|
224
|
+
events.on("mail.participant.joined", listener);
|
|
225
|
+
|
|
226
|
+
const createResp = await rpc("mail/create", { subject: "Test" });
|
|
227
|
+
const convId = (createResp.result as { id: string }).id;
|
|
228
|
+
|
|
229
|
+
await rpc("mail/join", { conversationId: convId, agentId: "bob" });
|
|
230
|
+
|
|
231
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
232
|
+
expect(listener.mock.calls[0][0]).toEqual({
|
|
233
|
+
conversation_id: convId,
|
|
234
|
+
agent_id: "bob",
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
it("should not emit mail.participant.joined for duplicate join", async () => {
|
|
239
|
+
const listener = vi.fn();
|
|
240
|
+
events.on("mail.participant.joined", listener);
|
|
241
|
+
|
|
242
|
+
const createResp = await rpc("mail/create", { subject: "Test" });
|
|
243
|
+
const convId = (createResp.result as { id: string }).id;
|
|
244
|
+
|
|
245
|
+
await rpc("mail/join", { conversationId: convId, agentId: "bob" });
|
|
246
|
+
await rpc("mail/join", { conversationId: convId, agentId: "bob" });
|
|
247
|
+
|
|
248
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
|
|
191
252
|
describe("error handling", () => {
|
|
192
253
|
it("should reject non-2.0 jsonrpc", async () => {
|
|
193
254
|
const resp = await server.handleRequest({
|