@mindexec/cli 0.2.74 → 0.2.76

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.74",
3
+ "version": "0.2.76",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -84,6 +84,7 @@ const MINDMAP_CORE_BUILD_ID = '20260613-remote-monitor-gap-v214';
84
84
  const PASSIVE_OVERLAY_IDLE_DELAY_MS = 500;
85
85
  const PASSIVE_OVERLAY_PAN_IDLE_DELAY_MS = 500;
86
86
  const CURSOR_DOM_BLINK_DURATION_MS = 1000;
87
+ const ANIMATION_IDLE_LOW_FPS_DELAY_MS = 500;
87
88
  const HOME_CAMERA_NORMAL_MID_Z = 8250;
88
89
  const HOME_DENSE_CLUSTER_MIN_CELL_SIZE = 1200;
89
90
  const HOME_DENSE_CLUSTER_MAX_CELL_SIZE = 3600;
@@ -2712,6 +2713,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
2712
2713
  this._animationLoopCallback = null;
2713
2714
  this._animationLoopExecuting = false;
2714
2715
  this._animationLoopRunning = false;
2716
+ this._animationIdleCadenceFrame = false;
2715
2717
  this._lastAnimationLoopDelayMs = 0;
2716
2718
  this._lastAnimationWakeReason = '';
2717
2719
  // ▲▲▲ [Optimization] ▲▲▲
@@ -2734,6 +2736,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
2734
2736
  this.cameraTraceMode = 'cursor';
2735
2737
  this.cursorDirection = 'horizontal';
2736
2738
  this.swapWheelZoomControls = false;
2739
+ this.useAnimation60Fps = false;
2737
2740
 
2738
2741
  window.MindCanvasBuildInfo?.setRuntime?.('canvasPhase', this.canvasPhase);
2739
2742
  }
@@ -2819,6 +2822,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
2819
2822
  return;
2820
2823
  }
2821
2824
 
2825
+ this._animationIdleCadenceFrame = true;
2822
2826
  this.animationFrameId = this._requestVisualAnimationFrame(callback);
2823
2827
  }, safeDelayMs);
2824
2828
  return;
@@ -4334,6 +4338,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4334
4338
  this._animationLoopExecuting = true;
4335
4339
  let nextAnimationLoopDelayMs = 0;
4336
4340
  const frameStart = performance.now();
4341
+ const isIdleCadenceFrame = this._animationIdleCadenceFrame === true;
4342
+ this._animationIdleCadenceFrame = false;
4337
4343
 
4338
4344
  const frameDelta = frameStart - (this._lastFrameTime || frameStart);
4339
4345
  this._lastFrameTime = frameStart;
@@ -4636,6 +4642,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4636
4642
  this.useLODRendering === true &&
4637
4643
  this.lodRenderer?.isInLODMode === true &&
4638
4644
  (frameStart - Number(this._lastLodPanVisibilityRefreshAt || 0)) >= LOD_PAN_VISIBILITY_REFRESH_INTERVAL_MS;
4645
+ const shouldUseAnimation60Fps = this.useAnimation60Fps === true && !isBoardLoading;
4646
+ const shouldUseAnimationLowFpsFrame =
4647
+ shouldUseAnimation60Fps !== true &&
4648
+ isIdleCadenceFrame === true &&
4649
+ !isBoardLoading;
4639
4650
  const shouldUpdate = !isBoardLoading && (hasForcedUpdate || movingUpdateDue || isNodeInteracting ||
4640
4651
  residentDirtyRequiresUpdate ||
4641
4652
  residentBandChanging ||
@@ -4670,6 +4681,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4670
4681
  shouldUpdate === true ||
4671
4682
  hasForcedUpdate === true ||
4672
4683
  isBoardLoading === true ||
4684
+ shouldUseAnimation60Fps === true ||
4685
+ shouldUseAnimationLowFpsFrame === true ||
4673
4686
  this._forceThemeAnimationFrame === true;
4674
4687
  const isMenuOverlayUiEnabled = !isBoardLoading && renderDebugFlags.enableMenuOverlayUi !== false;
4675
4688
  const isMultiSelectOverlayUiEnabled = !isBoardLoading && renderDebugFlags.enableMultiSelectOverlayUi !== false;
@@ -5230,6 +5243,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5230
5243
  isBoardLoading === true ||
5231
5244
  shouldUpdate === true ||
5232
5245
  isInteractiveFrame === true ||
5246
+ shouldUseAnimation60Fps === true ||
5247
+ shouldUseAnimationLowFpsFrame === true ||
5233
5248
  themeAnimatedThisFrame === true
5234
5249
  );
5235
5250
  if (shouldRenderWebglFrame) {
@@ -5564,8 +5579,23 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5564
5579
  shouldSyncTextOverlays !== true &&
5565
5580
  hasPendingAnimationWakeWork !== true;
5566
5581
  if (shouldParkIdleAnimationLoop) {
5567
- this._lastAnimationLoopDelayMs = -1;
5582
+ const idleAnimationDelayMs = this.useAnimation60Fps === true ? 0 : ANIMATION_IDLE_LOW_FPS_DELAY_MS;
5583
+ this._lastAnimationLoopDelayMs = idleAnimationDelayMs;
5568
5584
  this._animationLoopExecuting = false;
5585
+ this._scheduleAnimationLoop(loop, idleAnimationDelayMs);
5586
+ return;
5587
+ }
5588
+ const shouldContinueLowFpsIdleCadence =
5589
+ shouldUseAnimationLowFpsFrame === true &&
5590
+ shouldCaptureFramePerf !== true &&
5591
+ isInteractiveFrame !== true &&
5592
+ shouldUpdate !== true &&
5593
+ hasPendingAnimationWakeWork !== true;
5594
+ if (shouldContinueLowFpsIdleCadence) {
5595
+ nextAnimationLoopDelayMs = ANIMATION_IDLE_LOW_FPS_DELAY_MS;
5596
+ this._lastAnimationLoopDelayMs = nextAnimationLoopDelayMs;
5597
+ this._animationLoopExecuting = false;
5598
+ this._scheduleAnimationLoop(loop, nextAnimationLoopDelayMs);
5569
5599
  return;
5570
5600
  }
5571
5601
 
@@ -6278,6 +6308,20 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6278
6308
  if (settings.swapWheelZoomControls !== undefined) {
6279
6309
  module.swapWheelZoomControls = settings.swapWheelZoomControls === true;
6280
6310
  }
6311
+
6312
+ if (settings.useAnimation60Fps !== undefined) {
6313
+ const nextUseAnimation = settings.useAnimation60Fps === true;
6314
+ if (module.useAnimation60Fps !== nextUseAnimation) {
6315
+ module.useAnimation60Fps = nextUseAnimation;
6316
+ if (module.isAnimationLoopActive()) {
6317
+ module.requestAnimationWake('settings-animation-mode');
6318
+ } else {
6319
+ module.animate();
6320
+ }
6321
+ } else {
6322
+ module.useAnimation60Fps = nextUseAnimation;
6323
+ }
6324
+ }
6281
6325
  }
6282
6326
 
6283
6327
  function performMindMapInit(id, h) {
@@ -7608,7 +7652,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7608
7652
  aiNodeDefaultHeight: moduleInstance.aiNodeDefaultHeight || 200,
7609
7653
  showFullAiResponse: moduleInstance.showFullAiResponse || false,
7610
7654
  cursorDirection: moduleInstance.cursorDirection || 'horizontal',
7611
- swapWheelZoomControls: moduleInstance.swapWheelZoomControls === true
7655
+ swapWheelZoomControls: moduleInstance.swapWheelZoomControls === true,
7656
+ useAnimation60Fps: moduleInstance.useAnimation60Fps === true
7612
7657
  };
7613
7658
  },
7614
7659
  getRenderDebugFlags: () => getRenderDebugFlagsSnapshot(),
@@ -20,6 +20,7 @@
20
20
  { key: 'slate', swatch: '#64748b', ring: 'rgba(100, 116, 139, 0.22)' }
21
21
  ];
22
22
  const BUSINESS_AUTOMATION_SEMANTIC_TYPE = 'BusinessAutomationNode';
23
+ const REMOTE_FLEET_SEMANTIC_TYPE = 'RemoteFleetMonitor';
23
24
 
24
25
  function ensureFeedbackStyles() {
25
26
  if (document.getElementById('mindmap-feedback-styles')) return;
@@ -263,6 +264,10 @@
263
264
  return getNodeSemanticType(model) === BUSINESS_AUTOMATION_SEMANTIC_TYPE;
264
265
  }
265
266
 
267
+ function isRemoteFleetMonitorNode(model) {
268
+ return getNodeSemanticType(model) === REMOTE_FLEET_SEMANTIC_TYPE;
269
+ }
270
+
266
271
  function canRunExecutableNode(model) {
267
272
  return isBusinessAutomationNode(model);
268
273
  }
@@ -847,6 +852,11 @@
847
852
  return btn;
848
853
  };
849
854
 
855
+ if (isRemoteFleetMonitorNode(nodeEntry.model)) {
856
+ container.appendChild(addButton('delete-btn js-btn-delete', 'Delete', 'fa-solid fa-trash'));
857
+ return container;
858
+ }
859
+
850
860
  const appendNodeRunButton = () => {
851
861
  if (!canRunExecutableNode(nodeEntry.model)) {
852
862
  return false;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-lbG+qUpceHFX3AWWFgfI5gnhNcIQNiaHMmgfwFPbGkw=",
4
+ "hash": "sha256-w5tb8D+tk1vEw8xQui7tzpZQahkg50GobaGdoCeR680=",
5
5
  "fingerprinting": {
6
6
  "Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
7
7
  "Markdig.d1j7v41cl1.dll": "Markdig.dll",
@@ -127,12 +127,12 @@
127
127
  "MindExecution.Kernel.mdo1lzjvvp.dll": "MindExecution.Kernel.dll",
128
128
  "MindExecution.Plugins.Admin.5fctwf65dx.dll": "MindExecution.Plugins.Admin.dll",
129
129
  "MindExecution.Plugins.Business.nwivpk9djf.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.pkaelum0gw.dll": "MindExecution.Plugins.Concept.dll",
130
+ "MindExecution.Plugins.Concept.5t6acb6gi8.dll": "MindExecution.Plugins.Concept.dll",
131
131
  "MindExecution.Plugins.Directory.jnzcrwl049.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.9m2x4npbvh.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.1odbm6r8w6.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.ir5v2yll9b.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.2dnmq1omrn.dll": "MindExecution.Web.dll",
132
+ "MindExecution.Plugins.PlanMaster.6sh2pqv7l1.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.qir2jcd5tg.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.xo52cjfgkf.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.al2rg562cm.dll": "MindExecution.Web.dll",
136
136
  "dotnet.js": "dotnet.js",
137
137
  "dotnet.native.qc8g39g30v.js": "dotnet.native.js",
138
138
  "dotnet.native.boem75ye5i.wasm": "dotnet.native.wasm",
@@ -280,16 +280,16 @@
280
280
  "netstandard.yvr3prsx0x.dll": "sha256-EksNn8Luo4bOWqJ6X7dIe9qG9oOqwOVzjH2xYyMNi+E=",
281
281
  "MindExecution.Core.csfu1xtj3l.dll": "sha256-lP9GUQU4xFLsUU4IOwpUjt09mQO5M/bgLAAS8UnjLMs=",
282
282
  "MindExecution.Kernel.mdo1lzjvvp.dll": "sha256-Vj21M+Th5MKfLG5Hvg6/uwlDDdwAJwzeIxfWsK9gYhM=",
283
- "MindExecution.Plugins.Concept.pkaelum0gw.dll": "sha256-Cfre2yKV0t9ZKaX+BgG2tOjMWB+CQibG8CdFOKBmBkM=",
284
- "MindExecution.Plugins.PlanMaster.9m2x4npbvh.dll": "sha256-f+T0DDflG07kLAlbCCdR3vdETa6MqpO9zjm/Ljap58o=",
285
- "MindExecution.Shared.ir5v2yll9b.dll": "sha256-7sgfUXQC8QYJ2q79sgIXUQxSidVKCjpt65GoVDsBrJg=",
286
- "MindExecution.Web.2dnmq1omrn.dll": "sha256-xh0vRcSdCVFoY4WCfM44H+GOu6ilChQFplonSqrv5aA="
283
+ "MindExecution.Plugins.Concept.5t6acb6gi8.dll": "sha256-B8cvfQC2Mq+Zer1JqGCwTsVbth9K7Rj6kICw/qHC11U=",
284
+ "MindExecution.Plugins.PlanMaster.6sh2pqv7l1.dll": "sha256-htcm9+AVVrg2xwMCnk8xAFM6dmHtprz1aem+rvGi9Oc=",
285
+ "MindExecution.Shared.xo52cjfgkf.dll": "sha256-UTGlXPmfqvRgkIHzffQjrtudf+dWcVxOZwl73pI9d6s=",
286
+ "MindExecution.Web.al2rg562cm.dll": "sha256-IpaioRmH3Cvzp7kc2UWx3t6GWikMqHZp2WYm7oTNvqk="
287
287
  },
288
288
  "lazyAssembly": {
289
289
  "MindExecution.Plugins.Admin.5fctwf65dx.dll": "sha256-37+Egd35menNv18hEZ64qjiu0x1r+wFOuO5zDiOGfug=",
290
290
  "MindExecution.Plugins.Business.nwivpk9djf.dll": "sha256-iTV0NyCB7fnU+l8brClBd+KYnBDw628yHCwoRrQdTWE=",
291
291
  "MindExecution.Plugins.Directory.jnzcrwl049.dll": "sha256-fwo2q8bt+WNuVUMnJCOcfLAy151cjLZCQa0Z+iKdsRs=",
292
- "MindExecution.Plugins.YouTube.1odbm6r8w6.dll": "sha256-D4hD8DfUI6rtEGqa1mD9wqyBQZctZlYGTgT4poWpIUs="
292
+ "MindExecution.Plugins.YouTube.qir2jcd5tg.dll": "sha256-LlWfokQiQTjCFEhOokrwVTKhafIFhKkr8c9HJNhCTZY="
293
293
  }
294
294
  },
295
295
  "cacheBootResources": true,
@@ -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=20260614-remote-monitor-size-controls-v529" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-remote-monitor-size-controls-v529" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260614-animation-fps-toggle-v531" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-animation-fps-toggle-v531" />
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 = '20260614-remote-monitor-size-controls-v529';
582
+ const scriptVersion = '20260614-animation-fps-toggle-v531';
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": "D4Pf0guw",
2
+ "version": "4CXAhQPE",
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-tS2NkdGFK7jWKDH5NTbXqmJ+vgtdIuHB7akcpMxvC84=",
81
+ "hash": "sha256-zhbWABqHMZ+nPWlMMRuTFz6AfkMn5aOwZ9u63V1oW68=",
82
82
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
83
83
  },
84
84
  {
@@ -122,7 +122,7 @@
122
122
  "url": "_content/MindExecution.Shared/js/mind-map-logic-workers.js"
123
123
  },
124
124
  {
125
- "hash": "sha256-3zRp8SDEj138NHYNRni4biazcGvPQ5AcSszA3cGozQ4=",
125
+ "hash": "sha256-SdjTYIgIbQWWX5sXSsxiK0GbNA1xBmqMr1vi8mi8Bmc=",
126
126
  "url": "_content/MindExecution.Shared/js/mind-map-menu-manager.js"
127
127
  },
128
128
  {
@@ -426,28 +426,28 @@
426
426
  "url": "_framework/MindExecution.Plugins.Business.nwivpk9djf.dll"
427
427
  },
428
428
  {
429
- "hash": "sha256-Cfre2yKV0t9ZKaX+BgG2tOjMWB+CQibG8CdFOKBmBkM=",
430
- "url": "_framework/MindExecution.Plugins.Concept.pkaelum0gw.dll"
429
+ "hash": "sha256-B8cvfQC2Mq+Zer1JqGCwTsVbth9K7Rj6kICw/qHC11U=",
430
+ "url": "_framework/MindExecution.Plugins.Concept.5t6acb6gi8.dll"
431
431
  },
432
432
  {
433
433
  "hash": "sha256-fwo2q8bt+WNuVUMnJCOcfLAy151cjLZCQa0Z+iKdsRs=",
434
434
  "url": "_framework/MindExecution.Plugins.Directory.jnzcrwl049.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-f+T0DDflG07kLAlbCCdR3vdETa6MqpO9zjm/Ljap58o=",
438
- "url": "_framework/MindExecution.Plugins.PlanMaster.9m2x4npbvh.dll"
437
+ "hash": "sha256-htcm9+AVVrg2xwMCnk8xAFM6dmHtprz1aem+rvGi9Oc=",
438
+ "url": "_framework/MindExecution.Plugins.PlanMaster.6sh2pqv7l1.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-D4hD8DfUI6rtEGqa1mD9wqyBQZctZlYGTgT4poWpIUs=",
442
- "url": "_framework/MindExecution.Plugins.YouTube.1odbm6r8w6.dll"
441
+ "hash": "sha256-LlWfokQiQTjCFEhOokrwVTKhafIFhKkr8c9HJNhCTZY=",
442
+ "url": "_framework/MindExecution.Plugins.YouTube.qir2jcd5tg.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-7sgfUXQC8QYJ2q79sgIXUQxSidVKCjpt65GoVDsBrJg=",
446
- "url": "_framework/MindExecution.Shared.ir5v2yll9b.dll"
445
+ "hash": "sha256-UTGlXPmfqvRgkIHzffQjrtudf+dWcVxOZwl73pI9d6s=",
446
+ "url": "_framework/MindExecution.Shared.xo52cjfgkf.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-xh0vRcSdCVFoY4WCfM44H+GOu6ilChQFplonSqrv5aA=",
450
- "url": "_framework/MindExecution.Web.2dnmq1omrn.dll"
449
+ "hash": "sha256-IpaioRmH3Cvzp7kc2UWx3t6GWikMqHZp2WYm7oTNvqk=",
450
+ "url": "_framework/MindExecution.Web.al2rg562cm.dll"
451
451
  },
452
452
  {
453
453
  "hash": "sha256-IsZJ91/OW+fHzNqIgEc7Y072ns8z9dGritiSyvR9Wgc=",
@@ -770,7 +770,7 @@
770
770
  "url": "_framework/Websocket.Client.vapounvmnl.dll"
771
771
  },
772
772
  {
773
- "hash": "sha256-l3naHZAuZguN5HIWycttxdLm5mKfsddfcMUGDJc62fY=",
773
+ "hash": "sha256-i6ypObfN9dF3YarOl8JYw9L3L7p9ekgx+B+5DE4LABs=",
774
774
  "url": "_framework/blazor.boot.json"
775
775
  },
776
776
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-6okf9Y0Fpz1uWtjB0xMwIlfltrQLSgbPn8PBj3QW/5Y=",
837
+ "hash": "sha256-FiD2DU41Owpwgvy2aiGGg2MnGwqnmJvtRaX1eUBjmxc=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: D4Pf0guw */
1
+ /* Manifest version: 4CXAhQPE */
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