@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 7.66 kB
Source Map (JSON)
{"version":3,"file":"stagehand.cjs","names":["Tool","Stagehand","StructuredTool","z","Toolkit"],"sources":["../../../src/agents/toolkits/stagehand.ts"],"sourcesContent":["import {\n Tool,\n BaseToolkit as Toolkit,\n StructuredTool,\n StructuredToolInterface,\n} from \"@langchain/core/tools\";\nimport { Stagehand } from \"@browserbasehq/stagehand\";\nimport { z } from \"zod/v3\";\n\n// Documentation is here:\n// https://js.langchain.com/docs/integrations/tools/stagehand\n\nabstract class StagehandToolBase extends Tool {\n protected stagehand?: Stagehand;\n\n private localStagehand?: Stagehand;\n\n constructor(stagehandInstance?: Stagehand) {\n super();\n this.stagehand = stagehandInstance;\n }\n\n protected async getStagehand(): Promise<Stagehand> {\n if (this.stagehand) return this.stagehand;\n\n if (!this.localStagehand) {\n this.localStagehand = new Stagehand({\n env: \"LOCAL\",\n enableCaching: true,\n });\n await this.localStagehand.init();\n }\n return this.localStagehand;\n }\n}\n\nfunction isErrorWithMessage(error: unknown): error is { message: string } {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message: unknown }).message === \"string\"\n );\n}\n\nexport class StagehandNavigateTool extends StagehandToolBase {\n name = \"stagehand_navigate\";\n\n description =\n \"Use this tool to navigate to a specific URL using Stagehand. The input should be a valid URL as a string.\";\n\n async _call(input: string): Promise<string> {\n const stagehand = await this.getStagehand();\n try {\n await stagehand.page.goto(input);\n return `Successfully navigated to ${input}.`;\n } catch (error: unknown) {\n const message = isErrorWithMessage(error) ? error.message : String(error);\n return `Failed to navigate: ${message}`;\n }\n }\n}\n\nexport class StagehandActTool extends StagehandToolBase {\n name = \"stagehand_act\";\n\n description =\n \"Use this tool to perform an action on the current web page using Stagehand. The input should be a string describing the action to perform.\";\n\n async _call(input: string): Promise<string> {\n const stagehand = await this.getStagehand();\n const result = await stagehand.act({ action: input });\n if (result.success) {\n return `Action performed successfully: ${result.message}`;\n } else {\n return `Failed to perform action: ${result.message}`;\n }\n }\n}\n\nexport class StagehandExtractTool extends StructuredTool {\n name = \"stagehand_extract\";\n\n description =\n \"Use this tool to extract structured information from the current web page using Stagehand. The input should include an 'instruction' string and a 'schema' object representing the extraction schema in JSON Schema format.\";\n\n // Define the input schema for the tool\n schema = z.object({\n instruction: z.string().describe(\"Instruction on what to extract\"),\n schema: z\n .record(z.any())\n .describe(\"Extraction schema in JSON Schema format\"),\n });\n\n private stagehand?: Stagehand;\n\n constructor(stagehandInstance?: Stagehand) {\n super();\n this.stagehand = stagehandInstance;\n }\n\n async _call(input: {\n instruction: string;\n schema: z.AnyZodObject;\n }): Promise<string> {\n const stagehand = await this.getStagehand();\n const { instruction, schema } = input;\n\n try {\n const result = await stagehand.extract({\n instruction,\n schema, // Assuming Stagehand accepts the schema in JSON Schema format\n });\n return JSON.stringify(result);\n } catch (error: unknown) {\n const message = isErrorWithMessage(error) ? error.message : String(error);\n return `Failed to extract information: ${message}`;\n }\n }\n\n protected async getStagehand(): Promise<Stagehand> {\n if (this.stagehand) return this.stagehand;\n\n // Initialize local Stagehand instance if not provided\n this.stagehand = new Stagehand({\n env: \"LOCAL\",\n enableCaching: true,\n });\n await this.stagehand.init();\n return this.stagehand;\n }\n}\n\nexport class StagehandObserveTool extends StagehandToolBase {\n name = \"stagehand_observe\";\n\n description =\n \"Use this tool to observe the current web page and retrieve possible actions using Stagehand. The input can be an optional instruction string.\";\n\n async _call(input: string): Promise<string> {\n const stagehand = await this.getStagehand();\n const instruction = input || undefined;\n\n try {\n const result = await stagehand.observe({ instruction });\n return JSON.stringify(result);\n } catch (error: unknown) {\n const message = isErrorWithMessage(error) ? error.message : String(error);\n return `Failed to observe: ${message}`;\n }\n }\n}\n\nexport class StagehandToolkit extends Toolkit {\n tools: StructuredToolInterface[];\n\n stagehand?: Stagehand;\n\n constructor(stagehand?: Stagehand) {\n super();\n this.stagehand = stagehand;\n this.tools = this.initializeTools();\n }\n\n private initializeTools(): StructuredToolInterface[] {\n return [\n new StagehandNavigateTool(this.stagehand),\n new StagehandActTool(this.stagehand),\n new StagehandExtractTool(this.stagehand),\n new StagehandObserveTool(this.stagehand),\n ];\n }\n\n static async fromStagehand(stagehand: Stagehand): Promise<StagehandToolkit> {\n return new StagehandToolkit(stagehand);\n }\n}\n"],"mappings":"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"}