@elizaos/plugin-browser 1.0.3 → 2.0.0-alpha.1
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/README.md +75 -23
- package/dist/actions/click.d.ts +3 -0
- package/dist/actions/click.d.ts.map +1 -0
- package/dist/actions/click.js +98 -0
- package/dist/actions/click.js.map +1 -0
- package/dist/actions/extract.d.ts +3 -0
- package/dist/actions/extract.d.ts.map +1 -0
- package/dist/actions/extract.js +110 -0
- package/dist/actions/extract.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +7 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/navigate.d.ts +3 -0
- package/dist/actions/navigate.d.ts.map +1 -0
- package/dist/actions/navigate.js +129 -0
- package/dist/actions/navigate.js.map +1 -0
- package/dist/actions/screenshot.d.ts +3 -0
- package/dist/actions/screenshot.d.ts.map +1 -0
- package/dist/actions/screenshot.js +107 -0
- package/dist/actions/screenshot.js.map +1 -0
- package/dist/actions/select.d.ts +3 -0
- package/dist/actions/select.d.ts.map +1 -0
- package/dist/actions/select.js +105 -0
- package/dist/actions/select.js.map +1 -0
- package/dist/actions/type.d.ts +3 -0
- package/dist/actions/type.d.ts.map +1 -0
- package/dist/actions/type.js +105 -0
- package/dist/actions/type.js.map +1 -0
- package/dist/index.d.ts +17 -5
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +119 -348
- package/dist/index.js.map +1 -1
- package/dist/providers/browser-state.d.ts +3 -0
- package/dist/providers/browser-state.d.ts.map +1 -0
- package/dist/providers/browser-state.js +47 -0
- package/dist/providers/browser-state.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/services/browser-service.d.ts +30 -0
- package/dist/services/browser-service.d.ts.map +1 -0
- package/dist/services/browser-service.js +164 -0
- package/dist/services/browser-service.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +4 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/process-manager.d.ts +15 -0
- package/dist/services/process-manager.d.ts.map +1 -0
- package/dist/services/process-manager.js +186 -0
- package/dist/services/process-manager.js.map +1 -0
- package/dist/services/websocket-client.d.ts +35 -0
- package/dist/services/websocket-client.d.ts.map +1 -0
- package/dist/services/websocket-client.js +219 -0
- package/dist/services/websocket-client.js.map +1 -0
- package/dist/types.d.ts +101 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/captcha.d.ts +33 -0
- package/dist/utils/captcha.d.ts.map +1 -0
- package/dist/utils/captcha.js +219 -0
- package/dist/utils/captcha.js.map +1 -0
- package/dist/utils/errors.d.ts +37 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +81 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/retry.d.ts +26 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +55 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/security.d.ts +27 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +138 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/url.d.ts +12 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +38 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +60 -42
- package/LICENSE +0 -21
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { ServiceType } from "@elizaos/core";
|
|
2
|
+
import { ActionError, handleBrowserError, ServiceNotAvailableError, SessionError, } from "../utils/errors.js";
|
|
3
|
+
export const browserScreenshotAction = {
|
|
4
|
+
name: "BROWSER_SCREENSHOT",
|
|
5
|
+
similes: ["TAKE_SCREENSHOT", "CAPTURE_PAGE", "SCREENSHOT"],
|
|
6
|
+
description: "Take a screenshot of the current page",
|
|
7
|
+
validate: async (runtime, message, _state) => {
|
|
8
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
9
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
10
|
+
if (!browserEnabled) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
14
|
+
if (!service) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const text = message.content?.text?.toLowerCase() ?? "";
|
|
18
|
+
return text.includes("screenshot") || text.includes("capture") || text.includes("snap");
|
|
19
|
+
},
|
|
20
|
+
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
21
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
22
|
+
if (!service) {
|
|
23
|
+
const error = new ServiceNotAvailableError();
|
|
24
|
+
handleBrowserError(error, callback, "take screenshot");
|
|
25
|
+
return {
|
|
26
|
+
text: "Browser service is not available",
|
|
27
|
+
success: false,
|
|
28
|
+
data: {
|
|
29
|
+
actionName: "BROWSER_SCREENSHOT",
|
|
30
|
+
error: "service_not_available",
|
|
31
|
+
},
|
|
32
|
+
values: {
|
|
33
|
+
success: false,
|
|
34
|
+
errorType: "service_not_available",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const session = await service.getOrCreateSession();
|
|
39
|
+
if (!session) {
|
|
40
|
+
const error = new SessionError("No active browser session");
|
|
41
|
+
handleBrowserError(error, callback, "take screenshot");
|
|
42
|
+
return {
|
|
43
|
+
text: "No active browser session",
|
|
44
|
+
success: false,
|
|
45
|
+
data: {
|
|
46
|
+
actionName: "BROWSER_SCREENSHOT",
|
|
47
|
+
error: "no_session",
|
|
48
|
+
},
|
|
49
|
+
values: {
|
|
50
|
+
success: false,
|
|
51
|
+
errorType: "no_session",
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const result = await service.getClient().screenshot(session.id);
|
|
56
|
+
if (!result.success) {
|
|
57
|
+
throw new ActionError("screenshot", "page", new Error(result.error ?? "Screenshot failed"));
|
|
58
|
+
}
|
|
59
|
+
const screenshotData = result.data;
|
|
60
|
+
const url = screenshotData?.url ?? "unknown";
|
|
61
|
+
const title = screenshotData?.title ?? "Untitled";
|
|
62
|
+
const responseContent = {
|
|
63
|
+
text: `I've taken a screenshot of the page "${title}" at ${url}`,
|
|
64
|
+
actions: ["BROWSER_SCREENSHOT"],
|
|
65
|
+
source: message.content?.source ?? "action",
|
|
66
|
+
data: {
|
|
67
|
+
screenshot: screenshotData?.screenshot ?? "",
|
|
68
|
+
mimeType: screenshotData?.mimeType ?? "image/png",
|
|
69
|
+
url,
|
|
70
|
+
title,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
await callback?.(responseContent);
|
|
74
|
+
return {
|
|
75
|
+
text: responseContent.text ?? "",
|
|
76
|
+
success: true,
|
|
77
|
+
data: {
|
|
78
|
+
actionName: "BROWSER_SCREENSHOT",
|
|
79
|
+
url,
|
|
80
|
+
title,
|
|
81
|
+
sessionId: session.id,
|
|
82
|
+
screenshot: screenshotData?.screenshot ?? "",
|
|
83
|
+
},
|
|
84
|
+
values: {
|
|
85
|
+
success: true,
|
|
86
|
+
url,
|
|
87
|
+
title,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
examples: [
|
|
92
|
+
[
|
|
93
|
+
{
|
|
94
|
+
name: "{{user}}",
|
|
95
|
+
content: { text: "Take a screenshot of the page" },
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "{{agent}}",
|
|
99
|
+
content: {
|
|
100
|
+
text: "I've taken a screenshot of the page.",
|
|
101
|
+
actions: ["BROWSER_SCREENSHOT"],
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=screenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/actions/screenshot.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 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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/actions/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAQP,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,mBAAmB,EAAE,MAmIjC,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { ServiceType } from "@elizaos/core";
|
|
2
|
+
import { ActionError, handleBrowserError, ServiceNotAvailableError, SessionError, } from "../utils/errors.js";
|
|
3
|
+
export const browserSelectAction = {
|
|
4
|
+
name: "BROWSER_SELECT",
|
|
5
|
+
similes: ["SELECT_OPTION", "CHOOSE", "PICK"],
|
|
6
|
+
description: "Select an option from a dropdown on the webpage",
|
|
7
|
+
validate: async (runtime, message, _state) => {
|
|
8
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
9
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
10
|
+
if (!browserEnabled) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
14
|
+
if (!service) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const text = message.content?.text?.toLowerCase() ?? "";
|
|
18
|
+
return text.includes("select") || text.includes("choose") || text.includes("pick");
|
|
19
|
+
},
|
|
20
|
+
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
21
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
22
|
+
if (!service) {
|
|
23
|
+
const error = new ServiceNotAvailableError();
|
|
24
|
+
handleBrowserError(error, callback, "select option");
|
|
25
|
+
return {
|
|
26
|
+
text: "Browser service is not available",
|
|
27
|
+
success: false,
|
|
28
|
+
data: {
|
|
29
|
+
actionName: "BROWSER_SELECT",
|
|
30
|
+
error: "service_not_available",
|
|
31
|
+
},
|
|
32
|
+
values: {
|
|
33
|
+
success: false,
|
|
34
|
+
errorType: "service_not_available",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const session = await service.getOrCreateSession();
|
|
39
|
+
if (!session) {
|
|
40
|
+
const error = new SessionError("No active browser session");
|
|
41
|
+
handleBrowserError(error, callback, "select option");
|
|
42
|
+
return {
|
|
43
|
+
text: "No active browser session",
|
|
44
|
+
success: false,
|
|
45
|
+
data: {
|
|
46
|
+
actionName: "BROWSER_SELECT",
|
|
47
|
+
error: "no_session",
|
|
48
|
+
},
|
|
49
|
+
values: {
|
|
50
|
+
success: false,
|
|
51
|
+
errorType: "no_session",
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const text = message.content?.text ?? "";
|
|
56
|
+
const match = text.match(/["']([^"']+)["']/);
|
|
57
|
+
const option = match ? match[1] : "";
|
|
58
|
+
const dropdownMatch = text.match(/from (?:the )?(.+)$/i);
|
|
59
|
+
const dropdown = dropdownMatch ? dropdownMatch[1] : "dropdown";
|
|
60
|
+
if (!option) {
|
|
61
|
+
throw new ActionError("select", dropdown, new Error("No option specified to select"));
|
|
62
|
+
}
|
|
63
|
+
const result = await service.getClient().select(session.id, option, dropdown);
|
|
64
|
+
if (!result.success) {
|
|
65
|
+
throw new ActionError("select", dropdown, new Error(result.error ?? "Select failed"));
|
|
66
|
+
}
|
|
67
|
+
const responseContent = {
|
|
68
|
+
text: `I've selected "${option}" from the ${dropdown}`,
|
|
69
|
+
actions: ["BROWSER_SELECT"],
|
|
70
|
+
source: message.content?.source ?? "action",
|
|
71
|
+
};
|
|
72
|
+
await callback?.(responseContent);
|
|
73
|
+
return {
|
|
74
|
+
text: responseContent.text ?? "",
|
|
75
|
+
success: true,
|
|
76
|
+
data: {
|
|
77
|
+
actionName: "BROWSER_SELECT",
|
|
78
|
+
option,
|
|
79
|
+
dropdown,
|
|
80
|
+
sessionId: session.id,
|
|
81
|
+
},
|
|
82
|
+
values: {
|
|
83
|
+
success: true,
|
|
84
|
+
option,
|
|
85
|
+
dropdown,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
examples: [
|
|
90
|
+
[
|
|
91
|
+
{
|
|
92
|
+
name: "{{user}}",
|
|
93
|
+
content: { text: 'Select "United States" from the country dropdown' },
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "{{agent}}",
|
|
97
|
+
content: {
|
|
98
|
+
text: 'I\'ve selected "United States" from the country dropdown.',
|
|
99
|
+
actions: ["BROWSER_SELECT"],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/actions/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAQP,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,iBAAiB,EAAE,MAmI/B,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { ServiceType } from "@elizaos/core";
|
|
2
|
+
import { ActionError, handleBrowserError, ServiceNotAvailableError, SessionError, } from "../utils/errors.js";
|
|
3
|
+
export const browserTypeAction = {
|
|
4
|
+
name: "BROWSER_TYPE",
|
|
5
|
+
similes: ["TYPE_TEXT", "INPUT", "ENTER_TEXT"],
|
|
6
|
+
description: "Type text into an input field on the webpage",
|
|
7
|
+
validate: async (runtime, message, _state) => {
|
|
8
|
+
const browserEnabled = runtime.getSetting("ENABLE_BROWSER") === "true" ||
|
|
9
|
+
runtime.getSetting("BROWSER_ENABLED") === "true";
|
|
10
|
+
if (!browserEnabled) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
14
|
+
if (!service) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const text = message.content?.text?.toLowerCase() ?? "";
|
|
18
|
+
return text.includes("type") || text.includes("input") || text.includes("enter");
|
|
19
|
+
},
|
|
20
|
+
handler: async (runtime, message, _state, _options, callback, _responses) => {
|
|
21
|
+
const service = runtime.getService(ServiceType.BROWSER);
|
|
22
|
+
if (!service) {
|
|
23
|
+
const error = new ServiceNotAvailableError();
|
|
24
|
+
handleBrowserError(error, callback, "type text");
|
|
25
|
+
return {
|
|
26
|
+
text: "Browser service is not available",
|
|
27
|
+
success: false,
|
|
28
|
+
data: {
|
|
29
|
+
actionName: "BROWSER_TYPE",
|
|
30
|
+
error: "service_not_available",
|
|
31
|
+
},
|
|
32
|
+
values: {
|
|
33
|
+
success: false,
|
|
34
|
+
errorType: "service_not_available",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const session = await service.getOrCreateSession();
|
|
39
|
+
if (!session) {
|
|
40
|
+
const error = new SessionError("No active browser session");
|
|
41
|
+
handleBrowserError(error, callback, "type text");
|
|
42
|
+
return {
|
|
43
|
+
text: "No active browser session",
|
|
44
|
+
success: false,
|
|
45
|
+
data: {
|
|
46
|
+
actionName: "BROWSER_TYPE",
|
|
47
|
+
error: "no_session",
|
|
48
|
+
},
|
|
49
|
+
values: {
|
|
50
|
+
success: false,
|
|
51
|
+
errorType: "no_session",
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const text = message.content?.text ?? "";
|
|
56
|
+
const match = text.match(/["']([^"']+)["']/);
|
|
57
|
+
const textToType = match ? match[1] : "";
|
|
58
|
+
const fieldMatch = text.match(/(?:in|into) (?:the )?(.+)$/i);
|
|
59
|
+
const field = fieldMatch ? fieldMatch[1] : "input field";
|
|
60
|
+
if (!textToType) {
|
|
61
|
+
throw new ActionError("type", field, new Error("No text specified to type"));
|
|
62
|
+
}
|
|
63
|
+
const result = await service.getClient().type(session.id, textToType, field);
|
|
64
|
+
if (!result.success) {
|
|
65
|
+
throw new ActionError("type", field, new Error(result.error ?? "Type failed"));
|
|
66
|
+
}
|
|
67
|
+
const responseContent = {
|
|
68
|
+
text: `I've typed "${textToType}" in the ${field}`,
|
|
69
|
+
actions: ["BROWSER_TYPE"],
|
|
70
|
+
source: message.content?.source ?? "action",
|
|
71
|
+
};
|
|
72
|
+
await callback?.(responseContent);
|
|
73
|
+
return {
|
|
74
|
+
text: responseContent.text ?? "",
|
|
75
|
+
success: true,
|
|
76
|
+
data: {
|
|
77
|
+
actionName: "BROWSER_TYPE",
|
|
78
|
+
textTyped: textToType,
|
|
79
|
+
field,
|
|
80
|
+
sessionId: session.id,
|
|
81
|
+
},
|
|
82
|
+
values: {
|
|
83
|
+
success: true,
|
|
84
|
+
textTyped: textToType,
|
|
85
|
+
field,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
examples: [
|
|
90
|
+
[
|
|
91
|
+
{
|
|
92
|
+
name: "{{user}}",
|
|
93
|
+
content: { text: 'Type "hello world" in the search box' },
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "{{agent}}",
|
|
97
|
+
content: {
|
|
98
|
+
text: 'I\'ve typed "hello world" in the search box.',
|
|
99
|
+
actions: ["BROWSER_TYPE"],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/actions/type.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 browserTypeAction: Action = {\n name: \"BROWSER_TYPE\",\n similes: [\"TYPE_TEXT\", \"INPUT\", \"ENTER_TEXT\"],\n description: \"Type text into an input field 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(\"type\") || text.includes(\"input\") || text.includes(\"enter\");\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 \"type text\"\n );\n return {\n text: \"Browser service is not available\",\n success: false,\n data: {\n actionName: \"BROWSER_TYPE\",\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 \"type text\"\n );\n return {\n text: \"No active browser session\",\n success: false,\n data: {\n actionName: \"BROWSER_TYPE\",\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 textToType = match ? match[1] : \"\";\n\n const fieldMatch = text.match(/(?:in|into) (?:the )?(.+)$/i);\n const field = fieldMatch ? fieldMatch[1] : \"input field\";\n\n if (!textToType) {\n throw new ActionError(\"type\", field, new Error(\"No text specified to type\"));\n }\n\n const result = await service.getClient().type(session.id, textToType, field);\n if (!result.success) {\n throw new ActionError(\"type\", field, new Error(result.error ?? \"Type failed\"));\n }\n\n const responseContent: Content = {\n text: `I've typed \"${textToType}\" in the ${field}`,\n actions: [\"BROWSER_TYPE\"],\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_TYPE\",\n textTyped: textToType,\n field,\n sessionId: session.id,\n },\n values: {\n success: true,\n textTyped: textToType,\n field,\n },\n };\n },\n\n examples: [\n [\n {\n name: \"{{user}}\",\n content: { text: 'Type \"hello world\" in the search box' },\n },\n {\n name: \"{{agent}}\",\n content: {\n text: 'I\\'ve typed \"hello world\" in the search box.',\n actions: [\"BROWSER_TYPE\"],\n },\n },\n ],\n ],\n};\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
|
-
import { Plugin } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { Plugin } from "@elizaos/core";
|
|
2
|
+
import { browserClickAction } from "./actions/click.js";
|
|
3
|
+
import { browserExtractAction } from "./actions/extract.js";
|
|
4
|
+
import { browserNavigateAction } from "./actions/navigate.js";
|
|
5
|
+
import { browserScreenshotAction } from "./actions/screenshot.js";
|
|
6
|
+
import { browserSelectAction } from "./actions/select.js";
|
|
7
|
+
import { browserTypeAction } from "./actions/type.js";
|
|
8
|
+
import { BrowserService, Session } from "./services/browser-service.js";
|
|
9
|
+
import { BrowserProcessManager } from "./services/process-manager.js";
|
|
10
|
+
import { BrowserWebSocketClient } from "./services/websocket-client.js";
|
|
11
|
+
export * from "./types.js";
|
|
12
|
+
export * from "./utils/index.js";
|
|
13
|
+
export { BrowserService, Session, BrowserWebSocketClient, BrowserProcessManager };
|
|
14
|
+
export { browserNavigateAction, browserClickAction, browserTypeAction, browserSelectAction, browserExtractAction, browserScreenshotAction, };
|
|
15
|
+
export declare const browserPlugin: Plugin;
|
|
16
|
+
export default browserPlugin;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,MAAM,EAAmC,MAAM,eAAe,CAAC;AAGpG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;AAClF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,CAAC;AAsEF,eAAO,MAAM,aAAa,EAAE,MA+C3B,CAAC;AAEF,eAAe,aAAa,CAAC"}
|