@mindexec/cli 0.2.457 → 0.2.458

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 (20) hide show
  1. package/package.json +1 -1
  2. package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
  3. package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
  4. package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
  5. package/scripts/remote-fleet-render-smoke.mjs +29 -186
  6. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +51 -346
  7. package/wwwroot/_framework/{MindExecution.Core.speado072l.dll → MindExecution.Core.2ch68iyy8o.dll} +0 -0
  8. package/wwwroot/_framework/{MindExecution.Kernel.mjy31ssdac.dll → MindExecution.Kernel.dh617xfv36.dll} +0 -0
  9. package/wwwroot/_framework/{MindExecution.Plugins.Admin.vbjjmdaao2.dll → MindExecution.Plugins.Admin.0sm50hbae9.dll} +0 -0
  10. package/wwwroot/_framework/{MindExecution.Plugins.Business.0cr5jc6wqe.dll → MindExecution.Plugins.Business.3wq01orrbu.dll} +0 -0
  11. package/wwwroot/_framework/{MindExecution.Plugins.Concept.m7p666e0jd.dll → MindExecution.Plugins.Concept.z8yl28fa2a.dll} +0 -0
  12. package/wwwroot/_framework/{MindExecution.Plugins.Directory.kmdtirnljl.dll → MindExecution.Plugins.Directory.m7murp5oes.dll} +0 -0
  13. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.m1pfeozacj.dll → MindExecution.Plugins.PlanMaster.yuyrbpf0vh.dll} +0 -0
  14. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.nvsc9q4s6b.dll → MindExecution.Plugins.YouTube.rwxvn00rm2.dll} +0 -0
  15. package/wwwroot/_framework/{MindExecution.Shared.9jaznballd.dll → MindExecution.Shared.r9k48iyijb.dll} +0 -0
  16. package/wwwroot/_framework/{MindExecution.Web.k5jxwawryl.dll → MindExecution.Web.742aribkxm.dll} +0 -0
  17. package/wwwroot/_framework/blazor.boot.json +21 -21
  18. package/wwwroot/index.html +722 -722
  19. package/wwwroot/service-worker-assets.js +24 -24
  20. package/wwwroot/service-worker.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.457",
3
+ "version": "0.2.458",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -1020,9 +1020,8 @@ try {
1020
1020
  const patchCard = Array.from(cards).find(card => card.dataset.deviceId === patchTarget.DeviceId);
1021
1021
  const patchPreview = patchCard?.querySelector('[data-remote-fleet-device-preview="tile"]');
1022
1022
  assert.ok(patchPreview);
1023
- const patchKind = String(patchPreview.dataset.remoteFleetFrameKind || '').toLowerCase() === 'live'
1024
- ? 'live'
1025
- : 'thumbnail';
1023
+ assert.notEqual(patchPreview.dataset.remoteFleetFrameKind, 'live');
1024
+ const patchKind = 'thumbnail';
1026
1025
  const patchUrl = `/api/remote/devices/${encodeURIComponent(patchTarget.DeviceId)}/${patchKind}?token=render-smoke-frame&seq=9999`;
1027
1026
  const patchCount = manager.applyRemoteFleetFramePatchesForTest(bodyView, [{
1028
1027
  deviceId: patchTarget.DeviceId,
@@ -1047,168 +1046,13 @@ try {
1047
1046
  assert.equal(patchPreview.querySelector('img[data-remote-fleet-frame-image="true"]')?.dataset.remoteFleetFrameUrl, patchUrl);
1048
1047
  assert.equal(patchPreview.querySelector('[data-remote-fleet-frame-badge="true"]'), null);
1049
1048
 
1050
- const objectUrlCountBeforeBinary = diagnostics.objectUrlCalls.length;
1051
- const imageBitmapCountBeforeBinary = diagnostics.imageBitmapCalls.length;
1052
- const drawCountBeforeBinary = document.canvasDrawCalls.length;
1053
- const binaryPatchCount = manager.applyRemoteFleetFramePatchesForTest(bodyView, [{
1054
- deviceId: patchTarget.DeviceId,
1055
- kind: 'live',
1056
- frameSeq: 10000,
1057
- frameUrl: '',
1058
- streamId: 'render-smoke-binary-live',
1059
- contentHash: 'render-smoke-binary-live-10000',
1060
- receivedAt: new Date().toISOString(),
1061
- _remoteFleetPayloadBlob: new Blob([new Uint8Array([0xff, 0xd8, 0xff, 0xd9])], { type: 'image/jpeg' }),
1062
- _remoteFleetBinaryFrame: true
1063
- }]);
1064
- assert.equal(binaryPatchCount, 1);
1065
- await wait(20);
1066
- const binaryCanvas = patchPreview.querySelector('canvas[data-remote-fleet-frame-canvas="true"]');
1067
- const binaryImage = patchPreview.querySelector('img[data-remote-fleet-frame-image="true"]');
1068
- assert.equal(patchPreview.dataset.remoteFleetFrameKind, 'live');
1069
- assert.equal(patchPreview.dataset.remoteFleetFrameSeq, '10000');
1070
- assert.equal(binaryCanvas?.dataset.remoteFleetFrameSeq, '10000');
1071
- assert.equal(binaryCanvas?.style.display, 'block');
1072
- assert.equal(binaryImage?.style.display, 'none');
1073
- assert.equal(diagnostics.imageBitmapCalls.length, imageBitmapCountBeforeBinary + 1);
1074
- assert.equal(diagnostics.objectUrlCalls.length, objectUrlCountBeforeBinary);
1075
- const binaryDrawCalls = document.canvasDrawCalls.slice(drawCountBeforeBinary);
1076
- assert.ok(
1077
- binaryDrawCalls.some(call => call.op === 'drawImage'),
1078
- 'expected binary Blob frame to draw directly to canvas');
1079
- assert.equal(
1080
- binaryDrawCalls.some(call => call.op === 'clearRect' || call.op === 'fillRect'),
1081
- false,
1082
- 'binary Blob frame paint must not clear/fill the canvas before drawing');
1083
- assert.ok(
1084
- Number(moduleRef._forceUpdateFrames || 0) >= 2,
1085
- 'binary live frame commits must wake the passive MDM CSS3D frame loop');
1086
- assert.equal(moduleRef._lastAnimationWakeReason, 'remote-live-css3d-frame');
1087
- assert.ok(
1088
- diagnostics.runtimeTrace.some(event => event.type === 'remote.frame.css3dWake'),
1089
- 'binary live frame commits must trace the MDM CSS3D wake path');
1090
- const binaryCanvasBeforeRerender = binaryCanvas;
1091
-
1092
- const liveOverlayCard = document.createElement('div');
1093
- liveOverlayCard.dataset.nodeId = 'remote-fleet-render-smoke';
1094
- liveOverlayCard.dataset.sourceKind = 'live';
1095
- liveOverlayCard.dataset.liveInteractive = 'true';
1096
- liveOverlayCard.style.display = 'block';
1097
- moduleRef._textOverlayV2State.cards.set('selection:remote-fleet-render-smoke', liveOverlayCard);
1098
- moduleRef._forceUpdateFrames = 0;
1099
- moduleRef._animationWakeCount = 0;
1100
- moduleRef._lastAnimationWakeReason = '';
1101
-
1102
- await wait(20);
1103
- const liveWs = diagnostics.webSocketConnections.find(connection =>
1104
- String(connection?.url || '').includes('/api/remote/atlas/ws'));
1105
- assert.ok(
1106
- liveWs,
1107
- `expected MDM render to open the Mode 4 Atlas WebSocket: ${diagnostics.webSocketConnections.map(connection => connection.url).join(', ')}`
1108
- );
1109
- assert.equal(liveWs.readyState, 1, 'Mode 4 Atlas WebSocket should be open before rerender');
1110
- const wsCountBeforeRerender = diagnostics.webSocketConnections.length;
1111
- const wsCloseCountBeforeRerender = liveWs.closeCount;
1112
- const websocketFrameSeq = 10001;
1113
- liveWs.onmessage?.({
1114
- data: JSON.stringify({
1115
- type: 'Mode4AtlasLayout',
1116
- tiles: [{
1117
- deviceId: patchTarget.DeviceId,
1118
- x: 0,
1119
- y: 0,
1120
- width: 64,
1121
- height: 36
1122
- }]
1123
- })
1124
- });
1125
- liveWs.onmessage?.({
1126
- data: new Blob([encodeRemoteBinaryFrame({
1127
- type: 'remote.frame.binary',
1128
- deviceId: patchTarget.DeviceId,
1129
- kind: 'live',
1130
- frameSeq: websocketFrameSeq,
1131
- streamId: 'render-smoke-ws-live',
1132
- contentHash: `render-smoke-ws-live-${websocketFrameSeq}`,
1133
- mimeType: 'image/jpeg',
1134
- frameMode: 'mode4-h264-atlas',
1135
- width: 64,
1136
- height: 36,
1137
- capturedAt: new Date().toISOString(),
1138
- receivedAt: new Date().toISOString()
1139
- })])
1140
- });
1141
- await waitFor(
1142
- () => patchPreview.dataset.remoteFleetFrameSeq === String(websocketFrameSeq)
1143
- );
1144
- assert.equal(
1145
- patchPreview.dataset.remoteFleetFrameSeq,
1146
- String(websocketFrameSeq),
1147
- JSON.stringify(diagnostics.runtimeTrace.slice(-12)));
1148
- assert.ok(
1149
- diagnostics.runtimeTrace.some(event =>
1150
- event.type === 'remote.atlas.painted' &&
1151
- Number(event.frameSeq || 0) === websocketFrameSeq),
1152
- 'Mode 4 Atlas frame must paint its configured device tile');
1153
-
1154
- manager.renderRemoteFleetMonitorForTest(bodyView, buildMonitorNode(devices, hub.getStatus({ includeSecrets: true }), latestTaskBatch, recentTaskBatches));
1155
- await wait(30);
1156
- assert.equal(
1157
- liveWs.closeCount,
1158
- wsCloseCountBeforeRerender,
1159
- 'MDM rerender must not close the active Mode 4 Atlas WebSocket');
1160
- assert.equal(
1161
- diagnostics.webSocketConnections.length,
1162
- wsCountBeforeRerender,
1163
- 'MDM rerender must reuse the active Mode 4 Atlas WebSocket instead of opening a replacement');
1164
- const rerenderedPatchPreview = bodyView
1165
- .querySelector(`article[data-device-id="${patchTarget.DeviceId}"]`)
1166
- ?.querySelector('[data-remote-fleet-device-preview="tile"]');
1167
- assert.ok(rerenderedPatchPreview);
1168
- assert.equal(rerenderedPatchPreview.dataset.remoteFleetFrameSeq, String(websocketFrameSeq));
1169
- const rerenderedPatchCanvas = rerenderedPatchPreview.querySelector('canvas[data-remote-fleet-frame-canvas="true"]');
1170
- assert.equal(rerenderedPatchCanvas?.style.display, 'block');
1171
- assert.equal(
1172
- rerenderedPatchCanvas,
1173
- binaryCanvasBeforeRerender,
1174
- 'MDM rerender should reuse the already-painted canvas instead of flashing a blank replacement');
1175
-
1176
- const otherBoardNodeId = 'remote-fleet-render-smoke-other-board';
1177
- const { nodeShell: otherBoardShell, bodyView: otherBoardBodyView } =
1178
- createRemoteFleetTemplateShell(document, focusedDevice.DeviceId, otherBoardNodeId);
1179
- document.body.appendChild(otherBoardShell);
1180
- manager.renderRemoteFleetMonitorForTest(
1181
- otherBoardBodyView,
1182
- buildMonitorNode(
1183
- devices,
1184
- hub.getStatus({ includeSecrets: true }),
1185
- latestTaskBatch,
1186
- recentTaskBatches,
1187
- '',
1188
- otherBoardNodeId));
1189
- await wait(30);
1190
- const otherBoardPatchPreview = otherBoardBodyView
1191
- .querySelector(`article[data-device-id="${patchTarget.DeviceId}"]`)
1192
- ?.querySelector('[data-remote-fleet-device-preview="tile"]');
1193
- assert.ok(otherBoardPatchPreview);
1194
- assert.ok(
1195
- diagnostics.webSocketConnections.length > wsCountBeforeRerender,
1196
- 'a different-board MDM must own a separate Mode 4 Atlas session');
1197
- assert.ok(diagnostics.runtimeTrace.some(event =>
1198
- event.type === 'remote.atlas.wsOpen'
1199
- && event.nodeId === otherBoardNodeId));
1200
- otherBoardShell.remove();
1201
-
1202
1049
  const controlCard = bodyView.querySelector(`article[data-device-id="${patchTarget.DeviceId}"]`);
1203
1050
  assert.ok(controlCard);
1204
1051
  controlCard.dispatchEvent({ type: 'dblclick', button: 0 });
1205
1052
  await wait(30);
1206
1053
  assert.equal(document.body.querySelector('[data-remote-fleet-control-popup="true"]'), null);
1207
- const addControlNodeCall = dotNetCalls.find(call =>
1208
- call.methodName === 'AddRemoteFleetDeviceNodeFromJs'
1209
- && call.args[0] === 'remote-fleet-render-smoke'
1210
- && call.args[1] === patchTarget.DeviceId);
1211
- assert.ok(addControlNodeCall, 'double-clicking a screen tile should create a remote workstation canvas node');
1054
+ const addControlNodeCall = dotNetCalls.find(call => call.methodName === 'AddRemoteFleetDeviceNodeFromJs');
1055
+ assert.equal(addControlNodeCall, undefined, 'MDM thumbnails must not create an expanded device node');
1212
1056
 
1213
1057
  const alternateDevice = devices.find(device =>
1214
1058
  device.Connected === true
@@ -1224,10 +1068,20 @@ try {
1224
1068
  assert.equal(selectedAfterClick?.querySelector('[data-remote-fleet-selected-indicator="true"]'), null);
1225
1069
  const livePanel = bodyView.querySelector('[data-remote-fleet-live-panel="true"]');
1226
1070
  assert.equal(livePanel, null);
1227
- assert.ok(bodyView.querySelector('[data-remote-fleet-action="task-visible"]'));
1071
+ assert.ok(bodyView.querySelector('[data-remote-fleet-action="task-selected"]'));
1228
1072
  assert.ok(bodyView.querySelector('[data-remote-fleet-action="task-connected"]'));
1229
1073
  assert.ok(bodyView.querySelector('[data-remote-fleet-task-input="true"]'));
1230
1074
  assert.ok(bodyView.querySelector('[data-remote-fleet-ai-toggle="true"]'));
1075
+ const selectedTaskInput = bodyView.querySelector('[data-remote-fleet-task-input="true"]');
1076
+ const selectedTaskButton = bodyView.querySelector('[data-remote-fleet-action="task-selected"]');
1077
+ selectedTaskInput.value = 'Inspect Git status and report the result.';
1078
+ selectedTaskButton.dispatchEvent({ type: 'click' });
1079
+ await wait(20);
1080
+ const selectedTaskCall = dotNetCalls.find(call =>
1081
+ call.methodName === 'DispatchRemoteFleetTaskFromJs'
1082
+ && call.args[0] === 'remote-fleet-render-smoke'
1083
+ && call.args[1] === alternateDevice.DeviceId);
1084
+ assert.ok(selectedTaskCall, 'selected thumbnail must target its agent command');
1231
1085
  assert.equal(bodyView.textContent.includes('all devices, no paging'), false);
1232
1086
  assert.equal(bodyView.textContent.includes('Host: Inactive'), false);
1233
1087
  assert.equal(bodyView.textContent.includes('No screen'), false);
@@ -1290,28 +1144,17 @@ try {
1290
1144
  await wait(20);
1291
1145
  const liveStartCalls = dotNetCalls
1292
1146
  .filter(call => call.methodName === 'StartRemoteFleetLiveStreamFromJs');
1293
- const subscribeMessages = diagnostics.webSocketSends
1294
- .map(send => {
1295
- try {
1296
- return JSON.parse(send.payload);
1297
- } catch {
1298
- return null;
1299
- }
1300
- })
1301
- .filter(Boolean);
1302
- const atlasConfigure = subscribeMessages.find(message =>
1303
- message.type === 'configure');
1304
- assert.ok(diagnostics.fetchCalls.some(call => call.url.includes('/api/status?remoteFrames=ws')));
1305
- assert.ok(diagnostics.webSocketConnections.length >= 1, 'expected MDM render to open Mode 4 Atlas WebSocket');
1306
- assert.ok(atlasConfigure, 'expected MDM render to configure the Mode 4 Atlas WebSocket');
1307
- assert.equal(atlasConfigure.fps, 2);
1308
- assert.equal(atlasConfigure.width, 1920);
1309
- assert.equal(atlasConfigure.height, 1080);
1310
- assert.equal(atlasConfigure.tileWidth, 320);
1311
- assert.equal(atlasConfigure.tileHeight, 180);
1312
- assert.ok(atlasConfigure.deviceIds.length > 1, 'expected visible connected devices in Atlas configuration');
1313
- assert.ok(diagnostics.runtimeTrace.some(event => event.type === 'remote.live.wsAutoStartRequested'));
1314
- assert.equal(liveStartCalls.length, 0, 'WebSocket live path must not call DotNet live-start fallback');
1147
+ assert.equal(liveStartCalls.length, 0, 'thumbnail-only MDM must not start live streams');
1148
+ assert.equal(
1149
+ diagnostics.webSocketConnections.some(connection =>
1150
+ String(connection?.url || '').includes('/api/remote/atlas/ws')
1151
+ || String(connection?.url || '').includes('/api/remote/frames/ws')),
1152
+ false,
1153
+ 'thumbnail-only MDM must not open live frame WebSockets');
1154
+ assert.equal(
1155
+ diagnostics.fetchCalls.some(call => call.url.includes('/api/status?remoteFrames=ws')),
1156
+ false,
1157
+ 'thumbnail-only MDM must not initialize live-frame transport');
1315
1158
  await wait(320);
1316
1159
  assert.ok(dotNetCalls.some(call => call.methodName === 'RefreshRemoteFleetMonitorNodeFromJs'));
1317
1160
  assert.equal(bodyView.dataset.remoteFleetTaskFollowKey, 'render-smoke-batch');
@@ -1321,9 +1164,9 @@ try {
1321
1164
  assert.ok(feedback);
1322
1165
 
1323
1166
  assert.ok(bodyView.querySelector('[data-remote-fleet-ai-toggle="true"]'));
1324
- assert.equal(dotNetCalls.some(call =>
1325
- call.methodName === 'DispatchRemoteFleetTaskBatchFromJs'
1326
- || call.methodName === 'DispatchRemoteFleetTaskFromJs'), false);
1167
+ assert.ok(dotNetCalls.some(call =>
1168
+ call.methodName === 'DispatchRemoteFleetTaskFromJs'
1169
+ && call.args[1] === alternateDevice.DeviceId));
1327
1170
 
1328
1171
  const { nodeShell: emptyShell, bodyView: emptyBody } = createRemoteFleetTemplateShell(document);
1329
1172
  document.body.appendChild(emptyShell);