@mindexec/cli 0.2.102 → 0.2.104
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 +2 -2
- package/remote-hub.js +51 -2
- package/scripts/remote-hub-smoke.mjs +8 -0
- package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +31 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +82 -5
- package/wwwroot/_framework/MindExecution.Core.fc9cjbjplq.dll +0 -0
- package/wwwroot/_framework/{MindExecution.Kernel.7k773jan4j.dll → MindExecution.Kernel.pbzp3jfync.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Admin.nr5ioavpvn.dll → MindExecution.Plugins.Admin.gxzwlji1cf.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Business.qq63kom73x.dll → MindExecution.Plugins.Business.vtaey8c59y.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.za4g3ep0s3.dll → MindExecution.Plugins.Concept.ksc3wkuptm.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Directory.u6p6pxpwxp.dll → MindExecution.Plugins.Directory.zc8ffaoknd.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.dybjnpy716.dll → MindExecution.Plugins.PlanMaster.flzcb87jvl.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.77htf13h5q.dll → MindExecution.Plugins.YouTube.q4tvods1po.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.d74ehlrxzm.dll → MindExecution.Shared.r8pan6upd8.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Web.0bxjy0fhk2.dll → MindExecution.Web.3b8az6ed0q.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +21 -21
- package/wwwroot/index.html +3 -3
- package/wwwroot/service-worker-assets.js +25 -25
- package/wwwroot/service-worker.js +1 -1
- package/wwwroot/_framework/MindExecution.Core.cdplo34sb2.dll +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mindexec/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.104",
|
|
4
4
|
"description": "MindExec local runtime and bridge CLI",
|
|
5
5
|
"main": "server.js",
|
|
6
6
|
"type": "module",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"node": ">=20"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@mindexec/remote": "^0.1.
|
|
50
|
+
"@mindexec/remote": "^0.1.16",
|
|
51
51
|
"@openai/codex-sdk": "^0.137.0",
|
|
52
52
|
"chokidar": "^3.6.0",
|
|
53
53
|
"cors": "^2.8.5",
|
package/remote-hub.js
CHANGED
|
@@ -20,6 +20,7 @@ const MAX_SYNTHETIC_DEVICES = 1000;
|
|
|
20
20
|
const DEFAULT_HOST_TARGET_LEASE_MS = 30000;
|
|
21
21
|
const SYNTHETIC_FRAME_DATA_URL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAADElEQVR42mP8z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC';
|
|
22
22
|
const SYNTHETIC_FRAME_PAYLOAD = Buffer.from(SYNTHETIC_FRAME_DATA_URL.split(',')[1], 'base64');
|
|
23
|
+
const SYNTHETIC_FRAME_HASH = crypto.createHash('sha256').update(SYNTHETIC_FRAME_PAYLOAD).digest('hex').slice(0, 16);
|
|
23
24
|
|
|
24
25
|
function isEnabledValue(value, fallback = true) {
|
|
25
26
|
if (value === undefined || value === null || value === '') {
|
|
@@ -785,6 +786,9 @@ export function createRemoteHub(options = {}) {
|
|
|
785
786
|
receivedAt: now,
|
|
786
787
|
byteLength: 68,
|
|
787
788
|
transport: 'synthetic',
|
|
789
|
+
contentHash: SYNTHETIC_FRAME_HASH,
|
|
790
|
+
captureMs: 0,
|
|
791
|
+
sameContentStreak: 0,
|
|
788
792
|
dataUrl: SYNTHETIC_FRAME_DATA_URL,
|
|
789
793
|
payload: SYNTHETIC_FRAME_PAYLOAD,
|
|
790
794
|
accessToken: createFrameAccessToken()
|
|
@@ -1468,6 +1472,37 @@ export function createRemoteHub(options = {}) {
|
|
|
1468
1472
|
return Buffer.from(base64, 'base64');
|
|
1469
1473
|
}
|
|
1470
1474
|
|
|
1475
|
+
function buildFrameContentHash(message, payload) {
|
|
1476
|
+
const provided = safeString(message.contentHash || message.frameHash || message.hash, 96)
|
|
1477
|
+
.toLowerCase()
|
|
1478
|
+
.replace(/[^a-z0-9:_-]/g, '')
|
|
1479
|
+
.slice(0, 64);
|
|
1480
|
+
if (provided) {
|
|
1481
|
+
return provided;
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
if (!Buffer.isBuffer(payload) || payload.length === 0) {
|
|
1485
|
+
return '';
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
return crypto.createHash('sha256').update(payload).digest('hex').slice(0, 16);
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
function readFrameCaptureMs(message) {
|
|
1492
|
+
const value = Number(message.captureMs);
|
|
1493
|
+
return Number.isFinite(value) && value >= 0
|
|
1494
|
+
? Math.round(value)
|
|
1495
|
+
: 0;
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
function computeSameContentStreak(previousFrame, contentHash) {
|
|
1499
|
+
if (!contentHash || !previousFrame?.contentHash || previousFrame.contentHash !== contentHash) {
|
|
1500
|
+
return 0;
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
return clampNumber(Number(previousFrame.sameContentStreak || 0) + 1, 0, 1000000, 1);
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1471
1506
|
function applyThumbnailFrame(device, message, framePayload, transport = 'json-base64') {
|
|
1472
1507
|
const frameData = Buffer.isBuffer(framePayload)
|
|
1473
1508
|
? ''
|
|
@@ -1489,6 +1524,8 @@ export function createRemoteHub(options = {}) {
|
|
|
1489
1524
|
const mimeType = safeString(message.mimeType || message.format || 'image/jpeg', 80) || 'image/jpeg';
|
|
1490
1525
|
const capturedAt = safeString(message.capturedAt, 80) || device.lastSeenAt;
|
|
1491
1526
|
const payload = buildFramePayloadBuffer(framePayload, frameData);
|
|
1527
|
+
const contentHash = buildFrameContentHash(message, payload);
|
|
1528
|
+
const sameContentStreak = computeSameContentStreak(device.latestThumbnail, contentHash);
|
|
1492
1529
|
device.latestThumbnail = {
|
|
1493
1530
|
streamId: safeString(message.streamId, 128) || 'thumbnail',
|
|
1494
1531
|
frameSeq,
|
|
@@ -1501,6 +1538,9 @@ export function createRemoteHub(options = {}) {
|
|
|
1501
1538
|
receivedAt: device.lastSeenAt,
|
|
1502
1539
|
byteLength,
|
|
1503
1540
|
transport,
|
|
1541
|
+
contentHash,
|
|
1542
|
+
captureMs: readFrameCaptureMs(message),
|
|
1543
|
+
sameContentStreak,
|
|
1504
1544
|
dataUrl: buildFrameDataUrl(framePayload, frameData, mimeType),
|
|
1505
1545
|
payload,
|
|
1506
1546
|
accessToken: createFrameAccessToken()
|
|
@@ -1511,7 +1551,9 @@ export function createRemoteHub(options = {}) {
|
|
|
1511
1551
|
frameSeq,
|
|
1512
1552
|
width: device.latestThumbnail.width,
|
|
1513
1553
|
height: device.latestThumbnail.height,
|
|
1514
|
-
transport
|
|
1554
|
+
transport,
|
|
1555
|
+
contentHash,
|
|
1556
|
+
sameContentStreak
|
|
1515
1557
|
});
|
|
1516
1558
|
return true;
|
|
1517
1559
|
}
|
|
@@ -1550,6 +1592,8 @@ export function createRemoteHub(options = {}) {
|
|
|
1550
1592
|
const mimeType = safeString(message.mimeType || message.format || 'image/jpeg', 80) || 'image/jpeg';
|
|
1551
1593
|
const capturedAt = safeString(message.capturedAt, 80) || device.lastSeenAt;
|
|
1552
1594
|
const payload = buildFramePayloadBuffer(framePayload, frameData);
|
|
1595
|
+
const contentHash = buildFrameContentHash(message, payload);
|
|
1596
|
+
const sameContentStreak = computeSameContentStreak(device.latestLiveFrame, contentHash);
|
|
1553
1597
|
device.latestLiveFrame = {
|
|
1554
1598
|
streamId,
|
|
1555
1599
|
frameSeq,
|
|
@@ -1564,6 +1608,9 @@ export function createRemoteHub(options = {}) {
|
|
|
1564
1608
|
receivedAt: device.lastSeenAt,
|
|
1565
1609
|
byteLength,
|
|
1566
1610
|
transport,
|
|
1611
|
+
contentHash,
|
|
1612
|
+
captureMs: readFrameCaptureMs(message),
|
|
1613
|
+
sameContentStreak,
|
|
1567
1614
|
dataUrl: buildFrameDataUrl(framePayload, frameData, mimeType),
|
|
1568
1615
|
payload,
|
|
1569
1616
|
accessToken: createFrameAccessToken()
|
|
@@ -1578,7 +1625,9 @@ export function createRemoteHub(options = {}) {
|
|
|
1578
1625
|
width: device.latestLiveFrame.width,
|
|
1579
1626
|
height: device.latestLiveFrame.height,
|
|
1580
1627
|
mode: device.latestLiveFrame.mode,
|
|
1581
|
-
transport
|
|
1628
|
+
transport,
|
|
1629
|
+
contentHash,
|
|
1630
|
+
sameContentStreak
|
|
1582
1631
|
});
|
|
1583
1632
|
return true;
|
|
1584
1633
|
}
|
|
@@ -169,10 +169,14 @@ try {
|
|
|
169
169
|
assert.equal(binaryThumbnailDevice.latestThumbnail.streamId, 'smoke-thumb-binary');
|
|
170
170
|
assert.equal(binaryThumbnailDevice.latestThumbnail.transport, 'binary');
|
|
171
171
|
assert.equal(binaryThumbnailDevice.latestThumbnail.byteLength, smokePngFrame.length);
|
|
172
|
+
assert.equal(typeof binaryThumbnailDevice.latestThumbnail.contentHash, 'string');
|
|
173
|
+
assert.equal(binaryThumbnailDevice.latestThumbnail.contentHash.length, 16);
|
|
174
|
+
assert.equal(binaryThumbnailDevice.latestThumbnail.sameContentStreak, 1);
|
|
172
175
|
assert.equal(binaryThumbnailDevice.counters.thumbnailFramesReceived, 2);
|
|
173
176
|
const serializedBinaryThumbnail = hub.getDeviceThumbnail('smoke-device', { includeDataUrl: false });
|
|
174
177
|
assert.equal(serializedBinaryThumbnail.streamId, 'smoke-thumb-binary');
|
|
175
178
|
assert.equal(serializedBinaryThumbnail.frameSeq, 4);
|
|
179
|
+
assert.equal(serializedBinaryThumbnail.contentHash, binaryThumbnailDevice.latestThumbnail.contentHash);
|
|
176
180
|
assert.ok(serializedBinaryThumbnail.framePath.includes('/api/remote/devices/smoke-device/thumbnail?'));
|
|
177
181
|
assert.ok(!('dataUrl' in serializedBinaryThumbnail));
|
|
178
182
|
assert.ok(!('payload' in serializedBinaryThumbnail));
|
|
@@ -242,10 +246,14 @@ try {
|
|
|
242
246
|
assert.equal(binaryLiveDevice.latestLiveFrame.streamId, 'smoke-live');
|
|
243
247
|
assert.equal(binaryLiveDevice.latestLiveFrame.transport, 'binary');
|
|
244
248
|
assert.equal(binaryLiveDevice.latestLiveFrame.byteLength, smokePngFrame.length);
|
|
249
|
+
assert.equal(typeof binaryLiveDevice.latestLiveFrame.contentHash, 'string');
|
|
250
|
+
assert.equal(binaryLiveDevice.latestLiveFrame.contentHash.length, 16);
|
|
251
|
+
assert.equal(binaryLiveDevice.latestLiveFrame.sameContentStreak, 1);
|
|
245
252
|
assert.equal(binaryLiveDevice.counters.liveFramesReceived, 2);
|
|
246
253
|
const serializedBinaryLiveFrame = hub.getDeviceLiveFrame('smoke-device', { includeDataUrl: false });
|
|
247
254
|
assert.equal(serializedBinaryLiveFrame.streamId, 'smoke-live');
|
|
248
255
|
assert.equal(serializedBinaryLiveFrame.frameSeq, 5);
|
|
256
|
+
assert.equal(serializedBinaryLiveFrame.contentHash, binaryLiveDevice.latestLiveFrame.contentHash);
|
|
249
257
|
assert.ok(serializedBinaryLiveFrame.framePath.includes('/api/remote/devices/smoke-device/live/frame?'));
|
|
250
258
|
assert.ok(!('dataUrl' in serializedBinaryLiveFrame));
|
|
251
259
|
assert.ok(!('payload' in serializedBinaryLiveFrame));
|
|
@@ -1925,6 +1925,37 @@ body.is-panning .mind-map-text-overlay-v2-card.is-passive .mind-map-text-overlay
|
|
|
1925
1925
|
caret-color: auto !important;
|
|
1926
1926
|
}
|
|
1927
1927
|
|
|
1928
|
+
.css3d-resolution-wrapper.node-type-csv-table,
|
|
1929
|
+
.css3d-resolution-wrapper.node-type-csv-table > .map-node,
|
|
1930
|
+
.css3d-resolution-wrapper.node-type-csv-table .node-content-wrapper,
|
|
1931
|
+
.map-node-csv-table .node-content-wrapper--csv-table {
|
|
1932
|
+
min-width: 0 !important;
|
|
1933
|
+
min-height: 0 !important;
|
|
1934
|
+
max-width: 100% !important;
|
|
1935
|
+
max-height: 100% !important;
|
|
1936
|
+
box-sizing: border-box !important;
|
|
1937
|
+
overflow: hidden !important;
|
|
1938
|
+
}
|
|
1939
|
+
|
|
1940
|
+
.css3d-resolution-wrapper.node-type-csv-table .node-content-wrapper,
|
|
1941
|
+
.map-node-csv-table .node-content-wrapper--csv-table {
|
|
1942
|
+
display: flex !important;
|
|
1943
|
+
flex-direction: column !important;
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
.css3d-resolution-wrapper.node-type-csv-table .node-response.csv-table-scroll,
|
|
1947
|
+
.map-node-csv-table .node-response.csv-table-scroll {
|
|
1948
|
+
width: 100% !important;
|
|
1949
|
+
height: auto !important;
|
|
1950
|
+
max-height: 100% !important;
|
|
1951
|
+
flex: 1 1 0% !important;
|
|
1952
|
+
min-height: 0 !important;
|
|
1953
|
+
overflow: auto !important;
|
|
1954
|
+
scrollbar-gutter: stable both-edges !important;
|
|
1955
|
+
padding-right: 0 !important;
|
|
1956
|
+
overscroll-behavior: contain;
|
|
1957
|
+
}
|
|
1958
|
+
|
|
1928
1959
|
.css3d-resolution-wrapper.node-type-image,
|
|
1929
1960
|
.css3d-resolution-wrapper.node-type-video,
|
|
1930
1961
|
.css3d-resolution-wrapper.node-type-embed {
|
|
@@ -384,6 +384,34 @@
|
|
|
384
384
|
.csv-table-scroll:hover::-webkit-scrollbar-thumb {
|
|
385
385
|
background: rgba(71, 85, 105, 0.48);
|
|
386
386
|
}
|
|
387
|
+
.css3d-resolution-wrapper.node-type-csv-table,
|
|
388
|
+
.css3d-resolution-wrapper.node-type-csv-table > .map-node,
|
|
389
|
+
.css3d-resolution-wrapper.node-type-csv-table .node-content-wrapper,
|
|
390
|
+
.map-node-csv-table .node-content-wrapper--csv-table {
|
|
391
|
+
min-width: 0 !important;
|
|
392
|
+
min-height: 0 !important;
|
|
393
|
+
max-width: 100% !important;
|
|
394
|
+
max-height: 100% !important;
|
|
395
|
+
box-sizing: border-box !important;
|
|
396
|
+
overflow: hidden !important;
|
|
397
|
+
}
|
|
398
|
+
.css3d-resolution-wrapper.node-type-csv-table .node-content-wrapper,
|
|
399
|
+
.map-node-csv-table .node-content-wrapper--csv-table {
|
|
400
|
+
display: flex !important;
|
|
401
|
+
flex-direction: column !important;
|
|
402
|
+
}
|
|
403
|
+
.css3d-resolution-wrapper.node-type-csv-table .node-response.csv-table-scroll,
|
|
404
|
+
.map-node-csv-table .node-response.csv-table-scroll {
|
|
405
|
+
width: 100% !important;
|
|
406
|
+
height: auto !important;
|
|
407
|
+
max-height: 100% !important;
|
|
408
|
+
flex: 1 1 0% !important;
|
|
409
|
+
min-height: 0 !important;
|
|
410
|
+
overflow: auto !important;
|
|
411
|
+
scrollbar-gutter: stable both-edges !important;
|
|
412
|
+
padding-right: 0 !important;
|
|
413
|
+
overscroll-behavior: contain;
|
|
414
|
+
}
|
|
387
415
|
.csv-table {
|
|
388
416
|
width: max-content;
|
|
389
417
|
min-width: 100%;
|
|
@@ -13637,7 +13665,10 @@
|
|
|
13637
13665
|
frameUrl: source,
|
|
13638
13666
|
receivedAt: String(readRemoteFleetObjectField(frame, 'receivedAt', 'ReceivedAt', '') || '').trim(),
|
|
13639
13667
|
capturedAt: String(readRemoteFleetObjectField(frame, 'capturedAt', 'CapturedAt', '') || '').trim(),
|
|
13640
|
-
streamId: String(readRemoteFleetObjectField(frame, 'streamId', 'StreamId', '') || '').trim()
|
|
13668
|
+
streamId: String(readRemoteFleetObjectField(frame, 'streamId', 'StreamId', '') || '').trim(),
|
|
13669
|
+
contentHash: String(readRemoteFleetObjectField(frame, 'contentHash', 'ContentHash', '') || '').trim(),
|
|
13670
|
+
captureMs: Number(readRemoteFleetObjectField(frame, 'captureMs', 'CaptureMs', 0)) || 0,
|
|
13671
|
+
sameContentStreak: Number(readRemoteFleetObjectField(frame, 'sameContentStreak', 'SameContentStreak', 0)) || 0
|
|
13641
13672
|
};
|
|
13642
13673
|
}
|
|
13643
13674
|
|
|
@@ -13910,7 +13941,10 @@
|
|
|
13910
13941
|
frameUrl: String(frame?.frameUrl || '').trim(),
|
|
13911
13942
|
receivedAt: String(frame?.receivedAt || '').trim(),
|
|
13912
13943
|
capturedAt: String(frame?.capturedAt || '').trim(),
|
|
13913
|
-
streamId: String(frame?.streamId || '').trim()
|
|
13944
|
+
streamId: String(frame?.streamId || '').trim(),
|
|
13945
|
+
contentHash: String(frame?.contentHash || '').trim(),
|
|
13946
|
+
captureMs: Number(frame?.captureMs || 0) || 0,
|
|
13947
|
+
sameContentStreak: Number(frame?.sameContentStreak || 0) || 0
|
|
13914
13948
|
};
|
|
13915
13949
|
}
|
|
13916
13950
|
|
|
@@ -14002,6 +14036,9 @@
|
|
|
14002
14036
|
preview.dataset.remoteFleetFrameSeq = String(nextSeq || 0);
|
|
14003
14037
|
preview.dataset.remoteFleetFrameUrl = frame.frameUrl;
|
|
14004
14038
|
preview.dataset.remoteFleetFrameAt = frame.receivedAt || frame.capturedAt || '';
|
|
14039
|
+
preview.dataset.remoteFleetFrameHash = frame.contentHash || '';
|
|
14040
|
+
preview.dataset.remoteFleetFrameCaptureMs = String(Number(frame.captureMs || 0) || 0);
|
|
14041
|
+
preview.dataset.remoteFleetFrameSameContentStreak = String(Number(frame.sameContentStreak || 0) || 0);
|
|
14005
14042
|
|
|
14006
14043
|
const placeholder = preview.querySelector('[data-remote-fleet-screen-placeholder="true"]');
|
|
14007
14044
|
if (placeholder) {
|
|
@@ -14038,6 +14075,9 @@
|
|
|
14038
14075
|
image.dataset.remoteFleetFrameKind = frame.kind;
|
|
14039
14076
|
image.dataset.remoteFleetFrameSeq = String(nextSeq || 0);
|
|
14040
14077
|
image.dataset.remoteFleetFrameUrl = frame.frameUrl;
|
|
14078
|
+
image.dataset.remoteFleetFrameHash = frame.contentHash || '';
|
|
14079
|
+
image.dataset.remoteFleetFrameCaptureMs = String(Number(frame.captureMs || 0) || 0);
|
|
14080
|
+
image.dataset.remoteFleetFrameSameContentStreak = String(Number(frame.sameContentStreak || 0) || 0);
|
|
14041
14081
|
image.loading = frame.kind === 'thumbnail' ? 'lazy' : 'eager';
|
|
14042
14082
|
image.style.display = 'block';
|
|
14043
14083
|
if (image.src !== frame.frameUrl) {
|
|
@@ -14238,6 +14278,36 @@
|
|
|
14238
14278
|
}
|
|
14239
14279
|
|
|
14240
14280
|
function applyRemoteFleetFramePatchToPreview(preview, frame) {
|
|
14281
|
+
if (String(frame?.kind || '').toLowerCase() === 'live') {
|
|
14282
|
+
if (!preview || !isRemoteFleetFrameNewerForPreview(preview, frame, false)) {
|
|
14283
|
+
return false;
|
|
14284
|
+
}
|
|
14285
|
+
|
|
14286
|
+
const image = ensureRemoteFleetFrameImage(preview, frame);
|
|
14287
|
+
if (!image) {
|
|
14288
|
+
return false;
|
|
14289
|
+
}
|
|
14290
|
+
|
|
14291
|
+
preview._remoteFleetPendingFrame = null;
|
|
14292
|
+
delete preview.dataset.remoteFleetPendingFrameKind;
|
|
14293
|
+
delete preview.dataset.remoteFleetPendingFrameSeq;
|
|
14294
|
+
delete preview.dataset.remoteFleetPendingFrameUrl;
|
|
14295
|
+
|
|
14296
|
+
const committed = commitRemoteFleetFrameToPreview(preview, image, cloneRemoteFleetFramePatch(frame));
|
|
14297
|
+
if (committed) {
|
|
14298
|
+
window.RuntimeTrace?.emit?.('remote.frame.uiPatched', {
|
|
14299
|
+
count: 1,
|
|
14300
|
+
kind: frame.kind,
|
|
14301
|
+
seq: frame.frameSeq,
|
|
14302
|
+
surface: 'img-direct-live',
|
|
14303
|
+
contentHash: frame.contentHash || '',
|
|
14304
|
+
sameContentStreak: Number(frame.sameContentStreak || 0) || 0,
|
|
14305
|
+
captureMs: Number(frame.captureMs || 0) || 0
|
|
14306
|
+
});
|
|
14307
|
+
}
|
|
14308
|
+
return committed;
|
|
14309
|
+
}
|
|
14310
|
+
|
|
14241
14311
|
return queueRemoteFleetFramePaint(preview, frame);
|
|
14242
14312
|
}
|
|
14243
14313
|
|
|
@@ -19547,14 +19617,18 @@
|
|
|
19547
19617
|
|
|
19548
19618
|
// 콘텐츠 래퍼 생성
|
|
19549
19619
|
const contentWrapper = document.createElement('div');
|
|
19550
|
-
contentWrapper.className =
|
|
19620
|
+
contentWrapper.className = isCsvTableNode
|
|
19621
|
+
? 'node-content-wrapper node-content-wrapper--csv-table'
|
|
19622
|
+
: 'node-content-wrapper';
|
|
19551
19623
|
contentWrapper.style.cssText = `
|
|
19552
19624
|
width: 100%;
|
|
19553
19625
|
height: 100%;
|
|
19626
|
+
max-height: 100%;
|
|
19554
19627
|
overflow: hidden;
|
|
19555
19628
|
display: ${isMediaNode ? 'block' : 'flex'};
|
|
19556
19629
|
flex-direction: ${isMediaNode ? 'initial' : 'column'};
|
|
19557
19630
|
min-height: ${isMediaNode ? 'auto' : '0'};
|
|
19631
|
+
min-width: 0;
|
|
19558
19632
|
position: ${isMediaNode ? 'relative' : 'static'};
|
|
19559
19633
|
transform: none;
|
|
19560
19634
|
will-change: auto;
|
|
@@ -19649,10 +19723,13 @@
|
|
|
19649
19723
|
responseDiv.className = 'node-response csv-table-scroll';
|
|
19650
19724
|
responseDiv.style.cssText = `
|
|
19651
19725
|
width: 100%;
|
|
19652
|
-
height:
|
|
19653
|
-
|
|
19726
|
+
height: auto;
|
|
19727
|
+
max-height: 100%;
|
|
19728
|
+
flex: 1 1 0%;
|
|
19654
19729
|
min-height: 0;
|
|
19655
19730
|
overflow: auto;
|
|
19731
|
+
overscroll-behavior: contain;
|
|
19732
|
+
scrollbar-gutter: stable both-edges;
|
|
19656
19733
|
pointer-events: auto;
|
|
19657
19734
|
box-sizing: border-box;
|
|
19658
19735
|
user-select: text;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/wwwroot/_framework/{MindExecution.Web.0bxjy0fhk2.dll → MindExecution.Web.3b8az6ed0q.dll}
RENAMED
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
4
|
+
"hash": "sha256-ncmibpfP4OVaoSZXQLmDLiOOSi8GW6wTmwlKPOWGtWk=",
|
|
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.
|
|
127
|
-
"MindExecution.Kernel.
|
|
128
|
-
"MindExecution.Plugins.Admin.
|
|
129
|
-
"MindExecution.Plugins.Business.
|
|
130
|
-
"MindExecution.Plugins.Concept.
|
|
131
|
-
"MindExecution.Plugins.Directory.
|
|
132
|
-
"MindExecution.Plugins.PlanMaster.
|
|
133
|
-
"MindExecution.Plugins.YouTube.
|
|
134
|
-
"MindExecution.Shared.
|
|
135
|
-
"MindExecution.Web.
|
|
126
|
+
"MindExecution.Core.fc9cjbjplq.dll": "MindExecution.Core.dll",
|
|
127
|
+
"MindExecution.Kernel.pbzp3jfync.dll": "MindExecution.Kernel.dll",
|
|
128
|
+
"MindExecution.Plugins.Admin.gxzwlji1cf.dll": "MindExecution.Plugins.Admin.dll",
|
|
129
|
+
"MindExecution.Plugins.Business.vtaey8c59y.dll": "MindExecution.Plugins.Business.dll",
|
|
130
|
+
"MindExecution.Plugins.Concept.ksc3wkuptm.dll": "MindExecution.Plugins.Concept.dll",
|
|
131
|
+
"MindExecution.Plugins.Directory.zc8ffaoknd.dll": "MindExecution.Plugins.Directory.dll",
|
|
132
|
+
"MindExecution.Plugins.PlanMaster.flzcb87jvl.dll": "MindExecution.Plugins.PlanMaster.dll",
|
|
133
|
+
"MindExecution.Plugins.YouTube.q4tvods1po.dll": "MindExecution.Plugins.YouTube.dll",
|
|
134
|
+
"MindExecution.Shared.r8pan6upd8.dll": "MindExecution.Shared.dll",
|
|
135
|
+
"MindExecution.Web.3b8az6ed0q.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.
|
|
282
|
-
"MindExecution.Kernel.
|
|
283
|
-
"MindExecution.Plugins.Concept.
|
|
284
|
-
"MindExecution.Plugins.PlanMaster.
|
|
285
|
-
"MindExecution.Shared.
|
|
286
|
-
"MindExecution.Web.
|
|
281
|
+
"MindExecution.Core.fc9cjbjplq.dll": "sha256-TymUFwryFLdbCYy2U5qdgE2ZV1yHaLR9bgyrmx6Tcp0=",
|
|
282
|
+
"MindExecution.Kernel.pbzp3jfync.dll": "sha256-Ff6WHyLD39V0fEjUiQlxX9Y+edssyTH+7T4zfBdj3s0=",
|
|
283
|
+
"MindExecution.Plugins.Concept.ksc3wkuptm.dll": "sha256-fIy3+/z7i12WktCVlAHG6hJGVOSgzWJNGXiDrArviYU=",
|
|
284
|
+
"MindExecution.Plugins.PlanMaster.flzcb87jvl.dll": "sha256-zYXs1kS13yT6eDgbsthOX4Ku1n3P+TnPn8oIhJVwxQ0=",
|
|
285
|
+
"MindExecution.Shared.r8pan6upd8.dll": "sha256-Sw26dtjM8Rd82Nk3uWpkPPjrzCULyX1GwGdX9uJ0zzw=",
|
|
286
|
+
"MindExecution.Web.3b8az6ed0q.dll": "sha256-cbwDzpFNXJ2mcIVtZC6fNkvXq4K+q0QTXJ5EGuTKL7w="
|
|
287
287
|
},
|
|
288
288
|
"lazyAssembly": {
|
|
289
|
-
"MindExecution.Plugins.Admin.
|
|
290
|
-
"MindExecution.Plugins.Business.
|
|
291
|
-
"MindExecution.Plugins.Directory.
|
|
292
|
-
"MindExecution.Plugins.YouTube.
|
|
289
|
+
"MindExecution.Plugins.Admin.gxzwlji1cf.dll": "sha256-5D5B2ZuUMj46zBMgH2dRA7CbQf++uukMPrEliFLuZWs=",
|
|
290
|
+
"MindExecution.Plugins.Business.vtaey8c59y.dll": "sha256-rU9MzRRmHuj0/IluV1dvE6x3aRCK/DA4DWKy1DO4VVg=",
|
|
291
|
+
"MindExecution.Plugins.Directory.zc8ffaoknd.dll": "sha256-Ey/HajaVuBxB/Ou4qsM70nhAZBoODeCENzG1J/uEsxs=",
|
|
292
|
+
"MindExecution.Plugins.YouTube.q4tvods1po.dll": "sha256-OhEl9VDjIXBCZq3inYSQyNDRco3oQAp7G95eZIq9IeM="
|
|
293
293
|
}
|
|
294
294
|
},
|
|
295
295
|
"cacheBootResources": true,
|
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-csv-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-csv-
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260616-csv-import-scroll-v564" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260616-csv-import-scroll-v564" />
|
|
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-csv-
|
|
582
|
+
const scriptVersion = '20260616-csv-import-scroll-v564';
|
|
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": "dcqbmuSQ",
|
|
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-
|
|
45
|
+
"hash": "sha256-Z/qOemFxT1byK3tSyusCzWleiFLxcMRdsEc/0DoSPbk=",
|
|
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-
|
|
89
|
+
"hash": "sha256-argv1cbei7H0a1mJ744ULYCoG8vmNo2LOIjjqeVe+v8=",
|
|
90
90
|
"url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
@@ -410,44 +410,44 @@
|
|
|
410
410
|
"url": "_framework/MimeMapping.og9ys58ylm.dll"
|
|
411
411
|
},
|
|
412
412
|
{
|
|
413
|
-
"hash": "sha256-
|
|
414
|
-
"url": "_framework/MindExecution.Core.
|
|
413
|
+
"hash": "sha256-TymUFwryFLdbCYy2U5qdgE2ZV1yHaLR9bgyrmx6Tcp0=",
|
|
414
|
+
"url": "_framework/MindExecution.Core.fc9cjbjplq.dll"
|
|
415
415
|
},
|
|
416
416
|
{
|
|
417
|
-
"hash": "sha256-
|
|
418
|
-
"url": "_framework/MindExecution.Kernel.
|
|
417
|
+
"hash": "sha256-Ff6WHyLD39V0fEjUiQlxX9Y+edssyTH+7T4zfBdj3s0=",
|
|
418
|
+
"url": "_framework/MindExecution.Kernel.pbzp3jfync.dll"
|
|
419
419
|
},
|
|
420
420
|
{
|
|
421
|
-
"hash": "sha256-
|
|
422
|
-
"url": "_framework/MindExecution.Plugins.Admin.
|
|
421
|
+
"hash": "sha256-5D5B2ZuUMj46zBMgH2dRA7CbQf++uukMPrEliFLuZWs=",
|
|
422
|
+
"url": "_framework/MindExecution.Plugins.Admin.gxzwlji1cf.dll"
|
|
423
423
|
},
|
|
424
424
|
{
|
|
425
|
-
"hash": "sha256-
|
|
426
|
-
"url": "_framework/MindExecution.Plugins.Business.
|
|
425
|
+
"hash": "sha256-rU9MzRRmHuj0/IluV1dvE6x3aRCK/DA4DWKy1DO4VVg=",
|
|
426
|
+
"url": "_framework/MindExecution.Plugins.Business.vtaey8c59y.dll"
|
|
427
427
|
},
|
|
428
428
|
{
|
|
429
|
-
"hash": "sha256-
|
|
430
|
-
"url": "_framework/MindExecution.Plugins.Concept.
|
|
429
|
+
"hash": "sha256-fIy3+/z7i12WktCVlAHG6hJGVOSgzWJNGXiDrArviYU=",
|
|
430
|
+
"url": "_framework/MindExecution.Plugins.Concept.ksc3wkuptm.dll"
|
|
431
431
|
},
|
|
432
432
|
{
|
|
433
|
-
"hash": "sha256-
|
|
434
|
-
"url": "_framework/MindExecution.Plugins.Directory.
|
|
433
|
+
"hash": "sha256-Ey/HajaVuBxB/Ou4qsM70nhAZBoODeCENzG1J/uEsxs=",
|
|
434
|
+
"url": "_framework/MindExecution.Plugins.Directory.zc8ffaoknd.dll"
|
|
435
435
|
},
|
|
436
436
|
{
|
|
437
|
-
"hash": "sha256-
|
|
438
|
-
"url": "_framework/MindExecution.Plugins.PlanMaster.
|
|
437
|
+
"hash": "sha256-zYXs1kS13yT6eDgbsthOX4Ku1n3P+TnPn8oIhJVwxQ0=",
|
|
438
|
+
"url": "_framework/MindExecution.Plugins.PlanMaster.flzcb87jvl.dll"
|
|
439
439
|
},
|
|
440
440
|
{
|
|
441
|
-
"hash": "sha256-
|
|
442
|
-
"url": "_framework/MindExecution.Plugins.YouTube.
|
|
441
|
+
"hash": "sha256-OhEl9VDjIXBCZq3inYSQyNDRco3oQAp7G95eZIq9IeM=",
|
|
442
|
+
"url": "_framework/MindExecution.Plugins.YouTube.q4tvods1po.dll"
|
|
443
443
|
},
|
|
444
444
|
{
|
|
445
|
-
"hash": "sha256-
|
|
446
|
-
"url": "_framework/MindExecution.Shared.
|
|
445
|
+
"hash": "sha256-Sw26dtjM8Rd82Nk3uWpkPPjrzCULyX1GwGdX9uJ0zzw=",
|
|
446
|
+
"url": "_framework/MindExecution.Shared.r8pan6upd8.dll"
|
|
447
447
|
},
|
|
448
448
|
{
|
|
449
|
-
"hash": "sha256-
|
|
450
|
-
"url": "_framework/MindExecution.Web.
|
|
449
|
+
"hash": "sha256-cbwDzpFNXJ2mcIVtZC6fNkvXq4K+q0QTXJ5EGuTKL7w=",
|
|
450
|
+
"url": "_framework/MindExecution.Web.3b8az6ed0q.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-
|
|
773
|
+
"hash": "sha256-X5tMd8TgdpyfWLfjIOQZ6EsVxGF+b/KYBX2d/htH6Qo=",
|
|
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-
|
|
837
|
+
"hash": "sha256-6d4BMAFu8S+buYLIfn/YU12rChaOPCkPEswE7eGNQAA=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|
|
Binary file
|