@mindexec/cli 0.2.285 → 0.2.287

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.
Files changed (19) hide show
  1. package/package.json +1 -1
  2. package/scripts/remote-registry-follower-smoke.mjs +20 -0
  3. package/server.js +67 -24
  4. package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +42 -4
  5. package/wwwroot/_framework/MindExecution.Core.y7ffihhajj.dll +0 -0
  6. package/wwwroot/_framework/{MindExecution.Kernel.n80deqs1y7.dll → MindExecution.Kernel.l5y3qroa7p.dll} +0 -0
  7. package/wwwroot/_framework/{MindExecution.Plugins.Admin.m5d94977um.dll → MindExecution.Plugins.Admin.uuf238xa0h.dll} +0 -0
  8. package/wwwroot/_framework/{MindExecution.Plugins.Business.ntqdn1hta3.dll → MindExecution.Plugins.Business.nyr3v25v48.dll} +0 -0
  9. package/wwwroot/_framework/{MindExecution.Plugins.Concept.cjp3ty08t0.dll → MindExecution.Plugins.Concept.d70e7soqnf.dll} +0 -0
  10. package/wwwroot/_framework/{MindExecution.Plugins.Directory.k4hx7g84qs.dll → MindExecution.Plugins.Directory.ju87t8h3zs.dll} +0 -0
  11. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.w9msy01tp9.dll → MindExecution.Plugins.PlanMaster.xg4mkokjr1.dll} +0 -0
  12. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.iob4817wtf.dll → MindExecution.Plugins.YouTube.c631ocfbcp.dll} +0 -0
  13. package/wwwroot/_framework/{MindExecution.Shared.lvqhaceogf.dll → MindExecution.Shared.km4gh9ya5b.dll} +0 -0
  14. package/wwwroot/_framework/MindExecution.Web.lam9b8vdjf.dll +0 -0
  15. package/wwwroot/_framework/blazor.boot.json +21 -21
  16. package/wwwroot/service-worker-assets.js +23 -23
  17. package/wwwroot/service-worker.js +1 -1
  18. package/wwwroot/_framework/MindExecution.Core.xsad4wu36e.dll +0 -0
  19. package/wwwroot/_framework/MindExecution.Web.1otc7eb4qb.dll +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.285",
3
+ "version": "0.2.287",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -713,6 +713,26 @@ async function main() {
713
713
  ? { status: status.payload.remoteRegistryFollower, agent: agent.payload }
714
714
  : null;
715
715
  }, 9000, `registry inactive keeps ready data-plane agent\n${client.details()}`);
716
+
717
+ const inactivePid = Number(restartedAgent.pid || 0);
718
+ killProcess(inactivePid);
719
+ const recoveredInactiveAgent = await waitForManagedAgentRestart(
720
+ client,
721
+ hostBEndpoint,
722
+ inactivePid,
723
+ 'host-b after inactive target recovery',
724
+ 12000);
725
+ assert.equal(recoveredInactiveAgent.usingNpx, false, JSON.stringify(recoveredInactiveAgent));
726
+ assert.match(String(recoveredInactiveAgent.launcher || ''), /mindexec-remote-fast/i);
727
+ assert.equal(recoveredInactiveAgent.leaseId, 'lease-b');
728
+ await waitForConnectedDevice(hostB, 'host-b after inactive target recovery');
729
+ await waitFor(async () => {
730
+ const status = await fetchJson(`${client.baseUrl}/api/status`);
731
+ return status.payload?.remoteRegistryFollower?.reason === 'registry-inactive-agent-recovered'
732
+ && String(status.payload?.remoteRegistryFollower?.targetEndpoint || '') === hostBEndpoint
733
+ ? status.payload.remoteRegistryFollower
734
+ : null;
735
+ }, 4000, `inactive target recovered managed agent\n${client.details()}`);
716
736
  const finalStatus = await fetchJson(`${client.baseUrl}/api/status`);
717
737
  assert.ok(finalStatus.payload?.remoteRegistryRealtime?.changes >= 2, JSON.stringify(finalStatus.payload?.remoteRegistryRealtime));
718
738
  assert.ok(finalStatus.payload?.remoteRegistryRealtime?.wakeups >= 2, JSON.stringify(finalStatus.payload?.remoteRegistryRealtime));
package/server.js CHANGED
@@ -3505,6 +3505,9 @@ const REMOTE_REGISTRY_FOLLOWER_MISSING_SESSION_FAST_RETRY_COUNT = Math.max(
3505
3505
  Number(process.env.MINDEXEC_REMOTE_REGISTRY_MISSING_SESSION_FAST_RETRY_COUNT || 5) || 5);
3506
3506
  const REMOTE_REGISTRY_FOLLOWER_INACTIVE_STOP_COUNT = Math.max(2, Number(process.env.MINDEXEC_REMOTE_REGISTRY_INACTIVE_STOP_COUNT || 8) || 8);
3507
3507
  const REMOTE_REGISTRY_FOLLOWER_INACTIVE_GRACE_MS = Math.max(500, Number(process.env.MINDEXEC_REMOTE_REGISTRY_INACTIVE_GRACE_MS || 60000) || 60000);
3508
+ const REMOTE_REGISTRY_INACTIVE_TARGET_RECOVERY_MS = Math.max(
3509
+ REMOTE_REGISTRY_FOLLOWER_INACTIVE_GRACE_MS,
3510
+ Number(process.env.MINDEXEC_REMOTE_REGISTRY_INACTIVE_TARGET_RECOVERY_MS || (10 * 60 * 1000)) || (10 * 60 * 1000));
3508
3511
  const REMOTE_REGISTRY_SESSION_REFRESH_LEAD_MS = Math.max(15_000, Number(process.env.MINDEXEC_REMOTE_REGISTRY_SESSION_REFRESH_LEAD_MS || 120_000) || 120_000);
3509
3512
  const REMOTE_REGISTRY_REALTIME_ENABLED = REMOTE_REGISTRY_FOLLOWER_ENABLED
3510
3513
  && !/^(0|false|no|off)$/i.test(String(process.env.MINDEXEC_REMOTE_REGISTRY_REALTIME || 'true'));
@@ -6096,6 +6099,8 @@ function normalizeRemoteRegistryTarget(row) {
6096
6099
  const hostInstanceId = String(readRegistryTargetField(row, 'host_instance_id', 'hostInstanceId', 'HostInstanceId') || '').trim();
6097
6100
  const expiresAt = String(readRegistryTargetField(row, 'expires_at', 'expiresAt', 'ExpiresAt') || '').trim();
6098
6101
  const expiresAtMs = Date.parse(expiresAt);
6102
+ const updatedAt = String(readRegistryTargetField(row, 'updated_at', 'updatedAt', 'UpdatedAt') || '').trim();
6103
+ const updatedAtMs = Date.parse(updatedAt);
6099
6104
 
6100
6105
  return {
6101
6106
  active,
@@ -6106,7 +6111,9 @@ function normalizeRemoteRegistryTarget(row) {
6106
6111
  nodeId,
6107
6112
  hostInstanceId,
6108
6113
  expiresAt,
6109
- expiresAtMs: Number.isFinite(expiresAtMs) ? expiresAtMs : 0
6114
+ expiresAtMs: Number.isFinite(expiresAtMs) ? expiresAtMs : 0,
6115
+ updatedAt,
6116
+ updatedAtMs: Number.isFinite(updatedAtMs) ? updatedAtMs : 0
6110
6117
  };
6111
6118
  }
6112
6119
 
@@ -6114,6 +6121,20 @@ function isRemoteRegistryTargetExpired(target) {
6114
6121
  return !target?.expiresAtMs || target.expiresAtMs <= Date.now();
6115
6122
  }
6116
6123
 
6124
+ function isRecoverableInactiveRemoteRegistryTarget(target) {
6125
+ if (!target || (target.active === true && !isRemoteRegistryTargetExpired(target))) {
6126
+ return false;
6127
+ }
6128
+
6129
+ const managers = normalizeRemoteManagerEndpointList(target.endpointCandidates, target.endpoint);
6130
+ if (managers.length === 0 || !target.pairToken || !target.leaseId || !target.nodeId) {
6131
+ return false;
6132
+ }
6133
+
6134
+ const anchorMs = Math.max(Number(target.expiresAtMs || 0), Number(target.updatedAtMs || 0));
6135
+ return anchorMs > 0 && Date.now() - anchorMs <= REMOTE_REGISTRY_INACTIVE_TARGET_RECOVERY_MS;
6136
+ }
6137
+
6117
6138
  function isRemoteRegistryTargetSameAsLocalHost(localHub, target) {
6118
6139
  const localLeaseId = safeRemoteAgentField(localHub?.hostTargetLeaseId, 128);
6119
6140
  const localHostInstanceId = safeRemoteAgentField(localHub?.hostTargetHostInstanceId || localHub?.hostInstanceId, 128);
@@ -6405,15 +6426,17 @@ function stopRemoteHostTargetRenew(reason = 'stopped') {
6405
6426
  clearTimeout(remoteHostTargetRenewTimer);
6406
6427
  remoteHostTargetRenewTimer = null;
6407
6428
  }
6429
+ const keepRecoverableLease = /^(no-local-host-target|expired-local-host-target)$/i.test(String(reason || ''))
6430
+ && !!remoteHostTargetRenewState.nodeId;
6408
6431
  updateRemoteHostTargetRenewState({
6409
6432
  status: REMOTE_HOST_TARGET_AUTO_RENEW_ENABLED ? 'idle' : 'disabled',
6410
6433
  reason,
6411
- nodeId: '',
6412
- leaseId: '',
6413
- hostInstanceId: '',
6414
- endpoint: '',
6415
- endpointCandidates: [],
6416
- expiresAt: '',
6434
+ nodeId: keepRecoverableLease ? remoteHostTargetRenewState.nodeId : '',
6435
+ leaseId: keepRecoverableLease ? remoteHostTargetRenewState.leaseId : '',
6436
+ hostInstanceId: keepRecoverableLease ? remoteHostTargetRenewState.hostInstanceId : '',
6437
+ endpoint: keepRecoverableLease ? remoteHostTargetRenewState.endpoint : '',
6438
+ endpointCandidates: keepRecoverableLease ? remoteHostTargetRenewState.endpointCandidates : [],
6439
+ expiresAt: keepRecoverableLease ? remoteHostTargetRenewState.expiresAt : '',
6417
6440
  lastError: ''
6418
6441
  });
6419
6442
  }
@@ -7029,28 +7052,48 @@ async function runRemoteRegistryFollowerOnce(trigger = 'timer') {
7029
7052
  ? 'registry-inactive'
7030
7053
  : 'no-active-target';
7031
7054
  const inactive = rememberRemoteRegistryInactiveTarget(inactiveReason);
7032
- const recovery = inactive.agentKept
7055
+ let recovery = inactive.agentKept
7033
7056
  ? await maybeRestartKeptRemoteAgentForMissingRegistryTarget(inactiveReason)
7034
7057
  : null;
7035
- if (inactive.confirmedInactive && isRemoteAgentRegistryOwned()) {
7058
+ if (!inactive.agentKept && isRecoverableInactiveRemoteRegistryTarget(target)) {
7059
+ const recoveryManagers = normalizeRemoteManagerEndpointList(target.endpointCandidates, target.endpoint);
7060
+ logWarn(
7061
+ 'remote',
7062
+ `registry target inactive but recently recoverable; reconnecting previous manager ${formatKeyValue('reason', inactiveReason)} ${formatKeyValue('manager', recoveryManagers[0] || '-')}`);
7063
+ recovery = await startRemoteAgentConnection({
7064
+ manager: recoveryManagers[0],
7065
+ managerCandidates: recoveryManagers,
7066
+ pairToken: target.pairToken,
7067
+ leaseId: target.leaseId,
7068
+ nodeId: target.nodeId,
7069
+ engine: 'auto',
7070
+ source: 'local-bridge-registry-inactive-recovery'
7071
+ });
7072
+ }
7073
+ if (inactive.confirmedInactive && recovery?.ok !== true && isRemoteAgentRegistryOwned()) {
7036
7074
  await stopRemoteAgentConnection('registry-inactive');
7037
7075
  }
7038
- const keptManager = inactive.agentKept ? safeRemoteAgentField(remoteAgentState.manager, 160) : '';
7039
- const keptCandidates = inactive.agentKept ? normalizeRemoteManagerEndpointList(remoteAgentState.managerCandidates, remoteAgentState.manager) : [];
7076
+ const recoveredAgent = recovery?.ok === true && isRemoteAgentRegistryOwned() && isRemoteAgentProcessRunning();
7077
+ const agentKept = inactive.agentKept || recoveredAgent;
7078
+ const dataPlaneReady = recoveredAgent ? isRemoteAgentReadyDataPlaneAlive() : inactive.dataPlaneReady;
7079
+ const keptManager = agentKept ? safeRemoteAgentField(remoteAgentState.manager, 160) : '';
7080
+ const keptCandidates = agentKept ? normalizeRemoteManagerEndpointList(remoteAgentState.managerCandidates, remoteAgentState.manager) : [];
7040
7081
  updateRemoteRegistryFollowerState({
7041
- status: inactive.agentKept ? 'waiting' : 'idle',
7042
- reason: inactive.agentKept ? `${inactiveReason}-agent-kept` : inactiveReason,
7082
+ status: recoveredAgent ? 'connected' : (agentKept ? 'waiting' : 'idle'),
7083
+ reason: recovery?.ok === true
7084
+ ? `${inactiveReason}-agent-recovered`
7085
+ : (agentKept ? `${inactiveReason}-agent-kept` : inactiveReason),
7043
7086
  authenticated: true,
7044
7087
  lastAttemptAt: attemptedAt,
7045
- lastSuccessAt: attemptedAt,
7088
+ lastSuccessAt: recoveredAgent ? new Date().toISOString() : attemptedAt,
7046
7089
  targetEndpoint: keptManager,
7047
7090
  targetEndpointCandidates: keptCandidates,
7048
- targetLeaseId: inactive.agentKept ? safeRemoteAgentField(remoteAgentState.leaseId, 128) : '',
7049
- targetNodeId: inactive.agentKept ? safeRemoteAgentField(remoteAgentState.nodeId, 128) : '',
7091
+ targetLeaseId: agentKept ? safeRemoteAgentField(remoteAgentState.leaseId, 128) : '',
7092
+ targetNodeId: agentKept ? safeRemoteAgentField(remoteAgentState.nodeId, 128) : '',
7050
7093
  inactiveCount: inactive.count,
7051
7094
  inactiveElapsedMs: inactive.elapsedMs,
7052
- agentKept: inactive.agentKept,
7053
- dataPlaneReady: inactive.dataPlaneReady,
7095
+ agentKept,
7096
+ dataPlaneReady,
7054
7097
  lastError: recovery?.ok === false ? (recovery.error || 'missing-target-agent-recovery-failed') : ''
7055
7098
  });
7056
7099
  await reportRemoteRegistryFollowerSync({
@@ -7058,21 +7101,21 @@ async function runRemoteRegistryFollowerOnce(trigger = 'timer') {
7058
7101
  skipped: true,
7059
7102
  reason: recovery?.ok === true
7060
7103
  ? `${inactiveReason}-agent-recovered`
7061
- : (inactive.agentKept ? `${inactiveReason}-agent-kept` : inactiveReason),
7104
+ : (agentKept ? `${inactiveReason}-agent-kept` : inactiveReason),
7062
7105
  error: recovery?.ok === false ? recovery.error : '',
7063
7106
  trigger,
7064
7107
  authenticated: true,
7065
7108
  targetEndpoint: keptManager,
7066
7109
  targetEndpointCandidates: keptCandidates,
7067
- targetLeaseId: inactive.agentKept ? remoteAgentState.leaseId : '',
7068
- targetNodeId: inactive.agentKept ? remoteAgentState.nodeId : '',
7110
+ targetLeaseId: agentKept ? remoteAgentState.leaseId : '',
7111
+ targetNodeId: agentKept ? remoteAgentState.nodeId : '',
7069
7112
  inactiveCount: inactive.count,
7070
7113
  inactiveElapsedMs: inactive.elapsedMs,
7071
- agentKept: inactive.agentKept,
7072
- dataPlaneReady: inactive.dataPlaneReady
7114
+ agentKept,
7115
+ dataPlaneReady
7073
7116
  });
7074
7117
  scheduleRemoteRegistryFollower(
7075
- inactive.agentKept && !inactive.dataPlaneReady
7118
+ (agentKept && !dataPlaneReady) || recovery?.ok === false
7076
7119
  ? REMOTE_REGISTRY_FOLLOWER_FAST_RETRY_MS
7077
7120
  : REMOTE_REGISTRY_FOLLOWER_POLL_MS,
7078
7121
  recovery?.ok === true ? 'missing-target-agent-recovered' : 'no-target');
@@ -4111,6 +4111,42 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4111
4111
  return true;
4112
4112
  }
4113
4113
 
4114
+ _getLocalSnapGridSnappedScreenCenter(rawCenterX, rawCenterY, width, height, camera = null) {
4115
+ const safeWidth = Math.max(1, Number(width || 0));
4116
+ const safeHeight = Math.max(1, Number(height || 0));
4117
+ const fallback = {
4118
+ centerX: Math.max(0, Math.min(safeWidth, Number(rawCenterX || 0))),
4119
+ centerY: Math.max(0, Math.min(safeHeight, Number(rawCenterY || 0)))
4120
+ };
4121
+ const activeCamera = camera || this.camera;
4122
+ if (!activeCamera?.isPerspectiveCamera) {
4123
+ return fallback;
4124
+ }
4125
+
4126
+ const cameraZ = Math.max(1, Number(activeCamera.position?.z || 1));
4127
+ const vfov = (Number(activeCamera.fov || 45) * Math.PI) / 180;
4128
+ const viewHeight = 2 * Math.tan(vfov / 2) * cameraZ;
4129
+ const viewWidth = viewHeight * Math.max(0.1, Number(activeCamera.aspect || (safeWidth / safeHeight) || 1));
4130
+ if (viewWidth <= 0 || viewHeight <= 0) {
4131
+ return fallback;
4132
+ }
4133
+
4134
+ const cameraX = Number(activeCamera.position?.x || 0);
4135
+ const cameraY = Number(activeCamera.position?.y || 0);
4136
+ const worldX = cameraX + ((fallback.centerX / safeWidth) - 0.5) * viewWidth;
4137
+ const worldY = cameraY + (0.5 - (fallback.centerY / safeHeight)) * viewHeight;
4138
+ const grid = Math.max(1, Number(this.GRID_SIZE || 10));
4139
+ const snappedWorldX = Math.round(worldX / grid) * grid;
4140
+ const snappedWorldY = Math.round(worldY / grid) * grid;
4141
+ const snappedCenterX = (((snappedWorldX - cameraX) / viewWidth) + 0.5) * safeWidth;
4142
+ const snappedCenterY = (0.5 - ((snappedWorldY - cameraY) / viewHeight)) * safeHeight;
4143
+
4144
+ return {
4145
+ centerX: Math.max(0, Math.min(safeWidth, snappedCenterX)),
4146
+ centerY: Math.max(0, Math.min(safeHeight, snappedCenterY))
4147
+ };
4148
+ }
4149
+
4114
4150
  _ensureLocalSnapGridLayer() {
4115
4151
  if (!this.container || typeof document === 'undefined') {
4116
4152
  return null;
@@ -4388,8 +4424,9 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4388
4424
  const centerY = hasPointer
4389
4425
  ? Math.max(0, Math.min(height, Number(this._lastSnapGridClientY) - top))
4390
4426
  : height / 2;
4391
- const layerLeft = centerX - LOCAL_SNAP_GRID_RADIUS_PX;
4392
- const layerTop = centerY - LOCAL_SNAP_GRID_RADIUS_PX;
4427
+ const snappedCenter = this._getLocalSnapGridSnappedScreenCenter(centerX, centerY, width, height, this.camera);
4428
+ const layerLeft = snappedCenter.centerX - LOCAL_SNAP_GRID_RADIUS_PX;
4429
+ const layerTop = snappedCenter.centerY - LOCAL_SNAP_GRID_RADIUS_PX;
4393
4430
 
4394
4431
  if (this.isZooming === true && !!this._lastLocalSnapGridKey) {
4395
4432
  const transformKey = `${Math.round(layerLeft * 2)}|${Math.round(layerTop * 2)}`;
@@ -4497,8 +4534,9 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4497
4534
  const centerY = hasPointer
4498
4535
  ? Math.max(0, Math.min(height, Number(this._lastSnapGridClientY) - top))
4499
4536
  : height / 2;
4500
- const layerLeft = centerX - LOCAL_SNAP_GRID_RADIUS_PX;
4501
- const layerTop = centerY - LOCAL_SNAP_GRID_RADIUS_PX;
4537
+ const snappedCenter = this._getLocalSnapGridSnappedScreenCenter(centerX, centerY, width, height, this.camera);
4538
+ const layerLeft = snappedCenter.centerX - LOCAL_SNAP_GRID_RADIUS_PX;
4539
+ const layerTop = snappedCenter.centerY - LOCAL_SNAP_GRID_RADIUS_PX;
4502
4540
  const transformKey = `${Math.round(layerLeft * 2)}|${Math.round(layerTop * 2)}`;
4503
4541
 
4504
4542
  if (transformKey !== this._lastLocalSnapGridTransformKey) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-4ns18VrUu0pBDI842quwLhm/+HKTrGh/OLelhZ3am1k=",
4
+ "hash": "sha256-xWHhfNfn3/NFVQ8lKCNPMeOhJwjh38wF9ezQURomDfE=",
5
5
  "fingerprinting": {
6
6
  "Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
7
7
  "Markdig.d1j7v41cl1.dll": "Markdig.dll",
@@ -123,16 +123,16 @@
123
123
  "System.brmz7yk5qh.dll": "System.dll",
124
124
  "netstandard.yvr3prsx0x.dll": "netstandard.dll",
125
125
  "System.Private.CoreLib.c1dbswx1b2.dll": "System.Private.CoreLib.dll",
126
- "MindExecution.Core.xsad4wu36e.dll": "MindExecution.Core.dll",
127
- "MindExecution.Kernel.n80deqs1y7.dll": "MindExecution.Kernel.dll",
128
- "MindExecution.Plugins.Admin.m5d94977um.dll": "MindExecution.Plugins.Admin.dll",
129
- "MindExecution.Plugins.Business.ntqdn1hta3.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.cjp3ty08t0.dll": "MindExecution.Plugins.Concept.dll",
131
- "MindExecution.Plugins.Directory.k4hx7g84qs.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.w9msy01tp9.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.iob4817wtf.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.lvqhaceogf.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.1otc7eb4qb.dll": "MindExecution.Web.dll",
126
+ "MindExecution.Core.y7ffihhajj.dll": "MindExecution.Core.dll",
127
+ "MindExecution.Kernel.l5y3qroa7p.dll": "MindExecution.Kernel.dll",
128
+ "MindExecution.Plugins.Admin.uuf238xa0h.dll": "MindExecution.Plugins.Admin.dll",
129
+ "MindExecution.Plugins.Business.nyr3v25v48.dll": "MindExecution.Plugins.Business.dll",
130
+ "MindExecution.Plugins.Concept.d70e7soqnf.dll": "MindExecution.Plugins.Concept.dll",
131
+ "MindExecution.Plugins.Directory.ju87t8h3zs.dll": "MindExecution.Plugins.Directory.dll",
132
+ "MindExecution.Plugins.PlanMaster.xg4mkokjr1.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.c631ocfbcp.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.km4gh9ya5b.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.lam9b8vdjf.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",
@@ -278,18 +278,18 @@
278
278
  "System.Xml.XDocument.sn51jas17n.dll": "sha256-GNI2kFgFmPTwzuzwUn8gxK+AzGLUWRJFdg9JzIbrybQ=",
279
279
  "System.brmz7yk5qh.dll": "sha256-CfM2miyj1KHApFmqMdLYWio3S/jrdON2pW9Xr2nTwlo=",
280
280
  "netstandard.yvr3prsx0x.dll": "sha256-EksNn8Luo4bOWqJ6X7dIe9qG9oOqwOVzjH2xYyMNi+E=",
281
- "MindExecution.Core.xsad4wu36e.dll": "sha256-D+Se8CCcof7akYxREkOQQzh0cTT/x7EqXhi+aNBo9mA=",
282
- "MindExecution.Kernel.n80deqs1y7.dll": "sha256-d7gGGpxiQNphs0at1uO1fAmYe28MFNVgGTEqxoM2uws=",
283
- "MindExecution.Plugins.Business.ntqdn1hta3.dll": "sha256-9cuauEjTbTWCFC5tZJZtf1uKn6XTO3KcM8nl+9JkIDc=",
284
- "MindExecution.Plugins.Concept.cjp3ty08t0.dll": "sha256-+FZtYvFT7aqaThaaATz4C7YmMZEDy3z8i2JcplL+fJs=",
285
- "MindExecution.Plugins.PlanMaster.w9msy01tp9.dll": "sha256-xBGl/hx1xJ1XCAy1wfZJv0/LSsm825PrufniNvTFpdk=",
286
- "MindExecution.Shared.lvqhaceogf.dll": "sha256-UXxhTxZwmtsqxr4Tf3DmjWKLbihsP91u88dZhsubRQU=",
287
- "MindExecution.Web.1otc7eb4qb.dll": "sha256-MTDmkh2BIm9fbntoCRCa6/Mt3rKi+dxD00cxRf671m8="
281
+ "MindExecution.Core.y7ffihhajj.dll": "sha256-zsCKUWBWzDly1h5/vMtqVRb7PeG4lgfIZbQuJFyY1QU=",
282
+ "MindExecution.Kernel.l5y3qroa7p.dll": "sha256-V4pQTxua0lGWpdsFpo7bHr6rPFWZeofry7e9On+OJmo=",
283
+ "MindExecution.Plugins.Business.nyr3v25v48.dll": "sha256-T4c7+fDE4TQAXAoFmHnYM+tT7RSvAM7W0VinLPoD+6U=",
284
+ "MindExecution.Plugins.Concept.d70e7soqnf.dll": "sha256-iU+GA8ky8EMgkX1HvaZnq7niGkGFADlPbbEZws5wBzs=",
285
+ "MindExecution.Plugins.PlanMaster.xg4mkokjr1.dll": "sha256-IbRqhxJiKStOUy36JNELSuIhbqNkaJNxKC9RdDtcdHM=",
286
+ "MindExecution.Shared.km4gh9ya5b.dll": "sha256-lG8xtDTFexPjilxL/kpzaW262mFdEHgt0oEPGPNZFz4=",
287
+ "MindExecution.Web.lam9b8vdjf.dll": "sha256-4+s+2+44kJjwUnoHpqPM8COug1NJCCJdFxr0ZRXzOvQ="
288
288
  },
289
289
  "lazyAssembly": {
290
- "MindExecution.Plugins.Admin.m5d94977um.dll": "sha256-Jt1vsUZkolnZk+PcV3ysNyL99SfPUVcUHwvBQ/Y+pR8=",
291
- "MindExecution.Plugins.Directory.k4hx7g84qs.dll": "sha256-DAR/VFVaR1noVv49Z1mWA5rnhP39REfl4pa9D5Mdvvk=",
292
- "MindExecution.Plugins.YouTube.iob4817wtf.dll": "sha256-IjCldqW4IxsEN2OEcaevPXQtlLBozhk7N+iRG2uKrtw="
290
+ "MindExecution.Plugins.Admin.uuf238xa0h.dll": "sha256-OrCIUack8nSWBBiZK65DlJ3YGM677RAA8cX/oJjhm5c=",
291
+ "MindExecution.Plugins.Directory.ju87t8h3zs.dll": "sha256-dapAkel5qj7fK6BiDDmvkzZL96frl8k/3yP8SDr3rMw=",
292
+ "MindExecution.Plugins.YouTube.c631ocfbcp.dll": "sha256-rMFZtm/5KmHnPJ2z3o4YhmghevxIElnnS59AgkRXjbo="
293
293
  }
294
294
  },
295
295
  "cacheBootResources": true,
@@ -1,5 +1,5 @@
1
1
  self.assetsManifest = {
2
- "version": "/Swsi38c",
2
+ "version": "NBKXAh9r",
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-B5uKSPKpIYDJXgbeZPzIL2gPYW/ZVLR2IZX1gnzLgyk=",
81
+ "hash": "sha256-T5U73XnB115kBUoRwO/5xm+idlSbeNKTOmEj27Y3wmA=",
82
82
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
83
83
  },
84
84
  {
@@ -410,44 +410,44 @@
410
410
  "url": "_framework/MimeMapping.og9ys58ylm.dll"
411
411
  },
412
412
  {
413
- "hash": "sha256-D+Se8CCcof7akYxREkOQQzh0cTT/x7EqXhi+aNBo9mA=",
414
- "url": "_framework/MindExecution.Core.xsad4wu36e.dll"
413
+ "hash": "sha256-zsCKUWBWzDly1h5/vMtqVRb7PeG4lgfIZbQuJFyY1QU=",
414
+ "url": "_framework/MindExecution.Core.y7ffihhajj.dll"
415
415
  },
416
416
  {
417
- "hash": "sha256-d7gGGpxiQNphs0at1uO1fAmYe28MFNVgGTEqxoM2uws=",
418
- "url": "_framework/MindExecution.Kernel.n80deqs1y7.dll"
417
+ "hash": "sha256-V4pQTxua0lGWpdsFpo7bHr6rPFWZeofry7e9On+OJmo=",
418
+ "url": "_framework/MindExecution.Kernel.l5y3qroa7p.dll"
419
419
  },
420
420
  {
421
- "hash": "sha256-Jt1vsUZkolnZk+PcV3ysNyL99SfPUVcUHwvBQ/Y+pR8=",
422
- "url": "_framework/MindExecution.Plugins.Admin.m5d94977um.dll"
421
+ "hash": "sha256-OrCIUack8nSWBBiZK65DlJ3YGM677RAA8cX/oJjhm5c=",
422
+ "url": "_framework/MindExecution.Plugins.Admin.uuf238xa0h.dll"
423
423
  },
424
424
  {
425
- "hash": "sha256-9cuauEjTbTWCFC5tZJZtf1uKn6XTO3KcM8nl+9JkIDc=",
426
- "url": "_framework/MindExecution.Plugins.Business.ntqdn1hta3.dll"
425
+ "hash": "sha256-T4c7+fDE4TQAXAoFmHnYM+tT7RSvAM7W0VinLPoD+6U=",
426
+ "url": "_framework/MindExecution.Plugins.Business.nyr3v25v48.dll"
427
427
  },
428
428
  {
429
- "hash": "sha256-+FZtYvFT7aqaThaaATz4C7YmMZEDy3z8i2JcplL+fJs=",
430
- "url": "_framework/MindExecution.Plugins.Concept.cjp3ty08t0.dll"
429
+ "hash": "sha256-iU+GA8ky8EMgkX1HvaZnq7niGkGFADlPbbEZws5wBzs=",
430
+ "url": "_framework/MindExecution.Plugins.Concept.d70e7soqnf.dll"
431
431
  },
432
432
  {
433
- "hash": "sha256-DAR/VFVaR1noVv49Z1mWA5rnhP39REfl4pa9D5Mdvvk=",
434
- "url": "_framework/MindExecution.Plugins.Directory.k4hx7g84qs.dll"
433
+ "hash": "sha256-dapAkel5qj7fK6BiDDmvkzZL96frl8k/3yP8SDr3rMw=",
434
+ "url": "_framework/MindExecution.Plugins.Directory.ju87t8h3zs.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-xBGl/hx1xJ1XCAy1wfZJv0/LSsm825PrufniNvTFpdk=",
438
- "url": "_framework/MindExecution.Plugins.PlanMaster.w9msy01tp9.dll"
437
+ "hash": "sha256-IbRqhxJiKStOUy36JNELSuIhbqNkaJNxKC9RdDtcdHM=",
438
+ "url": "_framework/MindExecution.Plugins.PlanMaster.xg4mkokjr1.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-IjCldqW4IxsEN2OEcaevPXQtlLBozhk7N+iRG2uKrtw=",
442
- "url": "_framework/MindExecution.Plugins.YouTube.iob4817wtf.dll"
441
+ "hash": "sha256-rMFZtm/5KmHnPJ2z3o4YhmghevxIElnnS59AgkRXjbo=",
442
+ "url": "_framework/MindExecution.Plugins.YouTube.c631ocfbcp.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-UXxhTxZwmtsqxr4Tf3DmjWKLbihsP91u88dZhsubRQU=",
446
- "url": "_framework/MindExecution.Shared.lvqhaceogf.dll"
445
+ "hash": "sha256-lG8xtDTFexPjilxL/kpzaW262mFdEHgt0oEPGPNZFz4=",
446
+ "url": "_framework/MindExecution.Shared.km4gh9ya5b.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-MTDmkh2BIm9fbntoCRCa6/Mt3rKi+dxD00cxRf671m8=",
450
- "url": "_framework/MindExecution.Web.1otc7eb4qb.dll"
449
+ "hash": "sha256-4+s+2+44kJjwUnoHpqPM8COug1NJCCJdFxr0ZRXzOvQ=",
450
+ "url": "_framework/MindExecution.Web.lam9b8vdjf.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-vHiMEaxrdO/yUO6InjfIIJ5Myy9/9LX0UkZolE4HAps=",
773
+ "hash": "sha256-+L8b48+RY+B5jUKR3TCnYLnKbBoKD2Dfd2snIzNSaTs=",
774
774
  "url": "_framework/blazor.boot.json"
775
775
  },
776
776
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: /Swsi38c */
1
+ /* Manifest version: NBKXAh9r */
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