@skillful-agents/agent-computer 0.0.3 → 0.0.5

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 (49) hide show
  1. package/bin/ac-core-darwin-arm64 +0 -0
  2. package/bin/ac-core-darwin-x64 +0 -0
  3. package/bin/ac-core-win32-arm64.exe +0 -0
  4. package/bin/ac-core-win32-x64.exe +0 -0
  5. package/dist/src/platform/resolve.d.ts.map +1 -1
  6. package/dist/src/platform/resolve.js +33 -6
  7. package/dist/src/platform/resolve.js.map +1 -1
  8. package/dist-cjs/bin/ac.js +127 -0
  9. package/dist-cjs/package.json +1 -0
  10. package/dist-cjs/src/bridge.js +693 -0
  11. package/dist-cjs/src/cdp/ax-tree.js +162 -0
  12. package/dist-cjs/src/cdp/bounds.js +66 -0
  13. package/dist-cjs/src/cdp/client.js +272 -0
  14. package/dist-cjs/src/cdp/connection.js +285 -0
  15. package/dist-cjs/src/cdp/diff.js +55 -0
  16. package/dist-cjs/src/cdp/discovery.js +91 -0
  17. package/dist-cjs/src/cdp/index.js +27 -0
  18. package/dist-cjs/src/cdp/interactions.js +301 -0
  19. package/dist-cjs/src/cdp/port-manager.js +68 -0
  20. package/dist-cjs/src/cdp/role-map.js +102 -0
  21. package/dist-cjs/src/cdp/types.js +2 -0
  22. package/dist-cjs/src/cli/commands/apps.js +63 -0
  23. package/dist-cjs/src/cli/commands/batch.js +37 -0
  24. package/dist-cjs/src/cli/commands/click.js +61 -0
  25. package/dist-cjs/src/cli/commands/clipboard.js +31 -0
  26. package/dist-cjs/src/cli/commands/dialog.js +45 -0
  27. package/dist-cjs/src/cli/commands/drag.js +26 -0
  28. package/dist-cjs/src/cli/commands/find.js +99 -0
  29. package/dist-cjs/src/cli/commands/menu.js +36 -0
  30. package/dist-cjs/src/cli/commands/screenshot.js +27 -0
  31. package/dist-cjs/src/cli/commands/scroll.js +77 -0
  32. package/dist-cjs/src/cli/commands/session.js +27 -0
  33. package/dist-cjs/src/cli/commands/snapshot.js +24 -0
  34. package/dist-cjs/src/cli/commands/type.js +69 -0
  35. package/dist-cjs/src/cli/commands/windowmgmt.js +62 -0
  36. package/dist-cjs/src/cli/commands/windows.js +10 -0
  37. package/dist-cjs/src/cli/commands.js +215 -0
  38. package/dist-cjs/src/cli/output.js +253 -0
  39. package/dist-cjs/src/cli/parser.js +128 -0
  40. package/dist-cjs/src/config.js +79 -0
  41. package/dist-cjs/src/daemon.js +183 -0
  42. package/dist-cjs/src/errors.js +118 -0
  43. package/dist-cjs/src/index.js +24 -0
  44. package/dist-cjs/src/platform/index.js +16 -0
  45. package/dist-cjs/src/platform/resolve.js +83 -0
  46. package/dist-cjs/src/refs.js +91 -0
  47. package/dist-cjs/src/sdk.js +288 -0
  48. package/dist-cjs/src/types.js +11 -0
  49. package/package.json +4 -2
@@ -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
+ });