import { z } from 'zod';
import { getStatus } from '../executor/wda.js';
import { WdaConnectionError } from '../types/wda.js';
export const wdaStatusSchema = z.object({
port: z
.number()
.optional()
.describe('WDA server port (default: 8100)'),
});
export type WdaStatusInput = z.infer<typeof wdaStatusSchema>;
export const wdaStatusTool = {
name: 'wda_status',
description:
'Check WebDriverAgent server status and connectivity. Use this to verify WDA is running before other wda_* operations.',
inputSchema: wdaStatusSchema,
handler: async (input: WdaStatusInput) => {
try {
const status = await getStatus({ port: input.port });
const lines = [
'WebDriverAgent Status: Connected',
'',
`State: ${status.state}`,
`Session: ${status.sessionId ?? 'None'}`,
'',
'Device Info:',
` OS: ${status.os.name} ${status.os.version}`,
` SDK: ${status.os.sdkVersion}`,
` Simulator: ${status.ios.simulatorVersion}`,
` IP: ${status.ios.ip}`,
'',
`Build: ${status.build.productBundleIdentifier}`,
`Build Time: ${status.build.time}`,
];
return {
content: [
{
type: 'text' as const,
text: lines.join('\n'),
},
],
};
} catch (error) {
if (error instanceof WdaConnectionError) {
return {
content: [
{
type: 'text' as const,
text: `WebDriverAgent Status: Not Connected\n\n${error.message}`,
},
],
};
}
throw error;
}
},
};