@mindexec/cli 0.2.120 → 0.2.121
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
|
@@ -13463,6 +13463,8 @@
|
|
|
13463
13463
|
const REMOTE_FLEET_THUMBNAIL_FRAME_DECODE_TIMEOUT_MS = 1200;
|
|
13464
13464
|
const REMOTE_FLEET_BINARY_FRAME_WS_RECONNECT_MS = 1500;
|
|
13465
13465
|
const REMOTE_FLEET_BINARY_FRAME_SUBSCRIBE_MS = 1000;
|
|
13466
|
+
const REMOTE_FLEET_AUTO_LIVE_START_MAX_PARALLEL = 8;
|
|
13467
|
+
const REMOTE_FLEET_AUTO_LIVE_START_COOLDOWN_MS = 3000;
|
|
13466
13468
|
const REMOTE_FLEET_TASK_FOLLOW_INITIAL_MS = 250;
|
|
13467
13469
|
const REMOTE_FLEET_TASK_FOLLOW_REFRESH_MS = 2000;
|
|
13468
13470
|
const REMOTE_FLEET_TASK_FOLLOW_MAX_TICKS = 60;
|
|
@@ -13760,15 +13762,13 @@
|
|
|
13760
13762
|
const payload = buffer.slice(4 + metaLength);
|
|
13761
13763
|
const mimeType = String(metadata.mimeType || metadata.format || 'image/jpeg').trim() || 'image/jpeg';
|
|
13762
13764
|
const payloadBlob = new Blob([payload], { type: mimeType });
|
|
13763
|
-
const objectUrl = URL.createObjectURL(payloadBlob);
|
|
13764
13765
|
return {
|
|
13765
13766
|
...metadata,
|
|
13766
13767
|
kind: String(metadata.kind || 'live').toLowerCase() === 'thumbnail' ? 'thumbnail' : 'live',
|
|
13767
13768
|
mimeType,
|
|
13768
|
-
frameUrl:
|
|
13769
|
-
framePath:
|
|
13769
|
+
frameUrl: '',
|
|
13770
|
+
framePath: '',
|
|
13770
13771
|
dataUrl: '',
|
|
13771
|
-
_remoteFleetObjectUrl: objectUrl,
|
|
13772
13772
|
_remoteFleetPayloadBlob: payloadBlob,
|
|
13773
13773
|
_remoteFleetBinaryFrame: true
|
|
13774
13774
|
};
|
|
@@ -14371,7 +14371,7 @@
|
|
|
14371
14371
|
}
|
|
14372
14372
|
|
|
14373
14373
|
async function loadRemoteFleetFrameBitmap(frame) {
|
|
14374
|
-
if (!frame
|
|
14374
|
+
if (!frame) {
|
|
14375
14375
|
return null;
|
|
14376
14376
|
}
|
|
14377
14377
|
|
|
@@ -14386,6 +14386,10 @@
|
|
|
14386
14386
|
timeoutMs);
|
|
14387
14387
|
}
|
|
14388
14388
|
|
|
14389
|
+
if (!isRemoteFleetFrameSource(frame.frameUrl)) {
|
|
14390
|
+
return null;
|
|
14391
|
+
}
|
|
14392
|
+
|
|
14389
14393
|
if (typeof fetch !== 'function') {
|
|
14390
14394
|
return null;
|
|
14391
14395
|
}
|
|
@@ -14437,7 +14441,7 @@
|
|
|
14437
14441
|
String(frame?.kind || '').trim().toLowerCase(),
|
|
14438
14442
|
String(frame?.streamId || '').trim(),
|
|
14439
14443
|
String(Number(frame?.frameSeq || 0) || 0),
|
|
14440
|
-
String(frame?.frameUrl || '').trim()
|
|
14444
|
+
String(frame?.contentHash || frame?.frameUrl || '').trim()
|
|
14441
14445
|
].join('|');
|
|
14442
14446
|
}
|
|
14443
14447
|
|
|
@@ -14467,7 +14471,9 @@
|
|
|
14467
14471
|
}
|
|
14468
14472
|
|
|
14469
14473
|
function isRemoteFleetFrameNewerForPreview(preview, frame, comparePending = false) {
|
|
14470
|
-
|
|
14474
|
+
const hasPayloadBlob = !!frame?._remoteFleetPayloadBlob;
|
|
14475
|
+
const hasFrameSource = isRemoteFleetFrameSource(frame?.frameUrl);
|
|
14476
|
+
if (!preview || !frame || (!hasPayloadBlob && !hasFrameSource)) {
|
|
14471
14477
|
return false;
|
|
14472
14478
|
}
|
|
14473
14479
|
|
|
@@ -14636,7 +14642,7 @@
|
|
|
14636
14642
|
}
|
|
14637
14643
|
|
|
14638
14644
|
const frame = preview._remoteFleetPendingFrame;
|
|
14639
|
-
if (!frame || !isRemoteFleetFrameSource(frame.frameUrl)) {
|
|
14645
|
+
if (!frame || (!frame._remoteFleetPayloadBlob && !isRemoteFleetFrameSource(frame.frameUrl))) {
|
|
14640
14646
|
clearRemoteFleetPendingFrameDataset(preview, frame);
|
|
14641
14647
|
return;
|
|
14642
14648
|
}
|
|
@@ -14673,6 +14679,25 @@
|
|
|
14673
14679
|
return;
|
|
14674
14680
|
}
|
|
14675
14681
|
|
|
14682
|
+
let fallbackUrl = String(frame.frameUrl || '').trim();
|
|
14683
|
+
if (!isRemoteFleetFrameSource(fallbackUrl)
|
|
14684
|
+
&& frame._remoteFleetPayloadBlob
|
|
14685
|
+
&& typeof URL !== 'undefined'
|
|
14686
|
+
&& typeof URL.createObjectURL === 'function') {
|
|
14687
|
+
try {
|
|
14688
|
+
fallbackUrl = URL.createObjectURL(frame._remoteFleetPayloadBlob);
|
|
14689
|
+
frame.frameUrl = fallbackUrl;
|
|
14690
|
+
frame._remoteFleetObjectUrl = fallbackUrl;
|
|
14691
|
+
} catch {
|
|
14692
|
+
fallbackUrl = '';
|
|
14693
|
+
}
|
|
14694
|
+
}
|
|
14695
|
+
|
|
14696
|
+
if (!isRemoteFleetFrameSource(fallbackUrl)) {
|
|
14697
|
+
finish(false, 'img-unavailable');
|
|
14698
|
+
return;
|
|
14699
|
+
}
|
|
14700
|
+
|
|
14676
14701
|
const timeoutMs = getRemoteFleetFrameDecodeTimeoutMs(frame);
|
|
14677
14702
|
let settled = false;
|
|
14678
14703
|
const complete = (loaded, surface = 'img') => {
|
|
@@ -14691,7 +14716,7 @@
|
|
|
14691
14716
|
decoded.then(() => complete(true, 'img'));
|
|
14692
14717
|
};
|
|
14693
14718
|
loader.onerror = () => complete(false, 'img');
|
|
14694
|
-
loader.src =
|
|
14719
|
+
loader.src = fallbackUrl;
|
|
14695
14720
|
};
|
|
14696
14721
|
|
|
14697
14722
|
const canvas = ensureRemoteFleetFrameCanvas(preview);
|
|
@@ -14753,7 +14778,7 @@
|
|
|
14753
14778
|
seq: frame.frameSeq,
|
|
14754
14779
|
error: error?.message || String(error || '')
|
|
14755
14780
|
});
|
|
14756
|
-
|
|
14781
|
+
loadFallbackImage();
|
|
14757
14782
|
return;
|
|
14758
14783
|
}
|
|
14759
14784
|
|
|
@@ -17100,35 +17125,39 @@
|
|
|
17100
17125
|
return ids.slice(0, 120);
|
|
17101
17126
|
};
|
|
17102
17127
|
const ensureVisibleRemoteFleetLiveStreams = async () => {
|
|
17103
|
-
if (!(bodyView.
|
|
17104
|
-
bodyView.
|
|
17128
|
+
if (!(bodyView._remoteFleetAutoLiveStartInFlight instanceof Set)) {
|
|
17129
|
+
bodyView._remoteFleetAutoLiveStartInFlight = new Set();
|
|
17130
|
+
}
|
|
17131
|
+
if (!(bodyView._remoteFleetAutoLiveStartAttemptAt instanceof Map)) {
|
|
17132
|
+
bodyView._remoteFleetAutoLiveStartAttemptAt = new Map();
|
|
17105
17133
|
}
|
|
17134
|
+
const now = Date.now();
|
|
17106
17135
|
const targets = getVisibleLiveDevices()
|
|
17107
17136
|
.filter(device => {
|
|
17108
17137
|
const deviceId = getRemoteFleetDeviceId(device);
|
|
17138
|
+
const lastAttemptAt = Number(bodyView._remoteFleetAutoLiveStartAttemptAt.get(deviceId) || 0);
|
|
17109
17139
|
return deviceId
|
|
17110
17140
|
&& !isRemoteFleetLiveActive(device)
|
|
17111
|
-
&& !bodyView.
|
|
17141
|
+
&& !bodyView._remoteFleetAutoLiveStartInFlight.has(deviceId)
|
|
17142
|
+
&& (now - lastAttemptAt >= REMOTE_FLEET_AUTO_LIVE_START_COOLDOWN_MS);
|
|
17112
17143
|
});
|
|
17113
17144
|
if (targets.length === 0) {
|
|
17114
17145
|
return null;
|
|
17115
17146
|
}
|
|
17116
17147
|
|
|
17117
|
-
if (!(bodyView._remoteFleetAutoLiveStartInFlight instanceof Set)) {
|
|
17118
|
-
bodyView._remoteFleetAutoLiveStartInFlight = new Set();
|
|
17119
|
-
}
|
|
17120
|
-
|
|
17121
17148
|
let started = 0;
|
|
17122
17149
|
let lastResult = null;
|
|
17123
|
-
|
|
17150
|
+
const queue = targets.slice(0, 120);
|
|
17151
|
+
const startOne = async target => {
|
|
17124
17152
|
const deviceId = getRemoteFleetDeviceId(target);
|
|
17125
17153
|
if (!deviceId || bodyView._remoteFleetAutoLiveStartInFlight.has(deviceId)) {
|
|
17126
|
-
|
|
17154
|
+
return;
|
|
17127
17155
|
}
|
|
17128
17156
|
|
|
17129
17157
|
bodyView._remoteFleetAutoLiveStartInFlight.add(deviceId);
|
|
17158
|
+
bodyView._remoteFleetAutoLiveStartAttemptAt.set(deviceId, Date.now());
|
|
17130
17159
|
try {
|
|
17131
|
-
const result = await invokeDotNetAsync('StartRemoteFleetLiveStreamFromJs', nodeId, deviceId);
|
|
17160
|
+
const result = await invokeDotNetAsync('StartRemoteFleetLiveStreamFromJs', nodeId, deviceId, REMOTE_FLEET_MONITOR_LIVE_FPS);
|
|
17132
17161
|
lastResult = result;
|
|
17133
17162
|
const success = isRemoteFleetResultSuccess(result);
|
|
17134
17163
|
window.RuntimeTrace?.emit?.('remote.live.autoStart', {
|
|
@@ -17141,12 +17170,21 @@
|
|
|
17141
17170
|
});
|
|
17142
17171
|
if (success) {
|
|
17143
17172
|
started += 1;
|
|
17144
|
-
bodyView._remoteFleetAutoLiveStartedIds.add(deviceId);
|
|
17145
17173
|
}
|
|
17146
17174
|
} finally {
|
|
17147
17175
|
bodyView._remoteFleetAutoLiveStartInFlight.delete(deviceId);
|
|
17148
17176
|
}
|
|
17149
|
-
}
|
|
17177
|
+
};
|
|
17178
|
+
|
|
17179
|
+
const workerCount = Math.min(REMOTE_FLEET_AUTO_LIVE_START_MAX_PARALLEL, queue.length);
|
|
17180
|
+
await Promise.all(Array.from({ length: workerCount }, async () => {
|
|
17181
|
+
while (queue.length > 0) {
|
|
17182
|
+
const target = queue.shift();
|
|
17183
|
+
if (target) {
|
|
17184
|
+
await startOne(target);
|
|
17185
|
+
}
|
|
17186
|
+
}
|
|
17187
|
+
}));
|
|
17150
17188
|
|
|
17151
17189
|
if (started > 0) {
|
|
17152
17190
|
try {
|
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=20260616-mdm-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-mdm-
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260616-mdm-live-paint-v576" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-mdm-live-paint-v576" />
|
|
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 = '20260616-mdm-
|
|
582
|
+
const scriptVersion = '20260616-mdm-live-paint-v576';
|
|
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": "dvBBmOSo",
|
|
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-f0C7hF8MEs79aW0LHHOPm+FeBP7cvy/GxhypXzccmd4=",
|
|
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-HElWHU9ioUT0cuuCKMD/40OJ15fyVOJNYjuApu3T4mI=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|