@mindexec/cli 0.2.250 → 0.2.252

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.250",
3
+ "version": "0.2.252",
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-local-grid-css-only-v697';
8
+ const MINDMAP_CORE_BUILD_ID = '20260620-wheel-zoom-local-grid-v699';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -114,6 +114,7 @@
114
114
  const CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED = true;
115
115
  const CAMERA_MOTION_WEBGL_TRANSFORM_TRANSLATE_BUCKET_PX = 0.25;
116
116
  const CAMERA_MOTION_WEBGL_TRANSFORM_SCALE_BUCKET = 0.0005;
117
+ const CSS3D_FLAT_CAMERA_MOTION_ENABLED = true;
117
118
  const CAMERA_STATIONARY_INTERACTION_FRAME_DELAY_MS = 48;
118
119
  const CAMERA_ZOOM_END_DELAY_MS = 150;
119
120
  const CAMERA_MOTION_GLOBAL_STYLE_CLASS_ENABLED = false;
@@ -491,10 +492,10 @@
491
492
  }
492
493
 
493
494
  // Static backgrounds can move as a single viewport surface. Continuous
494
- // particle themes keep real animation only when the user explicitly asks
495
- // for 60fps animation; the default work mode reuses the last WebGL
496
- // surface during camera motion so one animated background cannot dominate
497
- // pan/zoom cost on low-power GPUs.
495
+ // particle themes keep real animation during non-zoom camera motion only
496
+ // when the user explicitly asks for 60fps animation; active wheel zoom
497
+ // freezes the WebGL surface separately so raw wheel cadence cannot be
498
+ // dominated by background rendering.
498
499
  if (isContinuousBackgroundTheme(module) === true) {
499
500
  return module?.useAnimation60Fps !== true;
500
501
  }
@@ -505,11 +506,46 @@
505
506
  function shouldFreezeWebglSurfaceForZoom(module) {
506
507
  return !!(
507
508
  module?.isZooming === true &&
508
- module?.useAnimation60Fps !== true &&
509
509
  module?._lastWebglRenderedCameraState
510
510
  );
511
511
  }
512
512
 
513
+ function renderCss3dCameraForCameraNavigation(module, reason = 'camera-navigation') {
514
+ const renderer = module?.cssRenderer || null;
515
+ const camera = module?.camera || null;
516
+ if (!renderer || !camera) {
517
+ return false;
518
+ }
519
+
520
+ const renderDebugFlags = module.renderDebugFlags || getRenderDebugFlagsSnapshot();
521
+ if (renderDebugFlags.enableCss3d === false) {
522
+ return false;
523
+ }
524
+
525
+ if (CSS3D_FLAT_CAMERA_MOTION_ENABLED === true &&
526
+ renderDebugFlags.enableFlatCss3dCameraMotion !== false &&
527
+ typeof renderer.renderFlatCamera === 'function') {
528
+ const usedFlatCamera = renderer.renderFlatCamera(camera, {
529
+ translateBucketPx: CAMERA_MOTION_WEBGL_TRANSFORM_TRANSLATE_BUCKET_PX,
530
+ scaleBucket: CAMERA_MOTION_WEBGL_TRANSFORM_SCALE_BUCKET
531
+ });
532
+ if (usedFlatCamera === true) {
533
+ module._lastCss3dCameraMotionMode = 'flat';
534
+ module._lastCss3dCameraMotionReason = reason;
535
+ return true;
536
+ }
537
+ }
538
+
539
+ if (typeof renderer.renderCamera === 'function') {
540
+ renderer.renderCamera(camera);
541
+ module._lastCss3dCameraMotionMode = 'matrix3d';
542
+ module._lastCss3dCameraMotionReason = reason;
543
+ return true;
544
+ }
545
+
546
+ return false;
547
+ }
548
+
513
549
  function markWebglSurfaceFrozenForZoom(module, mode) {
514
550
  if (!module) {
515
551
  return false;
@@ -1675,7 +1711,7 @@
1675
1711
 
1676
1712
  module._syncMotionGridLayerForCameraNavigation?.(usedWebglCanvasCameraTransform);
1677
1713
  module._syncLocalSnapGridPositionOnly?.(true);
1678
- module.cssRenderer.renderCamera(module.camera);
1714
+ renderCss3dCameraForCameraNavigation(module, 'ua-ultra-camera-only');
1679
1715
 
1680
1716
  syncBusinessAutomationEdgesForCameraNavigation(module);
1681
1717
 
@@ -1898,7 +1934,7 @@
1898
1934
  module._syncMotionGridLayerForCameraNavigation?.(usedWebglCanvasCameraTransform);
1899
1935
  module._syncLocalSnapGridPositionOnly?.(true);
1900
1936
  if (canRenderCss3dCamera === true) {
1901
- module.cssRenderer.renderCamera(module.camera);
1937
+ renderCss3dCameraForCameraNavigation(module, 'ua-ultra-resident-camera-only');
1902
1938
  }
1903
1939
 
1904
1940
  syncBusinessAutomationEdgesForCameraNavigation(module);
@@ -3947,7 +3983,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3947
3983
  layer.style.willChange = 'transform, opacity';
3948
3984
  layer.style.transform = 'translate3d(0, 0, 0)';
3949
3985
  layer.style.transition = 'opacity 90ms linear';
3950
- const mask = 'radial-gradient(circle at center, rgba(0,0,0,0.96) 0%, rgba(0,0,0,0.82) 34%, rgba(0,0,0,0.38) 62%, rgba(0,0,0,0.10) 80%, transparent 100%)';
3986
+ const mask = 'radial-gradient(circle at center, rgba(0,0,0,1) 0%, rgba(0,0,0,0.9) 28%, rgba(0,0,0,0.52) 50%, rgba(0,0,0,0.18) 70%, rgba(0,0,0,0.04) 86%, transparent 100%)';
3951
3987
  layer.style.maskImage = mask;
3952
3988
  layer.style.webkitMaskImage = mask;
3953
3989
 
@@ -6642,7 +6678,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6642
6678
  this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransformImmediate);
6643
6679
  this._syncLocalSnapGridPositionOnly(true);
6644
6680
 
6645
- this.cssRenderer.renderCamera(this.camera);
6681
+ renderCss3dCameraForCameraNavigation(this, 'ua-visual-only-motion');
6646
6682
  const shouldSyncPassiveOverlayTransformDuringMotion =
6647
6683
  isPassiveDomOverlayRuntimeEnabled === true;
6648
6684
  if (shouldSyncPassiveOverlayTransformDuringMotion &&
@@ -6817,7 +6853,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6817
6853
  this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransformStationary);
6818
6854
  this._syncLocalSnapGridPositionOnly(true);
6819
6855
  if (this.cssRenderer && typeof this.cssRenderer.renderCamera === 'function') {
6820
- this.cssRenderer.renderCamera(this.camera);
6856
+ renderCss3dCameraForCameraNavigation(this, 'ua-stationary-visual-motion');
6821
6857
  }
6822
6858
  syncBusinessAutomationEdgesForCameraNavigation(this, { allowDraftRender: true });
6823
6859
 
@@ -7007,7 +7043,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7007
7043
 
7008
7044
  this._syncLocalSnapGridPositionOnly(true);
7009
7045
  if (shouldRenderCss3dInLodForUaResidentCameraOnly === true) {
7010
- this.cssRenderer.renderCamera(this.camera);
7046
+ renderCss3dCameraForCameraNavigation(this, 'ua-resident-visual-only-motion');
7011
7047
  }
7012
7048
  syncBusinessAutomationEdgesForCameraNavigation(this, { allowDraftRender: true });
7013
7049
  _profileSection('uaResidentVisualOnlyMotion');
@@ -7253,7 +7289,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7253
7289
  }
7254
7290
 
7255
7291
  this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransformEarly);
7256
- this.cssRenderer.renderCamera(this.camera);
7292
+ renderCss3dCameraForCameraNavigation(this, 'ua-early-camera-only');
7257
7293
  _profileSection('uaEarlyCameraOnly');
7258
7294
 
7259
7295
  const frameEnd = performance.now();
@@ -8180,7 +8216,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
8180
8216
  if (canUseCss3dCameraFastPath) {
8181
8217
  this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransform);
8182
8218
  recordCameraMotionFastPathStatus(this, 'hit', 'css3d-camera-fast');
8183
- this.cssRenderer.renderCamera(this.camera);
8219
+ renderCss3dCameraForCameraNavigation(this, 'css3d-camera-fast');
8184
8220
  }
8185
8221
  _profileSection('css3dCamera');
8186
8222
  // ▲▲▲ [FIX] ▲▲▲
@@ -30,10 +30,10 @@
30
30
  }
31
31
  }
32
32
 
33
- function CSS3DRenderer(){
34
- var _width, _height; var _widthHalf, _heightHalf; var cache = { camera:{ fov:0, style:'' }, objects: new WeakMap() };
35
- var domElement = document.createElement('div'); domElement.style.overflow = 'hidden'; this.domElement = domElement;
36
- var cameraElement = document.createElement('div'); cameraElement.style.webkitTransformStyle = cameraElement.style.transformStyle = 'preserve-3d'; cameraElement.style.pointerEvents = 'none'; domElement.appendChild(cameraElement);
33
+ function CSS3DRenderer(){
34
+ var _width, _height; var _widthHalf, _heightHalf; var cache = { camera:{ fov:0, style:'' }, objects: new WeakMap() };
35
+ var domElement = document.createElement('div'); domElement.style.overflow = 'hidden'; this.domElement = domElement;
36
+ var cameraElement = document.createElement('div'); cameraElement.style.webkitTransformStyle = cameraElement.style.transformStyle = 'preserve-3d'; cameraElement.style.pointerEvents = 'none'; cameraElement.style.webkitTransformOrigin = cameraElement.style.transformOrigin = '0 0'; domElement.appendChild(cameraElement);
37
37
 
38
38
  this.getSize = function(){ return { width:_width, height:_height }; };
39
39
  this.getCameraElement = function(){ return cameraElement; };
@@ -42,9 +42,41 @@
42
42
  function getObjectCSSMatrix(matrix){ var e=matrix.elements; var m='matrix3d('+epsilon(e[0])+','+epsilon(e[1])+','+epsilon(e[2])+','+epsilon(e[3])+','+epsilon(-e[4])+','+epsilon(-e[5])+','+epsilon(-e[6])+','+epsilon(-e[7])+','+epsilon(e[8])+','+epsilon(e[9])+','+epsilon(e[10])+','+epsilon(e[11])+','+epsilon(e[12])+','+epsilon(e[13])+','+epsilon(e[14])+','+epsilon(e[15])+')'; return m; }
43
43
  function renderObject(object, scene, camera, cameraCSSMatrix){ if (object.isCSS3DObject){ var style=getObjectCSSMatrix(object.matrixWorld); var display=object.visible ? '' : 'none'; var element=object.element; var cached=cache.objects.get(object); if (cached===undefined || cached.style!==style){ element.style.webkitTransform=element.style.transform=style; } if (cached===undefined || cached.display!==display){ element.style.display=display; } if (cached===undefined || cached.style!==style || cached.display!==display){ cache.objects.set(object, { style, display }); } if (element.parentNode !== cameraElement){ cameraElement.appendChild(element); } } for (var i=0,l=object.children.length;i<l;i++){ renderObject(object.children[i], scene, camera, cameraCSSMatrix); } }
44
44
  function renderCameraOnly(renderer, camera){ var fov=camera.projectionMatrix.elements[5]*_heightHalf; if (cache.camera.fov!==fov){ renderer.domElement.style.webkitPerspective=renderer.domElement.style.perspective=fov+'px'; cache.camera.fov=fov; } if (camera.parent===null && camera.matrixWorldNeedsUpdate===true) camera.updateMatrixWorld(); var cameraCSSMatrix='translateZ('+fov+'px)'+getCameraCSSMatrix(camera.matrixWorldInverse); var style=cameraCSSMatrix+'translate('+_widthHalf+'px,'+_heightHalf+'px)'; if (cache.camera.style!==style){ cameraElement.style.webkitTransform=cameraElement.style.transform=style; cache.camera.style=style; } return cameraCSSMatrix; }
45
+ function renderFlatCameraOnly(renderer, camera, options){
46
+ if (!camera || !_width || !_height || !camera.isPerspectiveCamera) return false;
47
+ var position = camera.position || {};
48
+ var rotation = camera.rotation || {};
49
+ var cameraZ = Math.max(1, Number(position.z || 1));
50
+ var cameraX = Number(position.x || 0);
51
+ var cameraY = Number(position.y || 0);
52
+ var fov = Number(camera.fov || 45);
53
+ if (!Number.isFinite(cameraX) || !Number.isFinite(cameraY) || !Number.isFinite(cameraZ) || !Number.isFinite(fov)) return false;
54
+ if (Math.abs(Number(rotation.x || 0)) > 1e-5 || Math.abs(Number(rotation.y || 0)) > 1e-5 || Math.abs(Number(rotation.z || 0)) > 1e-5) return false;
55
+ var vfov = fov * Math.PI / 180;
56
+ var viewHeight = 2 * Math.tan(vfov / 2) * cameraZ;
57
+ var scale = _height / Math.max(1, viewHeight);
58
+ var translateX = _widthHalf - cameraX * scale;
59
+ var translateY = _heightHalf + cameraY * scale;
60
+ var translateBucket = Math.max(0.001, Number(options && options.translateBucketPx || 0.25));
61
+ var scaleBucket = Math.max(0.000001, Number(options && options.scaleBucket || 0.0005));
62
+ var tx = Math.round(translateX / translateBucket) * translateBucket;
63
+ var ty = Math.round(translateY / translateBucket) * translateBucket;
64
+ var s = Math.round(scale / scaleBucket) * scaleBucket;
65
+ var style = 'flat|'+Math.round(_width)+'|'+Math.round(_height)+'|'+Math.round(tx / translateBucket)+'|'+Math.round(ty / translateBucket)+'|'+Math.round(s / scaleBucket);
66
+ if (cache.camera.fov !== 0){
67
+ renderer.domElement.style.webkitPerspective = renderer.domElement.style.perspective = '';
68
+ cache.camera.fov = 0;
69
+ }
70
+ if (cache.camera.style !== style){
71
+ cameraElement.style.webkitTransform = cameraElement.style.transform = 'translate3d('+tx.toFixed(3)+'px,'+ty.toFixed(3)+'px,0) scale('+s.toFixed(6)+','+(-s).toFixed(6)+')';
72
+ cache.camera.style = style;
73
+ }
74
+ return true;
75
+ }
45
76
  this.renderCamera = function(camera){ renderCameraOnly(this, camera); };
77
+ this.renderFlatCamera = function(camera, options){ return renderFlatCameraOnly(this, camera, options); };
46
78
  this.render = function(scene, camera){ if (scene.autoUpdate===true) scene.updateMatrixWorld(); var cameraCSSMatrix=renderCameraOnly(this, camera); renderObject(scene, scene, camera, cameraCSSMatrix); };
47
- }
79
+ }
48
80
 
49
81
  window.CSS3DObject = CSS3DObject; window.CSS3DSprite = CSS3DSprite; window.CSS3DRenderer = CSS3DRenderer;
50
82
  })();
@@ -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-local-grid-css-only-v697" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-local-grid-css-only-v697" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-wheel-zoom-local-grid-v699" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-wheel-zoom-local-grid-v699" />
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-local-grid-css-only-v697';
582
+ const scriptVersion = '20260620-wheel-zoom-local-grid-v699';
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": "A/ao9Pai",
2
+ "version": "Ed1ZH6Ns",
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-mJ6sfC0QGiPmkOxIbz8t+tr9A7f7vS39kdTKC8iiiCY=",
81
+ "hash": "sha256-1D8Eo9F7fkHRMUBj3KFHIEc327cNvsZX6Au7KTxoq54=",
82
82
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
83
83
  },
84
84
  {
@@ -182,7 +182,7 @@
182
182
  "url": "_content/MindExecution.Shared/js/plan-master.js"
183
183
  },
184
184
  {
185
- "hash": "sha256-qTb3vyeMwLW+3M8vggSRX6DynwZcCl5DTLM3yV0toDI=",
185
+ "hash": "sha256-zZ6nh8fh4HnO5rV//tfE4WB119Ez9Gjg26P7k0idcIE=",
186
186
  "url": "_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js"
187
187
  },
188
188
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-e67tw0NBUqSdCPycY1qZEmvlOQzR6ddFqaCKFCPGmm4=",
837
+ "hash": "sha256-j7gWJiJRGm1VqT1AKNT1x23gyK8zzDo86AYXFi9ZJUY=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: A/ao9Pai */
1
+ /* Manifest version: Ed1ZH6Ns */
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