@mindexec/cli 0.2.56 → 0.2.58

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.56",
3
+ "version": "0.2.58",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -742,9 +742,11 @@ try {
742
742
  receivedAt: new Date().toISOString()
743
743
  }]);
744
744
  assert.equal(patchCount, 1);
745
+ await wait();
745
746
  assert.equal(patchPreview.dataset.remoteFleetFrameSeq, '9999');
746
747
  assert.equal(patchPreview.dataset.remoteFleetFrameUrl, patchUrl);
747
748
  assert.equal(patchPreview.dataset.remoteFleetPendingFrameUrl || '', '');
749
+ assert.ok(patchPreview.querySelector('canvas[data-remote-fleet-frame-canvas="true"]'));
748
750
  assert.equal(patchPreview.querySelector('img[data-remote-fleet-frame-image="true"]')?.dataset.remoteFleetFrameUrl, patchUrl);
749
751
  const alternateDevice = devices.find(device => device.DeviceId !== focusedDevice.DeviceId);
750
752
  assert.ok(alternateDevice);
@@ -12637,7 +12637,9 @@
12637
12637
  return {
12638
12638
  value: 'Blocked',
12639
12639
  tone: 'warn',
12640
- title: reason || 'The local host is active, but account route publishing failed.'
12640
+ title: isRemoteFleetRegistryMigrationReason(reason)
12641
+ ? 'Account route registry needs the Supabase remote_host_targets migration.'
12642
+ : (reason || 'The local host is active, but account route publishing failed.')
12641
12643
  };
12642
12644
  }
12643
12645
 
@@ -12652,12 +12654,22 @@
12652
12654
  return String(result?.registryStatus ?? result?.RegistryStatus ?? '').trim().toLowerCase();
12653
12655
  }
12654
12656
 
12657
+ function getRemoteFleetResultRegistryReason(result) {
12658
+ return String(result?.registryReason ?? result?.RegistryReason ?? result?.error ?? result?.Error ?? '').trim();
12659
+ }
12660
+
12661
+ function isRemoteFleetRegistryMigrationReason(reason) {
12662
+ return /registry-table-unavailable|PGRST20[25]|remote_host_targets|set_remote_host_target|clear_remote_host_target/i
12663
+ .test(String(reason || ''));
12664
+ }
12665
+
12655
12666
  function getRemoteFleetHostFeedbackText(enabled, result) {
12656
12667
  if (enabled !== true) {
12657
12668
  return 'Host target stopped.';
12658
12669
  }
12659
12670
 
12660
12671
  const status = getRemoteFleetResultRegistryStatus(result);
12672
+ const reason = getRemoteFleetResultRegistryReason(result);
12661
12673
  if (status === 'account') {
12662
12674
  return 'Host target set.';
12663
12675
  }
@@ -12667,6 +12679,10 @@
12667
12679
  }
12668
12680
 
12669
12681
  if (status === 'blocked') {
12682
+ if (isRemoteFleetRegistryMigrationReason(reason)) {
12683
+ return 'Host set locally. Account route needs setup.';
12684
+ }
12685
+
12670
12686
  return 'Host route blocked.';
12671
12687
  }
12672
12688
 
@@ -12840,6 +12856,7 @@
12840
12856
  const REMOTE_FLEET_LIVE_REFRESH_MS = 5000;
12841
12857
  const REMOTE_FLEET_LIVE_FRAME_REFRESH_MS = 50;
12842
12858
  const REMOTE_FLEET_THUMBNAIL_FRAME_REFRESH_MS = 2000;
12859
+ const REMOTE_FLEET_FRAME_CANVAS_MAX_DPR = 2;
12843
12860
  const REMOTE_FLEET_TASK_FOLLOW_INITIAL_MS = 250;
12844
12861
  const REMOTE_FLEET_TASK_FOLLOW_REFRESH_MS = 2000;
12845
12862
  const REMOTE_FLEET_TASK_FOLLOW_MAX_TICKS = 60;
@@ -13172,6 +13189,125 @@
13172
13189
  return image;
13173
13190
  }
13174
13191
 
13192
+ function ensureRemoteFleetFrameCanvas(preview) {
13193
+ let canvas = preview?.querySelector?.('canvas[data-remote-fleet-frame-canvas="true"]');
13194
+ if (canvas) {
13195
+ return canvas;
13196
+ }
13197
+
13198
+ canvas = document.createElement('canvas');
13199
+ canvas.dataset.remoteFleetFrameCanvas = 'true';
13200
+ canvas.setAttribute('aria-hidden', 'true');
13201
+ canvas.style.cssText = `
13202
+ position: absolute;
13203
+ inset: 0;
13204
+ width: 100%;
13205
+ height: 100%;
13206
+ display: none;
13207
+ background: #0f172a;
13208
+ `;
13209
+ if (typeof preview?.insertBefore === 'function') {
13210
+ preview.insertBefore(canvas, preview.firstChild || null);
13211
+ } else {
13212
+ preview?.appendChild?.(canvas);
13213
+ }
13214
+ return canvas;
13215
+ }
13216
+
13217
+ function syncRemoteFleetFrameCanvasSize(canvas) {
13218
+ if (!canvas) {
13219
+ return null;
13220
+ }
13221
+
13222
+ const rect = typeof canvas.getBoundingClientRect === 'function'
13223
+ ? canvas.getBoundingClientRect()
13224
+ : null;
13225
+ const cssWidth = Math.max(1, Math.round(rect?.width || canvas.clientWidth || 320));
13226
+ const cssHeight = Math.max(1, Math.round(rect?.height || canvas.clientHeight || 180));
13227
+ const dpr = Math.max(1, Math.min(REMOTE_FLEET_FRAME_CANVAS_MAX_DPR, Number(window.devicePixelRatio || 1) || 1));
13228
+ const nextWidth = Math.max(1, Math.round(cssWidth * dpr));
13229
+ const nextHeight = Math.max(1, Math.round(cssHeight * dpr));
13230
+ if (canvas.width !== nextWidth) {
13231
+ canvas.width = nextWidth;
13232
+ }
13233
+ if (canvas.height !== nextHeight) {
13234
+ canvas.height = nextHeight;
13235
+ }
13236
+ return { width: nextWidth, height: nextHeight };
13237
+ }
13238
+
13239
+ function getRemoteFleetBitmapSize(bitmap) {
13240
+ const width = Number(bitmap?.displayWidth || bitmap?.naturalWidth || bitmap?.videoWidth || bitmap?.width || 0);
13241
+ const height = Number(bitmap?.displayHeight || bitmap?.naturalHeight || bitmap?.videoHeight || bitmap?.height || 0);
13242
+ return {
13243
+ width: Number.isFinite(width) && width > 0 ? width : 1,
13244
+ height: Number.isFinite(height) && height > 0 ? height : 1
13245
+ };
13246
+ }
13247
+
13248
+ function drawRemoteFleetFrameToCanvas(canvas, bitmap) {
13249
+ if (!canvas || !bitmap) {
13250
+ return false;
13251
+ }
13252
+
13253
+ const size = syncRemoteFleetFrameCanvasSize(canvas);
13254
+ if (!size) {
13255
+ return false;
13256
+ }
13257
+
13258
+ let context = null;
13259
+ try {
13260
+ context = canvas.getContext('2d', { alpha: false, desynchronized: true });
13261
+ } catch {
13262
+ context = canvas.getContext('2d');
13263
+ }
13264
+ if (!context) {
13265
+ return false;
13266
+ }
13267
+
13268
+ const source = getRemoteFleetBitmapSize(bitmap);
13269
+ const sourceAspect = source.width / source.height;
13270
+ const targetAspect = size.width / size.height;
13271
+ let sx = 0;
13272
+ let sy = 0;
13273
+ let sw = source.width;
13274
+ let sh = source.height;
13275
+ if (sourceAspect > targetAspect) {
13276
+ sw = source.height * targetAspect;
13277
+ sx = (source.width - sw) / 2;
13278
+ } else if (sourceAspect < targetAspect) {
13279
+ sh = source.width / targetAspect;
13280
+ sy = (source.height - sh) / 2;
13281
+ }
13282
+
13283
+ context.imageSmoothingEnabled = true;
13284
+ context.imageSmoothingQuality = 'medium';
13285
+ context.clearRect(0, 0, size.width, size.height);
13286
+ context.drawImage(bitmap, sx, sy, sw, sh, 0, 0, size.width, size.height);
13287
+ return true;
13288
+ }
13289
+
13290
+ async function loadRemoteFleetFrameBitmap(frame) {
13291
+ if (!frame || !isRemoteFleetFrameSource(frame.frameUrl)) {
13292
+ return null;
13293
+ }
13294
+
13295
+ if (typeof fetch !== 'function' || typeof createImageBitmap !== 'function') {
13296
+ return null;
13297
+ }
13298
+
13299
+ const response = await fetch(frame.frameUrl, {
13300
+ cache: 'no-store',
13301
+ credentials: 'omit'
13302
+ });
13303
+ if (!response.ok) {
13304
+ throw new Error(`remote-frame-fetch-${response.status}`);
13305
+ }
13306
+
13307
+ const blob = await response.blob();
13308
+ return createImageBitmap(blob);
13309
+ }
13310
+
13175
13311
  function getRemoteFleetFrameIdentity(frame) {
13176
13312
  return [
13177
13313
  String(frame?.deviceId || '').trim(),
@@ -13272,20 +13408,12 @@
13272
13408
  return badge;
13273
13409
  }
13274
13410
 
13275
- function commitRemoteFleetFrameToPreview(preview, image, frame) {
13276
- if (!preview || !image || !isRemoteFleetFrameNewerForPreview(preview, frame, false)) {
13411
+ function commitRemoteFleetFrameMetadata(preview, frame) {
13412
+ if (!preview || !isRemoteFleetFrameNewerForPreview(preview, frame, false)) {
13277
13413
  return false;
13278
13414
  }
13279
13415
 
13280
13416
  const nextSeq = Number(frame.frameSeq || 0);
13281
- image.dataset.remoteFleetFrameKind = frame.kind;
13282
- image.dataset.remoteFleetFrameSeq = String(nextSeq || 0);
13283
- image.dataset.remoteFleetFrameUrl = frame.frameUrl;
13284
- image.loading = frame.kind === 'thumbnail' ? 'lazy' : 'eager';
13285
- if (image.src !== frame.frameUrl) {
13286
- image.src = frame.frameUrl;
13287
- }
13288
-
13289
13417
  preview.dataset.remoteFleetFrameKind = frame.kind;
13290
13418
  preview.dataset.remoteFleetFrameSeq = String(nextSeq || 0);
13291
13419
  preview.dataset.remoteFleetFrameUrl = frame.frameUrl;
@@ -13311,6 +13439,50 @@
13311
13439
  return true;
13312
13440
  }
13313
13441
 
13442
+ function commitRemoteFleetFrameToPreview(preview, image, frame) {
13443
+ if (!preview || !image || !isRemoteFleetFrameNewerForPreview(preview, frame, false)) {
13444
+ return false;
13445
+ }
13446
+
13447
+ const nextSeq = Number(frame.frameSeq || 0);
13448
+ image.dataset.remoteFleetFrameKind = frame.kind;
13449
+ image.dataset.remoteFleetFrameSeq = String(nextSeq || 0);
13450
+ image.dataset.remoteFleetFrameUrl = frame.frameUrl;
13451
+ image.loading = frame.kind === 'thumbnail' ? 'lazy' : 'eager';
13452
+ image.style.display = 'block';
13453
+ if (image.src !== frame.frameUrl) {
13454
+ image.src = frame.frameUrl;
13455
+ }
13456
+
13457
+ const canvas = preview.querySelector?.('canvas[data-remote-fleet-frame-canvas="true"]');
13458
+ if (canvas) {
13459
+ canvas.style.display = 'none';
13460
+ }
13461
+
13462
+ return commitRemoteFleetFrameMetadata(preview, frame);
13463
+ }
13464
+
13465
+ function commitRemoteFleetFrameToCanvas(preview, canvas, image, bitmap, frame) {
13466
+ if (!preview || !canvas || !bitmap || !isRemoteFleetFrameNewerForPreview(preview, frame, false)) {
13467
+ return false;
13468
+ }
13469
+
13470
+ if (!drawRemoteFleetFrameToCanvas(canvas, bitmap)) {
13471
+ return false;
13472
+ }
13473
+
13474
+ const nextSeq = Number(frame.frameSeq || 0);
13475
+ canvas.dataset.remoteFleetFrameKind = frame.kind;
13476
+ canvas.dataset.remoteFleetFrameSeq = String(nextSeq || 0);
13477
+ canvas.dataset.remoteFleetFrameUrl = frame.frameUrl;
13478
+ canvas.style.display = 'block';
13479
+ if (image) {
13480
+ image.style.display = 'none';
13481
+ }
13482
+
13483
+ return commitRemoteFleetFrameMetadata(preview, frame);
13484
+ }
13485
+
13314
13486
  function clearRemoteFleetPendingFrameDataset(preview, frame) {
13315
13487
  if (!preview) {
13316
13488
  return;
@@ -13325,7 +13497,7 @@
13325
13497
  }
13326
13498
  }
13327
13499
 
13328
- function processRemoteFleetFrameQueue(preview, image) {
13500
+ function processRemoteFleetFramePaintQueue(preview, image) {
13329
13501
  if (!preview || !image || preview._remoteFleetFrameLoaderActive === true) {
13330
13502
  return;
13331
13503
  }
@@ -13338,7 +13510,7 @@
13338
13510
 
13339
13511
  preview._remoteFleetFrameLoaderActive = true;
13340
13512
  const frameIdentity = getRemoteFleetFrameIdentity(frame);
13341
- const finish = loaded => {
13513
+ const finish = (loaded, surface = 'img') => {
13342
13514
  const currentPending = preview._remoteFleetPendingFrame;
13343
13515
  const stillLatest = getRemoteFleetFrameIdentity(currentPending) === frameIdentity;
13344
13516
  let committed = false;
@@ -13347,7 +13519,8 @@
13347
13519
  window.RuntimeTrace?.emit?.('remote.frame.uiPatched', {
13348
13520
  count: committed ? 1 : 0,
13349
13521
  kind: frame.kind,
13350
- seq: frame.frameSeq
13522
+ seq: frame.frameSeq,
13523
+ surface
13351
13524
  });
13352
13525
  }
13353
13526
 
@@ -13357,28 +13530,84 @@
13357
13530
 
13358
13531
  preview._remoteFleetFrameLoaderActive = false;
13359
13532
  if (preview._remoteFleetPendingFrame) {
13360
- processRemoteFleetFrameQueue(preview, image);
13533
+ processRemoteFleetFramePaintQueue(preview, image);
13361
13534
  }
13362
13535
  };
13363
13536
 
13364
- if (typeof Image !== 'function') {
13365
- finish(true);
13537
+ const loadFallbackImage = () => {
13538
+ if (typeof Image !== 'function') {
13539
+ finish(true, 'img');
13540
+ return;
13541
+ }
13542
+
13543
+ const loader = new Image();
13544
+ loader.decoding = 'async';
13545
+ loader.onload = () => {
13546
+ const decoded = typeof loader.decode === 'function'
13547
+ ? loader.decode().catch(() => undefined)
13548
+ : Promise.resolve();
13549
+ decoded.then(() => finish(true, 'img'));
13550
+ };
13551
+ loader.onerror = () => finish(false, 'img');
13552
+ loader.src = frame.frameUrl;
13553
+ };
13554
+
13555
+ const canvas = ensureRemoteFleetFrameCanvas(preview);
13556
+ if (!canvas) {
13557
+ loadFallbackImage();
13366
13558
  return;
13367
13559
  }
13368
13560
 
13369
- const loader = new Image();
13370
- loader.decoding = 'async';
13371
- loader.onload = () => {
13372
- const decoded = typeof loader.decode === 'function'
13373
- ? loader.decode().catch(() => undefined)
13374
- : Promise.resolve();
13375
- decoded.then(() => finish(true));
13376
- };
13377
- loader.onerror = () => finish(false);
13378
- loader.src = frame.frameUrl;
13561
+ loadRemoteFleetFrameBitmap(frame)
13562
+ .then(bitmap => {
13563
+ if (!bitmap) {
13564
+ loadFallbackImage();
13565
+ return;
13566
+ }
13567
+
13568
+ requestRemoteFleetFrameLoopFrame(() => {
13569
+ if (!document.body.contains(preview)) {
13570
+ if (typeof bitmap.close === 'function') {
13571
+ bitmap.close();
13572
+ }
13573
+ finish(false, 'canvas');
13574
+ return;
13575
+ }
13576
+
13577
+ const currentPending = preview._remoteFleetPendingFrame;
13578
+ const stillLatest = getRemoteFleetFrameIdentity(currentPending) === frameIdentity;
13579
+ const committed = stillLatest
13580
+ ? commitRemoteFleetFrameToCanvas(preview, canvas, image, bitmap, frame)
13581
+ : false;
13582
+ if (typeof bitmap.close === 'function') {
13583
+ bitmap.close();
13584
+ }
13585
+
13586
+ if (committed) {
13587
+ window.RuntimeTrace?.emit?.('remote.frame.uiPatched', {
13588
+ count: 1,
13589
+ kind: frame.kind,
13590
+ seq: frame.frameSeq,
13591
+ surface: 'canvas'
13592
+ });
13593
+ if (stillLatest) {
13594
+ clearRemoteFleetPendingFrameDataset(preview, frame);
13595
+ }
13596
+ preview._remoteFleetFrameLoaderActive = false;
13597
+ if (preview._remoteFleetPendingFrame) {
13598
+ processRemoteFleetFramePaintQueue(preview, image);
13599
+ }
13600
+ } else if (stillLatest) {
13601
+ loadFallbackImage();
13602
+ } else {
13603
+ finish(false, 'canvas');
13604
+ }
13605
+ });
13606
+ })
13607
+ .catch(() => loadFallbackImage());
13379
13608
  }
13380
13609
 
13381
- function queueRemoteFleetFrameImageSwap(preview, frame) {
13610
+ function queueRemoteFleetFramePaint(preview, frame) {
13382
13611
  if (!preview || !frame || !isRemoteFleetFrameNewerForPreview(preview, frame, true)) {
13383
13612
  return false;
13384
13613
  }
@@ -13393,12 +13622,12 @@
13393
13622
  preview.dataset.remoteFleetPendingFrameKind = nextFrame.kind;
13394
13623
  preview.dataset.remoteFleetPendingFrameSeq = String(nextFrame.frameSeq || 0);
13395
13624
  preview.dataset.remoteFleetPendingFrameUrl = nextFrame.frameUrl;
13396
- processRemoteFleetFrameQueue(preview, image);
13625
+ processRemoteFleetFramePaintQueue(preview, image);
13397
13626
  return true;
13398
13627
  }
13399
13628
 
13400
13629
  function applyRemoteFleetFramePatchToPreview(preview, frame) {
13401
- return queueRemoteFleetFrameImageSwap(preview, frame);
13630
+ return queueRemoteFleetFramePaint(preview, frame);
13402
13631
  }
13403
13632
 
13404
13633
  function applyRemoteFleetFramePatches(bodyView, patches) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-/5JRqqpOVCbTaf/1StsYKfdTMQiwrtDXWYuuTS2bGro=",
4
+ "hash": "sha256-GGI2WWoqeuPkRYhJN5PE3420fp6QkcG1SsPGtrx1RZI=",
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.cqcbagjpqb.dll": "MindExecution.Kernel.dll",
128
128
  "MindExecution.Plugins.Admin.tsn0j478un.dll": "MindExecution.Plugins.Admin.dll",
129
129
  "MindExecution.Plugins.Business.xg74dmn0vz.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.rk2v1mregp.dll": "MindExecution.Plugins.Concept.dll",
130
+ "MindExecution.Plugins.Concept.xyf0dtv4lr.dll": "MindExecution.Plugins.Concept.dll",
131
131
  "MindExecution.Plugins.Directory.9i4bd043ia.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.jeb1nqbo47.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.ebkxnv7skl.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.d3rbkwpyfs.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.euk5xejxws.dll": "MindExecution.Web.dll",
132
+ "MindExecution.Plugins.PlanMaster.6awpgrbi0w.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.phonjrgb40.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.wv4gm07egs.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.2qteyfmk41.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.fu1rl67yt3.dll": "sha256-6cDbehKdjX71zeL9Ro5GNupn7wqRYfb7yLW2w3Wp05g=",
282
282
  "MindExecution.Kernel.cqcbagjpqb.dll": "sha256-zPB0tmwi/UKdJ//g0xMH1Y02ahDX5ii6ZKdB3yiQQz4=",
283
- "MindExecution.Plugins.Concept.rk2v1mregp.dll": "sha256-NfgDpyHQQa/DuAguwwNgKKx1eFBTA4dIKSXG/PPrYKw=",
284
- "MindExecution.Plugins.PlanMaster.jeb1nqbo47.dll": "sha256-BUFRRmvfLyWCo56fcGO0R4AQxhvbngN0mS54vHihx3g=",
285
- "MindExecution.Shared.d3rbkwpyfs.dll": "sha256-6YHJgYtgnxAV99SKKDb4AMGnm59WPnt0wAKnT/JW0Io=",
286
- "MindExecution.Web.euk5xejxws.dll": "sha256-xiHLTKxHUbEab8UTz16/fmpwQf4/+zp/bIYzllYm9gQ="
283
+ "MindExecution.Plugins.Concept.xyf0dtv4lr.dll": "sha256-2QH/z68+Z450gJslGXuS1WTwg25aACi2dNm/JuuzJOw=",
284
+ "MindExecution.Plugins.PlanMaster.6awpgrbi0w.dll": "sha256-rvthfQoAH80iU4oCiDMz24nfVrIz+Frr2fPA5gleTnc=",
285
+ "MindExecution.Shared.wv4gm07egs.dll": "sha256-RL1/G48EzGToUbnfJMZshn8OM5e4esqQ0smEFP3jTXM=",
286
+ "MindExecution.Web.2qteyfmk41.dll": "sha256-+uuhv+W15wEynEtGoL9sxAYpLoZjLc2Nsi2BfIOI27A="
287
287
  },
288
288
  "lazyAssembly": {
289
289
  "MindExecution.Plugins.Admin.tsn0j478un.dll": "sha256-g5Q4Ihy2PJKx6EFB6k78dIszLgK4hZ3Xintjvso/zmw=",
290
290
  "MindExecution.Plugins.Business.xg74dmn0vz.dll": "sha256-0bP/QgMyXSk9IlQVun63rnWvkwqqZmJcRe90QoPC6jw=",
291
291
  "MindExecution.Plugins.Directory.9i4bd043ia.dll": "sha256-b+fpVz2RkQC8uL4dIvN6wMWWefoII84Jyfe85EU/URk=",
292
- "MindExecution.Plugins.YouTube.ebkxnv7skl.dll": "sha256-5ldw1KApIdyPI04cMifDxN2rKBKZENtZXY9GVlYsD/k="
292
+ "MindExecution.Plugins.YouTube.phonjrgb40.dll": "sha256-vdpI8ahzIz5TjeFL3+1pcu+Urei4cJuw6I/y5E1u78Y="
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=20260614-remote-registry-wake-v516" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-remote-registry-wake-v516" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260614-remote-registry-blocked-v518" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-remote-registry-blocked-v518" />
12
12
  <!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
13
13
  <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
14
14
  <!-- ?꿎뼯??-->
@@ -558,7 +558,7 @@
558
558
  }
559
559
 
560
560
  const base = '_content/MindExecution.Shared/js/';
561
- const scriptVersion = '20260614-remote-registry-wake-v516';
561
+ const scriptVersion = '20260614-remote-registry-blocked-v518';
562
562
  const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
563
563
  console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
564
564
  const criticalScripts = [
@@ -1,5 +1,5 @@
1
1
  self.assetsManifest = {
2
- "version": "myLeiE66",
2
+ "version": "QgHVmmuE",
3
3
  "assets": [
4
4
  {
5
5
  "hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
@@ -86,7 +86,7 @@
86
86
  "url": "_content/MindExecution.Shared/js/mind-map-core.js.backup"
87
87
  },
88
88
  {
89
- "hash": "sha256-pfqJn3HbG2hf6mQB5J36TJM5Ko6Jj7R0B7EqxBnfo20=",
89
+ "hash": "sha256-fMca6CVHvUnN7d36WBYPbi2+pTk0jktEGOeU4MtiS6I=",
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.xg74dmn0vz.dll"
427
427
  },
428
428
  {
429
- "hash": "sha256-NfgDpyHQQa/DuAguwwNgKKx1eFBTA4dIKSXG/PPrYKw=",
430
- "url": "_framework/MindExecution.Plugins.Concept.rk2v1mregp.dll"
429
+ "hash": "sha256-2QH/z68+Z450gJslGXuS1WTwg25aACi2dNm/JuuzJOw=",
430
+ "url": "_framework/MindExecution.Plugins.Concept.xyf0dtv4lr.dll"
431
431
  },
432
432
  {
433
433
  "hash": "sha256-b+fpVz2RkQC8uL4dIvN6wMWWefoII84Jyfe85EU/URk=",
434
434
  "url": "_framework/MindExecution.Plugins.Directory.9i4bd043ia.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-BUFRRmvfLyWCo56fcGO0R4AQxhvbngN0mS54vHihx3g=",
438
- "url": "_framework/MindExecution.Plugins.PlanMaster.jeb1nqbo47.dll"
437
+ "hash": "sha256-rvthfQoAH80iU4oCiDMz24nfVrIz+Frr2fPA5gleTnc=",
438
+ "url": "_framework/MindExecution.Plugins.PlanMaster.6awpgrbi0w.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-5ldw1KApIdyPI04cMifDxN2rKBKZENtZXY9GVlYsD/k=",
442
- "url": "_framework/MindExecution.Plugins.YouTube.ebkxnv7skl.dll"
441
+ "hash": "sha256-vdpI8ahzIz5TjeFL3+1pcu+Urei4cJuw6I/y5E1u78Y=",
442
+ "url": "_framework/MindExecution.Plugins.YouTube.phonjrgb40.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-6YHJgYtgnxAV99SKKDb4AMGnm59WPnt0wAKnT/JW0Io=",
446
- "url": "_framework/MindExecution.Shared.d3rbkwpyfs.dll"
445
+ "hash": "sha256-RL1/G48EzGToUbnfJMZshn8OM5e4esqQ0smEFP3jTXM=",
446
+ "url": "_framework/MindExecution.Shared.wv4gm07egs.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-xiHLTKxHUbEab8UTz16/fmpwQf4/+zp/bIYzllYm9gQ=",
450
- "url": "_framework/MindExecution.Web.euk5xejxws.dll"
449
+ "hash": "sha256-+uuhv+W15wEynEtGoL9sxAYpLoZjLc2Nsi2BfIOI27A=",
450
+ "url": "_framework/MindExecution.Web.2qteyfmk41.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-fNxEwfCSNkIbZigCHxruL4DIzYfxh9/mJDDYi0knFik=",
773
+ "hash": "sha256-ZaW4vC90Zm3dpEK9VB9owbWEJBm8a4veU8BM6Noiw6k=",
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-0isEjWtcxpTZnvY3qV3eTiWX+iwsmslA96igYDcNwB4=",
837
+ "hash": "sha256-rpCaVooQL1nYxs2JIxk6ihbPz4jeJBu3uKs7hNTRQVo=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: myLeiE66 */
1
+ /* Manifest version: QgHVmmuE */
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