import { z } from 'zod';
import { swipe } from '../executor/wda.js';
import { getOrCreateSession } from '../utils/wda-session.js';
export const wdaSwipeSchema = z.object({
start_x: z.number().min(0).describe('Starting X coordinate (in points)'),
start_y: z.number().min(0).describe('Starting Y coordinate (in points)'),
end_x: z.number().min(0).describe('Ending X coordinate (in points)'),
end_y: z.number().min(0).describe('Ending Y coordinate (in points)'),
duration: z
.number()
.optional()
.describe('Swipe duration in milliseconds (default: 500)'),
bundle_id: z
.string()
.optional()
.describe('Bundle ID of app to activate for this session'),
port: z.number().optional().describe('WDA server port (default: 8100)'),
});
export type WdaSwipeInput = z.infer<typeof wdaSwipeSchema>;
export const wdaSwipeTool = {
name: 'wda_swipe',
description:
'Perform a swipe gesture from start to end coordinates. Useful for scrolling, dismissing, or navigating between screens.',
inputSchema: wdaSwipeSchema,
handler: async (input: WdaSwipeInput) => {
const options = { port: input.port };
const sessionId = await getOrCreateSession(input.bundle_id, options);
const duration = input.duration ?? 500;
await swipe(
sessionId,
input.start_x,
input.start_y,
input.end_x,
input.end_y,
duration,
options
);
return {
content: [
{
type: 'text' as const,
text: `Swiped from (${input.start_x}, ${input.start_y}) to (${input.end_x}, ${input.end_y}) over ${duration}ms`,
},
],
};
},
};