@mindexec/cli 0.2.218 → 0.2.220

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.
Files changed (23) hide show
  1. package/package.json +1 -1
  2. package/scripts/remote-fleet-render-smoke.mjs +11 -0
  3. package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +36 -6
  4. package/wwwroot/_content/MindExecution.Shared/js/background-themes.js +28 -113
  5. package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +2157 -104
  6. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +399 -96
  7. package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +121 -49
  8. package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +77 -3
  9. package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +83 -14
  10. package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js +5 -0
  11. package/wwwroot/_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js +2 -2
  12. package/wwwroot/_framework/{MindExecution.Core.21gc0645uz.dll → MindExecution.Core.xsad4wu36e.dll} +0 -0
  13. package/wwwroot/_framework/{MindExecution.Plugins.Admin.29mytzdaun.dll → MindExecution.Plugins.Admin.m5d94977um.dll} +0 -0
  14. package/wwwroot/_framework/{MindExecution.Plugins.Business.asckvekct8.dll → MindExecution.Plugins.Business.ntqdn1hta3.dll} +0 -0
  15. package/wwwroot/_framework/{MindExecution.Plugins.Concept.u9kzsgf64o.dll → MindExecution.Plugins.Concept.mqiyx4db4r.dll} +0 -0
  16. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.kibqg6rvqh.dll → MindExecution.Plugins.PlanMaster.fnortumnuu.dll} +0 -0
  17. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.089r64n2hv.dll → MindExecution.Plugins.YouTube.86osu6wpgh.dll} +0 -0
  18. package/wwwroot/_framework/{MindExecution.Shared.tlbhl3vzry.dll → MindExecution.Shared.wg2otcw4bv.dll} +0 -0
  19. package/wwwroot/_framework/{MindExecution.Web.7axuoygrwi.dll → MindExecution.Web.gfio3kfxrd.dll} +0 -0
  20. package/wwwroot/_framework/blazor.boot.json +17 -17
  21. package/wwwroot/index.html +3 -3
  22. package/wwwroot/service-worker-assets.js +28 -28
  23. package/wwwroot/service-worker.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.218",
3
+ "version": "0.2.220",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -175,13 +175,24 @@ class MiniElement {
175
175
 
176
176
  dispatchEvent(event) {
177
177
  const payload = typeof event === 'string' ? { type: event } : { ...(event || {}) };
178
+ let immediateStopped = false;
179
+ const originalStopImmediatePropagation = typeof payload.stopImmediatePropagation === 'function'
180
+ ? payload.stopImmediatePropagation
181
+ : null;
178
182
  payload.type = payload.type || 'event';
179
183
  payload.target = payload.target || this;
180
184
  payload.currentTarget = this;
181
185
  payload.preventDefault = payload.preventDefault || (() => {});
182
186
  payload.stopPropagation = payload.stopPropagation || (() => {});
187
+ payload.stopImmediatePropagation = () => {
188
+ immediateStopped = true;
189
+ originalStopImmediatePropagation?.();
190
+ };
183
191
  for (const listener of this._listeners.get(payload.type) || []) {
184
192
  listener(payload);
193
+ if (immediateStopped) {
194
+ break;
195
+ }
185
196
  }
186
197
  return true;
187
198
  }
@@ -209,7 +209,9 @@ body.mind-debug-video-tint-layout .css3d-resolution-wrapper.node-type-video .vid
209
209
  /* ▲▲▲ [Fix] ▲▲▲ */
210
210
 
211
211
  body.is-zooming .css3d-resolution-wrapper,
212
- body.is-panning .css3d-resolution-wrapper {
212
+ body.is-panning .css3d-resolution-wrapper,
213
+ #css3d-dom-wrapper.is-zooming .css3d-resolution-wrapper,
214
+ #css3d-dom-wrapper.is-panning .css3d-resolution-wrapper {
213
215
  -webkit-transition: none !important;
214
216
  transition: none !important;
215
217
  }
@@ -217,7 +219,11 @@ body.is-panning .css3d-resolution-wrapper {
217
219
  body.is-zooming .css3d-resolution-wrapper.selected,
218
220
  body.is-panning .css3d-resolution-wrapper.selected,
219
221
  body.mindcanvas-is-moving .css3d-resolution-wrapper.selected,
220
- body.mindcanvas-is-dense .css3d-resolution-wrapper.selected {
222
+ body.mindcanvas-is-dense .css3d-resolution-wrapper.selected,
223
+ #css3d-dom-wrapper.is-zooming .css3d-resolution-wrapper.selected,
224
+ #css3d-dom-wrapper.is-panning .css3d-resolution-wrapper.selected,
225
+ #css3d-dom-wrapper.mindcanvas-is-moving .css3d-resolution-wrapper.selected,
226
+ #css3d-dom-wrapper.mindcanvas-is-dense .css3d-resolution-wrapper.selected {
221
227
  -webkit-filter: none !important;
222
228
  filter: none !important;
223
229
  }
@@ -238,7 +244,11 @@ html.mindcanvas-platform-apple body.mindcanvas-is-dense .css3d-resolution-wrappe
238
244
  body.is-zooming .node-menu-wrapper,
239
245
  body.is-panning .node-menu-wrapper,
240
246
  body.is-zooming .map-node-memo__icon-popover,
241
- body.is-panning .map-node-memo__icon-popover {
247
+ body.is-panning .map-node-memo__icon-popover,
248
+ #css3d-dom-wrapper.is-zooming .node-menu-wrapper,
249
+ #css3d-dom-wrapper.is-panning .node-menu-wrapper,
250
+ #css3d-dom-wrapper.is-zooming .map-node-memo__icon-popover,
251
+ #css3d-dom-wrapper.is-panning .map-node-memo__icon-popover {
242
252
  -webkit-backdrop-filter: none !important;
243
253
  backdrop-filter: none !important;
244
254
  -webkit-box-shadow: none !important;
@@ -1122,6 +1132,7 @@ body.is-panning .map-node-memo__icon-popover {
1122
1132
  /* Hover raycast is already short-circuited in JS during pan, so keep CSS hover/focus
1123
1133
  intact while middle-button panning. We still suppress hit-testing for zoom/drag. */
1124
1134
  #css3d-dom-wrapper.is-dragging,
1135
+ #css3d-dom-wrapper.is-zooming,
1125
1136
  body.is-zooming #css3d-dom-wrapper {
1126
1137
  pointer-events: none !important;
1127
1138
  }
@@ -1138,6 +1149,7 @@ body.is-zooming {
1138
1149
  body.mindcanvas-browser-selection-locked *,
1139
1150
  body.is-node-dragging *,
1140
1151
  body.is-resizing *,
1152
+ #css3d-dom-wrapper.is-zooming *,
1141
1153
  body.is-zooming #css3d-dom-wrapper *,
1142
1154
  #css3d-dom-wrapper.is-panning,
1143
1155
  #css3d-dom-wrapper.is-panning *,
@@ -1163,6 +1175,8 @@ body.is-resizing .mind-map-text-overlay-v2-card,
1163
1175
  body.is-resizing .mind-map-text-overlay-v2-card *,
1164
1176
  body.is-zooming .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment,
1165
1177
  body.is-zooming .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment *,
1178
+ #css3d-dom-wrapper.is-zooming .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment,
1179
+ #css3d-dom-wrapper.is-zooming .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment *,
1166
1180
  #css3d-dom-wrapper.is-panning .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment,
1167
1181
  #css3d-dom-wrapper.is-panning .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment * {
1168
1182
  user-select: none !important;
@@ -1504,7 +1518,8 @@ html.mindcanvas-platform-apple .css3d-resolution-wrapper.is-automation-relation-
1504
1518
  pointer-events: auto;
1505
1519
  }
1506
1520
 
1507
- body.is-panning .mind-map-text-overlay-v2-card.is-passive .mind-map-text-overlay-v2-body {
1521
+ body.is-panning .mind-map-text-overlay-v2-card.is-passive .mind-map-text-overlay-v2-body,
1522
+ #css3d-dom-wrapper.is-panning .mind-map-text-overlay-v2-card.is-passive .mind-map-text-overlay-v2-body {
1508
1523
  pointer-events: none !important;
1509
1524
  }
1510
1525
 
@@ -2445,6 +2460,9 @@ body.is-panning .mind-map-text-overlay-v2-card.is-passive .mind-map-text-overlay
2445
2460
  body.is-panning .css3d-resolution-wrapper.node-type-templatelauncher.selected,
2446
2461
  body.is-zooming .css3d-resolution-wrapper.node-type-templatelauncher.selected,
2447
2462
  body.mindcanvas-is-moving .css3d-resolution-wrapper.node-type-templatelauncher.selected,
2463
+ #css3d-dom-wrapper.is-panning .css3d-resolution-wrapper.node-type-templatelauncher.selected,
2464
+ #css3d-dom-wrapper.is-zooming .css3d-resolution-wrapper.node-type-templatelauncher.selected,
2465
+ #css3d-dom-wrapper.mindcanvas-is-moving .css3d-resolution-wrapper.node-type-templatelauncher.selected,
2448
2466
  body.mindcanvas-is-dense .css3d-resolution-wrapper.node-type-templatelauncher.selected {
2449
2467
  outline: none !important;
2450
2468
  -webkit-box-shadow: none !important;
@@ -3340,7 +3358,11 @@ body.is-panning .css3d-resolution-wrapper,
3340
3358
  body.is-node-dragging .css3d-resolution-wrapper,
3341
3359
  body.is-resizing .css3d-resolution-wrapper,
3342
3360
  body.mindcanvas-is-moving .css3d-resolution-wrapper,
3343
- body.mindcanvas-is-dense .css3d-resolution-wrapper {
3361
+ body.mindcanvas-is-dense .css3d-resolution-wrapper,
3362
+ #css3d-dom-wrapper.is-zooming .css3d-resolution-wrapper,
3363
+ #css3d-dom-wrapper.is-panning .css3d-resolution-wrapper,
3364
+ #css3d-dom-wrapper.mindcanvas-is-moving .css3d-resolution-wrapper,
3365
+ #css3d-dom-wrapper.mindcanvas-is-dense .css3d-resolution-wrapper {
3344
3366
  -webkit-transition: none !important;
3345
3367
  transition: none !important;
3346
3368
  -webkit-filter: none !important;
@@ -3360,7 +3382,15 @@ body.is-panning .css3d-resolution-wrapper [id^="css3d-node-"],
3360
3382
  body.is-node-dragging .css3d-resolution-wrapper [id^="css3d-node-"],
3361
3383
  body.is-resizing .css3d-resolution-wrapper [id^="css3d-node-"],
3362
3384
  body.mindcanvas-is-moving .css3d-resolution-wrapper [id^="css3d-node-"],
3363
- body.mindcanvas-is-dense .css3d-resolution-wrapper [id^="css3d-node-"] {
3385
+ body.mindcanvas-is-dense .css3d-resolution-wrapper [id^="css3d-node-"],
3386
+ #css3d-dom-wrapper.is-zooming .css3d-resolution-wrapper .css3d-dynamic-node,
3387
+ #css3d-dom-wrapper.is-panning .css3d-resolution-wrapper .css3d-dynamic-node,
3388
+ #css3d-dom-wrapper.mindcanvas-is-moving .css3d-resolution-wrapper .css3d-dynamic-node,
3389
+ #css3d-dom-wrapper.mindcanvas-is-dense .css3d-resolution-wrapper .css3d-dynamic-node,
3390
+ #css3d-dom-wrapper.is-zooming .css3d-resolution-wrapper [id^="css3d-node-"],
3391
+ #css3d-dom-wrapper.is-panning .css3d-resolution-wrapper [id^="css3d-node-"],
3392
+ #css3d-dom-wrapper.mindcanvas-is-moving .css3d-resolution-wrapper [id^="css3d-node-"],
3393
+ #css3d-dom-wrapper.mindcanvas-is-dense .css3d-resolution-wrapper [id^="css3d-node-"] {
3364
3394
  -webkit-transition: none !important;
3365
3395
  transition: none !important;
3366
3396
  -webkit-filter: none !important;
@@ -145,7 +145,7 @@
145
145
  return false;
146
146
  }
147
147
 
148
- themeObject.animate(camera);
148
+ themeObject.animate(camera, options);
149
149
 
150
150
  const mode = getThemeAnimationMode(themeName, themeObject);
151
151
  if (mode === THEME_ANIMATION_MODE.Camera || mode === THEME_ANIMATION_MODE.None) {
@@ -315,118 +315,27 @@
315
315
  dispose: (themeObject) => { disposeThemeObject(themeObject); }
316
316
  },
317
317
 
318
- // Theme 2: SpatialGrid2D (dots and '+' markers on the XY plane only)
319
- 'SpatialGrid2D': {
320
- create: (scene) => {
318
+ // Theme 2: SpatialGrid2D (lightweight adaptive grid on the XY plane)
319
+ 'SpatialGrid2D': {
320
+ create: (scene) => {
321
321
  scene.background = new THREE.Color(THEME_SURFACE_BG);
322
- const gridRange = 10000; // Larger XY plane range
323
- const gridStep = 10; // Larger dot spacing
324
- const markerStep = 100; // Larger '+' marker spacing
325
- const markerSize = 10; // '+' marker size
326
- const dotSize = 2; // Dot size
327
-
328
- const dotVertices = [];
329
- const markerVertices = [];
330
-
331
- // Iterate X/Y only; keep Z fixed at 0
332
- for (let x = -gridRange; x <= gridRange; x += gridStep) {
333
- for (let y = -gridRange; y <= gridRange; y += gridStep) {
334
- const z = 0; // Keep Z fixed at 0
335
-
336
- // Check whether XY coordinates are multiples of markerStep
337
- if (x % markerStep === 0 && y % markerStep === 0) {
338
- markerVertices.push(x, y, z);
339
- } else {
340
- dotVertices.push(x, y, z);
341
- }
342
- }
343
- }
344
-
345
- const themeGroup = new THREE.Group();
346
-
347
- // 1. Dots
348
- const dotGeom = new THREE.BufferGeometry();
349
- dotGeom.setAttribute('position', new THREE.Float32BufferAttribute(dotVertices, 3));
350
- const dotMaterial = new THREE.PointsMaterial({
351
- color: 0xaaaaaa, // Dot color (slightly brighter)
352
- size: dotSize,
353
- sizeAttenuation: true,
354
- transparent: true, // Needed for opacity control
355
- opacity: 1.0,
356
- depthWrite: false // ▼ [Fix] Prevent Z-fighting with nodes
357
- });
358
- const dotMesh = new THREE.Points(dotGeom, dotMaterial);
359
- dotMesh.renderOrder = -1; // ▼ [Fix] Render before nodes to avoid Z-fighting
360
- themeGroup.add(dotMesh);
361
-
362
- // 2. '+' Markers
363
- const markerGeom = new THREE.BufferGeometry();
364
- markerGeom.setAttribute('position', new THREE.Float32BufferAttribute(markerVertices, 3));
365
- const markerMaterial = new THREE.PointsMaterial({
366
- map: createPlusTexture(),
367
- size: markerSize,
368
- sizeAttenuation: true,
369
- transparent: true,
370
- alphaTest: 0.1,
371
- color: 0x888888, // Marker color (slightly darker than dots)
372
- opacity: 1.0,
373
- depthWrite: false // ▼ [Fix] Prevent Z-fighting with nodes
374
- });
375
- const markerMesh = new THREE.Points(markerGeom, markerMaterial);
376
- markerMesh.renderOrder = -1; // ▼ [Fix] Render before nodes to avoid Z-fighting
377
- themeGroup.add(markerMesh);
378
-
379
- const tmp = new THREE.Vector3();
380
- const snapSize = markerStep;
381
-
382
- // ▼▼▼ [New] Distance-based opacity control (see XYGrid) ▼▼▼
383
- themeGroup.animate = function (camera) {
384
- if (!camera) return;
385
-
386
- // Position snapping
387
- tmp.copy(camera.position);
388
- tmp.z = 0; // Same plane as nodes (no parallax)
389
- tmp.x = Math.round(tmp.x / snapSize) * snapSize;
390
- tmp.y = Math.round(tmp.y / snapSize) * snapSize;
391
- themeGroup.position.copy(tmp);
392
-
393
- // Distance-based opacity
394
- const z = camera.position.z;
395
- let opacity = 1.0;
396
-
397
- if (z < 1600) {
398
- // [~1600] Near: 100%
399
- opacity = 1.0;
400
- }
401
- else if (z >= 1600 && z < 2400) {
402
- // [1600~2400] Transition: start fading
403
- const t = (z - 1600) / 800; // 0.0 ~ 1.0
404
- opacity = 1.0 - (t * 0.5); // 1.0 -> 0.5
405
- }
406
- else if (z >= 2400 && z < 4000) {
407
- // [2400~4000] Mid-range
408
- opacity = 0.5;
409
- }
410
- else if (z >= 4000 && z < 6000) {
411
- // [4000~6000] Far: fade out
412
- const t = (z - 4000) / 2000; // 0.0 ~ 1.0
413
- opacity = 0.5 - (t * 0.5); // 0.5 -> 0
414
- }
415
- else {
416
- // [6000~] Very far: hidden
417
- opacity = 0;
418
- }
419
-
420
- // Apply opacity
421
- dotMaterial.opacity = opacity;
422
- markerMaterial.opacity = opacity;
423
- };
424
- // ▲▲▲ [New] ▲▲▲
425
-
426
- return setThemeAnimationMode(themeGroup, THEME_ANIMATION_MODE.Camera);
322
+ const grid = createAdaptiveXYGridOverlay(new THREE.Color(THEME_GRID_COLOR_SOFT), {
323
+ fineDistance: 42000,
324
+ coarseDistance: 120000,
325
+ farDistance: 320000,
326
+ fineSmallOpacity: 0.36,
327
+ fineLargeOpacity: 0.24,
328
+ coarseSmallOpacity: 0.3,
329
+ coarseLargeOpacity: 0.2,
330
+ farSmallOpacity: 0.24,
331
+ farLargeOpacity: 0.14
332
+ });
333
+ grid.userData.themeAlias = 'SpatialGrid2D';
334
+ grid.userData.lightweightAdaptiveGrid = true;
335
+ return grid;
427
336
  },
428
- dispose: (themeObject) => { disposeThemeObject(themeObject); }
429
- },
337
+ dispose: (themeObject) => { disposeThemeObject(themeObject); }
338
+ },
430
339
 
431
340
  // Theme 3: GridPlane (basic 2D grid - uses InfiniteGridHelper)
432
341
  'GridPlane': {
@@ -1082,13 +991,19 @@
1082
991
  themeGroup.add(adaptiveGridOverlay);
1083
992
 
1084
993
  // Animation: galaxy texture simulation and camera tracking for grid
1085
- themeGroup.animate = (camera) => {
994
+ themeGroup.animate = (camera, options = {}) => {
1086
995
  if (!camera) return;
1087
996
 
997
+ const isInteractiveMotionFrame = options.isInteractiveFrame === true ||
998
+ options.isCameraMoving === true ||
999
+ options.isPanning === true ||
1000
+ options.isZooming === true;
1001
+ const simulationStepCount = isInteractiveMotionFrame ? 1 : simulationStepsPerTick;
1002
+
1088
1003
  if (simulationReady) {
1089
1004
  const previousTarget = renderer.getRenderTarget ? renderer.getRenderTarget() : null;
1090
1005
  try {
1091
- for (let i = 0; i < simulationStepsPerTick; i++) {
1006
+ for (let i = 0; i < simulationStepCount; i++) {
1092
1007
  velocityMaterial.uniforms.u_positionTexture.value = currentPositionTarget.texture;
1093
1008
  velocityMaterial.uniforms.u_velocityTexture.value = currentVelocityTarget.texture;
1094
1009
  renderComputePass(velocityMaterial, nextVelocityTarget);