mindexec-ai 0.2.385

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 (99) hide show
  1. package/README.md +354 -0
  2. package/codex-runtime.js +1339 -0
  3. package/launch-bridge.cjs +236 -0
  4. package/package.json +77 -0
  5. package/port-guard.cjs +232 -0
  6. package/remote-fast/osx-arm64/mindexec-remote-fast +0 -0
  7. package/remote-fast/osx-arm64/mindexec-remote-fast.deps.json +24 -0
  8. package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
  9. package/remote-fast/osx-arm64/mindexec-remote-fast.runtimeconfig.json +13 -0
  10. package/remote-fast/osx-x64/mindexec-remote-fast +0 -0
  11. package/remote-fast/osx-x64/mindexec-remote-fast.deps.json +24 -0
  12. package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
  13. package/remote-fast/osx-x64/mindexec-remote-fast.runtimeconfig.json +13 -0
  14. package/remote-fast/win-x64/mindexec-remote-fast.deps.json +24 -0
  15. package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
  16. package/remote-fast/win-x64/mindexec-remote-fast.exe +0 -0
  17. package/remote-fast/win-x64/mindexec-remote-fast.runtimeconfig.json +20 -0
  18. package/remote-hub.js +3106 -0
  19. package/scripts/auth-session-smoke.mjs +262 -0
  20. package/scripts/remote-agent-managed-smoke.mjs +291 -0
  21. package/scripts/remote-agent-package-smoke.mjs +64 -0
  22. package/scripts/remote-agent-ws-smoke.mjs +202 -0
  23. package/scripts/remote-fast-live-rate-smoke.mjs +355 -0
  24. package/scripts/remote-fast-mdm-browser-smoke.mjs +476 -0
  25. package/scripts/remote-fleet-render-smoke.mjs +1491 -0
  26. package/scripts/remote-frame-ws-smoke.mjs +234 -0
  27. package/scripts/remote-http-smoke.mjs +592 -0
  28. package/scripts/remote-hub-identity-smoke.mjs +146 -0
  29. package/scripts/remote-hub-scale-smoke.mjs +124 -0
  30. package/scripts/remote-hub-smoke.mjs +631 -0
  31. package/scripts/remote-input-ws-smoke.mjs +263 -0
  32. package/scripts/remote-registry-follower-smoke.mjs +752 -0
  33. package/scripts/setup-tree-sitter-grammars.mjs +80 -0
  34. package/server.js +15709 -0
  35. package/start-bridge.bat +32 -0
  36. package/start-bridge.sh +81 -0
  37. package/tree-sitter-grammars/README.md +18 -0
  38. package/tree-sitter-grammars/tree-sitter-c_sharp.wasm +0 -0
  39. package/tree-sitter-grammars/tree-sitter-go.wasm +0 -0
  40. package/tree-sitter-grammars/tree-sitter-java.wasm +0 -0
  41. package/tree-sitter-grammars/tree-sitter-javascript.wasm +0 -0
  42. package/tree-sitter-grammars/tree-sitter-python.wasm +0 -0
  43. package/tree-sitter-grammars/tree-sitter-rust.wasm +0 -0
  44. package/tree-sitter-grammars/tree-sitter-tsx.wasm +0 -0
  45. package/tree-sitter-grammars/tree-sitter-typescript.wasm +0 -0
  46. package/wwwroot/_headers +73 -0
  47. package/wwwroot/_redirects +1 -0
  48. package/wwwroot/appsettings.json +83 -0
  49. package/wwwroot/assets/AdminDashboardPage-B2vz2Px9.css +1 -0
  50. package/wwwroot/assets/AdminDashboardPage-DnuCHywn.js +1 -0
  51. package/wwwroot/assets/AppSidebar-DU2OgSiv.js +2 -0
  52. package/wwwroot/assets/AuthPages-BrH6kRcv.css +1 -0
  53. package/wwwroot/assets/AuthPages-Dgezl7Vj.js +1 -0
  54. package/wwwroot/assets/CodePage-7kgZlB3O.js +87 -0
  55. package/wwwroot/assets/CodePage-Bncc352E.css +1 -0
  56. package/wwwroot/assets/CompanyCorePage-ChBnq1ve.css +1 -0
  57. package/wwwroot/assets/CompanyCorePage-CzIZIIU_.js +13 -0
  58. package/wwwroot/assets/ExecutionModePage-B-etp_mc.js +18 -0
  59. package/wwwroot/assets/ExecutionModePage-TLuld9l3.css +1 -0
  60. package/wwwroot/assets/LaunchLeadCapture-Bx9LM0IX.js +1 -0
  61. package/wwwroot/assets/LaunchLeadCapture-CiRI1shz.css +1 -0
  62. package/wwwroot/assets/MarketingHome-BsyerRpe.js +1 -0
  63. package/wwwroot/assets/MarketingHome-DPzaYzA_.css +1 -0
  64. package/wwwroot/assets/MindCanvas-DtqOZnoW.css +1 -0
  65. package/wwwroot/assets/MindCanvas-zEDXzaxW.js +49 -0
  66. package/wwwroot/assets/PlanMasterPage-CJ36rep-.css +1 -0
  67. package/wwwroot/assets/PlanMasterPage-NZ_mPvaE.js +4 -0
  68. package/wwwroot/assets/PricingPage-Cg_0i_ZR.css +1 -0
  69. package/wwwroot/assets/PricingPage-Ylrn8l2g.js +1 -0
  70. package/wwwroot/assets/ToolPages-3M2KqA9k.js +28 -0
  71. package/wwwroot/assets/ToolPages-DIB187pZ.css +1 -0
  72. package/wwwroot/assets/YouTubeSearchPage-COv1oAA7.js +4 -0
  73. package/wwwroot/assets/YouTubeSearchPage-IPPa_BIH.css +1 -0
  74. package/wwwroot/assets/app-runtime-xD2Z3NdN.js +1 -0
  75. package/wwwroot/assets/canvas-runtime-BbicBcOj.js +44 -0
  76. package/wwwroot/assets/code-agent-runtime-B5PPZd1t.js +74 -0
  77. package/wwwroot/assets/executionModeSettings-NJqurj-o.js +1 -0
  78. package/wwwroot/assets/index-CQMKCp-t.js +2 -0
  79. package/wwwroot/assets/index-yNpEK-gp.css +1 -0
  80. package/wwwroot/assets/marketingTools-DN_rnHeB.js +4 -0
  81. package/wwwroot/assets/mindCanvasSearchWorker-BzPMsHOB.js +1 -0
  82. package/wwwroot/assets/mindexecution-mindcanvas.png +0 -0
  83. package/wwwroot/assets/mindexecution-prod-home-current.png +0 -0
  84. package/wwwroot/assets/mindexecution-prod-pricing-current.png +0 -0
  85. package/wwwroot/assets/pricingCheckoutShell-O-DnwmbU.js +1 -0
  86. package/wwwroot/assets/productionAdapterConfig-C5jfk6oG.js +1 -0
  87. package/wwwroot/assets/runtimeSettingsPersistenceProjection-BoNWmYjU.js +1 -0
  88. package/wwwroot/assets/storage-TM3YrWaj.js +1 -0
  89. package/wwwroot/assets/supabaseAuthAdapter-DA43DeSY.js +44 -0
  90. package/wwwroot/assets/toolHandoff-D5e5f7t5.js +4 -0
  91. package/wwwroot/assets/vendor-icons-DE3gIReG.js +681 -0
  92. package/wwwroot/assets/vendor-msgpack-BE8aAsr3.js +1 -0
  93. package/wwwroot/assets/vendor-react-BXzpOyCS.js +40 -0
  94. package/wwwroot/favicon.svg +7 -0
  95. package/wwwroot/index.html +22 -0
  96. package/wwwroot/manifest.webmanifest +19 -0
  97. package/wwwroot/robots.txt +4 -0
  98. package/wwwroot/service-worker.js +7 -0
  99. package/wwwroot/sitemap.xml +39 -0
@@ -0,0 +1,263 @@
1
+ #!/usr/bin/env node
2
+
3
+ import assert from 'node:assert/strict';
4
+ import net from 'node:net';
5
+ import { spawn } from 'node:child_process';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { WebSocket } from 'ws';
9
+
10
+ const BRIDGE_TOKEN = 'remote-input-ws-smoke-token';
11
+ const PAIR_TOKEN = 'remote-input-ws-pair-token';
12
+ const DEVICE_ID = 'remote-input-ws-device';
13
+
14
+ function wait(ms) {
15
+ return new Promise(resolve => setTimeout(resolve, ms));
16
+ }
17
+
18
+ async function waitFor(predicate, timeoutMs = 10000, label = 'condition') {
19
+ const startedAt = Date.now();
20
+ while (Date.now() - startedAt < timeoutMs) {
21
+ const value = await predicate();
22
+ if (value) {
23
+ return value;
24
+ }
25
+ await wait(50);
26
+ }
27
+
28
+ throw new Error(`Timed out waiting for ${label}.`);
29
+ }
30
+
31
+ async function findFreePort() {
32
+ return await new Promise((resolve, reject) => {
33
+ const server = net.createServer();
34
+ server.unref();
35
+ server.once('error', reject);
36
+ server.listen(0, '127.0.0.1', () => {
37
+ const address = server.address();
38
+ const port = typeof address === 'object' && address ? address.port : 0;
39
+ server.close(() => resolve(port));
40
+ });
41
+ });
42
+ }
43
+
44
+ async function fetchJson(url, options = {}) {
45
+ const response = await fetch(url, {
46
+ ...options,
47
+ headers: {
48
+ ...(options.body ? { 'Content-Type': 'application/json' } : {}),
49
+ 'X-Bridge-Token': BRIDGE_TOKEN,
50
+ ...(options.headers || {})
51
+ }
52
+ });
53
+ const payload = await response.json().catch(() => null);
54
+ return { ok: response.ok, status: response.status, payload };
55
+ }
56
+
57
+ async function waitForBridge(baseUrl, details) {
58
+ const startedAt = Date.now();
59
+ while (Date.now() - startedAt < 30000) {
60
+ try {
61
+ const result = await fetchJson(`${baseUrl}/api/remote/status`);
62
+ if (result.ok && result.payload?.started === true) {
63
+ return result.payload;
64
+ }
65
+ } catch {
66
+ // Server is still starting.
67
+ }
68
+ await wait(100);
69
+ }
70
+
71
+ throw new Error(`Timed out waiting for LocalBridge.\n${details()}`);
72
+ }
73
+
74
+ function spawnBridge({ bridgePort, remoteHubPort }) {
75
+ const bridgeRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
76
+ const env = {
77
+ ...process.env,
78
+ BRIDGE_PORT: String(bridgePort),
79
+ BRIDGE_TOKEN,
80
+ BRIDGE_REQUIRE_TOKEN: '1',
81
+ MINDEXEC_REMOTE_HUB: '1',
82
+ REMOTE_HUB_HOST: '127.0.0.1',
83
+ REMOTE_HUB_PORT: String(remoteHubPort),
84
+ REMOTE_HUB_PAIR_TOKEN: PAIR_TOKEN,
85
+ NO_COLOR: '1'
86
+ };
87
+
88
+ const child = spawn(process.execPath, ['server.js'], {
89
+ cwd: bridgeRoot,
90
+ stdio: ['ignore', 'pipe', 'pipe'],
91
+ windowsHide: true,
92
+ env
93
+ });
94
+
95
+ let stdout = '';
96
+ let stderr = '';
97
+ child.stdout.on('data', chunk => {
98
+ stdout += chunk.toString();
99
+ });
100
+ child.stderr.on('data', chunk => {
101
+ stderr += chunk.toString();
102
+ });
103
+
104
+ const exitPromise = new Promise(resolve => child.once('exit', resolve));
105
+ const stop = async () => {
106
+ if (child.exitCode === null && !child.killed) {
107
+ child.kill('SIGTERM');
108
+ await Promise.race([exitPromise, wait(5000)]);
109
+ if (child.exitCode === null && !child.killed) {
110
+ child.kill('SIGKILL');
111
+ }
112
+ }
113
+ };
114
+
115
+ return {
116
+ baseUrl: `http://127.0.0.1:${bridgePort}`,
117
+ details: () => `stdout=${stdout}\nstderr=${stderr}`,
118
+ stop
119
+ };
120
+ }
121
+
122
+ async function openWebSocket(url) {
123
+ const ws = new WebSocket(url);
124
+ await new Promise((resolve, reject) => {
125
+ ws.once('open', resolve);
126
+ ws.once('error', reject);
127
+ });
128
+ return ws;
129
+ }
130
+
131
+ async function main() {
132
+ const bridgePort = await findFreePort();
133
+ const remoteHubPort = await findFreePort();
134
+ const bridge = spawnBridge({ bridgePort, remoteHubPort });
135
+ let agentWs = null;
136
+ let inputWs = null;
137
+
138
+ try {
139
+ await waitForBridge(bridge.baseUrl, bridge.details);
140
+
141
+ const receivedCommands = [];
142
+ agentWs = await openWebSocket(`ws://127.0.0.1:${remoteHubPort}/remote-agent`);
143
+ agentWs.on('message', data => {
144
+ const text = Buffer.isBuffer(data) ? data.toString('utf8') : String(data || '');
145
+ if (!text.trim().startsWith('{')) {
146
+ return;
147
+ }
148
+
149
+ const message = JSON.parse(text);
150
+ if (message.command === 'input.control') {
151
+ receivedCommands.push(message);
152
+ }
153
+ });
154
+ agentWs.send(JSON.stringify({
155
+ type: 'hello',
156
+ pairToken: PAIR_TOKEN,
157
+ deviceId: DEVICE_ID,
158
+ deviceName: 'Remote Input WS Smoke',
159
+ hostname: 'remote-input-ws-smoke',
160
+ platform: process.platform,
161
+ arch: process.arch,
162
+ pid: process.pid,
163
+ agentVersion: '0.0.0-input-ws-smoke',
164
+ runtime: 'node-smoke',
165
+ capabilities: {
166
+ status: true,
167
+ thumbnail: true,
168
+ liveStream: true,
169
+ binaryFrames: true,
170
+ control: true,
171
+ computerAgent: true,
172
+ taskDispatch: true,
173
+ aiAssist: false
174
+ }
175
+ }));
176
+ agentWs.send(JSON.stringify({
177
+ type: 'status',
178
+ status: {
179
+ uptimeSec: 1,
180
+ totalMem: 2,
181
+ freeMem: 1,
182
+ timestamp: new Date().toISOString()
183
+ }
184
+ }));
185
+
186
+ await waitFor(async () => {
187
+ const result = await fetchJson(`${bridge.baseUrl}/api/remote/devices`);
188
+ return result.payload?.devices?.find(device => device.deviceId === DEVICE_ID && device.connected === true);
189
+ }, 10000, 'device registration');
190
+
191
+ inputWs = await openWebSocket(`${bridge.baseUrl.replace(/^http:/, 'ws:')}/api/remote/input/ws?token=${encodeURIComponent(BRIDGE_TOKEN)}`);
192
+ inputWs.send(JSON.stringify({
193
+ type: 'input',
194
+ deviceId: DEVICE_ID,
195
+ requestId: 'pointer-move',
196
+ input: {
197
+ type: 'pointerMove',
198
+ normalizedX: 0.42,
199
+ normalizedY: 0.54,
200
+ controlLeaseId: 'input-ws-smoke-lease'
201
+ }
202
+ }));
203
+ inputWs.send(JSON.stringify({
204
+ type: 'input',
205
+ deviceId: DEVICE_ID,
206
+ requestId: 'key-down',
207
+ input: {
208
+ type: 'keyDown',
209
+ key: 'A',
210
+ code: 'KeyA',
211
+ repeat: false,
212
+ controlLeaseId: 'input-ws-smoke-lease'
213
+ }
214
+ }));
215
+ inputWs.send(JSON.stringify({
216
+ type: 'input',
217
+ deviceId: DEVICE_ID,
218
+ requestId: 'key-up',
219
+ input: {
220
+ type: 'keyUp',
221
+ key: 'A',
222
+ code: 'KeyA',
223
+ repeat: false,
224
+ controlLeaseId: 'input-ws-smoke-lease'
225
+ }
226
+ }));
227
+
228
+ await waitFor(() => receivedCommands.length >= 3, 10000, 'input.control commands');
229
+ const commandTypes = receivedCommands.map(command => command.payload?.type);
230
+ assert.deepEqual(commandTypes.slice(0, 3), ['pointerMove', 'keyDown', 'keyUp']);
231
+ assert.equal(receivedCommands[0].payload.normalizedX, 0.42);
232
+ assert.equal(receivedCommands[0].payload.normalizedY, 0.54);
233
+ assert.equal(receivedCommands[1].payload.key, 'A');
234
+ assert.equal(receivedCommands[1].payload.code, 'KeyA');
235
+ assert.equal(receivedCommands[2].payload.key, 'A');
236
+ assert.equal(receivedCommands[2].payload.code, 'KeyA');
237
+
238
+ const status = await fetchJson(`${bridge.baseUrl}/api/status?remoteInput=ws`);
239
+ assert.equal(status.ok, true);
240
+ assert.equal(status.payload?.remoteInputWsPath, '/api/remote/input/ws');
241
+ assert.ok(status.payload?.remoteInputWs?.clientCount >= 1, JSON.stringify(status.payload?.remoteInputWs));
242
+ assert.ok(status.payload?.remoteInputWs?.inputsQueued >= 3, JSON.stringify(status.payload?.remoteInputWs));
243
+ assert.ok(status.payload?.remoteInputWs?.pointerMovesQueued >= 1, JSON.stringify(status.payload?.remoteInputWs));
244
+ assert.ok(status.payload?.remoteInputWs?.keyEventsQueued >= 2, JSON.stringify(status.payload?.remoteInputWs));
245
+ assert.equal(status.payload?.remoteInputWs?.lastDeviceId, DEVICE_ID);
246
+ assert.equal(status.payload?.remoteInputWs?.lastInputType, 'keyUp');
247
+
248
+ console.log('Remote input WebSocket smoke OK');
249
+ } finally {
250
+ if (inputWs && inputWs.readyState === WebSocket.OPEN) {
251
+ inputWs.close();
252
+ }
253
+ if (agentWs && agentWs.readyState === WebSocket.OPEN) {
254
+ agentWs.close();
255
+ }
256
+ await bridge.stop();
257
+ }
258
+ }
259
+
260
+ main().catch(error => {
261
+ console.error(error);
262
+ process.exitCode = 1;
263
+ });