import { BrowserToolBase } from '../base.js';
import { ToolContext, ToolResponse, ToolMetadata, SessionConfig, createSuccessResponse } from '../../common/types.js';
/**
* Tool for filling form fields
*/
export class FillTool extends BrowserToolBase {
static getMetadata(sessionConfig?: SessionConfig): ToolMetadata {
return {
name: "fill",
description: "fill out an input field",
inputSchema: {
type: "object",
properties: {
selector: { type: "string", description: "CSS selector for input field" },
value: { type: "string", description: "Value to fill" },
},
required: ["selector", "value"],
},
};
}
async execute(args: any, context: ToolContext): Promise<ToolResponse> {
this.recordInteraction();
return this.safeExecute(context, async (page) => {
const normalizedSelector = this.normalizeSelector(args.selector);
// Use standard element selection with error on multiple matches
const locator = page.locator(normalizedSelector);
const { element } = await this.selectPreferredLocator(locator, {
errorOnMultiple: true,
originalSelector: args.selector,
});
await element.fill(args.value);
return createSuccessResponse(`Filled ${args.selector} with: ${args.value}`);
});
}
}