@mindexec/cli 0.2.458 → 0.2.460
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/desktop-workspace-state.cjs +120 -0
- package/electron/main.cjs +17 -6
- package/electron/source-smoke.mjs +21 -0
- package/electron/windows-package-smoke.mjs +8 -2
- package/package.json +6 -5
- package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
- package/scripts/desktop-workspace-state-smoke.mjs +81 -0
- package/server.js +36 -16
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-animated-image-preview.js +270 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +106 -60
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +30 -26
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +94 -124
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-menu-manager.js +43 -21
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +45 -13
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-render-plan.js +117 -1
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js +4 -1
- package/wwwroot/_framework/{MindExecution.Core.2ch68iyy8o.dll → MindExecution.Core.oqju650dkd.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Kernel.dh617xfv36.dll → MindExecution.Kernel.7zjugdfmfg.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Admin.0sm50hbae9.dll → MindExecution.Plugins.Admin.qln7lkmsnn.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Business.3wq01orrbu.dll → MindExecution.Plugins.Business.rd6flxuebm.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.z8yl28fa2a.dll → MindExecution.Plugins.Concept.0qrgx3epss.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Directory.m7murp5oes.dll → MindExecution.Plugins.Directory.4prauy9d1z.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.yuyrbpf0vh.dll → MindExecution.Plugins.PlanMaster.cobfta1p3l.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.rwxvn00rm2.dll → MindExecution.Plugins.YouTube.99bahbgkkr.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.r9k48iyijb.dll → MindExecution.Shared.sevaa4rgkp.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Web.742aribkxm.dll → MindExecution.Web.coqh2ccnuk.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +21 -21
- package/wwwroot/app-icon-1024.png +0 -0
- package/wwwroot/apple-touch-icon.png +0 -0
- package/wwwroot/appsettings.json +81 -81
- package/wwwroot/favicon-32x32.png +0 -0
- package/wwwroot/favicon.ico +0 -0
- package/wwwroot/icon-192.png +0 -0
- package/wwwroot/icon-512.png +0 -0
- package/wwwroot/index.html +70 -46
- package/wwwroot/manifest.webmanifest +4 -4
- package/wwwroot/mindexec-favicon-v3.png +0 -0
- package/wwwroot/service-worker-assets.js +888 -880
- package/wwwroot/service-worker.js +1 -1
|
@@ -1412,10 +1412,11 @@
|
|
|
1412
1412
|
return normalizeImageAssetUrl(url).toLowerCase().includes('/assets/thumbs/');
|
|
1413
1413
|
}
|
|
1414
1414
|
|
|
1415
|
-
function
|
|
1415
|
+
function isAnimationCapableImageUrl(url) {
|
|
1416
1416
|
const normalized = normalizeImageAssetUrl(url);
|
|
1417
1417
|
if (!normalized) return false;
|
|
1418
|
-
|
|
1418
|
+
const pathname = normalized.split(/[?#]/)[0].toLowerCase();
|
|
1419
|
+
return pathname.endsWith('.gif') || pathname.endsWith('.webp');
|
|
1419
1420
|
}
|
|
1420
1421
|
|
|
1421
1422
|
function getMetadataValueCaseInsensitive(metadata, ...keys) {
|
|
@@ -1441,6 +1442,34 @@
|
|
|
1441
1442
|
return '';
|
|
1442
1443
|
}
|
|
1443
1444
|
|
|
1445
|
+
function isAnimationCapableImageNodeModel(nodeModel) {
|
|
1446
|
+
if (!nodeModel || getNodeContentTypeLower(nodeModel) !== 'image') {
|
|
1447
|
+
return false;
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1450
|
+
const metadata = getNodeMetadata(nodeModel) || {};
|
|
1451
|
+
const mimeType = getMetadataValueCaseInsensitive(
|
|
1452
|
+
metadata,
|
|
1453
|
+
'fileMime',
|
|
1454
|
+
'FileMime',
|
|
1455
|
+
'mimeType',
|
|
1456
|
+
'MimeType'
|
|
1457
|
+
).toLowerCase();
|
|
1458
|
+
if (mimeType === 'image/gif' || mimeType === 'image/webp') {
|
|
1459
|
+
return true;
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
return [
|
|
1463
|
+
nodeModel?.response,
|
|
1464
|
+
nodeModel?.Response,
|
|
1465
|
+
metadata?.OriginalPath,
|
|
1466
|
+
metadata?.OriginalUrl,
|
|
1467
|
+
metadata?.originalUrl,
|
|
1468
|
+
metadata?.ImageUrl,
|
|
1469
|
+
metadata?.imageUrl
|
|
1470
|
+
].some(isAnimationCapableImageUrl);
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1444
1473
|
function isAnimatedGifImageNodeModel(nodeModel) {
|
|
1445
1474
|
if (!nodeModel || getNodeContentTypeLower(nodeModel) !== 'image') {
|
|
1446
1475
|
return false;
|
|
@@ -1466,7 +1495,7 @@
|
|
|
1466
1495
|
metadata?.originalUrl,
|
|
1467
1496
|
metadata?.ImageUrl,
|
|
1468
1497
|
metadata?.imageUrl
|
|
1469
|
-
].some(
|
|
1498
|
+
].some(url => normalizeImageAssetUrl(url).split(/[?#]/)[0].toLowerCase().endsWith('.gif'));
|
|
1470
1499
|
}
|
|
1471
1500
|
|
|
1472
1501
|
function getAnimatedGifOriginalReference(nodeModel, fallback = '') {
|
|
@@ -1683,9 +1712,9 @@
|
|
|
1683
1712
|
const metadata = ensureNodeMetadataObject(nodeModel);
|
|
1684
1713
|
const normalizedContent = normalizeImageAssetUrl(nextContent);
|
|
1685
1714
|
const thumbnailUrl = normalizeImageAssetUrl(metadata?.ThumbnailUrl || metadata?.thumbnailUrl || '');
|
|
1686
|
-
const
|
|
1715
|
+
const isAnimatedImage = isAnimationCapableImageNodeModel(nodeModel);
|
|
1687
1716
|
|
|
1688
|
-
if (
|
|
1717
|
+
if (isAnimatedImage) {
|
|
1689
1718
|
const originalReference = getAnimatedGifOriginalReference(nodeModel, normalizedContent);
|
|
1690
1719
|
if (originalReference) {
|
|
1691
1720
|
setNodeImageOriginalReference(nodeModel, originalReference);
|
|
@@ -1697,7 +1726,7 @@
|
|
|
1697
1726
|
setNodeImageOriginalReference(nodeModel, normalizedContent);
|
|
1698
1727
|
}
|
|
1699
1728
|
|
|
1700
|
-
if (thumbnailUrl && !
|
|
1729
|
+
if (thumbnailUrl && !isAnimatedImage) {
|
|
1701
1730
|
setNodeImagePreviewUrl(nodeModel, thumbnailUrl);
|
|
1702
1731
|
return normalizeImageAssetUrl(nodeModel.response ?? nodeModel.Response ?? '');
|
|
1703
1732
|
}
|
|
@@ -1824,15 +1853,15 @@
|
|
|
1824
1853
|
''
|
|
1825
1854
|
);
|
|
1826
1855
|
const missingAssetUrl = normalizeImageAssetUrl(metadata?.MissingAssetUrl || '');
|
|
1827
|
-
const
|
|
1856
|
+
const isAnimatedImage = isAnimationCapableImageNodeModel(nodeModel);
|
|
1828
1857
|
const responseFullResUrl = isImageContent && canUseAsFullResImageUrl(responseUrl) ? responseUrl : '';
|
|
1829
1858
|
const missingFullResUrl = canUseAsFullResImageUrl(missingAssetUrl) ? missingAssetUrl : '';
|
|
1830
|
-
const mediaPreviewUrl =
|
|
1831
|
-
const responsePreviewUrl = isImageContent && !
|
|
1859
|
+
const mediaPreviewUrl = isAnimatedImage ? '' : (thumbnailUrl || snapshotUrl || previewImageUrl);
|
|
1860
|
+
const responsePreviewUrl = isImageContent && !isAnimatedImage ? responseUrl : '';
|
|
1832
1861
|
const fullResUrl = isImageContent
|
|
1833
1862
|
? (originalUrl || originalPath || responseFullResUrl || missingFullResUrl)
|
|
1834
1863
|
: (originalUrl || originalPath || snapshotUrl || previewImageUrl || thumbnailUrl || missingFullResUrl);
|
|
1835
|
-
const previewUrl =
|
|
1864
|
+
const previewUrl = isAnimatedImage
|
|
1836
1865
|
? (fullResUrl || responseUrl || originalPath || originalUrl || missingAssetUrl)
|
|
1837
1866
|
: (mediaPreviewUrl || responsePreviewUrl || originalPath || originalUrl || missingAssetUrl);
|
|
1838
1867
|
|
|
@@ -1846,13 +1875,14 @@
|
|
|
1846
1875
|
missingAssetUrl,
|
|
1847
1876
|
previewUrl,
|
|
1848
1877
|
fullResUrl,
|
|
1849
|
-
|
|
1878
|
+
animationCapable: isAnimatedImage,
|
|
1879
|
+
animatedGif: isAnimatedImage
|
|
1850
1880
|
};
|
|
1851
1881
|
}
|
|
1852
1882
|
|
|
1853
1883
|
function hasNodeImagePreviewSource(assetUrls) {
|
|
1854
1884
|
if (!assetUrls || typeof assetUrls !== 'object') return false;
|
|
1855
|
-
if (assetUrls.animatedGif === true) return false;
|
|
1885
|
+
if (assetUrls.animationCapable === true || assetUrls.animatedGif === true) return false;
|
|
1856
1886
|
return !!(
|
|
1857
1887
|
assetUrls.thumbnailUrl ||
|
|
1858
1888
|
(assetUrls.responseUrl && isThumbnailImageUrl(assetUrls.responseUrl))
|
|
@@ -1879,7 +1909,7 @@
|
|
|
1879
1909
|
if (!assetUrls.previewUrl) {
|
|
1880
1910
|
return;
|
|
1881
1911
|
}
|
|
1882
|
-
if (assetUrls.animatedGif === true) {
|
|
1912
|
+
if (assetUrls.animationCapable === true || assetUrls.animatedGif === true) {
|
|
1883
1913
|
return;
|
|
1884
1914
|
}
|
|
1885
1915
|
|
|
@@ -4570,6 +4600,7 @@
|
|
|
4570
4600
|
bringNodeToFront: bringNodeToFront,
|
|
4571
4601
|
updateNodeSelectionStyle: updateNodeSelectionStyle,
|
|
4572
4602
|
applySingleSelection: applySingleSelection,
|
|
4603
|
+
moveCursorAfterNodePlacement: moveCursorAfterNodePlacement,
|
|
4573
4604
|
resetState: resetState,
|
|
4574
4605
|
captureDeleteSnapshot: captureDeleteSnapshot,
|
|
4575
4606
|
// ▼▼▼ [New] Expose helper function for external callers ▼▼▼
|
|
@@ -4580,6 +4611,7 @@
|
|
|
4580
4611
|
updateAnimatedImageStatusTextures: updateAnimatedImageStatusTextures,
|
|
4581
4612
|
applyCanonicalNodeResponse: applyCanonicalNodeResponse,
|
|
4582
4613
|
isGeneratedImageNodeModel: isGeneratedImageNodeModel,
|
|
4614
|
+
isAnimationCapableImageNodeModel: isAnimationCapableImageNodeModel,
|
|
4583
4615
|
isAnimatedGifImageNodeModel: isAnimatedGifImageNodeModel,
|
|
4584
4616
|
getNodeImageAssetUrls: getNodeImageAssetUrls,
|
|
4585
4617
|
setNodeImageOriginalUrl: setNodeImageOriginalUrl,
|
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
const INITIAL_LINE_TEXTURE_ROWS = 1024;
|
|
7
7
|
const GPU_WARM_RETRY_DELAY_MS = 120;
|
|
8
8
|
const IMAGE_ATLAS_TILE_SIZE = 128;
|
|
9
|
+
const IMAGE_ATLAS_UPLOAD_SETTLE_MS = 1000;
|
|
10
|
+
const IMAGE_ATLAS_UPLOAD_MAX_WAIT_MS = 3500;
|
|
9
11
|
const frameSampleStates = new WeakMap();
|
|
10
12
|
const residentLinePrewarmStates = new WeakMap();
|
|
11
13
|
const residentTransitionStates = new WeakMap();
|
|
12
14
|
const cssMediaFrameDomStates = new WeakMap();
|
|
15
|
+
const imageAtlasUploadStates = new WeakMap();
|
|
13
16
|
let cssMediaFrameDomReuseCount = 0;
|
|
14
17
|
let cssMediaFrameDomApplyCount = 0;
|
|
15
18
|
const RESIDENT_CSS_CACHE_TEXT_TYPES = new Set(['text', 'note', 'memo', 'markdown', 'code', 'csv-table']);
|
|
@@ -447,6 +450,108 @@
|
|
|
447
450
|
return true;
|
|
448
451
|
}
|
|
449
452
|
|
|
453
|
+
function prepareImageAtlasForEntries(renderer, entries) {
|
|
454
|
+
let imageCount = 0;
|
|
455
|
+
for (const entry of entries || []) {
|
|
456
|
+
const model = entry?.model || null;
|
|
457
|
+
const contentType = String(model?.contentType ?? model?.ContentType ?? '').toLowerCase();
|
|
458
|
+
if (contentType === 'video') {
|
|
459
|
+
imageCount++;
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
if (contentType === 'image') {
|
|
463
|
+
if (globalThis.MindMapNodes?.isAnimatedGifImageNodeModel?.(model) !== true) imageCount++;
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
if (contentType === 'embed') {
|
|
467
|
+
const urls = globalThis.MindMapNodes?.getNodeImageAssetUrls?.(model) || null;
|
|
468
|
+
if (urls?.thumbnailUrl || urls?.snapshotUrl || urls?.previewImageUrl) imageCount++;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return prepareImageAtlasCapacity(renderer, imageCount);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
function uploadImageAtlasTile(renderer, slot, canvas) {
|
|
475
|
+
const webglRenderer = renderer?.renderer || null;
|
|
476
|
+
const gl = renderer?.gl || webglRenderer?.getContext?.() || null;
|
|
477
|
+
const texture = renderer?.imageAtlasTexture || null;
|
|
478
|
+
if (!webglRenderer?.initTexture || !gl || !texture || !canvas || !(slot?.slotIndex >= 0)) return false;
|
|
479
|
+
|
|
480
|
+
let savedTexture = null;
|
|
481
|
+
let savedFlipY = null;
|
|
482
|
+
let savedPremultiply = null;
|
|
483
|
+
let savedColorspace = null;
|
|
484
|
+
try {
|
|
485
|
+
webglRenderer.initTexture(texture);
|
|
486
|
+
const handle = webglRenderer.properties?.get?.(texture)?.__webglTexture || null;
|
|
487
|
+
if (!handle) return false;
|
|
488
|
+
savedTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);
|
|
489
|
+
savedFlipY = gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);
|
|
490
|
+
savedPremultiply = gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL);
|
|
491
|
+
savedColorspace = gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL);
|
|
492
|
+
const columns = Math.max(1, Number(renderer.imageAtlasColumns || 1));
|
|
493
|
+
const x = (slot.slotIndex % columns) * IMAGE_ATLAS_TILE_SIZE;
|
|
494
|
+
const y = Math.floor(slot.slotIndex / columns) * IMAGE_ATLAS_TILE_SIZE;
|
|
495
|
+
gl.bindTexture(gl.TEXTURE_2D, handle);
|
|
496
|
+
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
|
|
497
|
+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
|
|
498
|
+
gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
|
|
499
|
+
gl.texSubImage2D(gl.TEXTURE_2D, 0, x, y, gl.RGBA, gl.UNSIGNED_BYTE, canvas);
|
|
500
|
+
renderer._imageAtlasTileUploadCount = Number(renderer._imageAtlasTileUploadCount || 0) + 1;
|
|
501
|
+
renderer._residentGpuWarmKey = '';
|
|
502
|
+
renderer._residentImageAtlasWarmVersion = -1;
|
|
503
|
+
return true;
|
|
504
|
+
} catch {
|
|
505
|
+
return false;
|
|
506
|
+
} finally {
|
|
507
|
+
if (savedFlipY !== null) gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, savedFlipY);
|
|
508
|
+
if (savedPremultiply !== null) gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, savedPremultiply);
|
|
509
|
+
if (savedColorspace !== null) gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, savedColorspace);
|
|
510
|
+
if (savedTexture !== null) gl.bindTexture(gl.TEXTURE_2D, savedTexture);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
function scheduleImageAtlasUpload(renderer, module = renderer?._module) {
|
|
515
|
+
if (!renderer?.imageAtlasTexture || renderer?._disposed === true) return false;
|
|
516
|
+
const now = typeof performance !== 'undefined' ? performance.now() : Date.now();
|
|
517
|
+
let state = imageAtlasUploadStates.get(renderer);
|
|
518
|
+
if (!state) {
|
|
519
|
+
state = { timer: 0, startedAt: now, pending: false, epoch: 0 };
|
|
520
|
+
imageAtlasUploadStates.set(renderer, state);
|
|
521
|
+
}
|
|
522
|
+
state.pending = true;
|
|
523
|
+
state.epoch = Number(renderer._residentStaticPreviewEpoch || 0);
|
|
524
|
+
if (!(state.startedAt > 0)) state.startedAt = now;
|
|
525
|
+
if (state.timer) clearTimeout(state.timer);
|
|
526
|
+
const elapsedMs = Math.max(0, now - state.startedAt);
|
|
527
|
+
const delayMs = Math.max(0, Math.min(
|
|
528
|
+
IMAGE_ATLAS_UPLOAD_SETTLE_MS,
|
|
529
|
+
IMAGE_ATLAS_UPLOAD_MAX_WAIT_MS - elapsedMs
|
|
530
|
+
));
|
|
531
|
+
state.timer = setTimeout(() => {
|
|
532
|
+
state.timer = 0;
|
|
533
|
+
if (!state.pending || renderer._disposed === true ||
|
|
534
|
+
state.epoch !== Number(renderer._residentStaticPreviewEpoch || 0)) return;
|
|
535
|
+
state.pending = false;
|
|
536
|
+
state.startedAt = 0;
|
|
537
|
+
if (!renderer.imageAtlasTexture) return;
|
|
538
|
+
renderer.imageAtlasTexture.needsUpdate = true;
|
|
539
|
+
renderer._imageAtlasTextureUploadCount = Number(renderer._imageAtlasTextureUploadCount || 0) + 1;
|
|
540
|
+
const activeModule = renderer._module || module;
|
|
541
|
+
if (activeModule) {
|
|
542
|
+
activeModule._forceUpdateFrames = Math.max(Number(activeModule._forceUpdateFrames || 0), 1);
|
|
543
|
+
activeModule.requestAnimationWake?.('image-atlas-texture-upload');
|
|
544
|
+
}
|
|
545
|
+
}, delayMs);
|
|
546
|
+
return true;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
function clearScheduledImageAtlasUpload(renderer) {
|
|
550
|
+
const state = imageAtlasUploadStates.get(renderer);
|
|
551
|
+
if (state?.timer) clearTimeout(state.timer);
|
|
552
|
+
imageAtlasUploadStates.delete(renderer);
|
|
553
|
+
}
|
|
554
|
+
|
|
450
555
|
function fallbackBatch(renderer, fallbackIds, limit = 12) {
|
|
451
556
|
const ids = Array.from(fallbackIds || []);
|
|
452
557
|
const safeLimit = Math.max(1, Number(limit || 1));
|
|
@@ -698,6 +803,12 @@
|
|
|
698
803
|
return result === true;
|
|
699
804
|
}
|
|
700
805
|
|
|
806
|
+
function hasActionableResidentLineDetails(renderer, module, lodBand) {
|
|
807
|
+
const nodeIds = renderer?.instanceData?.nodeIds || [];
|
|
808
|
+
return nodeIds.length > 0 && renderer?._hasPendingLineDetailRestore?.(lodBand) === true &&
|
|
809
|
+
areResidentLinesPrepared(renderer, module?.nodeObjectsById, nodeIds);
|
|
810
|
+
}
|
|
811
|
+
|
|
701
812
|
function hasResidentDirtyWork(renderer, camera, module, resolveLodBand, buildSelectionKey, isAnimatedGifModel) {
|
|
702
813
|
if (!renderer) return false;
|
|
703
814
|
const lodBand = camera && typeof resolveLodBand === 'function'
|
|
@@ -710,7 +821,7 @@
|
|
|
710
821
|
renderer._imageAtlasRebuildPending === true || Number(renderer._imageAtlasQueuedIds?.size || 0) > 0 ||
|
|
711
822
|
Number(renderer._imageAtlasLoadingIds?.size || 0) > 0 || Number(renderer._imageAtlasBatchReadyIds?.size || 0) > 0 ||
|
|
712
823
|
renderer._imageAtlasBatchActive === true || renderer._lodCleanupPending === true ||
|
|
713
|
-
renderer._deferLineRestorePending === true || renderer
|
|
824
|
+
renderer._deferLineRestorePending === true || hasActionableResidentLineDetails(renderer, module, lodBand) ||
|
|
714
825
|
Number(renderer._pendingLodVisibilityVersion ?? -1) >= 0 || renderer._fullResHandoffActive === true ||
|
|
715
826
|
renderer.isLoading === true || module?.isLoading === true || renderer._hasResidentLodInstances?.() !== true;
|
|
716
827
|
if (hasTypedResidentDirtyWork) {
|
|
@@ -1797,6 +1908,10 @@
|
|
|
1797
1908
|
ensureLineTextureCapacity,
|
|
1798
1909
|
renderResidentWarmScene,
|
|
1799
1910
|
prepareImageAtlasCapacity,
|
|
1911
|
+
prepareImageAtlasForEntries,
|
|
1912
|
+
uploadImageAtlasTile,
|
|
1913
|
+
scheduleImageAtlasUpload,
|
|
1914
|
+
clearScheduledImageAtlasUpload,
|
|
1800
1915
|
fallbackBatch,
|
|
1801
1916
|
reuseCssMediaFrameDom,
|
|
1802
1917
|
reuseStableVisibleCss,
|
|
@@ -1807,6 +1922,7 @@
|
|
|
1807
1922
|
invalidateActiveCssMediaFallbackCountCache,
|
|
1808
1923
|
markLodImageCssFallbacksChanged,
|
|
1809
1924
|
createTrackedLodImageCssFallbackSet,
|
|
1925
|
+
hasActionableResidentLineDetails,
|
|
1810
1926
|
hasResidentDirtyWork,
|
|
1811
1927
|
hasPendingNearCssWarmup,
|
|
1812
1928
|
reusePreparedImageInstances,
|
|
@@ -593,8 +593,11 @@
|
|
|
593
593
|
preferOriginal !== true &&
|
|
594
594
|
existingSourceKind === 'original' &&
|
|
595
595
|
(matchesOriginalUrl || isThumbnailAssetUrl(normalizedRequestedUrl));
|
|
596
|
+
const canUseMatchingOriginal =
|
|
597
|
+
matchesOriginalUrl &&
|
|
598
|
+
(preferOriginal === true || options.allowOriginalReuseForPreview !== false);
|
|
596
599
|
|
|
597
|
-
if (!(matchesRequestedUrl ||
|
|
600
|
+
if (!(matchesRequestedUrl || canUseMatchingOriginal || canUseOriginalForPreview)) {
|
|
598
601
|
return false;
|
|
599
602
|
}
|
|
600
603
|
|
package/wwwroot/_framework/{MindExecution.Core.2ch68iyy8o.dll → MindExecution.Core.oqju650dkd.dll}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/wwwroot/_framework/{MindExecution.Web.742aribkxm.dll → MindExecution.Web.coqh2ccnuk.dll}
RENAMED
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
4
|
+
"hash": "sha256-j3+TOGBljyWZdYIgA9a2YYTlaG+Rt2EVMQ0fB5eRn8E=",
|
|
5
5
|
"fingerprinting": {
|
|
6
6
|
"Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
|
|
7
7
|
"Markdig.d1j7v41cl1.dll": "Markdig.dll",
|
|
@@ -122,16 +122,16 @@
|
|
|
122
122
|
"System.brmz7yk5qh.dll": "System.dll",
|
|
123
123
|
"netstandard.b50t77veor.dll": "netstandard.dll",
|
|
124
124
|
"System.Private.CoreLib.g6ztz7cmo2.dll": "System.Private.CoreLib.dll",
|
|
125
|
-
"MindExecution.Core.
|
|
126
|
-
"MindExecution.Kernel.
|
|
127
|
-
"MindExecution.Plugins.Admin.
|
|
128
|
-
"MindExecution.Plugins.Business.
|
|
129
|
-
"MindExecution.Plugins.Concept.
|
|
130
|
-
"MindExecution.Plugins.Directory.
|
|
131
|
-
"MindExecution.Plugins.PlanMaster.
|
|
132
|
-
"MindExecution.Plugins.YouTube.
|
|
133
|
-
"MindExecution.Shared.
|
|
134
|
-
"MindExecution.Web.
|
|
125
|
+
"MindExecution.Core.oqju650dkd.dll": "MindExecution.Core.dll",
|
|
126
|
+
"MindExecution.Kernel.7zjugdfmfg.dll": "MindExecution.Kernel.dll",
|
|
127
|
+
"MindExecution.Plugins.Admin.qln7lkmsnn.dll": "MindExecution.Plugins.Admin.dll",
|
|
128
|
+
"MindExecution.Plugins.Business.rd6flxuebm.dll": "MindExecution.Plugins.Business.dll",
|
|
129
|
+
"MindExecution.Plugins.Concept.0qrgx3epss.dll": "MindExecution.Plugins.Concept.dll",
|
|
130
|
+
"MindExecution.Plugins.Directory.4prauy9d1z.dll": "MindExecution.Plugins.Directory.dll",
|
|
131
|
+
"MindExecution.Plugins.PlanMaster.cobfta1p3l.dll": "MindExecution.Plugins.PlanMaster.dll",
|
|
132
|
+
"MindExecution.Plugins.YouTube.99bahbgkkr.dll": "MindExecution.Plugins.YouTube.dll",
|
|
133
|
+
"MindExecution.Shared.sevaa4rgkp.dll": "MindExecution.Shared.dll",
|
|
134
|
+
"MindExecution.Web.coqh2ccnuk.dll": "MindExecution.Web.dll",
|
|
135
135
|
"dotnet.native.566r55w3xu.js": "dotnet.native.js",
|
|
136
136
|
"dotnet.native.x6q5aixc38.wasm": "dotnet.native.wasm",
|
|
137
137
|
"dotnet.js": "dotnet.js",
|
|
@@ -276,18 +276,18 @@
|
|
|
276
276
|
"System.Xml.XDocument.sn51jas17n.dll": "sha256-GNI2kFgFmPTwzuzwUn8gxK+AzGLUWRJFdg9JzIbrybQ=",
|
|
277
277
|
"System.brmz7yk5qh.dll": "sha256-CfM2miyj1KHApFmqMdLYWio3S/jrdON2pW9Xr2nTwlo=",
|
|
278
278
|
"netstandard.b50t77veor.dll": "sha256-//jQGOXjb8ET8WtXgOJrAxLx6E7zDJ5RjRRutwkvmxo=",
|
|
279
|
-
"MindExecution.Core.
|
|
280
|
-
"MindExecution.Kernel.
|
|
281
|
-
"MindExecution.Plugins.Business.
|
|
282
|
-
"MindExecution.Plugins.Concept.
|
|
283
|
-
"MindExecution.Plugins.PlanMaster.
|
|
284
|
-
"MindExecution.Shared.
|
|
285
|
-
"MindExecution.Web.
|
|
279
|
+
"MindExecution.Core.oqju650dkd.dll": "sha256-kAa63CfXtc76u8TyQM/hYA0BET+atu75fts3/mg4pTE=",
|
|
280
|
+
"MindExecution.Kernel.7zjugdfmfg.dll": "sha256-XWt7j9wlHb+PuYdstPVmPDLv15PcRahv3rNYrGzvI40=",
|
|
281
|
+
"MindExecution.Plugins.Business.rd6flxuebm.dll": "sha256-8XhddfNWrxDyHfFYmcDQutHhXIfGqfRKW3NVPyQ9Dbw=",
|
|
282
|
+
"MindExecution.Plugins.Concept.0qrgx3epss.dll": "sha256-WL1s5FZGLq9dOF3GDGasvY4ZU8559uF2t4a52KorOZw=",
|
|
283
|
+
"MindExecution.Plugins.PlanMaster.cobfta1p3l.dll": "sha256-JCKZ9S1jGO/aZ+Xfit+r+nFxc1JqkBQIxLugL3c0r+Y=",
|
|
284
|
+
"MindExecution.Shared.sevaa4rgkp.dll": "sha256-fLiquQIwsr+IVLW6w9+MdHQTNZzETBx1MJe0e8IbXHs=",
|
|
285
|
+
"MindExecution.Web.coqh2ccnuk.dll": "sha256-TBO6TdRrS5Z/M45nFXsJKGz8Y7oQ0loKUSbFd3JbkJE="
|
|
286
286
|
},
|
|
287
287
|
"lazyAssembly": {
|
|
288
|
-
"MindExecution.Plugins.Admin.
|
|
289
|
-
"MindExecution.Plugins.Directory.
|
|
290
|
-
"MindExecution.Plugins.YouTube.
|
|
288
|
+
"MindExecution.Plugins.Admin.qln7lkmsnn.dll": "sha256-PthhAmI45Ysbmebc6FVPKp5YmQeb8ed0Spq5HUcwass=",
|
|
289
|
+
"MindExecution.Plugins.Directory.4prauy9d1z.dll": "sha256-uCBQe2vhbS85Awx84xfEJLmbvETRIv8o8eZsfnahtDg=",
|
|
290
|
+
"MindExecution.Plugins.YouTube.99bahbgkkr.dll": "sha256-g+tRUYc/SojxQ4PfQ2sswlIzY+dZBH0mtgtVSJetdys="
|
|
291
291
|
}
|
|
292
292
|
},
|
|
293
293
|
"cacheBootResources": true,
|
|
Binary file
|
|
Binary file
|
package/wwwroot/appsettings.json
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
2
|
+
"OpenRouter": {
|
|
3
|
+
"ApiKey": ""
|
|
4
|
+
},
|
|
5
|
+
"Execution": {
|
|
6
|
+
"Mode": "Concept",
|
|
7
|
+
"Model": "openai/gpt-4o-mini"
|
|
8
|
+
},
|
|
9
|
+
"Supabase": {
|
|
10
|
+
"Url": "https://otbyfkjxrkngvjziawki.supabase.co",
|
|
11
|
+
"Key": "sb_publishable_NpUs0RDJH2YnllsqTKO6TQ_1jTdSsNQ"
|
|
12
|
+
},
|
|
13
|
+
"Bridge": {
|
|
14
|
+
"Url": "app-origin",
|
|
15
|
+
"FallbackPort": 5148,
|
|
16
|
+
"AllowHostedLocalFallback": false
|
|
17
|
+
},
|
|
18
|
+
"ProjectStorage": {
|
|
19
|
+
"Mode": "LocalOnly",
|
|
20
|
+
"CloudProjectsEnabled": false
|
|
21
|
+
},
|
|
22
|
+
"CloudflareR2": {
|
|
23
|
+
"ProxyUrl": "https://r2-auth-proxy.lovecrdm.workers.dev",
|
|
24
|
+
"PublicBaseUrl": "https://r2-auth-proxy.lovecrdm.workers.dev/public",
|
|
25
|
+
"PrivateSignUrl": "https://r2-auth-proxy.lovecrdm.workers.dev/sign",
|
|
26
|
+
"PrivateBatchSignUrl": "https://r2-auth-proxy.lovecrdm.workers.dev/sign-batch",
|
|
27
|
+
"PrivateUrlTtlSeconds": 900
|
|
28
|
+
},
|
|
29
|
+
"CloudflareWebCapture": {
|
|
30
|
+
"EndpointUrl": "https://web-capture-worker.lovecrdm.workers.dev/capture",
|
|
31
|
+
"RequestTimeoutMs": 45000
|
|
32
|
+
},
|
|
33
|
+
"Payments": {
|
|
34
|
+
"Provider": "dodo"
|
|
35
|
+
},
|
|
36
|
+
"DodoPayments": {
|
|
37
|
+
"DefaultProductId": "",
|
|
38
|
+
"StandardPriceId": "dodo_pro_monthly_v1",
|
|
39
|
+
"EarlyPriceId": "dodo_pro_monthly_v1",
|
|
40
|
+
"LtdPriceId": "dodo_ltd_launch_v1",
|
|
41
|
+
"ReturnUrl": "https://mindexec.pages.dev/pricing",
|
|
42
|
+
"Environment": "test_mode"
|
|
43
|
+
},
|
|
44
|
+
"Paddle": {
|
|
45
|
+
"ClientToken": "",
|
|
46
|
+
"ProMonthlyPriceId": ""
|
|
47
|
+
},
|
|
48
|
+
"ProductProfile": {
|
|
49
|
+
"VariantKey": "platform",
|
|
50
|
+
"Slug": "mindexec",
|
|
51
|
+
"BrandName": "MindExec",
|
|
52
|
+
"ProductName": "MindCanvas",
|
|
53
|
+
"AppTitle": "MindExec",
|
|
54
|
+
"WorkspaceNounSingular": "canvas",
|
|
55
|
+
"WorkspaceNounPlural": "canvases",
|
|
56
|
+
"SignInTitle": "Welcome Back",
|
|
57
|
+
"SignUpTitle": "Create Account",
|
|
58
|
+
"SignInSubtitle": "Sign in to access your MindCanvas workspace.",
|
|
59
|
+
"SignUpSubtitle": "Sign up to start organizing your ideas on a visual canvas.",
|
|
60
|
+
"PrimaryCheckoutProvider": "dodo",
|
|
61
|
+
"CanonicalHost": "localhost",
|
|
62
|
+
"DodoCatalog": {
|
|
63
|
+
"StandardPriceId": "dodo_pro_monthly_v1",
|
|
64
|
+
"EarlyPriceId": "dodo_pro_monthly_v1",
|
|
65
|
+
"LtdPriceId": "dodo_ltd_launch_v1"
|
|
66
|
+
},
|
|
67
|
+
"MarketingTool": {
|
|
68
|
+
"Enabled": false,
|
|
69
|
+
"HideAppChrome": true,
|
|
70
|
+
"AllowMindCanvasRoute": false,
|
|
71
|
+
"HomeRoute": "/",
|
|
72
|
+
"ToolKey": "",
|
|
73
|
+
"HeroEyebrow": "Free local tool",
|
|
74
|
+
"HeroTitle": "",
|
|
75
|
+
"HeroSubtitle": "",
|
|
76
|
+
"PrimaryCtaText": "Open MindCanvas",
|
|
77
|
+
"PrimaryCtaHref": "/mindcanvas",
|
|
78
|
+
"SecondaryCtaText": "",
|
|
79
|
+
"SecondaryCtaHref": "",
|
|
80
|
+
"PrivacyNote": "Runs locally in your browser. No login. No database storage."
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
83
|
}
|
|
Binary file
|
package/wwwroot/favicon.ico
CHANGED
|
Binary file
|
package/wwwroot/icon-192.png
CHANGED
|
Binary file
|
package/wwwroot/icon-512.png
CHANGED
|
Binary file
|