@cloudcli-ai/cloudcli 1.35.0 → 1.36.0

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 (126) hide show
  1. package/README.md +12 -7
  2. package/dist/api-docs.html +8 -2
  3. package/dist/assets/{index-CtwxqzGG.js → index-S6cIy7hj.js} +271 -260
  4. package/dist/assets/index-uLUE6Qt1.css +32 -0
  5. package/dist/index.html +12 -4
  6. package/dist-server/server/claude-sdk.js +25 -26
  7. package/dist-server/server/claude-sdk.js.map +1 -1
  8. package/dist-server/server/index.js +0 -13
  9. package/dist-server/server/index.js.map +1 -1
  10. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +70 -1
  11. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -1
  12. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +52 -11
  13. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
  14. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +138 -1
  15. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
  16. package/dist-server/server/modules/providers/services/provider-capabilities.service.js +5 -0
  17. package/dist-server/server/modules/providers/services/provider-capabilities.service.js.map +1 -1
  18. package/dist-server/server/modules/providers/services/provider-models.service.js +1 -1
  19. package/dist-server/server/modules/providers/tests/opencode-models.test.js +58 -1
  20. package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -1
  21. package/dist-server/server/modules/websocket/services/websocket-server.service.js +0 -5
  22. package/dist-server/server/modules/websocket/services/websocket-server.service.js.map +1 -1
  23. package/dist-server/server/openai-codex.js +9 -8
  24. package/dist-server/server/openai-codex.js.map +1 -1
  25. package/dist-server/server/opencode-cli.js +20 -2
  26. package/dist-server/server/opencode-cli.js.map +1 -1
  27. package/dist-server/server/routes/agent.js +14 -3
  28. package/dist-server/server/routes/agent.js.map +1 -1
  29. package/electron/desktopWindow.js +0 -15
  30. package/electron/launcher/launcher.js +1 -143
  31. package/electron/main.js +1 -117
  32. package/electron/preload.cjs +0 -3
  33. package/package.json +3 -8
  34. package/public/api-docs.html +8 -2
  35. package/scripts/release/prepare-desktop-app.js +0 -6
  36. package/server/claude-sdk.js +32 -26
  37. package/server/index.js +0 -14
  38. package/server/modules/providers/list/claude/claude-models.provider.ts +73 -1
  39. package/server/modules/providers/list/codex/codex-models.provider.ts +59 -11
  40. package/server/modules/providers/list/opencode/opencode-models.provider.ts +180 -1
  41. package/server/modules/providers/services/provider-capabilities.service.ts +7 -0
  42. package/server/modules/providers/services/provider-models.service.ts +1 -1
  43. package/server/modules/providers/tests/opencode-models.test.ts +62 -0
  44. package/server/modules/websocket/services/websocket-server.service.ts +0 -6
  45. package/server/openai-codex.js +9 -7
  46. package/server/opencode-cli.js +21 -2
  47. package/server/routes/agent.js +14 -3
  48. package/server/shared/types.ts +7 -0
  49. package/dist/assets/index-DlvtxFyt.css +0 -32
  50. package/dist-server/server/computer-use-agent.js +0 -242
  51. package/dist-server/server/computer-use-agent.js.map +0 -1
  52. package/dist-server/server/computer-use-mcp.js +0 -519
  53. package/dist-server/server/computer-use-mcp.js.map +0 -1
  54. package/dist-server/server/modules/computer-use/actions/raw-action-dispatcher.js +0 -55
  55. package/dist-server/server/modules/computer-use/actions/raw-action-dispatcher.js.map +0 -1
  56. package/dist-server/server/modules/computer-use/actions/raw-action-types.js +0 -2
  57. package/dist-server/server/modules/computer-use/actions/raw-action-types.js.map +0 -1
  58. package/dist-server/server/modules/computer-use/computer-executor.js +0 -212
  59. package/dist-server/server/modules/computer-use/computer-executor.js.map +0 -1
  60. package/dist-server/server/modules/computer-use/computer-semantics.service.js +0 -422
  61. package/dist-server/server/modules/computer-use/computer-semantics.service.js.map +0 -1
  62. package/dist-server/server/modules/computer-use/computer-use-mcp.routes.js +0 -126
  63. package/dist-server/server/modules/computer-use/computer-use-mcp.routes.js.map +0 -1
  64. package/dist-server/server/modules/computer-use/computer-use.routes.js +0 -196
  65. package/dist-server/server/modules/computer-use/computer-use.routes.js.map +0 -1
  66. package/dist-server/server/modules/computer-use/computer-use.service.js +0 -759
  67. package/dist-server/server/modules/computer-use/computer-use.service.js.map +0 -1
  68. package/dist-server/server/modules/computer-use/desktop-agent-relay.service.js +0 -126
  69. package/dist-server/server/modules/computer-use/desktop-agent-relay.service.js.map +0 -1
  70. package/dist-server/server/modules/computer-use/index.js +0 -3
  71. package/dist-server/server/modules/computer-use/index.js.map +0 -1
  72. package/dist-server/server/modules/computer-use/semantics/adapters/helper-semantic-adapter.js +0 -59
  73. package/dist-server/server/modules/computer-use/semantics/adapters/helper-semantic-adapter.js.map +0 -1
  74. package/dist-server/server/modules/computer-use/semantics/adapters/macos/macos-semantic-adapter.js +0 -5
  75. package/dist-server/server/modules/computer-use/semantics/adapters/macos/macos-semantic-adapter.js.map +0 -1
  76. package/dist-server/server/modules/computer-use/semantics/adapters/semantic-adapter.js +0 -2
  77. package/dist-server/server/modules/computer-use/semantics/adapters/semantic-adapter.js.map +0 -1
  78. package/dist-server/server/modules/computer-use/semantics/adapters/windows/windows-semantic-adapter.js +0 -5
  79. package/dist-server/server/modules/computer-use/semantics/adapters/windows/windows-semantic-adapter.js.map +0 -1
  80. package/dist-server/server/modules/computer-use/semantics/bin/darwin-arm64/CloudCLISemantics +0 -0
  81. package/dist-server/server/modules/computer-use/semantics/bin/darwin-x64/CloudCLISemantics +0 -0
  82. package/dist-server/server/modules/computer-use/semantics/bin/win32-arm64/CloudCLISemantics.exe +0 -0
  83. package/dist-server/server/modules/computer-use/semantics/bin/win32-x64/CloudCLISemantics.exe +0 -0
  84. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-process.js +0 -106
  85. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-process.js.map +0 -1
  86. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-resolver.js +0 -78
  87. package/dist-server/server/modules/computer-use/semantics/helpers/semantic-helper-resolver.js.map +0 -1
  88. package/dist-server/server/modules/computer-use/semantics/semantic-session-store.js +0 -68
  89. package/dist-server/server/modules/computer-use/semantics/semantic-session-store.js.map +0 -1
  90. package/dist-server/server/modules/computer-use/semantics/semantic-tool-dispatcher.js +0 -16
  91. package/dist-server/server/modules/computer-use/semantics/semantic-tool-dispatcher.js.map +0 -1
  92. package/dist-server/server/modules/computer-use/semantics/semantic-types.js +0 -2
  93. package/dist-server/server/modules/computer-use/semantics/semantic-types.js.map +0 -1
  94. package/dist-server/server/modules/websocket/services/desktop-agent-websocket.service.js +0 -39
  95. package/dist-server/server/modules/websocket/services/desktop-agent-websocket.service.js.map +0 -1
  96. package/electron/computerAgent.js +0 -290
  97. package/scripts/build-computer-semantics.mjs +0 -133
  98. package/scripts/copy-computer-semantics-bin.mjs +0 -24
  99. package/server/computer-use-agent.ts +0 -279
  100. package/server/computer-use-mcp.ts +0 -574
  101. package/server/modules/computer-use/actions/raw-action-dispatcher.ts +0 -67
  102. package/server/modules/computer-use/actions/raw-action-types.ts +0 -28
  103. package/server/modules/computer-use/computer-executor.ts +0 -242
  104. package/server/modules/computer-use/computer-semantics.service.ts +0 -460
  105. package/server/modules/computer-use/computer-use-mcp.routes.ts +0 -141
  106. package/server/modules/computer-use/computer-use.routes.ts +0 -211
  107. package/server/modules/computer-use/computer-use.service.ts +0 -920
  108. package/server/modules/computer-use/desktop-agent-relay.service.ts +0 -158
  109. package/server/modules/computer-use/index.ts +0 -2
  110. package/server/modules/computer-use/semantics/adapters/helper-semantic-adapter.ts +0 -82
  111. package/server/modules/computer-use/semantics/adapters/macos/macos-semantic-adapter.ts +0 -5
  112. package/server/modules/computer-use/semantics/adapters/semantic-adapter.ts +0 -23
  113. package/server/modules/computer-use/semantics/adapters/windows/windows-semantic-adapter.ts +0 -5
  114. package/server/modules/computer-use/semantics/bin/darwin-arm64/CloudCLISemantics +0 -0
  115. package/server/modules/computer-use/semantics/bin/darwin-x64/CloudCLISemantics +0 -0
  116. package/server/modules/computer-use/semantics/bin/win32-arm64/CloudCLISemantics.exe +0 -0
  117. package/server/modules/computer-use/semantics/bin/win32-x64/CloudCLISemantics.exe +0 -0
  118. package/server/modules/computer-use/semantics/helpers/macos/CloudCLISemantics.swift +0 -467
  119. package/server/modules/computer-use/semantics/helpers/semantic-helper-process.ts +0 -124
  120. package/server/modules/computer-use/semantics/helpers/semantic-helper-resolver.ts +0 -97
  121. package/server/modules/computer-use/semantics/helpers/windows/CloudCLISemantics.csproj +0 -11
  122. package/server/modules/computer-use/semantics/helpers/windows/Program.cs +0 -534
  123. package/server/modules/computer-use/semantics/semantic-session-store.ts +0 -87
  124. package/server/modules/computer-use/semantics/semantic-tool-dispatcher.ts +0 -17
  125. package/server/modules/computer-use/semantics/semantic-types.ts +0 -58
  126. 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
- }