@mindexec/cli 0.2.109 → 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 +1 -1
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +152 -12
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.ksc3wkuptm.dll → MindExecution.Plugins.Concept.y5mxuwyn3t.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.flzcb87jvl.dll → MindExecution.Plugins.PlanMaster.c1vyy1ch1t.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.q4tvods1po.dll → MindExecution.Plugins.YouTube.hezx1pv0ln.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.r8pan6upd8.dll → MindExecution.Shared.ergr5legth.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Web.3b8az6ed0q.dll → MindExecution.Web.wagtdqojjf.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +11 -11
- package/wwwroot/index.html +3 -3
- package/wwwroot/service-worker-assets.js +14 -14
- package/wwwroot/service-worker.js +1 -1
package/package.json
CHANGED
|
@@ -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-
|
|
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
|
},
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/wwwroot/_framework/{MindExecution.Web.3b8az6ed0q.dll → MindExecution.Web.wagtdqojjf.dll}
RENAMED
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
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.
|
|
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.
|
|
133
|
-
"MindExecution.Plugins.YouTube.
|
|
134
|
-
"MindExecution.Shared.
|
|
135
|
-
"MindExecution.Web.
|
|
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.
|
|
284
|
-
"MindExecution.Plugins.PlanMaster.
|
|
285
|
-
"MindExecution.Shared.
|
|
286
|
-
"MindExecution.Web.
|
|
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.
|
|
292
|
+
"MindExecution.Plugins.YouTube.hezx1pv0ln.dll": "sha256-hzkQM8euRXTHWGhltGODYdwc8mjhBunC+EikBR98PjQ="
|
|
293
293
|
}
|
|
294
294
|
},
|
|
295
295
|
"cacheBootResources": true,
|
package/wwwroot/index.html
CHANGED
|
@@ -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-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-
|
|
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-
|
|
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": "
|
|
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-
|
|
81
|
+
"hash": "sha256-I8levbQOMKm6+itQSEpmYXvCO/n1P5WLJT/PA/4b+CE=",
|
|
82
82
|
"url": "_content/MindExecution.Shared/js/mind-map-core.js"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
@@ -426,28 +426,28 @@
|
|
|
426
426
|
"url": "_framework/MindExecution.Plugins.Business.vtaey8c59y.dll"
|
|
427
427
|
},
|
|
428
428
|
{
|
|
429
|
-
"hash": "sha256-
|
|
430
|
-
"url": "_framework/MindExecution.Plugins.Concept.
|
|
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-
|
|
438
|
-
"url": "_framework/MindExecution.Plugins.PlanMaster.
|
|
437
|
+
"hash": "sha256-YCiJAcBPRcX5seGJumZp4mDeGNR2Wy7QSxgZs840Ds8=",
|
|
438
|
+
"url": "_framework/MindExecution.Plugins.PlanMaster.c1vyy1ch1t.dll"
|
|
439
439
|
},
|
|
440
440
|
{
|
|
441
|
-
"hash": "sha256-
|
|
442
|
-
"url": "_framework/MindExecution.Plugins.YouTube.
|
|
441
|
+
"hash": "sha256-hzkQM8euRXTHWGhltGODYdwc8mjhBunC+EikBR98PjQ=",
|
|
442
|
+
"url": "_framework/MindExecution.Plugins.YouTube.hezx1pv0ln.dll"
|
|
443
443
|
},
|
|
444
444
|
{
|
|
445
|
-
"hash": "sha256-
|
|
446
|
-
"url": "_framework/MindExecution.Shared.
|
|
445
|
+
"hash": "sha256-mgYbk9AgKdxJ4Hn3RFhY3ayofKQ3XFJQkP9gaarLOQQ=",
|
|
446
|
+
"url": "_framework/MindExecution.Shared.ergr5legth.dll"
|
|
447
447
|
},
|
|
448
448
|
{
|
|
449
|
-
"hash": "sha256-
|
|
450
|
-
"url": "_framework/MindExecution.Web.
|
|
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-
|
|
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-
|
|
837
|
+
"hash": "sha256-UFZB2qaCXJGdgOPtv+tajsidaEOVYIjhWAHHu76lw28=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|