{"version":3,"sources":["../../src/notifications/tool.ts"],"names":["z","createNotificationSignal","createTool"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { createTool } from '../tools';\nimport type { ToolExecutionContext } from '../tools';\nimport { createNotificationSignal } from './signals';\nimport type { NotificationsStorage } from './storage';\nimport type { ListNotificationsInput, NotificationRecord, NotificationStatus } from './types';\n\nconst notificationActionSchema = z.object({\n  action: z.enum(['list', 'read', 'markSeen', 'dismiss', 'archive', 'search']),\n  threadId: z.string().optional(),\n  id: z.string().optional(),\n  status: z.enum(['pending', 'delivered', 'seen', 'dismissed', 'archived', 'discarded']).optional(),\n  priority: z.enum(['low', 'medium', 'high', 'urgent']).optional(),\n  source: z.string().optional(),\n  query: z.string().optional(),\n  limit: z.number().int().positive().optional(),\n});\n\ntype NotificationInboxAction = z.infer<typeof notificationActionSchema>;\n\ntype NotificationToolAgent = {\n  sendSignal: (\n    signal: ReturnType<typeof createNotificationSignal>,\n    target: { resourceId: string; threadId: string },\n  ) => { signal: ReturnType<typeof createNotificationSignal>; persisted?: Promise<void> };\n};\n\nconst isReadable = (notification: NotificationRecord) =>\n  notification.status === 'pending' || notification.status === 'delivered';\n\nasync function deliverNotifications({\n  notifications,\n  storage,\n  context,\n}: {\n  notifications: NotificationRecord[];\n  storage: NotificationsStorage;\n  context: ToolExecutionContext;\n}) {\n  let delivered = 0;\n  let markedSeen = 0;\n  let unavailable = 0;\n  let alreadyRead = 0;\n\n  for (const notification of notifications) {\n    if (!isReadable(notification)) {\n      alreadyRead += 1;\n      continue;\n    }\n\n    const agentId = notification.agentId ?? context?.agent?.agentId;\n    const resourceId = notification.resourceId ?? context?.agent?.resourceId;\n    const mastra = context?.mastra;\n    const agent =\n      agentId && typeof mastra?.getAgentById === 'function' ? await mastra.getAgentById(agentId) : undefined;\n\n    if (agent && resourceId && !notification.deliveredSignalId) {\n      const signal = createNotificationSignal({ ...notification, status: 'delivered' });\n      const result = (agent as NotificationToolAgent).sendSignal(signal, {\n        resourceId,\n        threadId: notification.threadId,\n      });\n      await result.persisted;\n      await storage.updateNotification({\n        threadId: notification.threadId,\n        id: notification.id,\n        status: 'seen',\n        deliveredSignalId: result.signal.id,\n      });\n      delivered += 1;\n      continue;\n    }\n\n    if (notification.deliveredSignalId) {\n      await storage.updateNotification({ threadId: notification.threadId, id: notification.id, status: 'seen' });\n      markedSeen += 1;\n    } else {\n      unavailable += 1;\n    }\n  }\n\n  const message =\n    delivered > 0\n      ? `${delivered} notification${delivered === 1 ? '' : 's'} will now be delivered.`\n      : 'No unread notifications needed delivery.';\n\n  return { message, delivered, markedSeen, unavailable, alreadyRead };\n}\n\nexport function createNotificationInboxTool({ storage }: { storage: NotificationsStorage }) {\n  return createTool({\n    id: 'notification-inbox',\n    description:\n      'Inspect and manage the current thread notification inbox. Use this to list pending notifications, read full details after a summary, mark notifications seen, dismiss, archive, or search old notifications.',\n    inputSchema: notificationActionSchema,\n    execute: async (input: NotificationInboxAction, context) => {\n      const threadId = input.threadId ?? context?.agent?.threadId;\n      if (!threadId) {\n        throw new Error('notification-inbox requires a threadId');\n      }\n\n      if (input.action === 'list') {\n        const listInput: ListNotificationsInput = {\n          threadId,\n          status: input.status,\n          priority: input.priority,\n          source: input.source,\n          limit: input.limit,\n        };\n        return { notifications: await storage.listNotifications(listInput) };\n      }\n\n      if (input.action === 'search') {\n        if (!input.query) throw new Error('notification-inbox search requires query');\n        return {\n          notifications: await storage.listNotifications({\n            threadId,\n            search: input.query,\n            status: input.status,\n            priority: input.priority,\n            source: input.source,\n            limit: input.limit,\n          }),\n        };\n      }\n\n      if (input.action === 'read') {\n        const notifications = input.id\n          ? [await storage.getNotification({ threadId, id: input.id })]\n          : await storage.listNotifications({\n              threadId,\n              status: input.status ?? ['pending', 'delivered'],\n              priority: input.priority,\n              source: input.source,\n              limit: input.limit,\n            });\n        if (input.id && !notifications[0])\n          throw new Error(`Notification ${input.id} was not found for thread ${threadId}`);\n        return deliverNotifications({\n          notifications: notifications.filter((notification): notification is NotificationRecord =>\n            Boolean(notification),\n          ),\n          storage,\n          context,\n        });\n      }\n\n      if (!input.id) throw new Error(`notification-inbox ${input.action} requires id`);\n      const statusByAction = {\n        markSeen: 'seen',\n        dismiss: 'dismissed',\n        archive: 'archived',\n      } satisfies Record<'markSeen' | 'dismiss' | 'archive', NotificationStatus>;\n\n      return {\n        notification: await storage.updateNotification({\n          threadId,\n          id: input.id,\n          status: statusByAction[input.action],\n        }),\n      };\n    },\n  });\n}\n"]}