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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-inbox",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Agent Inbox — message routing, traceability, and MCP tools for multi-agent systems",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
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 if path provided, otherwise in-memory
107
- const storage: Storage = opts.sqlitePath
108
- ? new SqliteStorage({ path: opts.sqlitePath })
109
- : new InMemoryStorage();
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 {
@@ -12,22 +12,42 @@ import type {
12
12
  import type { Storage, InboxQuery, ThreadQuery } from "./interface.js";
13
13
 
14
14
  export interface SqliteStorageOptions {
15
- path: string; // ":memory:" for in-memory, or file path
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
- this.db = new Database(opts.path);
23
- this.db.pragma("journal_mode = WAL");
24
- this.db.pragma("foreign_keys = ON");
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 idx_messages_scope ON messages(scope);
111
- CREATE INDEX IF NOT EXISTS idx_messages_sender ON messages(sender_id);
112
- CREATE INDEX IF NOT EXISTS idx_messages_thread_tag ON messages(thread_tag, scope);
113
- CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id);
114
- CREATE INDEX IF NOT EXISTS idx_messages_created ON messages(created_at);
115
- CREATE INDEX IF NOT EXISTS idx_recipients_agent ON recipients(agent_id);
116
- CREATE INDEX IF NOT EXISTS idx_turns_conversation ON turns(conversation_id);
117
- CREATE INDEX IF NOT EXISTS idx_agents_scope ON agents(scope);
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("SELECT * FROM agents WHERE agent_id = ?")
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("SELECT * FROM agents WHERE scope = ?").all(scope) as AgentRow[]
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("SELECT * FROM agents").all() as AgentRow[]).map(rowToAgent);
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("DELETE FROM agents WHERE agent_id = ?")
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("SELECT * FROM messages WHERE id = ?")
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("DELETE FROM recipients WHERE message_id = ?")
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 messages m
263
- JOIN recipients r ON r.message_id = m.id
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
- "SELECT * FROM messages WHERE thread_tag = ? AND scope = ? ORDER BY created_at ASC"
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 = "SELECT * FROM messages WHERE sender_id = ? ORDER BY created_at ASC";
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 messages m
312
- JOIN messages_fts fts ON fts.id = m.id
313
- WHERE messages_fts MATCH ? AND m.scope = ?
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 messages m
320
- JOIN messages_fts fts ON fts.id = m.id
321
- WHERE messages_fts MATCH ?
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("SELECT * FROM conversations WHERE id = ?")
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("DELETE FROM participants WHERE conversation_id = ?")
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("SELECT * FROM conversations WHERE scope = ? ORDER BY updated_at DESC")
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("SELECT * FROM conversations ORDER BY updated_at DESC")
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
- "SELECT * FROM turns WHERE conversation_id = ? ORDER BY created_at ASC"
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("SELECT * FROM threads WHERE id = ?")
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("SELECT * FROM threads WHERE conversation_id = ?")
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("SELECT * FROM recipients WHERE message_id = ?")
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("SELECT * FROM participants WHERE conversation_id = ?")
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.db.close();
553
+ if (!this.externalDb) {
554
+ this.db.close();
555
+ }
530
556
  }
531
557
  }
532
558
 
@@ -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({