@mindexec/cli 0.2.172 → 0.2.174

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 (23) hide show
  1. package/package.json +1 -1
  2. package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
  3. package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
  4. package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
  5. package/server.js +69 -10
  6. package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +96 -0
  7. package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +34 -0
  8. package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +4 -0
  9. package/wwwroot/_framework/MindExecution.Core.2ftvuvqu67.dll +0 -0
  10. package/wwwroot/_framework/{MindExecution.Kernel.n5peonkatw.dll → MindExecution.Kernel.cmj7iee8oy.dll} +0 -0
  11. package/wwwroot/_framework/{MindExecution.Plugins.Admin.5zyeb2m709.dll → MindExecution.Plugins.Admin.5yrzrhtmmm.dll} +0 -0
  12. package/wwwroot/_framework/{MindExecution.Plugins.Business.jn5nc7okql.dll → MindExecution.Plugins.Business.a3bmsg1dnh.dll} +0 -0
  13. package/wwwroot/_framework/{MindExecution.Plugins.Concept.9wkocp9mtr.dll → MindExecution.Plugins.Concept.f9homr6n4i.dll} +0 -0
  14. package/wwwroot/_framework/{MindExecution.Plugins.Directory.1argo44nph.dll → MindExecution.Plugins.Directory.m7ysyihlbt.dll} +0 -0
  15. package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.esbz48id1o.dll → MindExecution.Plugins.PlanMaster.8wjvup3b7p.dll} +0 -0
  16. package/wwwroot/_framework/{MindExecution.Plugins.YouTube.84y9bi1gi2.dll → MindExecution.Plugins.YouTube.17ghd27wl4.dll} +0 -0
  17. package/wwwroot/_framework/{MindExecution.Shared.epgga7dnyq.dll → MindExecution.Shared.l8qcfxyzrh.dll} +0 -0
  18. package/wwwroot/_framework/{MindExecution.Web.33jjm5osx9.dll → MindExecution.Web.2k7mg1sk3c.dll} +0 -0
  19. package/wwwroot/_framework/blazor.boot.json +21 -21
  20. package/wwwroot/index.html +6 -6
  21. package/wwwroot/service-worker-assets.js +26 -26
  22. package/wwwroot/service-worker.js +1 -1
  23. package/wwwroot/_framework/MindExecution.Core.te2oaei5ec.dll +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.172",
3
+ "version": "0.2.174",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
package/server.js CHANGED
@@ -3350,6 +3350,9 @@ const remoteHub = createRemoteHub({
3350
3350
  const REMOTE_AGENT_STDIO_TAIL_CHARS = 12000;
3351
3351
  const REMOTE_AGENT_EARLY_EXIT_MS = 1200;
3352
3352
  const REMOTE_AGENT_READY_TIMEOUT_MS = 5000;
3353
+ const REMOTE_AGENT_READY_STALE_MS = Math.max(
3354
+ REMOTE_AGENT_READY_TIMEOUT_MS + 1000,
3355
+ Number(process.env.MINDEXEC_REMOTE_AGENT_READY_STALE_MS || 8000) || 8000);
3353
3356
  const REMOTE_AGENT_DEFAULT_ENGINE = 'auto';
3354
3357
  const REMOTE_AGENT_SYNC_REPORT_LOG_REPEAT_MS = 30000;
3355
3358
  const REMOTE_AGENT_SYNC_REPORT_WAKE_MS = Math.max(500, Number(process.env.MINDEXEC_REMOTE_AGENT_SYNC_REPORT_WAKE_MS || 1500) || 1500);
@@ -3607,33 +3610,61 @@ function shouldRestartRemoteAgentForTarget(managers = [], leaseId = '') {
3607
3610
  return true;
3608
3611
  }
3609
3612
 
3613
+ if (isRemoteAgentRunningButNotReadyStale()) {
3614
+ return true;
3615
+ }
3616
+
3610
3617
  return isRemoteAgentRegistryOwned()
3611
3618
  && isRemoteAgentSyncReportReconnectSignal(remoteAgentSyncReportState)
3612
3619
  && isRemoteAgentSyncReportForManagers(remoteAgentSyncReportState, managers, leaseId);
3613
3620
  }
3614
3621
 
3615
- function markRemoteAgentReconnectNeededFromReport(report) {
3616
- if (!isRemoteAgentRegistryOwned()
3617
- || !isRemoteAgentSyncReportReconnectSignal(report)
3618
- || !isRemoteAgentSyncReportForManagers(report, remoteAgentState.managerCandidates, remoteAgentState.leaseId)) {
3622
+ function markRemoteAgentReconnectNeeded(reason = 'agent-disconnected', wakeReason = 'agent-disconnected') {
3623
+ if (!isRemoteAgentRegistryOwned()) {
3619
3624
  return false;
3620
3625
  }
3621
3626
 
3622
- const reason = safeRemoteAgentField(report.reason || report.error || 'sync-report-disconnected', 160);
3627
+ const safeReason = safeRemoteAgentField(reason || 'agent-disconnected', 160);
3623
3628
  if (remoteAgentState.needsReconnect !== true) {
3624
3629
  logWarn(
3625
3630
  'remote',
3626
- `managed RemoteAgent marked stale from sync report ${formatKeyValue('reason', reason)} ${formatKeyValue('manager', remoteAgentState.manager || '-')}`);
3631
+ `managed RemoteAgent marked stale ${formatKeyValue('reason', safeReason)} ${formatKeyValue('manager', remoteAgentState.manager || '-')}`);
3627
3632
  }
3633
+
3634
+ remoteAgentState.ready = false;
3628
3635
  remoteAgentState.needsReconnect = true;
3629
- remoteAgentState.reconnectReason = reason;
3630
- remoteAgentState.lastError = reason;
3636
+ remoteAgentState.reconnectReason = safeReason;
3637
+ remoteAgentState.lastError = safeReason;
3631
3638
  remoteAgentState.updatedAt = new Date().toISOString();
3632
3639
  emitBridgeEvent('RemoteAgentNeedsReconnect', serializeRemoteAgentState());
3633
- scheduleRemoteRegistryFollower(0, 'agent-sync-report-disconnected');
3640
+ scheduleRemoteRegistryFollower(0, wakeReason || safeReason);
3634
3641
  return true;
3635
3642
  }
3636
3643
 
3644
+ function markRemoteAgentReconnectNeededFromReport(report) {
3645
+ if (!isRemoteAgentRegistryOwned()
3646
+ || !isRemoteAgentSyncReportReconnectSignal(report)
3647
+ || !isRemoteAgentSyncReportForManagers(report, remoteAgentState.managerCandidates, remoteAgentState.leaseId)) {
3648
+ return false;
3649
+ }
3650
+
3651
+ const reason = safeRemoteAgentField(report.reason || report.error || 'sync-report-disconnected', 160);
3652
+ return markRemoteAgentReconnectNeeded(reason, 'agent-sync-report-disconnected');
3653
+ }
3654
+
3655
+ function isRemoteAgentOutputReconnectSignal(text) {
3656
+ const normalized = String(text || '').toLowerCase();
3657
+ if (!normalized) {
3658
+ return false;
3659
+ }
3660
+
3661
+ if (/connected to remotehub/i.test(normalized) && !/(disconnect|closed|failed|econnreset|etimedout|epipe|socket|websocket|remotehub.*error)/i.test(normalized)) {
3662
+ return false;
3663
+ }
3664
+
3665
+ return /(remotehub.*(disconnect|closed|failed|error)|manager.*(disconnect|closed|failed)|connection.*(closed|lost|reset|refused|failed)|socket.*(closed|reset|hang up)|websocket.*(close|closed|failed)|ws.*(close|closed|failed)|econnreset|read econnreset|etimedout|ehostunreach|enetunreach|epipe|agent-disconnected|remotehub rejected|remotefast agent failed)/i.test(normalized);
3666
+ }
3667
+
3637
3668
  function rememberRemoteAgentSyncReport(report) {
3638
3669
  remoteAgentSyncReportState = report;
3639
3670
  const reason = report.reason || report.error || (report.ok ? 'ok' : 'failed');
@@ -3687,6 +3718,9 @@ function appendRemoteAgentOutput(stream, chunk, stateConnectionKey = '') {
3687
3718
  remoteAgentState.needsReconnect = false;
3688
3719
  remoteAgentState.reconnectReason = '';
3689
3720
  }
3721
+ if (isRemoteAgentOutputReconnectSignal(text)) {
3722
+ markRemoteAgentReconnectNeeded('process-output-disconnected', 'agent-process-output-disconnected');
3723
+ }
3690
3724
  remoteAgentState.updatedAt = new Date().toISOString();
3691
3725
  }
3692
3726
 
@@ -4020,6 +4054,17 @@ function isRemoteAgentProcessRunning() {
4020
4054
  && !proc.killed;
4021
4055
  }
4022
4056
 
4057
+ function getRemoteAgentRunningAgeMs(agent = remoteAgentState) {
4058
+ const startedAt = Date.parse(agent?.startedAt || agent?.updatedAt || '');
4059
+ return Number.isFinite(startedAt) ? Math.max(0, Date.now() - startedAt) : 0;
4060
+ }
4061
+
4062
+ function isRemoteAgentRunningButNotReadyStale() {
4063
+ return isRemoteAgentRegistryOwned()
4064
+ && remoteAgentState.ready !== true
4065
+ && getRemoteAgentRunningAgeMs(remoteAgentState) >= REMOTE_AGENT_READY_STALE_MS;
4066
+ }
4067
+
4023
4068
  function isRemoteAgentRegistryOwned() {
4024
4069
  return isRemoteAgentProcessRunning()
4025
4070
  && /registry/i.test(String(remoteAgentState.source || ''));
@@ -4418,7 +4463,11 @@ async function startRemoteAgentConnection(options = {}) {
4418
4463
  if (isRemoteAgentProcessRunning()
4419
4464
  && activeConnectionKeys.has(remoteAgentState.connectionKey)) {
4420
4465
  if (shouldRestartRemoteAgentForTarget(managers, leaseId)) {
4421
- const reason = remoteAgentState.reconnectReason || remoteAgentState.lastError || 'registry-agent-stale';
4466
+ const reason = remoteAgentState.reconnectReason
4467
+ || remoteAgentState.lastError
4468
+ || (isRemoteAgentRunningButNotReadyStale()
4469
+ ? 'registry-agent-not-ready'
4470
+ : 'registry-agent-stale');
4422
4471
  logWarn(
4423
4472
  'remote',
4424
4473
  `managed RemoteAgent restarting stale registry process ${formatKeyValue('manager', remoteAgentState.manager || managers[0])} ${formatKeyValue('reason', reason)}`);
@@ -4483,6 +4532,16 @@ function appendRemoteAgentAttemptOutput(attempt, stream, chunk) {
4483
4532
  attempt.state.needsReconnect = false;
4484
4533
  attempt.state.reconnectReason = '';
4485
4534
  }
4535
+ if (isRemoteAgentOutputReconnectSignal(text)) {
4536
+ attempt.state.ready = false;
4537
+ attempt.state.needsReconnect = true;
4538
+ attempt.state.reconnectReason = 'process-output-disconnected';
4539
+ attempt.state.lastError = 'process-output-disconnected';
4540
+ if (remoteAgentState === attempt.state
4541
+ && isRemoteAgentRegistryState(attempt.state)) {
4542
+ markRemoteAgentReconnectNeeded('process-output-disconnected', 'agent-process-output-disconnected');
4543
+ }
4544
+ }
4486
4545
  attempt.state.updatedAt = new Date().toISOString();
4487
4546
  }
4488
4547
 
@@ -456,6 +456,14 @@ body.is-panning .map-node-memo__icon-popover {
456
456
  letter-spacing: 0;
457
457
  }
458
458
 
459
+ .mindcanvas-toolbar-menu__subtitle {
460
+ margin: -1px 2px 8px;
461
+ color: #64748b;
462
+ font-size: 11px;
463
+ font-weight: 620;
464
+ line-height: 1.35;
465
+ }
466
+
459
467
  .mindcanvas-toolbar-menu__format-list {
460
468
  display: grid;
461
469
  grid-template-columns: repeat(3, minmax(0, 1fr));
@@ -2760,6 +2768,94 @@ body.mindcanvas-is-dense .css3d-resolution-wrapper.node-type-templatelauncher.se
2760
2768
  background: #f8fafc;
2761
2769
  }
2762
2770
 
2771
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle {
2772
+ position: absolute;
2773
+ z-index: 30;
2774
+ pointer-events: auto;
2775
+ touch-action: none;
2776
+ opacity: 0;
2777
+ border: 1px solid rgba(37, 99, 235, 0.38);
2778
+ background: rgba(255, 255, 255, 0.82);
2779
+ box-shadow: 0 2px 7px rgba(37, 99, 235, 0.12);
2780
+ transition: opacity 120ms ease, background 120ms ease, border-color 120ms ease;
2781
+ }
2782
+
2783
+ .css3d-resolution-wrapper.selected .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle,
2784
+ .map-node-template-card.map-node-remote-fleet:hover .remote-fleet-resize-handle,
2785
+ .map-node-template-card.map-node-remote-fleet:focus-within .remote-fleet-resize-handle {
2786
+ opacity: 0.78;
2787
+ }
2788
+
2789
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle:hover {
2790
+ opacity: 1;
2791
+ border-color: rgba(37, 99, 235, 0.72);
2792
+ background: rgba(239, 246, 255, 0.96);
2793
+ }
2794
+
2795
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.nw,
2796
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.ne,
2797
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.sw,
2798
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.se {
2799
+ width: 18px;
2800
+ height: 18px;
2801
+ }
2802
+
2803
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.nw {
2804
+ top: -6px;
2805
+ left: -6px;
2806
+ cursor: nwse-resize;
2807
+ }
2808
+
2809
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.ne {
2810
+ top: -6px;
2811
+ right: -6px;
2812
+ cursor: nesw-resize;
2813
+ }
2814
+
2815
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.sw {
2816
+ bottom: -6px;
2817
+ left: -6px;
2818
+ cursor: nesw-resize;
2819
+ }
2820
+
2821
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.se {
2822
+ right: -6px;
2823
+ bottom: -6px;
2824
+ cursor: nwse-resize;
2825
+ }
2826
+
2827
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.n,
2828
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.s {
2829
+ left: 14px;
2830
+ right: 14px;
2831
+ height: 12px;
2832
+ cursor: ns-resize;
2833
+ }
2834
+
2835
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.n {
2836
+ top: -5px;
2837
+ }
2838
+
2839
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.s {
2840
+ bottom: -5px;
2841
+ }
2842
+
2843
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.w,
2844
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.e {
2845
+ top: 14px;
2846
+ bottom: 14px;
2847
+ width: 12px;
2848
+ cursor: ew-resize;
2849
+ }
2850
+
2851
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.w {
2852
+ left: -5px;
2853
+ }
2854
+
2855
+ .map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.e {
2856
+ right: -5px;
2857
+ }
2858
+
2763
2859
  .map-node-template-card.map-node-remote-fleet .template-card__header--remote-fleet {
2764
2860
  align-items: center;
2765
2861
  }
@@ -12544,6 +12544,37 @@
12544
12544
  return title;
12545
12545
  }
12546
12546
 
12547
+ function ensureRemoteFleetResizeHandles(container, nodeModel) {
12548
+ if (!container) return;
12549
+ const nodeId = String(nodeModel?.id ?? nodeModel?.Id ?? container.dataset?.nodeId ?? '').trim();
12550
+ if (!nodeId) return;
12551
+
12552
+ container.dataset.nodeId = nodeId;
12553
+ const handles = [
12554
+ { className: 'nw', corner: 'TL' },
12555
+ { className: 'ne', corner: 'TR' },
12556
+ { className: 'sw', corner: 'BL' },
12557
+ { className: 'se', corner: 'BR' },
12558
+ { className: 'n', corner: 'T' },
12559
+ { className: 's', corner: 'B' },
12560
+ { className: 'w', corner: 'L' },
12561
+ { className: 'e', corner: 'R' }
12562
+ ];
12563
+
12564
+ handles.forEach(handleInfo => {
12565
+ let handle = container.querySelector(`:scope > .remote-fleet-resize-handle.${handleInfo.className}`);
12566
+ if (!handle) {
12567
+ handle = document.createElement('div');
12568
+ handle.className = `resize-handle remote-fleet-resize-handle ${handleInfo.className}`;
12569
+ handle.setAttribute('aria-hidden', 'true');
12570
+ container.appendChild(handle);
12571
+ }
12572
+
12573
+ handle.dataset.nodeId = nodeId;
12574
+ handle.dataset.corner = handleInfo.corner;
12575
+ });
12576
+ }
12577
+
12547
12578
  function createRemoteFleetTemplateNodeElement(nodeModel) {
12548
12579
  const width = Number(nodeModel.width ?? nodeModel.Width ?? 960);
12549
12580
  const height = Number(nodeModel.height ?? nodeModel.Height ?? 620);
@@ -12559,6 +12590,7 @@
12559
12590
  container.style.cssText = `
12560
12591
  width: ${width}px;
12561
12592
  height: ${height}px;
12593
+ position: relative;
12562
12594
  box-sizing: border-box;
12563
12595
  overflow: hidden;
12564
12596
  pointer-events: auto;
@@ -12595,6 +12627,7 @@
12595
12627
  shell.appendChild(bodyView);
12596
12628
 
12597
12629
  container.appendChild(shell);
12630
+ ensureRemoteFleetResizeHandles(container, nodeModel);
12598
12631
  return container;
12599
12632
  }
12600
12633
 
@@ -22730,6 +22763,7 @@
22730
22763
  card.style.maxHeight = `${worldHeight}px`;
22731
22764
  card.style.transform = `scale(${resolutionScale})`;
22732
22765
  card.style.transformOrigin = '0 0';
22766
+ ensureRemoteFleetResizeHandles(card, nodeModel);
22733
22767
 
22734
22768
  const titleEl = card.querySelector('.template-card__title');
22735
22769
  if (titleEl) {
@@ -2958,6 +2958,10 @@ window.MindMapInteractions = (function () {
2958
2958
  if (handleElement.classList?.contains('ne')) return 'TR';
2959
2959
  if (handleElement.classList?.contains('sw')) return 'BL';
2960
2960
  if (handleElement.classList?.contains('se')) return 'BR';
2961
+ if (handleElement.classList?.contains('n')) return 'T';
2962
+ if (handleElement.classList?.contains('s')) return 'B';
2963
+ if (handleElement.classList?.contains('w')) return 'L';
2964
+ if (handleElement.classList?.contains('e')) return 'R';
2961
2965
  return 'BR';
2962
2966
  }
2963
2967
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-VbzQ9FDVKv1k9HSQjBpufXXSFyypvSzDv6diX7R22Pw=",
4
+ "hash": "sha256-PO0qRV/C0SCkvzqZkkY4WN4RjSGitnePoKjU1GUYI9M=",
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.te2oaei5ec.dll": "MindExecution.Core.dll",
127
- "MindExecution.Kernel.n5peonkatw.dll": "MindExecution.Kernel.dll",
128
- "MindExecution.Plugins.Admin.5zyeb2m709.dll": "MindExecution.Plugins.Admin.dll",
129
- "MindExecution.Plugins.Business.jn5nc7okql.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.9wkocp9mtr.dll": "MindExecution.Plugins.Concept.dll",
131
- "MindExecution.Plugins.Directory.1argo44nph.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.esbz48id1o.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.84y9bi1gi2.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.epgga7dnyq.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.33jjm5osx9.dll": "MindExecution.Web.dll",
126
+ "MindExecution.Core.2ftvuvqu67.dll": "MindExecution.Core.dll",
127
+ "MindExecution.Kernel.cmj7iee8oy.dll": "MindExecution.Kernel.dll",
128
+ "MindExecution.Plugins.Admin.5yrzrhtmmm.dll": "MindExecution.Plugins.Admin.dll",
129
+ "MindExecution.Plugins.Business.a3bmsg1dnh.dll": "MindExecution.Plugins.Business.dll",
130
+ "MindExecution.Plugins.Concept.f9homr6n4i.dll": "MindExecution.Plugins.Concept.dll",
131
+ "MindExecution.Plugins.Directory.m7ysyihlbt.dll": "MindExecution.Plugins.Directory.dll",
132
+ "MindExecution.Plugins.PlanMaster.8wjvup3b7p.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.17ghd27wl4.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.l8qcfxyzrh.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.2k7mg1sk3c.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.te2oaei5ec.dll": "sha256-yzvF/UwfBMiJb2zQvlW0HSNU9VJeFPsgsB40BszINvc=",
282
- "MindExecution.Kernel.n5peonkatw.dll": "sha256-JfXgzqcnjRbW+XlMja53/jDG+/10sNVp+2V4F8w9s+Q=",
283
- "MindExecution.Plugins.Concept.9wkocp9mtr.dll": "sha256-yR8J6X8EHVEsX8HoKv4qEiXDb2svFAgOHpRUHysPW3k=",
284
- "MindExecution.Plugins.PlanMaster.esbz48id1o.dll": "sha256-birepmbiBhlyA+hKwmofYfcG/PQzltuAi/ArgJITews=",
285
- "MindExecution.Shared.epgga7dnyq.dll": "sha256-bvGDhZ63Omm5J7Wi24jWJrR9BfXgAC4kOGdfu8Oo2xM=",
286
- "MindExecution.Web.33jjm5osx9.dll": "sha256-oY6r6MMAQn+tTAjj3OBUfb5vFTu8/ARH0tGsxDHzf9Y="
281
+ "MindExecution.Core.2ftvuvqu67.dll": "sha256-roAm0R9R5EcvDmkddrRfPBxzes/NOMAywwP1kFGVHvM=",
282
+ "MindExecution.Kernel.cmj7iee8oy.dll": "sha256-FIkseVYemh0/JXJjh3ylkXh1MdTOoIke4SAFlsdI/3E=",
283
+ "MindExecution.Plugins.Concept.f9homr6n4i.dll": "sha256-Y6+S8b90AT5bLANz/TFdYE4F9Ch3+mELZyaeamp2gXo=",
284
+ "MindExecution.Plugins.PlanMaster.8wjvup3b7p.dll": "sha256-iLfp4RHpNuzU11GA0tPbNx8dv5SPe7rA/fwkJBirgkU=",
285
+ "MindExecution.Shared.l8qcfxyzrh.dll": "sha256-1YLqE/8OfihJWNS2fvZMe2G21q5gfMtz0HEq2yzqgxc=",
286
+ "MindExecution.Web.2k7mg1sk3c.dll": "sha256-wkOKwT98ZcpOu8xkmP7nvXCNnaH0i0DoioXyjNBhQ94="
287
287
  },
288
288
  "lazyAssembly": {
289
- "MindExecution.Plugins.Admin.5zyeb2m709.dll": "sha256-kfvMS18tjQsoBT/nL40x6HiLaNM3Ls5G71Fk4skXtLg=",
290
- "MindExecution.Plugins.Business.jn5nc7okql.dll": "sha256-XwSTzDqTVFI7Ok/VMeaIQW/zbIp0Lx7dvWJ8QC7K3w8=",
291
- "MindExecution.Plugins.Directory.1argo44nph.dll": "sha256-GZZuAT3WZd9wDjQd+H8f6V9R2UYeLl/VOZxl9BnQVO0=",
292
- "MindExecution.Plugins.YouTube.84y9bi1gi2.dll": "sha256-CGhi65JywxbQoa9uhGP+3/fLvOCrbEbGDea2P8M0m2M="
289
+ "MindExecution.Plugins.Admin.5yrzrhtmmm.dll": "sha256-Padus/RMWHdWsMVmnTLAfPB0wwRhGx5hGfEYfDbjEvg=",
290
+ "MindExecution.Plugins.Business.a3bmsg1dnh.dll": "sha256-pg1rtZgWTHpigzwMuI6jMBjEyQA8EeCfjdkKJY0BYos=",
291
+ "MindExecution.Plugins.Directory.m7ysyihlbt.dll": "sha256-zim6x3zNF7DoFE2KXc1CLnsJ46NvM5s8VAZMdq/7fZY=",
292
+ "MindExecution.Plugins.YouTube.17ghd27wl4.dll": "sha256-w65qTL5GeBT8ecV4KnEXGD5NMUcgE4iSAlCi/i4YYkU="
293
293
  }
294
294
  },
295
295
  "cacheBootResources": true,
@@ -4,11 +4,11 @@
4
4
  <head>
5
5
  <meta charset="utf-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>MindExec | Run your ideas as AI task graphs</title>
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." />
7
+ <title>MindExec | Business Execution OS for solo builders</title>
8
+ <meta name="description" content="MindExec is an AI business execution OS for solo builders who want to turn notes, research, assets, and repeatable execution Skills into revenue-producing work." />
9
9
  <base href="/" />
10
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-mdm-resize-reconnect-v601" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-mdm-resize-reconnect-v601" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-business-execution-os-v604" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-business-execution-os-v604" />
12
12
  <!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
13
13
  <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
14
14
  <!-- ?꿎뼯??-->
@@ -97,7 +97,7 @@
97
97
  <article class="app-static-fallback" id="app-static-fallback">
98
98
  <div class="app-static-fallback__eyebrow">MindExec</div>
99
99
  <h1>MindExec</h1>
100
- <p>Run your ideas as AI task graphs. MindExec starts with free browser tools for markdown previews, README checks, notes, and clipboard capture. When the work becomes worth saving, move it into MindCanvas for persistent projects, AI-assisted organization, and visual workflows.</p>
100
+ <p>Turn ideas into revenue execution. MindExec is a Business Execution OS that moves serious work into MindCanvas, where context, AI Tasks, execution Skills, media, and results stay connected.</p>
101
101
  <p><a href="/mindcanvas">Open MindCanvas</a> | <a href="/pricing">See pricing</a> | <a href="/tools">Browse free tools</a></p>
102
102
  <noscript>
103
103
  <p>JavaScript is required for the interactive tool experience.</p>
@@ -579,7 +579,7 @@
579
579
  }
580
580
 
581
581
  const base = '_content/MindExecution.Shared/js/';
582
- const scriptVersion = '20260617-mdm-resize-reconnect-v601';
582
+ const scriptVersion = '20260617-business-execution-os-v604';
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": "+QtDGuJR",
2
+ "version": "2cIg9Ur2",
3
3
  "assets": [
4
4
  {
5
5
  "hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
@@ -42,7 +42,7 @@
42
42
  "url": "_content/MindExecution.Shared/css/app.css"
43
43
  },
44
44
  {
45
- "hash": "sha256-VyGjzwCd9WoJ0gu1JXBtSoLcGDHgxgkAnE+q6Pcza0s=",
45
+ "hash": "sha256-3VvOK3TEYopH8gdNweOO+vbl4QsoekgenYV1HuU5q7k=",
46
46
  "url": "_content/MindExecution.Shared/css/mind-map-overrides.css"
47
47
  },
48
48
  {
@@ -86,7 +86,7 @@
86
86
  "url": "_content/MindExecution.Shared/js/mind-map-core.js.backup"
87
87
  },
88
88
  {
89
- "hash": "sha256-HUh8SFzEyHEcNhTeXl4RhIDL2N8FGgQ2loi+CMn8ZWk=",
89
+ "hash": "sha256-6dKXU8IIa84Vj+0pbgSEl5ju2n7Rv8ADCVEMQ+2SPFY=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -106,7 +106,7 @@
106
106
  "url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
107
107
  },
108
108
  {
109
- "hash": "sha256-l1g4NKeSMjorH0cZmdjmzRef2W6vPhmZgoNeo4TWKl8=",
109
+ "hash": "sha256-JI+LT7R0ketlHrXy9bmGYhz17hSJ002YmX+TcqftALY=",
110
110
  "url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
111
111
  },
112
112
  {
@@ -410,44 +410,44 @@
410
410
  "url": "_framework/MimeMapping.og9ys58ylm.dll"
411
411
  },
412
412
  {
413
- "hash": "sha256-yzvF/UwfBMiJb2zQvlW0HSNU9VJeFPsgsB40BszINvc=",
414
- "url": "_framework/MindExecution.Core.te2oaei5ec.dll"
413
+ "hash": "sha256-roAm0R9R5EcvDmkddrRfPBxzes/NOMAywwP1kFGVHvM=",
414
+ "url": "_framework/MindExecution.Core.2ftvuvqu67.dll"
415
415
  },
416
416
  {
417
- "hash": "sha256-JfXgzqcnjRbW+XlMja53/jDG+/10sNVp+2V4F8w9s+Q=",
418
- "url": "_framework/MindExecution.Kernel.n5peonkatw.dll"
417
+ "hash": "sha256-FIkseVYemh0/JXJjh3ylkXh1MdTOoIke4SAFlsdI/3E=",
418
+ "url": "_framework/MindExecution.Kernel.cmj7iee8oy.dll"
419
419
  },
420
420
  {
421
- "hash": "sha256-kfvMS18tjQsoBT/nL40x6HiLaNM3Ls5G71Fk4skXtLg=",
422
- "url": "_framework/MindExecution.Plugins.Admin.5zyeb2m709.dll"
421
+ "hash": "sha256-Padus/RMWHdWsMVmnTLAfPB0wwRhGx5hGfEYfDbjEvg=",
422
+ "url": "_framework/MindExecution.Plugins.Admin.5yrzrhtmmm.dll"
423
423
  },
424
424
  {
425
- "hash": "sha256-XwSTzDqTVFI7Ok/VMeaIQW/zbIp0Lx7dvWJ8QC7K3w8=",
426
- "url": "_framework/MindExecution.Plugins.Business.jn5nc7okql.dll"
425
+ "hash": "sha256-pg1rtZgWTHpigzwMuI6jMBjEyQA8EeCfjdkKJY0BYos=",
426
+ "url": "_framework/MindExecution.Plugins.Business.a3bmsg1dnh.dll"
427
427
  },
428
428
  {
429
- "hash": "sha256-yR8J6X8EHVEsX8HoKv4qEiXDb2svFAgOHpRUHysPW3k=",
430
- "url": "_framework/MindExecution.Plugins.Concept.9wkocp9mtr.dll"
429
+ "hash": "sha256-Y6+S8b90AT5bLANz/TFdYE4F9Ch3+mELZyaeamp2gXo=",
430
+ "url": "_framework/MindExecution.Plugins.Concept.f9homr6n4i.dll"
431
431
  },
432
432
  {
433
- "hash": "sha256-GZZuAT3WZd9wDjQd+H8f6V9R2UYeLl/VOZxl9BnQVO0=",
434
- "url": "_framework/MindExecution.Plugins.Directory.1argo44nph.dll"
433
+ "hash": "sha256-zim6x3zNF7DoFE2KXc1CLnsJ46NvM5s8VAZMdq/7fZY=",
434
+ "url": "_framework/MindExecution.Plugins.Directory.m7ysyihlbt.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-birepmbiBhlyA+hKwmofYfcG/PQzltuAi/ArgJITews=",
438
- "url": "_framework/MindExecution.Plugins.PlanMaster.esbz48id1o.dll"
437
+ "hash": "sha256-iLfp4RHpNuzU11GA0tPbNx8dv5SPe7rA/fwkJBirgkU=",
438
+ "url": "_framework/MindExecution.Plugins.PlanMaster.8wjvup3b7p.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-CGhi65JywxbQoa9uhGP+3/fLvOCrbEbGDea2P8M0m2M=",
442
- "url": "_framework/MindExecution.Plugins.YouTube.84y9bi1gi2.dll"
441
+ "hash": "sha256-w65qTL5GeBT8ecV4KnEXGD5NMUcgE4iSAlCi/i4YYkU=",
442
+ "url": "_framework/MindExecution.Plugins.YouTube.17ghd27wl4.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-bvGDhZ63Omm5J7Wi24jWJrR9BfXgAC4kOGdfu8Oo2xM=",
446
- "url": "_framework/MindExecution.Shared.epgga7dnyq.dll"
445
+ "hash": "sha256-1YLqE/8OfihJWNS2fvZMe2G21q5gfMtz0HEq2yzqgxc=",
446
+ "url": "_framework/MindExecution.Shared.l8qcfxyzrh.dll"
447
447
  },
448
448
  {
449
- "hash": "sha256-oY6r6MMAQn+tTAjj3OBUfb5vFTu8/ARH0tGsxDHzf9Y=",
450
- "url": "_framework/MindExecution.Web.33jjm5osx9.dll"
449
+ "hash": "sha256-wkOKwT98ZcpOu8xkmP7nvXCNnaH0i0DoioXyjNBhQ94=",
450
+ "url": "_framework/MindExecution.Web.2k7mg1sk3c.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-VDxne0z23poLPLBSJ7cGId3lvBOoMAeHimT6xgr+Gqw=",
773
+ "hash": "sha256-LNd2lHcfHaHXsMsTC3qIacrF6mA/jhXKMjx7uU1/98Y=",
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-Qf6M96T+/y2AJeF+gEWuIhhNYDBYOFI/M7pLU8fiUfM=",
837
+ "hash": "sha256-a9d5TwibgvTP1dMLk0k50u9Gcj1DArMoZAK+cCYOViY=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: +QtDGuJR */
1
+ /* Manifest version: 2cIg9Ur2 */
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