@elizaos/plugin-browser 2.0.0-alpha.6 → 2.0.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/click.d.ts.map +1 -1
- package/dist/actions/click.js +35 -8
- package/dist/actions/click.js.map +1 -1
- package/dist/actions/extract.d.ts.map +1 -1
- package/dist/actions/extract.js +39 -12
- package/dist/actions/extract.js.map +1 -1
- package/dist/actions/navigate.d.ts.map +1 -1
- package/dist/actions/navigate.js +36 -9
- package/dist/actions/navigate.js.map +1 -1
- package/dist/actions/screenshot.d.ts.map +1 -1
- package/dist/actions/screenshot.js +37 -8
- package/dist/actions/screenshot.js.map +1 -1
- package/dist/actions/select.d.ts.map +1 -1
- package/dist/actions/select.js +40 -9
- package/dist/actions/select.js.map +1 -1
- package/dist/actions/type.d.ts.map +1 -1
- package/dist/actions/type.js +40 -9
- package/dist/actions/type.js.map +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/register.d.ts.map +1 -1
- package/dist/cli/register.js +5 -1
- package/dist/cli/register.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -48
- package/dist/index.js.map +1 -1
- package/dist/providerRelevance.d.ts +4 -0
- package/dist/providerRelevance.d.ts.map +1 -0
- package/dist/providerRelevance.js +33 -0
- package/dist/providerRelevance.js.map +1 -0
- package/dist/providers/browser-state.d.ts.map +1 -1
- package/dist/providers/browser-state.js +25 -0
- package/dist/providers/browser-state.js.map +1 -1
- package/dist/services/browser-service.d.ts +2 -0
- package/dist/services/browser-service.d.ts.map +1 -1
- package/dist/services/browser-service.js +39 -6
- package/dist/services/browser-service.js.map +1 -1
- package/dist/services/process-manager.d.ts +10 -1
- package/dist/services/process-manager.d.ts.map +1 -1
- package/dist/services/process-manager.js +143 -59
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/websocket-client.d.ts.map +1 -1
- package/dist/services/websocket-client.js +4 -2
- package/dist/services/websocket-client.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/captcha.d.ts.map +1 -1
- package/dist/utils/captcha.js.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +1 -1
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +2 -1
- package/dist/utils/security.js.map +1 -1
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +2 -1
- package/dist/utils/url.js.map +1 -1
- package/package.json +110 -110
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../src/actions/click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../src/actions/click.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAQN,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,kBAAkB,EAAE,MAkLhC,CAAC"}
|
package/dist/actions/click.js
CHANGED
|
@@ -4,18 +4,45 @@ export const browserClickAction = {
|
|
|
4
4
|
name: "BROWSER_CLICK",
|
|
5
5
|
similes: ["CLICK_ELEMENT", "TAP", "PRESS_BUTTON"],
|
|
6
6
|
description: "Click on an element on the webpage",
|
|
7
|
-
validate: async (runtime, message,
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
validate: async (runtime, message, state, options) => {
|
|
8
|
+
const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
|
|
9
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
10
|
+
const __avKeywords = ["browser", "click"];
|
|
11
|
+
const __avKeywordOk = __avKeywords.length > 0 &&
|
|
12
|
+
__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
|
|
13
|
+
const __avRegex = /\b(?:browser|click)\b/i;
|
|
14
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
15
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? "");
|
|
16
|
+
const __avExpectedSource = "";
|
|
17
|
+
const __avSourceOk = __avExpectedSource
|
|
18
|
+
? __avSource === __avExpectedSource
|
|
19
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
|
|
20
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
21
|
+
const __avInputOk = __avText.trim().length > 0 ||
|
|
22
|
+
Object.keys(__avOptions).length > 0 ||
|
|
23
|
+
Boolean(message?.content && typeof message.content === "object");
|
|
24
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
11
25
|
return false;
|
|
12
26
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
27
|
+
const __avLegacyValidate = async (runtime, message, _state) => {
|
|
28
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
29
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
30
|
+
if (!browserEnabled) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
34
|
+
if (!service) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const text = message.content?.text?.toLowerCase() ?? "";
|
|
38
|
+
return (text.includes("click") || text.includes("tap") || text.includes("press"));
|
|
39
|
+
};
|
|
40
|
+
try {
|
|
41
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
15
44
|
return false;
|
|
16
45
|
}
|
|
17
|
-
const text = message.content?.text?.toLowerCase() ?? "";
|
|
18
|
-
return text.includes("click") || text.includes("tap") || text.includes("press");
|
|
19
46
|
},
|
|
20
47
|
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
21
48
|
const service = runtime.getService(ServiceType.BROWSER);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../src/actions/click.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Action,\n ActionResult,\n Content,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n ActionError,\n handleBrowserError,\n ServiceNotAvailableError,\n SessionError,\n} from \"../utils/errors.js\";\n\nexport const browserClickAction: Action = {\n name: \"BROWSER_CLICK\",\n similes: [\"CLICK_ELEMENT\", \"TAP\", \"PRESS_BUTTON\"],\n description: \"Click on an element on the webpage\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const browserEnabled =\n runtime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n runtime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n if (!browserEnabled) {\n return false;\n }\n\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n return false;\n }\n\n const text = message.content?.text?.toLowerCase() ?? \"\";\n return text.includes(\"click\") || text.includes(\"tap\") || text.includes(\"press\");\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n _responses?: Memory[]\n ): Promise<ActionResult | undefined> => {\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n const error = new ServiceNotAvailableError();\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"click on element\"\n );\n return {\n text: \"Browser service is not available\",\n success: false,\n data: {\n actionName: \"BROWSER_CLICK\",\n error: \"service_not_available\",\n },\n values: {\n success: false,\n errorType: \"service_not_available\",\n },\n };\n }\n\n const session = await service.getOrCreateSession();\n if (!session) {\n const error = new SessionError(\"No active browser session\");\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"click on element\"\n );\n return {\n text: \"No active browser session\",\n success: false,\n data: {\n actionName: \"BROWSER_CLICK\",\n error: \"no_session\",\n },\n values: {\n success: false,\n errorType: \"no_session\",\n },\n };\n }\n\n const text = message.content?.text ?? \"\";\n const match = text.match(/click (?:on |the )?(.+)$/i);\n const description = match ? match[1] : \"element\";\n\n const result = await service.getClient().click(session.id, description);\n if (!result.success) {\n throw new ActionError(\"click\", description, new Error(result.error ?? \"Click failed\"));\n }\n\n const responseContent: Content = {\n text: `I've successfully clicked on \"${description}\"`,\n actions: [\"BROWSER_CLICK\"],\n source: message.content?.source ?? \"action\",\n };\n\n await callback?.(responseContent);\n\n return {\n text: responseContent.text ?? \"\",\n success: true,\n data: {\n actionName: \"BROWSER_CLICK\",\n element: description,\n sessionId: session.id,\n },\n values: {\n success: true,\n element: description,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: { text: \"Click on the search button\" },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I've clicked on the search button.\",\n actions: [\"BROWSER_CLICK\"],\n },\n },\n ],\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"file":"click.js","sourceRoot":"","sources":["../../src/actions/click.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAction,\n\tActionResult,\n\tContent,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n\tActionError,\n\thandleBrowserError,\n\tServiceNotAvailableError,\n\tSessionError,\n} from \"../utils/errors.js\";\n\nexport const browserClickAction: Action = {\n\tname: \"BROWSER_CLICK\",\n\tsimiles: [\"CLICK_ELEMENT\", \"TAP\", \"PRESS_BUTTON\"],\n\tdescription: \"Click on an element on the webpage\",\n\n\tvalidate: async (\n\t\truntime: any,\n\t\tmessage: any,\n\t\tstate?: any,\n\t\toptions?: any,\n\t): Promise<boolean> => {\n\t\tconst __avTextRaw =\n\t\t\ttypeof message?.content?.text === \"string\" ? message.content.text : \"\";\n\t\tconst __avText = __avTextRaw.toLowerCase();\n\t\tconst __avKeywords = [\"browser\", \"click\"];\n\t\tconst __avKeywordOk =\n\t\t\t__avKeywords.length > 0 &&\n\t\t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n\t\tconst __avRegex = /\\b(?:browser|click)\\b/i;\n\t\tconst __avRegexOk = __avRegex.test(__avText);\n\t\tconst __avSource = String(\n\t\t\tmessage?.content?.source ?? message?.source ?? \"\",\n\t\t);\n\t\tconst __avExpectedSource = \"\";\n\t\tconst __avSourceOk = __avExpectedSource\n\t\t\t? __avSource === __avExpectedSource\n\t\t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n\t\tconst __avOptions = options && typeof options === \"object\" ? options : {};\n\t\tconst __avInputOk =\n\t\t\t__avText.trim().length > 0 ||\n\t\t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n\t\t\tBoolean(message?.content && typeof message.content === \"object\");\n\n\t\tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst __avLegacyValidate = async (\n\t\t\truntime: IAgentRuntime,\n\t\t\tmessage: Memory,\n\t\t\t_state?: State,\n\t\t): Promise<boolean> => {\n\t\t\tconst browserEnabled =\n\t\t\t\truntime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n\t\t\t\truntime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n\t\t\tif (!browserEnabled) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\t\tif (!service) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst text = message.content?.text?.toLowerCase() ?? \"\";\n\t\t\treturn (\n\t\t\t\ttext.includes(\"click\") || text.includes(\"tap\") || text.includes(\"press\")\n\t\t\t);\n\t\t};\n\t\ttry {\n\t\t\treturn Boolean(\n\t\t\t\tawait (__avLegacyValidate as any)(runtime, message, state, options),\n\t\t\t);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state?: State,\n\t\t_options?: HandlerOptions,\n\t\tcallback?: HandlerCallback,\n\t\t_responses?: Memory[],\n\t): Promise<ActionResult | undefined> => {\n\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\tif (!service) {\n\t\t\tconst error = new ServiceNotAvailableError();\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"click on element\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"Browser service is not available\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_CLICK\",\n\t\t\t\t\terror: \"service_not_available\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"service_not_available\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst session = await service.getOrCreateSession();\n\t\tif (!session) {\n\t\t\tconst error = new SessionError(\"No active browser session\");\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"click on element\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"No active browser session\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_CLICK\",\n\t\t\t\t\terror: \"no_session\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"no_session\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst text = message.content?.text ?? \"\";\n\t\tconst match = text.match(/click (?:on |the )?(.+)$/i);\n\t\tconst description = match ? match[1] : \"element\";\n\n\t\tconst result = await service.getClient().click(session.id, description);\n\t\tif (!result.success) {\n\t\t\tthrow new ActionError(\n\t\t\t\t\"click\",\n\t\t\t\tdescription,\n\t\t\t\tnew Error(result.error ?? \"Click failed\"),\n\t\t\t);\n\t\t}\n\n\t\tconst responseContent: Content = {\n\t\t\ttext: `I've successfully clicked on \"${description}\"`,\n\t\t\tactions: [\"BROWSER_CLICK\"],\n\t\t\tsource: message.content?.source ?? \"action\",\n\t\t};\n\n\t\tawait callback?.(responseContent);\n\n\t\treturn {\n\t\t\ttext: responseContent.text ?? \"\",\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tactionName: \"BROWSER_CLICK\",\n\t\t\t\telement: description,\n\t\t\t\tsessionId: session.id,\n\t\t\t},\n\t\t\tvalues: {\n\t\t\t\tsuccess: true,\n\t\t\t\telement: description,\n\t\t\t},\n\t\t};\n\t},\n\n\texamples: [\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"{{user}}\",\n\t\t\t\tcontent: { text: \"Click on the search button\" },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"{{agent}}\",\n\t\t\t\tcontent: {\n\t\t\t\t\ttext: \"I've clicked on the search button.\",\n\t\t\t\t\tactions: [\"BROWSER_CLICK\"],\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t],\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/actions/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/actions/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAQN,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,oBAAoB,EAAE,MAmMlC,CAAC"}
|
package/dist/actions/extract.js
CHANGED
|
@@ -4,22 +4,49 @@ export const browserExtractAction = {
|
|
|
4
4
|
name: "BROWSER_EXTRACT",
|
|
5
5
|
similes: ["EXTRACT_DATA", "GET_TEXT", "SCRAPE"],
|
|
6
6
|
description: "Extract data from the webpage",
|
|
7
|
-
validate: async (runtime, message,
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
validate: async (runtime, message, state, options) => {
|
|
8
|
+
const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
|
|
9
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
10
|
+
const __avKeywords = ["browser", "extract"];
|
|
11
|
+
const __avKeywordOk = __avKeywords.length > 0 &&
|
|
12
|
+
__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
|
|
13
|
+
const __avRegex = /\b(?:browser|extract)\b/i;
|
|
14
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
15
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? "");
|
|
16
|
+
const __avExpectedSource = "";
|
|
17
|
+
const __avSourceOk = __avExpectedSource
|
|
18
|
+
? __avSource === __avExpectedSource
|
|
19
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
|
|
20
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
21
|
+
const __avInputOk = __avText.trim().length > 0 ||
|
|
22
|
+
Object.keys(__avOptions).length > 0 ||
|
|
23
|
+
Boolean(message?.content && typeof message.content === "object");
|
|
24
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
11
25
|
return false;
|
|
12
26
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
27
|
+
const __avLegacyValidate = async (runtime, message, _state) => {
|
|
28
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
29
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
30
|
+
if (!browserEnabled) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
34
|
+
if (!service) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const text = message.content?.text?.toLowerCase() ?? "";
|
|
38
|
+
return (text.includes("extract") ||
|
|
39
|
+
text.includes("get") ||
|
|
40
|
+
text.includes("scrape") ||
|
|
41
|
+
text.includes("find") ||
|
|
42
|
+
text.includes("read"));
|
|
43
|
+
};
|
|
44
|
+
try {
|
|
45
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
15
48
|
return false;
|
|
16
49
|
}
|
|
17
|
-
const text = message.content?.text?.toLowerCase() ?? "";
|
|
18
|
-
return (text.includes("extract") ||
|
|
19
|
-
text.includes("get") ||
|
|
20
|
-
text.includes("scrape") ||
|
|
21
|
-
text.includes("find") ||
|
|
22
|
-
text.includes("read"));
|
|
23
50
|
},
|
|
24
51
|
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
25
52
|
const service = runtime.getService(ServiceType.BROWSER);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/actions/extract.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Action,\n ActionResult,\n Content,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n ActionError,\n handleBrowserError,\n ServiceNotAvailableError,\n SessionError,\n} from \"../utils/errors.js\";\n\nexport const browserExtractAction: Action = {\n name: \"BROWSER_EXTRACT\",\n similes: [\"EXTRACT_DATA\", \"GET_TEXT\", \"SCRAPE\"],\n description: \"Extract data from the webpage\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const browserEnabled =\n runtime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n runtime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n if (!browserEnabled) {\n return false;\n }\n\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n return false;\n }\n\n const text = message.content?.text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"extract\") ||\n text.includes(\"get\") ||\n text.includes(\"scrape\") ||\n text.includes(\"find\") ||\n text.includes(\"read\")\n );\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n _responses?: Memory[]\n ): Promise<ActionResult | undefined> => {\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n const error = new ServiceNotAvailableError();\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"extract data\"\n );\n return {\n text: \"Browser service is not available\",\n success: false,\n data: {\n actionName: \"BROWSER_EXTRACT\",\n error: \"service_not_available\",\n },\n values: {\n success: false,\n errorType: \"service_not_available\",\n },\n };\n }\n\n const session = await service.getOrCreateSession();\n if (!session) {\n const error = new SessionError(\"No active browser session\");\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"extract data\"\n );\n return {\n text: \"No active browser session\",\n success: false,\n data: {\n actionName: \"BROWSER_EXTRACT\",\n error: \"no_session\",\n },\n values: {\n success: false,\n errorType: \"no_session\",\n },\n };\n }\n\n const text = message.content?.text ?? \"\";\n const match = text.match(/(?:extract|get|find|scrape|read) (?:the )?(.+?)(?:\\s+from|\\s*$)/i);\n const instruction = match ? match[1] : text;\n\n const result = await service.getClient().extract(session.id, instruction);\n if (!result.success) {\n throw new ActionError(\"extract\", \"page\", new Error(result.error ?? \"Extraction failed\"));\n }\n\n const extractedData = result.data as { data?: string; found?: boolean } | undefined;\n const foundText = extractedData?.data ?? \"No data found\";\n const found = extractedData?.found ?? false;\n\n const responseContent: Content = {\n text: found\n ? `I found the ${instruction}: \"${foundText}\"`\n : `I couldn't find the requested ${instruction} on the page.`,\n actions: [\"BROWSER_EXTRACT\"],\n source: message.content?.source ?? \"action\",\n };\n\n await callback?.(responseContent);\n\n return {\n text: responseContent.text ?? \"\",\n success: true,\n data: {\n actionName: \"BROWSER_EXTRACT\",\n instruction,\n found,\n extractedData: foundText,\n sessionId: session.id,\n },\n values: {\n success: true,\n found,\n data: foundText,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: { text: \"Extract the main heading from the page\" },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: 'I extracted the main heading: \"Welcome to Our Website\"',\n actions: [\"BROWSER_EXTRACT\"],\n },\n },\n ],\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/actions/extract.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAction,\n\tActionResult,\n\tContent,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n\tActionError,\n\thandleBrowserError,\n\tServiceNotAvailableError,\n\tSessionError,\n} from \"../utils/errors.js\";\n\nexport const browserExtractAction: Action = {\n\tname: \"BROWSER_EXTRACT\",\n\tsimiles: [\"EXTRACT_DATA\", \"GET_TEXT\", \"SCRAPE\"],\n\tdescription: \"Extract data from the webpage\",\n\n\tvalidate: async (\n\t\truntime: any,\n\t\tmessage: any,\n\t\tstate?: any,\n\t\toptions?: any,\n\t): Promise<boolean> => {\n\t\tconst __avTextRaw =\n\t\t\ttypeof message?.content?.text === \"string\" ? message.content.text : \"\";\n\t\tconst __avText = __avTextRaw.toLowerCase();\n\t\tconst __avKeywords = [\"browser\", \"extract\"];\n\t\tconst __avKeywordOk =\n\t\t\t__avKeywords.length > 0 &&\n\t\t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n\t\tconst __avRegex = /\\b(?:browser|extract)\\b/i;\n\t\tconst __avRegexOk = __avRegex.test(__avText);\n\t\tconst __avSource = String(\n\t\t\tmessage?.content?.source ?? message?.source ?? \"\",\n\t\t);\n\t\tconst __avExpectedSource = \"\";\n\t\tconst __avSourceOk = __avExpectedSource\n\t\t\t? __avSource === __avExpectedSource\n\t\t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n\t\tconst __avOptions = options && typeof options === \"object\" ? options : {};\n\t\tconst __avInputOk =\n\t\t\t__avText.trim().length > 0 ||\n\t\t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n\t\t\tBoolean(message?.content && typeof message.content === \"object\");\n\n\t\tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst __avLegacyValidate = async (\n\t\t\truntime: IAgentRuntime,\n\t\t\tmessage: Memory,\n\t\t\t_state?: State,\n\t\t): Promise<boolean> => {\n\t\t\tconst browserEnabled =\n\t\t\t\truntime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n\t\t\t\truntime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n\t\t\tif (!browserEnabled) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\t\tif (!service) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst text = message.content?.text?.toLowerCase() ?? \"\";\n\t\t\treturn (\n\t\t\t\ttext.includes(\"extract\") ||\n\t\t\t\ttext.includes(\"get\") ||\n\t\t\t\ttext.includes(\"scrape\") ||\n\t\t\t\ttext.includes(\"find\") ||\n\t\t\t\ttext.includes(\"read\")\n\t\t\t);\n\t\t};\n\t\ttry {\n\t\t\treturn Boolean(\n\t\t\t\tawait (__avLegacyValidate as any)(runtime, message, state, options),\n\t\t\t);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state?: State,\n\t\t_options?: HandlerOptions,\n\t\tcallback?: HandlerCallback,\n\t\t_responses?: Memory[],\n\t): Promise<ActionResult | undefined> => {\n\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\tif (!service) {\n\t\t\tconst error = new ServiceNotAvailableError();\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"extract data\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"Browser service is not available\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_EXTRACT\",\n\t\t\t\t\terror: \"service_not_available\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"service_not_available\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst session = await service.getOrCreateSession();\n\t\tif (!session) {\n\t\t\tconst error = new SessionError(\"No active browser session\");\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"extract data\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"No active browser session\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_EXTRACT\",\n\t\t\t\t\terror: \"no_session\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"no_session\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst text = message.content?.text ?? \"\";\n\t\tconst match = text.match(\n\t\t\t/(?:extract|get|find|scrape|read) (?:the )?(.+?)(?:\\s+from|\\s*$)/i,\n\t\t);\n\t\tconst instruction = match ? match[1] : text;\n\n\t\tconst result = await service.getClient().extract(session.id, instruction);\n\t\tif (!result.success) {\n\t\t\tthrow new ActionError(\n\t\t\t\t\"extract\",\n\t\t\t\t\"page\",\n\t\t\t\tnew Error(result.error ?? \"Extraction failed\"),\n\t\t\t);\n\t\t}\n\n\t\tconst extractedData = result.data as\n\t\t\t| { data?: string; found?: boolean }\n\t\t\t| undefined;\n\t\tconst foundText = extractedData?.data ?? \"No data found\";\n\t\tconst found = extractedData?.found ?? false;\n\n\t\tconst responseContent: Content = {\n\t\t\ttext: found\n\t\t\t\t? `I found the ${instruction}: \"${foundText}\"`\n\t\t\t\t: `I couldn't find the requested ${instruction} on the page.`,\n\t\t\tactions: [\"BROWSER_EXTRACT\"],\n\t\t\tsource: message.content?.source ?? \"action\",\n\t\t};\n\n\t\tawait callback?.(responseContent);\n\n\t\treturn {\n\t\t\ttext: responseContent.text ?? \"\",\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tactionName: \"BROWSER_EXTRACT\",\n\t\t\t\tinstruction,\n\t\t\t\tfound,\n\t\t\t\textractedData: foundText,\n\t\t\t\tsessionId: session.id,\n\t\t\t},\n\t\t\tvalues: {\n\t\t\t\tsuccess: true,\n\t\t\t\tfound,\n\t\t\t\tdata: foundText,\n\t\t\t},\n\t\t};\n\t},\n\n\texamples: [\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"{{user}}\",\n\t\t\t\tcontent: { text: \"Extract the main heading from the page\" },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"{{agent}}\",\n\t\t\t\tcontent: {\n\t\t\t\t\ttext: 'I extracted the main heading: \"Welcome to Our Website\"',\n\t\t\t\t\tactions: [\"BROWSER_EXTRACT\"],\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t],\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/actions/navigate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/actions/navigate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAQN,MAAM,eAAe,CAAC;AAgBvB,eAAO,MAAM,qBAAqB,EAAE,MAkNnC,CAAC"}
|
package/dist/actions/navigate.js
CHANGED
|
@@ -1,24 +1,51 @@
|
|
|
1
1
|
import { ServiceType } from "@elizaos/core";
|
|
2
2
|
import { handleBrowserError, NoUrlFoundError, SecurityError, ServiceNotAvailableError, } from "../utils/errors.js";
|
|
3
3
|
import { DEFAULT_RETRY_CONFIGS, retryWithBackoff } from "../utils/retry.js";
|
|
4
|
-
import { defaultUrlValidator, validateSecureAction } from "../utils/security.js";
|
|
4
|
+
import { defaultUrlValidator, validateSecureAction, } from "../utils/security.js";
|
|
5
5
|
import { extractUrl } from "../utils/url.js";
|
|
6
6
|
export const browserNavigateAction = {
|
|
7
7
|
name: "BROWSER_NAVIGATE",
|
|
8
8
|
similes: ["GO_TO_URL", "OPEN_WEBSITE", "VISIT_PAGE", "NAVIGATE_TO"],
|
|
9
9
|
description: "Navigate the browser to a specified URL",
|
|
10
|
-
validate: async (runtime, message,
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
validate: async (runtime, message, state, options) => {
|
|
11
|
+
const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
|
|
12
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
13
|
+
const __avKeywords = ["browser", "navigate"];
|
|
14
|
+
const __avKeywordOk = __avKeywords.length > 0 &&
|
|
15
|
+
__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
|
|
16
|
+
const __avRegex = /\b(?:browser|navigate)\b/i;
|
|
17
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
18
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? "");
|
|
19
|
+
const __avExpectedSource = "";
|
|
20
|
+
const __avSourceOk = __avExpectedSource
|
|
21
|
+
? __avSource === __avExpectedSource
|
|
22
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
|
|
23
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
24
|
+
const __avInputOk = __avText.trim().length > 0 ||
|
|
25
|
+
Object.keys(__avOptions).length > 0 ||
|
|
26
|
+
Boolean(message?.content && typeof message.content === "object");
|
|
27
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
14
28
|
return false;
|
|
15
29
|
}
|
|
16
|
-
const
|
|
17
|
-
|
|
30
|
+
const __avLegacyValidate = async (runtime, message, _state) => {
|
|
31
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
32
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
33
|
+
if (!browserEnabled) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
37
|
+
if (!service) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const url = extractUrl(message.content.text ?? "");
|
|
41
|
+
return url !== null;
|
|
42
|
+
};
|
|
43
|
+
try {
|
|
44
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
18
47
|
return false;
|
|
19
48
|
}
|
|
20
|
-
const url = extractUrl(message.content.text ?? "");
|
|
21
|
-
return url !== null;
|
|
22
49
|
},
|
|
23
50
|
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
24
51
|
const service = runtime.getService(ServiceType.BROWSER);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/actions/navigate.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Action,\n ActionResult,\n Content,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n handleBrowserError,\n NoUrlFoundError,\n SecurityError,\n ServiceNotAvailableError,\n} from \"../utils/errors.js\";\nimport { DEFAULT_RETRY_CONFIGS, retryWithBackoff } from \"../utils/retry.js\";\nimport { defaultUrlValidator, validateSecureAction } from \"../utils/security.js\";\nimport { extractUrl } from \"../utils/url.js\";\n\nexport const browserNavigateAction: Action = {\n name: \"BROWSER_NAVIGATE\",\n similes: [\"GO_TO_URL\", \"OPEN_WEBSITE\", \"VISIT_PAGE\", \"NAVIGATE_TO\"],\n description: \"Navigate the browser to a specified URL\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const browserEnabled =\n runtime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n runtime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n if (!browserEnabled) {\n return false;\n }\n\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n return false;\n }\n\n const url = extractUrl(message.content.text ?? \"\");\n return url !== null;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n _responses?: Memory[]\n ): Promise<ActionResult | undefined> => {\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n const error = new ServiceNotAvailableError();\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"navigate to the requested page\"\n );\n return {\n text: \"Browser service is not available\",\n success: false,\n data: {\n actionName: \"BROWSER_NAVIGATE\",\n error: \"service_not_available\",\n },\n values: {\n success: false,\n errorType: \"service_not_available\",\n },\n };\n }\n\n const url = extractUrl(message.content.text ?? \"\");\n if (!url) {\n const error = new NoUrlFoundError();\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"navigate to a page\"\n );\n return {\n text: \"I couldn't find a URL in your request. Please provide a valid URL to navigate to.\",\n success: false,\n data: {\n actionName: \"BROWSER_NAVIGATE\",\n error: \"no_url_found\",\n },\n values: {\n success: false,\n errorType: \"no_url_found\",\n },\n };\n }\n\n try {\n validateSecureAction(url, defaultUrlValidator);\n } catch (error) {\n if (error instanceof SecurityError) {\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>\n );\n return {\n text: \"Security error: Cannot navigate to restricted URL\",\n success: false,\n data: {\n actionName: \"BROWSER_NAVIGATE\",\n error: \"security_error\",\n url,\n },\n values: {\n success: false,\n errorType: \"security_error\",\n },\n };\n }\n throw error;\n }\n\n let session = await service.getCurrentSession();\n if (!session) {\n const sessionId = `session-${Date.now()}`;\n session = await service.createSession(sessionId);\n }\n\n const result = await retryWithBackoff(\n async () => {\n const client = service.getClient();\n return await client.navigate(session?.id, url);\n },\n DEFAULT_RETRY_CONFIGS.navigation,\n `navigate to ${url}`\n );\n\n const responseContent: Content = {\n text: `I've navigated to ${url}. The page title is: \"${result.title}\"`,\n actions: [\"BROWSER_NAVIGATE\"],\n source: message.content.source,\n };\n\n await callback?.(responseContent);\n\n return {\n text: responseContent.text ?? \"\",\n success: true,\n data: {\n actionName: \"BROWSER_NAVIGATE\",\n url: result.url,\n title: result.title,\n sessionId: session.id,\n },\n values: {\n success: true,\n url: result.url,\n pageTitle: result.title,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: {\n text: \"Go to google.com\",\n },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: 'I\\'ve navigated to https://google.com. The page title is: \"Google\"',\n actions: [\"BROWSER_NAVIGATE\"],\n },\n },\n ],\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/actions/navigate.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAction,\n\tActionResult,\n\tContent,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n\thandleBrowserError,\n\tNoUrlFoundError,\n\tSecurityError,\n\tServiceNotAvailableError,\n} from \"../utils/errors.js\";\nimport { DEFAULT_RETRY_CONFIGS, retryWithBackoff } from \"../utils/retry.js\";\nimport {\n\tdefaultUrlValidator,\n\tvalidateSecureAction,\n} from \"../utils/security.js\";\nimport { extractUrl } from \"../utils/url.js\";\n\nexport const browserNavigateAction: Action = {\n\tname: \"BROWSER_NAVIGATE\",\n\tsimiles: [\"GO_TO_URL\", \"OPEN_WEBSITE\", \"VISIT_PAGE\", \"NAVIGATE_TO\"],\n\tdescription: \"Navigate the browser to a specified URL\",\n\n\tvalidate: async (\n\t\truntime: any,\n\t\tmessage: any,\n\t\tstate?: any,\n\t\toptions?: any,\n\t): Promise<boolean> => {\n\t\tconst __avTextRaw =\n\t\t\ttypeof message?.content?.text === \"string\" ? message.content.text : \"\";\n\t\tconst __avText = __avTextRaw.toLowerCase();\n\t\tconst __avKeywords = [\"browser\", \"navigate\"];\n\t\tconst __avKeywordOk =\n\t\t\t__avKeywords.length > 0 &&\n\t\t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n\t\tconst __avRegex = /\\b(?:browser|navigate)\\b/i;\n\t\tconst __avRegexOk = __avRegex.test(__avText);\n\t\tconst __avSource = String(\n\t\t\tmessage?.content?.source ?? message?.source ?? \"\",\n\t\t);\n\t\tconst __avExpectedSource = \"\";\n\t\tconst __avSourceOk = __avExpectedSource\n\t\t\t? __avSource === __avExpectedSource\n\t\t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n\t\tconst __avOptions = options && typeof options === \"object\" ? options : {};\n\t\tconst __avInputOk =\n\t\t\t__avText.trim().length > 0 ||\n\t\t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n\t\t\tBoolean(message?.content && typeof message.content === \"object\");\n\n\t\tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst __avLegacyValidate = async (\n\t\t\truntime: IAgentRuntime,\n\t\t\tmessage: Memory,\n\t\t\t_state?: State,\n\t\t): Promise<boolean> => {\n\t\t\tconst browserEnabled =\n\t\t\t\truntime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n\t\t\t\truntime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n\t\t\tif (!browserEnabled) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\t\tif (!service) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst url = extractUrl(message.content.text ?? \"\");\n\t\t\treturn url !== null;\n\t\t};\n\t\ttry {\n\t\t\treturn Boolean(\n\t\t\t\tawait (__avLegacyValidate as any)(runtime, message, state, options),\n\t\t\t);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state?: State,\n\t\t_options?: HandlerOptions,\n\t\tcallback?: HandlerCallback,\n\t\t_responses?: Memory[],\n\t): Promise<ActionResult | undefined> => {\n\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\tif (!service) {\n\t\t\tconst error = new ServiceNotAvailableError();\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"navigate to the requested page\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"Browser service is not available\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_NAVIGATE\",\n\t\t\t\t\terror: \"service_not_available\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"service_not_available\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst url = extractUrl(message.content.text ?? \"\");\n\t\tif (!url) {\n\t\t\tconst error = new NoUrlFoundError();\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"navigate to a page\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"I couldn't find a URL in your request. Please provide a valid URL to navigate to.\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_NAVIGATE\",\n\t\t\t\t\terror: \"no_url_found\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"no_url_found\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tvalidateSecureAction(url, defaultUrlValidator);\n\t\t} catch (error) {\n\t\t\tif (error instanceof SecurityError) {\n\t\t\t\thandleBrowserError(\n\t\t\t\t\terror,\n\t\t\t\t\tcallback as (content: {\n\t\t\t\t\t\ttext: string;\n\t\t\t\t\t\terror?: boolean;\n\t\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\ttext: \"Security error: Cannot navigate to restricted URL\",\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tactionName: \"BROWSER_NAVIGATE\",\n\t\t\t\t\t\terror: \"security_error\",\n\t\t\t\t\t\turl,\n\t\t\t\t\t},\n\t\t\t\t\tvalues: {\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terrorType: \"security_error\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tlet session = await service.getCurrentSession();\n\t\tif (!session) {\n\t\t\tconst sessionId = `session-${Date.now()}`;\n\t\t\tsession = await service.createSession(sessionId);\n\t\t}\n\n\t\tconst result = await retryWithBackoff(\n\t\t\tasync () => {\n\t\t\t\tconst client = service.getClient();\n\t\t\t\treturn await client.navigate(session?.id, url);\n\t\t\t},\n\t\t\tDEFAULT_RETRY_CONFIGS.navigation,\n\t\t\t`navigate to ${url}`,\n\t\t);\n\n\t\tconst responseContent: Content = {\n\t\t\ttext: `I've navigated to ${url}. The page title is: \"${result.title}\"`,\n\t\t\tactions: [\"BROWSER_NAVIGATE\"],\n\t\t\tsource: message.content.source,\n\t\t};\n\n\t\tawait callback?.(responseContent);\n\n\t\treturn {\n\t\t\ttext: responseContent.text ?? \"\",\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tactionName: \"BROWSER_NAVIGATE\",\n\t\t\t\turl: result.url,\n\t\t\t\ttitle: result.title,\n\t\t\t\tsessionId: session.id,\n\t\t\t},\n\t\t\tvalues: {\n\t\t\t\tsuccess: true,\n\t\t\t\turl: result.url,\n\t\t\t\tpageTitle: result.title,\n\t\t\t},\n\t\t};\n\t},\n\n\texamples: [\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"{{user}}\",\n\t\t\t\tcontent: {\n\t\t\t\t\ttext: \"Go to google.com\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"{{agent}}\",\n\t\t\t\tcontent: {\n\t\t\t\t\ttext: 'I\\'ve navigated to https://google.com. The page title is: \"Google\"',\n\t\t\t\t\tactions: [\"BROWSER_NAVIGATE\"],\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t],\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/actions/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/actions/screenshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAQN,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,uBAAuB,EAAE,MAqMrC,CAAC"}
|
|
@@ -4,18 +4,47 @@ export const browserScreenshotAction = {
|
|
|
4
4
|
name: "BROWSER_SCREENSHOT",
|
|
5
5
|
similes: ["TAKE_SCREENSHOT", "CAPTURE_PAGE", "SCREENSHOT"],
|
|
6
6
|
description: "Take a screenshot of the current page",
|
|
7
|
-
validate: async (runtime, message,
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
validate: async (runtime, message, state, options) => {
|
|
8
|
+
const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
|
|
9
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
10
|
+
const __avKeywords = ["browser", "screenshot"];
|
|
11
|
+
const __avKeywordOk = __avKeywords.length > 0 &&
|
|
12
|
+
__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
|
|
13
|
+
const __avRegex = /\b(?:browser|screenshot)\b/i;
|
|
14
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
15
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? "");
|
|
16
|
+
const __avExpectedSource = "";
|
|
17
|
+
const __avSourceOk = __avExpectedSource
|
|
18
|
+
? __avSource === __avExpectedSource
|
|
19
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
|
|
20
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
21
|
+
const __avInputOk = __avText.trim().length > 0 ||
|
|
22
|
+
Object.keys(__avOptions).length > 0 ||
|
|
23
|
+
Boolean(message?.content && typeof message.content === "object");
|
|
24
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
11
25
|
return false;
|
|
12
26
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
27
|
+
const __avLegacyValidate = async (runtime, message, _state) => {
|
|
28
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
29
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
30
|
+
if (!browserEnabled) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
34
|
+
if (!service) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const text = message.content?.text?.toLowerCase() ?? "";
|
|
38
|
+
return (text.includes("screenshot") ||
|
|
39
|
+
text.includes("capture") ||
|
|
40
|
+
text.includes("snap"));
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
15
46
|
return false;
|
|
16
47
|
}
|
|
17
|
-
const text = message.content?.text?.toLowerCase() ?? "";
|
|
18
|
-
return text.includes("screenshot") || text.includes("capture") || text.includes("snap");
|
|
19
48
|
},
|
|
20
49
|
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
21
50
|
const service = runtime.getService(ServiceType.BROWSER);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/actions/screenshot.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,uBAAuB,GAAW;IAC7C,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,CAAC,iBAAiB,EAAE,cAAc,EAAE,YAAY,CAAC;IAC1D,WAAW,EAAE,uCAAuC;IAEpD,QAAQ,EAAE,KAAK,EAAE,OAAsB,EAAE,OAAe,EAAE,MAAc,EAAoB,EAAE;QAC5F,MAAM,cAAc,GAClB,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,MAAM;YAC/C,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC;QAEnD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAiB,WAAW,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,EAAE,KAAK,EACZ,OAAsB,EACtB,OAAe,EACf,MAAc,EACd,QAAyB,EACzB,QAA0B,EAC1B,UAAqB,EACc,EAAE;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAiB,WAAW,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAC7C,kBAAkB,CAChB,KAAK,EACL,QAA4E,EAC5E,iBAAiB,CAClB,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,kCAAkC;gBACxC,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE;oBACJ,UAAU,EAAE,oBAAoB;oBAChC,KAAK,EAAE,uBAAuB;iBAC/B;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,uBAAuB;iBACnC;aACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC;YAC5D,kBAAkB,CAChB,KAAK,EACL,QAA4E,EAC5E,iBAAiB,CAClB,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE;oBACJ,UAAU,EAAE,oBAAoB;oBAChC,KAAK,EAAE,YAAY;iBACpB;gBACD,MAAM,EAAE;oBACN,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,YAAY;iBACxB;aACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,IAOjB,CAAC;QAEd,MAAM,GAAG,GAAG,cAAc,EAAE,GAAG,IAAI,SAAS,CAAC;QAC7C,MAAM,KAAK,GAAG,cAAc,EAAE,KAAK,IAAI,UAAU,CAAC;QAElD,MAAM,eAAe,GAAY;YAC/B,IAAI,EAAE,wCAAwC,KAAK,QAAQ,GAAG,EAAE;YAChE,OAAO,EAAE,CAAC,oBAAoB,CAAC;YAC/B,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,QAAQ;YAC3C,IAAI,EAAE;gBACJ,UAAU,EAAE,cAAc,EAAE,UAAU,IAAI,EAAE;gBAC5C,QAAQ,EAAE,cAAc,EAAE,QAAQ,IAAI,WAAW;gBACjD,GAAG;gBACH,KAAK;aACN;SACF,CAAC;QAEF,MAAM,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC;QAElC,OAAO;YACL,IAAI,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE;YAChC,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,UAAU,EAAE,oBAAoB;gBAChC,GAAG;gBACH,KAAK;gBACL,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,UAAU,EAAE,cAAc,EAAE,UAAU,IAAI,EAAE;aAC7C;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,GAAG;gBACH,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,QAAQ,EAAE;QACR;YACE;gBACE,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE;aACnD;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE;oBACP,IAAI,EAAE,sCAAsC;oBAC5C,OAAO,EAAE,CAAC,oBAAoB,CAAC;iBAChC;aACF;SACF;KACF;CACF,CAAC","sourcesContent":["import type {\n Action,\n ActionResult,\n Content,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n ActionError,\n handleBrowserError,\n ServiceNotAvailableError,\n SessionError,\n} from \"../utils/errors.js\";\n\nexport const browserScreenshotAction: Action = {\n name: \"BROWSER_SCREENSHOT\",\n similes: [\"TAKE_SCREENSHOT\", \"CAPTURE_PAGE\", \"SCREENSHOT\"],\n description: \"Take a screenshot of the current page\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const browserEnabled =\n runtime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n runtime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n if (!browserEnabled) {\n return false;\n }\n\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n return false;\n }\n\n const text = message.content?.text?.toLowerCase() ?? \"\";\n return text.includes(\"screenshot\") || text.includes(\"capture\") || text.includes(\"snap\");\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n _responses?: Memory[]\n ): Promise<ActionResult | undefined> => {\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n const error = new ServiceNotAvailableError();\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"take screenshot\"\n );\n return {\n text: \"Browser service is not available\",\n success: false,\n data: {\n actionName: \"BROWSER_SCREENSHOT\",\n error: \"service_not_available\",\n },\n values: {\n success: false,\n errorType: \"service_not_available\",\n },\n };\n }\n\n const session = await service.getOrCreateSession();\n if (!session) {\n const error = new SessionError(\"No active browser session\");\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"take screenshot\"\n );\n return {\n text: \"No active browser session\",\n success: false,\n data: {\n actionName: \"BROWSER_SCREENSHOT\",\n error: \"no_session\",\n },\n values: {\n success: false,\n errorType: \"no_session\",\n },\n };\n }\n\n const result = await service.getClient().screenshot(session.id);\n if (!result.success) {\n throw new ActionError(\"screenshot\", \"page\", new Error(result.error ?? \"Screenshot failed\"));\n }\n\n const screenshotData = result.data as\n | {\n screenshot?: string;\n mimeType?: string;\n url?: string;\n title?: string;\n }\n | undefined;\n\n const url = screenshotData?.url ?? \"unknown\";\n const title = screenshotData?.title ?? \"Untitled\";\n\n const responseContent: Content = {\n text: `I've taken a screenshot of the page \"${title}\" at ${url}`,\n actions: [\"BROWSER_SCREENSHOT\"],\n source: message.content?.source ?? \"action\",\n data: {\n screenshot: screenshotData?.screenshot ?? \"\",\n mimeType: screenshotData?.mimeType ?? \"image/png\",\n url,\n title,\n },\n };\n\n await callback?.(responseContent);\n\n return {\n text: responseContent.text ?? \"\",\n success: true,\n data: {\n actionName: \"BROWSER_SCREENSHOT\",\n url,\n title,\n sessionId: session.id,\n screenshot: screenshotData?.screenshot ?? \"\",\n },\n values: {\n success: true,\n url,\n title,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: { text: \"Take a screenshot of the page\" },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: \"I've taken a screenshot of the page.\",\n actions: [\"BROWSER_SCREENSHOT\"],\n },\n },\n ],\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/actions/screenshot.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAction,\n\tActionResult,\n\tContent,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n\tActionError,\n\thandleBrowserError,\n\tServiceNotAvailableError,\n\tSessionError,\n} from \"../utils/errors.js\";\n\nexport const browserScreenshotAction: Action = {\n\tname: \"BROWSER_SCREENSHOT\",\n\tsimiles: [\"TAKE_SCREENSHOT\", \"CAPTURE_PAGE\", \"SCREENSHOT\"],\n\tdescription: \"Take a screenshot of the current page\",\n\n\tvalidate: async (\n\t\truntime: any,\n\t\tmessage: any,\n\t\tstate?: any,\n\t\toptions?: any,\n\t): Promise<boolean> => {\n\t\tconst __avTextRaw =\n\t\t\ttypeof message?.content?.text === \"string\" ? message.content.text : \"\";\n\t\tconst __avText = __avTextRaw.toLowerCase();\n\t\tconst __avKeywords = [\"browser\", \"screenshot\"];\n\t\tconst __avKeywordOk =\n\t\t\t__avKeywords.length > 0 &&\n\t\t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n\t\tconst __avRegex = /\\b(?:browser|screenshot)\\b/i;\n\t\tconst __avRegexOk = __avRegex.test(__avText);\n\t\tconst __avSource = String(\n\t\t\tmessage?.content?.source ?? message?.source ?? \"\",\n\t\t);\n\t\tconst __avExpectedSource = \"\";\n\t\tconst __avSourceOk = __avExpectedSource\n\t\t\t? __avSource === __avExpectedSource\n\t\t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n\t\tconst __avOptions = options && typeof options === \"object\" ? options : {};\n\t\tconst __avInputOk =\n\t\t\t__avText.trim().length > 0 ||\n\t\t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n\t\t\tBoolean(message?.content && typeof message.content === \"object\");\n\n\t\tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst __avLegacyValidate = async (\n\t\t\truntime: IAgentRuntime,\n\t\t\tmessage: Memory,\n\t\t\t_state?: State,\n\t\t): Promise<boolean> => {\n\t\t\tconst browserEnabled =\n\t\t\t\truntime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n\t\t\t\truntime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n\t\t\tif (!browserEnabled) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\t\tif (!service) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst text = message.content?.text?.toLowerCase() ?? \"\";\n\t\t\treturn (\n\t\t\t\ttext.includes(\"screenshot\") ||\n\t\t\t\ttext.includes(\"capture\") ||\n\t\t\t\ttext.includes(\"snap\")\n\t\t\t);\n\t\t};\n\t\ttry {\n\t\t\treturn Boolean(\n\t\t\t\tawait (__avLegacyValidate as any)(runtime, message, state, options),\n\t\t\t);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state?: State,\n\t\t_options?: HandlerOptions,\n\t\tcallback?: HandlerCallback,\n\t\t_responses?: Memory[],\n\t): Promise<ActionResult | undefined> => {\n\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\tif (!service) {\n\t\t\tconst error = new ServiceNotAvailableError();\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"take screenshot\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"Browser service is not available\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_SCREENSHOT\",\n\t\t\t\t\terror: \"service_not_available\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"service_not_available\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst session = await service.getOrCreateSession();\n\t\tif (!session) {\n\t\t\tconst error = new SessionError(\"No active browser session\");\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"take screenshot\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"No active browser session\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_SCREENSHOT\",\n\t\t\t\t\terror: \"no_session\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"no_session\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst result = await service.getClient().screenshot(session.id);\n\t\tif (!result.success) {\n\t\t\tthrow new ActionError(\n\t\t\t\t\"screenshot\",\n\t\t\t\t\"page\",\n\t\t\t\tnew Error(result.error ?? \"Screenshot failed\"),\n\t\t\t);\n\t\t}\n\n\t\tconst screenshotData = result.data as\n\t\t\t| {\n\t\t\t\t\tscreenshot?: string;\n\t\t\t\t\tmimeType?: string;\n\t\t\t\t\turl?: string;\n\t\t\t\t\ttitle?: string;\n\t\t\t }\n\t\t\t| undefined;\n\n\t\tconst url = screenshotData?.url ?? \"unknown\";\n\t\tconst title = screenshotData?.title ?? \"Untitled\";\n\n\t\tconst responseContent: Content = {\n\t\t\ttext: `I've taken a screenshot of the page \"${title}\" at ${url}`,\n\t\t\tactions: [\"BROWSER_SCREENSHOT\"],\n\t\t\tsource: message.content?.source ?? \"action\",\n\t\t\tdata: {\n\t\t\t\tscreenshot: screenshotData?.screenshot ?? \"\",\n\t\t\t\tmimeType: screenshotData?.mimeType ?? \"image/png\",\n\t\t\t\turl,\n\t\t\t\ttitle,\n\t\t\t},\n\t\t};\n\n\t\tawait callback?.(responseContent);\n\n\t\treturn {\n\t\t\ttext: responseContent.text ?? \"\",\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tactionName: \"BROWSER_SCREENSHOT\",\n\t\t\t\turl,\n\t\t\t\ttitle,\n\t\t\t\tsessionId: session.id,\n\t\t\t\tscreenshot: screenshotData?.screenshot ?? \"\",\n\t\t\t},\n\t\t\tvalues: {\n\t\t\t\tsuccess: true,\n\t\t\t\turl,\n\t\t\t\ttitle,\n\t\t\t},\n\t\t};\n\t},\n\n\texamples: [\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"{{user}}\",\n\t\t\t\tcontent: { text: \"Take a screenshot of the page\" },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"{{agent}}\",\n\t\t\t\tcontent: {\n\t\t\t\t\ttext: \"I've taken a screenshot of the page.\",\n\t\t\t\t\tactions: [\"BROWSER_SCREENSHOT\"],\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t],\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/actions/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/actions/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAQN,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,mBAAmB,EAAE,MAmMjC,CAAC"}
|
package/dist/actions/select.js
CHANGED
|
@@ -4,18 +4,47 @@ export const browserSelectAction = {
|
|
|
4
4
|
name: "BROWSER_SELECT",
|
|
5
5
|
similes: ["SELECT_OPTION", "CHOOSE", "PICK"],
|
|
6
6
|
description: "Select an option from a dropdown on the webpage",
|
|
7
|
-
validate: async (runtime, message,
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
validate: async (runtime, message, state, options) => {
|
|
8
|
+
const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
|
|
9
|
+
const __avText = __avTextRaw.toLowerCase();
|
|
10
|
+
const __avKeywords = ["browser", "select"];
|
|
11
|
+
const __avKeywordOk = __avKeywords.length > 0 &&
|
|
12
|
+
__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
|
|
13
|
+
const __avRegex = /\b(?:browser|select)\b/i;
|
|
14
|
+
const __avRegexOk = __avRegex.test(__avText);
|
|
15
|
+
const __avSource = String(message?.content?.source ?? message?.source ?? "");
|
|
16
|
+
const __avExpectedSource = "";
|
|
17
|
+
const __avSourceOk = __avExpectedSource
|
|
18
|
+
? __avSource === __avExpectedSource
|
|
19
|
+
: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
|
|
20
|
+
const __avOptions = options && typeof options === "object" ? options : {};
|
|
21
|
+
const __avInputOk = __avText.trim().length > 0 ||
|
|
22
|
+
Object.keys(__avOptions).length > 0 ||
|
|
23
|
+
Boolean(message?.content && typeof message.content === "object");
|
|
24
|
+
if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
|
|
11
25
|
return false;
|
|
12
26
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
27
|
+
const __avLegacyValidate = async (runtime, message, _state) => {
|
|
28
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
29
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
30
|
+
if (!browserEnabled) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
34
|
+
if (!service) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const text = message.content?.text?.toLowerCase() ?? "";
|
|
38
|
+
return (text.includes("select") ||
|
|
39
|
+
text.includes("choose") ||
|
|
40
|
+
text.includes("pick"));
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
return Boolean(await __avLegacyValidate(runtime, message, state, options));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
15
46
|
return false;
|
|
16
47
|
}
|
|
17
|
-
const text = message.content?.text?.toLowerCase() ?? "";
|
|
18
|
-
return text.includes("select") || text.includes("choose") || text.includes("pick");
|
|
19
48
|
},
|
|
20
49
|
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
21
50
|
const service = runtime.getService(ServiceType.BROWSER);
|
|
@@ -60,7 +89,9 @@ export const browserSelectAction = {
|
|
|
60
89
|
if (!option) {
|
|
61
90
|
throw new ActionError("select", dropdown, new Error("No option specified to select"));
|
|
62
91
|
}
|
|
63
|
-
const result = await service
|
|
92
|
+
const result = await service
|
|
93
|
+
.getClient()
|
|
94
|
+
.select(session.id, option, dropdown);
|
|
64
95
|
if (!result.success) {
|
|
65
96
|
throw new ActionError("select", dropdown, new Error(result.error ?? "Select failed"));
|
|
66
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/actions/select.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Action,\n ActionResult,\n Content,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n ActionError,\n handleBrowserError,\n ServiceNotAvailableError,\n SessionError,\n} from \"../utils/errors.js\";\n\nexport const browserSelectAction: Action = {\n name: \"BROWSER_SELECT\",\n similes: [\"SELECT_OPTION\", \"CHOOSE\", \"PICK\"],\n description: \"Select an option from a dropdown on the webpage\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const browserEnabled =\n runtime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n runtime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n if (!browserEnabled) {\n return false;\n }\n\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n return false;\n }\n\n const text = message.content?.text?.toLowerCase() ?? \"\";\n return text.includes(\"select\") || text.includes(\"choose\") || text.includes(\"pick\");\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n _responses?: Memory[]\n ): Promise<ActionResult | undefined> => {\n const service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n if (!service) {\n const error = new ServiceNotAvailableError();\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"select option\"\n );\n return {\n text: \"Browser service is not available\",\n success: false,\n data: {\n actionName: \"BROWSER_SELECT\",\n error: \"service_not_available\",\n },\n values: {\n success: false,\n errorType: \"service_not_available\",\n },\n };\n }\n\n const session = await service.getOrCreateSession();\n if (!session) {\n const error = new SessionError(\"No active browser session\");\n handleBrowserError(\n error,\n callback as (content: { text: string; error?: boolean }) => Promise<unknown>,\n \"select option\"\n );\n return {\n text: \"No active browser session\",\n success: false,\n data: {\n actionName: \"BROWSER_SELECT\",\n error: \"no_session\",\n },\n values: {\n success: false,\n errorType: \"no_session\",\n },\n };\n }\n\n const text = message.content?.text ?? \"\";\n const match = text.match(/[\"']([^\"']+)[\"']/);\n const option = match ? match[1] : \"\";\n\n const dropdownMatch = text.match(/from (?:the )?(.+)$/i);\n const dropdown = dropdownMatch ? dropdownMatch[1] : \"dropdown\";\n\n if (!option) {\n throw new ActionError(\"select\", dropdown, new Error(\"No option specified to select\"));\n }\n\n const result = await service.getClient().select(session.id, option, dropdown);\n if (!result.success) {\n throw new ActionError(\"select\", dropdown, new Error(result.error ?? \"Select failed\"));\n }\n\n const responseContent: Content = {\n text: `I've selected \"${option}\" from the ${dropdown}`,\n actions: [\"BROWSER_SELECT\"],\n source: message.content?.source ?? \"action\",\n };\n\n await callback?.(responseContent);\n\n return {\n text: responseContent.text ?? \"\",\n success: true,\n data: {\n actionName: \"BROWSER_SELECT\",\n option,\n dropdown,\n sessionId: session.id,\n },\n values: {\n success: true,\n option,\n dropdown,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: { text: 'Select \"United States\" from the country dropdown' },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: 'I\\'ve selected \"United States\" from the country dropdown.',\n actions: [\"BROWSER_SELECT\"],\n },\n },\n ],\n ],\n};\n"]}
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/actions/select.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACN,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,GACZ,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,mBAAmB,GAAW;IAC1C,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC;IAC5C,WAAW,EAAE,iDAAiD;IAE9D,QAAQ,EAAE,KAAK,EACd,OAAY,EACZ,OAAY,EACZ,KAAW,EACX,OAAa,EACM,EAAE;QACrB,MAAM,WAAW,GAChB,OAAO,OAAO,EAAE,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,aAAa,GAClB,YAAY,CAAC,MAAM,GAAG,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,yBAAyB,CAAC;QAC5C,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,MAAM,CACxB,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,IAAI,EAAE,CACjD,CAAC;QACF,MAAM,kBAAkB,GAAG,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,kBAAkB;YACtC,CAAC,CAAC,UAAU,KAAK,kBAAkB;YACnC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,WAAW,GAChB,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,WAAsC,CAAC,CAAC,MAAM,GAAG,CAAC;YAC9D,OAAO,CAAC,OAAO,EAAE,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;QAElE,IAAI,CAAC,CAAC,aAAa,IAAI,WAAW,IAAI,YAAY,IAAI,WAAW,CAAC,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,KAAK,EAC/B,OAAsB,EACtB,OAAe,EACf,MAAc,EACK,EAAE;YACrB,MAAM,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,KAAK,MAAM;gBAC/C,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC;YAElD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC;YACd,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAiB,WAAW,CAAC,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACxD,OAAO,CACN,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CACrB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC;YACJ,OAAO,OAAO,CACb,MAAO,kBAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CACnE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,EAAE,KAAK,EACb,OAAsB,EACtB,OAAe,EACf,MAAc,EACd,QAAyB,EACzB,QAA0B,EAC1B,UAAqB,EACe,EAAE;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAiB,WAAW,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,wBAAwB,EAAE,CAAC;YAC7C,kBAAkB,CACjB,KAAK,EACL,QAGsB,EACtB,eAAe,CACf,CAAC;YACF,OAAO;gBACN,IAAI,EAAE,kCAAkC;gBACxC,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE;oBACL,UAAU,EAAE,gBAAgB;oBAC5B,KAAK,EAAE,uBAAuB;iBAC9B;gBACD,MAAM,EAAE;oBACP,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,uBAAuB;iBAClC;aACD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC;YAC5D,kBAAkB,CACjB,KAAK,EACL,QAGsB,EACtB,eAAe,CACf,CAAC;YACF,OAAO;gBACN,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE;oBACL,UAAU,EAAE,gBAAgB;oBAC5B,KAAK,EAAE,YAAY;iBACnB;gBACD,MAAM,EAAE;oBACP,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,YAAY;iBACvB;aACD,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAErC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAE/D,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CACpB,QAAQ,EACR,QAAQ,EACR,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAC1C,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO;aAC1B,SAAS,EAAE;aACX,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,WAAW,CACpB,QAAQ,EACR,QAAQ,EACR,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAC1C,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAY;YAChC,IAAI,EAAE,kBAAkB,MAAM,cAAc,QAAQ,EAAE;YACtD,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,QAAQ;SAC3C,CAAC;QAEF,MAAM,QAAQ,EAAE,CAAC,eAAe,CAAC,CAAC;QAElC,OAAO;YACN,IAAI,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE;YAChC,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACL,UAAU,EAAE,gBAAgB;gBAC5B,MAAM;gBACN,QAAQ;gBACR,SAAS,EAAE,OAAO,CAAC,EAAE;aACrB;YACD,MAAM,EAAE;gBACP,OAAO,EAAE,IAAI;gBACb,MAAM;gBACN,QAAQ;aACR;SACD,CAAC;IACH,CAAC;IAED,QAAQ,EAAE;QACT;YACC;gBACC,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,EAAE,IAAI,EAAE,kDAAkD,EAAE;aACrE;YACD;gBACC,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE;oBACR,IAAI,EAAE,2DAA2D;oBACjE,OAAO,EAAE,CAAC,gBAAgB,CAAC;iBAC3B;aACD;SACD;KACD;CACD,CAAC","sourcesContent":["import type {\n\tAction,\n\tActionResult,\n\tContent,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { ServiceType } from \"@elizaos/core\";\nimport type { BrowserService } from \"../services/browser-service.js\";\nimport {\n\tActionError,\n\thandleBrowserError,\n\tServiceNotAvailableError,\n\tSessionError,\n} from \"../utils/errors.js\";\n\nexport const browserSelectAction: Action = {\n\tname: \"BROWSER_SELECT\",\n\tsimiles: [\"SELECT_OPTION\", \"CHOOSE\", \"PICK\"],\n\tdescription: \"Select an option from a dropdown on the webpage\",\n\n\tvalidate: async (\n\t\truntime: any,\n\t\tmessage: any,\n\t\tstate?: any,\n\t\toptions?: any,\n\t): Promise<boolean> => {\n\t\tconst __avTextRaw =\n\t\t\ttypeof message?.content?.text === \"string\" ? message.content.text : \"\";\n\t\tconst __avText = __avTextRaw.toLowerCase();\n\t\tconst __avKeywords = [\"browser\", \"select\"];\n\t\tconst __avKeywordOk =\n\t\t\t__avKeywords.length > 0 &&\n\t\t\t__avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n\t\tconst __avRegex = /\\b(?:browser|select)\\b/i;\n\t\tconst __avRegexOk = __avRegex.test(__avText);\n\t\tconst __avSource = String(\n\t\t\tmessage?.content?.source ?? message?.source ?? \"\",\n\t\t);\n\t\tconst __avExpectedSource = \"\";\n\t\tconst __avSourceOk = __avExpectedSource\n\t\t\t? __avSource === __avExpectedSource\n\t\t\t: Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n\t\tconst __avOptions = options && typeof options === \"object\" ? options : {};\n\t\tconst __avInputOk =\n\t\t\t__avText.trim().length > 0 ||\n\t\t\tObject.keys(__avOptions as Record<string, unknown>).length > 0 ||\n\t\t\tBoolean(message?.content && typeof message.content === \"object\");\n\n\t\tif (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst __avLegacyValidate = async (\n\t\t\truntime: IAgentRuntime,\n\t\t\tmessage: Memory,\n\t\t\t_state?: State,\n\t\t): Promise<boolean> => {\n\t\t\tconst browserEnabled =\n\t\t\t\truntime.getSetting(\"ENABLE_BROWSER\") === \"true\" ||\n\t\t\t\truntime.getSetting(\"BROWSER_ENABLED\") === \"true\";\n\n\t\t\tif (!browserEnabled) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\t\tif (!service) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst text = message.content?.text?.toLowerCase() ?? \"\";\n\t\t\treturn (\n\t\t\t\ttext.includes(\"select\") ||\n\t\t\t\ttext.includes(\"choose\") ||\n\t\t\t\ttext.includes(\"pick\")\n\t\t\t);\n\t\t};\n\t\ttry {\n\t\t\treturn Boolean(\n\t\t\t\tawait (__avLegacyValidate as any)(runtime, message, state, options),\n\t\t\t);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state?: State,\n\t\t_options?: HandlerOptions,\n\t\tcallback?: HandlerCallback,\n\t\t_responses?: Memory[],\n\t): Promise<ActionResult | undefined> => {\n\t\tconst service = runtime.getService<BrowserService>(ServiceType.BROWSER);\n\t\tif (!service) {\n\t\t\tconst error = new ServiceNotAvailableError();\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"select option\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"Browser service is not available\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_SELECT\",\n\t\t\t\t\terror: \"service_not_available\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"service_not_available\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst session = await service.getOrCreateSession();\n\t\tif (!session) {\n\t\t\tconst error = new SessionError(\"No active browser session\");\n\t\t\thandleBrowserError(\n\t\t\t\terror,\n\t\t\t\tcallback as (content: {\n\t\t\t\t\ttext: string;\n\t\t\t\t\terror?: boolean;\n\t\t\t\t}) => Promise<unknown>,\n\t\t\t\t\"select option\",\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttext: \"No active browser session\",\n\t\t\t\tsuccess: false,\n\t\t\t\tdata: {\n\t\t\t\t\tactionName: \"BROWSER_SELECT\",\n\t\t\t\t\terror: \"no_session\",\n\t\t\t\t},\n\t\t\t\tvalues: {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terrorType: \"no_session\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst text = message.content?.text ?? \"\";\n\t\tconst match = text.match(/[\"']([^\"']+)[\"']/);\n\t\tconst option = match ? match[1] : \"\";\n\n\t\tconst dropdownMatch = text.match(/from (?:the )?(.+)$/i);\n\t\tconst dropdown = dropdownMatch ? dropdownMatch[1] : \"dropdown\";\n\n\t\tif (!option) {\n\t\t\tthrow new ActionError(\n\t\t\t\t\"select\",\n\t\t\t\tdropdown,\n\t\t\t\tnew Error(\"No option specified to select\"),\n\t\t\t);\n\t\t}\n\n\t\tconst result = await service\n\t\t\t.getClient()\n\t\t\t.select(session.id, option, dropdown);\n\t\tif (!result.success) {\n\t\t\tthrow new ActionError(\n\t\t\t\t\"select\",\n\t\t\t\tdropdown,\n\t\t\t\tnew Error(result.error ?? \"Select failed\"),\n\t\t\t);\n\t\t}\n\n\t\tconst responseContent: Content = {\n\t\t\ttext: `I've selected \"${option}\" from the ${dropdown}`,\n\t\t\tactions: [\"BROWSER_SELECT\"],\n\t\t\tsource: message.content?.source ?? \"action\",\n\t\t};\n\n\t\tawait callback?.(responseContent);\n\n\t\treturn {\n\t\t\ttext: responseContent.text ?? \"\",\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tactionName: \"BROWSER_SELECT\",\n\t\t\t\toption,\n\t\t\t\tdropdown,\n\t\t\t\tsessionId: session.id,\n\t\t\t},\n\t\t\tvalues: {\n\t\t\t\tsuccess: true,\n\t\t\t\toption,\n\t\t\t\tdropdown,\n\t\t\t},\n\t\t};\n\t},\n\n\texamples: [\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"{{user}}\",\n\t\t\t\tcontent: { text: 'Select \"United States\" from the country dropdown' },\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"{{agent}}\",\n\t\t\t\tcontent: {\n\t\t\t\t\ttext: 'I\\'ve selected \"United States\" from the country dropdown.',\n\t\t\t\t\tactions: [\"BROWSER_SELECT\"],\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t],\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/actions/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/actions/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAQN,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,iBAAiB,EAAE,MAmM/B,CAAC"}
|