@downcity/plugins 1.0.248 → 1.0.253
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/bin/image/ImagePlugin.d.ts +1 -1
- package/bin/image/ImagePlugin.d.ts.map +1 -1
- package/bin/image/ImagePlugin.js +23 -8
- package/bin/image/ImagePlugin.js.map +1 -1
- package/bin/image/runtime/ImageResultStorage.d.ts +14 -0
- package/bin/image/runtime/ImageResultStorage.d.ts.map +1 -0
- package/bin/image/runtime/ImageResultStorage.js +167 -0
- package/bin/image/runtime/ImageResultStorage.js.map +1 -0
- package/bin/image/types/ImagePlugin.d.ts +22 -0
- package/bin/image/types/ImagePlugin.d.ts.map +1 -1
- package/bin/web/Plugin.d.ts +25 -30
- package/bin/web/Plugin.d.ts.map +1 -1
- package/bin/web/Plugin.js +254 -110
- package/bin/web/Plugin.js.map +1 -1
- package/bin/web/providers/ComputerUseBrowserProviderAdapter.d.ts +35 -0
- package/bin/web/providers/ComputerUseBrowserProviderAdapter.d.ts.map +1 -0
- package/bin/web/providers/ComputerUseBrowserProviderAdapter.js +62 -0
- package/bin/web/providers/ComputerUseBrowserProviderAdapter.js.map +1 -0
- package/bin/web/providers/PlaywrightBrowserProvider.d.ts +43 -0
- package/bin/web/providers/PlaywrightBrowserProvider.d.ts.map +1 -0
- package/bin/web/providers/PlaywrightBrowserProvider.js +184 -0
- package/bin/web/providers/PlaywrightBrowserProvider.js.map +1 -0
- package/bin/web/providers/SemanticBrowserProviderAdapter.d.ts +39 -0
- package/bin/web/providers/SemanticBrowserProviderAdapter.d.ts.map +1 -0
- package/bin/web/providers/SemanticBrowserProviderAdapter.js +61 -0
- package/bin/web/providers/SemanticBrowserProviderAdapter.js.map +1 -0
- package/bin/web/types/ComputerUseBrowserProviderAdapter.d.ts +43 -0
- package/bin/web/types/ComputerUseBrowserProviderAdapter.d.ts.map +1 -0
- package/bin/web/types/ComputerUseBrowserProviderAdapter.js +8 -0
- package/bin/web/types/ComputerUseBrowserProviderAdapter.js.map +1 -0
- package/bin/web/types/PlaywrightBrowserProvider.d.ts +17 -0
- package/bin/web/types/PlaywrightBrowserProvider.d.ts.map +1 -0
- package/bin/web/types/PlaywrightBrowserProvider.js +7 -0
- package/bin/web/types/PlaywrightBrowserProvider.js.map +1 -0
- package/bin/web/types/SemanticBrowserProviderAdapter.d.ts +19 -0
- package/bin/web/types/SemanticBrowserProviderAdapter.d.ts.map +1 -0
- package/bin/web/types/SemanticBrowserProviderAdapter.js +8 -0
- package/bin/web/types/SemanticBrowserProviderAdapter.js.map +1 -0
- package/bin/web/types/WebPlugin.d.ts +213 -63
- package/bin/web/types/WebPlugin.d.ts.map +1 -1
- package/bin/web/types/WebPlugin.js +23 -11
- package/bin/web/types/WebPlugin.js.map +1 -1
- package/bin/web.d.ts +9 -3
- package/bin/web.d.ts.map +1 -1
- package/bin/web.js +5 -2
- package/bin/web.js.map +1 -1
- package/package.json +4 -3
- package/scripts/web-plugin.test.mjs +195 -57
- package/src/image/ImagePlugin.ts +23 -8
- package/src/image/runtime/ImageResultStorage.ts +198 -0
- package/src/image/types/ImagePlugin.ts +24 -0
- package/src/web/Plugin.ts +289 -125
- package/src/web/providers/ComputerUseBrowserProviderAdapter.ts +93 -0
- package/src/web/providers/PlaywrightBrowserProvider.ts +239 -0
- package/src/web/providers/SemanticBrowserProviderAdapter.ts +92 -0
- package/src/web/types/ComputerUseBrowserProviderAdapter.ts +58 -0
- package/src/web/types/PlaywrightBrowserProvider.ts +17 -0
- package/src/web/types/SemanticBrowserProviderAdapter.ts +30 -0
- package/src/web/types/WebPlugin.ts +236 -63
- package/src/web.ts +30 -8
- package/bin/web/PROMPT.d.ts +0 -7
- package/bin/web/PROMPT.d.ts.map +0 -1
- package/bin/web/PROMPT.js +0 -8
- package/bin/web/PROMPT.js.map +0 -1
- package/bin/web/WebPromptAssets.d.ts +0 -12
- package/bin/web/WebPromptAssets.d.ts.map +0 -1
- package/bin/web/WebPromptAssets.js +0 -13
- package/bin/web/WebPromptAssets.js.map +0 -1
- package/bin/web/runtime/Prompt.d.ts +0 -14
- package/bin/web/runtime/Prompt.d.ts.map +0 -1
- package/bin/web/runtime/Prompt.js +0 -77
- package/bin/web/runtime/Prompt.js.map +0 -1
- package/src/web/PROMPT.ts +0 -9
- package/src/web/PROMPT.ts.txt +0 -61
- package/src/web/WebPromptAssets.ts +0 -14
- package/src/web/runtime/Prompt.ts +0 -99
package/bin/web/Plugin.js
CHANGED
|
@@ -1,129 +1,273 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WebPlugin
|
|
2
|
+
* WebPlugin:provider-neutral 的联网与浏览器能力边界。
|
|
3
3
|
*
|
|
4
4
|
* 关键点(中文)
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
* - 具体执行能力由当前 agent 已注册的 tools、skills 或外部 plugin 决定。
|
|
5
|
+
* - Plugin 只编排已显式注入的 provider,不选择云厂商或模型。
|
|
6
|
+
* - 搜索、文档读取与浏览器 session 是三个独立能力。
|
|
7
|
+
* - 浏览器长期资源由 provider 拥有,并在 Plugin lifecycle.stop 时统一释放。
|
|
9
8
|
*/
|
|
10
|
-
import { BasePlugin } from "@downcity/agent";
|
|
11
|
-
import { create_action } from "@downcity/agent";
|
|
9
|
+
import { BasePlugin, create_action } from "@downcity/agent";
|
|
12
10
|
import { z } from "zod";
|
|
13
|
-
import { WEB_PLUGIN_PROMPT } from "../web/WebPromptAssets.js";
|
|
14
|
-
import { render_web_install_prompt } from "../web/runtime/Prompt.js";
|
|
15
11
|
import { WEB_PLUGIN_ACTIONS } from "../web/types/WebPlugin.js";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
12
|
+
const URL_SCHEMA = z.string().url();
|
|
13
|
+
const SESSION_ID_SCHEMA = z.string().trim().min(1);
|
|
14
|
+
const MAX_CHARS_SCHEMA = z.number().int().min(1).max(100_000).optional();
|
|
15
|
+
const BROWSER_ACTION_SCHEMA = z.discriminatedUnion("type", [
|
|
16
|
+
z.object({ type: z.literal("goto"), url: URL_SCHEMA }),
|
|
17
|
+
z.object({ type: z.literal("click"), selector: z.string().trim().min(1) }),
|
|
18
|
+
z.object({
|
|
19
|
+
type: z.literal("fill"),
|
|
20
|
+
selector: z.string().trim().min(1),
|
|
21
|
+
value: z.string(),
|
|
22
|
+
}),
|
|
23
|
+
z.object({
|
|
24
|
+
type: z.literal("press"),
|
|
25
|
+
selector: z.string().trim().min(1),
|
|
26
|
+
key: z.string().trim().min(1),
|
|
27
|
+
}),
|
|
28
|
+
z.object({
|
|
29
|
+
type: z.literal("scroll"),
|
|
30
|
+
x: z.number().optional(),
|
|
31
|
+
y: z.number().optional(),
|
|
32
|
+
}),
|
|
33
|
+
z.object({
|
|
34
|
+
type: z.literal("wait"),
|
|
35
|
+
milliseconds: z.number().int().min(0).max(60_000).optional(),
|
|
36
|
+
}),
|
|
37
|
+
]);
|
|
38
|
+
/** 把异常转换为 action 的稳定失败结果。 */
|
|
39
|
+
function failure_result(error) {
|
|
40
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
41
|
+
return { success: false, error: message, message };
|
|
44
42
|
}
|
|
45
|
-
/**
|
|
46
|
-
* WebPlugin:为 agent 注入联网任务的方法论。
|
|
47
|
-
*/
|
|
43
|
+
/** WebPlugin:组合显式注入的 Web provider。 */
|
|
48
44
|
export class WebPlugin extends BasePlugin {
|
|
49
|
-
/**
|
|
50
|
-
* 当前 plugin 稳定名称。
|
|
51
|
-
*/
|
|
45
|
+
/** 当前 plugin 稳定名称。 */
|
|
52
46
|
name = "web";
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
|
|
47
|
+
/** 插件标题。 */
|
|
48
|
+
title = "Web";
|
|
49
|
+
/** 插件说明。 */
|
|
50
|
+
description = "Provides structured web search, document reading, and browser sessions through configured providers.";
|
|
51
|
+
/** 搜索 provider。 */
|
|
52
|
+
search_provider;
|
|
53
|
+
/** 文档读取 provider。 */
|
|
54
|
+
open_provider;
|
|
55
|
+
/** 浏览器 provider。 */
|
|
56
|
+
browser_provider;
|
|
57
|
+
constructor(options) {
|
|
58
|
+
super();
|
|
59
|
+
if (!options.search && !options.open && !options.browser) {
|
|
60
|
+
throw new TypeError("WebPlugin requires at least one provider");
|
|
61
|
+
}
|
|
62
|
+
this.search_provider = options.search;
|
|
63
|
+
this.open_provider = options.open;
|
|
64
|
+
this.browser_provider = options.browser;
|
|
65
|
+
}
|
|
66
|
+
/** Agent 释放或卸载 plugin 时关闭全部浏览器资源。 */
|
|
67
|
+
lifecycle = {
|
|
68
|
+
stop: async () => {
|
|
69
|
+
await this.browser_provider?.dispose();
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
/** 给模型注入最小且与实际 actions 一致的使用说明。 */
|
|
73
|
+
system() {
|
|
74
|
+
return [
|
|
75
|
+
"# Web Plugin",
|
|
76
|
+
"",
|
|
77
|
+
"Use direct search or document reading before starting a browser session.",
|
|
78
|
+
"Use browser actions only for dynamic pages, navigation, or interaction.",
|
|
79
|
+
"Browser actions are deterministic CSS-selector operations; inspect the page before acting.",
|
|
80
|
+
"Do not perform consequential actions such as submitting, sending, purchasing, uploading, or deleting without host approval.",
|
|
81
|
+
"Close every browser session created for the task when it is no longer needed.",
|
|
82
|
+
].join("\n");
|
|
83
|
+
}
|
|
84
|
+
/** WebPlugin 结构化 actions。 */
|
|
64
85
|
actions = {
|
|
65
|
-
[WEB_PLUGIN_ACTIONS.
|
|
66
|
-
description: "
|
|
67
|
-
input_schema: {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
[WEB_PLUGIN_ACTIONS.search]: create_action({
|
|
87
|
+
description: "Search the web with the configured search provider.",
|
|
88
|
+
input_schema: z.object({
|
|
89
|
+
query: z.string().trim().min(1),
|
|
90
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
91
|
+
domains: z.array(z.string().trim().min(1)).max(50).optional(),
|
|
92
|
+
}),
|
|
93
|
+
examples: [{ title: "Search official sources", payload: { query: "Playwright CDP documentation", limit: 5 } }],
|
|
94
|
+
execute: async ({ input }) => {
|
|
95
|
+
if (!this.search_provider) {
|
|
96
|
+
return failure_result("WebPlugin search provider is not configured");
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const result = await this.search_provider(input);
|
|
100
|
+
return { success: true, data: result, message: "web search completed" };
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return failure_result(error);
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
}),
|
|
107
|
+
[WEB_PLUGIN_ACTIONS.open]: create_action({
|
|
108
|
+
description: "Read a known URL with the configured document provider.",
|
|
109
|
+
input_schema: z.object({ url: URL_SCHEMA, max_chars: MAX_CHARS_SCHEMA }),
|
|
110
|
+
examples: [{ title: "Read official documentation", payload: { url: "https://playwright.dev/docs/api/class-playwright" } }],
|
|
111
|
+
execute: async ({ input }) => {
|
|
112
|
+
if (!this.open_provider) {
|
|
113
|
+
return failure_result("WebPlugin document provider is not configured");
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const result = await this.open_provider(input);
|
|
117
|
+
return { success: true, data: result, message: "web document opened" };
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
return failure_result(error);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
}),
|
|
124
|
+
[WEB_PLUGIN_ACTIONS.browser_create_session]: create_action({
|
|
125
|
+
description: "Create a browser session with an optional initial URL.",
|
|
126
|
+
input_schema: z.object({
|
|
127
|
+
url: URL_SCHEMA.optional(),
|
|
128
|
+
include_screenshot: z.boolean().optional(),
|
|
129
|
+
}),
|
|
130
|
+
examples: [{ title: "Open a page", payload: { url: "https://example.com" } }],
|
|
131
|
+
execute: async ({ input }) => {
|
|
132
|
+
if (!this.browser_provider) {
|
|
133
|
+
return failure_result("WebPlugin browser provider is not configured");
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
const result = await this.browser_provider.create_session(input);
|
|
137
|
+
return { success: true, data: result, message: "browser session created" };
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return failure_result(error);
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
}),
|
|
144
|
+
[WEB_PLUGIN_ACTIONS.browser_observe]: create_action({
|
|
145
|
+
description: "Observe the current browser page as text and an optional screenshot.",
|
|
146
|
+
input_schema: z.object({
|
|
147
|
+
session_id: SESSION_ID_SCHEMA,
|
|
148
|
+
include_screenshot: z.boolean().optional(),
|
|
149
|
+
}),
|
|
150
|
+
execute: async ({ input }) => {
|
|
151
|
+
if (!this.browser_provider) {
|
|
152
|
+
return failure_result("WebPlugin browser provider is not configured");
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
const result = await this.browser_provider.observe(input);
|
|
156
|
+
return { success: true, data: result, message: "browser observed" };
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return failure_result(error);
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
}),
|
|
163
|
+
[WEB_PLUGIN_ACTIONS.browser_act]: create_action({
|
|
164
|
+
description: "Execute one deterministic browser action and return the resulting observation.",
|
|
165
|
+
input_schema: z.object({
|
|
166
|
+
session_id: SESSION_ID_SCHEMA,
|
|
167
|
+
action: BROWSER_ACTION_SCHEMA,
|
|
168
|
+
include_screenshot: z.boolean().optional(),
|
|
169
|
+
}),
|
|
170
|
+
examples: [{ title: "Click a link", payload: { session_id: "session-id", action: { type: "click", selector: "a" } } }],
|
|
171
|
+
execute: async ({ input }) => {
|
|
172
|
+
if (!this.browser_provider) {
|
|
173
|
+
return failure_result("WebPlugin browser provider is not configured");
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
const result = await this.browser_provider.act(input);
|
|
177
|
+
return { success: true, data: result, message: "browser action completed" };
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
return failure_result(error);
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
}),
|
|
184
|
+
[WEB_PLUGIN_ACTIONS.browser_semantic_act]: create_action({
|
|
185
|
+
description: "Execute one natural-language browser action through a semantic provider.",
|
|
186
|
+
input_schema: z.object({
|
|
187
|
+
session_id: SESSION_ID_SCHEMA,
|
|
188
|
+
instruction: z.string().trim().min(1),
|
|
189
|
+
include_screenshot: z.boolean().optional(),
|
|
190
|
+
}),
|
|
191
|
+
examples: [{
|
|
192
|
+
title: "Use a semantic browser action",
|
|
193
|
+
payload: {
|
|
194
|
+
session_id: "session-id",
|
|
195
|
+
instruction: "Click the sign in button",
|
|
85
196
|
},
|
|
86
|
-
},
|
|
197
|
+
}],
|
|
198
|
+
execute: async ({ input }) => {
|
|
199
|
+
if (!this.browser_provider?.semantic_act) {
|
|
200
|
+
return failure_result("WebPlugin semantic browser action provider is not configured");
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const result = await this.browser_provider.semantic_act(input);
|
|
204
|
+
return { success: true, data: result, message: "semantic browser action completed" };
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return failure_result(error);
|
|
208
|
+
}
|
|
87
209
|
},
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
210
|
+
}),
|
|
211
|
+
[WEB_PLUGIN_ACTIONS.browser_extract]: create_action({
|
|
212
|
+
description: "Extract text from the page body or a CSS selector.",
|
|
213
|
+
input_schema: z.object({
|
|
214
|
+
session_id: SESSION_ID_SCHEMA,
|
|
215
|
+
selector: z.string().trim().min(1).optional(),
|
|
216
|
+
max_chars: MAX_CHARS_SCHEMA,
|
|
217
|
+
}),
|
|
218
|
+
execute: async ({ input }) => {
|
|
219
|
+
if (!this.browser_provider) {
|
|
220
|
+
return failure_result("WebPlugin browser provider is not configured");
|
|
221
|
+
}
|
|
222
|
+
try {
|
|
223
|
+
const result = await this.browser_provider.extract(input);
|
|
224
|
+
return { success: true, data: result, message: "browser content extracted" };
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
return failure_result(error);
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
}),
|
|
231
|
+
[WEB_PLUGIN_ACTIONS.browser_semantic_extract]: create_action({
|
|
232
|
+
description: "Extract page content through a semantic provider.",
|
|
233
|
+
input_schema: z.object({
|
|
234
|
+
session_id: SESSION_ID_SCHEMA,
|
|
235
|
+
instruction: z.string().trim().min(1),
|
|
236
|
+
max_chars: MAX_CHARS_SCHEMA,
|
|
237
|
+
}),
|
|
238
|
+
execute: async ({ input }) => {
|
|
239
|
+
if (!this.browser_provider?.semantic_extract) {
|
|
240
|
+
return failure_result("WebPlugin semantic browser extract provider is not configured");
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
243
|
+
const result = await this.browser_provider.semantic_extract(input);
|
|
244
|
+
return { success: true, data: result, message: "semantic browser content extracted" };
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
return failure_result(error);
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
}),
|
|
251
|
+
[WEB_PLUGIN_ACTIONS.browser_close_session]: create_action({
|
|
252
|
+
description: "Close a browser session and release its page resources.",
|
|
253
|
+
input_schema: z.object({ session_id: SESSION_ID_SCHEMA }),
|
|
254
|
+
execute: async ({ input }) => {
|
|
255
|
+
if (!this.browser_provider) {
|
|
256
|
+
return failure_result("WebPlugin browser provider is not configured");
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
await this.browser_provider.close_session(input);
|
|
102
260
|
return {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
...(get_install_scope_opt(opts)
|
|
107
|
-
? { scope: get_install_scope_opt(opts) }
|
|
108
|
-
: {}),
|
|
261
|
+
success: true,
|
|
262
|
+
data: { session_id: input.session_id, closed: true },
|
|
263
|
+
message: "browser session closed",
|
|
109
264
|
};
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return {
|
|
115
|
-
success: true,
|
|
116
|
-
data: result,
|
|
117
|
-
message: "Web capability installation instructions ready; no commands were executed and no files were changed.",
|
|
118
|
-
};
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
return failure_result(error);
|
|
268
|
+
}
|
|
119
269
|
},
|
|
120
270
|
}),
|
|
121
271
|
};
|
|
122
|
-
/**
|
|
123
|
-
* 注入联网方法论提示词。
|
|
124
|
-
*/
|
|
125
|
-
system(_context) {
|
|
126
|
-
return WEB_PLUGIN_PROMPT;
|
|
127
|
-
}
|
|
128
272
|
}
|
|
129
273
|
//# sourceMappingURL=Plugin.js.map
|
package/bin/web/Plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../../src/web/Plugin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../../src/web/Plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral Computer Use 浏览器 adapter。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - adapter 不依赖 OpenAI、Anthropic 或 Google SDK。
|
|
6
|
+
* - 每次语义动作先获取带截图的当前状态,再交给宿主模型循环。
|
|
7
|
+
* - 模型回调不能直接接触 Playwright 对象,只能返回 JSON observation。
|
|
8
|
+
*/
|
|
9
|
+
import type { BrowserActInput, BrowserCloseSessionInput, BrowserCreateSessionInput, BrowserExtractInput, BrowserExtractResult, BrowserObservation, BrowserObserveInput, BrowserSemanticActInput } from "../../web/types/WebPlugin.js";
|
|
10
|
+
import type { ComputerUseBrowserProviderAdapterOptions, ComputerUseBrowserProviderMethods } from "../../web/types/ComputerUseBrowserProviderAdapter.js";
|
|
11
|
+
/** 为基础浏览器组合 Computer Use 视觉回退。 */
|
|
12
|
+
export declare class ComputerUseBrowserProviderAdapter implements ComputerUseBrowserProviderMethods {
|
|
13
|
+
/** adapter 稳定名称。 */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/** 拥有 session 的基础浏览器 provider。 */
|
|
16
|
+
private readonly browser;
|
|
17
|
+
/** Computer Use 模型回调。 */
|
|
18
|
+
private readonly run_callback;
|
|
19
|
+
constructor(options: ComputerUseBrowserProviderAdapterOptions);
|
|
20
|
+
/** 委托创建浏览器 session。 */
|
|
21
|
+
create_session(input: BrowserCreateSessionInput): Promise<BrowserObservation>;
|
|
22
|
+
/** 委托观察页面。 */
|
|
23
|
+
observe(input: BrowserObserveInput): Promise<BrowserObservation>;
|
|
24
|
+
/** 委托确定性动作。 */
|
|
25
|
+
act(input: BrowserActInput): Promise<BrowserObservation>;
|
|
26
|
+
/** 获取截图并运行一次 Computer Use 模型循环。 */
|
|
27
|
+
semantic_act(input: BrowserSemanticActInput): Promise<BrowserObservation>;
|
|
28
|
+
/** 委托页面文本抽取。 */
|
|
29
|
+
extract(input: BrowserExtractInput): Promise<BrowserExtractResult>;
|
|
30
|
+
/** Computer Use adapter 不提供结构化语义抽取。 */
|
|
31
|
+
close_session(input: BrowserCloseSessionInput): Promise<void>;
|
|
32
|
+
/** 释放基础浏览器资源。 */
|
|
33
|
+
dispose(): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ComputerUseBrowserProviderAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComputerUseBrowserProviderAdapter.d.ts","sourceRoot":"","sources":["../../../src/web/providers/ComputerUseBrowserProviderAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EAEnB,uBAAuB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,wCAAwC,EACxC,iCAAiC,EAClC,MAAM,kDAAkD,CAAC;AAE1D,kCAAkC;AAClC,qBAAa,iCACX,YAAW,iCAAiC;IAE5C,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAE1C,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkD;gBAEnE,OAAO,EAAE,wCAAwC;IAQ7D,uBAAuB;IACjB,cAAc,CAClB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,kBAAkB,CAAC;IAI9B,cAAc;IACR,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAItE,eAAe;IACT,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI9D,mCAAmC;IAC7B,YAAY,CAChB,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IAY9B,gBAAgB;IACV,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIxE,uCAAuC;IACjC,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,iBAAiB;IACX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral Computer Use 浏览器 adapter。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - adapter 不依赖 OpenAI、Anthropic 或 Google SDK。
|
|
6
|
+
* - 每次语义动作先获取带截图的当前状态,再交给宿主模型循环。
|
|
7
|
+
* - 模型回调不能直接接触 Playwright 对象,只能返回 JSON observation。
|
|
8
|
+
*/
|
|
9
|
+
/** 为基础浏览器组合 Computer Use 视觉回退。 */
|
|
10
|
+
export class ComputerUseBrowserProviderAdapter {
|
|
11
|
+
/** adapter 稳定名称。 */
|
|
12
|
+
name;
|
|
13
|
+
/** 拥有 session 的基础浏览器 provider。 */
|
|
14
|
+
browser;
|
|
15
|
+
/** Computer Use 模型回调。 */
|
|
16
|
+
run_callback;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
const name = String(options.name || "").trim();
|
|
19
|
+
if (!name)
|
|
20
|
+
throw new TypeError("ComputerUseBrowserProviderAdapter requires name");
|
|
21
|
+
this.name = name;
|
|
22
|
+
this.browser = options.browser;
|
|
23
|
+
this.run_callback = options.run;
|
|
24
|
+
}
|
|
25
|
+
/** 委托创建浏览器 session。 */
|
|
26
|
+
async create_session(input) {
|
|
27
|
+
return await this.browser.create_session(input);
|
|
28
|
+
}
|
|
29
|
+
/** 委托观察页面。 */
|
|
30
|
+
async observe(input) {
|
|
31
|
+
return await this.browser.observe(input);
|
|
32
|
+
}
|
|
33
|
+
/** 委托确定性动作。 */
|
|
34
|
+
async act(input) {
|
|
35
|
+
return await this.browser.act(input);
|
|
36
|
+
}
|
|
37
|
+
/** 获取截图并运行一次 Computer Use 模型循环。 */
|
|
38
|
+
async semantic_act(input) {
|
|
39
|
+
const observation = await this.browser.observe({
|
|
40
|
+
session_id: input.session_id,
|
|
41
|
+
include_screenshot: true,
|
|
42
|
+
});
|
|
43
|
+
return await this.run_callback({
|
|
44
|
+
instruction: input.instruction,
|
|
45
|
+
session_id: input.session_id,
|
|
46
|
+
observation,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** 委托页面文本抽取。 */
|
|
50
|
+
async extract(input) {
|
|
51
|
+
return await this.browser.extract(input);
|
|
52
|
+
}
|
|
53
|
+
/** Computer Use adapter 不提供结构化语义抽取。 */
|
|
54
|
+
async close_session(input) {
|
|
55
|
+
await this.browser.close_session(input);
|
|
56
|
+
}
|
|
57
|
+
/** 释放基础浏览器资源。 */
|
|
58
|
+
async dispose() {
|
|
59
|
+
await this.browser.dispose();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=ComputerUseBrowserProviderAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComputerUseBrowserProviderAdapter.js","sourceRoot":"","sources":["../../../src/web/providers/ComputerUseBrowserProviderAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH,kCAAkC;AAClC,MAAM,OAAO,iCAAiC;IAG5C,oBAAoB;IACX,IAAI,CAAS;IAEtB,kCAAkC;IACjB,OAAO,CAAkB;IAE1C,yBAAyB;IACR,YAAY,CAAkD;IAE/E,YAAY,OAAiD;QAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IAClC,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,cAAc,CAClB,KAAgC;QAEhC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,cAAc;IACd,KAAK,CAAC,OAAO,CAAC,KAA0B;QACtC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,eAAe;IACf,KAAK,CAAC,GAAG,CAAC,KAAsB;QAC9B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,YAAY,CAChB,KAA8B;QAE9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC7C,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,kBAAkB,EAAE,IAAI;SACzB,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC;YAC7B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,OAAO,CAAC,KAA0B;QACtC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,aAAa,CAAC,KAA+B;QACjD,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基于 Playwright/CDP 的浏览器 provider。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - provider 只连接外部已启动的 CDP 浏览器,不负责安装或启动 Chrome。
|
|
6
|
+
* - 每个 session 拥有独立 Page;连接与 session 生命周期统一由 provider 回收。
|
|
7
|
+
* - action 只暴露确定性 DOM 操作,AI 语义动作由后续 Stagehand adapter 承担。
|
|
8
|
+
*/
|
|
9
|
+
import type { BrowserActInput, BrowserCloseSessionInput, BrowserCreateSessionInput, BrowserExtractInput, BrowserExtractResult, BrowserObservation, BrowserObserveInput, BrowserProvider } from "../../web/types/WebPlugin.js";
|
|
10
|
+
import type { PlaywrightBrowserProviderOptions } from "../../web/types/PlaywrightBrowserProvider.js";
|
|
11
|
+
/** 基于 Playwright/CDP 的浏览器 provider。 */
|
|
12
|
+
export declare class PlaywrightBrowserProvider implements BrowserProvider {
|
|
13
|
+
/** provider 稳定名称。 */
|
|
14
|
+
readonly name = "playwright-cdp";
|
|
15
|
+
/** 构造参数。 */
|
|
16
|
+
private readonly options;
|
|
17
|
+
/** 当前 CDP 浏览器连接。 */
|
|
18
|
+
private browser;
|
|
19
|
+
/** 当前 provider 拥有的 session。 */
|
|
20
|
+
private readonly sessions;
|
|
21
|
+
/** provider 是否已释放。 */
|
|
22
|
+
private disposed;
|
|
23
|
+
constructor(options: PlaywrightBrowserProviderOptions);
|
|
24
|
+
/** 创建一个新的页面 session。 */
|
|
25
|
+
create_session(input: BrowserCreateSessionInput): Promise<BrowserObservation>;
|
|
26
|
+
/** 读取当前页面状态。 */
|
|
27
|
+
observe(input: BrowserObserveInput): Promise<BrowserObservation>;
|
|
28
|
+
/** 执行确定性浏览器动作。 */
|
|
29
|
+
act(input: BrowserActInput): Promise<BrowserObservation>;
|
|
30
|
+
/** 从当前页面抽取文本。 */
|
|
31
|
+
extract(input: BrowserExtractInput): Promise<BrowserExtractResult>;
|
|
32
|
+
/** 关闭指定 session 拥有的页面。 */
|
|
33
|
+
close_session(input: BrowserCloseSessionInput): Promise<void>;
|
|
34
|
+
/** 关闭所有页面和 CDP 连接。 */
|
|
35
|
+
dispose(): Promise<void>;
|
|
36
|
+
/** 懒连接 CDP 浏览器。 */
|
|
37
|
+
private get_browser;
|
|
38
|
+
/** 读取 session,不存在时抛出稳定错误。 */
|
|
39
|
+
private require_session;
|
|
40
|
+
/** 生成当前页面的模型友好观察结果。 */
|
|
41
|
+
private read_observation;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=PlaywrightBrowserProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightBrowserProvider.d.ts","sourceRoot":"","sources":["../../../src/web/providers/PlaywrightBrowserProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAkCjG,uCAAuC;AACvC,qBAAa,yBAA0B,YAAW,eAAe;IAC/D,qBAAqB;IACrB,QAAQ,CAAC,IAAI,oBAAoB;IAEjC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE,oBAAoB;IACpB,OAAO,CAAC,OAAO,CAAwB;IAEvC,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+C;IAExE,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,gCAAgC;IAgBrD,wBAAwB;IAClB,cAAc,CAClB,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,kBAAkB,CAAC;IAsB9B,gBAAgB;IACV,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAOtE,kBAAkB;IACZ,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6B9D,iBAAiB;IACX,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAkBxE,0BAA0B;IACpB,aAAa,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,sBAAsB;IAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAc9B,mBAAmB;YACL,WAAW;IAezB,6BAA6B;IAC7B,OAAO,CAAC,eAAe;IAQvB,uBAAuB;YACT,gBAAgB;CAkB/B"}
|