@mindexec/cli 0.2.104 → 0.2.106

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.104",
3
+ "version": "0.2.106",
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 = '20260613-remote-monitor-gap-v214';
8
+ const MINDMAP_CORE_BUILD_ID = '20260616-live-csv-overlay-v566';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -5037,6 +5037,9 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5037
5037
  const shouldRenderPassiveDomTextOverlay =
5038
5038
  useTextOverlayV2 &&
5039
5039
  window.MindMapTextOverlayV2?.shouldRenderPassiveDomOverlays?.(this) === true;
5040
+ const hasLiveInteractiveDomOverlay =
5041
+ useTextOverlayV2 &&
5042
+ window.MindMapTextOverlayV2?.hasLiveInteractiveOverlay?.(this) === true;
5040
5043
  const overlayV2State = useTextOverlayV2 ? (this._textOverlayV2State || null) : null;
5041
5044
  const hasOverlayV2DirtyState = !!(
5042
5045
  overlayV2State && (
@@ -5097,7 +5100,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5097
5100
  this.isDraggingMultipleNodes === true ||
5098
5101
  isCameraMoving ||
5099
5102
  this.isResizing === true) &&
5100
- !isInLodMode &&
5103
+ (!isInLodMode || hasLiveInteractiveDomOverlay) &&
5101
5104
  !hasEditingOverlay &&
5102
5105
  !this.isWindowResizing;
5103
5106
  if ((this._suppressPassiveDomOverlayDuringZoom === true) !== shouldSuppressPassiveOverlayDuringCameraMotion) {
@@ -5149,7 +5152,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5149
5152
  const shouldRefreshPassiveDomTextOverlay =
5150
5153
  shouldRenderPassiveDomTextOverlay &&
5151
5154
  !isPassiveOverlaySuppressed &&
5152
- !isInLodMode &&
5155
+ (!isInLodMode || hasLiveInteractiveDomOverlay) &&
5153
5156
  shouldUpdateCss3d &&
5154
5157
  !shouldUsePassiveOverlayCameraFastPath;
5155
5158
  const shouldUsePassiveOverlayMotionHint =
@@ -5349,7 +5352,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5349
5352
  shouldFallbackToFullPassiveOverlayRefresh &&
5350
5353
  shouldRenderPassiveDomTextOverlay &&
5351
5354
  !hasOverlayFocus &&
5352
- !isInLodMode &&
5355
+ (!isInLodMode || hasLiveInteractiveDomOverlay) &&
5353
5356
  (isInteractiveFrame || this.isPanning === true || this.isZooming === true || visibleOverlayCount > 80);
5354
5357
  if (useTextOverlayV2 && isPassiveOverlaySuppressed) {
5355
5358
  this._usedPassiveOverlayCameraFastPathLastFrame = false;
@@ -5367,7 +5370,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5367
5370
  // full overlay layout update instead of waiting for the
5368
5371
  // next deferred refresh window.
5369
5372
  window.MindMapTextOverlayV2.updateFrame(this);
5370
- if (shouldRenderPassiveDomTextOverlay && !hasOverlayFocus && !isInLodMode) {
5373
+ if (shouldRenderPassiveDomTextOverlay && !hasOverlayFocus && (!isInLodMode || hasLiveInteractiveDomOverlay)) {
5371
5374
  this._lastPassiveOverlayFullRefreshAt = frameStart;
5372
5375
  this._overlayDebugRefreshAgeMs = 0;
5373
5376
  this._overlayDebugRefreshDeferred = false;
@@ -3898,7 +3898,7 @@
3898
3898
  const NEUTRAL_SELECTION_GLOW_RGB_SOFT = '191, 219, 254';
3899
3899
  const CSS3D_WRAPPER_TRANSITION = 'box-shadow .22s ease, filter .22s ease';
3900
3900
  const CSS3D_WRAPPER_WEBKIT_TRANSITION = '-webkit-box-shadow .22s ease, -webkit-filter .22s ease';
3901
- const TEXT_OVERLAY_SUPPORTED_TYPES = new Set(['text', 'markdown', 'note', 'code', 'memo']);
3901
+ const TEXT_OVERLAY_SUPPORTED_TYPES = new Set(['text', 'markdown', 'note', 'code', 'memo', CSV_TABLE_CONTENT_TYPE, 'templatelauncher']);
3902
3902
  const TEXT_SELECTION_OVERLAY_SUPPORTED_TYPES = new Set(['text', 'markdown']);
3903
3903
  const TEXT_INTERACTION_SCROLLABLE_SELECTORS = '.node-response, .note-content, .markdown-body, .prose, .note-textarea, .code-body, .code-content, .csv-table-scroll, .csv-table-scroll *, .pdf-content, .text-content, .file-content, .map-node-memo__body, .map-node-memo__body-view, .map-node-memo__agent-plan-body, .map-node-memo__agent-console-body, pre, code';
3904
3904
  const TEXT_INTERACTION_CONTENT_SELECTORS = '.node-response, .code-body, .text-content, .markdown-body, .prose, .csv-table-scroll, .csv-table-cell';
@@ -4006,6 +4006,16 @@
4006
4006
  || semanticType === REMOTE_FLEET_DEVICE_SEMANTIC_TYPE;
4007
4007
  }
4008
4008
 
4009
+ function isTemplateLauncherNode(nodeModel) {
4010
+ const contentType = String(nodeModel?.contentType ?? nodeModel?.ContentType ?? '').trim().toLowerCase();
4011
+ return contentType === 'templatelauncher' || isRemoteFleetMonitorNode(nodeModel);
4012
+ }
4013
+
4014
+ function isLiveOverlayPortalNode(nodeModel) {
4015
+ const contentType = String(nodeModel?.contentType ?? nodeModel?.ContentType ?? '').trim().toLowerCase();
4016
+ return contentType === CSV_TABLE_CONTENT_TYPE || isTemplateLauncherNode(nodeModel);
4017
+ }
4018
+
4009
4019
  function isBusinessAutomationContextSourceNode(nodeModel) {
4010
4020
  if (!nodeModel || isBusinessAutomationNode(nodeModel) || isRemoteFleetNode(nodeModel)) {
4011
4021
  return false;
@@ -4076,6 +4086,10 @@
4076
4086
  return 'none';
4077
4087
  }
4078
4088
 
4089
+ if (isLiveOverlayPortalNode(nodeEntry?.model)) {
4090
+ return 'live-template';
4091
+ }
4092
+
4079
4093
  if (getTextOverlayRenderMode(nodeEntry) === 'memo') {
4080
4094
  // Memo cards rely on the canonical CSS3D shell for their rounded
4081
4095
  // body surface and selection glow. Passive readonly overlays only
@@ -13,6 +13,9 @@
13
13
  const PASSIVE_OVERLAY_OVERLAP_MIN_PX = 2;
14
14
  const PASSIVE_OVERLAY_OVERLAP_MIN_AREA_PX = 16;
15
15
  const PASSIVE_OVERLAY_STACK_Z_SCALE = 10000;
16
+ const LIVE_TEMPLATE_OVERLAY_MODE = 'live-template';
17
+ const CSV_TABLE_CONTENT_TYPE = 'csv-table';
18
+ const REMOTE_FLEET_SEMANTIC_TYPE = 'RemoteFleetMonitor';
16
19
  const log = DEBUG ? console.log.bind(console, '[MindMapTextOverlayV2]') : () => { };
17
20
  let _projCornerTopLeft = null;
18
21
  let _projCornerTopRight = null;
@@ -79,6 +82,19 @@
79
82
  return String(metadata?.SemanticType || metadata?.semanticType || model?.SemanticType || model?.semanticType || '').trim();
80
83
  }
81
84
 
85
+ function isLiveInteractiveOverlayEntry(entry) {
86
+ const type = getContentType(entry);
87
+ const semanticType = getNodeSemanticType(entry);
88
+ return type === 'templatelauncher'
89
+ || type === CSV_TABLE_CONTENT_TYPE
90
+ || semanticType === REMOTE_FLEET_SEMANTIC_TYPE;
91
+ }
92
+
93
+ function isLiveInteractiveOverlayMode(mode) {
94
+ const normalized = String(mode || '').trim().toLowerCase();
95
+ return normalized === LIVE_TEMPLATE_OVERLAY_MODE || normalized === 'live';
96
+ }
97
+
82
98
  function isAgentStyledMemoEntry(entry) {
83
99
  const semanticType = getNodeSemanticType(entry);
84
100
  return semanticType === 'MindCanvasAgent'
@@ -172,6 +188,44 @@
172
188
  return module?.useDomTextOverlay === true;
173
189
  }
174
190
 
191
+ function hasVisibleLiveInteractiveOverlayCandidate(module) {
192
+ const visibleIds = module?._visibleIds || module?._prevVisibleIds || null;
193
+ if (visibleIds?.forEach) {
194
+ let found = false;
195
+ visibleIds.forEach(nodeId => {
196
+ if (found) {
197
+ return;
198
+ }
199
+
200
+ const entry = module?.nodeObjectsById?.get?.(normalizeId(nodeId)) || null;
201
+ if (!entry || entry.currentType !== 'CSS' || entry.cssObject?.visible !== true) {
202
+ return;
203
+ }
204
+
205
+ if (isLiveInteractiveOverlayEntry(entry) && supportsPassiveDisplay(entry)) {
206
+ found = true;
207
+ }
208
+ });
209
+
210
+ if (found) {
211
+ return true;
212
+ }
213
+ }
214
+
215
+ const selectedId = normalizeId(module?.selectedNodeIdJs);
216
+ if (selectedId) {
217
+ const selectedEntry = module?.nodeObjectsById?.get?.(selectedId) || null;
218
+ if (selectedEntry?.currentType === 'CSS' &&
219
+ selectedEntry.cssObject?.visible === true &&
220
+ isLiveInteractiveOverlayEntry(selectedEntry) &&
221
+ supportsPassiveDisplay(selectedEntry)) {
222
+ return true;
223
+ }
224
+ }
225
+
226
+ return false;
227
+ }
228
+
175
229
  function getCurrentLodBand(module) {
176
230
  const explicitBand = String(module?.lodRenderer?._currentLodBand || '').trim().toUpperCase();
177
231
  if (explicitBand) {
@@ -248,7 +302,7 @@
248
302
  state.passiveNearStickyUntil = 0;
249
303
  }
250
304
 
251
- return false;
305
+ return hasVisibleLiveInteractiveOverlayCandidate(module);
252
306
  }
253
307
 
254
308
  function shouldUseVisiblePassiveOverlayCandidates(module) {
@@ -1097,7 +1151,8 @@
1097
1151
  }
1098
1152
 
1099
1153
  function createReadonlyLiveSourcePortal(entry, card, options = {}) {
1100
- if (!entry || !card || options.interactive === true) {
1154
+ const liveInteractive = options.liveInteractive === true || isLiveInteractiveOverlayEntry(entry);
1155
+ if (!entry || !card || (options.interactive === true && liveInteractive !== true)) {
1101
1156
  return null;
1102
1157
  }
1103
1158
 
@@ -1108,10 +1163,15 @@
1108
1163
  }
1109
1164
 
1110
1165
  existingPortal.cardElement = card;
1166
+ existingPortal.liveInteractive = liveInteractive;
1167
+ existingPortal.sourceElement.style.pointerEvents = liveInteractive ? 'auto' : 'none';
1168
+ existingPortal.sourceElement.style.userSelect = liveInteractive ? '' : 'none';
1169
+ existingPortal.sourceElement.style.webkitUserSelect = liveInteractive ? '' : 'none';
1111
1170
  return {
1112
1171
  container: existingPortal.sourceElement,
1113
1172
  sourceRoot: existingPortal.sourceElement,
1114
- liveSource: true
1173
+ liveSource: true,
1174
+ liveInteractive: liveInteractive
1115
1175
  };
1116
1176
  }
1117
1177
 
@@ -1138,19 +1198,21 @@
1138
1198
  zoom: sourceElement.style.zoom,
1139
1199
  pointerEvents: sourceElement.style.pointerEvents,
1140
1200
  userSelect: sourceElement.style.userSelect,
1141
- webkitUserSelect: sourceElement.style.webkitUserSelect
1201
+ webkitUserSelect: sourceElement.style.webkitUserSelect,
1202
+ liveInteractive: liveInteractive
1142
1203
  };
1143
1204
 
1144
1205
  sourceElement.classList.add('mind-map-text-overlay-v2-live-source');
1145
- sourceElement.style.pointerEvents = 'none';
1146
- sourceElement.style.userSelect = 'none';
1147
- sourceElement.style.webkitUserSelect = 'none';
1206
+ sourceElement.style.pointerEvents = liveInteractive ? 'auto' : 'none';
1207
+ sourceElement.style.userSelect = liveInteractive ? '' : 'none';
1208
+ sourceElement.style.webkitUserSelect = liveInteractive ? '' : 'none';
1148
1209
  card.appendChild(sourceElement);
1149
1210
 
1150
1211
  return {
1151
1212
  container: sourceElement,
1152
1213
  sourceRoot: sourceElement,
1153
- liveSource: true
1214
+ liveSource: true,
1215
+ liveInteractive: liveInteractive
1154
1216
  };
1155
1217
  }
1156
1218
 
@@ -2351,6 +2413,28 @@
2351
2413
  target.addEventListener('mousedown', handler, { passive: false });
2352
2414
  }
2353
2415
 
2416
+ function isLiveOverlayControlTarget(target) {
2417
+ return !!target?.closest?.([
2418
+ 'button',
2419
+ 'input',
2420
+ 'textarea',
2421
+ 'select',
2422
+ '[contenteditable="true"]',
2423
+ '[data-template-card-interactive="true"]',
2424
+ '[data-template-card-action]',
2425
+ '[data-template-option-id]',
2426
+ '[data-remote-fleet-action]',
2427
+ '[data-remote-fleet-device-preview]',
2428
+ '[data-remote-fleet-control-popup]',
2429
+ '[data-remote-fleet-task-input]',
2430
+ '[data-remote-fleet-ai-toggle]',
2431
+ '[data-remote-fleet-search]',
2432
+ '.csv-table-scroll',
2433
+ '.csv-table-header-button',
2434
+ '.csv-table-cell'
2435
+ ].join(', '));
2436
+ }
2437
+
2354
2438
  function bindReadonlyOverlayPrimaryPointerRouting(module, root, sourceRoot) {
2355
2439
  if (!module || !root || typeof root.addEventListener !== 'function') {
2356
2440
  return;
@@ -2373,6 +2457,10 @@
2373
2457
  return;
2374
2458
  }
2375
2459
 
2460
+ if (isLiveOverlayControlTarget(event.target)) {
2461
+ return;
2462
+ }
2463
+
2376
2464
  const nodeId =
2377
2465
  normalizeId(root.dataset.nodeId) ||
2378
2466
  normalizeId(root._mindMapReadonlyOverlaySourceRoot?.dataset?.nodeId) ||
@@ -2894,6 +2982,13 @@
2894
2982
 
2895
2983
  function createReadonlySelectionShell(module, entry, options = {}) {
2896
2984
  const mode = getReadonlySelectionMode(entry);
2985
+ if (isLiveInteractiveOverlayMode(mode)) {
2986
+ return createReadonlyLiveSourcePortal(entry, options.cardElement, {
2987
+ ...options,
2988
+ liveInteractive: true
2989
+ });
2990
+ }
2991
+
2897
2992
  if (mode === 'agent-memo') {
2898
2993
  // Agent memo nodes must mirror the CSS3D source as-is. Their
2899
2994
  // auxiliary plan/console panels live outside the simplified memo
@@ -3294,7 +3389,11 @@
3294
3389
  card.dataset.sourceEpoch === sourceEpoch &&
3295
3390
  card.childElementCount > 0) {
3296
3391
  setCardMode(card, 'selection', interactive);
3297
- if (card.dataset.sourceKind !== 'live') {
3392
+ const liveInteractive = card.dataset.liveInteractive === 'true';
3393
+ if (liveInteractive) {
3394
+ card.style.pointerEvents = 'auto';
3395
+ bindReadonlyOverlayPrimaryPointerRouting(module, card, sourceRoot);
3396
+ } else if (card.dataset.sourceKind !== 'live') {
3298
3397
  bindReadonlyOverlayPrimaryPointerRouting(module, card, sourceRoot);
3299
3398
  refreshOverlayCloneInteractivity(module, card.firstElementChild || card, interactive, sourceRoot);
3300
3399
  syncReadonlyOverlayCardScrollFromSource(card);
@@ -3326,9 +3425,15 @@
3326
3425
  return null;
3327
3426
  }
3328
3427
 
3428
+ const liveInteractive = shellResult?.liveInteractive === true;
3329
3429
  card.dataset.sourceKind = shellResult?.liveSource === true ? 'live' : 'clone';
3430
+ card.dataset.liveInteractive = liveInteractive ? 'true' : 'false';
3431
+ card.classList.toggle('is-live-interactive', liveInteractive);
3330
3432
  card.appendChild(shell);
3331
- if (card.dataset.sourceKind !== 'live') {
3433
+ if (liveInteractive) {
3434
+ card.style.pointerEvents = 'auto';
3435
+ bindReadonlyOverlayPrimaryPointerRouting(module, card, shellSourceRoot);
3436
+ } else if (card.dataset.sourceKind !== 'live') {
3332
3437
  bindReadonlyOverlayPrimaryPointerRouting(module, card, shellSourceRoot);
3333
3438
  syncReadonlyOverlayCardScrollFromSource(card);
3334
3439
  scheduleReadonlyOverlayCardScrollSync(card);
@@ -3698,6 +3803,29 @@
3698
3803
  }
3699
3804
  }
3700
3805
 
3806
+ function hasLiveInteractiveOverlay(module) {
3807
+ const state = ensureState(module);
3808
+ if (state?.cards?.forEach) {
3809
+ let hasVisibleLiveCard = false;
3810
+ state.cards.forEach(card => {
3811
+ if (hasVisibleLiveCard || !card || card.style.display === 'none') {
3812
+ return;
3813
+ }
3814
+
3815
+ if (card.dataset?.sourceKind === 'live' &&
3816
+ card.dataset?.liveInteractive === 'true') {
3817
+ hasVisibleLiveCard = true;
3818
+ }
3819
+ });
3820
+
3821
+ if (hasVisibleLiveCard) {
3822
+ return true;
3823
+ }
3824
+ }
3825
+
3826
+ return hasVisibleLiveInteractiveOverlayCandidate(module);
3827
+ }
3828
+
3701
3829
  function setPassiveOverlaySuppressed(module, suppressed) {
3702
3830
  const state = ensureState(module);
3703
3831
  const layer = state?.layer;
@@ -3735,11 +3863,16 @@
3735
3863
  });
3736
3864
  clearLayerTransform(layer);
3737
3865
  layer.style.display = 'none';
3866
+ state.dirtyLayout = true;
3867
+ module._overlayDirty = true;
3868
+ module._lastOverlayKey = '';
3738
3869
  return true;
3739
3870
  }
3740
3871
 
3741
- layer.style.display = Array.from(state.cards.values()).some(card =>
3742
- !!card && card.style.display !== 'none') ? '' : 'none';
3872
+ state.dirtyLayout = true;
3873
+ module._overlayDirty = true;
3874
+ module._lastOverlayKey = '';
3875
+ layer.style.display = 'none';
3743
3876
  return true;
3744
3877
  }
3745
3878
 
@@ -4318,6 +4451,7 @@
4318
4451
  purgeMediaOverlayCards: purgeMediaOverlayCards,
4319
4452
  suspendSource: suspendSource,
4320
4453
  resumeSource: resumeSource,
4454
+ hasLiveInteractiveOverlay: hasLiveInteractiveOverlay,
4321
4455
  syncReadonlySourceScroll: syncReadonlySourceScroll
4322
4456
  };
4323
4457
  })();
@@ -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=20260616-csv-import-scroll-v564" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-csv-import-scroll-v564" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260616-live-csv-overlay-v566" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-live-csv-overlay-v566" />
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 = '20260616-csv-import-scroll-v564';
582
+ const scriptVersion = '20260616-live-csv-overlay-v566';
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": "dcqbmuSQ",
2
+ "version": "4Z/beLB1",
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-zhbWABqHMZ+nPWlMMRuTFz6AfkMn5aOwZ9u63V1oW68=",
81
+ "hash": "sha256-7liM89dPcSTRsRDjW34NcN4nympUF2BXewfpgyA6P0c=",
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-argv1cbei7H0a1mJ744ULYCoG8vmNo2LOIjjqeVe+v8=",
89
+ "hash": "sha256-/afOejfgIcOoUzPkYMaApwHu/giAM6sAskPi5O2HaiQ=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -154,7 +154,7 @@
154
154
  "url": "_content/MindExecution.Shared/js/mind-map-text-lod-system.js"
155
155
  },
156
156
  {
157
- "hash": "sha256-0gAWq58h1V8S1FBvthDq1MC09ltzbd/ef99MMKhSFzw=",
157
+ "hash": "sha256-dzOqbpcXDlZXQQTB9kDHqnzOVPxUMBrOpf8fnte9kcg=",
158
158
  "url": "_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js"
159
159
  },
160
160
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-6d4BMAFu8S+buYLIfn/YU12rChaOPCkPEswE7eGNQAA=",
837
+ "hash": "sha256-9bEQ4UJDWO+QrReSgUser1zhLacqGTPSLgMZQZxRCyM=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: dcqbmuSQ */
1
+ /* Manifest version: 4Z/beLB1 */
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