@mindexec/cli 0.2.148 → 0.2.150

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.148",
3
+ "version": "0.2.150",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -945,12 +945,12 @@ try {
945
945
  assert.match(cards[0]?.title || '', /Seen:/);
946
946
  assert.match(cards[0]?.title || '', /Uptime:/);
947
947
  assert.equal(/\b(Seen|Uptime|Mem|Load)\b/.test(cards[0]?.textContent || ''), false);
948
- assert.match(deviceGrid.style.cssText, /minmax\(132px,\s*1fr\)/);
948
+ assert.match(deviceGrid.style.cssText, /minmax\(198px,\s*1fr\)/);
949
949
  sizeControls.querySelector('[data-remote-fleet-action="monitor-size-up"]').dispatchEvent({ type: 'click' });
950
950
  assert.equal(bodyView.dataset.remoteFleetDensity, 'large');
951
- assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(168px,\s*1fr\)/);
951
+ assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(297px,\s*1fr\)/);
952
952
  assert.equal(mirrorBodyView.dataset.remoteFleetDensity, 'large');
953
- assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(168px,\s*1fr\)/);
953
+ assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(297px,\s*1fr\)/);
954
954
  assert.ok(diagnostics.textOverlayInvalidations.some(entry =>
955
955
  entry.nodeId === 'remote-fleet-render-smoke'
956
956
  && entry.reason === 'remote-monitor-size'));
@@ -961,9 +961,15 @@ try {
961
961
  && entry.overlayInvalidated === true));
962
962
  bodyView.querySelector('[data-remote-fleet-action="monitor-size-down"]').dispatchEvent({ type: 'click' });
963
963
  assert.equal(bodyView.dataset.remoteFleetDensity, 'cards');
964
- assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(132px,\s*1fr\)/);
964
+ assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(198px,\s*1fr\)/);
965
965
  assert.equal(mirrorBodyView.dataset.remoteFleetDensity, 'cards');
966
- assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(132px,\s*1fr\)/);
966
+ assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(198px,\s*1fr\)/);
967
+ bodyView.querySelector('[data-remote-fleet-action="monitor-size-down"]').dispatchEvent({ type: 'click' });
968
+ assert.equal(bodyView.dataset.remoteFleetDensity, 'dense');
969
+ assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(132px,\s*1fr\)/);
970
+ bodyView.querySelector('[data-remote-fleet-action="monitor-size-up"]').dispatchEvent({ type: 'click' });
971
+ assert.equal(bodyView.dataset.remoteFleetDensity, 'cards');
972
+ assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(198px,\s*1fr\)/);
967
973
  mirrorShell.remove();
968
974
  cards = bodyView.querySelectorAll('article[data-device-id]');
969
975
  const patchTarget = devices.find(device =>
@@ -1216,6 +1222,10 @@ try {
1216
1222
  assert.equal(bodyView.textContent.includes('No screen'), false);
1217
1223
  assert.equal(bodyView.textContent.includes('@mindexec/cli'), false);
1218
1224
  assert.equal(nodeShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'false');
1225
+ const { nodeShell: hostMirrorShell, bodyView: hostMirrorBodyView } = createRemoteFleetTemplateShell(document, focusedDevice.DeviceId);
1226
+ document.body.appendChild(hostMirrorShell);
1227
+ manager.renderRemoteFleetMonitorForTest(hostMirrorBodyView, monitorNode);
1228
+ assert.equal(hostMirrorShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'false');
1219
1229
  const initialHostButton = nodeShell.querySelector('[data-remote-fleet-action="set-host"]');
1220
1230
  assert.equal(initialHostButton?.textContent, 'Set Host');
1221
1231
  initialHostButton.dispatchEvent({ type: 'click' });
@@ -1227,6 +1237,17 @@ try {
1227
1237
  const hostFeedback = bodyView.querySelector('[data-remote-fleet-task-feedback="true"]');
1228
1238
  assert.equal(hostFeedback?.style.display, 'none');
1229
1239
  assert.equal(hostFeedback?.textContent, '');
1240
+ assert.equal(nodeShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'true');
1241
+ assert.equal(hostMirrorShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'true');
1242
+ assert.ok(diagnostics.textOverlayInvalidations.some(entry =>
1243
+ entry.nodeId === 'remote-fleet-render-smoke'
1244
+ && entry.reason === 'remote-monitor-host'));
1245
+ assert.ok(diagnostics.runtimeTrace.some(entry =>
1246
+ entry.type === 'remote.monitor.projectionInvalidated'
1247
+ && entry.nodeId === 'remote-fleet-render-smoke'
1248
+ && entry.reason === 'host'
1249
+ && entry.overlayInvalidated === true));
1250
+ hostMirrorShell.remove();
1230
1251
 
1231
1252
  hub.setHostTarget({
1232
1253
  nodeId: 'remote-fleet-render-smoke',
@@ -1305,7 +1326,7 @@ try {
1305
1326
  assert.ok(emptyScreenShell);
1306
1327
  assert.match(emptyScreenShell.style.cssText, /padding:\s*2px 4px 6px 4px;/);
1307
1328
  const emptyScreens = emptyBody.querySelectorAll('[data-remote-fleet-empty-screen="true"]');
1308
- assert.ok(emptyScreens.length >= 24, `expected empty monitor to fill space, got ${emptyScreens.length}`);
1329
+ assert.ok(emptyScreens.length >= 12, `expected empty monitor to fill space, got ${emptyScreens.length}`);
1309
1330
  assert.notEqual(emptyScreens.length, 6);
1310
1331
  assert.match(emptyScreens[0].style.cssText, /border-radius:\s*0/);
1311
1332
  assert.ok(Array.from(emptyBody.children).map(child =>
@@ -3813,13 +3813,13 @@
3813
3813
  const REMOTE_FLEET_DEVICE_SEMANTIC_TYPE = 'RemoteFleetDevice';
3814
3814
  const REMOTE_FLEET_CENTER_NUDGE_PX = 4;
3815
3815
  const REMOTE_FLEET_MONITOR_TILE_GAP_PX = 8;
3816
- const REMOTE_FLEET_EMPTY_SCREEN_MIN_WIDTH = 132;
3817
- const REMOTE_FLEET_EMPTY_SCREEN_MIN_HEIGHT = 72;
3816
+ const REMOTE_FLEET_EMPTY_SCREEN_MIN_WIDTH = 198;
3817
+ const REMOTE_FLEET_EMPTY_SCREEN_MIN_HEIGHT = 108;
3818
3818
  const REMOTE_FLEET_MONITOR_SIZE_LEVELS = Object.freeze(['dense', 'cards', 'large']);
3819
3819
  const REMOTE_FLEET_MONITOR_TILE_METRICS = Object.freeze({
3820
- dense: Object.freeze({ tileMinWidth: 104, tileMinHeight: 66, emptyMinWidth: 104, emptyMinHeight: 58 }),
3821
- cards: Object.freeze({ tileMinWidth: 132, tileMinHeight: 84, emptyMinWidth: 132, emptyMinHeight: 72 }),
3822
- large: Object.freeze({ tileMinWidth: 168, tileMinHeight: 106, emptyMinWidth: 168, emptyMinHeight: 94 })
3820
+ dense: Object.freeze({ tileMinWidth: 132, tileMinHeight: 84, emptyMinWidth: 132, emptyMinHeight: 72 }),
3821
+ cards: Object.freeze({ tileMinWidth: 198, tileMinHeight: 126, emptyMinWidth: 198, emptyMinHeight: 108 }),
3822
+ large: Object.freeze({ tileMinWidth: 297, tileMinHeight: 189, emptyMinWidth: 297, emptyMinHeight: 162 })
3823
3823
  });
3824
3824
  const AUTOMATION_NODE_KIND_METADATA_KEY = 'AutomationNodeKind';
3825
3825
  const AUTOMATION_NODE_LABEL_METADATA_KEY = 'AutomationNodeLabel';
@@ -13652,6 +13652,52 @@
13652
13652
  return nodeState;
13653
13653
  }
13654
13654
 
13655
+ function applyRemoteFleetHostTargetResultToNodeModel(nodeModel, nodeId, enabled, result) {
13656
+ const id = String(nodeId || '').trim();
13657
+ if (!nodeModel || !id || !isRemoteFleetResultSuccess(result)) {
13658
+ return false;
13659
+ }
13660
+
13661
+ const metadata = ensureNodeMetadata(nodeModel);
13662
+ if (!metadata) {
13663
+ return false;
13664
+ }
13665
+
13666
+ const registryStatus = String(result?.registryStatus || result?.RegistryStatus || '').trim();
13667
+ const registryReason = String(result?.registryReason || result?.RegistryReason || '').trim();
13668
+ if (registryStatus) {
13669
+ metadata.RemoteFleetRegistryStatus = registryStatus;
13670
+ }
13671
+ if (registryReason) {
13672
+ metadata.RemoteFleetRegistryReason = registryReason;
13673
+ }
13674
+
13675
+ const active = enabled === true && isRemoteFleetResultActive(result);
13676
+ if (active) {
13677
+ applyRemoteFleetLocalHostTarget(nodeModel);
13678
+ metadata.RemoteFleetHostTargetState = 'hosting';
13679
+ metadata.RemoteFleetHostTargetNodeId = id;
13680
+ const hostTarget = result?.hostTarget || result?.HostTarget || {};
13681
+ const now = new Date().toISOString();
13682
+ metadata.RemoteFleetHostTargetLeaseId = String(readRemoteFleetObjectField(hostTarget, 'leaseId', 'LeaseId', metadata.RemoteFleetHostTargetLeaseId || '') || '').trim();
13683
+ metadata.RemoteFleetHostTargetEndpoint = String(readRemoteFleetObjectField(hostTarget, 'endpoint', 'Endpoint', metadata.RemoteFleetHostTargetEndpoint || metadata.RemoteFleetHubEndpoint || '') || '').trim();
13684
+ metadata.RemoteFleetHostTargetActivatedAtUtc = String(readRemoteFleetObjectField(hostTarget, 'activatedAt', 'ActivatedAt', metadata.RemoteFleetHostTargetActivatedAtUtc || now) || '').trim();
13685
+ metadata.RemoteFleetHostTargetUpdatedAtUtc = String(readRemoteFleetObjectField(hostTarget, 'updatedAt', 'UpdatedAt', now) || '').trim();
13686
+ metadata.RemoteFleetHostTargetExpiresAtUtc = String(readRemoteFleetObjectField(hostTarget, 'expiresAt', 'ExpiresAt', metadata.RemoteFleetHostTargetExpiresAtUtc || '') || '').trim();
13687
+ } else if (enabled !== true || isRemoteFleetResultExplicitlyInactive(result)) {
13688
+ metadata.RemoteFleetHostTargetState = 'inactive';
13689
+ metadata.RemoteFleetHostTargetNodeId = '';
13690
+ metadata.RemoteFleetHostTargetLeaseId = '';
13691
+ metadata.RemoteFleetHostTargetActivatedAtUtc = '';
13692
+ metadata.RemoteFleetHostTargetUpdatedAtUtc = '';
13693
+ metadata.RemoteFleetHostTargetExpiresAtUtc = '';
13694
+ }
13695
+
13696
+ nodeModel.metadata = metadata;
13697
+ nodeModel.Metadata = metadata;
13698
+ return true;
13699
+ }
13700
+
13655
13701
  function clearRemoteFleetTimers(bodyView, options = {}) {
13656
13702
  if (!bodyView) return;
13657
13703
  if (options.keepBinaryFrameSocket !== true) {
@@ -13925,6 +13971,35 @@
13925
13971
  return synced;
13926
13972
  }
13927
13973
 
13974
+ function renderRemoteFleetMonitorSurfaces(nodeId, nodeModel, sourceBodyView = null) {
13975
+ const id = String(nodeId || '').trim();
13976
+ if (!id || !nodeModel) {
13977
+ return 0;
13978
+ }
13979
+
13980
+ const escapedId = cssEscapeValue(id);
13981
+ const bodies = new Set([
13982
+ ...Array.from(document.querySelectorAll(`.template-card__remote-fleet-body[data-node-id="${escapedId}"]`)),
13983
+ ...Array.from(document.querySelectorAll(`.template-card__remote-fleet-body[data-remote-fleet-monitor-node-id="${escapedId}"]`))
13984
+ ]);
13985
+
13986
+ if (sourceBodyView) {
13987
+ bodies.add(sourceBodyView);
13988
+ }
13989
+
13990
+ let rendered = 0;
13991
+ bodies.forEach(body => {
13992
+ if (!body) {
13993
+ return;
13994
+ }
13995
+
13996
+ renderRemoteFleetMonitor(body, nodeModel);
13997
+ rendered += 1;
13998
+ });
13999
+
14000
+ return rendered;
14001
+ }
14002
+
13928
14003
  function invalidateRemoteFleetMonitorProjection(nodeId, sizeState, reason = 'size') {
13929
14004
  const id = String(nodeId || '').trim();
13930
14005
  if (!_module || !id) {
@@ -13944,11 +14019,16 @@
13944
14019
  _module._css3dVisualChangedThisFrame = true;
13945
14020
  _module._css3dVisualChangedSinceLastRender = true;
13946
14021
  wakeRemoteFleetModuleAnimation(_module, `remote-monitor-${reason}`);
13947
- window.RuntimeTrace?.emit?.('remote.monitor.sizeChanged', {
14022
+ const tracePayload = {
13948
14023
  nodeId: id,
13949
14024
  density: normalizeRemoteFleetMonitorSize(sizeState),
14025
+ reason: String(reason || 'projection'),
13950
14026
  overlayInvalidated: invalidated
13951
- });
14027
+ };
14028
+ window.RuntimeTrace?.emit?.('remote.monitor.projectionInvalidated', tracePayload);
14029
+ if (reason === 'size') {
14030
+ window.RuntimeTrace?.emit?.('remote.monitor.sizeChanged', tracePayload);
14031
+ }
13952
14032
  return invalidated;
13953
14033
  }
13954
14034
 
@@ -18117,6 +18197,10 @@
18117
18197
  rememberRemoteFleetLocalHostTarget(nodeId, enabled === true, result);
18118
18198
  if (isRemoteFleetResultSuccess(result)) {
18119
18199
  rememberRemoteFleetAutoHostPreference(nodeId, enabled === true && isRemoteFleetResultActive(result));
18200
+ if (applyRemoteFleetHostTargetResultToNodeModel(nodeModel, nodeId, enabled === true, result)) {
18201
+ renderRemoteFleetMonitorSurfaces(nodeId, nodeModel, bodyView);
18202
+ invalidateRemoteFleetMonitorProjection(nodeId, bodyView.dataset.remoteFleetDensity || densityState, 'host');
18203
+ }
18120
18204
  }
18121
18205
  if (quiet) {
18122
18206
  if (!isRemoteFleetResultSuccess(result) || !isRemoteFleetResultActive(result)) {
@@ -7,8 +7,8 @@
7
7
  <title>MindExec | Run your ideas as AI task graphs</title>
8
8
  <meta name="description" content="MindExec is an AI execution canvas for solo builders, researchers, developers, and creators. Start with free browser tools, then move serious work into saved MindCanvas projects." />
9
9
  <base href="/" />
10
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-mdm-size-sync-v583" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-mdm-size-sync-v583" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-mdm-tile-scale-v585" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-mdm-tile-scale-v585" />
12
12
  <!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
13
13
  <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
14
14
  <!-- ?꿎뼯??-->
@@ -579,7 +579,7 @@
579
579
  }
580
580
 
581
581
  const base = '_content/MindExecution.Shared/js/';
582
- const scriptVersion = '20260617-mdm-size-sync-v583';
582
+ const scriptVersion = '20260617-mdm-tile-scale-v585';
583
583
  const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
584
584
  console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
585
585
  const criticalScripts = [
@@ -1,5 +1,5 @@
1
1
  self.assetsManifest = {
2
- "version": "2KqIRZaB",
2
+ "version": "ZfLSWK2O",
3
3
  "assets": [
4
4
  {
5
5
  "hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
@@ -86,7 +86,7 @@
86
86
  "url": "_content/MindExecution.Shared/js/mind-map-core.js.backup"
87
87
  },
88
88
  {
89
- "hash": "sha256-jDvRb/lyHSbYOYjqGqyc0m3AIRkOtfL144gqEyAGHOM=",
89
+ "hash": "sha256-Ma2j27vONNBesOrw65Auhtvwr3a5NFSp7sDag7VUo38=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-TJzGANRJXvjZ2Tpohu7NwDaJqYaNRaaVMNDegpwN3GI=",
837
+ "hash": "sha256-uZsIbGZb6Q24FUaQCppHT2DCnj7ae7QpkaKq6YnmLIY=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: 2KqIRZaB */
1
+ /* Manifest version: ZfLSWK2O */
2
2
  // Hosted deployments should prefer the network over stale offline caches.
3
3
  // This service worker immediately clears old Blazor offline caches and unregisters itself.
4
4