@skillful-agents/agent-computer 0.0.4 → 0.0.6
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/ac-core-darwin-arm64 +0 -0
- package/bin/ac-core-darwin-x64 +0 -0
- package/bin/ac-core-win32-arm64.exe +0 -0
- package/bin/ac-core-win32-x64.exe +0 -0
- package/dist/src/platform/resolve.d.ts.map +1 -1
- package/dist/src/platform/resolve.js +5 -3
- package/dist/src/platform/resolve.js.map +1 -1
- package/dist-cjs/bin/ac.js +127 -0
- package/dist-cjs/package.json +1 -0
- package/dist-cjs/src/bridge.js +693 -0
- package/dist-cjs/src/cdp/ax-tree.js +162 -0
- package/dist-cjs/src/cdp/bounds.js +66 -0
- package/dist-cjs/src/cdp/client.js +272 -0
- package/dist-cjs/src/cdp/connection.js +285 -0
- package/dist-cjs/src/cdp/diff.js +55 -0
- package/dist-cjs/src/cdp/discovery.js +91 -0
- package/dist-cjs/src/cdp/index.js +27 -0
- package/dist-cjs/src/cdp/interactions.js +301 -0
- package/dist-cjs/src/cdp/port-manager.js +68 -0
- package/dist-cjs/src/cdp/role-map.js +102 -0
- package/dist-cjs/src/cdp/types.js +2 -0
- package/dist-cjs/src/cli/commands/apps.js +63 -0
- package/dist-cjs/src/cli/commands/batch.js +37 -0
- package/dist-cjs/src/cli/commands/click.js +61 -0
- package/dist-cjs/src/cli/commands/clipboard.js +31 -0
- package/dist-cjs/src/cli/commands/dialog.js +45 -0
- package/dist-cjs/src/cli/commands/drag.js +26 -0
- package/dist-cjs/src/cli/commands/find.js +99 -0
- package/dist-cjs/src/cli/commands/menu.js +36 -0
- package/dist-cjs/src/cli/commands/screenshot.js +27 -0
- package/dist-cjs/src/cli/commands/scroll.js +77 -0
- package/dist-cjs/src/cli/commands/session.js +27 -0
- package/dist-cjs/src/cli/commands/snapshot.js +24 -0
- package/dist-cjs/src/cli/commands/type.js +69 -0
- package/dist-cjs/src/cli/commands/windowmgmt.js +62 -0
- package/dist-cjs/src/cli/commands/windows.js +10 -0
- package/dist-cjs/src/cli/commands.js +215 -0
- package/dist-cjs/src/cli/output.js +253 -0
- package/dist-cjs/src/cli/parser.js +128 -0
- package/dist-cjs/src/config.js +79 -0
- package/dist-cjs/src/daemon.js +183 -0
- package/dist-cjs/src/errors.js +118 -0
- package/dist-cjs/src/index.js +24 -0
- package/dist-cjs/src/platform/index.js +16 -0
- package/dist-cjs/src/platform/resolve.js +71 -0
- package/dist-cjs/src/refs.js +91 -0
- package/dist-cjs/src/sdk.js +288 -0
- package/dist-cjs/src/types.js +11 -0
- package/package.json +4 -2
- package/scripts/fix-cjs-resolve.js +27 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
(0, commands_js_1.registerCommand)('dialog', async (args, bridge) => {
|
|
5
|
+
const sub = args.subcommand;
|
|
6
|
+
if (sub === 'accept' || sub === 'ok' || sub === 'yes') {
|
|
7
|
+
const params = {};
|
|
8
|
+
if (args.flags['app'])
|
|
9
|
+
params.app = args.flags['app'];
|
|
10
|
+
const result = await bridge.send('dialog_accept', params);
|
|
11
|
+
return { data: result, exitCode: 0 };
|
|
12
|
+
}
|
|
13
|
+
if (sub === 'cancel' || sub === 'dismiss' || sub === 'no') {
|
|
14
|
+
const params = {};
|
|
15
|
+
if (args.flags['app'])
|
|
16
|
+
params.app = args.flags['app'];
|
|
17
|
+
const result = await bridge.send('dialog_cancel', params);
|
|
18
|
+
return { data: result, exitCode: 0 };
|
|
19
|
+
}
|
|
20
|
+
if (sub === 'file') {
|
|
21
|
+
const path = args.positional[0];
|
|
22
|
+
if (!path) {
|
|
23
|
+
return { data: { error: 'Usage: agent-computer dialog file <path>' }, exitCode: 1 };
|
|
24
|
+
}
|
|
25
|
+
const params = { path };
|
|
26
|
+
if (args.flags['app'])
|
|
27
|
+
params.app = args.flags['app'];
|
|
28
|
+
const result = await bridge.send('dialog_file', params);
|
|
29
|
+
return { data: result, exitCode: 0 };
|
|
30
|
+
}
|
|
31
|
+
// Default: detect dialog
|
|
32
|
+
const params = {};
|
|
33
|
+
if (args.flags['app'])
|
|
34
|
+
params.app = args.flags['app'];
|
|
35
|
+
const result = await bridge.send('dialog', params);
|
|
36
|
+
return { data: result, exitCode: 0 };
|
|
37
|
+
});
|
|
38
|
+
(0, commands_js_1.registerCommand)('alert', async (args, bridge) => {
|
|
39
|
+
// Alias for dialog
|
|
40
|
+
const params = {};
|
|
41
|
+
if (args.flags['app'])
|
|
42
|
+
params.app = args.flags['app'];
|
|
43
|
+
const result = await bridge.send('dialog', params);
|
|
44
|
+
return { data: result, exitCode: 0 };
|
|
45
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
(0, commands_js_1.registerCommand)('drag', async (args, bridge) => {
|
|
5
|
+
const params = {};
|
|
6
|
+
// Support ref-based: ac drag @b1 @b2
|
|
7
|
+
// Or coordinate-based: ac drag --from-x 100 --from-y 200 --to-x 300 --to-y 400
|
|
8
|
+
if (args.positional[0])
|
|
9
|
+
params.from_ref = args.positional[0];
|
|
10
|
+
if (args.positional[1])
|
|
11
|
+
params.to_ref = args.positional[1];
|
|
12
|
+
if (args.flags['from-x'])
|
|
13
|
+
params.from_x = parseFloat(args.flags['from-x']);
|
|
14
|
+
if (args.flags['from-y'])
|
|
15
|
+
params.from_y = parseFloat(args.flags['from-y']);
|
|
16
|
+
if (args.flags['to-x'])
|
|
17
|
+
params.to_x = parseFloat(args.flags['to-x']);
|
|
18
|
+
if (args.flags['to-y'])
|
|
19
|
+
params.to_y = parseFloat(args.flags['to-y']);
|
|
20
|
+
if (args.flags['duration'])
|
|
21
|
+
params.duration = parseFloat(args.flags['duration']);
|
|
22
|
+
if (args.flags['steps'])
|
|
23
|
+
params.steps = parseInt(args.flags['steps'], 10);
|
|
24
|
+
const result = await bridge.send('drag', params);
|
|
25
|
+
return { data: result, exitCode: 0 };
|
|
26
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
const parser_js_1 = require("../parser.js");
|
|
5
|
+
(0, commands_js_1.registerCommand)('find', async (args, bridge) => {
|
|
6
|
+
const params = {};
|
|
7
|
+
if (args.positional[0])
|
|
8
|
+
params.text = args.positional[0];
|
|
9
|
+
if (args.flags['role'])
|
|
10
|
+
params.role = args.flags['role'];
|
|
11
|
+
if (args.flags['first'])
|
|
12
|
+
params.first = true;
|
|
13
|
+
if (args.flags['app'])
|
|
14
|
+
params.app = args.flags['app'];
|
|
15
|
+
const result = await bridge.send('find', params);
|
|
16
|
+
return { data: result, exitCode: 0 };
|
|
17
|
+
});
|
|
18
|
+
(0, commands_js_1.registerCommand)('read', async (args, bridge) => {
|
|
19
|
+
const sel = args.positional[0];
|
|
20
|
+
if (!sel) {
|
|
21
|
+
return { data: { error: 'Usage: agent-computer read <ref> [--attr <name>]' }, exitCode: 1 };
|
|
22
|
+
}
|
|
23
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
24
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
25
|
+
const params = { ref };
|
|
26
|
+
if (args.flags['attr'])
|
|
27
|
+
params.attr = args.flags['attr'];
|
|
28
|
+
const result = await bridge.send('read', params);
|
|
29
|
+
return { data: result, exitCode: 0 };
|
|
30
|
+
});
|
|
31
|
+
(0, commands_js_1.registerCommand)('title', async (args, bridge) => {
|
|
32
|
+
const params = {};
|
|
33
|
+
if (args.flags['app'])
|
|
34
|
+
params.app = true;
|
|
35
|
+
const result = await bridge.send('title', params);
|
|
36
|
+
return { data: result, exitCode: 0 };
|
|
37
|
+
});
|
|
38
|
+
(0, commands_js_1.registerCommand)('is', async (args, bridge) => {
|
|
39
|
+
const state = args.subcommand;
|
|
40
|
+
const sel = args.positional[0];
|
|
41
|
+
if (!state || !sel) {
|
|
42
|
+
return { data: { error: 'Usage: agent-computer is <visible|enabled|focused|checked> <ref>' }, exitCode: 1 };
|
|
43
|
+
}
|
|
44
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
45
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
46
|
+
const result = await bridge.send('is', { state, ref });
|
|
47
|
+
return { data: result, exitCode: 0 };
|
|
48
|
+
});
|
|
49
|
+
(0, commands_js_1.registerCommand)('box', async (args, bridge) => {
|
|
50
|
+
const sel = args.positional[0];
|
|
51
|
+
if (!sel) {
|
|
52
|
+
return { data: { error: 'Usage: agent-computer box <ref>' }, exitCode: 1 };
|
|
53
|
+
}
|
|
54
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
55
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
56
|
+
const result = await bridge.send('box', { ref });
|
|
57
|
+
return { data: result, exitCode: 0 };
|
|
58
|
+
});
|
|
59
|
+
(0, commands_js_1.registerCommand)('children', async (args, bridge) => {
|
|
60
|
+
const sel = args.positional[0];
|
|
61
|
+
if (!sel) {
|
|
62
|
+
return { data: { error: 'Usage: agent-computer children <ref>' }, exitCode: 1 };
|
|
63
|
+
}
|
|
64
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
65
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
66
|
+
const result = await bridge.send('children', { ref });
|
|
67
|
+
return { data: result, exitCode: 0 };
|
|
68
|
+
});
|
|
69
|
+
(0, commands_js_1.registerCommand)('wait', async (args, bridge) => {
|
|
70
|
+
const params = {};
|
|
71
|
+
// Wait for fixed duration
|
|
72
|
+
if (args.positional[0] && /^\d+$/.test(args.positional[0])) {
|
|
73
|
+
params.ms = parseInt(args.positional[0], 10);
|
|
74
|
+
}
|
|
75
|
+
else if (args.positional[0]) {
|
|
76
|
+
// Wait for element
|
|
77
|
+
const parsed = (0, parser_js_1.parseSelector)(args.positional[0]);
|
|
78
|
+
if (parsed.type === 'ref')
|
|
79
|
+
params.ref = parsed.ref;
|
|
80
|
+
else
|
|
81
|
+
params.ref = args.positional[0];
|
|
82
|
+
}
|
|
83
|
+
if (args.flags['app'])
|
|
84
|
+
params.app = args.flags['app'];
|
|
85
|
+
if (args.flags['window'])
|
|
86
|
+
params.window = args.flags['window'];
|
|
87
|
+
if (args.flags['text'])
|
|
88
|
+
params.text = args.flags['text'];
|
|
89
|
+
if (args.flags['hidden'])
|
|
90
|
+
params.hidden = true;
|
|
91
|
+
if (args.flags['enabled'])
|
|
92
|
+
params.enabled = true;
|
|
93
|
+
if (args.flags['gone'])
|
|
94
|
+
params.gone = true;
|
|
95
|
+
if (args.flags['timeout'])
|
|
96
|
+
params.timeout = parseInt(args.flags['timeout'], 10);
|
|
97
|
+
const result = await bridge.send('wait', params);
|
|
98
|
+
return { data: result, exitCode: 0 };
|
|
99
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
(0, commands_js_1.registerCommand)('menu', async (args, bridge) => {
|
|
5
|
+
const sub = args.subcommand;
|
|
6
|
+
if (sub === 'list') {
|
|
7
|
+
// ac menu list [name] [--all] [--app name]
|
|
8
|
+
const params = {};
|
|
9
|
+
if (args.positional[0])
|
|
10
|
+
params.menu = args.positional[0];
|
|
11
|
+
if (args.flags['all'])
|
|
12
|
+
params.all = true;
|
|
13
|
+
if (args.flags['app'])
|
|
14
|
+
params.app = args.flags['app'];
|
|
15
|
+
const result = await bridge.send('menu_list', params);
|
|
16
|
+
return { data: result, exitCode: 0 };
|
|
17
|
+
}
|
|
18
|
+
if (sub) {
|
|
19
|
+
// ac menu "File > Save" — click by path
|
|
20
|
+
const params = { path: sub };
|
|
21
|
+
if (args.flags['app'])
|
|
22
|
+
params.app = args.flags['app'];
|
|
23
|
+
const result = await bridge.send('menu_click', params);
|
|
24
|
+
return { data: result, exitCode: 0 };
|
|
25
|
+
}
|
|
26
|
+
return { data: { error: 'Usage: agent-computer menu <path> | agent-computer menu list [name]' }, exitCode: 1 };
|
|
27
|
+
});
|
|
28
|
+
(0, commands_js_1.registerCommand)('menubar', async (args, bridge) => {
|
|
29
|
+
const sub = args.subcommand;
|
|
30
|
+
if (sub === 'click' && args.positional[0]) {
|
|
31
|
+
// Click a menubar extra — not fully implemented yet
|
|
32
|
+
return { data: { error: 'menubar click not yet implemented' }, exitCode: 1 };
|
|
33
|
+
}
|
|
34
|
+
const result = await bridge.send('menubar');
|
|
35
|
+
return { data: result, exitCode: 0 };
|
|
36
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
(0, commands_js_1.registerCommand)('screenshot', async (args, bridge) => {
|
|
5
|
+
const params = {};
|
|
6
|
+
// Optional output path as first positional arg
|
|
7
|
+
if (args.positional[0])
|
|
8
|
+
params.path = args.positional[0];
|
|
9
|
+
if (args.flags['screen'])
|
|
10
|
+
params.screen = true;
|
|
11
|
+
if (args.flags['retina'])
|
|
12
|
+
params.retina = true;
|
|
13
|
+
if (args.flags['format'])
|
|
14
|
+
params.format = args.flags['format'];
|
|
15
|
+
if (args.flags['quality'])
|
|
16
|
+
params.quality = parseInt(args.flags['quality'], 10);
|
|
17
|
+
if (args.flags['window'])
|
|
18
|
+
params.ref = args.flags['window'];
|
|
19
|
+
if (args.flags['annotate'])
|
|
20
|
+
params.annotate = true;
|
|
21
|
+
const result = await bridge.send('screenshot', params);
|
|
22
|
+
return { data: result, exitCode: 0 };
|
|
23
|
+
});
|
|
24
|
+
(0, commands_js_1.registerCommand)('displays', async (_args, bridge) => {
|
|
25
|
+
const result = await bridge.send('displays');
|
|
26
|
+
return { data: result, exitCode: 0 };
|
|
27
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
const parser_js_1 = require("../parser.js");
|
|
5
|
+
(0, commands_js_1.registerCommand)('scroll', async (args, bridge) => {
|
|
6
|
+
const direction = args.subcommand;
|
|
7
|
+
if (!direction || !['up', 'down', 'left', 'right'].includes(direction)) {
|
|
8
|
+
return { data: { error: 'Usage: agent-computer scroll <up|down|left|right> [amount] [--on <sel>] [--smooth] [--pixels <n>]' }, exitCode: 1 };
|
|
9
|
+
}
|
|
10
|
+
const params = { direction };
|
|
11
|
+
if (args.positional[0])
|
|
12
|
+
params.amount = parseInt(args.positional[0], 10);
|
|
13
|
+
if (args.flags['on'])
|
|
14
|
+
params.on = args.flags['on'];
|
|
15
|
+
if (args.flags['smooth'])
|
|
16
|
+
params.smooth = true;
|
|
17
|
+
if (args.flags['pixels'])
|
|
18
|
+
params.pixels = parseInt(args.flags['pixels'], 10);
|
|
19
|
+
const result = await bridge.send('scroll', params);
|
|
20
|
+
return { data: result, exitCode: 0 };
|
|
21
|
+
});
|
|
22
|
+
(0, commands_js_1.registerCommand)('focus', async (args, bridge) => {
|
|
23
|
+
const sel = args.positional[0];
|
|
24
|
+
if (!sel) {
|
|
25
|
+
return { data: { error: 'Usage: agent-computer focus <ref>' }, exitCode: 1 };
|
|
26
|
+
}
|
|
27
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
28
|
+
const params = {};
|
|
29
|
+
if (parsed.type === 'ref')
|
|
30
|
+
params.ref = parsed.ref;
|
|
31
|
+
else
|
|
32
|
+
params.ref = sel;
|
|
33
|
+
const result = await bridge.send('focus', params);
|
|
34
|
+
return { data: result, exitCode: 0 };
|
|
35
|
+
});
|
|
36
|
+
(0, commands_js_1.registerCommand)('select', async (args, bridge) => {
|
|
37
|
+
const sel = args.positional[0];
|
|
38
|
+
const value = args.positional[1];
|
|
39
|
+
if (!sel || !value) {
|
|
40
|
+
return { data: { error: 'Usage: agent-computer select <ref> <value>' }, exitCode: 1 };
|
|
41
|
+
}
|
|
42
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
43
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
44
|
+
const result = await bridge.send('select', { ref, value });
|
|
45
|
+
return { data: result, exitCode: 0 };
|
|
46
|
+
});
|
|
47
|
+
(0, commands_js_1.registerCommand)('check', async (args, bridge) => {
|
|
48
|
+
const sel = args.positional[0];
|
|
49
|
+
if (!sel) {
|
|
50
|
+
return { data: { error: 'Usage: agent-computer check <ref>' }, exitCode: 1 };
|
|
51
|
+
}
|
|
52
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
53
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
54
|
+
const result = await bridge.send('check', { ref });
|
|
55
|
+
return { data: result, exitCode: 0 };
|
|
56
|
+
});
|
|
57
|
+
(0, commands_js_1.registerCommand)('uncheck', async (args, bridge) => {
|
|
58
|
+
const sel = args.positional[0];
|
|
59
|
+
if (!sel) {
|
|
60
|
+
return { data: { error: 'Usage: agent-computer uncheck <ref>' }, exitCode: 1 };
|
|
61
|
+
}
|
|
62
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
63
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
64
|
+
const result = await bridge.send('uncheck', { ref });
|
|
65
|
+
return { data: result, exitCode: 0 };
|
|
66
|
+
});
|
|
67
|
+
(0, commands_js_1.registerCommand)('set', async (args, bridge) => {
|
|
68
|
+
const sel = args.positional[0];
|
|
69
|
+
const value = args.positional[1];
|
|
70
|
+
if (!sel || value === undefined) {
|
|
71
|
+
return { data: { error: 'Usage: agent-computer set <ref> <value>' }, exitCode: 1 };
|
|
72
|
+
}
|
|
73
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
74
|
+
const ref = parsed.type === 'ref' ? parsed.ref : sel;
|
|
75
|
+
const result = await bridge.send('set', { ref, value });
|
|
76
|
+
return { data: result, exitCode: 0 };
|
|
77
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
(0, commands_js_1.registerCommand)('grab', async (args, bridge) => {
|
|
5
|
+
const params = {};
|
|
6
|
+
if (args.flags['app']) {
|
|
7
|
+
params.app = args.flags['app'];
|
|
8
|
+
}
|
|
9
|
+
else if (args.positional[0]) {
|
|
10
|
+
const val = args.positional[0];
|
|
11
|
+
if (val.startsWith('@')) {
|
|
12
|
+
params.ref = val;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
params.app = val;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
return { data: { error: 'Usage: agent-computer grab <@w1> or agent-computer grab --app <name>' }, exitCode: 1 };
|
|
20
|
+
}
|
|
21
|
+
const result = await bridge.send('grab', params);
|
|
22
|
+
return { data: result, exitCode: 0 };
|
|
23
|
+
});
|
|
24
|
+
(0, commands_js_1.registerCommand)('ungrab', async (_args, bridge) => {
|
|
25
|
+
const result = await bridge.send('ungrab');
|
|
26
|
+
return { data: result, exitCode: 0 };
|
|
27
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
(0, commands_js_1.registerCommand)('snapshot', async (args, bridge) => {
|
|
5
|
+
const params = {};
|
|
6
|
+
if (args.flags['interactive'])
|
|
7
|
+
params.interactive = true;
|
|
8
|
+
if (args.flags['compact'])
|
|
9
|
+
params.compact = true;
|
|
10
|
+
if (args.flags['depth'])
|
|
11
|
+
params.depth = parseInt(args.flags['depth'], 10);
|
|
12
|
+
if (args.flags['subtree'])
|
|
13
|
+
params.subtree = args.flags['subtree'];
|
|
14
|
+
if (args.flags['app'])
|
|
15
|
+
params.app = args.flags['app'];
|
|
16
|
+
if (args.flags['pid'])
|
|
17
|
+
params.pid = parseInt(args.flags['pid'], 10);
|
|
18
|
+
if (args.flags['screen'])
|
|
19
|
+
params.screen = true;
|
|
20
|
+
if (args.flags['window'])
|
|
21
|
+
params.window = args.flags['window'];
|
|
22
|
+
const result = await bridge.send('snapshot', params);
|
|
23
|
+
return { data: result, exitCode: 0 };
|
|
24
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
const parser_js_1 = require("../parser.js");
|
|
5
|
+
(0, commands_js_1.registerCommand)('type', async (args, bridge) => {
|
|
6
|
+
const text = args.positional[0];
|
|
7
|
+
if (!text) {
|
|
8
|
+
return { data: { error: 'Usage: agent-computer type <text> [--delay ms]' }, exitCode: 1 };
|
|
9
|
+
}
|
|
10
|
+
const params = { text };
|
|
11
|
+
if (args.flags['delay'])
|
|
12
|
+
params.delay = parseInt(args.flags['delay'], 10);
|
|
13
|
+
const result = await bridge.send('type', params);
|
|
14
|
+
return { data: result, exitCode: 0 };
|
|
15
|
+
});
|
|
16
|
+
(0, commands_js_1.registerCommand)('fill', async (args, bridge) => {
|
|
17
|
+
const sel = args.positional[0];
|
|
18
|
+
const text = args.positional[1];
|
|
19
|
+
if (!sel || !text) {
|
|
20
|
+
return { data: { error: 'Usage: agent-computer fill <ref> <text>' }, exitCode: 1 };
|
|
21
|
+
}
|
|
22
|
+
const params = { text };
|
|
23
|
+
const parsed = (0, parser_js_1.parseSelector)(sel);
|
|
24
|
+
if (parsed.type === 'ref') {
|
|
25
|
+
params.ref = parsed.ref;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
params.ref = sel;
|
|
29
|
+
}
|
|
30
|
+
const result = await bridge.send('fill', params);
|
|
31
|
+
return { data: result, exitCode: 0 };
|
|
32
|
+
});
|
|
33
|
+
(0, commands_js_1.registerCommand)('key', async (args, bridge) => {
|
|
34
|
+
const combo = args.positional[0];
|
|
35
|
+
if (!combo) {
|
|
36
|
+
return { data: { error: 'Usage: agent-computer key <combo> [--repeat n]' }, exitCode: 1 };
|
|
37
|
+
}
|
|
38
|
+
const params = { combo };
|
|
39
|
+
if (args.flags['repeat'])
|
|
40
|
+
params.repeat = parseInt(args.flags['repeat'], 10);
|
|
41
|
+
if (args.flags['delay'])
|
|
42
|
+
params.delay = parseInt(args.flags['delay'], 10);
|
|
43
|
+
const result = await bridge.send('key', params);
|
|
44
|
+
return { data: result, exitCode: 0 };
|
|
45
|
+
});
|
|
46
|
+
(0, commands_js_1.registerCommand)('keydown', async (args, bridge) => {
|
|
47
|
+
const key = args.positional[0];
|
|
48
|
+
if (!key) {
|
|
49
|
+
return { data: { error: 'Usage: agent-computer keydown <key>' }, exitCode: 1 };
|
|
50
|
+
}
|
|
51
|
+
const result = await bridge.send('keydown', { key });
|
|
52
|
+
return { data: result, exitCode: 0 };
|
|
53
|
+
});
|
|
54
|
+
(0, commands_js_1.registerCommand)('keyup', async (args, bridge) => {
|
|
55
|
+
const key = args.positional[0];
|
|
56
|
+
if (!key) {
|
|
57
|
+
return { data: { error: 'Usage: agent-computer keyup <key>' }, exitCode: 1 };
|
|
58
|
+
}
|
|
59
|
+
const result = await bridge.send('keyup', { key });
|
|
60
|
+
return { data: result, exitCode: 0 };
|
|
61
|
+
});
|
|
62
|
+
(0, commands_js_1.registerCommand)('paste', async (args, bridge) => {
|
|
63
|
+
const text = args.positional[0];
|
|
64
|
+
if (!text) {
|
|
65
|
+
return { data: { error: 'Usage: agent-computer paste <text>' }, exitCode: 1 };
|
|
66
|
+
}
|
|
67
|
+
const result = await bridge.send('paste', { text });
|
|
68
|
+
return { data: result, exitCode: 0 };
|
|
69
|
+
});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
// Simple window actions: minimize, maximize, fullscreen, close, raise
|
|
5
|
+
for (const cmd of ['minimize', 'maximize', 'fullscreen', 'close', 'raise']) {
|
|
6
|
+
(0, commands_js_1.registerCommand)(cmd, async (args, bridge) => {
|
|
7
|
+
const ref = args.positional[0] || args.flags['ref'];
|
|
8
|
+
const params = {};
|
|
9
|
+
if (ref)
|
|
10
|
+
params.ref = ref;
|
|
11
|
+
const result = await bridge.send(cmd, params);
|
|
12
|
+
return { data: result, exitCode: 0 };
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
(0, commands_js_1.registerCommand)('move', async (args, bridge) => {
|
|
16
|
+
const ref = args.positional[0];
|
|
17
|
+
const x = args.positional[1];
|
|
18
|
+
const y = args.positional[2];
|
|
19
|
+
if (!ref) {
|
|
20
|
+
return { data: { error: 'Usage: agent-computer move <@w> <x> <y>' }, exitCode: 1 };
|
|
21
|
+
}
|
|
22
|
+
const params = { ref };
|
|
23
|
+
if (x !== undefined && y !== undefined) {
|
|
24
|
+
params.x = parseFloat(x);
|
|
25
|
+
params.y = parseFloat(y);
|
|
26
|
+
}
|
|
27
|
+
const result = await bridge.send('move', params);
|
|
28
|
+
return { data: result, exitCode: 0 };
|
|
29
|
+
});
|
|
30
|
+
(0, commands_js_1.registerCommand)('resize', async (args, bridge) => {
|
|
31
|
+
const ref = args.positional[0];
|
|
32
|
+
const w = args.positional[1];
|
|
33
|
+
const h = args.positional[2];
|
|
34
|
+
if (!ref) {
|
|
35
|
+
return { data: { error: 'Usage: agent-computer resize <@w> <w> <h>' }, exitCode: 1 };
|
|
36
|
+
}
|
|
37
|
+
const params = { ref };
|
|
38
|
+
if (w !== undefined && h !== undefined) {
|
|
39
|
+
params.width = parseFloat(w);
|
|
40
|
+
params.height = parseFloat(h);
|
|
41
|
+
}
|
|
42
|
+
const result = await bridge.send('resize', params);
|
|
43
|
+
return { data: result, exitCode: 0 };
|
|
44
|
+
});
|
|
45
|
+
(0, commands_js_1.registerCommand)('bounds', async (args, bridge) => {
|
|
46
|
+
const ref = args.positional[0];
|
|
47
|
+
if (!ref) {
|
|
48
|
+
return { data: { error: 'Usage: agent-computer bounds <@w> <x> <y> <w> <h> | agent-computer bounds <@w> --preset <name>' }, exitCode: 1 };
|
|
49
|
+
}
|
|
50
|
+
const params = { ref };
|
|
51
|
+
if (args.flags['preset']) {
|
|
52
|
+
params.preset = args.flags['preset'];
|
|
53
|
+
}
|
|
54
|
+
else if (args.positional.length >= 5) {
|
|
55
|
+
params.x = parseFloat(args.positional[1]);
|
|
56
|
+
params.y = parseFloat(args.positional[2]);
|
|
57
|
+
params.width = parseFloat(args.positional[3]);
|
|
58
|
+
params.height = parseFloat(args.positional[4]);
|
|
59
|
+
}
|
|
60
|
+
const result = await bridge.send('bounds', params);
|
|
61
|
+
return { data: result, exitCode: 0 };
|
|
62
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commands_js_1 = require("../commands.js");
|
|
4
|
+
(0, commands_js_1.registerCommand)('windows', async (args, bridge) => {
|
|
5
|
+
const params = {};
|
|
6
|
+
if (args.flags['app'])
|
|
7
|
+
params.app = args.flags['app'];
|
|
8
|
+
const result = await bridge.send('windows', params);
|
|
9
|
+
return { data: result, exitCode: 0 };
|
|
10
|
+
});
|