@mindexec/cli 0.2.28 → 0.2.29

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.28",
3
+ "version": "0.2.29",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -12208,6 +12208,83 @@
12208
12208
  return item;
12209
12209
  }
12210
12210
 
12211
+ function createRemoteFleetStatusRail(items) {
12212
+ const rail = document.createElement('aside');
12213
+ rail.dataset.remoteFleetStatusRail = 'true';
12214
+ rail.style.cssText = `
12215
+ flex: 0 0 auto;
12216
+ align-self: flex-start;
12217
+ display: flex;
12218
+ flex-direction: column;
12219
+ gap: 3px;
12220
+ min-width: 132px;
12221
+ max-width: min(100%, 176px);
12222
+ padding: 5px 6px;
12223
+ border-radius: 7px;
12224
+ border: 1px solid rgba(148, 163, 184, 0.22);
12225
+ background: rgba(255, 255, 255, 0.70);
12226
+ `;
12227
+
12228
+ (items || []).forEach(item => {
12229
+ const tone = String(item?.tone || 'default');
12230
+ const row = document.createElement('div');
12231
+ row.dataset.remoteFleetStatusItem = item?.key || '';
12232
+ row.style.cssText = `
12233
+ display: grid;
12234
+ grid-template-columns: 7px minmax(0, 1fr) auto;
12235
+ align-items: center;
12236
+ gap: 5px;
12237
+ min-height: 16px;
12238
+ min-width: 0;
12239
+ `;
12240
+
12241
+ const dot = document.createElement('span');
12242
+ dot.style.cssText = `
12243
+ width: 7px;
12244
+ height: 7px;
12245
+ border-radius: 999px;
12246
+ background: ${tone === 'online' ? '#10b981' : tone === 'warn' ? '#f59e0b' : '#94a3b8'};
12247
+ box-shadow: ${tone === 'online' ? '0 0 0 3px rgba(16, 185, 129, 0.12)' : 'none'};
12248
+ `;
12249
+
12250
+ const labelEl = document.createElement('span');
12251
+ labelEl.textContent = item?.label || '';
12252
+ labelEl.style.cssText = `
12253
+ color: #64748b;
12254
+ font-size: 9px;
12255
+ font-weight: 850;
12256
+ line-height: 1;
12257
+ letter-spacing: 0;
12258
+ overflow: hidden;
12259
+ text-overflow: ellipsis;
12260
+ white-space: nowrap;
12261
+ text-transform: uppercase;
12262
+ `;
12263
+
12264
+ const valueEl = document.createElement('strong');
12265
+ valueEl.textContent = item?.value || '';
12266
+ valueEl.title = `${labelEl.textContent} ${valueEl.textContent}`.trim();
12267
+ valueEl.style.cssText = `
12268
+ color: ${tone === 'online' ? '#047857' : '#0f172a'};
12269
+ font-size: 10px;
12270
+ font-weight: 950;
12271
+ line-height: 1;
12272
+ letter-spacing: 0;
12273
+ max-width: 76px;
12274
+ overflow: hidden;
12275
+ text-overflow: ellipsis;
12276
+ white-space: nowrap;
12277
+ `;
12278
+
12279
+ row.appendChild(dot);
12280
+ row.appendChild(labelEl);
12281
+ row.appendChild(valueEl);
12282
+ rail.appendChild(row);
12283
+ });
12284
+
12285
+ return rail;
12286
+ }
12287
+
12211
12288
  function createRemoteFleetButton(label, title, action) {
12212
12289
  const button = document.createElement('button');
12213
12290
  button.type = 'button';
@@ -13306,18 +13383,32 @@
13306
13383
  }
13307
13384
  attachRemoteFleetTitleActions(bodyView, hostButton, stopHostButton, hostTargetState);
13308
13385
 
13309
- const top = document.createElement('div');
13310
- top.style.cssText = `
13311
- display: grid;
13312
- grid-template-columns: repeat(4, minmax(0, 1fr));
13313
- gap: 8px;
13314
- flex: 0 0 auto;
13315
- `;
13316
- top.appendChild(createRemoteFleetStat('Hub', hubStatus === 'online' ? 'Online' : 'Offline', hubStatus === 'online' ? 'online' : 'default'));
13317
- top.appendChild(createRemoteFleetStat('Connected', `${Number.isFinite(connected) ? connected : 0}/${Number.isFinite(total) ? total : devices.length}`, connected > 0 ? 'online' : 'default'));
13318
- top.appendChild(createRemoteFleetStat('Task', String(taskCapableCount), taskCapableCount > 0 ? 'online' : 'default'));
13319
- top.appendChild(createRemoteFleetStat('AI', String(aiCapableCount), aiCapableCount > 0 ? 'online' : 'default'));
13320
- bodyView.appendChild(top);
13386
+ const statusRail = createRemoteFleetStatusRail([
13387
+ {
13388
+ key: 'hub',
13389
+ label: 'Hub',
13390
+ value: hubStatus === 'online' ? 'Online' : 'Offline',
13391
+ tone: hubStatus === 'online' ? 'online' : 'default'
13392
+ },
13393
+ {
13394
+ key: 'connected',
13395
+ label: 'Connected',
13396
+ value: `${Number.isFinite(connected) ? connected : 0}/${Number.isFinite(total) ? total : devices.length}`,
13397
+ tone: connected > 0 ? 'online' : 'default'
13398
+ },
13399
+ {
13400
+ key: 'task',
13401
+ label: 'Task',
13402
+ value: String(taskCapableCount),
13403
+ tone: taskCapableCount > 0 ? 'online' : 'default'
13404
+ },
13405
+ {
13406
+ key: 'ai',
13407
+ label: 'AI',
13408
+ value: String(aiCapableCount),
13409
+ tone: aiCapableCount > 0 ? 'online' : 'default'
13410
+ }
13411
+ ]);
13321
13412
 
13322
13413
  const filterRow = document.createElement('div');
13323
13414
  filterRow.style.cssText = `
@@ -14238,6 +14329,7 @@
14238
14329
  monitorWorkspace.appendChild(createSelectedDevicePanel(selectedDevice));
14239
14330
  }
14240
14331
  bodyView.appendChild(monitorWorkspace);
14332
+ bodyView.appendChild(statusRail);
14241
14333
 
14242
14334
  const setTaskFeedback = (message, tone = 'info') => {
14243
14335
  taskFeedback.textContent = message || '';
@@ -558,7 +558,7 @@
558
558
  }
559
559
 
560
560
  const base = '_content/MindExecution.Shared/js/';
561
- const scriptVersion = '20260613-dom-cursor-v494';
561
+ const scriptVersion = '20260613-remote-status-rail-v495';
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": "m4oKu8Nx",
2
+ "version": "RMyUd5ec",
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-wZrUQUYTsiH7hkHaZPeEBdqG+r+e2UDR9vqZmyARSFg=",
89
+ "hash": "sha256-S8H0KuKhx8Fhbt07w1LBGxnBjT4km99JHDxzrHVFVho=",
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-6CFY94JBwL0ucGyOLKGUhtHcboWlYd/I3J3bnSVjxjM=",
837
+ "hash": "sha256-t14gn/m71KgCPH/qD7JKdV9e5WD4DsQVpId/vGYdorE=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: m4oKu8Nx */
1
+ /* Manifest version: RMyUd5ec */
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