@mindexec/cli 0.2.148 → 0.2.150
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
|
@@ -945,12 +945,12 @@ try {
|
|
|
945
945
|
assert.match(cards[0]?.title || '', /Seen:/);
|
|
946
946
|
assert.match(cards[0]?.title || '', /Uptime:/);
|
|
947
947
|
assert.equal(/\b(Seen|Uptime|Mem|Load)\b/.test(cards[0]?.textContent || ''), false);
|
|
948
|
-
assert.match(deviceGrid.style.cssText, /minmax\(
|
|
948
|
+
assert.match(deviceGrid.style.cssText, /minmax\(198px,\s*1fr\)/);
|
|
949
949
|
sizeControls.querySelector('[data-remote-fleet-action="monitor-size-up"]').dispatchEvent({ type: 'click' });
|
|
950
950
|
assert.equal(bodyView.dataset.remoteFleetDensity, 'large');
|
|
951
|
-
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(
|
|
951
|
+
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(297px,\s*1fr\)/);
|
|
952
952
|
assert.equal(mirrorBodyView.dataset.remoteFleetDensity, 'large');
|
|
953
|
-
assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(
|
|
953
|
+
assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(297px,\s*1fr\)/);
|
|
954
954
|
assert.ok(diagnostics.textOverlayInvalidations.some(entry =>
|
|
955
955
|
entry.nodeId === 'remote-fleet-render-smoke'
|
|
956
956
|
&& entry.reason === 'remote-monitor-size'));
|
|
@@ -961,9 +961,15 @@ try {
|
|
|
961
961
|
&& entry.overlayInvalidated === true));
|
|
962
962
|
bodyView.querySelector('[data-remote-fleet-action="monitor-size-down"]').dispatchEvent({ type: 'click' });
|
|
963
963
|
assert.equal(bodyView.dataset.remoteFleetDensity, 'cards');
|
|
964
|
-
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(
|
|
964
|
+
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(198px,\s*1fr\)/);
|
|
965
965
|
assert.equal(mirrorBodyView.dataset.remoteFleetDensity, 'cards');
|
|
966
|
-
assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(
|
|
966
|
+
assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(198px,\s*1fr\)/);
|
|
967
|
+
bodyView.querySelector('[data-remote-fleet-action="monitor-size-down"]').dispatchEvent({ type: 'click' });
|
|
968
|
+
assert.equal(bodyView.dataset.remoteFleetDensity, 'dense');
|
|
969
|
+
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(132px,\s*1fr\)/);
|
|
970
|
+
bodyView.querySelector('[data-remote-fleet-action="monitor-size-up"]').dispatchEvent({ type: 'click' });
|
|
971
|
+
assert.equal(bodyView.dataset.remoteFleetDensity, 'cards');
|
|
972
|
+
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(198px,\s*1fr\)/);
|
|
967
973
|
mirrorShell.remove();
|
|
968
974
|
cards = bodyView.querySelectorAll('article[data-device-id]');
|
|
969
975
|
const patchTarget = devices.find(device =>
|
|
@@ -1216,6 +1222,10 @@ try {
|
|
|
1216
1222
|
assert.equal(bodyView.textContent.includes('No screen'), false);
|
|
1217
1223
|
assert.equal(bodyView.textContent.includes('@mindexec/cli'), false);
|
|
1218
1224
|
assert.equal(nodeShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'false');
|
|
1225
|
+
const { nodeShell: hostMirrorShell, bodyView: hostMirrorBodyView } = createRemoteFleetTemplateShell(document, focusedDevice.DeviceId);
|
|
1226
|
+
document.body.appendChild(hostMirrorShell);
|
|
1227
|
+
manager.renderRemoteFleetMonitorForTest(hostMirrorBodyView, monitorNode);
|
|
1228
|
+
assert.equal(hostMirrorShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'false');
|
|
1219
1229
|
const initialHostButton = nodeShell.querySelector('[data-remote-fleet-action="set-host"]');
|
|
1220
1230
|
assert.equal(initialHostButton?.textContent, 'Set Host');
|
|
1221
1231
|
initialHostButton.dispatchEvent({ type: 'click' });
|
|
@@ -1227,6 +1237,17 @@ try {
|
|
|
1227
1237
|
const hostFeedback = bodyView.querySelector('[data-remote-fleet-task-feedback="true"]');
|
|
1228
1238
|
assert.equal(hostFeedback?.style.display, 'none');
|
|
1229
1239
|
assert.equal(hostFeedback?.textContent, '');
|
|
1240
|
+
assert.equal(nodeShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'true');
|
|
1241
|
+
assert.equal(hostMirrorShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'true');
|
|
1242
|
+
assert.ok(diagnostics.textOverlayInvalidations.some(entry =>
|
|
1243
|
+
entry.nodeId === 'remote-fleet-render-smoke'
|
|
1244
|
+
&& entry.reason === 'remote-monitor-host'));
|
|
1245
|
+
assert.ok(diagnostics.runtimeTrace.some(entry =>
|
|
1246
|
+
entry.type === 'remote.monitor.projectionInvalidated'
|
|
1247
|
+
&& entry.nodeId === 'remote-fleet-render-smoke'
|
|
1248
|
+
&& entry.reason === 'host'
|
|
1249
|
+
&& entry.overlayInvalidated === true));
|
|
1250
|
+
hostMirrorShell.remove();
|
|
1230
1251
|
|
|
1231
1252
|
hub.setHostTarget({
|
|
1232
1253
|
nodeId: 'remote-fleet-render-smoke',
|
|
@@ -1305,7 +1326,7 @@ try {
|
|
|
1305
1326
|
assert.ok(emptyScreenShell);
|
|
1306
1327
|
assert.match(emptyScreenShell.style.cssText, /padding:\s*2px 4px 6px 4px;/);
|
|
1307
1328
|
const emptyScreens = emptyBody.querySelectorAll('[data-remote-fleet-empty-screen="true"]');
|
|
1308
|
-
assert.ok(emptyScreens.length >=
|
|
1329
|
+
assert.ok(emptyScreens.length >= 12, `expected empty monitor to fill space, got ${emptyScreens.length}`);
|
|
1309
1330
|
assert.notEqual(emptyScreens.length, 6);
|
|
1310
1331
|
assert.match(emptyScreens[0].style.cssText, /border-radius:\s*0/);
|
|
1311
1332
|
assert.ok(Array.from(emptyBody.children).map(child =>
|
|
@@ -3813,13 +3813,13 @@
|
|
|
3813
3813
|
const REMOTE_FLEET_DEVICE_SEMANTIC_TYPE = 'RemoteFleetDevice';
|
|
3814
3814
|
const REMOTE_FLEET_CENTER_NUDGE_PX = 4;
|
|
3815
3815
|
const REMOTE_FLEET_MONITOR_TILE_GAP_PX = 8;
|
|
3816
|
-
const REMOTE_FLEET_EMPTY_SCREEN_MIN_WIDTH =
|
|
3817
|
-
const REMOTE_FLEET_EMPTY_SCREEN_MIN_HEIGHT =
|
|
3816
|
+
const REMOTE_FLEET_EMPTY_SCREEN_MIN_WIDTH = 198;
|
|
3817
|
+
const REMOTE_FLEET_EMPTY_SCREEN_MIN_HEIGHT = 108;
|
|
3818
3818
|
const REMOTE_FLEET_MONITOR_SIZE_LEVELS = Object.freeze(['dense', 'cards', 'large']);
|
|
3819
3819
|
const REMOTE_FLEET_MONITOR_TILE_METRICS = Object.freeze({
|
|
3820
|
-
dense: Object.freeze({ tileMinWidth:
|
|
3821
|
-
cards: Object.freeze({ tileMinWidth:
|
|
3822
|
-
large: Object.freeze({ tileMinWidth:
|
|
3820
|
+
dense: Object.freeze({ tileMinWidth: 132, tileMinHeight: 84, emptyMinWidth: 132, emptyMinHeight: 72 }),
|
|
3821
|
+
cards: Object.freeze({ tileMinWidth: 198, tileMinHeight: 126, emptyMinWidth: 198, emptyMinHeight: 108 }),
|
|
3822
|
+
large: Object.freeze({ tileMinWidth: 297, tileMinHeight: 189, emptyMinWidth: 297, emptyMinHeight: 162 })
|
|
3823
3823
|
});
|
|
3824
3824
|
const AUTOMATION_NODE_KIND_METADATA_KEY = 'AutomationNodeKind';
|
|
3825
3825
|
const AUTOMATION_NODE_LABEL_METADATA_KEY = 'AutomationNodeLabel';
|
|
@@ -13652,6 +13652,52 @@
|
|
|
13652
13652
|
return nodeState;
|
|
13653
13653
|
}
|
|
13654
13654
|
|
|
13655
|
+
function applyRemoteFleetHostTargetResultToNodeModel(nodeModel, nodeId, enabled, result) {
|
|
13656
|
+
const id = String(nodeId || '').trim();
|
|
13657
|
+
if (!nodeModel || !id || !isRemoteFleetResultSuccess(result)) {
|
|
13658
|
+
return false;
|
|
13659
|
+
}
|
|
13660
|
+
|
|
13661
|
+
const metadata = ensureNodeMetadata(nodeModel);
|
|
13662
|
+
if (!metadata) {
|
|
13663
|
+
return false;
|
|
13664
|
+
}
|
|
13665
|
+
|
|
13666
|
+
const registryStatus = String(result?.registryStatus || result?.RegistryStatus || '').trim();
|
|
13667
|
+
const registryReason = String(result?.registryReason || result?.RegistryReason || '').trim();
|
|
13668
|
+
if (registryStatus) {
|
|
13669
|
+
metadata.RemoteFleetRegistryStatus = registryStatus;
|
|
13670
|
+
}
|
|
13671
|
+
if (registryReason) {
|
|
13672
|
+
metadata.RemoteFleetRegistryReason = registryReason;
|
|
13673
|
+
}
|
|
13674
|
+
|
|
13675
|
+
const active = enabled === true && isRemoteFleetResultActive(result);
|
|
13676
|
+
if (active) {
|
|
13677
|
+
applyRemoteFleetLocalHostTarget(nodeModel);
|
|
13678
|
+
metadata.RemoteFleetHostTargetState = 'hosting';
|
|
13679
|
+
metadata.RemoteFleetHostTargetNodeId = id;
|
|
13680
|
+
const hostTarget = result?.hostTarget || result?.HostTarget || {};
|
|
13681
|
+
const now = new Date().toISOString();
|
|
13682
|
+
metadata.RemoteFleetHostTargetLeaseId = String(readRemoteFleetObjectField(hostTarget, 'leaseId', 'LeaseId', metadata.RemoteFleetHostTargetLeaseId || '') || '').trim();
|
|
13683
|
+
metadata.RemoteFleetHostTargetEndpoint = String(readRemoteFleetObjectField(hostTarget, 'endpoint', 'Endpoint', metadata.RemoteFleetHostTargetEndpoint || metadata.RemoteFleetHubEndpoint || '') || '').trim();
|
|
13684
|
+
metadata.RemoteFleetHostTargetActivatedAtUtc = String(readRemoteFleetObjectField(hostTarget, 'activatedAt', 'ActivatedAt', metadata.RemoteFleetHostTargetActivatedAtUtc || now) || '').trim();
|
|
13685
|
+
metadata.RemoteFleetHostTargetUpdatedAtUtc = String(readRemoteFleetObjectField(hostTarget, 'updatedAt', 'UpdatedAt', now) || '').trim();
|
|
13686
|
+
metadata.RemoteFleetHostTargetExpiresAtUtc = String(readRemoteFleetObjectField(hostTarget, 'expiresAt', 'ExpiresAt', metadata.RemoteFleetHostTargetExpiresAtUtc || '') || '').trim();
|
|
13687
|
+
} else if (enabled !== true || isRemoteFleetResultExplicitlyInactive(result)) {
|
|
13688
|
+
metadata.RemoteFleetHostTargetState = 'inactive';
|
|
13689
|
+
metadata.RemoteFleetHostTargetNodeId = '';
|
|
13690
|
+
metadata.RemoteFleetHostTargetLeaseId = '';
|
|
13691
|
+
metadata.RemoteFleetHostTargetActivatedAtUtc = '';
|
|
13692
|
+
metadata.RemoteFleetHostTargetUpdatedAtUtc = '';
|
|
13693
|
+
metadata.RemoteFleetHostTargetExpiresAtUtc = '';
|
|
13694
|
+
}
|
|
13695
|
+
|
|
13696
|
+
nodeModel.metadata = metadata;
|
|
13697
|
+
nodeModel.Metadata = metadata;
|
|
13698
|
+
return true;
|
|
13699
|
+
}
|
|
13700
|
+
|
|
13655
13701
|
function clearRemoteFleetTimers(bodyView, options = {}) {
|
|
13656
13702
|
if (!bodyView) return;
|
|
13657
13703
|
if (options.keepBinaryFrameSocket !== true) {
|
|
@@ -13925,6 +13971,35 @@
|
|
|
13925
13971
|
return synced;
|
|
13926
13972
|
}
|
|
13927
13973
|
|
|
13974
|
+
function renderRemoteFleetMonitorSurfaces(nodeId, nodeModel, sourceBodyView = null) {
|
|
13975
|
+
const id = String(nodeId || '').trim();
|
|
13976
|
+
if (!id || !nodeModel) {
|
|
13977
|
+
return 0;
|
|
13978
|
+
}
|
|
13979
|
+
|
|
13980
|
+
const escapedId = cssEscapeValue(id);
|
|
13981
|
+
const bodies = new Set([
|
|
13982
|
+
...Array.from(document.querySelectorAll(`.template-card__remote-fleet-body[data-node-id="${escapedId}"]`)),
|
|
13983
|
+
...Array.from(document.querySelectorAll(`.template-card__remote-fleet-body[data-remote-fleet-monitor-node-id="${escapedId}"]`))
|
|
13984
|
+
]);
|
|
13985
|
+
|
|
13986
|
+
if (sourceBodyView) {
|
|
13987
|
+
bodies.add(sourceBodyView);
|
|
13988
|
+
}
|
|
13989
|
+
|
|
13990
|
+
let rendered = 0;
|
|
13991
|
+
bodies.forEach(body => {
|
|
13992
|
+
if (!body) {
|
|
13993
|
+
return;
|
|
13994
|
+
}
|
|
13995
|
+
|
|
13996
|
+
renderRemoteFleetMonitor(body, nodeModel);
|
|
13997
|
+
rendered += 1;
|
|
13998
|
+
});
|
|
13999
|
+
|
|
14000
|
+
return rendered;
|
|
14001
|
+
}
|
|
14002
|
+
|
|
13928
14003
|
function invalidateRemoteFleetMonitorProjection(nodeId, sizeState, reason = 'size') {
|
|
13929
14004
|
const id = String(nodeId || '').trim();
|
|
13930
14005
|
if (!_module || !id) {
|
|
@@ -13944,11 +14019,16 @@
|
|
|
13944
14019
|
_module._css3dVisualChangedThisFrame = true;
|
|
13945
14020
|
_module._css3dVisualChangedSinceLastRender = true;
|
|
13946
14021
|
wakeRemoteFleetModuleAnimation(_module, `remote-monitor-${reason}`);
|
|
13947
|
-
|
|
14022
|
+
const tracePayload = {
|
|
13948
14023
|
nodeId: id,
|
|
13949
14024
|
density: normalizeRemoteFleetMonitorSize(sizeState),
|
|
14025
|
+
reason: String(reason || 'projection'),
|
|
13950
14026
|
overlayInvalidated: invalidated
|
|
13951
|
-
}
|
|
14027
|
+
};
|
|
14028
|
+
window.RuntimeTrace?.emit?.('remote.monitor.projectionInvalidated', tracePayload);
|
|
14029
|
+
if (reason === 'size') {
|
|
14030
|
+
window.RuntimeTrace?.emit?.('remote.monitor.sizeChanged', tracePayload);
|
|
14031
|
+
}
|
|
13952
14032
|
return invalidated;
|
|
13953
14033
|
}
|
|
13954
14034
|
|
|
@@ -18117,6 +18197,10 @@
|
|
|
18117
18197
|
rememberRemoteFleetLocalHostTarget(nodeId, enabled === true, result);
|
|
18118
18198
|
if (isRemoteFleetResultSuccess(result)) {
|
|
18119
18199
|
rememberRemoteFleetAutoHostPreference(nodeId, enabled === true && isRemoteFleetResultActive(result));
|
|
18200
|
+
if (applyRemoteFleetHostTargetResultToNodeModel(nodeModel, nodeId, enabled === true, result)) {
|
|
18201
|
+
renderRemoteFleetMonitorSurfaces(nodeId, nodeModel, bodyView);
|
|
18202
|
+
invalidateRemoteFleetMonitorProjection(nodeId, bodyView.dataset.remoteFleetDensity || densityState, 'host');
|
|
18203
|
+
}
|
|
18120
18204
|
}
|
|
18121
18205
|
if (quiet) {
|
|
18122
18206
|
if (!isRemoteFleetResultSuccess(result) || !isRemoteFleetResultActive(result)) {
|
package/wwwroot/index.html
CHANGED
|
@@ -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=20260617-mdm-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-mdm-
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-mdm-tile-scale-v585" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-mdm-tile-scale-v585" />
|
|
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 = '20260617-mdm-
|
|
582
|
+
const scriptVersion = '20260617-mdm-tile-scale-v585';
|
|
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": "
|
|
2
|
+
"version": "ZfLSWK2O",
|
|
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-
|
|
89
|
+
"hash": "sha256-Ma2j27vONNBesOrw65Auhtvwr3a5NFSp7sDag7VUo38=",
|
|
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-
|
|
837
|
+
"hash": "sha256-uZsIbGZb6Q24FUaQCppHT2DCnj7ae7QpkaKq6YnmLIY=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|