@relaycast/engine 5.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/dist/adapters/node/realtime.d.ts +9 -1
  2. package/dist/adapters/node/realtime.d.ts.map +1 -1
  3. package/dist/adapters/node/realtime.js +64 -7
  4. package/dist/adapters/node/realtime.js.map +1 -1
  5. package/dist/auth/index.d.ts.map +1 -1
  6. package/dist/auth/index.js +31 -9
  7. package/dist/auth/index.js.map +1 -1
  8. package/dist/auth/tokenKind.d.ts +40 -0
  9. package/dist/auth/tokenKind.d.ts.map +1 -0
  10. package/dist/auth/tokenKind.js +89 -0
  11. package/dist/auth/tokenKind.js.map +1 -0
  12. package/dist/db/migrations/0025_node_kind_role_adapter.sql +45 -0
  13. package/dist/db/migrations/0026_observer_tokens.sql +32 -0
  14. package/dist/db/schema.d.ts +329 -0
  15. package/dist/db/schema.d.ts.map +1 -1
  16. package/dist/db/schema.js +32 -3
  17. package/dist/db/schema.js.map +1 -1
  18. package/dist/engine/action.d.ts +2 -2
  19. package/dist/engine/action.d.ts.map +1 -1
  20. package/dist/engine/action.js +182 -7
  21. package/dist/engine/action.js.map +1 -1
  22. package/dist/engine/activity.d.ts +6 -0
  23. package/dist/engine/activity.d.ts.map +1 -1
  24. package/dist/engine/activity.js +9 -2
  25. package/dist/engine/activity.js.map +1 -1
  26. package/dist/engine/agent.d.ts +0 -33
  27. package/dist/engine/agent.d.ts.map +1 -1
  28. package/dist/engine/agent.js +0 -155
  29. package/dist/engine/agent.js.map +1 -1
  30. package/dist/engine/attachments.d.ts +6 -0
  31. package/dist/engine/attachments.d.ts.map +1 -1
  32. package/dist/engine/attachments.js +37 -0
  33. package/dist/engine/attachments.js.map +1 -1
  34. package/dist/engine/console.d.ts +78 -1
  35. package/dist/engine/console.d.ts.map +1 -1
  36. package/dist/engine/console.js +175 -19
  37. package/dist/engine/console.js.map +1 -1
  38. package/dist/engine/delivery.d.ts +2 -0
  39. package/dist/engine/delivery.d.ts.map +1 -1
  40. package/dist/engine/delivery.js +4 -0
  41. package/dist/engine/delivery.js.map +1 -1
  42. package/dist/engine/deliveryWire.d.ts +4 -0
  43. package/dist/engine/deliveryWire.d.ts.map +1 -1
  44. package/dist/engine/deliveryWire.js +2 -0
  45. package/dist/engine/deliveryWire.js.map +1 -1
  46. package/dist/engine/deliveryWrites.d.ts +1 -0
  47. package/dist/engine/deliveryWrites.d.ts.map +1 -1
  48. package/dist/engine/deliveryWrites.js +7 -2
  49. package/dist/engine/deliveryWrites.js.map +1 -1
  50. package/dist/engine/dm.d.ts.map +1 -1
  51. package/dist/engine/dm.js +11 -33
  52. package/dist/engine/dm.js.map +1 -1
  53. package/dist/engine/dmAll.d.ts.map +1 -1
  54. package/dist/engine/dmAll.js +2 -0
  55. package/dist/engine/dmAll.js.map +1 -1
  56. package/dist/engine/groupDm.d.ts +2 -3
  57. package/dist/engine/groupDm.d.ts.map +1 -1
  58. package/dist/engine/groupDm.js +8 -26
  59. package/dist/engine/groupDm.js.map +1 -1
  60. package/dist/engine/invocationCompletion.d.ts +1 -1
  61. package/dist/engine/invocationCompletion.d.ts.map +1 -1
  62. package/dist/engine/invocationCompletion.js +9 -2
  63. package/dist/engine/invocationCompletion.js.map +1 -1
  64. package/dist/engine/message.d.ts.map +1 -1
  65. package/dist/engine/message.js +15 -44
  66. package/dist/engine/message.js.map +1 -1
  67. package/dist/engine/node.d.ts +13 -1
  68. package/dist/engine/node.d.ts.map +1 -1
  69. package/dist/engine/node.js +100 -31
  70. package/dist/engine/node.js.map +1 -1
  71. package/dist/engine/nodeContext.d.ts.map +1 -1
  72. package/dist/engine/nodeContext.js +8 -32
  73. package/dist/engine/nodeContext.js.map +1 -1
  74. package/dist/engine/nodeDeliver.d.ts +23 -0
  75. package/dist/engine/nodeDeliver.d.ts.map +1 -0
  76. package/dist/engine/nodeDeliver.js +81 -0
  77. package/dist/engine/nodeDeliver.js.map +1 -0
  78. package/dist/engine/observerToken.d.ts +110 -0
  79. package/dist/engine/observerToken.d.ts.map +1 -0
  80. package/dist/engine/observerToken.js +528 -0
  81. package/dist/engine/observerToken.js.map +1 -0
  82. package/dist/engine/search.d.ts +4 -0
  83. package/dist/engine/search.d.ts.map +1 -1
  84. package/dist/engine/search.js +6 -1
  85. package/dist/engine/search.js.map +1 -1
  86. package/dist/engine/thread.d.ts +4 -3
  87. package/dist/engine/thread.d.ts.map +1 -1
  88. package/dist/engine/thread.js +8 -0
  89. package/dist/engine/thread.js.map +1 -1
  90. package/dist/engine/wsAuth.d.ts +2 -6
  91. package/dist/engine/wsAuth.d.ts.map +1 -1
  92. package/dist/engine/wsAuth.js +20 -12
  93. package/dist/engine/wsAuth.js.map +1 -1
  94. package/dist/engine/wsTransform.d.ts.map +1 -1
  95. package/dist/engine/wsTransform.js +52 -36
  96. package/dist/engine/wsTransform.js.map +1 -1
  97. package/dist/engine.d.ts.map +1 -1
  98. package/dist/engine.js +4 -25
  99. package/dist/engine.js.map +1 -1
  100. package/dist/entrypoints/node.d.ts.map +1 -1
  101. package/dist/entrypoints/node.js +1 -14
  102. package/dist/entrypoints/node.js.map +1 -1
  103. package/dist/env.d.ts +3 -1
  104. package/dist/env.d.ts.map +1 -1
  105. package/dist/middleware/auth.d.ts +8 -0
  106. package/dist/middleware/auth.d.ts.map +1 -1
  107. package/dist/middleware/auth.js +62 -0
  108. package/dist/middleware/auth.js.map +1 -1
  109. package/dist/middleware/logger.d.ts.map +1 -1
  110. package/dist/middleware/logger.js +4 -4
  111. package/dist/middleware/logger.js.map +1 -1
  112. package/dist/middleware/planLimits.d.ts.map +1 -1
  113. package/dist/middleware/planLimits.js +9 -2
  114. package/dist/middleware/planLimits.js.map +1 -1
  115. package/dist/middleware/rateLimit.d.ts.map +1 -1
  116. package/dist/middleware/rateLimit.js +13 -1
  117. package/dist/middleware/rateLimit.js.map +1 -1
  118. package/dist/middleware/usageTracker.d.ts.map +1 -1
  119. package/dist/middleware/usageTracker.js +2 -1
  120. package/dist/middleware/usageTracker.js.map +1 -1
  121. package/dist/ports/auth.d.ts +6 -2
  122. package/dist/ports/auth.d.ts.map +1 -1
  123. package/dist/ports/entitlements.d.ts +3 -1
  124. package/dist/ports/entitlements.d.ts.map +1 -1
  125. package/dist/ports/realtime.d.ts +4 -1
  126. package/dist/ports/realtime.d.ts.map +1 -1
  127. package/dist/providers/static-entitlements.js +4 -4
  128. package/dist/providers/static-entitlements.js.map +1 -1
  129. package/dist/routes/action.d.ts.map +1 -1
  130. package/dist/routes/action.js +13 -5
  131. package/dist/routes/action.js.map +1 -1
  132. package/dist/routes/agent.d.ts.map +1 -1
  133. package/dist/routes/agent.js +107 -51
  134. package/dist/routes/agent.js.map +1 -1
  135. package/dist/routes/channel.d.ts.map +1 -1
  136. package/dist/routes/channel.js +38 -12
  137. package/dist/routes/channel.js.map +1 -1
  138. package/dist/routes/console.d.ts.map +1 -1
  139. package/dist/routes/console.js +39 -9
  140. package/dist/routes/console.js.map +1 -1
  141. package/dist/routes/deliveryRouting.js +28 -19
  142. package/dist/routes/deliveryRouting.js.map +1 -1
  143. package/dist/routes/fanout.d.ts.map +1 -1
  144. package/dist/routes/fanout.js +26 -18
  145. package/dist/routes/fanout.js.map +1 -1
  146. package/dist/routes/file.d.ts.map +1 -1
  147. package/dist/routes/file.js +15 -5
  148. package/dist/routes/file.js.map +1 -1
  149. package/dist/routes/message.d.ts.map +1 -1
  150. package/dist/routes/message.js +22 -4
  151. package/dist/routes/message.js.map +1 -1
  152. package/dist/routes/node.d.ts.map +1 -1
  153. package/dist/routes/node.js +61 -10
  154. package/dist/routes/node.js.map +1 -1
  155. package/dist/routes/observerToken.d.ts +4 -0
  156. package/dist/routes/observerToken.d.ts.map +1 -0
  157. package/dist/routes/observerToken.js +105 -0
  158. package/dist/routes/observerToken.js.map +1 -0
  159. package/dist/routes/presence.d.ts.map +1 -1
  160. package/dist/routes/presence.js +6 -3
  161. package/dist/routes/presence.js.map +1 -1
  162. package/dist/routes/reaction.d.ts.map +1 -1
  163. package/dist/routes/reaction.js +59 -7
  164. package/dist/routes/reaction.js.map +1 -1
  165. package/dist/routes/receipt.d.ts.map +1 -1
  166. package/dist/routes/receipt.js +20 -3
  167. package/dist/routes/receipt.js.map +1 -1
  168. package/dist/routes/search.d.ts.map +1 -1
  169. package/dist/routes/search.js +7 -4
  170. package/dist/routes/search.js.map +1 -1
  171. package/dist/routes/thread.d.ts.map +1 -1
  172. package/dist/routes/thread.js +20 -3
  173. package/dist/routes/thread.js.map +1 -1
  174. package/dist/routes/workspace.d.ts.map +1 -1
  175. package/dist/routes/workspace.js +20 -7
  176. package/dist/routes/workspace.js.map +1 -1
  177. package/package.json +3 -3
@@ -262,159 +262,4 @@ export async function sweepStaleAgents(db) {
262
262
  .returning({ id: agents.id });
263
263
  return result.length;
264
264
  }
265
- export async function spawnAgent(db, workspaceId, data) {
266
- // Check if agent already exists
267
- const [existing] = await db
268
- .select()
269
- .from(agents)
270
- .where(and(eq(agents.workspaceId, workspaceId), eq(agents.name, data.name)));
271
- let agentId;
272
- let token;
273
- let createdAt;
274
- let alreadyExisted = false;
275
- if (existing) {
276
- // Agent exists - rotate token and update metadata
277
- alreadyExisted = true;
278
- agentId = existing.id;
279
- token = `at_live_${randomHex(16)}`;
280
- const tokenHash = await sha256Hex(token);
281
- // Update agent with new token, set online, store spawn metadata
282
- const spawnMetadata = {
283
- ...(existing.metadata ?? {}),
284
- ...(data.metadata || {}),
285
- cli: data.cli,
286
- spawn: {
287
- cli: data.cli,
288
- task: data.task,
289
- spawned_at: new Date().toISOString(),
290
- },
291
- };
292
- await db
293
- .update(agents)
294
- .set({
295
- tokenHash,
296
- status: 'active',
297
- lastSeen: new Date(),
298
- persona: data.persona ?? existing.persona,
299
- metadata: spawnMetadata,
300
- })
301
- .where(eq(agents.id, agentId));
302
- await ensureDirectNodeForAgent(db, workspaceId, existing);
303
- createdAt = existing.createdAt.toISOString();
304
- }
305
- else {
306
- // Create new agent
307
- agentId = generateId();
308
- token = `at_live_${randomHex(16)}`;
309
- const tokenHash = await sha256Hex(token);
310
- const spawnMetadata = {
311
- ...(data.metadata || {}),
312
- cli: data.cli,
313
- spawn: {
314
- cli: data.cli,
315
- task: data.task,
316
- spawned_at: new Date().toISOString(),
317
- },
318
- };
319
- const [agent] = await db
320
- .insert(agents)
321
- .values({
322
- id: agentId,
323
- workspaceId,
324
- name: data.name,
325
- handle: `@${data.name}`,
326
- type: 'agent',
327
- tokenHash,
328
- status: 'active',
329
- persona: data.persona ?? null,
330
- metadata: spawnMetadata,
331
- })
332
- .returning();
333
- createdAt = agent.createdAt.toISOString();
334
- // Auto-join #general
335
- const [generalChannel] = await db
336
- .select()
337
- .from(channels)
338
- .where(and(eq(channels.workspaceId, workspaceId), eq(channels.name, 'general')));
339
- if (generalChannel) {
340
- await db.insert(channelMembers).values({
341
- channelId: generalChannel.id,
342
- agentId,
343
- role: 'member',
344
- }).onConflictDoNothing();
345
- }
346
- await ensureDirectNodeForAgent(db, workspaceId, agent);
347
- }
348
- // Join specified channel if provided
349
- let joinedChannel = null;
350
- if (data.channel) {
351
- const channelName = data.channel.startsWith('#') ? data.channel.slice(1) : data.channel;
352
- const [channel] = await db
353
- .select()
354
- .from(channels)
355
- .where(and(eq(channels.workspaceId, workspaceId), eq(channels.name, channelName)));
356
- if (channel && !channel.isArchived) {
357
- await db.insert(channelMembers).values({
358
- channelId: channel.id,
359
- agentId,
360
- role: 'member',
361
- }).onConflictDoNothing();
362
- joinedChannel = channel.name;
363
- }
364
- }
365
- return {
366
- id: agentId,
367
- name: data.name,
368
- handle: alreadyExisted ? (existing.handle ?? `@${data.name}`) : `@${data.name}`,
369
- token,
370
- cli: data.cli,
371
- task: data.task,
372
- channel: joinedChannel,
373
- status: 'active',
374
- created_at: createdAt,
375
- already_existed: alreadyExisted,
376
- };
377
- }
378
- export async function releaseAgent(db, workspaceId, data) {
379
- const [agent] = await db
380
- .select()
381
- .from(agents)
382
- .where(and(eq(agents.workspaceId, workspaceId), eq(agents.name, data.name)));
383
- if (!agent) {
384
- return null;
385
- }
386
- if (data.delete_agent) {
387
- // Delete the agent entirely
388
- await db.delete(agents).where(eq(agents.id, agent.id));
389
- await db.delete(nodes).where(eq(nodes.id, directNodeIdForAgent(agent.id)));
390
- return {
391
- name: data.name,
392
- released: true,
393
- deleted: true,
394
- reason: data.reason ?? null,
395
- };
396
- }
397
- // Mark as offline and clear spawn metadata
398
- const existingMetadata = agent.metadata ?? {};
399
- const { spawn: _spawn, cli: _cli, ...restMetadata } = existingMetadata;
400
- await db
401
- .update(agents)
402
- .set({
403
- status: 'offline',
404
- metadata: {
405
- ...restMetadata,
406
- release: {
407
- reason: data.reason ?? null,
408
- released_at: new Date().toISOString(),
409
- },
410
- },
411
- })
412
- .where(eq(agents.id, agent.id));
413
- return {
414
- name: data.name,
415
- released: true,
416
- deleted: false,
417
- reason: data.reason ?? null,
418
- };
419
- }
420
265
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/engine/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/engine/agent.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,12 @@ export type AttachmentRow = {
7
7
  content_type: string;
8
8
  size_bytes: number;
9
9
  };
10
+ /**
11
+ * Validate attachment ids for a send path and hydrate the details needed for
12
+ * response payloads and logs. Unknown, foreign-workspace, incomplete, and
13
+ * duplicate file ids are rejected before any message rows are written.
14
+ */
15
+ export declare function resolveSendAttachments(db: Db, workspaceId: string, fileIds?: string[]): Promise<AttachmentRow[]>;
10
16
  /**
11
17
  * Load attachments for a batch of message ids, grouped by message id.
12
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/engine/attachments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEnC,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CA4BvC"}
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/engine/attachments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAI5C,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEnC,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAuC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CA4BvC"}
@@ -1,5 +1,42 @@
1
1
  import { and, asc, eq, inArray } from 'drizzle-orm';
2
2
  import { messageAttachments, files } from '../db/schema.js';
3
+ import { codedError } from '../lib/httpError.js';
4
+ /**
5
+ * Validate attachment ids for a send path and hydrate the details needed for
6
+ * response payloads and logs. Unknown, foreign-workspace, incomplete, and
7
+ * duplicate file ids are rejected before any message rows are written.
8
+ */
9
+ export async function resolveSendAttachments(db, workspaceId, fileIds) {
10
+ if (!fileIds || fileIds.length === 0)
11
+ return [];
12
+ const unique = new Set(fileIds);
13
+ if (unique.size !== fileIds.length) {
14
+ throw codedError('Invalid attachments: duplicate file ids are not allowed', 'invalid_attachments', 400);
15
+ }
16
+ const rows = await db
17
+ .select({
18
+ fileId: files.id,
19
+ filename: files.filename,
20
+ contentType: files.contentType,
21
+ sizeBytes: files.sizeBytes,
22
+ })
23
+ .from(files)
24
+ .where(and(eq(files.workspaceId, workspaceId), eq(files.status, 'complete'), inArray(files.id, fileIds)));
25
+ const byId = new Map(rows.map((row) => [row.fileId, row]));
26
+ const invalid = fileIds.filter((id) => !byId.has(id));
27
+ if (invalid.length > 0) {
28
+ throw codedError('Invalid attachments: file ids must exist in workspace and be complete', 'invalid_attachments', 400);
29
+ }
30
+ return fileIds.map((id) => {
31
+ const row = byId.get(id);
32
+ return {
33
+ file_id: row.fileId,
34
+ filename: row.filename,
35
+ content_type: row.contentType,
36
+ size_bytes: row.sizeBytes,
37
+ };
38
+ });
39
+ }
3
40
  /**
4
41
  * Load attachments for a batch of message ids, grouped by message id.
5
42
  *
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/engine/attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAY5D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,WAAmB,EACnB,MAAgB;IAEhB,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC;QACN,SAAS,EAAE,kBAAkB,CAAC,SAAS;QACvC,MAAM,EAAE,kBAAkB,CAAC,MAAM;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;SACD,IAAI,CAAC,kBAAkB,CAAC;SACxB,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;SACzD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;SAC7F,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEhF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC;YACR,OAAO,EAAE,GAAG,CAAC,MAAM;YACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,WAAW;YAC7B,UAAU,EAAE,GAAG,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/engine/attachments.ts"],"names":[],"mappings":"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"}
@@ -23,17 +23,54 @@ export interface ListMessageLogsOptions {
23
23
  conversationId?: string;
24
24
  deliveryKind?: 'channel' | 'dm';
25
25
  }
26
+ type MessageLogRow = {
27
+ id: string;
28
+ messageId: string;
29
+ channelId: string;
30
+ channelName: string | null;
31
+ channelType: number | null;
32
+ agentId: string;
33
+ agentName: string | null;
34
+ conversationId: string | null;
35
+ deliveryKind: string;
36
+ body: string;
37
+ contentType: string | null;
38
+ metadata: Record<string, unknown> | null;
39
+ attachmentCount: number;
40
+ mentionCount: number;
41
+ latencyMs: number;
42
+ createdAt: Date;
43
+ };
44
+ declare function publicMessageLog(row: MessageLogRow): {
45
+ id: string;
46
+ message_id: string;
47
+ channel_id: string;
48
+ channel_name: string | null;
49
+ channel_type: number | null;
50
+ agent_id: string;
51
+ agent_name: string | null;
52
+ conversation_id: string | null;
53
+ delivery_kind: string;
54
+ text: string;
55
+ content_type: string | null;
56
+ metadata: Record<string, unknown>;
57
+ attachment_count: number;
58
+ mention_count: number;
59
+ latency_ms: number;
60
+ created_at: string;
61
+ };
62
+ export type ConsoleMessageLog = ReturnType<typeof publicMessageLog>;
26
63
  /**
27
64
  * Build the message-log insert without executing it, so send paths can include
28
65
  * it in an atomic statement list (see {@link runAtomicWrites}).
29
66
  */
30
67
  export declare function buildMessageLogWrite(db: Db, input: LogMessageInput): AtomicWrite;
31
- export declare function logMessage(db: Db, input: LogMessageInput): Promise<void>;
32
68
  export declare function listMessageLogs(db: Db, workspaceId: string, opts?: ListMessageLogsOptions): Promise<{
33
69
  id: string;
34
70
  message_id: string;
35
71
  channel_id: string;
36
72
  channel_name: string | null;
73
+ channel_type: number | null;
37
74
  agent_id: string;
38
75
  agent_name: string | null;
39
76
  conversation_id: string | null;
@@ -46,6 +83,46 @@ export declare function listMessageLogs(db: Db, workspaceId: string, opts?: List
46
83
  latency_ms: number;
47
84
  created_at: string;
48
85
  }[]>;
86
+ export declare function listMessageLogsForWindow(db: Db, workspaceId: string, windowDays?: number): Promise<ConsoleMessageLog[]>;
87
+ export declare function summarizeConsoleOverview(logs: ConsoleMessageLog[], windowDays?: number): {
88
+ window_days: number;
89
+ since: string;
90
+ total_messages: number;
91
+ channel_messages: number;
92
+ dm_messages: number;
93
+ unique_agents: number;
94
+ avg_latency_ms: number;
95
+ max_latency_ms: number;
96
+ attachment_count: number;
97
+ mention_count: number;
98
+ };
99
+ export declare function summarizeAgentStats(logs: ConsoleMessageLog[], limit?: number): {
100
+ agent_id: string;
101
+ agent_name: string | null;
102
+ message_count: number;
103
+ channel_count: number;
104
+ dm_count: number;
105
+ avg_latency_ms: number;
106
+ last_message_at: string | null;
107
+ }[];
108
+ export declare function summarizeCostStats(logs: ConsoleMessageLog[], windowDays?: number): {
109
+ window_days: number;
110
+ totals: {
111
+ total_cost_usd: number;
112
+ prompt_tokens: number;
113
+ completion_tokens: number;
114
+ total_tokens: number;
115
+ };
116
+ agents: {
117
+ agent_id: string;
118
+ agent_name: string | null;
119
+ message_count: number;
120
+ total_cost_usd: number;
121
+ prompt_tokens: number;
122
+ completion_tokens: number;
123
+ total_tokens: number;
124
+ }[];
125
+ };
49
126
  export declare function getConsoleOverview(db: Db, workspaceId: string, windowDays?: number): Promise<{
50
127
  window_days: number;
51
128
  since: string;
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/engine/console.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CACjC;AAUD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,GAAG,WAAW,CAmBhF;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,sBAA2B;;;;;;;;;;;;;;;;KAmDlC;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,UAAU,SAAI;;;;;;;;;;;GA6Bf;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,UAAU,SAAI,EACd,KAAK,SAAK;;;;;;;;KAuCX;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,UAAU,SAAI;;;;;;;;;;;;;;;;;GAyDf"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/engine/console.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,47 @@ function clampLimit(limit) {
7
7
  function getWindowStart(days) {
8
8
  return new Date(Date.now() - days * 24 * 60 * 60 * 1000);
9
9
  }
10
+ function publicMessageLog(row) {
11
+ return {
12
+ id: row.id,
13
+ message_id: row.messageId,
14
+ channel_id: row.channelId,
15
+ channel_name: row.channelName,
16
+ channel_type: row.channelType,
17
+ agent_id: row.agentId,
18
+ agent_name: row.agentName,
19
+ conversation_id: row.conversationId,
20
+ delivery_kind: row.deliveryKind,
21
+ text: row.body,
22
+ content_type: row.contentType,
23
+ metadata: row.metadata ?? {},
24
+ attachment_count: row.attachmentCount,
25
+ mention_count: row.mentionCount,
26
+ latency_ms: row.latencyMs,
27
+ created_at: row.createdAt.toISOString(),
28
+ };
29
+ }
30
+ function costNumber(value) {
31
+ if (typeof value === 'number' && Number.isFinite(value))
32
+ return value;
33
+ if (typeof value === 'string') {
34
+ const parsed = Number(value);
35
+ return Number.isFinite(parsed) ? parsed : 0;
36
+ }
37
+ return 0;
38
+ }
39
+ function nestedRecord(value) {
40
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
41
+ }
42
+ function costMetadata(log) {
43
+ const cost = nestedRecord(nestedRecord(log.metadata)._cost);
44
+ return {
45
+ total_cost_usd: costNumber(cost.total_usd),
46
+ prompt_tokens: costNumber(cost.prompt_tokens),
47
+ completion_tokens: costNumber(cost.completion_tokens),
48
+ total_tokens: costNumber(cost.total_tokens),
49
+ };
50
+ }
10
51
  /**
11
52
  * Build the message-log insert without executing it, so send paths can include
12
53
  * it in an atomic statement list (see {@link runAtomicWrites}).
@@ -31,9 +72,6 @@ export function buildMessageLogWrite(db, input) {
31
72
  })
32
73
  .onConflictDoNothing();
33
74
  }
34
- export async function logMessage(db, input) {
35
- await buildMessageLogWrite(db, input);
36
- }
37
75
  export async function listMessageLogs(db, workspaceId, opts = {}) {
38
76
  const conditions = [eq(messageLogs.workspaceId, workspaceId)];
39
77
  if (opts.before)
@@ -52,6 +90,7 @@ export async function listMessageLogs(db, workspaceId, opts = {}) {
52
90
  messageId: messageLogs.messageId,
53
91
  channelId: messageLogs.channelId,
54
92
  channelName: channels.name,
93
+ channelType: channels.channelType,
55
94
  agentId: messageLogs.agentId,
56
95
  agentName: agents.name,
57
96
  conversationId: messageLogs.conversationId,
@@ -70,24 +109,141 @@ export async function listMessageLogs(db, workspaceId, opts = {}) {
70
109
  .where(and(...conditions))
71
110
  .orderBy(desc(messageLogs.id))
72
111
  .limit(clampLimit(opts.limit));
73
- return rows.map((row) => ({
74
- id: row.id,
75
- message_id: row.messageId,
76
- channel_id: row.channelId,
77
- channel_name: row.channelName,
78
- agent_id: row.agentId,
79
- agent_name: row.agentName,
80
- conversation_id: row.conversationId,
81
- delivery_kind: row.deliveryKind,
82
- text: row.body,
83
- content_type: row.contentType,
84
- metadata: row.metadata ?? {},
85
- attachment_count: row.attachmentCount,
86
- mention_count: row.mentionCount,
87
- latency_ms: row.latencyMs,
88
- created_at: row.createdAt.toISOString(),
112
+ return rows.map(publicMessageLog);
113
+ }
114
+ export async function listMessageLogsForWindow(db, workspaceId, windowDays = 7) {
115
+ const since = getWindowStart(windowDays);
116
+ const rows = await db
117
+ .select({
118
+ id: messageLogs.id,
119
+ messageId: messageLogs.messageId,
120
+ channelId: messageLogs.channelId,
121
+ channelName: channels.name,
122
+ channelType: channels.channelType,
123
+ agentId: messageLogs.agentId,
124
+ agentName: agents.name,
125
+ conversationId: messageLogs.conversationId,
126
+ deliveryKind: messageLogs.deliveryKind,
127
+ body: messageLogs.body,
128
+ contentType: messageLogs.contentType,
129
+ metadata: messageLogs.metadata,
130
+ attachmentCount: messageLogs.attachmentCount,
131
+ mentionCount: messageLogs.mentionCount,
132
+ latencyMs: messageLogs.latencyMs,
133
+ createdAt: messageLogs.createdAt,
134
+ })
135
+ .from(messageLogs)
136
+ .leftJoin(agents, eq(messageLogs.agentId, agents.id))
137
+ .leftJoin(channels, eq(messageLogs.channelId, channels.id))
138
+ .where(and(eq(messageLogs.workspaceId, workspaceId), gte(messageLogs.createdAt, since)))
139
+ .orderBy(desc(messageLogs.id));
140
+ return rows.map(publicMessageLog);
141
+ }
142
+ export function summarizeConsoleOverview(logs, windowDays = 7) {
143
+ const since = getWindowStart(windowDays);
144
+ const latencyTotal = logs.reduce((sum, log) => sum + log.latency_ms, 0);
145
+ return {
146
+ window_days: windowDays,
147
+ since: since.toISOString(),
148
+ total_messages: logs.length,
149
+ channel_messages: logs.filter((log) => log.delivery_kind === 'channel').length,
150
+ dm_messages: logs.filter((log) => log.delivery_kind === 'dm').length,
151
+ unique_agents: new Set(logs.map((log) => log.agent_id)).size,
152
+ avg_latency_ms: logs.length > 0 ? Math.round(latencyTotal / logs.length) : 0,
153
+ max_latency_ms: logs.reduce((max, log) => Math.max(max, log.latency_ms), 0),
154
+ attachment_count: logs.reduce((sum, log) => sum + log.attachment_count, 0),
155
+ mention_count: logs.reduce((sum, log) => sum + log.mention_count, 0),
156
+ };
157
+ }
158
+ export function summarizeAgentStats(logs, limit = 20) {
159
+ const byAgent = new Map();
160
+ for (const log of logs) {
161
+ const existing = byAgent.get(log.agent_id) ?? {
162
+ agent_id: log.agent_id,
163
+ agent_name: log.agent_name,
164
+ message_count: 0,
165
+ channel_count: 0,
166
+ dm_count: 0,
167
+ latency_total: 0,
168
+ last_message_ms: 0,
169
+ };
170
+ existing.message_count += 1;
171
+ existing.channel_count += log.delivery_kind === 'channel' ? 1 : 0;
172
+ existing.dm_count += log.delivery_kind === 'dm' ? 1 : 0;
173
+ existing.latency_total += log.latency_ms;
174
+ existing.last_message_ms = Math.max(existing.last_message_ms, Date.parse(log.created_at) || 0);
175
+ byAgent.set(log.agent_id, existing);
176
+ }
177
+ return [...byAgent.values()]
178
+ .sort((left, right) => (right.message_count - left.message_count
179
+ || right.last_message_ms - left.last_message_ms
180
+ || (left.agent_name ?? '').localeCompare(right.agent_name ?? '')))
181
+ .slice(0, clampLimit(limit))
182
+ .map((row) => ({
183
+ agent_id: row.agent_id,
184
+ agent_name: row.agent_name,
185
+ message_count: row.message_count,
186
+ channel_count: row.channel_count,
187
+ dm_count: row.dm_count,
188
+ avg_latency_ms: row.message_count > 0 ? Math.round(row.latency_total / row.message_count) : 0,
189
+ last_message_at: row.last_message_ms > 0 ? new Date(row.last_message_ms).toISOString() : null,
89
190
  }));
90
191
  }
192
+ export function summarizeCostStats(logs, windowDays = 7) {
193
+ const byAgent = new Map();
194
+ for (const log of logs) {
195
+ const cost = costMetadata(log);
196
+ const existing = byAgent.get(log.agent_id) ?? {
197
+ agent_id: log.agent_id,
198
+ agent_name: log.agent_name,
199
+ message_count: 0,
200
+ total_cost_usd: 0,
201
+ prompt_tokens: 0,
202
+ completion_tokens: 0,
203
+ total_tokens: 0,
204
+ };
205
+ existing.message_count += 1;
206
+ existing.total_cost_usd += cost.total_cost_usd;
207
+ existing.prompt_tokens += cost.prompt_tokens;
208
+ existing.completion_tokens += cost.completion_tokens;
209
+ existing.total_tokens += cost.total_tokens;
210
+ byAgent.set(log.agent_id, existing);
211
+ }
212
+ const agentsWithCosts = [...byAgent.values()]
213
+ .filter((row) => (row.total_cost_usd > 0
214
+ || row.prompt_tokens > 0
215
+ || row.completion_tokens > 0
216
+ || row.total_tokens > 0))
217
+ .sort((left, right) => (right.total_cost_usd - left.total_cost_usd
218
+ || right.total_tokens - left.total_tokens
219
+ || (left.agent_name ?? '').localeCompare(right.agent_name ?? '')))
220
+ .map((row) => ({
221
+ agent_id: row.agent_id,
222
+ agent_name: row.agent_name,
223
+ message_count: row.message_count,
224
+ total_cost_usd: row.total_cost_usd,
225
+ prompt_tokens: row.prompt_tokens,
226
+ completion_tokens: row.completion_tokens,
227
+ total_tokens: row.total_tokens,
228
+ }));
229
+ const totals = agentsWithCosts.reduce((acc, row) => {
230
+ acc.total_cost_usd += row.total_cost_usd;
231
+ acc.prompt_tokens += row.prompt_tokens;
232
+ acc.completion_tokens += row.completion_tokens;
233
+ acc.total_tokens += row.total_tokens;
234
+ return acc;
235
+ }, {
236
+ total_cost_usd: 0,
237
+ prompt_tokens: 0,
238
+ completion_tokens: 0,
239
+ total_tokens: 0,
240
+ });
241
+ return {
242
+ window_days: windowDays,
243
+ totals,
244
+ agents: agentsWithCosts,
245
+ };
246
+ }
91
247
  export async function getConsoleOverview(db, workspaceId, windowDays = 7) {
92
248
  const since = getWindowStart(windowDays);
93
249
  const [row] = await db