@mindexec/cli 0.2.71 → 0.2.73

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.71",
3
+ "version": "0.2.73",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -714,11 +714,16 @@ try {
714
714
  Object.keys(child.dataset || {}).join(',') || child.tagName).join('|');
715
715
  assert.ok(bodyChildOrder.endsWith('remoteFleetStatusRail'), bodyChildOrder);
716
716
  assert.ok(statusFooter.style.cssText.includes('flex-direction: row'));
717
+ assert.ok(statusFooter.style.cssText.includes('justify-content: flex-end'));
717
718
  assert.match(statusFooter.style.cssText, /box-sizing:\s*border-box;/);
718
719
  assert.equal(statusFooter.querySelectorAll('[data-remote-fleet-status-item]').length, 5);
719
720
  assert.ok(statusFooter.querySelector('[data-remote-fleet-status-item="route"]'));
720
721
  const initialDetailPanel = bodyView.querySelector('[data-remote-fleet-detail-panel="true"]');
721
722
  assert.equal(initialDetailPanel?.dataset.deviceId, focusedDevice.DeviceId);
723
+ const initialSelectedCard = bodyView.querySelector(`article[data-device-id="${focusedDevice.DeviceId}"]`);
724
+ assert.equal(initialSelectedCard?.dataset.remoteFleetSelected, 'true');
725
+ assert.equal(initialSelectedCard?.getAttribute('aria-pressed'), 'true');
726
+ assert.ok(initialSelectedCard?.querySelector('[data-remote-fleet-selected-indicator="true"]'));
722
727
  assert.equal(bodyView.querySelectorAll('[data-remote-fleet-action="pin-device"]').length, 1);
723
728
  assert.equal(bodyView.querySelectorAll('[data-remote-fleet-action="task-device"]').length, 0);
724
729
  assert.equal(bodyView.querySelectorAll('[data-remote-fleet-action="thumbnail-device"]').length, focusedDevice.Connected && focusedDevice.ThumbnailEnabled ? 1 : 0);
@@ -755,6 +760,10 @@ try {
755
760
  alternateCard.dispatchEvent({ type: 'click' });
756
761
  assert.equal(bodyView.dataset.remoteFleetSelectedDeviceId, alternateDevice.DeviceId);
757
762
  assert.equal(bodyView.querySelector('[data-remote-fleet-detail-panel="true"]')?.dataset.deviceId, alternateDevice.DeviceId);
763
+ const selectedAfterClick = bodyView.querySelector(`article[data-device-id="${alternateDevice.DeviceId}"]`);
764
+ assert.equal(selectedAfterClick?.dataset.remoteFleetSelected, 'true');
765
+ assert.equal(selectedAfterClick?.getAttribute('aria-pressed'), 'true');
766
+ assert.ok(selectedAfterClick?.querySelector('[data-remote-fleet-selected-indicator="true"]'));
758
767
  const livePanel = bodyView.querySelector('[data-remote-fleet-live-panel="true"]');
759
768
  assert.equal(livePanel?.dataset.deviceId, focusedDevice.DeviceId);
760
769
  assert.equal(bodyView.querySelector('[data-remote-fleet-action="task-visible"]'), null);
@@ -784,17 +793,7 @@ try {
784
793
  assert.equal(bodyView.textContent.includes('Host: Active'), false);
785
794
  assert.equal(nodeShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'true');
786
795
  assert.equal(nodeShell.querySelector('[data-remote-fleet-action="set-host"]')?.textContent, 'Set Host');
787
- const stopHostButton = nodeShell.querySelector('[data-remote-fleet-action="stop-host"]');
788
- assert.ok(stopHostButton);
789
- const stopHostStart = dotNetCalls.length;
790
- stopHostButton.dispatchEvent({ type: 'click' });
791
- await wait();
792
- const stopHostCall = dotNetCalls
793
- .slice(stopHostStart)
794
- .find(call => call.methodName === 'SetRemoteFleetHostFromJs');
795
- assert.ok(stopHostCall);
796
- assert.equal(stopHostCall.args[0], 'remote-fleet-render-smoke');
797
- assert.equal(stopHostCall.args[1], false);
796
+ assert.equal(nodeShell.querySelector('[data-remote-fleet-action="stop-host"]'), null);
798
797
  hub.setHostTarget({
799
798
  nodeId: 'remote-fleet-render-smoke',
800
799
  enabled: false
@@ -12513,7 +12513,7 @@
12513
12513
  display: flex;
12514
12514
  flex-direction: row;
12515
12515
  align-items: center;
12516
- justify-content: center;
12516
+ justify-content: flex-end;
12517
12517
  gap: 6px;
12518
12518
  width: calc(100% - ${REMOTE_FLEET_CENTER_NUDGE_PX * 2}px);
12519
12519
  max-width: 100%;
@@ -12735,7 +12735,7 @@
12735
12735
  return button;
12736
12736
  }
12737
12737
 
12738
- function attachRemoteFleetTitleActions(bodyView, hostButton, stopHostButton, hostState) {
12738
+ function attachRemoteFleetTitleActions(bodyView, hostButton, hostState) {
12739
12739
  const container = bodyView?.closest?.('.map-node-remote-fleet');
12740
12740
  const header = container?.querySelector?.('.template-card__header')
12741
12741
  || container?.querySelector?.('.map-node-memo__header')
@@ -12771,9 +12771,6 @@
12771
12771
 
12772
12772
  titleActions.appendChild(indicator);
12773
12773
  titleActions.appendChild(hostButton);
12774
- if (stopHostButton) {
12775
- titleActions.appendChild(stopHostButton);
12776
- }
12777
12774
 
12778
12775
  if (header) {
12779
12776
  header.style.gridTemplateColumns = header.classList?.contains?.('template-card__header')
@@ -15011,15 +15008,7 @@
15011
15008
  hostButton.style.borderColor = isHostingTarget ? 'rgba(37, 99, 235, 0.44)' : 'rgba(37, 99, 235, 0.32)';
15012
15009
  hostButton.style.background = isHostingTarget ? 'rgba(239, 246, 255, 0.98)' : '#ffffff';
15013
15010
  hostButton.style.color = '#1d4ed8';
15014
- let stopHostButton = null;
15015
- if (isHostingTarget) {
15016
- stopHostButton = createRemoteFleetButton('Stop', 'Stop using this monitor as the host target.', 'stop-host');
15017
- stopHostButton.style.height = '30px';
15018
- stopHostButton.style.borderColor = 'rgba(239, 68, 68, 0.30)';
15019
- stopHostButton.style.color = '#b91c1c';
15020
- stopHostButton.style.background = 'rgba(254, 242, 242, 0.94)';
15021
- }
15022
- attachRemoteFleetTitleActions(bodyView, hostButton, stopHostButton, hostTargetState);
15011
+ attachRemoteFleetTitleActions(bodyView, hostButton, hostTargetState);
15023
15012
 
15024
15013
  const statusRail = createRemoteFleetStatusRail([
15025
15014
  {
@@ -15948,6 +15937,7 @@
15948
15937
  card.dataset.remoteFleetSelected = isSelected ? 'true' : 'false';
15949
15938
  card.dataset.remoteFleetAction = 'select-device';
15950
15939
  card.setAttribute('role', 'button');
15940
+ card.setAttribute('aria-pressed', isSelected ? 'true' : 'false');
15951
15941
  card.setAttribute('aria-label', `Show details for ${name}`);
15952
15942
  card.tabIndex = 0;
15953
15943
  card.title = name;
@@ -15972,6 +15962,30 @@
15972
15962
  user-select: none;
15973
15963
  `;
15974
15964
  card.appendChild(createDevicePreview(device, 'tile'));
15965
+ if (isSelected) {
15966
+ const selectedIndicator = document.createElement('span');
15967
+ selectedIndicator.dataset.remoteFleetSelectedIndicator = 'true';
15968
+ selectedIndicator.innerHTML = '<i class="fa-solid fa-check" aria-hidden="true"></i>';
15969
+ selectedIndicator.title = 'Selected screen';
15970
+ selectedIndicator.style.cssText = `
15971
+ position: absolute;
15972
+ right: 6px;
15973
+ top: 6px;
15974
+ width: 18px;
15975
+ height: 18px;
15976
+ display: inline-flex;
15977
+ align-items: center;
15978
+ justify-content: center;
15979
+ border-radius: 999px;
15980
+ background: #2563eb;
15981
+ color: #ffffff;
15982
+ font-size: 9px;
15983
+ line-height: 1;
15984
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.16), 0 8px 16px rgba(15, 23, 42, 0.16);
15985
+ pointer-events: none;
15986
+ `;
15987
+ card.appendChild(selectedIndicator);
15988
+ }
15975
15989
  grid.appendChild(card);
15976
15990
  });
15977
15991
 
@@ -16249,7 +16263,7 @@
16249
16263
  control.addEventListener(eventName, event => event.stopPropagation());
16250
16264
  });
16251
16265
  });
16252
- [hostButton, stopHostButton].forEach(control => {
16266
+ [hostButton].forEach(control => {
16253
16267
  if (!control) return;
16254
16268
  ['mousedown', 'mouseup', 'click', 'dblclick', 'keydown'].forEach(eventName => {
16255
16269
  control.addEventListener(eventName, event => event.stopPropagation());
@@ -16359,7 +16373,7 @@
16359
16373
  const setRemoteFleetHostTarget = async (enabled, options = {}) => {
16360
16374
  const quiet = options?.quiet === true;
16361
16375
  const renew = options?.renew === true || quiet;
16362
- const activeButton = enabled ? hostButton : stopHostButton;
16376
+ const activeButton = enabled ? hostButton : null;
16363
16377
  if (!quiet && activeButton) {
16364
16378
  activeButton.disabled = true;
16365
16379
  }
@@ -16409,14 +16423,6 @@
16409
16423
  await setRemoteFleetHostTarget(true);
16410
16424
  });
16411
16425
 
16412
- if (stopHostButton) {
16413
- stopHostButton.addEventListener('click', async event => {
16414
- event.preventDefault();
16415
- event.stopPropagation();
16416
- await setRemoteFleetHostTarget(false);
16417
- });
16418
- }
16419
-
16420
16426
  bodyView.querySelectorAll('[data-remote-fleet-action="pin-device"]').forEach(button => {
16421
16427
  button.addEventListener('click', async event => {
16422
16428
  event.preventDefault();
@@ -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-mac-image-submit-v526" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-mac-image-submit-v526" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260614-remote-monitor-no-stop-v528" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260614-remote-monitor-no-stop-v528" />
12
12
  <!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
13
13
  <link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
14
14
  <!-- ?꿎뼯??-->
@@ -579,7 +579,7 @@
579
579
  }
580
580
 
581
581
  const base = '_content/MindExecution.Shared/js/';
582
- const scriptVersion = '20260614-mac-image-submit-v526';
582
+ const scriptVersion = '20260614-remote-monitor-no-stop-v528';
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": "IYLeanCN",
2
+ "version": "d4LRzdfE",
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-zyFZF5acISTtKzhs2Y2vrhI/4eBB3lAKL6yiuYlV9dk=",
89
+ "hash": "sha256-DjKISYGUi+3HQOa9MQJYjRG1GbKw9oubNALH0YjyDzU=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -834,7 +834,7 @@
834
834
  "url": "image-manifest.json"
835
835
  },
836
836
  {
837
- "hash": "sha256-WY0JvKPysCqV9AymKm71//d2P/rWFCwaznPq3w5H9RM=",
837
+ "hash": "sha256-0kYKq5leJEhEiWAGy8flD4R+Ip+L1HNwLTpiz9XKKbc=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: IYLeanCN */
1
+ /* Manifest version: d4LRzdfE */
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