@mindexec/cli 0.2.310 → 0.2.312

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.310",
3
+ "version": "0.2.312",
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 = '20260621-asset-resolve-overlay-v793';
8
+ const MINDMAP_CORE_BUILD_ID = '20260621-overlay-motion-single-host-v796';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -1132,6 +1132,7 @@
1132
1132
  enablePassiveOverlayForVisibleNodes: true,
1133
1133
  enableOverlayCssZoom: true,
1134
1134
  enableSharedNodeViewOverlay: true,
1135
+ preferOverlayNodeViewHost: false,
1135
1136
  enableVisibilityCulling: true,
1136
1137
  enableLodUpdate: true,
1137
1138
  enableWebglRender: true,
@@ -9094,7 +9095,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
9094
9095
  Number(this._passiveOverlayResumeAt || 0) > frameStart;
9095
9096
  const shouldSuppressPassiveOverlayDuringCameraMotion =
9096
9097
  useTextOverlayV2 &&
9097
- hasPassiveDomOverlaySurface &&
9098
+ (hasPassiveDomOverlaySurface || hasVisibleOverlayV2Card === true) &&
9098
9099
  (isPassiveOverlayIdleDelayActive ||
9099
9100
  this.isZooming === true ||
9100
9101
  this.isPanning === true ||
@@ -41,6 +41,7 @@
41
41
  const CSV_TABLE_CONTENT_TYPE = 'csv-table';
42
42
  const NODE_VIEW_HOST_CSS3D = 'css3d';
43
43
  const NODE_VIEW_HOST_OVERLAY = 'overlay';
44
+ const NODE_VIEW_HOST_HYBRID = 'hybrid';
44
45
  const NODE_VIEW_RENDERER_VERSION = 'shared-node-view-v1';
45
46
  const CSV_TABLE_MAX_RENDER_ROWS = 500;
46
47
  const CSV_TABLE_MAX_RENDER_COLUMNS = 80;
@@ -23233,6 +23234,51 @@
23233
23234
  || info.contentTypeLower === 'embed';
23234
23235
  }
23235
23236
 
23237
+ function normalizeNodeViewHost(value, fallback = NODE_VIEW_HOST_CSS3D) {
23238
+ const normalized = String(value || '').trim().toLowerCase();
23239
+ if (normalized === NODE_VIEW_HOST_CSS3D ||
23240
+ normalized === NODE_VIEW_HOST_OVERLAY ||
23241
+ normalized === NODE_VIEW_HOST_HYBRID) {
23242
+ return normalized;
23243
+ }
23244
+
23245
+ return fallback;
23246
+ }
23247
+
23248
+ function getNodeViewPrimaryHost(module = _module) {
23249
+ const flags = module?.renderDebugFlags || {};
23250
+ const explicit = normalizeNodeViewHost(flags.nodeViewPrimaryHost, '');
23251
+ if (explicit) {
23252
+ return explicit;
23253
+ }
23254
+
23255
+ return flags.preferOverlayNodeViewHost === true
23256
+ ? NODE_VIEW_HOST_OVERLAY
23257
+ : NODE_VIEW_HOST_CSS3D;
23258
+ }
23259
+
23260
+ function getNodeViewHostPolicy(module, nodeModel, options = {}) {
23261
+ const requestedHost = normalizeNodeViewHost(options.hostKind, NODE_VIEW_HOST_CSS3D);
23262
+ const primaryHost = getNodeViewPrimaryHost(module);
23263
+ const info = getNodeViewContentInfo(nodeModel);
23264
+ const overlayPrimary = primaryHost === NODE_VIEW_HOST_OVERLAY;
23265
+ const hybridPrimary = primaryHost === NODE_VIEW_HOST_HYBRID;
23266
+
23267
+ return {
23268
+ rendererVersion: NODE_VIEW_RENDERER_VERSION,
23269
+ requestedHost,
23270
+ primaryHost,
23271
+ effectiveHost: requestedHost,
23272
+ isCss3dPrimary: primaryHost === NODE_VIEW_HOST_CSS3D || hybridPrimary,
23273
+ isOverlayPrimary: overlayPrimary,
23274
+ isHybridPrimary: hybridPrimary,
23275
+ useSharedOverlay: module?.renderDebugFlags?.enableSharedNodeViewOverlay !== false,
23276
+ supportsNodeView: shouldCreateDynamicNodeView(nodeModel, info) || !shouldBypassNodeViewTemplate(nodeModel, info),
23277
+ contentTypeLower: info.contentTypeLower,
23278
+ visualContentTypeLower: info.visualContentTypeLower
23279
+ };
23280
+ }
23281
+
23236
23282
  function createNodeViewElement(module, nodeModel, options = {}) {
23237
23283
  if (module) {
23238
23284
  _module = module;
@@ -23243,7 +23289,8 @@
23243
23289
  return null;
23244
23290
  }
23245
23291
 
23246
- const hostKind = String(options.hostKind || NODE_VIEW_HOST_CSS3D).trim().toLowerCase() || NODE_VIEW_HOST_CSS3D;
23292
+ const hostPolicy = getNodeViewHostPolicy(module, nodeModel, options);
23293
+ const hostKind = hostPolicy.effectiveHost;
23247
23294
  const info = getNodeViewContentInfo(nodeModel);
23248
23295
  const templateId = `node-${nodeId}`;
23249
23296
  let templateElement = document.getElementById(templateId);
@@ -23320,6 +23367,7 @@
23320
23367
  allowsExternalMemoChrome,
23321
23368
  resolutionScale,
23322
23369
  hostKind,
23370
+ hostPolicy,
23323
23371
  rendererVersion: NODE_VIEW_RENDERER_VERSION
23324
23372
  };
23325
23373
  }
@@ -24447,6 +24495,8 @@
24447
24495
  clearNativeTextSelectionSource: clearNativeTextSelectionSource,
24448
24496
  createCss3dObject: createCss3dObject,
24449
24497
  createNodeViewElement: createNodeViewElement,
24498
+ getNodeViewHostPolicy: getNodeViewHostPolicy,
24499
+ getNodeViewPrimaryHost: getNodeViewPrimaryHost,
24450
24500
  createEditingOverlayContent: createEditingOverlayContent,
24451
24501
  clearEditingOverlay: clearEditingOverlay,
24452
24502
  getTextInteractionContentSelectors: getTextInteractionContentSelectors,
@@ -6481,6 +6481,7 @@ window.MindMapInteractions = (function () {
6481
6481
  const target = targetOverride || e.target;
6482
6482
  setBrowserSelectionLock(true, 'pan', { clearSelection: false, cssClass: false });
6483
6483
  module.isPanning = true;
6484
+ setPassiveOverlaySuppressedDuringDrag(module, true);
6484
6485
  notifyMindCanvasSurfaceInteraction('pan-start');
6485
6486
  module.lastMousePos = { x: e.clientX, y: e.clientY };
6486
6487
  module._lastPanInputAt = performance.now();
@@ -51,7 +51,7 @@
51
51
  // ▲▲▲ [Usage] ▲▲▲
52
52
 
53
53
  // Procedural line rendering settings
54
- const LOD_RENDERER_BUILD_ID = '20260621-asset-resolve-overlay-v793';
54
+ const LOD_RENDERER_BUILD_ID = '20260621-overlay-motion-single-host-v796';
55
55
  const DirtyKind = Object.freeze({
56
56
  ResidentFullRebuild: 'resident-full-rebuild',
57
57
  ResidentPatch: 'resident-patch',
@@ -2852,20 +2852,32 @@
2852
2852
  }
2853
2853
 
2854
2854
  function shouldUseSharedNodeViewOverlay(module, entry, mode) {
2855
- if (module?.renderDebugFlags?.enableSharedNodeViewOverlay === false) {
2855
+ const manager = getCss3dManager();
2856
+ const model = getModel(entry);
2857
+ const policy = manager?.getNodeViewHostPolicy?.(module, model, { hostKind: 'overlay' }) || null;
2858
+ if (policy?.useSharedOverlay === false || module?.renderDebugFlags?.enableSharedNodeViewOverlay === false) {
2856
2859
  return false;
2857
2860
  }
2858
2861
 
2859
2862
  const type = getContentType(entry);
2860
2863
  const normalizedMode = String(mode || '').trim().toLowerCase();
2861
- return normalizedMode === 'full'
2864
+ return policy?.isOverlayPrimary === true
2865
+ || normalizedMode === 'full'
2862
2866
  || type === 'text'
2863
2867
  || type === 'markdown'
2864
2868
  || type === 'note'
2869
+ || type === 'memo'
2865
2870
  || type === 'code'
2866
2871
  || type === CSV_TABLE_CONTENT_TYPE;
2867
2872
  }
2868
2873
 
2874
+ function isOverlayPrimaryNodeViewHost(module, entry) {
2875
+ const manager = getCss3dManager();
2876
+ const model = getModel(entry);
2877
+ const policy = manager?.getNodeViewHostPolicy?.(module, model, { hostKind: 'overlay' }) || null;
2878
+ return policy?.isOverlayPrimary === true;
2879
+ }
2880
+
2869
2881
  function createReadonlyOverlayFromNodeView(module, entry, options = {}) {
2870
2882
  const manager = getCss3dManager();
2871
2883
  const model = getModel(entry);
@@ -2873,11 +2885,6 @@
2873
2885
  return null;
2874
2886
  }
2875
2887
 
2876
- const sourceRoot = options.sourceRoot || getReadonlySelectionSourceRoot(entry);
2877
- if (!sourceRoot) {
2878
- return null;
2879
- }
2880
-
2881
2888
  const type = getContentType(entry);
2882
2889
  const interactive = options.interactive === true;
2883
2890
  const renderMode = String(options.renderMode || getReadonlySelectionMode(entry) || type || '').trim().toLowerCase();
@@ -2906,6 +2913,7 @@
2906
2913
  return null;
2907
2914
  }
2908
2915
 
2916
+ const sourceRoot = options.sourceRoot || getReadonlySelectionSourceRoot(entry) || nodeViewRoot;
2909
2917
  const finalized = finalizeReadonlySourceClone(module, sourceRoot, preparedRoot, type, interactive, {
2910
2918
  renderMode: 'node-view'
2911
2919
  });
@@ -3186,7 +3194,10 @@
3186
3194
  // Memo headers collapse too easily when reconstructed from
3187
3195
  // independent fragments. Clone the canonical shell but strip the
3188
3196
  // visual chrome so CSS3D keeps ownership of card background/edge.
3189
- return createReadonlyMemoShellClone(module, entry, options);
3197
+ return createReadonlyOverlayFromNodeView(module, entry, {
3198
+ ...options,
3199
+ renderMode: mode
3200
+ }) || createReadonlyMemoShellClone(module, entry, options);
3190
3201
  }
3191
3202
 
3192
3203
  if (mode !== 'none') {
@@ -3314,6 +3325,12 @@
3314
3325
  return false;
3315
3326
  }
3316
3327
 
3328
+ if (module?._suppressPassiveDomOverlayDuringZoom === true ||
3329
+ module?.isPanning === true ||
3330
+ module?.isZooming === true) {
3331
+ return false;
3332
+ }
3333
+
3317
3334
  if (contentChanged || forceRefresh || state.dirtyLayout === true) {
3318
3335
  return false;
3319
3336
  }
@@ -4072,10 +4089,6 @@
4072
4089
  !normalizeId(state.editing?.nodeId);
4073
4090
  module._suppressPassiveDomOverlayDuringZoom = nextSuppressed;
4074
4091
 
4075
- if (wasSuppressed === nextSuppressed) {
4076
- return nextSuppressed;
4077
- }
4078
-
4079
4092
  if (nextSuppressed) {
4080
4093
  state.cards.forEach(card => {
4081
4094
  if (!card || card.style.display === 'none') {
@@ -4091,6 +4104,14 @@
4091
4104
  if (entry) {
4092
4105
  resumeSource(entry);
4093
4106
  }
4107
+
4108
+ const isPassiveSelectionCard =
4109
+ String(card.dataset?.overlayMode || '') === 'selection' &&
4110
+ String(card.dataset?.overlayInteractive || '') !== 'true' &&
4111
+ String(card.dataset?.sourceKind || '') !== 'live';
4112
+ if (isPassiveSelectionCard) {
4113
+ hideCard(card);
4114
+ }
4094
4115
  });
4095
4116
  clearLayerTransform(layer);
4096
4117
  layer.style.display = 'none';
@@ -4100,6 +4121,10 @@
4100
4121
  return true;
4101
4122
  }
4102
4123
 
4124
+ if (wasSuppressed === nextSuppressed) {
4125
+ return nextSuppressed;
4126
+ }
4127
+
4103
4128
  state.dirtyLayout = true;
4104
4129
  module._overlayDirty = true;
4105
4130
  module._lastOverlayKey = '';
@@ -4290,11 +4315,14 @@
4290
4315
 
4291
4316
  const isSupported = interactive ? supportsSelection(entry) : supportsPassiveDisplay(entry);
4292
4317
  const canRenderFromSource = !!(entry?.cssObject?.element && entry.currentType === 'CSS' && entry.cssObject.visible);
4318
+ const canRenderFromNodeViewHost = !interactive &&
4319
+ isOverlayPrimaryNodeViewHost(module, entry) &&
4320
+ isSupported;
4293
4321
  const canReuseExistingPassiveCard = !interactive &&
4294
4322
  shouldRenderPassive &&
4295
4323
  !!existingCard &&
4296
4324
  existingCard.childElementCount > 0;
4297
- if (!entry || !isSupported || (!canRenderFromSource && !canReuseExistingPassiveCard)) {
4325
+ if (!entry || !isSupported || (!canRenderFromSource && !canRenderFromNodeViewHost && !canReuseExistingPassiveCard)) {
4298
4326
  hideCard(existingCard);
4299
4327
  if (interactive) {
4300
4328
  clearSelection(module, nodeId);
@@ -4304,7 +4332,7 @@
4304
4332
  return;
4305
4333
  }
4306
4334
 
4307
- const forceRebuild = canRenderFromSource && state?.dirtyNodes?.has?.(nodeId) === true;
4335
+ const forceRebuild = (canRenderFromSource || canRenderFromNodeViewHost) && state?.dirtyNodes?.has?.(nodeId) === true;
4308
4336
  const card = renderSelectionCard(module, entry, {
4309
4337
  interactive: interactive,
4310
4338
  forceRebuild: forceRebuild
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-YIk9DX4DKiZTExQMveGB2um1rjSUq/+iCFtZzwItvUg=",
4
+ "hash": "sha256-D1kQwIGK/5ULx6Yo1WH3vsTRIzWc/7/k8RpSswCSqh4=",
5
5
  "fingerprinting": {
6
6
  "Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
7
7
  "Markdig.d1j7v41cl1.dll": "Markdig.dll",
@@ -131,7 +131,7 @@
131
131
  "MindExecution.Plugins.Directory.ju87t8h3zs.dll": "MindExecution.Plugins.Directory.dll",
132
132
  "MindExecution.Plugins.PlanMaster.krn3jgvjpa.dll": "MindExecution.Plugins.PlanMaster.dll",
133
133
  "MindExecution.Plugins.YouTube.5m53srfud6.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.74msadwmew.dll": "MindExecution.Shared.dll",
134
+ "MindExecution.Shared.ojp3psugsm.dll": "MindExecution.Shared.dll",
135
135
  "MindExecution.Web.82k6ktlkfg.dll": "MindExecution.Web.dll",
136
136
  "dotnet.js": "dotnet.js",
137
137
  "dotnet.native.qc8g39g30v.js": "dotnet.native.js",
@@ -283,7 +283,7 @@
283
283
  "MindExecution.Plugins.Business.nyr3v25v48.dll": "sha256-T4c7+fDE4TQAXAoFmHnYM+tT7RSvAM7W0VinLPoD+6U=",
284
284
  "MindExecution.Plugins.Concept.l9z9tx9svt.dll": "sha256-N/QoILmTilvX5Zo4SCy7ENTCqMzSC6RIEQlEwtxkGPo=",
285
285
  "MindExecution.Plugins.PlanMaster.krn3jgvjpa.dll": "sha256-8IFpm/2fpsWD3syyl58LTSWSGC8PfcrsLdmmSKR1Sq0=",
286
- "MindExecution.Shared.74msadwmew.dll": "sha256-93zoKe74n9ZSDo3yiXxg1tAOzOaCbuapATS84OHGoNU=",
286
+ "MindExecution.Shared.ojp3psugsm.dll": "sha256-FC0pE2bsyE9i7GNSXCghKULaYYZXUEdepb2VxPfcYaA=",
287
287
  "MindExecution.Web.82k6ktlkfg.dll": "sha256-ECPSyJrziGEVhCw8ZUXkRsfTDjWCk676m5yz99b13N4="
288
288
  },
289
289
  "lazyAssembly": {
@@ -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=20260621-asset-resolve-overlay-v793" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260621-asset-resolve-overlay-v793" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260621-overlay-motion-single-host-v796" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260621-overlay-motion-single-host-v796" />
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 = '20260621-asset-resolve-overlay-v793';
582
+ const scriptVersion = '20260621-overlay-motion-single-host-v796';
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": "dFWDosxV",
2
+ "version": "/p0QLLkC",
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-F1INYfbVbuItU+haAmKD4slfzCEglpC7GqIV/cU0oEw=",
81
+ "hash": "sha256-841Z8gRUoJjzLhSNKqWJf7uAf3mftl5gTaSXmtafFdI=",
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-vNc3xxIK/8spAKK8PmqcgHnFrXO/i2QWu1rC8MjdHgY=",
89
+ "hash": "sha256-m19Ex/iUFkKEfN82ioo9gB90TJKEIMs77mCnyk6oVoM=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -106,7 +106,7 @@
106
106
  "url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
107
107
  },
108
108
  {
109
- "hash": "sha256-iqbrsttHQqhuGvTIj1yVbjF79M218kbqXCZ3R1iyg/Y=",
109
+ "hash": "sha256-jI85N38y4L0tbjmhtbJ4zGwVRI90TCa570Z8h1yA6i0=",
110
110
  "url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
111
111
  },
112
112
  {
@@ -114,7 +114,7 @@
114
114
  "url": "_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js"
115
115
  },
116
116
  {
117
- "hash": "sha256-PzCyPbFR/WA4fkMLgladZPjcf5UoNR+APa6cSvkxa84=",
117
+ "hash": "sha256-NsBzTMi5Oqtq1uvHtKW4z5pfbx0ED8GRYeLLDeQzRPY=",
118
118
  "url": "_content/MindExecution.Shared/js/mind-map-lod-renderer.js"
119
119
  },
120
120
  {
@@ -154,7 +154,7 @@
154
154
  "url": "_content/MindExecution.Shared/js/mind-map-text-lod-system.js"
155
155
  },
156
156
  {
157
- "hash": "sha256-+6Qe/8m04tQbsF7EQVM/v93sHAh6rjjN1btiNOe9EnQ=",
157
+ "hash": "sha256-sZTTl62peGAqDd9+m/YczR9wkdC+HObxfPq019dwLDA=",
158
158
  "url": "_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js"
159
159
  },
160
160
  {
@@ -442,8 +442,8 @@
442
442
  "url": "_framework/MindExecution.Plugins.YouTube.5m53srfud6.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-93zoKe74n9ZSDo3yiXxg1tAOzOaCbuapATS84OHGoNU=",
446
- "url": "_framework/MindExecution.Shared.74msadwmew.dll"
445
+ "hash": "sha256-FC0pE2bsyE9i7GNSXCghKULaYYZXUEdepb2VxPfcYaA=",
446
+ "url": "_framework/MindExecution.Shared.ojp3psugsm.dll"
447
447
  },
448
448
  {
449
449
  "hash": "sha256-ECPSyJrziGEVhCw8ZUXkRsfTDjWCk676m5yz99b13N4=",
@@ -770,7 +770,7 @@
770
770
  "url": "_framework/Websocket.Client.vapounvmnl.dll"
771
771
  },
772
772
  {
773
- "hash": "sha256-nQRvRaM/ZyOgFFU3k4VFcn5RCxxhN4uAIHf5Y+jHaLI=",
773
+ "hash": "sha256-Flu3r26LvbLO2wUcZVQG1lKL/SCiMrzqzajuoIajSks=",
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-ZabWv7pPxmz7GAn1Da2AWSY8HrUnVVLo9oSmmHDOG2c=",
837
+ "hash": "sha256-zkcWFHtOVt22wq6yvcr4IlAWMRtnMjU2eaPZfUuXqX8=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: dFWDosxV */
1
+ /* Manifest version: /p0QLLkC */
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