@mindexec/cli 0.2.147 → 0.2.148

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.147",
3
+ "version": "0.2.148",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -434,6 +434,7 @@ async function loadCss3DManager() {
434
434
  const runtimeTrace = [];
435
435
  const webSocketConnections = [];
436
436
  const webSocketSends = [];
437
+ const textOverlayInvalidations = [];
437
438
  class SmokeURL extends URL {}
438
439
  SmokeURL.createObjectURL = blob => {
439
440
  objectUrlCalls.push(blob);
@@ -536,6 +537,15 @@ async function loadCss3DManager() {
536
537
  runtimeTrace.push({ type, ...data });
537
538
  }
538
539
  },
540
+ MindMapTextOverlayV2: {
541
+ invalidateReadonlySource(module, nodeId, reason) {
542
+ textOverlayInvalidations.push({ module, nodeId, reason });
543
+ return true;
544
+ },
545
+ invalidateNode(module, nodeId, reason) {
546
+ textOverlayInvalidations.push({ module, nodeId, reason, fallback: true });
547
+ }
548
+ },
539
549
  Promise
540
550
  };
541
551
  context.window = context;
@@ -552,7 +562,8 @@ async function loadCss3DManager() {
552
562
  fetchCalls,
553
563
  runtimeTrace,
554
564
  webSocketConnections,
555
- webSocketSends
565
+ webSocketSends,
566
+ textOverlayInvalidations
556
567
  }
557
568
  };
558
569
  }
@@ -891,6 +902,9 @@ try {
891
902
  document.body.appendChild(moduleRef._textOverlayV2State.layer);
892
903
 
893
904
  manager.renderRemoteFleetMonitorForTest(bodyView, monitorNode);
905
+ const { nodeShell: mirrorShell, bodyView: mirrorBodyView } = createRemoteFleetTemplateShell(document, focusedDevice.DeviceId);
906
+ document.body.appendChild(mirrorShell);
907
+ mirrorBodyView.dataset.remoteFleetDensity = 'cards';
894
908
 
895
909
  let cards = bodyView.querySelectorAll('article[data-device-id]');
896
910
  assert.equal(cards.length, connectedCount);
@@ -935,9 +949,22 @@ try {
935
949
  sizeControls.querySelector('[data-remote-fleet-action="monitor-size-up"]').dispatchEvent({ type: 'click' });
936
950
  assert.equal(bodyView.dataset.remoteFleetDensity, 'large');
937
951
  assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(168px,\s*1fr\)/);
952
+ assert.equal(mirrorBodyView.dataset.remoteFleetDensity, 'large');
953
+ assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(168px,\s*1fr\)/);
954
+ assert.ok(diagnostics.textOverlayInvalidations.some(entry =>
955
+ entry.nodeId === 'remote-fleet-render-smoke'
956
+ && entry.reason === 'remote-monitor-size'));
957
+ assert.ok(diagnostics.runtimeTrace.some(entry =>
958
+ entry.type === 'remote.monitor.sizeChanged'
959
+ && entry.nodeId === 'remote-fleet-render-smoke'
960
+ && entry.density === 'large'
961
+ && entry.overlayInvalidated === true));
938
962
  bodyView.querySelector('[data-remote-fleet-action="monitor-size-down"]').dispatchEvent({ type: 'click' });
939
963
  assert.equal(bodyView.dataset.remoteFleetDensity, 'cards');
940
964
  assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(132px,\s*1fr\)/);
965
+ assert.equal(mirrorBodyView.dataset.remoteFleetDensity, 'cards');
966
+ assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(132px,\s*1fr\)/);
967
+ mirrorShell.remove();
941
968
  cards = bodyView.querySelectorAll('article[data-device-id]');
942
969
  const patchTarget = devices.find(device =>
943
970
  device.Connected === true
@@ -13898,6 +13898,60 @@
13898
13898
  ).trim();
13899
13899
  }
13900
13900
 
13901
+ function syncRemoteFleetMonitorSizeSurfaces(nodeId, sizeState, sourceBodyView, nodeModel) {
13902
+ const id = String(nodeId || '').trim();
13903
+ const density = normalizeRemoteFleetMonitorSize(sizeState);
13904
+ if (!id || !sourceBodyView) {
13905
+ return 0;
13906
+ }
13907
+
13908
+ const escapedId = cssEscapeValue(id);
13909
+ const bodies = new Set([
13910
+ ...Array.from(document.querySelectorAll(`.template-card__remote-fleet-body[data-node-id="${escapedId}"]`)),
13911
+ ...Array.from(document.querySelectorAll(`.template-card__remote-fleet-body[data-remote-fleet-monitor-node-id="${escapedId}"]`))
13912
+ ]);
13913
+
13914
+ let synced = 0;
13915
+ bodies.forEach(body => {
13916
+ if (!body || body === sourceBodyView) {
13917
+ return;
13918
+ }
13919
+
13920
+ body.dataset.remoteFleetDensity = density;
13921
+ renderRemoteFleetMonitor(body, nodeModel);
13922
+ synced += 1;
13923
+ });
13924
+
13925
+ return synced;
13926
+ }
13927
+
13928
+ function invalidateRemoteFleetMonitorProjection(nodeId, sizeState, reason = 'size') {
13929
+ const id = String(nodeId || '').trim();
13930
+ if (!_module || !id) {
13931
+ return false;
13932
+ }
13933
+
13934
+ const overlay = window.MindMapTextOverlayV2;
13935
+ let invalidated = false;
13936
+ if (typeof overlay?.invalidateReadonlySource === 'function') {
13937
+ invalidated = overlay.invalidateReadonlySource(_module, id, `remote-monitor-${reason}`) === true;
13938
+ } else if (typeof overlay?.invalidateNode === 'function') {
13939
+ overlay.invalidateNode(_module, id, 'layout');
13940
+ invalidated = true;
13941
+ }
13942
+
13943
+ _module._forceUpdateFrames = Math.max(Number(_module._forceUpdateFrames || 0), 2);
13944
+ _module._css3dVisualChangedThisFrame = true;
13945
+ _module._css3dVisualChangedSinceLastRender = true;
13946
+ wakeRemoteFleetModuleAnimation(_module, `remote-monitor-${reason}`);
13947
+ window.RuntimeTrace?.emit?.('remote.monitor.sizeChanged', {
13948
+ nodeId: id,
13949
+ density: normalizeRemoteFleetMonitorSize(sizeState),
13950
+ overlayInvalidated: invalidated
13951
+ });
13952
+ return invalidated;
13953
+ }
13954
+
13901
13955
  function getRemoteFleetBodyFromPreview(preview) {
13902
13956
  if (!preview) {
13903
13957
  return null;
@@ -18105,8 +18159,11 @@
18105
18159
  return;
18106
18160
  }
18107
18161
 
18108
- bodyView.dataset.remoteFleetDensity = REMOTE_FLEET_MONITOR_SIZE_LEVELS[nextIndex];
18162
+ const nextDensity = REMOTE_FLEET_MONITOR_SIZE_LEVELS[nextIndex];
18163
+ bodyView.dataset.remoteFleetDensity = nextDensity;
18164
+ syncRemoteFleetMonitorSizeSurfaces(nodeId, nextDensity, bodyView, nodeModel);
18109
18165
  renderRemoteFleetMonitor(bodyView, nodeModel);
18166
+ invalidateRemoteFleetMonitorProjection(nodeId, nextDensity, 'size');
18110
18167
  };
18111
18168
 
18112
18169
  bodyView.querySelectorAll('[data-remote-fleet-action]').forEach(button => {
@@ -3706,6 +3706,44 @@
3706
3706
  module._lastOverlayKey = '';
3707
3707
  }
3708
3708
 
3709
+ function invalidateReadonlySource(module, nodeId = '', reason = 'source') {
3710
+ const state = ensureState(module);
3711
+ if (!state) {
3712
+ return false;
3713
+ }
3714
+
3715
+ const id = normalizeId(nodeId);
3716
+ if (id) {
3717
+ state.dirtyNodes.add(id);
3718
+ const card = state.cards.get(selectionCardKey(id)) || null;
3719
+ if (card?.dataset) {
3720
+ card.dataset.contentKey = '';
3721
+ card.dataset.sourceEpoch = '';
3722
+ }
3723
+ } else {
3724
+ state.cards.forEach(card => {
3725
+ if (!card?.dataset) {
3726
+ return;
3727
+ }
3728
+
3729
+ card.dataset.contentKey = '';
3730
+ card.dataset.sourceEpoch = '';
3731
+ });
3732
+ }
3733
+
3734
+ const epoch = bumpReadonlySourceEpoch(module);
3735
+ state.dirtyLayout = true;
3736
+ module._overlayDirty = true;
3737
+ module._lastOverlayKey = '';
3738
+ module.requestAnimationWake?.(`readonly-source:${reason || 'source'}`);
3739
+ window.RuntimeTrace?.emit?.('textOverlay.readonlySourceInvalidated', {
3740
+ nodeId: id,
3741
+ reason: String(reason || 'source'),
3742
+ epoch
3743
+ });
3744
+ return true;
3745
+ }
3746
+
3709
3747
  function hidePassiveSelectionCards(module, state = ensureState(module), options = {}) {
3710
3748
  if (!module || !state) {
3711
3749
  return 0;
@@ -4459,6 +4497,7 @@
4459
4497
  suspendSource: suspendSource,
4460
4498
  resumeSource: resumeSource,
4461
4499
  hasLiveInteractiveOverlay: hasLiveInteractiveOverlay,
4462
- syncReadonlySourceScroll: syncReadonlySourceScroll
4500
+ syncReadonlySourceScroll: syncReadonlySourceScroll,
4501
+ invalidateReadonlySource: invalidateReadonlySource
4463
4502
  };
4464
4503
  })();
@@ -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-monitor-wall-v582" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-mdm-monitor-wall-v582" />
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" />
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-monitor-wall-v582';
582
+ const scriptVersion = '20260617-mdm-size-sync-v583';
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": "7b1rjf6s",
2
+ "version": "2KqIRZaB",
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-N0yX4cRkRJsZGixBtFAt5IkDeSMDDcKAmNtERmwuC+0=",
89
+ "hash": "sha256-jDvRb/lyHSbYOYjqGqyc0m3AIRkOtfL144gqEyAGHOM=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -154,7 +154,7 @@
154
154
  "url": "_content/MindExecution.Shared/js/mind-map-text-lod-system.js"
155
155
  },
156
156
  {
157
- "hash": "sha256-3l28axG42hfZEY1kU745EtUjPK+at8T9yNb/OERee0U=",
157
+ "hash": "sha256-qwNb+PcesE9rgfkjiJrUOWHz/J2vwDUb6wzJ3j5Zj90=",
158
158
  "url": "_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js"
159
159
  },
160
160
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-OtihK34SGInpkBV5g69QHYb9Mt/yUTsekpGz4Jl29L0=",
837
+ "hash": "sha256-TJzGANRJXvjZ2Tpohu7NwDaJqYaNRaaVMNDegpwN3GI=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: 7b1rjf6s */
1
+ /* Manifest version: 2KqIRZaB */
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