@mindexec/cli 0.2.295 → 0.2.297

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.295",
3
+ "version": "0.2.297",
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-css3d-scene-stable-v752';
8
+ const MINDMAP_CORE_BUILD_ID = '20260620-ua-resident-schema-noop-v755';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -2526,7 +2526,7 @@
2526
2526
  }
2527
2527
  });
2528
2528
 
2529
- module.lodRenderer?.requestResidentPatch?.('resident-schema-change');
2529
+ module.lodRenderer?.requestResidentSchemaSync?.('render-debug-flags');
2530
2530
 
2531
2531
  if ((!flags.enableCss3dWillChange || !flags.enableCss3d) && window.MindMapCss3DManager?.setWillChange) {
2532
2532
  window.MindMapCss3DManager.setWillChange(false, module);
@@ -10147,13 +10147,14 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
10147
10147
  ctx.fillStyle = '#f8fafc';
10148
10148
  ctx.fillRect(0, 0, width, height);
10149
10149
 
10150
+ const targetAspect = width / height;
10151
+ const sourceAspect = sourceWidth / sourceHeight;
10152
+ let sx = 0;
10153
+ let sy = 0;
10154
+ let sw = sourceWidth;
10155
+ let sh = sourceHeight;
10156
+
10150
10157
  try {
10151
- const targetAspect = width / height;
10152
- const sourceAspect = sourceWidth / sourceHeight;
10153
- let sx = 0;
10154
- let sy = 0;
10155
- let sw = sourceWidth;
10156
- let sh = sourceHeight;
10157
10158
  if (sourceAspect > targetAspect) {
10158
10159
  sw = sourceHeight * targetAspect;
10159
10160
  sx = (sourceWidth - sw) / 2;
@@ -51,7 +51,7 @@
51
51
  // ▲▲▲ [Usage] ▲▲▲
52
52
 
53
53
  // Procedural line rendering settings
54
- const LOD_RENDERER_BUILD_ID = '20260620-css3d-scene-stable-v752';
54
+ const LOD_RENDERER_BUILD_ID = '20260620-ua-resident-schema-noop-v755';
55
55
  const DirtyKind = Object.freeze({
56
56
  ResidentFullRebuild: 'resident-full-rebuild',
57
57
  ResidentPatch: 'resident-patch',
@@ -974,6 +974,7 @@
974
974
  this._residentBuilt = false;
975
975
  this._residentFullBuildCount = 0;
976
976
  this._lastResidentFullBuildReason = '';
977
+ this._lastAppliedResidentSchemaSignature = '';
977
978
  this._lastBlockedResidentRebuildReason = '';
978
979
  this._lastBlockedResidentRebuildAt = 0;
979
980
  this._postLoadVisualSyncPending = false;
@@ -2579,6 +2580,7 @@
2579
2580
 
2580
2581
  let eligibleCount = 0;
2581
2582
  let visibleCssCount = 0;
2583
+ let pendingCssCount = 0;
2582
2584
  let pendingImageCssCount = 0;
2583
2585
  for (const nodeId of visibleIds) {
2584
2586
  const entry = nodeObjectsById.get(nodeId);
@@ -2592,6 +2594,7 @@
2592
2594
  element &&
2593
2595
  element.style.display !== 'none';
2594
2596
  if (!cssVisible) {
2597
+ pendingCssCount++;
2595
2598
  if (getNodeContentType(entry.model) === 'image') {
2596
2599
  pendingImageCssCount++;
2597
2600
  }
@@ -2619,14 +2622,23 @@
2619
2622
  this._css3dQueuedMap.size === 0 &&
2620
2623
  this._css3dProcessing !== true &&
2621
2624
  this._nearEntryBoostFrames <= 0;
2625
+ const hasPendingCss = pendingCssCount > 0;
2622
2626
  const timedOut = performance.now() >= this._fullResHandoffUntil;
2623
2627
  const hasPendingImageCss = pendingImageCssCount > 0;
2628
+ const coverageReady = coverage >= this._fullResHandoffMinCoverage && !hasPendingImageCss;
2629
+ const idleReady = queueIdle && !hasPendingCss && !hasPendingImageCss;
2624
2630
 
2625
- if ((coverage >= this._fullResHandoffMinCoverage && !hasPendingImageCss) ||
2626
- (queueIdle && !hasPendingImageCss) ||
2627
- timedOut) {
2628
- this._finishFullResHandoff(queueIdle ? 'queue-idle' : timedOut ? 'timeout' : 'coverage');
2631
+ if (coverageReady || idleReady) {
2632
+ this._finishFullResHandoff(idleReady ? 'queue-idle-all-css-visible' : 'coverage');
2629
2633
  } else {
2634
+ if (timedOut && hasPendingCss) {
2635
+ this._fullResHandoffUntil = Math.max(
2636
+ Number(this._fullResHandoffUntil || 0),
2637
+ performance.now() + this._fullResPanHandoffMaxMs
2638
+ );
2639
+ this._nearEntryBoostFrames = Math.max(Number(this._nearEntryBoostFrames || 0), 8);
2640
+ this._lastNearCssNoWorkKey = '';
2641
+ }
2630
2642
  this._setFullResHandoffMeshesVisible(true);
2631
2643
  }
2632
2644
  }
@@ -3061,6 +3073,7 @@
3061
3073
  this._residentBuildPhase = 'ready';
3062
3074
  this._residentFullBuildCount = Number(this._residentFullBuildCount || 0) + 1;
3063
3075
  this._lastResidentFullBuildReason = String(reason || 'unknown');
3076
+ this._lastAppliedResidentSchemaSignature = this._buildResidentSchemaSignature(this._module);
3064
3077
  emitMindCanvasTrace('lod.fullBuild', this._module, {
3065
3078
  reason: this._lastResidentFullBuildReason,
3066
3079
  count: Number(this._residentFullBuildCount || 0),
@@ -3101,6 +3114,67 @@
3101
3114
  }
3102
3115
  }
3103
3116
 
3117
+ _buildResidentSchemaSignature(module = this._module) {
3118
+ const flags = module?.renderDebugFlags || {};
3119
+ return [
3120
+ LOD_RENDERER_BUILD_ID,
3121
+ isCss3dRendererEnabled(module) ? 'css3d:on' : 'css3d:off',
3122
+ flags.enableCssImageLodFallback === true ? 'css-image-fallback:on' : 'css-image-fallback:off'
3123
+ ].join('|');
3124
+ }
3125
+
3126
+ _tryApplyResidentSchemaSyncNoop(reason = 'resident-schema-change') {
3127
+ const lodBand = this._currentLodBand || this._getActiveLodBand?.() || null;
3128
+ const nextSignature = this._buildResidentSchemaSignature(this._module);
3129
+ const canSkip =
3130
+ FORCE_RESIDENT_INSTANCES_IN_MID_FAR === true &&
3131
+ this._residentBuilt === true &&
3132
+ this._hasResidentLodInstances() === true &&
3133
+ this._instancesDirty !== true &&
3134
+ this._isNodeArrayDirty !== true &&
3135
+ this._lastAppliedResidentSchemaSignature === nextSignature;
3136
+
3137
+ if (!canSkip) {
3138
+ return false;
3139
+ }
3140
+
3141
+ this._syncInstancedImageMeshVisibility();
3142
+ this._markCss3dSyncNeeded(false);
3143
+ this._lastAppliedResidentSchemaSignature = nextSignature;
3144
+ if (this._module) {
3145
+ this._module._forceUpdateFrames = Math.max(Number(this._module._forceUpdateFrames || 0), 1);
3146
+ }
3147
+ emitMindCanvasTrace('patch.applied', this._module, {
3148
+ kind: DirtyKind.ResidentPatch,
3149
+ reason: String(reason || 'resident-schema-change'),
3150
+ normalizedReason: 'resident-schema-change',
3151
+ mode: 'resident-schema-noop',
3152
+ lodBand,
3153
+ schemaSignature: nextSignature
3154
+ });
3155
+ return true;
3156
+ }
3157
+
3158
+ requestResidentSchemaSync(reason = 'resident-schema-change') {
3159
+ const requestReason = String(reason || 'resident-schema-change');
3160
+ if (this._tryApplyResidentSchemaSyncNoop(requestReason)) {
3161
+ return true;
3162
+ }
3163
+
3164
+ this._setInstancesDirty('resident-schema-change');
3165
+ this._markLodResyncNeeded(false);
3166
+ if (this._module) {
3167
+ this._module._forceUpdateFrames = Math.max(Number(this._module._forceUpdateFrames || 0), 2);
3168
+ }
3169
+ emitMindCanvasTrace('lod.patch.request', this._module, {
3170
+ reason: requestReason,
3171
+ normalizedReason: 'resident-schema-change',
3172
+ mode: 'resident-schema-sync',
3173
+ lodBand: this._currentLodBand || null
3174
+ });
3175
+ return true;
3176
+ }
3177
+
3104
3178
  _hasPendingLineDetailRestore(lodBand = this._currentLodBand) {
3105
3179
  return ENABLE_INSTANCED_TEXT_LINES === true &&
3106
3180
  this._lineDetailsPatchPending === true &&
@@ -9339,6 +9413,7 @@
9339
9413
  this._residentBuilt = false;
9340
9414
  this._residentFullBuildCount = 0;
9341
9415
  this._lastResidentFullBuildReason = '';
9416
+ this._lastAppliedResidentSchemaSignature = '';
9342
9417
  this._lastBlockedResidentRebuildReason = '';
9343
9418
  this._lastBlockedResidentRebuildAt = 0;
9344
9419
  this._nearPriorityBuffer = [];
@@ -9632,6 +9707,10 @@
9632
9707
 
9633
9708
  requestResidentPatch(reason = 'resident-patch', nodeIds = null) {
9634
9709
  const normalizedReason = String(reason || 'resident-patch');
9710
+ if (normalizedReason === 'resident-schema-change') {
9711
+ return this.requestResidentSchemaSync(normalizedReason);
9712
+ }
9713
+
9635
9714
  if ((normalizedReason === 'add-node' || normalizedReason === 'remove-node' || normalizedReason === 'update-node') &&
9636
9715
  this._tryApplyResidentStructureDelta(normalizedReason, nodeIds)) {
9637
9716
  return true;
@@ -32,8 +32,8 @@
32
32
 
33
33
  function CSS3DRenderer(){
34
34
  var _width, _height; var _widthHalf, _heightHalf; var cache = { camera:{ fov:0, style:'', mode:'matrix3d' }, objects: new WeakMap() };
35
- var domElement = document.createElement('div'); domElement.style.overflow = 'hidden'; domElement.style.contain = 'strict'; domElement.style.willChange = 'transform'; domElement.style.webkitTransition = domElement.style.transition = 'none'; domElement.style.webkitBackfaceVisibility = domElement.style.backfaceVisibility = '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'; cameraElement.style.contain = 'layout style paint'; cameraElement.style.willChange = 'transform'; cameraElement.style.webkitTransition = cameraElement.style.transition = 'none'; cameraElement.style.webkitBackfaceVisibility = cameraElement.style.backfaceVisibility = 'hidden'; domElement.appendChild(cameraElement);
35
+ var domElement = document.createElement('div'); domElement.style.overflow = 'hidden'; domElement.style.contain = 'layout style'; domElement.style.willChange = 'transform'; domElement.style.webkitTransition = domElement.style.transition = 'none'; domElement.style.webkitBackfaceVisibility = domElement.style.backfaceVisibility = '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'; cameraElement.style.contain = 'layout style'; cameraElement.style.willChange = 'transform'; cameraElement.style.webkitTransition = cameraElement.style.transition = 'none'; cameraElement.style.webkitBackfaceVisibility = cameraElement.style.backfaceVisibility = 'hidden'; domElement.appendChild(cameraElement);
37
37
 
38
38
  this.getSize = function(){ return { width:_width, height:_height }; };
39
39
  this.getCameraElement = function(){ return cameraElement; };
@@ -60,7 +60,10 @@
60
60
  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;
61
61
  var scale = (projectionScale * _heightHalf) / cameraZ;
62
62
  var translateX = _widthHalf - cameraX * scale;
63
- var translateY = _heightHalf + cameraY * scale;
63
+ // Match the settled matrix3d renderer's inverted CSS3D Y basis. Without
64
+ // the viewport-height projection correction, flat pan frames render one
65
+ // scaled viewport lower and jump when motion settles.
66
+ var translateY = _heightHalf + cameraY * scale - (_height * scale);
64
67
  var translateBucket = Math.max(0.001, Number(options && options.translateBucketPx || 0.25));
65
68
  var scaleBucket = Math.max(0.000001, Number(options && options.scaleBucket || 0.0005));
66
69
  var tx = Math.round(translateX / translateBucket) * translateBucket;
@@ -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-scene-stable-v752" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-css3d-scene-stable-v752" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-ua-resident-schema-noop-v755" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-ua-resident-schema-noop-v755" />
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-scene-stable-v752';
582
+ const scriptVersion = '20260620-ua-resident-schema-noop-v755';
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": "iUEMICH0",
2
+ "version": "YH25K8sb",
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-NCe7IQxIcitYL7CRq7Aa7A9CSCFsDxUy8SZSoJm+aPo=",
81
+ "hash": "sha256-nLoLyFnrQWw0WNrmyJYptH4WuiklwW9teJaA5OTkMHQ=",
82
82
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
83
83
  },
84
84
  {
@@ -114,7 +114,7 @@
114
114
  "url": "_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js"
115
115
  },
116
116
  {
117
- "hash": "sha256-W2y0s/EzYYraueITXUNNzJxXfzpp9L7kuwT4ml7XzN8=",
117
+ "hash": "sha256-M7N27m0+FOdOLRnYz1TG80HZArq4myZjBcTXBQ8awV0=",
118
118
  "url": "_content/MindExecution.Shared/js/mind-map-lod-renderer.js"
119
119
  },
120
120
  {
@@ -182,7 +182,7 @@
182
182
  "url": "_content/MindExecution.Shared/js/plan-master.js"
183
183
  },
184
184
  {
185
- "hash": "sha256-uNsEEhPWF3LWiI7eGK5Fft6Rw/XSu+PrxGcu5ZcK1MA=",
185
+ "hash": "sha256-QCdyQOre0GrA61w+YanZp5DbOJr/dlg7rCLE9f/hAqM=",
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-vGprwakLUDuo6HPZbyxWRw7W4ey7WW87CydvCLezwdI=",
837
+ "hash": "sha256-fMClm7fwJVb8a6qwDJy0W2Yz2LFw6C1nkl0dZWgNEoA=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: iUEMICH0 */
1
+ /* Manifest version: YH25K8sb */
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