@amaster.ai/pi-computer-use 0.1.2-beta.2 → 0.1.2-beta.20

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 (74) hide show
  1. package/README.md +136 -0
  2. package/bin/darwin-arm64/.version +2 -0
  3. package/bin/darwin-arm64/CuaDriver.app/Contents/CodeResources +0 -0
  4. package/bin/darwin-arm64/CuaDriver.app/Contents/Info.plist +32 -0
  5. package/bin/darwin-arm64/CuaDriver.app/Contents/MacOS/cua-driver +0 -0
  6. package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/README.md +140 -0
  7. package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/RECORDING.md +113 -0
  8. package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/SKILL.md +887 -0
  9. package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/TESTS.md +232 -0
  10. package/bin/darwin-arm64/CuaDriver.app/Contents/Resources/Skills/cua-driver/WEB_APPS.md +471 -0
  11. package/bin/darwin-arm64/CuaDriver.app/Contents/_CodeSignature/CodeResources +172 -0
  12. package/bin/darwin-x64/.version +2 -0
  13. package/bin/darwin-x64/CuaDriver.app/Contents/CodeResources +0 -0
  14. package/bin/darwin-x64/CuaDriver.app/Contents/Info.plist +32 -0
  15. package/bin/darwin-x64/CuaDriver.app/Contents/MacOS/cua-driver +0 -0
  16. package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/README.md +140 -0
  17. package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/RECORDING.md +113 -0
  18. package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/SKILL.md +887 -0
  19. package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/TESTS.md +232 -0
  20. package/bin/darwin-x64/CuaDriver.app/Contents/Resources/Skills/cua-driver/WEB_APPS.md +471 -0
  21. package/bin/darwin-x64/CuaDriver.app/Contents/_CodeSignature/CodeResources +172 -0
  22. package/bin/linux-x64/.version +2 -0
  23. package/bin/linux-x64/cua-driver +0 -0
  24. package/bin/win32-arm64/.version +2 -0
  25. package/bin/win32-arm64/cua-driver-uia.exe +0 -0
  26. package/bin/win32-arm64/cua-driver.exe +0 -0
  27. package/bin/win32-x64/.version +2 -0
  28. package/bin/win32-x64/cua-driver-uia.exe +0 -0
  29. package/bin/win32-x64/cua-driver.exe +0 -0
  30. package/dist/config.d.ts +5 -19
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +1 -6
  33. package/dist/config.js.map +1 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +578 -71
  36. package/dist/index.js.map +1 -1
  37. package/dist/mcp-client.d.ts +22 -0
  38. package/dist/mcp-client.d.ts.map +1 -0
  39. package/dist/mcp-client.js +91 -0
  40. package/dist/mcp-client.js.map +1 -0
  41. package/dist/vision.d.ts.map +1 -1
  42. package/dist/vision.js +19 -0
  43. package/dist/vision.js.map +1 -1
  44. package/package.json +20 -6
  45. package/preview.png +0 -0
  46. package/scripts/postinstall.js +29 -0
  47. package/dist/__tests__/computer-client.test.d.ts +0 -2
  48. package/dist/__tests__/computer-client.test.d.ts.map +0 -1
  49. package/dist/__tests__/computer-client.test.js +0 -174
  50. package/dist/__tests__/computer-client.test.js.map +0 -1
  51. package/dist/__tests__/index.test.d.ts +0 -2
  52. package/dist/__tests__/index.test.d.ts.map +0 -1
  53. package/dist/__tests__/index.test.js +0 -385
  54. package/dist/__tests__/index.test.js.map +0 -1
  55. package/dist/__tests__/server-process.test.d.ts +0 -2
  56. package/dist/__tests__/server-process.test.d.ts.map +0 -1
  57. package/dist/__tests__/server-process.test.js +0 -127
  58. package/dist/__tests__/server-process.test.js.map +0 -1
  59. package/dist/__tests__/vision.test.d.ts +0 -2
  60. package/dist/__tests__/vision.test.d.ts.map +0 -1
  61. package/dist/__tests__/vision.test.js +0 -36
  62. package/dist/__tests__/vision.test.js.map +0 -1
  63. package/dist/actions.d.ts +0 -15
  64. package/dist/actions.d.ts.map +0 -1
  65. package/dist/actions.js +0 -45
  66. package/dist/actions.js.map +0 -1
  67. package/dist/computer-client.d.ts +0 -13
  68. package/dist/computer-client.d.ts.map +0 -1
  69. package/dist/computer-client.js +0 -109
  70. package/dist/computer-client.js.map +0 -1
  71. package/dist/server-process.d.ts +0 -9
  72. package/dist/server-process.d.ts.map +0 -1
  73. package/dist/server-process.js +0 -76
  74. package/dist/server-process.js.map +0 -1
package/dist/actions.js DELETED
@@ -1,45 +0,0 @@
1
- export async function dispatchAction(client, action) {
2
- switch (action.type) {
3
- case 'screenshot':
4
- return undefined;
5
- case 'click': {
6
- const cmd = action.button === 'right' ? 'right_click' : 'left_click';
7
- await client.sendCommand(cmd, { x: action.x, y: action.y });
8
- return `Clicked (${action.button ?? 'left'}) at (${action.x}, ${action.y})`;
9
- }
10
- case 'double_click':
11
- await client.sendCommand('double_click', { x: action.x, y: action.y });
12
- return `Double-clicked at (${action.x}, ${action.y})`;
13
- case 'type':
14
- await client.sendCommand('type_text', { text: action.text });
15
- return `Typed "${action.text}"`;
16
- case 'keypress':
17
- await client.sendCommand('hotkey', { keys: action.keys });
18
- return `Pressed keys: ${action.keys?.join('+')}`;
19
- case 'scroll':
20
- await client.sendCommand('scroll', {
21
- x: action.scroll_x ?? 0,
22
- y: action.scroll_y ?? 0,
23
- });
24
- return `Scrolled (${action.scroll_x ?? 0}, ${action.scroll_y ?? 0})`;
25
- case 'move':
26
- await client.sendCommand('move_cursor', { x: action.x, y: action.y });
27
- return `Moved cursor to (${action.x}, ${action.y})`;
28
- case 'drag':
29
- await client.sendCommand('drag', { path: action.path, button: action.button ?? 'left' });
30
- return `Dragged along ${action.path?.length ?? 0} points`;
31
- case 'wait':
32
- await new Promise((r) => setTimeout(r, 1_000));
33
- return 'Waited 1 second';
34
- case 'run_command': {
35
- const result = await client.sendCommand('run_command', { command: action.command });
36
- const stdout = result.stdout ?? '';
37
- const stderr = result.stderr ?? '';
38
- const output = [stdout, stderr].filter(Boolean).join('\n');
39
- return output || 'Command executed (no output)';
40
- }
41
- default:
42
- throw new Error(`Unknown action type: ${action.type}`);
43
- }
44
- }
45
- //# sourceMappingURL=actions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsB,EACtB,MAAsB;IAEtB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,YAAY;YACf,OAAO,SAAS,CAAC;QAEnB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;YACrE,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5D,OAAO,YAAY,MAAM,CAAC,MAAM,IAAI,MAAM,SAAS,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC;QAC9E,CAAC;QAED,KAAK,cAAc;YACjB,MAAM,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACvE,OAAO,sBAAsB,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC;QAExD,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,OAAO,UAAU,MAAM,CAAC,IAAI,GAAG,CAAC;QAElC,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,OAAO,iBAAiB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAEnD,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;gBACjC,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;gBACvB,CAAC,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;aACxB,CAAC,CAAC;YACH,OAAO,aAAa,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC;QAEvE,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,oBAAoB,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC;QAEtD,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;YACzF,OAAO,iBAAiB,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC;QAE5D,KAAK,MAAM;YACT,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,OAAO,iBAAiB,CAAC;QAE3B,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,MAAM,MAAM,GAAI,MAAM,CAAC,MAAiB,IAAI,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAI,MAAM,CAAC,MAAiB,IAAI,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,OAAO,MAAM,IAAI,8BAA8B,CAAC;QAClD,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
@@ -1,13 +0,0 @@
1
- import type { ComputerUseConfig } from './config.js';
2
- export declare class ComputerClient {
3
- private ws;
4
- private commandLock;
5
- private config;
6
- constructor(config: ComputerUseConfig);
7
- connect(): Promise<void>;
8
- sendCommand(command: string, params?: Record<string, unknown>): Promise<Record<string, unknown>>;
9
- screenshot(): Promise<string>;
10
- close(): Promise<void>;
11
- private authenticate;
12
- }
13
- //# sourceMappingURL=computer-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"computer-client.d.ts","sourceRoot":"","sources":["../src/computer-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,iBAAiB;IAI/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BxB,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAqC7B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAS7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,YAAY;CAyBrB"}
@@ -1,109 +0,0 @@
1
- import WebSocket from 'ws';
2
- const COMMAND_TIMEOUT_MS = 30_000;
3
- export class ComputerClient {
4
- ws = null;
5
- commandLock = Promise.resolve();
6
- config;
7
- constructor(config) {
8
- this.config = config;
9
- }
10
- async connect() {
11
- const host = this.config.host ?? '127.0.0.1';
12
- const port = this.config.port ?? 8000;
13
- const protocol = this.config.apiKey ? 'wss' : 'ws';
14
- const url = `${protocol}://${host}:${port}/ws`;
15
- const headers = {};
16
- if (this.config.apiKey)
17
- headers['X-API-Key'] = this.config.apiKey;
18
- if (this.config.vmName)
19
- headers['X-VM-Name'] = this.config.vmName;
20
- this.ws = await new Promise((resolve, reject) => {
21
- const ws = new WebSocket(url, { headers });
22
- ws.on('open', async () => {
23
- if (this.config.apiKey && this.config.vmName) {
24
- try {
25
- await this.authenticate(ws);
26
- }
27
- catch (err) {
28
- ws.close();
29
- reject(err);
30
- return;
31
- }
32
- }
33
- resolve(ws);
34
- });
35
- ws.on('error', (err) => reject(new Error(`WebSocket connection failed: ${err.message}`)));
36
- });
37
- }
38
- async sendCommand(command, params = {}) {
39
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
40
- throw new Error('WebSocket not connected');
41
- }
42
- const result = await new Promise((resolve, reject) => {
43
- const execute = () => new Promise((innerResolve, innerReject) => {
44
- const timer = setTimeout(() => {
45
- innerReject(new Error(`Command "${command}" timed out after ${COMMAND_TIMEOUT_MS}ms`));
46
- }, COMMAND_TIMEOUT_MS);
47
- const handler = (data) => {
48
- clearTimeout(timer);
49
- this.ws?.off('message', handler);
50
- try {
51
- const response = JSON.parse(data.toString());
52
- if (response.error) {
53
- innerReject(new Error(response.error));
54
- }
55
- else {
56
- innerResolve(response);
57
- }
58
- }
59
- catch (err) {
60
- innerReject(err);
61
- }
62
- };
63
- this.ws.on('message', handler);
64
- this.ws.send(JSON.stringify({ command, params }));
65
- });
66
- this.commandLock = this.commandLock.then(() => execute().then(resolve, reject));
67
- });
68
- return result;
69
- }
70
- async screenshot() {
71
- const response = await this.sendCommand('screenshot', {});
72
- const imageData = response.image_data;
73
- if (!imageData) {
74
- throw new Error('No image_data in screenshot response');
75
- }
76
- return imageData;
77
- }
78
- async close() {
79
- if (this.ws) {
80
- this.ws.close();
81
- this.ws = null;
82
- }
83
- }
84
- authenticate(ws) {
85
- return new Promise((resolve, reject) => {
86
- const handler = (data) => {
87
- ws.off('message', handler);
88
- try {
89
- const response = JSON.parse(data.toString());
90
- if (response.success) {
91
- resolve();
92
- }
93
- else {
94
- reject(new Error(`Authentication failed: ${response.error ?? 'unknown error'}`));
95
- }
96
- }
97
- catch (err) {
98
- reject(err);
99
- }
100
- };
101
- ws.on('message', handler);
102
- ws.send(JSON.stringify({
103
- command: 'authenticate',
104
- params: { api_key: this.config.apiKey, container_name: this.config.vmName },
105
- }));
106
- });
107
- }
108
- }
109
- //# sourceMappingURL=computer-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"computer-client.js","sourceRoot":"","sources":["../src/computer-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAG3B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,OAAO,cAAc;IACjB,EAAE,GAAqB,IAAI,CAAC;IAC5B,WAAW,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAClD,MAAM,CAAoB;IAElC,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,MAAM,GAAG,GAAG,GAAG,QAAQ,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC;QAE/C,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAElE,IAAI,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;gBACvB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC7C,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;oBAC9B,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,EAAE,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,EAAE,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,SAAkC,EAAE;QAEpC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5E,MAAM,OAAO,GAAG,GAAqC,EAAE,CACrD,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;gBACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,WAAW,CAAC,IAAI,KAAK,CAAC,YAAY,OAAO,qBAAqB,kBAAkB,IAAI,CAAC,CAAC,CAAC;gBACzF,CAAC,EAAE,kBAAkB,CAAC,CAAC;gBAEvB,MAAM,OAAO,GAAG,CAAC,IAAuB,EAAE,EAAE;oBAC1C,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAA4B,CAAC;wBACxE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACnB,WAAW,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC,CAAC;wBACnD,CAAC;6BAAM,CAAC;4BACN,YAAY,CAAC,QAAQ,CAAC,CAAC;wBACzB,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,WAAW,CAAC,GAAG,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC;gBAEF,IAAI,CAAC,EAAG,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAChC,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YAEL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAgC,CAAC;QAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,EAAa;QAChC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,CAAC,IAAuB,EAAE,EAAE;gBAC1C,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAA4B,CAAC;oBACxE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACrB,OAAO,EAAE,CAAC;oBACZ,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC;oBACnF,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC;YAEF,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1B,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;aAC5E,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,9 +0,0 @@
1
- import type { ComputerUseConfig } from './config.js';
2
- export declare class ComputerServerProcess {
3
- private proc;
4
- start(config: ComputerUseConfig): Promise<void>;
5
- stop(): Promise<void>;
6
- private waitForReady;
7
- private probeWs;
8
- }
9
- //# sourceMappingURL=server-process.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-process.d.ts","sourceRoot":"","sources":["../src/server-process.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,IAAI,CAA6B;IAEnC,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBb,YAAY;IAoB1B,OAAO,CAAC,OAAO;CAqBhB"}
@@ -1,76 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import WebSocket from 'ws';
3
- const READY_TIMEOUT_MS = 30_000;
4
- const POLL_INTERVAL_MS = 500;
5
- const KILL_GRACE_MS = 2_000;
6
- export class ComputerServerProcess {
7
- proc = null;
8
- async start(config) {
9
- const cmd = config.command ?? 'uvx';
10
- const pkg = config.package ?? 'cua-computer-server';
11
- const host = config.host ?? '127.0.0.1';
12
- const port = config.port ?? 8000;
13
- const args = [pkg, '--host', host, '--port', String(port), ...(config.extraArgs ?? [])];
14
- this.proc = spawn(cmd, args, { stdio: ['ignore', 'pipe', 'pipe'] });
15
- this.proc.stderr?.on('data', (chunk) => {
16
- const line = chunk.toString().trim();
17
- if (line)
18
- console.error(`[pi-computer-use] ${line}`);
19
- });
20
- this.proc.on('error', (err) => {
21
- console.error(`[pi-computer-use] Failed to start ${cmd}: ${err.message}`);
22
- });
23
- await this.waitForReady(host, port);
24
- }
25
- async stop() {
26
- if (!this.proc)
27
- return;
28
- const proc = this.proc;
29
- this.proc = null;
30
- proc.kill('SIGTERM');
31
- await new Promise((resolve) => {
32
- const timer = setTimeout(() => {
33
- proc.kill('SIGKILL');
34
- resolve();
35
- }, KILL_GRACE_MS);
36
- proc.on('exit', () => {
37
- clearTimeout(timer);
38
- resolve();
39
- });
40
- });
41
- }
42
- async waitForReady(host, port) {
43
- const wsUrl = `ws://${host}:${port}/ws`;
44
- const deadline = Date.now() + READY_TIMEOUT_MS;
45
- while (Date.now() < deadline) {
46
- if (this.proc?.exitCode !== null && this.proc?.exitCode !== undefined) {
47
- throw new Error(`cua-computer-server exited with code ${this.proc.exitCode} before becoming ready`);
48
- }
49
- const ready = await this.probeWs(wsUrl);
50
- if (ready)
51
- return;
52
- await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
53
- }
54
- throw new Error(`cua-computer-server not ready after ${READY_TIMEOUT_MS}ms`);
55
- }
56
- probeWs(url) {
57
- return new Promise((resolve) => {
58
- const ws = new WebSocket(url);
59
- const timer = setTimeout(() => {
60
- ws.terminate();
61
- resolve(false);
62
- }, 1_000);
63
- ws.on('open', () => {
64
- clearTimeout(timer);
65
- ws.close();
66
- resolve(true);
67
- });
68
- ws.on('error', () => {
69
- clearTimeout(timer);
70
- ws.terminate();
71
- resolve(false);
72
- });
73
- });
74
- }
75
- }
76
- //# sourceMappingURL=server-process.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-process.js","sourceRoot":"","sources":["../src/server-process.ts"],"names":[],"mappings":"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"}