openclaw-cascade-plugin 1.0.2 → 1.0.4
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 +21 -16
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -10
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -39
- package/dist/index.js.map +1 -1
- package/dist/tools/a2a-tools.d.ts +1 -1
- package/dist/tools/a2a-tools.d.ts.map +1 -1
- package/dist/tools/a2a-tools.js +4 -4
- package/dist/tools/a2a-tools.js.map +1 -1
- package/dist/tools/api-tools.d.ts +1 -1
- package/dist/tools/api-tools.d.ts.map +1 -1
- package/dist/tools/api-tools.js +3 -3
- package/dist/tools/api-tools.js.map +1 -1
- package/dist/tools/desktop-automation.d.ts +1 -1
- package/dist/tools/desktop-automation.d.ts.map +1 -1
- package/dist/tools/desktop-automation.js +10 -10
- package/dist/tools/desktop-automation.js.map +1 -1
- package/dist/tools/sandbox-tools.d.ts +1 -1
- package/dist/tools/sandbox-tools.d.ts.map +1 -1
- package/dist/tools/sandbox-tools.js +2 -2
- package/dist/tools/sandbox-tools.js.map +1 -1
- package/dist/tools/web-automation.d.ts +1 -1
- package/dist/tools/web-automation.d.ts.map +1 -1
- package/dist/tools/web-automation.js +16 -16
- package/dist/tools/web-automation.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/openclaw-cascade-plugin-1.0.4.tgz +0 -0
- package/openclaw.plugin.json +9 -1
- package/package.json +3 -2
- package/scripts/postinstall.js +84 -0
- package/src/config.test.ts +3 -8
- package/src/config.ts +4 -14
- package/src/index.ts +59 -46
- package/src/tools/a2a-tools.ts +4 -4
- package/src/tools/api-tools.ts +3 -3
- package/src/tools/desktop-automation.test.ts +2 -2
- package/src/tools/desktop-automation.ts +10 -10
- package/src/tools/sandbox-tools.ts +2 -2
- package/src/tools/web-automation.test.ts +1 -1
- package/src/tools/web-automation.ts +16 -16
- package/src/types/index.ts +1 -0
package/src/tools/api-tools.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { CascadeMcpClient } from '../cascade-client';
|
|
|
9
9
|
import { ToolResponse } from '../types';
|
|
10
10
|
import { errorResponse, formatSuccess } from './response-helpers';
|
|
11
11
|
|
|
12
|
-
export function registerApiTools(registry: ToolRegistry,
|
|
12
|
+
export function registerApiTools(registry: ToolRegistry, getClient: () => Promise<CascadeMcpClient>): void {
|
|
13
13
|
// 1. cascade_web_search
|
|
14
14
|
registry.register({
|
|
15
15
|
name: 'cascade_web_search',
|
|
@@ -35,7 +35,7 @@ export function registerApiTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
35
35
|
return errorResponse('query is required');
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
const result = await
|
|
38
|
+
const result = await await (await getClient()).callTool('web_search', {
|
|
39
39
|
query: args.query,
|
|
40
40
|
top_k: args.top_k || 5
|
|
41
41
|
});
|
|
@@ -91,7 +91,7 @@ export function registerApiTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
91
91
|
return errorResponse('url is required');
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
const result = await
|
|
94
|
+
const result = await await (await getClient()).callTool('call_http_api', {
|
|
95
95
|
method: args.method,
|
|
96
96
|
url: args.url,
|
|
97
97
|
headers: args.headers,
|
|
@@ -13,7 +13,7 @@ describe('Desktop Automation Tools', () => {
|
|
|
13
13
|
beforeEach(() => {
|
|
14
14
|
registry = new ToolRegistry();
|
|
15
15
|
mockClient = new MockCascadeMcpClient();
|
|
16
|
-
registerDesktopTools(registry, mockClient as any);
|
|
16
|
+
registerDesktopTools(registry, async () => mockClient as any);
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
describe('cascade_click_element', () => {
|
|
@@ -174,7 +174,7 @@ describe('Desktop Automation Tools', () => {
|
|
|
174
174
|
// Arrange
|
|
175
175
|
const largeImage = 'A'.repeat(5000000); // 5MB base64 = ~3.75MB actual
|
|
176
176
|
const diskRegistry = new ToolRegistry();
|
|
177
|
-
registerDesktopTools(diskRegistry, mockClient as any, { screenshotMode: 'disk' } as any);
|
|
177
|
+
registerDesktopTools(diskRegistry, async () => mockClient as any, { screenshotMode: 'disk' } as any);
|
|
178
178
|
|
|
179
179
|
mockClient.registerMockTool('get_screenshot', () => ({
|
|
180
180
|
image: largeImage,
|
|
@@ -17,7 +17,7 @@ const MAX_EMBED_SIZE = 4 * 1024 * 1024;
|
|
|
17
17
|
|
|
18
18
|
export function registerDesktopTools(
|
|
19
19
|
registry: ToolRegistry,
|
|
20
|
-
|
|
20
|
+
getClient: () => Promise<CascadeMcpClient>,
|
|
21
21
|
config?: CascadePluginConfig
|
|
22
22
|
): void {
|
|
23
23
|
const screenshotMode = config?.screenshotMode || 'auto';
|
|
@@ -58,7 +58,7 @@ export function registerDesktopTools(
|
|
|
58
58
|
return errorResponse('platform_source is required');
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
const result = await
|
|
61
|
+
const result = await await (await getClient()).callTool('click_element', args);
|
|
62
62
|
return formatSuccess(result);
|
|
63
63
|
} catch (error) {
|
|
64
64
|
return errorResponse(
|
|
@@ -112,7 +112,7 @@ export function registerDesktopTools(
|
|
|
112
112
|
return errorResponse('text is required');
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
const result = await
|
|
115
|
+
const result = await await (await getClient()).callTool('type_text', args);
|
|
116
116
|
return formatSuccess(result);
|
|
117
117
|
} catch (error) {
|
|
118
118
|
return errorResponse(
|
|
@@ -132,7 +132,7 @@ export function registerDesktopTools(
|
|
|
132
132
|
},
|
|
133
133
|
handler: async (): Promise<ToolResponse> => {
|
|
134
134
|
try {
|
|
135
|
-
const result = await
|
|
135
|
+
const result = await await (await getClient()).callTool('get_semantic_tree', {});
|
|
136
136
|
return formatSuccess(result);
|
|
137
137
|
} catch (error) {
|
|
138
138
|
return errorResponse(
|
|
@@ -152,7 +152,7 @@ export function registerDesktopTools(
|
|
|
152
152
|
},
|
|
153
153
|
handler: async (): Promise<ToolResponse> => {
|
|
154
154
|
try {
|
|
155
|
-
const result = await
|
|
155
|
+
const result = await await (await getClient()).callTool('get_screenshot', {});
|
|
156
156
|
|
|
157
157
|
if (!result.image) {
|
|
158
158
|
return errorResponse('No image data received');
|
|
@@ -209,7 +209,7 @@ export function registerDesktopTools(
|
|
|
209
209
|
return errorResponse('app_name is required');
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
const result = await
|
|
212
|
+
const result = await await (await getClient()).callTool('start_app', args);
|
|
213
213
|
return formatSuccess(result);
|
|
214
214
|
} catch (error) {
|
|
215
215
|
return errorResponse(
|
|
@@ -246,7 +246,7 @@ export function registerDesktopTools(
|
|
|
246
246
|
},
|
|
247
247
|
handler: async (args): Promise<ToolResponse> => {
|
|
248
248
|
try {
|
|
249
|
-
const result = await
|
|
249
|
+
const result = await await (await getClient()).callTool('hover_element', args);
|
|
250
250
|
return formatSuccess(result);
|
|
251
251
|
} catch (error) {
|
|
252
252
|
return errorResponse(
|
|
@@ -282,7 +282,7 @@ export function registerDesktopTools(
|
|
|
282
282
|
},
|
|
283
283
|
handler: async (args): Promise<ToolResponse> => {
|
|
284
284
|
try {
|
|
285
|
-
const result = await
|
|
285
|
+
const result = await await (await getClient()).callTool('focus_element', args);
|
|
286
286
|
return formatSuccess(result);
|
|
287
287
|
} catch (error) {
|
|
288
288
|
return errorResponse(
|
|
@@ -318,7 +318,7 @@ export function registerDesktopTools(
|
|
|
318
318
|
},
|
|
319
319
|
handler: async (args): Promise<ToolResponse> => {
|
|
320
320
|
try {
|
|
321
|
-
const result = await
|
|
321
|
+
const result = await await (await getClient()).callTool('scroll_element', args);
|
|
322
322
|
return formatSuccess(result);
|
|
323
323
|
} catch (error) {
|
|
324
324
|
return errorResponse(
|
|
@@ -354,7 +354,7 @@ export function registerDesktopTools(
|
|
|
354
354
|
},
|
|
355
355
|
handler: async (args): Promise<ToolResponse> => {
|
|
356
356
|
try {
|
|
357
|
-
const result = await
|
|
357
|
+
const result = await await (await getClient()).callTool('wait_visible', args);
|
|
358
358
|
return formatSuccess(result);
|
|
359
359
|
} catch (error) {
|
|
360
360
|
return errorResponse(
|
|
@@ -9,7 +9,7 @@ import { CascadeMcpClient } from '../cascade-client';
|
|
|
9
9
|
import { ToolResponse } from '../types';
|
|
10
10
|
import { errorResponse, formatSuccess } from './response-helpers';
|
|
11
11
|
|
|
12
|
-
export function registerSandboxTools(registry: ToolRegistry,
|
|
12
|
+
export function registerSandboxTools(registry: ToolRegistry, getClient: () => Promise<CascadeMcpClient>): void {
|
|
13
13
|
registry.register({
|
|
14
14
|
name: 'cascade_execute_sandbox_skill',
|
|
15
15
|
description: 'Execute a Python sandbox skill for programmatic file automation',
|
|
@@ -63,7 +63,7 @@ export function registerSandboxTools(registry: ToolRegistry, client: CascadeMcpC
|
|
|
63
63
|
return errorResponse('task is required');
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
const result = await
|
|
66
|
+
const result = await await (await getClient()).callTool('execute_sandbox_skill', {
|
|
67
67
|
skill_id: args.skill_id,
|
|
68
68
|
task: args.task,
|
|
69
69
|
inputs: args.inputs || {},
|
|
@@ -13,7 +13,7 @@ describe('Web Automation Tools', () => {
|
|
|
13
13
|
beforeEach(() => {
|
|
14
14
|
registry = new ToolRegistry();
|
|
15
15
|
mockClient = new MockCascadeMcpClient();
|
|
16
|
-
registerWebTools(registry, mockClient as any);
|
|
16
|
+
registerWebTools(registry, async () => mockClient as any);
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
describe('Navigation Tools', () => {
|
|
@@ -9,7 +9,7 @@ import { CascadeMcpClient } from '../cascade-client';
|
|
|
9
9
|
import { ToolResponse } from '../types';
|
|
10
10
|
import { errorResponse, formatSuccess } from './response-helpers';
|
|
11
11
|
|
|
12
|
-
export function registerWebTools(registry: ToolRegistry,
|
|
12
|
+
export function registerWebTools(registry: ToolRegistry, getClient: () => Promise<CascadeMcpClient>): void {
|
|
13
13
|
// Navigation Tools (5)
|
|
14
14
|
|
|
15
15
|
// 1. cascade_pw_goto
|
|
@@ -38,7 +38,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
38
38
|
return errorResponse('url is required');
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
const result = await
|
|
41
|
+
const result = await await (await getClient()).callTool('pw_goto', {
|
|
42
42
|
url: args.url,
|
|
43
43
|
wait_until: args.wait_until || 'networkidle'
|
|
44
44
|
});
|
|
@@ -62,7 +62,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
62
62
|
},
|
|
63
63
|
handler: async (): Promise<ToolResponse> => {
|
|
64
64
|
try {
|
|
65
|
-
const result = await
|
|
65
|
+
const result = await await (await getClient()).callTool('pw_back', {});
|
|
66
66
|
return formatSuccess(result);
|
|
67
67
|
} catch (error) {
|
|
68
68
|
return errorResponse(
|
|
@@ -82,7 +82,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
82
82
|
},
|
|
83
83
|
handler: async (): Promise<ToolResponse> => {
|
|
84
84
|
try {
|
|
85
|
-
const result = await
|
|
85
|
+
const result = await await (await getClient()).callTool('pw_forward', {});
|
|
86
86
|
return formatSuccess(result);
|
|
87
87
|
} catch (error) {
|
|
88
88
|
return errorResponse(
|
|
@@ -108,7 +108,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
108
108
|
},
|
|
109
109
|
handler: async (args): Promise<ToolResponse> => {
|
|
110
110
|
try {
|
|
111
|
-
const result = await
|
|
111
|
+
const result = await await (await getClient()).callTool('pw_reload', {
|
|
112
112
|
wait_until: args.wait_until || 'networkidle'
|
|
113
113
|
});
|
|
114
114
|
return formatSuccess(result);
|
|
@@ -145,7 +145,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
145
145
|
return errorResponse('url is required');
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
const result = await
|
|
148
|
+
const result = await await (await getClient()).callTool('pw_wait_for_url', {
|
|
149
149
|
url: args.url,
|
|
150
150
|
timeout_ms: args.timeout_ms || 10000
|
|
151
151
|
});
|
|
@@ -181,7 +181,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
181
181
|
return errorResponse('selector is required');
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
const result = await
|
|
184
|
+
const result = await await (await getClient()).callTool('pw_locator_count', {
|
|
185
185
|
selector: args.selector
|
|
186
186
|
});
|
|
187
187
|
return formatSuccess({ count: result.count });
|
|
@@ -218,7 +218,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
218
218
|
return errorResponse('selector is required');
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
const result = await
|
|
221
|
+
const result = await await (await getClient()).callTool('pw_locator_text', {
|
|
222
222
|
selector: args.selector,
|
|
223
223
|
timeout_ms: args.timeout_ms || 8000
|
|
224
224
|
});
|
|
@@ -257,7 +257,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
257
257
|
return errorResponse('selector is required');
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
const result = await
|
|
260
|
+
const result = await await (await getClient()).callTool('pw_click', {
|
|
261
261
|
selector: args.selector,
|
|
262
262
|
timeout_ms: args.timeout_ms || 8000
|
|
263
263
|
});
|
|
@@ -302,7 +302,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
302
302
|
return errorResponse('text is required');
|
|
303
303
|
}
|
|
304
304
|
|
|
305
|
-
const result = await
|
|
305
|
+
const result = await await (await getClient()).callTool('pw_fill', {
|
|
306
306
|
selector: args.selector,
|
|
307
307
|
text: args.text,
|
|
308
308
|
timeout_ms: args.timeout_ms || 8000
|
|
@@ -347,7 +347,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
347
347
|
return errorResponse('key is required');
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
-
const result = await
|
|
350
|
+
const result = await await (await getClient()).callTool('pw_press', {
|
|
351
351
|
selector: args.selector,
|
|
352
352
|
key: args.key,
|
|
353
353
|
timeout_ms: args.timeout_ms || 8000
|
|
@@ -389,7 +389,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
389
389
|
return errorResponse('values is required and must be an array');
|
|
390
390
|
}
|
|
391
391
|
|
|
392
|
-
const result = await
|
|
392
|
+
const result = await await (await getClient()).callTool('pw_select_option', {
|
|
393
393
|
selector: args.selector,
|
|
394
394
|
values: args.values
|
|
395
395
|
});
|
|
@@ -424,7 +424,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
424
424
|
return errorResponse('expression is required');
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
-
const result = await
|
|
427
|
+
const result = await await (await getClient()).callTool('pw_eval', {
|
|
428
428
|
expression: args.expression
|
|
429
429
|
});
|
|
430
430
|
return formatSuccess({ result: result.result });
|
|
@@ -463,7 +463,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
463
463
|
return errorResponse('expression is required');
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
-
const result = await
|
|
466
|
+
const result = await await (await getClient()).callTool('pw_eval_on_selector', {
|
|
467
467
|
selector: args.selector,
|
|
468
468
|
expression: args.expression
|
|
469
469
|
});
|
|
@@ -486,7 +486,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
486
486
|
},
|
|
487
487
|
handler: async (): Promise<ToolResponse> => {
|
|
488
488
|
try {
|
|
489
|
-
const result = await
|
|
489
|
+
const result = await await (await getClient()).callTool('pw_list_frames', {});
|
|
490
490
|
return formatSuccess({ frames: result.frames });
|
|
491
491
|
} catch (error) {
|
|
492
492
|
return errorResponse(
|
|
@@ -506,7 +506,7 @@ export function registerWebTools(registry: ToolRegistry, client: CascadeMcpClien
|
|
|
506
506
|
},
|
|
507
507
|
handler: async (): Promise<ToolResponse> => {
|
|
508
508
|
try {
|
|
509
|
-
const result = await
|
|
509
|
+
const result = await await (await getClient()).callTool('pw_get_cookies', {});
|
|
510
510
|
return formatSuccess({ cookies: result.cookies });
|
|
511
511
|
} catch (error) {
|
|
512
512
|
return errorResponse(
|