@mindexec/cli 0.2.292 → 0.2.294

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.292",
3
+ "version": "0.2.294",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -5,7 +5,7 @@
5
5
  const DEBUG = false;
6
6
  const FPS_DEBUG = false;
7
7
  const FRAME_PERF_DEBUG = false;
8
- const MINDMAP_CORE_BUILD_ID = '20260620-css3d-flat-pan-v749';
8
+ const MINDMAP_CORE_BUILD_ID = '20260620-css3d-scene-stable-v752';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -606,6 +606,62 @@
606
606
  return false;
607
607
  }
608
608
 
609
+ function syncCss3dViewportForSceneRender(module, renderer, camera) {
610
+ const container = module?.container || null;
611
+ if (!container || !renderer || typeof renderer.setSize !== 'function') {
612
+ return false;
613
+ }
614
+
615
+ const rect = typeof container.getBoundingClientRect === 'function'
616
+ ? container.getBoundingClientRect()
617
+ : null;
618
+ const width = Math.max(1, Math.round(Number(rect?.width || container.clientWidth || 0)));
619
+ const height = Math.max(1, Math.round(Number(rect?.height || container.clientHeight || 0)));
620
+ if (!(width > 0 && height > 0)) {
621
+ return false;
622
+ }
623
+
624
+ const currentSize = typeof renderer.getSize === 'function'
625
+ ? renderer.getSize()
626
+ : null;
627
+ const currentWidth = Math.round(Number(currentSize?.width || 0));
628
+ const currentHeight = Math.round(Number(currentSize?.height || 0));
629
+ if (Math.abs(currentWidth - width) <= 1 && Math.abs(currentHeight - height) <= 1) {
630
+ return false;
631
+ }
632
+
633
+ try {
634
+ module?._applyRendererPixelRatio?.(false);
635
+ module?.renderer?.setSize?.(width, height, false);
636
+ } catch {
637
+ // CSS3D size still needs to recover even if WebGL resize is unavailable.
638
+ }
639
+
640
+ renderer.setSize(width, height);
641
+ if (camera?.isPerspectiveCamera === true) {
642
+ const nextAspect = width / Math.max(1, height);
643
+ if (Math.abs(Number(camera.aspect || 0) - nextAspect) > 0.0001) {
644
+ camera.aspect = nextAspect;
645
+ camera.updateProjectionMatrix?.();
646
+ }
647
+ }
648
+
649
+ module._lastContainerWidth = width;
650
+ module._lastContainerHeight = height;
651
+ module._lastViewportWidth = width;
652
+ module._lastViewportHeight = height;
653
+ module._lastViewportLeft = Number(rect?.left || 0);
654
+ module._lastViewportTop = Number(rect?.top || 0);
655
+ module._lastViewportDpr = Math.max(1, Number(window.devicePixelRatio || 1));
656
+ window.RuntimeTrace?.emit?.('css3d.viewport.sceneSizeSynced', {
657
+ width,
658
+ height,
659
+ previousWidth: currentWidth,
660
+ previousHeight: currentHeight
661
+ });
662
+ return true;
663
+ }
664
+
609
665
  function renderCss3dSceneForCurrentCamera(module, scene, camera, reason = 'css3d-render') {
610
666
  const renderer = module?.cssRenderer || null;
611
667
  if (!renderer || !scene || !camera) {
@@ -617,20 +673,8 @@
617
673
  return false;
618
674
  }
619
675
 
620
- if (typeof renderer.renderFlat === 'function' &&
621
- canUseFlatCss3dCameraMotion(module, renderer, camera, renderDebugFlags) === true) {
622
- const usedFlatSceneRender = renderer.renderFlat(scene, camera, {
623
- translateBucketPx: CAMERA_MOTION_WEBGL_TRANSFORM_TRANSLATE_BUCKET_PX,
624
- scaleBucket: CAMERA_MOTION_WEBGL_TRANSFORM_SCALE_BUCKET
625
- });
626
- if (usedFlatSceneRender === true) {
627
- module._lastCss3dCameraMotionMode = 'flat';
628
- module._lastCss3dCameraMotionReason = reason;
629
- return true;
630
- }
631
- }
632
-
633
676
  if (typeof renderer.render === 'function') {
677
+ syncCss3dViewportForSceneRender(module, renderer, camera);
634
678
  renderer.render(scene, camera);
635
679
  module._lastCss3dCameraMotionMode = 'matrix3d';
636
680
  module._lastCss3dCameraMotionReason = reason;
@@ -675,6 +719,64 @@
675
719
  return true;
676
720
  }
677
721
 
722
+ function shouldDeferFullResWebglForCss3dCameraMotion(module, options = {}) {
723
+ if (!module ||
724
+ module.isLoading === true ||
725
+ module.isDraggingNode === true ||
726
+ module.isDraggingMultipleNodes === true ||
727
+ module.isResizing === true ||
728
+ module.isWindowResizing === true ||
729
+ module.isSelecting === true) {
730
+ return false;
731
+ }
732
+
733
+ const isCameraNavigationActive =
734
+ options.isCameraNavigationOnlyInteractiveFrame === true ||
735
+ module.isPanning === true ||
736
+ module.isZooming === true ||
737
+ module._cameraMovingThisFrame === true;
738
+ if (isCameraNavigationActive !== true) {
739
+ return false;
740
+ }
741
+
742
+ if (options.isFullResMode === false ||
743
+ module.lodRenderer?.isInLODMode === true ||
744
+ options.isNodeInteracting === true ||
745
+ options.hasNonCameraNavigationForcedUpdate === true) {
746
+ return false;
747
+ }
748
+
749
+ const renderer = module.cssRenderer || null;
750
+ const camera = module.camera || null;
751
+ const flags = options.renderDebugFlags || module.renderDebugFlags || getRenderDebugFlagsSnapshot();
752
+ return !!(
753
+ flags.enableCss3d !== false &&
754
+ renderer &&
755
+ camera &&
756
+ canUseFlatCss3dCameraMotion(module, renderer, camera, flags) === true
757
+ );
758
+ }
759
+
760
+ function markFullResWebglDeferredForCss3dCameraMotion(module, reason = 'fullres-css3d-camera-motion') {
761
+ if (!module) {
762
+ return false;
763
+ }
764
+
765
+ module._clearWebglCanvasCameraTransform?.();
766
+ module._webglCameraMotionDeferred = true;
767
+ module._themeCameraMotionDeferred = true;
768
+ module._lastWebglRenderInfo = {
769
+ calls: 0,
770
+ triangles: 0,
771
+ points: 0,
772
+ lines: 0,
773
+ skipped: true,
774
+ webglDeferredForCss3dCameraMotion: true,
775
+ reason
776
+ };
777
+ return true;
778
+ }
779
+
678
780
  function hasBusinessAutomationEdgeLayer(module) {
679
781
  return !!(
680
782
  module?._businessAutomationEdgeVisualLayer?.isConnected ||
@@ -1870,6 +1972,12 @@
1870
1972
  markWebglSurfaceFrozenForZoom(module, 'uaUltraEarlyCameraOnly');
1871
1973
  } else if (module.isZooming === true) {
1872
1974
  deferWebglBootstrapForCameraMotion(module, 'uaUltraEarlyCameraOnly');
1975
+ } else if (shouldDeferFullResWebglForCss3dCameraMotion(module, {
1976
+ isCameraNavigationOnlyInteractiveFrame: true,
1977
+ isFullResMode: true,
1978
+ renderDebugFlags
1979
+ }) === true) {
1980
+ markFullResWebglDeferredForCss3dCameraMotion(module, 'uaUltraEarlyCameraOnly');
1873
1981
  } else {
1874
1982
  module._clearWebglCanvasCameraTransform?.();
1875
1983
  module.renderer.render(module.scene, module.camera);
@@ -7440,12 +7548,19 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7440
7548
  this._lastWebglRenderedCameraState &&
7441
7549
  this.renderer?.domElement
7442
7550
  );
7551
+ const shouldDeferFullResWebglForImmediateMotion =
7552
+ shouldDeferFullResWebglForCss3dCameraMotion(this, {
7553
+ isCameraNavigationOnlyInteractiveFrame: true,
7554
+ isFullResMode: true,
7555
+ renderDebugFlags
7556
+ }) === true;
7443
7557
  if (canReuseWebglCanvasForImmediateMotion === true) {
7444
7558
  deferContinuousThemeForCameraMotion(this);
7445
7559
  }
7446
7560
  if (this.isZooming !== true &&
7447
7561
  shouldFreezeWebglCanvasForImmediateZoom !== true &&
7448
7562
  !canReuseWebglCanvasForImmediateMotion &&
7563
+ shouldDeferFullResWebglForImmediateMotion !== true &&
7449
7564
  renderDebugFlags.enableThemeAnimation !== false &&
7450
7565
  isLocalSnapGridOnlyTheme(this) !== true &&
7451
7566
  this.currentThemeObject &&
@@ -7485,6 +7600,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7485
7600
  markWebglSurfaceFrozenForZoom(this, 'uaVisualOnlyMotion');
7486
7601
  } else if (this.isZooming === true) {
7487
7602
  deferWebglBootstrapForCameraMotion(this, 'uaVisualOnlyMotion');
7603
+ } else if (shouldDeferFullResWebglForImmediateMotion === true) {
7604
+ markFullResWebglDeferredForCss3dCameraMotion(this, 'uaVisualOnlyMotion');
7488
7605
  } else {
7489
7606
  this._clearWebglCanvasCameraTransform();
7490
7607
  this.renderer.render(this.scene, this.camera);
@@ -7623,12 +7740,19 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7623
7740
  this._lastWebglRenderedCameraState &&
7624
7741
  this.renderer?.domElement
7625
7742
  );
7743
+ const shouldDeferFullResWebglForStationaryMotion =
7744
+ shouldDeferFullResWebglForCss3dCameraMotion(this, {
7745
+ isCameraNavigationOnlyInteractiveFrame: true,
7746
+ isFullResMode: isFullResMode === true,
7747
+ renderDebugFlags
7748
+ }) === true;
7626
7749
  if (canReuseWebglCanvasForStationaryMotion === true) {
7627
7750
  deferContinuousThemeForCameraMotion(this);
7628
7751
  }
7629
7752
  if (this.isZooming !== true &&
7630
7753
  shouldFreezeWebglCanvasForStationaryZoom !== true &&
7631
7754
  !canReuseWebglCanvasForStationaryMotion &&
7755
+ shouldDeferFullResWebglForStationaryMotion !== true &&
7632
7756
  renderDebugFlags.enableThemeAnimation !== false &&
7633
7757
  isLocalSnapGridOnlyTheme(this) !== true &&
7634
7758
  this.currentThemeObject &&
@@ -7668,6 +7792,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7668
7792
  markWebglSurfaceFrozenForZoom(this, 'uaStationaryVisualMotion');
7669
7793
  } else if (this.isZooming === true) {
7670
7794
  deferWebglBootstrapForCameraMotion(this, 'uaStationaryVisualMotion');
7795
+ } else if (shouldDeferFullResWebglForStationaryMotion === true) {
7796
+ markFullResWebglDeferredForCss3dCameraMotion(this, 'uaStationaryVisualMotion');
7671
7797
  } else {
7672
7798
  this._clearWebglCanvasCameraTransform();
7673
7799
  this.renderer.render(this.scene, this.camera);
@@ -8876,8 +9002,17 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
8876
9002
  isGpuParticleTheme &&
8877
9003
  !isBoardLoading &&
8878
9004
  allowContinuousThemeAnimationThisFrame === true;
9005
+ const shouldDeferFullResWebglForNormalCss3dMotion =
9006
+ shouldDeferFullResWebglForCss3dCameraMotion(this, {
9007
+ isCameraNavigationOnlyInteractiveFrame,
9008
+ isFullResMode: isFullResMode === true,
9009
+ isNodeInteracting,
9010
+ hasNonCameraNavigationForcedUpdate,
9011
+ renderDebugFlags
9012
+ }) === true;
8879
9013
  let themeAnimatedThisFrame = false;
8880
9014
  if (allowContinuousThemeAnimationThisFrame === true &&
9015
+ shouldDeferFullResWebglForNormalCss3dMotion !== true &&
8881
9016
  (isThemeAnimationEnabled || shouldForceGpuParticleAnimation) &&
8882
9017
  isLocalSnapGridOnlyTheme(this) !== true &&
8883
9018
  this.currentThemeObject &&
@@ -8951,6 +9086,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
8951
9086
  shouldUseAnimationCadenceForWebglFrame === true ||
8952
9087
  themeAnimatedThisFrame === true
8953
9088
  ) &&
9089
+ shouldDeferFullResWebglForNormalCss3dMotion !== true &&
8954
9090
  (
8955
9091
  isPureCss3dCameraMotionFrame !== true ||
8956
9092
  themeAnimatedThisFrame === true ||
@@ -8996,6 +9132,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
8996
9132
  themeAnimatedThisFrame !== true &&
8997
9133
  shouldFinalizeWebglCanvasCameraTransform !== true) {
8998
9134
  deferWebglBootstrapForCameraMotion(this, 'normalZoomCameraMotion');
9135
+ } else if (shouldDeferFullResWebglForNormalCss3dMotion === true) {
9136
+ markFullResWebglDeferredForCss3dCameraMotion(this, 'normalCss3dCameraMotion');
8999
9137
  } else {
9000
9138
  this._clearWebglCanvasCameraTransform();
9001
9139
  if (shouldHideBackgroundThemeDuringCameraNavigation) {
@@ -9021,27 +9159,48 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
9021
9159
  }
9022
9160
  }
9023
9161
  } else if (isWebglRenderEnabled) {
9024
- if (isPureCss3dCameraMotionFrame === true) {
9162
+ if (shouldDeferFullResWebglForNormalCss3dMotion === true) {
9163
+ markFullResWebglDeferredForCss3dCameraMotion(this, 'normalCss3dCameraMotion');
9164
+ } else if (isPureCss3dCameraMotionFrame === true) {
9025
9165
  this._webglCameraMotionDeferred = true;
9026
- }
9027
- const shouldFreezeWebglCanvasTransformForZoom =
9028
- shouldFreezeWebglSurfaceForZoom(this) === true;
9029
- if (isCameraNavigationOnlyInteractiveFrame === true &&
9030
- shouldFreezeWebglCanvasTransformForZoom !== true &&
9031
- canUseWebglCanvasTransformForCameraMotion(this) === true) {
9032
- usedWebglCanvasCameraTransform = this._applyWebglCanvasCameraTransform() === true;
9166
+ const shouldFreezeWebglCanvasTransformForZoom =
9167
+ shouldFreezeWebglSurfaceForZoom(this) === true;
9168
+ if (isCameraNavigationOnlyInteractiveFrame === true &&
9169
+ shouldFreezeWebglCanvasTransformForZoom !== true &&
9170
+ canUseWebglCanvasTransformForCameraMotion(this) === true) {
9171
+ usedWebglCanvasCameraTransform = this._applyWebglCanvasCameraTransform() === true;
9172
+ } else {
9173
+ this._clearWebglCanvasCameraTransform();
9174
+ }
9175
+ this._lastWebglRenderInfo = {
9176
+ calls: 0,
9177
+ triangles: 0,
9178
+ points: 0,
9179
+ lines: 0,
9180
+ skipped: true,
9181
+ webglCanvasCameraTransform: usedWebglCanvasCameraTransform || undefined,
9182
+ webglSurfaceFrozenForZoom: shouldFreezeWebglCanvasTransformForZoom || undefined
9183
+ };
9033
9184
  } else {
9034
- this._clearWebglCanvasCameraTransform();
9185
+ const shouldFreezeWebglCanvasTransformForZoom =
9186
+ shouldFreezeWebglSurfaceForZoom(this) === true;
9187
+ if (isCameraNavigationOnlyInteractiveFrame === true &&
9188
+ shouldFreezeWebglCanvasTransformForZoom !== true &&
9189
+ canUseWebglCanvasTransformForCameraMotion(this) === true) {
9190
+ usedWebglCanvasCameraTransform = this._applyWebglCanvasCameraTransform() === true;
9191
+ } else {
9192
+ this._clearWebglCanvasCameraTransform();
9193
+ }
9194
+ this._lastWebglRenderInfo = {
9195
+ calls: 0,
9196
+ triangles: 0,
9197
+ points: 0,
9198
+ lines: 0,
9199
+ skipped: true,
9200
+ webglCanvasCameraTransform: usedWebglCanvasCameraTransform || undefined,
9201
+ webglSurfaceFrozenForZoom: shouldFreezeWebglSurfaceForZoom(this) || undefined
9202
+ };
9035
9203
  }
9036
- this._lastWebglRenderInfo = {
9037
- calls: 0,
9038
- triangles: 0,
9039
- points: 0,
9040
- lines: 0,
9041
- skipped: true,
9042
- webglCanvasCameraTransform: usedWebglCanvasCameraTransform || undefined,
9043
- webglSurfaceFrozenForZoom: shouldFreezeWebglCanvasTransformForZoom || undefined
9044
- };
9045
9204
  } else if (isBoardLoading) {
9046
9205
  this._clearWebglCanvasCameraTransform();
9047
9206
  this._lastWebglRenderInfo = { calls: 0, triangles: 0, points: 0, lines: 0 };
@@ -750,6 +750,11 @@
750
750
  -webkit-backface-visibility: visible !important;
751
751
  }
752
752
 
753
+ #css3d-dom-wrapper.is-zooming .css3d-resolution-wrapper,
754
+ #css3d-dom-wrapper.is-panning .css3d-resolution-wrapper {
755
+ visibility: visible !important;
756
+ }
757
+
753
758
  .css3d-resolution-wrapper.node-type-image .node-content-wrapper,
754
759
  .css3d-resolution-wrapper.node-type-video .node-content-wrapper,
755
760
  .css3d-resolution-wrapper.node-type-embed .node-content-wrapper,
@@ -51,7 +51,7 @@
51
51
  // ▲▲▲ [Usage] ▲▲▲
52
52
 
53
53
  // Procedural line rendering settings
54
- const LOD_RENDERER_BUILD_ID = '20260620-css3d-flat-pan-v749';
54
+ const LOD_RENDERER_BUILD_ID = '20260620-css3d-scene-stable-v752';
55
55
  const DirtyKind = Object.freeze({
56
56
  ResidentFullRebuild: 'resident-full-rebuild',
57
57
  ResidentPatch: 'resident-patch',
@@ -7,8 +7,8 @@
7
7
  <title>MindExec | Business Execution OS for solo builders</title>
8
8
  <meta name="description" content="MindExec is an AI business execution OS for solo builders who want to turn notes, research, assets, and repeatable execution Skills into revenue-producing work." />
9
9
  <base href="/" />
10
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-css3d-flat-pan-v749" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-css3d-flat-pan-v749" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-css3d-scene-stable-v752" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-css3d-scene-stable-v752" />
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 = '20260620-css3d-flat-pan-v749';
582
+ const scriptVersion = '20260620-css3d-scene-stable-v752';
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": "34tfuA2r",
2
+ "version": "O9KD8Ccz",
3
3
  "assets": [
4
4
  {
5
5
  "hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
@@ -78,7 +78,7 @@
78
78
  "url": "_content/MindExecution.Shared/js/marked.min.js"
79
79
  },
80
80
  {
81
- "hash": "sha256-9dRYqTrnhDg0IZsxQn903CNm9U677BGsYRQp5vmq1fM=",
81
+ "hash": "sha256-NCe7IQxIcitYL7CRq7Aa7A9CSCFsDxUy8SZSoJm+aPo=",
82
82
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
83
83
  },
84
84
  {
@@ -86,7 +86,7 @@
86
86
  "url": "_content/MindExecution.Shared/js/mind-map-core.js.backup"
87
87
  },
88
88
  {
89
- "hash": "sha256-EhlES5jLPO7cMczX09TDrcP1PC/KgkF86AYsA+Oap4I=",
89
+ "hash": "sha256-7EaYYlLCVJUt4lVERVxZG+LFs6pU84WbUElA89mnmlE=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -114,7 +114,7 @@
114
114
  "url": "_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js"
115
115
  },
116
116
  {
117
- "hash": "sha256-r7TMeUwMfWBuxJ6MhK0klNJY4GEc0L/8xirnfXQWafs=",
117
+ "hash": "sha256-W2y0s/EzYYraueITXUNNzJxXfzpp9L7kuwT4ml7XzN8=",
118
118
  "url": "_content/MindExecution.Shared/js/mind-map-lod-renderer.js"
119
119
  },
120
120
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-XyPjNU9Tot83XqrvufSilMaCVa6UO70xgl90gwyfCS0=",
837
+ "hash": "sha256-vGprwakLUDuo6HPZbyxWRw7W4ey7WW87CydvCLezwdI=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: 34tfuA2r */
1
+ /* Manifest version: O9KD8Ccz */
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