@cloudcli-ai/cloudcli 1.35.0 → 1.35.1

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 (94) hide show
  1. package/README.md +12 -7
  2. package/dist/assets/index-BvX30NW5.css +32 -0
  3. package/dist/assets/{index-CtwxqzGG.js → index-D1IdCTT6.js} +269 -258
  4. package/dist/index.html +12 -4
  5. package/dist-server/server/index.js +0 -13
  6. package/dist-server/server/index.js.map +1 -1
  7. package/dist-server/server/modules/websocket/services/websocket-server.service.js +0 -5
  8. package/dist-server/server/modules/websocket/services/websocket-server.service.js.map +1 -1
  9. package/electron/desktopWindow.js +0 -15
  10. package/electron/launcher/launcher.js +1 -143
  11. package/electron/main.js +1 -117
  12. package/electron/preload.cjs +0 -3
  13. package/package.json +3 -8
  14. package/scripts/release/prepare-desktop-app.js +0 -6
  15. package/server/index.js +0 -14
  16. package/server/modules/websocket/services/websocket-server.service.ts +0 -6
  17. package/dist/assets/index-DlvtxFyt.css +0 -32
  18. package/dist-server/server/computer-use-agent.js +0 -242
  19. package/dist-server/server/computer-use-agent.js.map +0 -1
  20. package/dist-server/server/computer-use-mcp.js +0 -519
  21. package/dist-server/server/computer-use-mcp.js.map +0 -1
  22. package/dist-server/server/modules/computer-use/actions/raw-action-dispatcher.js +0 -55
  23. package/dist-server/server/modules/computer-use/actions/raw-action-dispatcher.js.map +0 -1
  24. package/dist-server/server/modules/computer-use/actions/raw-action-types.js +0 -2
  25. package/dist-server/server/modules/computer-use/actions/raw-action-types.js.map +0 -1
  26. package/dist-server/server/modules/computer-use/computer-executor.js +0 -212
  27. package/dist-server/server/modules/computer-use/computer-executor.js.map +0 -1
  28. package/dist-server/server/modules/computer-use/computer-semantics.service.js +0 -422
  29. package/dist-server/server/modules/computer-use/computer-semantics.service.js.map +0 -1
  30. package/dist-server/server/modules/computer-use/computer-use-mcp.routes.js +0 -126
  31. package/dist-server/server/modules/computer-use/computer-use-mcp.routes.js.map +0 -1
  32. package/dist-server/server/modules/computer-use/computer-use.routes.js +0 -196
  33. package/dist-server/server/modules/computer-use/computer-use.routes.js.map +0 -1
  34. package/dist-server/server/modules/computer-use/computer-use.service.js +0 -759
  35. package/dist-server/server/modules/computer-use/computer-use.service.js.map +0 -1
  36. package/dist-server/server/modules/computer-use/desktop-agent-relay.service.js +0 -126
  37. package/dist-server/server/modules/computer-use/desktop-agent-relay.service.js.map +0 -1
  38. package/dist-server/server/modules/computer-use/index.js +0 -3
  39. package/dist-server/server/modules/computer-use/index.js.map +0 -1
  40. package/dist-server/server/modules/computer-use/semantics/adapters/helper-semantic-adapter.js +0 -59
  41. package/dist-server/server/modules/computer-use/semantics/adapters/helper-semantic-adapter.js.map +0 -1
  42. package/dist-server/server/modules/computer-use/semantics/adapters/macos/macos-semantic-adapter.js +0 -5
  43. package/dist-server/server/modules/computer-use/semantics/adapters/macos/macos-semantic-adapter.js.map +0 -1
  44. package/dist-server/server/modules/computer-use/semantics/adapters/semantic-adapter.js +0 -2
  45. package/dist-server/server/modules/computer-use/semantics/adapters/semantic-adapter.js.map +0 -1
  46. package/dist-server/server/modules/computer-use/semantics/adapters/windows/windows-semantic-adapter.js +0 -5
  47. package/dist-server/server/modules/computer-use/semantics/adapters/windows/windows-semantic-adapter.js.map +0 -1
  48. package/dist-server/server/modules/computer-use/semantics/bin/darwin-arm64/CloudCLISemantics +0 -0
  49. package/dist-server/server/modules/computer-use/semantics/bin/darwin-x64/CloudCLISemantics +0 -0
  50. package/dist-server/server/modules/computer-use/semantics/bin/win32-arm64/CloudCLISemantics.exe +0 -0
  51. package/dist-server/server/modules/computer-use/semantics/bin/win32-x64/CloudCLISemantics.exe +0 -0
  52. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-process.js +0 -106
  53. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-process.js.map +0 -1
  54. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-resolver.js +0 -78
  55. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-resolver.js.map +0 -1
  56. package/dist-server/server/modules/computer-use/semantics/semantic-session-store.js +0 -68
  57. package/dist-server/server/modules/computer-use/semantics/semantic-session-store.js.map +0 -1
  58. package/dist-server/server/modules/computer-use/semantics/semantic-tool-dispatcher.js +0 -16
  59. package/dist-server/server/modules/computer-use/semantics/semantic-tool-dispatcher.js.map +0 -1
  60. package/dist-server/server/modules/computer-use/semantics/semantic-types.js +0 -2
  61. package/dist-server/server/modules/computer-use/semantics/semantic-types.js.map +0 -1
  62. package/dist-server/server/modules/websocket/services/desktop-agent-websocket.service.js +0 -39
  63. package/dist-server/server/modules/websocket/services/desktop-agent-websocket.service.js.map +0 -1
  64. package/electron/computerAgent.js +0 -290
  65. package/scripts/build-computer-semantics.mjs +0 -133
  66. package/scripts/copy-computer-semantics-bin.mjs +0 -24
  67. package/server/computer-use-agent.ts +0 -279
  68. package/server/computer-use-mcp.ts +0 -574
  69. package/server/modules/computer-use/actions/raw-action-dispatcher.ts +0 -67
  70. package/server/modules/computer-use/actions/raw-action-types.ts +0 -28
  71. package/server/modules/computer-use/computer-executor.ts +0 -242
  72. package/server/modules/computer-use/computer-semantics.service.ts +0 -460
  73. package/server/modules/computer-use/computer-use-mcp.routes.ts +0 -141
  74. package/server/modules/computer-use/computer-use.routes.ts +0 -211
  75. package/server/modules/computer-use/computer-use.service.ts +0 -920
  76. package/server/modules/computer-use/desktop-agent-relay.service.ts +0 -158
  77. package/server/modules/computer-use/index.ts +0 -2
  78. package/server/modules/computer-use/semantics/adapters/helper-semantic-adapter.ts +0 -82
  79. package/server/modules/computer-use/semantics/adapters/macos/macos-semantic-adapter.ts +0 -5
  80. package/server/modules/computer-use/semantics/adapters/semantic-adapter.ts +0 -23
  81. package/server/modules/computer-use/semantics/adapters/windows/windows-semantic-adapter.ts +0 -5
  82. package/server/modules/computer-use/semantics/bin/darwin-arm64/CloudCLISemantics +0 -0
  83. package/server/modules/computer-use/semantics/bin/darwin-x64/CloudCLISemantics +0 -0
  84. package/server/modules/computer-use/semantics/bin/win32-arm64/CloudCLISemantics.exe +0 -0
  85. package/server/modules/computer-use/semantics/bin/win32-x64/CloudCLISemantics.exe +0 -0
  86. package/server/modules/computer-use/semantics/helpers/macos/CloudCLISemantics.swift +0 -467
  87. package/server/modules/computer-use/semantics/helpers/semantic-helper-process.ts +0 -124
  88. package/server/modules/computer-use/semantics/helpers/semantic-helper-resolver.ts +0 -97
  89. package/server/modules/computer-use/semantics/helpers/windows/CloudCLISemantics.csproj +0 -11
  90. package/server/modules/computer-use/semantics/helpers/windows/Program.cs +0 -534
  91. package/server/modules/computer-use/semantics/semantic-session-store.ts +0 -87
  92. package/server/modules/computer-use/semantics/semantic-tool-dispatcher.ts +0 -17
  93. package/server/modules/computer-use/semantics/semantic-types.ts +0 -58
  94. package/server/modules/websocket/services/desktop-agent-websocket.service.ts +0 -51
@@ -1,158 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
-
3
- import type { WebSocket } from 'ws';
4
-
5
- const RELAY_TIMEOUT_MS = Number.parseInt(process.env.CLOUDCLI_COMPUTER_USE_RELAY_TIMEOUT_MS || '60000', 10);
6
- const WS_OPEN = 1;
7
-
8
- type PendingRelay = {
9
- resolve: (value: unknown) => void;
10
- reject: (reason: Error) => void;
11
- timer: ReturnType<typeof setTimeout>;
12
- };
13
-
14
- type ConnectedAgent = {
15
- ws: WebSocket;
16
- label: string;
17
- registeredAt: string;
18
- };
19
-
20
- type RelayLifecycleHooks = {
21
- canAcceptConnection?: () => boolean;
22
- onFirstConnect?: () => void | Promise<void>;
23
- onLastDisconnect?: () => void | Promise<void>;
24
- };
25
-
26
- const agents = new Map<WebSocket, ConnectedAgent>();
27
- const pending = new Map<string, PendingRelay>();
28
- let hooks: RelayLifecycleHooks = {};
29
-
30
- function rejectAllPending(reason: string): void {
31
- for (const [callId, call] of pending.entries()) {
32
- clearTimeout(call.timer);
33
- call.reject(new Error(reason));
34
- pending.delete(callId);
35
- }
36
- }
37
-
38
- function pickAgent(): ConnectedAgent | undefined {
39
- for (const agent of agents.values()) {
40
- if (agent.ws.readyState === WS_OPEN) {
41
- return agent;
42
- }
43
- }
44
- return undefined;
45
- }
46
-
47
- /**
48
- * Cloud-side registry of linked desktop agents and the request/response relay
49
- * used to drive the user's real desktop. The hosted server never touches the OS
50
- * itself — it only forwards `computer_*` actions to a connected desktop agent
51
- * and awaits the screenshot it returns.
52
- */
53
- export const desktopAgentRelay = {
54
- setHooks(next: RelayLifecycleHooks): void {
55
- hooks = next;
56
- },
57
-
58
- register(ws: WebSocket, label = 'desktop-agent'): boolean {
59
- if (hooks.canAcceptConnection && !hooks.canAcceptConnection()) {
60
- console.log(`[DesktopAgent] Rejected (${label}); Computer Use is disabled.`);
61
- try {
62
- ws.close(1008, 'Computer Use is disabled in this environment.');
63
- } catch {
64
- // ignore close failures
65
- }
66
- return false;
67
- }
68
-
69
- const wasEmpty = pickAgent() === undefined;
70
- agents.set(ws, { ws, label, registeredAt: new Date().toISOString() });
71
- console.log(`[DesktopAgent] Registered (${label}); ${agents.size} connected.`);
72
-
73
- ws.on('close', () => {
74
- const wasRegistered = agents.delete(ws);
75
- console.log(`[DesktopAgent] Disconnected (${label}); ${agents.size} remain.`);
76
- if (wasRegistered && pickAgent() === undefined) {
77
- rejectAllPending('Desktop agent disconnected.');
78
- void hooks.onLastDisconnect?.();
79
- }
80
- });
81
-
82
- if (wasEmpty) {
83
- void hooks.onFirstConnect?.();
84
- }
85
- return true;
86
- },
87
-
88
- disconnectAll(reason = 'Desktop agent disconnected.'): void {
89
- const hadAgent = pickAgent() !== undefined;
90
- const sockets = [...agents.keys()];
91
- agents.clear();
92
- for (const ws of sockets) {
93
- try {
94
- ws.close(1008, reason);
95
- } catch {
96
- // ignore close failures
97
- }
98
- }
99
- rejectAllPending(reason);
100
- if (hadAgent) {
101
- void hooks.onLastDisconnect?.();
102
- }
103
- },
104
-
105
- /** Resolves a pending relay call with the desktop agent's reply. */
106
- handleResult(id: string, result: unknown, error?: string): void {
107
- const call = pending.get(id);
108
- if (!call) {
109
- return;
110
- }
111
- clearTimeout(call.timer);
112
- pending.delete(id);
113
- if (error) {
114
- call.reject(new Error(error));
115
- } else {
116
- call.resolve(result);
117
- }
118
- },
119
-
120
- isConnected(): boolean {
121
- return pickAgent() !== undefined;
122
- },
123
-
124
- connectedCount(): number {
125
- let count = 0;
126
- for (const agent of agents.values()) {
127
- if (agent.ws.readyState === WS_OPEN) {
128
- count++;
129
- }
130
- }
131
- return count;
132
- },
133
-
134
- async relay(type: string, params: Record<string, unknown>): Promise<unknown> {
135
- const agent = pickAgent();
136
- if (!agent) {
137
- throw new Error(
138
- 'No desktop is linked. Open CloudCLI Desktop on this computer, connect the same account, and enable Computer Use.'
139
- );
140
- }
141
-
142
- const id = randomUUID();
143
- return new Promise<unknown>((resolve, reject) => {
144
- const timer = setTimeout(() => {
145
- pending.delete(id);
146
- reject(new Error('Desktop agent did not respond in time.'));
147
- }, RELAY_TIMEOUT_MS);
148
- pending.set(id, { resolve, reject, timer });
149
- try {
150
- agent.ws.send(JSON.stringify({ kind: 'computer_relay', id, type, params }));
151
- } catch (error) {
152
- clearTimeout(timer);
153
- pending.delete(id);
154
- reject(error instanceof Error ? error : new Error('Failed to send to desktop agent.'));
155
- }
156
- });
157
- },
158
- };
@@ -1,2 +0,0 @@
1
- export { computerUseService } from '@/modules/computer-use/computer-use.service.js';
2
- export { desktopAgentRelay } from '@/modules/computer-use/desktop-agent-relay.service.js';
@@ -1,82 +0,0 @@
1
- import { SemanticHelperProcess } from '@/modules/computer-use/semantics/helpers/semantic-helper-process.js';
2
- import { resolveSemanticHelper } from '@/modules/computer-use/semantics/helpers/semantic-helper-resolver.js';
3
- import type { SemanticAdapter, SemanticAdapterCapabilities } from '@/modules/computer-use/semantics/adapters/semantic-adapter.js';
4
- import type { SemanticApp, SemanticAppState, SemanticToolInput } from '@/modules/computer-use/semantics/semantic-types.js';
5
-
6
- type HelperMethod =
7
- | 'list_apps'
8
- | 'get_app_state'
9
- | 'click_element'
10
- | 'perform_secondary_action'
11
- | 'set_value'
12
- | 'type_text'
13
- | 'press_key'
14
- | 'scroll_element'
15
- | 'drag';
16
-
17
- export class HelperSemanticAdapter implements SemanticAdapter {
18
- private helper: SemanticHelperProcess | null = null;
19
-
20
- constructor(
21
- private readonly platform: NodeJS.Platform,
22
- private readonly arch: NodeJS.Architecture = process.arch,
23
- ) {}
24
-
25
- capabilities(): SemanticAdapterCapabilities {
26
- return {
27
- platform: this.platform,
28
- appDiscovery: true,
29
- accessibilityTree: true,
30
- nativeElementActions: true,
31
- nativeValueSetting: true,
32
- targetedInput: true,
33
- };
34
- }
35
-
36
- async listApps(): Promise<SemanticApp[]> {
37
- return await this.request('list_apps', {}) as SemanticApp[];
38
- }
39
-
40
- async getAppState(input: SemanticToolInput): Promise<SemanticAppState> {
41
- return await this.request('get_app_state', input) as SemanticAppState;
42
- }
43
-
44
- async clickElement(input: SemanticToolInput): Promise<SemanticAppState> {
45
- return await this.request('click_element', input) as SemanticAppState;
46
- }
47
-
48
- async performSecondaryAction(input: SemanticToolInput): Promise<SemanticAppState> {
49
- return await this.request('perform_secondary_action', input) as SemanticAppState;
50
- }
51
-
52
- async setValue(input: SemanticToolInput): Promise<SemanticAppState> {
53
- return await this.request('set_value', input) as SemanticAppState;
54
- }
55
-
56
- async typeText(input: SemanticToolInput): Promise<SemanticAppState> {
57
- return await this.request('type_text', input) as SemanticAppState;
58
- }
59
-
60
- async pressKey(input: SemanticToolInput): Promise<SemanticAppState> {
61
- return await this.request('press_key', input) as SemanticAppState;
62
- }
63
-
64
- async scrollElement(input: SemanticToolInput): Promise<SemanticAppState> {
65
- return await this.request('scroll_element', input) as SemanticAppState;
66
- }
67
-
68
- async drag(input: SemanticToolInput): Promise<SemanticAppState> {
69
- return await this.request('drag', input) as SemanticAppState;
70
- }
71
-
72
- private async request(method: HelperMethod, params: Record<string, unknown>): Promise<unknown> {
73
- if (!this.helper) {
74
- const resolution = resolveSemanticHelper(this.platform, this.arch);
75
- if (!resolution.available || !resolution.path) {
76
- throw new Error(resolution.reason || `Semantic helper is unavailable for ${this.platform}-${this.arch}.`);
77
- }
78
- this.helper = new SemanticHelperProcess(resolution.path);
79
- }
80
- return this.helper.request(method, params);
81
- }
82
- }
@@ -1,5 +0,0 @@
1
- import { HelperSemanticAdapter } from '@/modules/computer-use/semantics/adapters/helper-semantic-adapter.js';
2
-
3
- export function createMacOsSemanticAdapter(): HelperSemanticAdapter {
4
- return new HelperSemanticAdapter('darwin');
5
- }
@@ -1,23 +0,0 @@
1
- import type { SemanticApp, SemanticAppState, SemanticToolInput } from '@/modules/computer-use/semantics/semantic-types.js';
2
-
3
- export type SemanticAdapterCapabilities = {
4
- platform: NodeJS.Platform;
5
- appDiscovery: boolean;
6
- accessibilityTree: boolean;
7
- nativeElementActions: boolean;
8
- nativeValueSetting: boolean;
9
- targetedInput: boolean;
10
- };
11
-
12
- export type SemanticAdapter = {
13
- capabilities(): SemanticAdapterCapabilities;
14
- listApps(): Promise<SemanticApp[]>;
15
- getAppState(input: SemanticToolInput): Promise<SemanticAppState>;
16
- clickElement(input: SemanticToolInput): Promise<SemanticAppState>;
17
- performSecondaryAction(input: SemanticToolInput): Promise<SemanticAppState>;
18
- setValue(input: SemanticToolInput): Promise<SemanticAppState>;
19
- typeText(input: SemanticToolInput): Promise<SemanticAppState>;
20
- pressKey(input: SemanticToolInput): Promise<SemanticAppState>;
21
- scrollElement(input: SemanticToolInput): Promise<SemanticAppState>;
22
- drag(input: SemanticToolInput): Promise<SemanticAppState>;
23
- };
@@ -1,5 +0,0 @@
1
- import { HelperSemanticAdapter } from '@/modules/computer-use/semantics/adapters/helper-semantic-adapter.js';
2
-
3
- export function createWindowsSemanticAdapter(): HelperSemanticAdapter {
4
- return new HelperSemanticAdapter('win32');
5
- }