@mindexec/cli 0.2.108 → 0.2.110

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.108",
3
+ "version": "0.2.110",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -796,6 +796,9 @@ try {
796
796
  assert.ok(setHostCall);
797
797
  assert.equal(setHostCall.args[0], 'remote-fleet-render-smoke');
798
798
  assert.equal(setHostCall.args[1], true);
799
+ const hostFeedback = bodyView.querySelector('[data-remote-fleet-task-feedback="true"]');
800
+ assert.equal(hostFeedback?.style.display, 'none');
801
+ assert.equal(hostFeedback?.textContent, '');
799
802
 
800
803
  hub.setHostTarget({
801
804
  nodeId: 'remote-fleet-render-smoke',
@@ -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 = '20260616-mdm-simple-monitor-border-v567';
8
+ const MINDMAP_CORE_BUILD_ID = '20260616-project-gallery-rendered-thumb-v569';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -6029,17 +6029,153 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6029
6029
  }
6030
6030
 
6031
6031
  // ▼▼▼ [Changed] Expand camera & cursor state save/restore API ▼▼▼
6032
- getCameraState() {
6033
- if (!this.camera) return { x: 0, y: 0, z: 1200, cursorX: 0, cursorY: 0 };
6034
- return {
6035
- x: this.camera.position.x,
6036
- y: this.camera.position.y,
6037
- z: this.camera.position.z,
6038
- cursorX: this.cursorPosition?.x ?? 0,
6039
- cursorY: this.cursorPosition?.y ?? 0
6040
- };
6041
- }
6042
-
6032
+ getCameraState() {
6033
+ if (!this.camera) return { x: 0, y: 0, z: 1200, cursorX: 0, cursorY: 0 };
6034
+ return {
6035
+ x: this.camera.position.x,
6036
+ y: this.camera.position.y,
6037
+ z: this.camera.position.z,
6038
+ cursorX: this.cursorPosition?.x ?? 0,
6039
+ cursorY: this.cursorPosition?.y ?? 0
6040
+ };
6041
+ }
6042
+
6043
+ async captureProjectThumbnail(options = {}) {
6044
+ const expectedBoardId = String(options?.boardId || '').trim().toLowerCase();
6045
+ const activeBoardId = String(this.getCurrentBoardId?.() || '').trim().toLowerCase();
6046
+ if (expectedBoardId && activeBoardId && expectedBoardId !== activeBoardId) {
6047
+ return null;
6048
+ }
6049
+
6050
+ const sourceCanvas = this.renderer?.domElement || null;
6051
+ if (!sourceCanvas || !this.renderer || !this.scene || !this.camera) {
6052
+ return null;
6053
+ }
6054
+
6055
+ const clamp = (value, min, max, fallback) => {
6056
+ const numeric = Number(value);
6057
+ if (!Number.isFinite(numeric)) return fallback;
6058
+ return Math.max(min, Math.min(max, Math.round(numeric)));
6059
+ };
6060
+ const width = clamp(options?.width, 256, 1024, 512);
6061
+ const height = clamp(options?.height, 144, 768, 288);
6062
+ const quality = Math.max(0.45, Math.min(0.92, Number(options?.quality || 0.72)));
6063
+ const sourceWidth = Math.max(1, Number(sourceCanvas.width || 0));
6064
+ const sourceHeight = Math.max(1, Number(sourceCanvas.height || 0));
6065
+ if (sourceWidth <= 1 || sourceHeight <= 1) {
6066
+ return null;
6067
+ }
6068
+
6069
+ try {
6070
+ this.camera.updateProjectionMatrix?.();
6071
+ this.camera.updateMatrixWorld?.(true);
6072
+ if (typeof this.updateVisibility === 'function') {
6073
+ this.updateVisibility(this.camera);
6074
+ }
6075
+ if (this.lodRenderer?.requestVisualRefresh) {
6076
+ this.lodRenderer.requestVisualRefresh('project-thumbnail-capture');
6077
+ }
6078
+ this.renderer.render(this.scene, this.camera);
6079
+ if (this.cssRenderer && typeof this.cssRenderer.render === 'function') {
6080
+ this.cssRenderer.render(this.cssScene || this.scene, this.camera);
6081
+ }
6082
+ } catch (error) {
6083
+ console.warn('[ProjectThumbnail] render before capture failed:', error);
6084
+ }
6085
+
6086
+ const canvas = document.createElement('canvas');
6087
+ canvas.width = width;
6088
+ canvas.height = height;
6089
+ const ctx = canvas.getContext('2d', { alpha: false });
6090
+ if (!ctx) {
6091
+ return null;
6092
+ }
6093
+
6094
+ ctx.fillStyle = '#f8fafc';
6095
+ ctx.fillRect(0, 0, width, height);
6096
+
6097
+ try {
6098
+ const targetAspect = width / height;
6099
+ const sourceAspect = sourceWidth / sourceHeight;
6100
+ let sx = 0;
6101
+ let sy = 0;
6102
+ let sw = sourceWidth;
6103
+ let sh = sourceHeight;
6104
+ if (sourceAspect > targetAspect) {
6105
+ sw = sourceHeight * targetAspect;
6106
+ sx = (sourceWidth - sw) / 2;
6107
+ } else if (sourceAspect < targetAspect) {
6108
+ sh = sourceWidth / targetAspect;
6109
+ sy = (sourceHeight - sh) / 2;
6110
+ }
6111
+
6112
+ ctx.drawImage(sourceCanvas, sx, sy, sw, sh, 0, 0, width, height);
6113
+ } catch (error) {
6114
+ console.warn('[ProjectThumbnail] drawImage failed:', error);
6115
+ return null;
6116
+ }
6117
+
6118
+ if (options?.minimumVariance !== false) {
6119
+ try {
6120
+ const sample = ctx.getImageData(0, 0, width, height).data;
6121
+ let minR = 255, minG = 255, minB = 255;
6122
+ let maxR = 0, maxG = 0, maxB = 0;
6123
+ const stepX = Math.max(1, Math.floor(width / 48));
6124
+ const stepY = Math.max(1, Math.floor(height / 28));
6125
+ for (let y = 0; y < height; y += stepY) {
6126
+ for (let x = 0; x < width; x += stepX) {
6127
+ const index = ((y * width) + x) * 4;
6128
+ const r = sample[index];
6129
+ const g = sample[index + 1];
6130
+ const b = sample[index + 2];
6131
+ minR = Math.min(minR, r); maxR = Math.max(maxR, r);
6132
+ minG = Math.min(minG, g); maxG = Math.max(maxG, g);
6133
+ minB = Math.min(minB, b); maxB = Math.max(maxB, b);
6134
+ }
6135
+ }
6136
+
6137
+ if ((maxR - minR) + (maxG - minG) + (maxB - minB) < 18) {
6138
+ return null;
6139
+ }
6140
+ } catch (error) {
6141
+ console.warn('[ProjectThumbnail] variance check failed:', error);
6142
+ return null;
6143
+ }
6144
+ }
6145
+
6146
+ try {
6147
+ return await new Promise(resolve => {
6148
+ if (typeof canvas.toBlob !== 'function') {
6149
+ try {
6150
+ resolve(canvas.toDataURL('image/jpeg', quality));
6151
+ } catch {
6152
+ resolve(null);
6153
+ }
6154
+ return;
6155
+ }
6156
+
6157
+ canvas.toBlob(blob => {
6158
+ if (!blob) {
6159
+ try {
6160
+ resolve(canvas.toDataURL('image/jpeg', quality));
6161
+ } catch {
6162
+ resolve(null);
6163
+ }
6164
+ return;
6165
+ }
6166
+
6167
+ const reader = new FileReader();
6168
+ reader.onload = () => resolve(typeof reader.result === 'string' ? reader.result : null);
6169
+ reader.onerror = () => resolve(null);
6170
+ reader.readAsDataURL(blob);
6171
+ }, 'image/jpeg', quality);
6172
+ });
6173
+ } catch (error) {
6174
+ console.warn('[ProjectThumbnail] encode failed:', error);
6175
+ return null;
6176
+ }
6177
+ }
6178
+
6043
6179
  setCameraState(x, y, z, cursorX, cursorY) {
6044
6180
  if (!this.camera) return;
6045
6181
 
@@ -6876,6 +7012,10 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6876
7012
  if (moduleInstance) return moduleInstance.getCameraState();
6877
7013
  return { x: 0, y: 0, z: 1200, cursorX: 0, cursorY: 0 };
6878
7014
  },
7015
+ captureProjectThumbnail: async (options) => {
7016
+ if (moduleInstance) return await moduleInstance.captureProjectThumbnail(options || {});
7017
+ return null;
7018
+ },
6879
7019
  setCameraState: (x, y, z, cx, cy) => {
6880
7020
  if (moduleInstance) moduleInstance.setCameraState(x, y, z, cx, cy);
6881
7021
  },
@@ -13145,45 +13145,11 @@
13145
13145
  };
13146
13146
  }
13147
13147
 
13148
- function getRemoteFleetResultRegistryStatus(result) {
13149
- return String(result?.registryStatus ?? result?.RegistryStatus ?? '').trim().toLowerCase();
13150
- }
13151
-
13152
- function getRemoteFleetResultRegistryReason(result) {
13153
- return String(result?.registryReason ?? result?.RegistryReason ?? result?.error ?? result?.Error ?? '').trim();
13154
- }
13155
-
13156
13148
  function isRemoteFleetRegistryMigrationReason(reason) {
13157
13149
  return /registry-table-unavailable|PGRST20[25]|remote_host_targets|set_remote_host_target|clear_remote_host_target/i
13158
13150
  .test(String(reason || ''));
13159
13151
  }
13160
13152
 
13161
- function getRemoteFleetHostFeedbackText(enabled, result) {
13162
- if (enabled !== true) {
13163
- return 'Host target stopped.';
13164
- }
13165
-
13166
- const status = getRemoteFleetResultRegistryStatus(result);
13167
- const reason = getRemoteFleetResultRegistryReason(result);
13168
- if (status === 'account') {
13169
- return 'Host target set.';
13170
- }
13171
-
13172
- if (status === 'local') {
13173
- return 'Host set locally. Account route pending.';
13174
- }
13175
-
13176
- if (status === 'blocked') {
13177
- if (isRemoteFleetRegistryMigrationReason(reason)) {
13178
- return 'Host set locally. Account route needs setup.';
13179
- }
13180
-
13181
- return 'Host route blocked.';
13182
- }
13183
-
13184
- return 'Host target set.';
13185
- }
13186
-
13187
13153
  function createRemoteFleetButton(label, title, action) {
13188
13154
  const button = document.createElement('button');
13189
13155
  button.type = 'button';
@@ -16777,9 +16743,6 @@
16777
16743
  activeButton.disabled = true;
16778
16744
  }
16779
16745
 
16780
- if (!quiet) {
16781
- setTaskFeedback(enabled ? 'Setting host target...' : 'Stopping host target...');
16782
- }
16783
16746
  try {
16784
16747
  const result = await invokeDotNetAsync('SetRemoteFleetHostFromJs', nodeId, enabled === true, renew === true);
16785
16748
  window.RuntimeTrace?.emit?.('remote.hostTarget.result', {
@@ -16804,7 +16767,7 @@
16804
16767
  stopRemoteFleetHostLeaseTimer(nodeId);
16805
16768
  }
16806
16769
  if (isRemoteFleetResultSuccess(result)) {
16807
- setTaskFeedback(getRemoteFleetHostFeedbackText(enabled, result), 'success');
16770
+ setTaskFeedback('');
16808
16771
  } else {
16809
16772
  setTaskFeedback(result?.error || result?.Error || 'Host target update failed.', 'error');
16810
16773
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-ncmibpfP4OVaoSZXQLmDLiOOSi8GW6wTmwlKPOWGtWk=",
4
+ "hash": "sha256-KaI5eJdtKsysCkYcBQ74Bkhnj9ED5ut7P7GvJQnIHG4=",
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.pbzp3jfync.dll": "MindExecution.Kernel.dll",
128
128
  "MindExecution.Plugins.Admin.gxzwlji1cf.dll": "MindExecution.Plugins.Admin.dll",
129
129
  "MindExecution.Plugins.Business.vtaey8c59y.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.ksc3wkuptm.dll": "MindExecution.Plugins.Concept.dll",
130
+ "MindExecution.Plugins.Concept.y5mxuwyn3t.dll": "MindExecution.Plugins.Concept.dll",
131
131
  "MindExecution.Plugins.Directory.zc8ffaoknd.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.flzcb87jvl.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.q4tvods1po.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.r8pan6upd8.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.3b8az6ed0q.dll": "MindExecution.Web.dll",
132
+ "MindExecution.Plugins.PlanMaster.c1vyy1ch1t.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.hezx1pv0ln.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.ergr5legth.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.wagtdqojjf.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.fc9cjbjplq.dll": "sha256-TymUFwryFLdbCYy2U5qdgE2ZV1yHaLR9bgyrmx6Tcp0=",
282
282
  "MindExecution.Kernel.pbzp3jfync.dll": "sha256-Ff6WHyLD39V0fEjUiQlxX9Y+edssyTH+7T4zfBdj3s0=",
283
- "MindExecution.Plugins.Concept.ksc3wkuptm.dll": "sha256-fIy3+/z7i12WktCVlAHG6hJGVOSgzWJNGXiDrArviYU=",
284
- "MindExecution.Plugins.PlanMaster.flzcb87jvl.dll": "sha256-zYXs1kS13yT6eDgbsthOX4Ku1n3P+TnPn8oIhJVwxQ0=",
285
- "MindExecution.Shared.r8pan6upd8.dll": "sha256-Sw26dtjM8Rd82Nk3uWpkPPjrzCULyX1GwGdX9uJ0zzw=",
286
- "MindExecution.Web.3b8az6ed0q.dll": "sha256-cbwDzpFNXJ2mcIVtZC6fNkvXq4K+q0QTXJ5EGuTKL7w="
283
+ "MindExecution.Plugins.Concept.y5mxuwyn3t.dll": "sha256-dizs0lF0tJkJDEukxB3Uk4aTKRn3Qxk+GNImQgZW5dA=",
284
+ "MindExecution.Plugins.PlanMaster.c1vyy1ch1t.dll": "sha256-YCiJAcBPRcX5seGJumZp4mDeGNR2Wy7QSxgZs840Ds8=",
285
+ "MindExecution.Shared.ergr5legth.dll": "sha256-mgYbk9AgKdxJ4Hn3RFhY3ayofKQ3XFJQkP9gaarLOQQ=",
286
+ "MindExecution.Web.wagtdqojjf.dll": "sha256-OPPhq+KMTnPps3CG9qP2ILoJUcNW8UnCfr8rsHHgKCA="
287
287
  },
288
288
  "lazyAssembly": {
289
289
  "MindExecution.Plugins.Admin.gxzwlji1cf.dll": "sha256-5D5B2ZuUMj46zBMgH2dRA7CbQf++uukMPrEliFLuZWs=",
290
290
  "MindExecution.Plugins.Business.vtaey8c59y.dll": "sha256-rU9MzRRmHuj0/IluV1dvE6x3aRCK/DA4DWKy1DO4VVg=",
291
291
  "MindExecution.Plugins.Directory.zc8ffaoknd.dll": "sha256-Ey/HajaVuBxB/Ou4qsM70nhAZBoODeCENzG1J/uEsxs=",
292
- "MindExecution.Plugins.YouTube.q4tvods1po.dll": "sha256-OhEl9VDjIXBCZq3inYSQyNDRco3oQAp7G95eZIq9IeM="
292
+ "MindExecution.Plugins.YouTube.hezx1pv0ln.dll": "sha256-hzkQM8euRXTHWGhltGODYdwc8mjhBunC+EikBR98PjQ="
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=20260616-mdm-simple-monitor-border-v567" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-mdm-simple-monitor-border-v567" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260616-project-gallery-rendered-thumb-v569" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-project-gallery-rendered-thumb-v569" />
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-mdm-simple-monitor-border-v567';
582
+ const scriptVersion = '20260616-project-gallery-rendered-thumb-v569';
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": "lm4IaYy/",
2
+ "version": "5Qww8A58",
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-xoC/V6bym09C2/PSsXrMNa7JA6xWQTFq5RNRA+nojVs=",
81
+ "hash": "sha256-I8levbQOMKm6+itQSEpmYXvCO/n1P5WLJT/PA/4b+CE=",
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-3PsDD8j+YZE2SU7MQscT9DHl+zbP9r2NCCW6p8DzvOA=",
89
+ "hash": "sha256-/o9b8Gda8DwgDGaq9RBwBXb8C8uSvhppHN1cNPpUwO0=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -426,28 +426,28 @@
426
426
  "url": "_framework/MindExecution.Plugins.Business.vtaey8c59y.dll"
427
427
  },
428
428
  {
429
- "hash": "sha256-fIy3+/z7i12WktCVlAHG6hJGVOSgzWJNGXiDrArviYU=",
430
- "url": "_framework/MindExecution.Plugins.Concept.ksc3wkuptm.dll"
429
+ "hash": "sha256-dizs0lF0tJkJDEukxB3Uk4aTKRn3Qxk+GNImQgZW5dA=",
430
+ "url": "_framework/MindExecution.Plugins.Concept.y5mxuwyn3t.dll"
431
431
  },
432
432
  {
433
433
  "hash": "sha256-Ey/HajaVuBxB/Ou4qsM70nhAZBoODeCENzG1J/uEsxs=",
434
434
  "url": "_framework/MindExecution.Plugins.Directory.zc8ffaoknd.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-zYXs1kS13yT6eDgbsthOX4Ku1n3P+TnPn8oIhJVwxQ0=",
438
- "url": "_framework/MindExecution.Plugins.PlanMaster.flzcb87jvl.dll"
437
+ "hash": "sha256-YCiJAcBPRcX5seGJumZp4mDeGNR2Wy7QSxgZs840Ds8=",
438
+ "url": "_framework/MindExecution.Plugins.PlanMaster.c1vyy1ch1t.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-OhEl9VDjIXBCZq3inYSQyNDRco3oQAp7G95eZIq9IeM=",
442
- "url": "_framework/MindExecution.Plugins.YouTube.q4tvods1po.dll"
441
+ "hash": "sha256-hzkQM8euRXTHWGhltGODYdwc8mjhBunC+EikBR98PjQ=",
442
+ "url": "_framework/MindExecution.Plugins.YouTube.hezx1pv0ln.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-Sw26dtjM8Rd82Nk3uWpkPPjrzCULyX1GwGdX9uJ0zzw=",
446
- "url": "_framework/MindExecution.Shared.r8pan6upd8.dll"
445
+ "hash": "sha256-mgYbk9AgKdxJ4Hn3RFhY3ayofKQ3XFJQkP9gaarLOQQ=",
446
+ "url": "_framework/MindExecution.Shared.ergr5legth.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-cbwDzpFNXJ2mcIVtZC6fNkvXq4K+q0QTXJ5EGuTKL7w=",
450
- "url": "_framework/MindExecution.Web.3b8az6ed0q.dll"
449
+ "hash": "sha256-OPPhq+KMTnPps3CG9qP2ILoJUcNW8UnCfr8rsHHgKCA=",
450
+ "url": "_framework/MindExecution.Web.wagtdqojjf.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-X5tMd8TgdpyfWLfjIOQZ6EsVxGF+b/KYBX2d/htH6Qo=",
773
+ "hash": "sha256-8f9udzCxNAQurXi3GpVjvSmsPMpPYIAPO5E/pxbFqF4=",
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-dsplZ/RaSr9+idAqCQA85yTQKyHFVw9MkMndOJpXrAQ=",
837
+ "hash": "sha256-UFZB2qaCXJGdgOPtv+tajsidaEOVYIjhWAHHu76lw28=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: lm4IaYy/ */
1
+ /* Manifest version: 5Qww8A58 */
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