@mindexec/cli 0.2.259 → 0.2.261

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.259",
3
+ "version": "0.2.261",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
package/server.js CHANGED
@@ -32,7 +32,7 @@ const { normalizePort, releaseBridgePort } = portGuard;
32
32
  const app = express();
33
33
  const PORT = normalizePort(process.env.BRIDGE_PORT);
34
34
  const BRIDGE_ROOT = path.dirname(fileURLToPath(import.meta.url));
35
- const PACKAGE_INFO = JSON.parse(readFileSync(path.join(BRIDGE_ROOT, 'package.json'), 'utf8'));
35
+ const PACKAGE_INFO = JSON.parse(readFileSync(path.join(BRIDGE_ROOT, 'package.json'), 'utf8').replace(/^\uFEFF/, ''));
36
36
  const BRIDGE_PACKAGE_NAME = String(PACKAGE_INFO.name || '@mindexec/cli');
37
37
  const BRIDGE_VERSION = String(PACKAGE_INFO.version || '0.1.0');
38
38
  const REMOTE_HUB_IDENTITY_FILE_PREFIX = 'remote-hub-identity';
@@ -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-wheel-v707';
8
+ const MINDMAP_CORE_BUILD_ID = '20260620-css3d-flat-wheel-v709';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -513,6 +513,10 @@
513
513
  );
514
514
  }
515
515
 
516
+ function isLocalSnapGridOnlyTheme(module) {
517
+ return module?.currentThemeObject?.userData?.localSnapGrid === true;
518
+ }
519
+
516
520
  function renderCss3dCameraForCameraNavigation(module, reason = 'camera-navigation') {
517
521
  const renderer = module?.cssRenderer || null;
518
522
  const camera = module?.camera || null;
@@ -557,6 +561,12 @@
557
561
  module._clearWebglCanvasCameraTransform?.();
558
562
  module._webglCameraMotionDeferred = true;
559
563
  module._themeCameraMotionDeferred = true;
564
+ const frozenMode = mode || 'uaZoomFrozenWebgl';
565
+ if (module._lastWebglSurfaceFrozenForZoomKey === frozenMode &&
566
+ module._lastWebglRenderInfo?.webglSurfaceFrozenForZoom === true) {
567
+ return true;
568
+ }
569
+ module._lastWebglSurfaceFrozenForZoomKey = frozenMode;
560
570
  module._lastWebglRenderInfo = {
561
571
  calls: 0,
562
572
  triangles: 0,
@@ -564,7 +574,7 @@
564
574
  lines: 0,
565
575
  skipped: true,
566
576
  webglSurfaceFrozenForZoom: true,
567
- [mode || 'uaZoomFrozenWebgl']: true
577
+ [frozenMode]: true
568
578
  };
569
579
  return true;
570
580
  }
@@ -3890,6 +3900,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3890
3900
  this._lastAnimationLoopDelayMs = 0;
3891
3901
  this._lastAnimationWakeReason = '';
3892
3902
  this._wheelZoomDirectSettleTimer = null;
3903
+ this._wheelZoomDirectSettleDueAt = 0;
3893
3904
  // ▲▲▲ [Optimization] ▲▲▲
3894
3905
 
3895
3906
  // ▼▼▼ [State] Loading flag (hide nodes during board load) ▼▼▼
@@ -4545,22 +4556,47 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4545
4556
  16,
4546
4557
  Math.floor(Number(delayMs) || (CAMERA_ZOOM_END_DELAY_MS + 18))
4547
4558
  );
4548
- this.clearWheelZoomDirectSettle();
4549
- this._wheelZoomDirectSettleTimer = setTimeout(() => {
4550
- this._wheelZoomDirectSettleTimer = null;
4551
- if (this.isZooming !== true) {
4552
- return;
4553
- }
4554
- if (this._animationLoopRunning === true) {
4555
- this.requestAnimationWake('wheel-zoom-direct-finalize');
4556
- } else {
4557
- this.animate();
4558
- }
4559
- }, safeDelayMs);
4559
+ const now = typeof performance !== 'undefined' && typeof performance.now === 'function'
4560
+ ? performance.now()
4561
+ : Date.now();
4562
+ this._wheelZoomDirectSettleDueAt = now + safeDelayMs;
4563
+
4564
+ if (this._wheelZoomDirectSettleTimer) {
4565
+ return true;
4566
+ }
4567
+
4568
+ const scheduleSettleWake = (waitMs) => {
4569
+ this._wheelZoomDirectSettleTimer = setTimeout(() => {
4570
+ this._wheelZoomDirectSettleTimer = null;
4571
+ if (this.isZooming !== true) {
4572
+ this._wheelZoomDirectSettleDueAt = 0;
4573
+ return;
4574
+ }
4575
+
4576
+ const timerNow = typeof performance !== 'undefined' && typeof performance.now === 'function'
4577
+ ? performance.now()
4578
+ : Date.now();
4579
+ const remainingMs = Number(this._wheelZoomDirectSettleDueAt || 0) - timerNow;
4580
+ if (remainingMs > 8) {
4581
+ scheduleSettleWake(Math.max(16, Math.min(80, remainingMs)));
4582
+ return;
4583
+ }
4584
+
4585
+ this._wheelZoomDirectSettleDueAt = 0;
4586
+ if (this._animationLoopRunning === true) {
4587
+ this.requestAnimationWake('wheel-zoom-direct-finalize');
4588
+ } else {
4589
+ this.animate();
4590
+ }
4591
+ }, Math.max(16, Math.floor(Number(waitMs) || safeDelayMs)));
4592
+ };
4593
+
4594
+ scheduleSettleWake(safeDelayMs);
4560
4595
  return true;
4561
4596
  }
4562
4597
 
4563
4598
  clearWheelZoomDirectSettle() {
4599
+ this._wheelZoomDirectSettleDueAt = 0;
4564
4600
  if (!this._wheelZoomDirectSettleTimer) {
4565
4601
  return false;
4566
4602
  }
@@ -6837,6 +6873,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6837
6873
  if (shouldFreezeWebglCanvasForImmediateZoom !== true &&
6838
6874
  !canReuseWebglCanvasForImmediateMotion &&
6839
6875
  renderDebugFlags.enableThemeAnimation !== false &&
6876
+ isLocalSnapGridOnlyTheme(this) !== true &&
6840
6877
  this.currentThemeObject &&
6841
6878
  typeof this.currentThemeObject.animate === 'function') {
6842
6879
  const themeRunner = window.MindMapThemes?.runAnimationIfNeeded;
@@ -7012,6 +7049,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7012
7049
  if (shouldFreezeWebglCanvasForStationaryZoom !== true &&
7013
7050
  !canReuseWebglCanvasForStationaryMotion &&
7014
7051
  renderDebugFlags.enableThemeAnimation !== false &&
7052
+ isLocalSnapGridOnlyTheme(this) !== true &&
7015
7053
  this.currentThemeObject &&
7016
7054
  typeof this.currentThemeObject.animate === 'function') {
7017
7055
  const themeRunner = window.MindMapThemes?.runAnimationIfNeeded;
@@ -7202,6 +7240,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7202
7240
  if (shouldFreezeWebglCanvasForResidentZoom !== true &&
7203
7241
  !canReuseWebglCanvasForResidentMotion &&
7204
7242
  renderDebugFlags.enableThemeAnimation !== false &&
7243
+ isLocalSnapGridOnlyTheme(this) !== true &&
7205
7244
  this.currentThemeObject &&
7206
7245
  typeof this.currentThemeObject.animate === 'function') {
7207
7246
  const themeRunner = window.MindMapThemes?.runAnimationIfNeeded;
@@ -8237,6 +8276,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
8237
8276
  let themeAnimatedThisFrame = false;
8238
8277
  if (allowContinuousThemeAnimationThisFrame === true &&
8239
8278
  (isThemeAnimationEnabled || shouldForceGpuParticleAnimation) &&
8279
+ isLocalSnapGridOnlyTheme(this) !== true &&
8240
8280
  this.currentThemeObject &&
8241
8281
  typeof this.currentThemeObject.animate === 'function') {
8242
8282
  const forceThemeCameraUpdate =
@@ -6032,11 +6032,9 @@ window.MindMapInteractions = (function () {
6032
6032
  if (!wheelBuffers.has(module)) {
6033
6033
  wheelBuffers.set(module, {
6034
6034
  deltaY: 0, // 누적된 deltaY
6035
- notchDeltaY: 0, // 일반 마우스 휠용 계단식 zoom 누적값
6036
6035
  lastClientX: 0, // 마지막 마우스 X 위치
6037
6036
  lastClientY: 0, // 마지막 마우스 Y 위치
6038
6037
  pending: false, // rAF 대기 중 여부
6039
- notchPending: false, // 계단식 zoom rAF 대기 중 여부
6040
6038
  frameId: null, // rAF ID
6041
6039
  eventCount: 0
6042
6040
  });
@@ -6079,9 +6077,6 @@ window.MindMapInteractions = (function () {
6079
6077
  const WHEEL_ZOOM_MAX_STEP = 0.42;
6080
6078
  const WHEEL_ZOOM_TRACKPAD_DELTA = 24;
6081
6079
  const WHEEL_ZOOM_TRACKPAD_BOOST = 1.3;
6082
- const WHEEL_ZOOM_NOTCH_DELTA = 90;
6083
- const WHEEL_ZOOM_NOTCH_STEP = 0.24;
6084
- const WHEEL_ZOOM_MAX_NOTCHES_PER_FRAME = 2;
6085
6080
  const TRACKPAD_PAN_SENSITIVITY = 0.0014;
6086
6081
  const TRACKPAD_PIXEL_DELTA_MAX = 32;
6087
6082
  const GESTURE_SCALE_EPSILON = 0.001;
@@ -6337,53 +6332,6 @@ window.MindMapInteractions = (function () {
6337
6332
  });
6338
6333
  }
6339
6334
 
6340
- function flushSteppedWheelZoomBuffer(module, wheelBuffer) {
6341
- const nextAbsDelta = Math.abs(Number(wheelBuffer?.notchDeltaY || 0));
6342
- if (nextAbsDelta < WHEEL_ZOOM_NOTCH_DELTA) {
6343
- return;
6344
- }
6345
-
6346
- const direction = Math.sign(wheelBuffer.notchDeltaY);
6347
- const notchCount = Math.min(
6348
- WHEEL_ZOOM_MAX_NOTCHES_PER_FRAME,
6349
- Math.max(1, Math.floor(nextAbsDelta / WHEEL_ZOOM_NOTCH_DELTA))
6350
- );
6351
- wheelBuffer.notchDeltaY -= direction * notchCount * WHEEL_ZOOM_NOTCH_DELTA;
6352
-
6353
- performCameraZoomBuffered(
6354
- module,
6355
- direction * notchCount * WHEEL_ZOOM_NOTCH_DELTA,
6356
- wheelBuffer.lastClientX,
6357
- wheelBuffer.lastClientY,
6358
- {
6359
- fixedZoomStep: direction * notchCount * WHEEL_ZOOM_NOTCH_STEP,
6360
- coalescedWheelEvents: notchCount
6361
- }
6362
- );
6363
-
6364
- if (Math.abs(Number(wheelBuffer.notchDeltaY || 0)) >= WHEEL_ZOOM_NOTCH_DELTA) {
6365
- scheduleWheelZoomFrame(module, wheelBuffer, () => flushSteppedWheelZoomBuffer(module, wheelBuffer));
6366
- }
6367
- }
6368
-
6369
- function bufferSteppedWheelZoomEvent(module, e, analysis = null) {
6370
- const wheelBuffer = getWheelBuffer(module);
6371
- const normalizedDeltaY = Number((analysis || getWheelEventAnalysis(module, e)).deltaY || 0);
6372
- const notchDeltaY = e?.deltaMode === 0
6373
- ? normalizedDeltaY
6374
- : Math.sign(normalizedDeltaY) * WHEEL_ZOOM_NOTCH_DELTA;
6375
- wheelBuffer.notchDeltaY += notchDeltaY;
6376
- wheelBuffer.lastClientX = e.clientX;
6377
- wheelBuffer.lastClientY = e.clientY;
6378
-
6379
- const absDelta = Math.abs(wheelBuffer.notchDeltaY);
6380
- if (absDelta < WHEEL_ZOOM_NOTCH_DELTA) {
6381
- return;
6382
- }
6383
-
6384
- scheduleWheelZoomFrame(module, wheelBuffer, () => flushSteppedWheelZoomBuffer(module, wheelBuffer));
6385
- }
6386
-
6387
6335
  /**
6388
6336
  * 버퍼된 휠 데이터로 카메라 줌 수행
6389
6337
  * - 기존 performCameraZoom과 동일하지만 event 객체 대신 누적된 값 사용
@@ -6537,12 +6485,7 @@ window.MindMapInteractions = (function () {
6537
6485
  e.preventDefault();
6538
6486
  e.stopPropagation();
6539
6487
  const wheelAnalysis = analysis || getWheelEventAnalysis(module, e);
6540
- if (wheelAnalysis.isTrackpadPinch === true) {
6541
- bufferWheelEvent(module, e, wheelAnalysis);
6542
- return;
6543
- }
6544
-
6545
- bufferSteppedWheelZoomEvent(module, e, wheelAnalysis);
6488
+ bufferWheelEvent(module, e, wheelAnalysis);
6546
6489
  }
6547
6490
 
6548
6491
  function isWheelZoomControlSwapEnabled(module) {
@@ -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-wheel-v707" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-css3d-flat-wheel-v707" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-css3d-flat-wheel-v709" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-css3d-flat-wheel-v709" />
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-wheel-v707';
582
+ const scriptVersion = '20260620-css3d-flat-wheel-v709';
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": "7Mz0t211",
2
+ "version": "P7DpPAPV",
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-Wh72NYCd8llyQcb9S1nu14LVriY/M65RGbAJV9Ewecg=",
81
+ "hash": "sha256-VSQqDmF8gC2cMS0IsTTnuFnQm8pss2rfKyko6CQONxo=",
82
82
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
83
83
  },
84
84
  {
@@ -106,7 +106,7 @@
106
106
  "url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
107
107
  },
108
108
  {
109
- "hash": "sha256-oHhdP4cltwUivQrUKDEMENUIE3cKk29F/IEk2Rg3JPM=",
109
+ "hash": "sha256-o5V0YYMPabf5eB2Z/rGiGB4Ggv3HEaLsCXSq0xY4dPQ=",
110
110
  "url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
111
111
  },
112
112
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-KjaPdEv6u95UkcfvQokggiqL/Q7CuMbn9BoghYBReYQ=",
837
+ "hash": "sha256-+h/HcEGj8IvVKAVF9Qvoc9X2Tz/MYZW2L+hu3fvyKPM=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: 7Mz0t211 */
1
+ /* Manifest version: P7DpPAPV */
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