browser-use 0.2.0 → 0.3.0

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.
Files changed (259) hide show
  1. package/README.md +295 -686
  2. package/dist/actor/element.d.ts +19 -0
  3. package/dist/actor/element.js +46 -0
  4. package/dist/actor/index.d.ts +4 -0
  5. package/dist/actor/index.js +4 -0
  6. package/dist/actor/mouse.d.ts +19 -0
  7. package/dist/actor/mouse.js +39 -0
  8. package/dist/actor/page.d.ts +29 -0
  9. package/dist/actor/page.js +88 -0
  10. package/dist/actor/utils.d.ts +4 -0
  11. package/dist/actor/utils.js +35 -0
  12. package/dist/agent/cloud-events.d.ts +18 -0
  13. package/dist/agent/cloud-events.js +65 -2
  14. package/dist/agent/gif.d.ts +1 -0
  15. package/dist/agent/gif.js +24 -2
  16. package/dist/agent/judge.d.ts +17 -0
  17. package/dist/agent/judge.js +197 -0
  18. package/dist/agent/message-manager/service.d.ts +12 -4
  19. package/dist/agent/message-manager/service.js +205 -39
  20. package/dist/agent/message-manager/utils.js +0 -1
  21. package/dist/agent/message-manager/views.d.ts +4 -0
  22. package/dist/agent/message-manager/views.js +11 -7
  23. package/dist/agent/prompts.d.ts +24 -3
  24. package/dist/agent/prompts.js +274 -59
  25. package/dist/agent/service.d.ts +99 -41
  26. package/dist/agent/service.js +2266 -472
  27. package/dist/agent/variable-detector.d.ts +12 -0
  28. package/dist/agent/variable-detector.js +211 -0
  29. package/dist/agent/views.d.ts +237 -18
  30. package/dist/agent/views.js +446 -33
  31. package/dist/browser/cloud/cloud.d.ts +20 -0
  32. package/dist/browser/cloud/cloud.js +129 -0
  33. package/dist/browser/cloud/index.d.ts +2 -0
  34. package/dist/browser/cloud/index.js +2 -0
  35. package/dist/browser/cloud/views.d.ts +41 -0
  36. package/dist/browser/cloud/views.js +35 -0
  37. package/dist/browser/events.d.ts +345 -0
  38. package/dist/browser/events.js +566 -0
  39. package/dist/browser/extensions.js +17 -17
  40. package/dist/browser/index.d.ts +4 -0
  41. package/dist/browser/index.js +4 -0
  42. package/dist/browser/profile.d.ts +8 -2
  43. package/dist/browser/profile.js +79 -12
  44. package/dist/browser/session-manager.d.ts +85 -0
  45. package/dist/browser/session-manager.js +208 -0
  46. package/dist/browser/session.d.ts +100 -8
  47. package/dist/browser/session.js +1097 -58
  48. package/dist/browser/types.d.ts +0 -2
  49. package/dist/browser/views.d.ts +39 -0
  50. package/dist/browser/views.js +32 -0
  51. package/dist/browser/watchdogs/aboutblank-watchdog.d.ts +12 -0
  52. package/dist/browser/watchdogs/aboutblank-watchdog.js +131 -0
  53. package/dist/browser/watchdogs/base.d.ts +21 -0
  54. package/dist/browser/watchdogs/base.js +81 -0
  55. package/dist/browser/watchdogs/cdp-session-watchdog.d.ts +14 -0
  56. package/dist/browser/watchdogs/cdp-session-watchdog.js +177 -0
  57. package/dist/browser/watchdogs/crash-watchdog.d.ts +38 -0
  58. package/dist/browser/watchdogs/crash-watchdog.js +296 -0
  59. package/dist/browser/watchdogs/default-action-watchdog.d.ts +49 -0
  60. package/dist/browser/watchdogs/default-action-watchdog.js +212 -0
  61. package/dist/browser/watchdogs/dom-watchdog.d.ts +8 -0
  62. package/dist/browser/watchdogs/dom-watchdog.js +31 -0
  63. package/dist/browser/watchdogs/downloads-watchdog.d.ts +77 -0
  64. package/dist/browser/watchdogs/downloads-watchdog.js +409 -0
  65. package/dist/browser/watchdogs/har-recording-watchdog.d.ts +19 -0
  66. package/dist/browser/watchdogs/har-recording-watchdog.js +317 -0
  67. package/dist/browser/watchdogs/index.d.ts +15 -0
  68. package/dist/browser/watchdogs/index.js +15 -0
  69. package/dist/browser/watchdogs/local-browser-watchdog.d.ts +10 -0
  70. package/dist/browser/watchdogs/local-browser-watchdog.js +32 -0
  71. package/dist/browser/watchdogs/permissions-watchdog.d.ts +8 -0
  72. package/dist/browser/watchdogs/permissions-watchdog.js +73 -0
  73. package/dist/browser/watchdogs/popups-watchdog.d.ts +13 -0
  74. package/dist/browser/watchdogs/popups-watchdog.js +77 -0
  75. package/dist/browser/watchdogs/recording-watchdog.d.ts +27 -0
  76. package/dist/browser/watchdogs/recording-watchdog.js +249 -0
  77. package/dist/browser/watchdogs/screenshot-watchdog.d.ts +6 -0
  78. package/dist/browser/watchdogs/screenshot-watchdog.js +13 -0
  79. package/dist/browser/watchdogs/security-watchdog.d.ts +10 -0
  80. package/dist/browser/watchdogs/security-watchdog.js +84 -0
  81. package/dist/browser/watchdogs/storage-state-watchdog.d.ts +24 -0
  82. package/dist/browser/watchdogs/storage-state-watchdog.js +288 -0
  83. package/dist/cli.d.ts +7 -2
  84. package/dist/cli.js +182 -25
  85. package/dist/code-use/formatting.d.ts +3 -0
  86. package/dist/code-use/formatting.js +18 -0
  87. package/dist/code-use/index.d.ts +6 -0
  88. package/dist/code-use/index.js +6 -0
  89. package/dist/code-use/namespace.d.ts +5 -0
  90. package/dist/code-use/namespace.js +81 -0
  91. package/dist/code-use/notebook-export.d.ts +3 -0
  92. package/dist/code-use/notebook-export.js +56 -0
  93. package/dist/code-use/service.d.ts +24 -0
  94. package/dist/code-use/service.js +104 -0
  95. package/dist/code-use/utils.d.ts +4 -0
  96. package/dist/code-use/utils.js +98 -0
  97. package/dist/code-use/views.d.ts +108 -0
  98. package/dist/code-use/views.js +165 -0
  99. package/dist/config.d.ts +13 -0
  100. package/dist/config.js +69 -3
  101. package/dist/controller/registry/service.d.ts +10 -1
  102. package/dist/controller/registry/service.js +266 -10
  103. package/dist/controller/registry/views.d.ts +4 -1
  104. package/dist/controller/registry/views.js +25 -2
  105. package/dist/controller/service.d.ts +10 -1
  106. package/dist/controller/service.js +1807 -268
  107. package/dist/controller/views.d.ts +78 -155
  108. package/dist/controller/views.js +61 -12
  109. package/dist/dom/history-tree-processor/service.d.ts +5 -0
  110. package/dist/dom/history-tree-processor/service.js +169 -14
  111. package/dist/dom/history-tree-processor/view.d.ts +7 -1
  112. package/dist/dom/history-tree-processor/view.js +10 -1
  113. package/dist/dom/markdown-extractor.d.ts +37 -0
  114. package/dist/dom/markdown-extractor.js +345 -0
  115. package/dist/dom/service.d.ts +3 -1
  116. package/dist/dom/service.js +76 -0
  117. package/dist/dom/views.d.ts +1 -0
  118. package/dist/dom/views.js +45 -0
  119. package/dist/event-bus.d.ts +107 -7
  120. package/dist/event-bus.js +313 -10
  121. package/dist/exceptions.d.ts +0 -3
  122. package/dist/exceptions.js +0 -7
  123. package/dist/filesystem/file-system.d.ts +18 -0
  124. package/dist/filesystem/file-system.js +503 -42
  125. package/dist/index.d.ts +7 -0
  126. package/dist/index.js +6 -0
  127. package/dist/integrations/gmail/actions.d.ts +3 -3
  128. package/dist/integrations/gmail/actions.js +4 -4
  129. package/dist/llm/anthropic/chat.d.ts +18 -1
  130. package/dist/llm/anthropic/chat.js +123 -55
  131. package/dist/llm/anthropic/serializer.d.ts +2 -0
  132. package/dist/llm/anthropic/serializer.js +81 -9
  133. package/dist/llm/aws/chat-anthropic.d.ts +17 -0
  134. package/dist/llm/aws/chat-anthropic.js +126 -26
  135. package/dist/llm/aws/chat-bedrock.d.ts +28 -1
  136. package/dist/llm/aws/chat-bedrock.js +161 -34
  137. package/dist/llm/aws/serializer.d.ts +13 -1
  138. package/dist/llm/aws/serializer.js +56 -17
  139. package/dist/llm/azure/chat.d.ts +53 -2
  140. package/dist/llm/azure/chat.js +366 -54
  141. package/dist/llm/base.d.ts +2 -0
  142. package/dist/llm/browser-use/chat.d.ts +40 -0
  143. package/dist/llm/browser-use/chat.js +305 -0
  144. package/dist/llm/browser-use/index.d.ts +1 -0
  145. package/dist/llm/browser-use/index.js +1 -0
  146. package/dist/llm/cerebras/chat.d.ts +39 -0
  147. package/dist/llm/cerebras/chat.js +178 -0
  148. package/dist/llm/cerebras/index.d.ts +2 -0
  149. package/dist/llm/cerebras/index.js +2 -0
  150. package/dist/llm/cerebras/serializer.d.ts +7 -0
  151. package/dist/llm/cerebras/serializer.js +82 -0
  152. package/dist/llm/deepseek/chat.d.ts +19 -2
  153. package/dist/llm/deepseek/chat.js +138 -25
  154. package/dist/llm/google/chat.d.ts +46 -2
  155. package/dist/llm/google/chat.js +267 -64
  156. package/dist/llm/google/serializer.d.ts +9 -1
  157. package/dist/llm/google/serializer.js +141 -34
  158. package/dist/llm/groq/chat.d.ts +21 -2
  159. package/dist/llm/groq/chat.js +125 -26
  160. package/dist/llm/groq/parser.js +3 -1
  161. package/dist/llm/mistral/chat.d.ts +43 -0
  162. package/dist/llm/mistral/chat.js +154 -0
  163. package/dist/llm/mistral/index.d.ts +2 -0
  164. package/dist/llm/mistral/index.js +2 -0
  165. package/dist/llm/mistral/schema.d.ts +8 -0
  166. package/dist/llm/mistral/schema.js +27 -0
  167. package/dist/llm/models.d.ts +2 -0
  168. package/dist/llm/models.js +317 -0
  169. package/dist/llm/ollama/chat.d.ts +13 -1
  170. package/dist/llm/ollama/chat.js +110 -19
  171. package/dist/llm/ollama/serializer.d.ts +1 -0
  172. package/dist/llm/ollama/serializer.js +34 -12
  173. package/dist/llm/openai/chat.d.ts +16 -0
  174. package/dist/llm/openai/chat.js +94 -44
  175. package/dist/llm/openai/like.d.ts +5 -3
  176. package/dist/llm/openai/like.js +7 -3
  177. package/dist/llm/openai/responses-serializer.d.ts +18 -0
  178. package/dist/llm/openai/responses-serializer.js +72 -0
  179. package/dist/llm/openrouter/chat.d.ts +28 -2
  180. package/dist/llm/openrouter/chat.js +115 -29
  181. package/dist/llm/schema.d.ts +11 -1
  182. package/dist/llm/schema.js +81 -1
  183. package/dist/llm/vercel/chat.d.ts +50 -0
  184. package/dist/llm/vercel/chat.js +276 -0
  185. package/dist/llm/vercel/index.d.ts +1 -0
  186. package/dist/llm/vercel/index.js +1 -0
  187. package/dist/llm/vercel/serializer.d.ts +5 -0
  188. package/dist/llm/vercel/serializer.js +7 -0
  189. package/dist/llm/views.d.ts +2 -1
  190. package/dist/llm/views.js +3 -1
  191. package/dist/logging-config.d.ts +2 -0
  192. package/dist/logging-config.js +82 -29
  193. package/dist/mcp/client.d.ts +10 -5
  194. package/dist/mcp/client.js +14 -9
  195. package/dist/mcp/controller.d.ts +42 -3
  196. package/dist/mcp/controller.js +56 -31
  197. package/dist/mcp/server.d.ts +14 -0
  198. package/dist/mcp/server.js +255 -52
  199. package/dist/observability.js +10 -4
  200. package/dist/sandbox/index.d.ts +2 -0
  201. package/dist/sandbox/index.js +2 -0
  202. package/dist/sandbox/sandbox.d.ts +19 -0
  203. package/dist/sandbox/sandbox.js +140 -0
  204. package/dist/sandbox/views.d.ts +67 -0
  205. package/dist/sandbox/views.js +121 -0
  206. package/dist/skill-cli/index.d.ts +3 -0
  207. package/dist/skill-cli/index.js +3 -0
  208. package/dist/skill-cli/protocol.d.ts +30 -0
  209. package/dist/skill-cli/protocol.js +48 -0
  210. package/dist/skill-cli/server.d.ts +11 -0
  211. package/dist/skill-cli/server.js +85 -0
  212. package/dist/skill-cli/sessions.d.ts +24 -0
  213. package/dist/skill-cli/sessions.js +47 -0
  214. package/dist/skills/index.d.ts +3 -0
  215. package/dist/skills/index.js +3 -0
  216. package/dist/skills/service.d.ts +27 -0
  217. package/dist/skills/service.js +266 -0
  218. package/dist/skills/utils.d.ts +6 -0
  219. package/dist/skills/utils.js +53 -0
  220. package/dist/skills/views.d.ts +40 -0
  221. package/dist/skills/views.js +10 -0
  222. package/dist/sync/auth.js +8 -3
  223. package/dist/sync/service.d.ts +6 -6
  224. package/dist/sync/service.js +54 -89
  225. package/dist/telemetry/views.d.ts +20 -6
  226. package/dist/telemetry/views.js +23 -5
  227. package/dist/tokens/custom-pricing.d.ts +2 -0
  228. package/dist/tokens/custom-pricing.js +22 -0
  229. package/dist/tokens/index.d.ts +2 -0
  230. package/dist/tokens/index.js +2 -0
  231. package/dist/tokens/mappings.d.ts +1 -0
  232. package/dist/tokens/mappings.js +3 -0
  233. package/dist/tokens/service.js +27 -8
  234. package/dist/tools/extraction/index.d.ts +2 -0
  235. package/dist/tools/extraction/index.js +2 -0
  236. package/dist/tools/extraction/schema-utils.d.ts +6 -0
  237. package/dist/tools/extraction/schema-utils.js +237 -0
  238. package/dist/tools/extraction/views.d.ts +7 -0
  239. package/dist/tools/index.d.ts +5 -0
  240. package/dist/tools/index.js +5 -0
  241. package/dist/tools/registry/index.d.ts +2 -0
  242. package/dist/tools/registry/index.js +2 -0
  243. package/dist/tools/registry/service.d.ts +1 -0
  244. package/dist/tools/registry/service.js +1 -0
  245. package/dist/tools/registry/views.d.ts +1 -0
  246. package/dist/tools/registry/views.js +1 -0
  247. package/dist/tools/service.d.ts +2 -0
  248. package/dist/tools/service.js +1 -0
  249. package/dist/tools/utils.d.ts +2 -0
  250. package/dist/tools/utils.js +57 -0
  251. package/dist/tools/views.d.ts +1 -0
  252. package/dist/tools/views.js +1 -0
  253. package/dist/utils.d.ts +10 -1
  254. package/dist/utils.js +70 -3
  255. package/package.json +87 -26
  256. package/dist/dom/playground/process-dom.js +0 -5
  257. package/dist/dom/playground/test-accessibility.d.ts +0 -44
  258. package/dist/dom/playground/test-accessibility.js +0 -111
  259. /package/dist/{dom/playground/process-dom.d.ts → tools/extraction/views.js} +0 -0
@@ -0,0 +1,67 @@
1
+ export declare class SandboxError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare enum SSEEventType {
5
+ BROWSER_CREATED = "browser_created",
6
+ INSTANCE_CREATED = "instance_created",
7
+ INSTANCE_READY = "instance_ready",
8
+ LOG = "log",
9
+ RESULT = "result",
10
+ ERROR = "error",
11
+ STREAM_COMPLETE = "stream_complete"
12
+ }
13
+ export declare class BrowserCreatedData {
14
+ session_id: string;
15
+ live_url: string;
16
+ status: string;
17
+ constructor(init: {
18
+ session_id: string;
19
+ live_url: string;
20
+ status: string;
21
+ });
22
+ }
23
+ export declare class LogData {
24
+ message: string;
25
+ level: string;
26
+ constructor(init: {
27
+ message: string;
28
+ level?: string;
29
+ });
30
+ }
31
+ export interface ExecutionResponse {
32
+ success: boolean;
33
+ result?: unknown;
34
+ error?: string | null;
35
+ traceback?: string | null;
36
+ }
37
+ export declare class ResultData {
38
+ execution_response: ExecutionResponse;
39
+ constructor(init: {
40
+ execution_response: ExecutionResponse;
41
+ });
42
+ }
43
+ export declare class ErrorData {
44
+ error: string;
45
+ traceback: string | null;
46
+ status_code: number;
47
+ constructor(init: {
48
+ error: string;
49
+ traceback?: string | null;
50
+ status_code?: number;
51
+ });
52
+ }
53
+ export declare class SSEEvent {
54
+ type: SSEEventType;
55
+ data: BrowserCreatedData | LogData | ResultData | ErrorData | Record<string, unknown>;
56
+ timestamp: string | null;
57
+ constructor(init: {
58
+ type: SSEEventType;
59
+ data: BrowserCreatedData | LogData | ResultData | ErrorData | Record<string, unknown>;
60
+ timestamp?: string | null;
61
+ });
62
+ static from_json(event_json: string): SSEEvent;
63
+ is_browser_created(): boolean;
64
+ is_log(): boolean;
65
+ is_result(): boolean;
66
+ is_error(): boolean;
67
+ }
@@ -0,0 +1,121 @@
1
+ export class SandboxError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'SandboxError';
5
+ }
6
+ }
7
+ export var SSEEventType;
8
+ (function (SSEEventType) {
9
+ SSEEventType["BROWSER_CREATED"] = "browser_created";
10
+ SSEEventType["INSTANCE_CREATED"] = "instance_created";
11
+ SSEEventType["INSTANCE_READY"] = "instance_ready";
12
+ SSEEventType["LOG"] = "log";
13
+ SSEEventType["RESULT"] = "result";
14
+ SSEEventType["ERROR"] = "error";
15
+ SSEEventType["STREAM_COMPLETE"] = "stream_complete";
16
+ })(SSEEventType || (SSEEventType = {}));
17
+ export class BrowserCreatedData {
18
+ session_id;
19
+ live_url;
20
+ status;
21
+ constructor(init) {
22
+ this.session_id = init.session_id;
23
+ this.live_url = init.live_url;
24
+ this.status = init.status;
25
+ }
26
+ }
27
+ export class LogData {
28
+ message;
29
+ level;
30
+ constructor(init) {
31
+ this.message = init.message;
32
+ this.level = init.level ?? 'info';
33
+ }
34
+ }
35
+ export class ResultData {
36
+ execution_response;
37
+ constructor(init) {
38
+ this.execution_response = init.execution_response;
39
+ }
40
+ }
41
+ export class ErrorData {
42
+ error;
43
+ traceback;
44
+ status_code;
45
+ constructor(init) {
46
+ this.error = init.error;
47
+ this.traceback = init.traceback ?? null;
48
+ this.status_code = init.status_code ?? 500;
49
+ }
50
+ }
51
+ export class SSEEvent {
52
+ type;
53
+ data;
54
+ timestamp;
55
+ constructor(init) {
56
+ this.type = init.type;
57
+ this.data = init.data;
58
+ this.timestamp = init.timestamp ?? null;
59
+ }
60
+ static from_json(event_json) {
61
+ const raw = JSON.parse(event_json);
62
+ const type = raw.type;
63
+ const payload = raw.data ?? {};
64
+ let data;
65
+ if (type === SSEEventType.BROWSER_CREATED) {
66
+ data = new BrowserCreatedData({
67
+ session_id: String(payload.session_id ?? ''),
68
+ live_url: String(payload.live_url ?? ''),
69
+ status: String(payload.status ?? ''),
70
+ });
71
+ }
72
+ else if (type === SSEEventType.LOG) {
73
+ data = new LogData({
74
+ message: String(payload.message ?? ''),
75
+ level: payload.level == null ? undefined : String(payload.level),
76
+ });
77
+ }
78
+ else if (type === SSEEventType.RESULT) {
79
+ data = new ResultData({
80
+ execution_response: {
81
+ success: Boolean(payload.execution_response?.success),
82
+ result: payload.execution_response?.result,
83
+ error: payload.execution_response?.error == null
84
+ ? null
85
+ : String(payload.execution_response?.error),
86
+ traceback: payload.execution_response?.traceback == null
87
+ ? null
88
+ : String(payload.execution_response?.traceback),
89
+ },
90
+ });
91
+ }
92
+ else if (type === SSEEventType.ERROR) {
93
+ data = new ErrorData({
94
+ error: String(payload.error ?? ''),
95
+ traceback: payload.traceback == null ? null : String(payload.traceback),
96
+ status_code: payload.status_code == null ? undefined : Number(payload.status_code),
97
+ });
98
+ }
99
+ else {
100
+ data = payload;
101
+ }
102
+ return new SSEEvent({
103
+ type,
104
+ data,
105
+ timestamp: raw.timestamp ?? null,
106
+ });
107
+ }
108
+ is_browser_created() {
109
+ return (this.type === SSEEventType.BROWSER_CREATED &&
110
+ this.data instanceof BrowserCreatedData);
111
+ }
112
+ is_log() {
113
+ return this.type === SSEEventType.LOG && this.data instanceof LogData;
114
+ }
115
+ is_result() {
116
+ return this.type === SSEEventType.RESULT && this.data instanceof ResultData;
117
+ }
118
+ is_error() {
119
+ return this.type === SSEEventType.ERROR && this.data instanceof ErrorData;
120
+ }
121
+ }
@@ -0,0 +1,3 @@
1
+ export * from './protocol.js';
2
+ export * from './sessions.js';
3
+ export * from './server.js';
@@ -0,0 +1,3 @@
1
+ export * from './protocol.js';
2
+ export * from './sessions.js';
3
+ export * from './server.js';
@@ -0,0 +1,30 @@
1
+ export interface RequestInit {
2
+ id: string;
3
+ action: string;
4
+ session: string;
5
+ params?: Record<string, unknown>;
6
+ }
7
+ export declare class Request {
8
+ id: string;
9
+ action: string;
10
+ session: string;
11
+ params: Record<string, unknown>;
12
+ constructor(init: RequestInit);
13
+ to_json(): string;
14
+ static from_json(data: string): Request;
15
+ }
16
+ export interface ResponseInit {
17
+ id: string;
18
+ success: boolean;
19
+ data?: unknown;
20
+ error?: string | null;
21
+ }
22
+ export declare class Response {
23
+ id: string;
24
+ success: boolean;
25
+ data: unknown;
26
+ error: string | null;
27
+ constructor(init: ResponseInit);
28
+ to_json(): string;
29
+ static from_json(data: string): Response;
30
+ }
@@ -0,0 +1,48 @@
1
+ export class Request {
2
+ id;
3
+ action;
4
+ session;
5
+ params;
6
+ constructor(init) {
7
+ this.id = init.id;
8
+ this.action = init.action;
9
+ this.session = init.session;
10
+ this.params = init.params ?? {};
11
+ }
12
+ to_json() {
13
+ return JSON.stringify({
14
+ id: this.id,
15
+ action: this.action,
16
+ session: this.session,
17
+ params: this.params,
18
+ });
19
+ }
20
+ static from_json(data) {
21
+ const parsed = JSON.parse(data);
22
+ return new Request(parsed);
23
+ }
24
+ }
25
+ export class Response {
26
+ id;
27
+ success;
28
+ data;
29
+ error;
30
+ constructor(init) {
31
+ this.id = init.id;
32
+ this.success = init.success;
33
+ this.data = init.data ?? null;
34
+ this.error = init.error ?? null;
35
+ }
36
+ to_json() {
37
+ return JSON.stringify({
38
+ id: this.id,
39
+ success: this.success,
40
+ data: this.data,
41
+ error: this.error,
42
+ });
43
+ }
44
+ static from_json(data) {
45
+ const parsed = JSON.parse(data);
46
+ return new Response(parsed);
47
+ }
48
+ }
@@ -0,0 +1,11 @@
1
+ import { Request, Response } from './protocol.js';
2
+ import { SessionRegistry } from './sessions.js';
3
+ export interface SkillCliServerOptions {
4
+ registry?: SessionRegistry;
5
+ }
6
+ export declare class SkillCliServer {
7
+ readonly registry: SessionRegistry;
8
+ constructor(options?: SkillCliServerOptions);
9
+ private _handle_browser_action;
10
+ handle_request(request: Request | string): Promise<Response>;
11
+ }
@@ -0,0 +1,85 @@
1
+ import { Request, Response } from './protocol.js';
2
+ import { SessionRegistry } from './sessions.js';
3
+ export class SkillCliServer {
4
+ registry;
5
+ constructor(options = {}) {
6
+ this.registry = options.registry ?? new SessionRegistry();
7
+ }
8
+ async _handle_browser_action(action, sessionName, params) {
9
+ const session = await this.registry.get_or_create_session(sessionName);
10
+ const browser_session = session.browser_session;
11
+ if (action === 'open') {
12
+ const url = String(params.url ?? '');
13
+ if (!url) {
14
+ throw new Error('Missing url');
15
+ }
16
+ await browser_session.navigate_to(url);
17
+ return { url };
18
+ }
19
+ if (action === 'click') {
20
+ const index = Number(params.index);
21
+ if (!Number.isFinite(index)) {
22
+ throw new Error('Missing index');
23
+ }
24
+ const node = await browser_session.get_dom_element_by_index(index);
25
+ if (!node) {
26
+ return {
27
+ error: `Element index ${index} not found - page may have changed`,
28
+ };
29
+ }
30
+ await browser_session._click_element_node(node);
31
+ return { clicked: index };
32
+ }
33
+ if (action === 'type') {
34
+ const text = String(params.text ?? '');
35
+ await browser_session.send_keys(text);
36
+ return { typed: text };
37
+ }
38
+ if (action === 'state') {
39
+ const state = await browser_session.get_browser_state_with_recovery({
40
+ include_screenshot: false,
41
+ });
42
+ return {
43
+ url: state.url,
44
+ title: state.title,
45
+ tabs: state.tabs,
46
+ llm_representation: state.llm_representation(),
47
+ };
48
+ }
49
+ if (action === 'close') {
50
+ await this.registry.close_session(sessionName);
51
+ return { closed: sessionName };
52
+ }
53
+ if (action === 'sessions') {
54
+ const sessions = this.registry.list_sessions();
55
+ return { sessions, count: sessions.length };
56
+ }
57
+ throw new Error(`Unknown action: ${action}`);
58
+ }
59
+ async handle_request(request) {
60
+ const req = typeof request === 'string' ? Request.from_json(request) : request;
61
+ try {
62
+ const data = await this._handle_browser_action(req.action, req.session, req.params);
63
+ if (data && typeof data === 'object' && 'error' in data) {
64
+ return new Response({
65
+ id: req.id,
66
+ success: false,
67
+ data: null,
68
+ error: String(data.error),
69
+ });
70
+ }
71
+ return new Response({
72
+ id: req.id,
73
+ success: true,
74
+ data,
75
+ });
76
+ }
77
+ catch (error) {
78
+ return new Response({
79
+ id: req.id,
80
+ success: false,
81
+ error: String(error?.message ?? error),
82
+ });
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,24 @@
1
+ import { BrowserSession } from '../browser/session.js';
2
+ export interface SessionInfo {
3
+ name: string;
4
+ browser_session: BrowserSession;
5
+ created_at: Date;
6
+ updated_at: Date;
7
+ }
8
+ export interface SessionRegistryOptions {
9
+ session_factory?: (name: string) => BrowserSession;
10
+ }
11
+ export declare class SessionRegistry {
12
+ private readonly sessions;
13
+ private readonly session_factory;
14
+ constructor(options?: SessionRegistryOptions);
15
+ get_or_create_session(name: string): Promise<SessionInfo>;
16
+ list_sessions(): {
17
+ name: string;
18
+ created_at: string;
19
+ updated_at: string;
20
+ tab_count: number;
21
+ }[];
22
+ close_session(name: string): Promise<boolean>;
23
+ close_all(): Promise<void>;
24
+ }
@@ -0,0 +1,47 @@
1
+ import { BrowserSession } from '../browser/session.js';
2
+ export class SessionRegistry {
3
+ sessions = new Map();
4
+ session_factory;
5
+ constructor(options = {}) {
6
+ this.session_factory =
7
+ options.session_factory ?? (() => new BrowserSession());
8
+ }
9
+ async get_or_create_session(name) {
10
+ const existing = this.sessions.get(name);
11
+ if (existing) {
12
+ existing.updated_at = new Date();
13
+ return existing;
14
+ }
15
+ const browser_session = this.session_factory(name);
16
+ const session = {
17
+ name,
18
+ browser_session,
19
+ created_at: new Date(),
20
+ updated_at: new Date(),
21
+ };
22
+ this.sessions.set(name, session);
23
+ return session;
24
+ }
25
+ list_sessions() {
26
+ return [...this.sessions.values()].map((session) => ({
27
+ name: session.name,
28
+ created_at: session.created_at.toISOString(),
29
+ updated_at: session.updated_at.toISOString(),
30
+ tab_count: session.browser_session.tabs.length,
31
+ }));
32
+ }
33
+ async close_session(name) {
34
+ const existing = this.sessions.get(name);
35
+ if (!existing) {
36
+ return false;
37
+ }
38
+ await existing.browser_session.stop();
39
+ this.sessions.delete(name);
40
+ return true;
41
+ }
42
+ async close_all() {
43
+ for (const name of [...this.sessions.keys()]) {
44
+ await this.close_session(name);
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,3 @@
1
+ export * from './views.js';
2
+ export * from './utils.js';
3
+ export * from './service.js';
@@ -0,0 +1,3 @@
1
+ export * from './views.js';
2
+ export * from './utils.js';
3
+ export * from './service.js';
@@ -0,0 +1,27 @@
1
+ import { build_skill_parameters_schema } from './utils.js';
2
+ import { type BrowserCookie, type ExecuteSkillInput, type SkillDefinition, type SkillExecutionResult, type SkillService } from './views.js';
3
+ interface CloudSkillServiceOptions {
4
+ skill_ids: Array<string | '*'>;
5
+ api_key?: string | null;
6
+ base_url?: string | null;
7
+ fetch_impl?: typeof fetch;
8
+ }
9
+ export declare class CloudSkillService implements SkillService {
10
+ private readonly skill_ids;
11
+ private readonly api_key;
12
+ private readonly base_url;
13
+ private readonly fetch_impl;
14
+ private initialized;
15
+ private readonly skills;
16
+ constructor(options: CloudSkillServiceOptions);
17
+ private requestJson;
18
+ private listSkillsPage;
19
+ private ensureInitialized;
20
+ get_skill(skill_id: string): Promise<SkillDefinition | null>;
21
+ get_all_skills(): Promise<SkillDefinition[]>;
22
+ execute_skill(input: ExecuteSkillInput): Promise<SkillExecutionResult>;
23
+ close(): Promise<void>;
24
+ }
25
+ export declare const register_skills_as_actions: (skills: SkillDefinition[], registerAction: (slug: string, description: string, params: ReturnType<typeof build_skill_parameters_schema>, skill: SkillDefinition) => void) => Promise<void>;
26
+ export declare const cookies_to_map: (cookies: BrowserCookie[]) => Map<string, string>;
27
+ export {};