import { tool } from '@strands-agents/sdk' import { z } from 'zod' export const notifyTool = tool({ name: 'notify', description: 'Show a browser notification (requests permission if needed)', inputSchema: z.object({ title: z.string(), body: z.string().optional(), icon: z.string().optional(), }), callback: async (input) => { try { if (!('Notification' in window)) return JSON.stringify({ status: 'error', error: 'Notifications unsupported' }) let perm = Notification.permission if (perm !== 'granted') perm = await Notification.requestPermission() if (perm !== 'granted') return JSON.stringify({ status: 'error', error: 'Permission denied' }) new Notification(input.title, { body: input.body, icon: input.icon || '/icon-192.png' }) return JSON.stringify({ status: 'success' }) } catch (err: unknown) { return JSON.stringify({ status: 'error', error: (err as Error).message }) } }, }) export const vibrateTool = tool({ name: 'vibrate', description: 'Vibrate device (mobile). Pattern: array of ms durations (on/off/on/off...)', inputSchema: z.object({ pattern: z.array(z.number()).describe('Vibration pattern in ms') }), callback: (input) => { try { if (!('vibrate' in navigator)) return JSON.stringify({ status: 'error', error: 'Vibration unsupported' }) navigator.vibrate(input.pattern) return JSON.stringify({ status: 'success' }) } catch (err: unknown) { return JSON.stringify({ status: 'error', error: (err as Error).message }) } }, }) export const NOTIFICATION_TOOLS = [notifyTool, vibrateTool]