@mindexec/cli 0.2.171 → 0.2.173
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 +1 -1
- package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
- package/scripts/remote-agent-managed-smoke.mjs +27 -1
- package/scripts/remote-fleet-render-smoke.mjs +21 -18
- package/server.js +146 -3
- package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +72 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +44 -6
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +4 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-pipeline.js +68 -7
- package/wwwroot/_framework/{MindExecution.Plugins.Business.jn5nc7okql.dll → MindExecution.Plugins.Business.qf0u584aql.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.j3ndei56k5.dll → MindExecution.Plugins.Concept.dol9cxm11l.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.jx5e69sim0.dll → MindExecution.Plugins.PlanMaster.tuyuwdmm8m.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.qqwd3lc6cn.dll → MindExecution.Plugins.YouTube.wr4ic92azb.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.yykm4v7xnd.dll → MindExecution.Shared.t8xvnypbv2.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Web.2fexfu7nw7.dll → MindExecution.Web.m8joypnkws.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +13 -13
- package/wwwroot/index.html +6 -6
- package/wwwroot/service-worker-assets.js +19 -19
- package/wwwroot/service-worker.js +1 -1
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -164,7 +164,7 @@ async function connectManagedAgent(clientBridge, managerEndpoint, staleEndpoint)
|
|
|
164
164
|
leaseId: LEASE_ID,
|
|
165
165
|
nodeId: 'remote-agent-managed-smoke-node',
|
|
166
166
|
engine: 'auto',
|
|
167
|
-
source: '
|
|
167
|
+
source: 'local-bridge-registry'
|
|
168
168
|
})
|
|
169
169
|
});
|
|
170
170
|
|
|
@@ -247,6 +247,32 @@ async function main() {
|
|
|
247
247
|
assert.equal(secondAgent.managerCandidates?.[0], managerEndpoint, JSON.stringify(secondAgent.managerCandidates));
|
|
248
248
|
assert.equal(secondAgent.managerCandidates?.[1], staleEndpoint, JSON.stringify(secondAgent.managerCandidates));
|
|
249
249
|
|
|
250
|
+
const staleReport = await fetchJson(`${clientBridge.baseUrl}/api/remote/agent/sync-report`, {
|
|
251
|
+
method: 'POST',
|
|
252
|
+
body: JSON.stringify({
|
|
253
|
+
ok: false,
|
|
254
|
+
attempted: true,
|
|
255
|
+
disconnected: true,
|
|
256
|
+
authenticated: true,
|
|
257
|
+
reason: 'agent-disconnected',
|
|
258
|
+
targetActive: true,
|
|
259
|
+
targetEndpoint: managerEndpoint,
|
|
260
|
+
targetEndpointCandidates: [managerEndpoint, staleEndpoint],
|
|
261
|
+
targetLeaseId: LEASE_ID,
|
|
262
|
+
targetNodeId: 'remote-agent-managed-smoke-node'
|
|
263
|
+
})
|
|
264
|
+
});
|
|
265
|
+
assert.equal(staleReport.ok, true, JSON.stringify(staleReport.payload));
|
|
266
|
+
|
|
267
|
+
const staleState = await fetchJson(`${clientBridge.baseUrl}/api/remote/agent/status`);
|
|
268
|
+
assert.equal(staleState.payload?.needsReconnect, true, JSON.stringify(staleState.payload));
|
|
269
|
+
|
|
270
|
+
const thirdAgent = await connectManagedAgent(clientBridge, managerEndpoint, staleEndpoint);
|
|
271
|
+
assert.equal(thirdAgent.running, true, JSON.stringify(thirdAgent));
|
|
272
|
+
assert.equal(thirdAgent.ready, true, JSON.stringify(thirdAgent));
|
|
273
|
+
assert.equal(thirdAgent.needsReconnect, false, JSON.stringify(thirdAgent));
|
|
274
|
+
assert.notEqual(thirdAgent.pid, secondAgent.pid, `stale registry-owned RemoteAgent should be restarted, second=${secondAgent.pid}, third=${thirdAgent.pid}`);
|
|
275
|
+
|
|
250
276
|
console.log('RemoteAgent managed supervisor smoke OK');
|
|
251
277
|
} finally {
|
|
252
278
|
if (hangingManager) {
|
|
@@ -964,14 +964,11 @@ try {
|
|
|
964
964
|
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(297px,\s*1fr\)/);
|
|
965
965
|
assert.equal(mirrorBodyView.dataset.remoteFleetDensity, 'large');
|
|
966
966
|
assert.match(mirrorBodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(297px,\s*1fr\)/);
|
|
967
|
-
assert.ok(diagnostics.textOverlayInvalidations.some(entry =>
|
|
968
|
-
entry.nodeId === 'remote-fleet-render-smoke'
|
|
969
|
-
&& entry.reason === 'remote-monitor-size'));
|
|
970
967
|
assert.ok(diagnostics.runtimeTrace.some(entry =>
|
|
971
968
|
entry.type === 'remote.monitor.sizeChanged'
|
|
972
969
|
&& entry.nodeId === 'remote-fleet-render-smoke'
|
|
973
970
|
&& entry.density === 'large'
|
|
974
|
-
&& entry.
|
|
971
|
+
&& entry.css3dOnly === true));
|
|
975
972
|
bodyView.querySelector('[data-remote-fleet-action="monitor-size-down"]').dispatchEvent({ type: 'click' });
|
|
976
973
|
assert.equal(bodyView.dataset.remoteFleetDensity, 'cards');
|
|
977
974
|
assert.match(bodyView.querySelector('[data-remote-fleet-device-grid="true"]')?.style.cssText || '', /minmax\(198px,\s*1fr\)/);
|
|
@@ -987,21 +984,30 @@ try {
|
|
|
987
984
|
cards = bodyView.querySelectorAll('article[data-device-id]');
|
|
988
985
|
const patchTarget = devices.find(device =>
|
|
989
986
|
device.Connected === true
|
|
990
|
-
&& device.ThumbnailEnabled === true
|
|
991
|
-
&& device.LiveStreamActive !== true);
|
|
987
|
+
&& device.ThumbnailEnabled === true);
|
|
992
988
|
assert.ok(patchTarget);
|
|
993
989
|
const patchCard = Array.from(cards).find(card => card.dataset.deviceId === patchTarget.DeviceId);
|
|
994
990
|
const patchPreview = patchCard?.querySelector('[data-remote-fleet-device-preview="tile"]');
|
|
995
991
|
assert.ok(patchPreview);
|
|
996
|
-
const
|
|
992
|
+
const patchKind = String(patchPreview.dataset.remoteFleetFrameKind || '').toLowerCase() === 'live'
|
|
993
|
+
? 'live'
|
|
994
|
+
: 'thumbnail';
|
|
995
|
+
const patchUrl = `/api/remote/devices/${encodeURIComponent(patchTarget.DeviceId)}/${patchKind}?token=render-smoke-frame&seq=9999`;
|
|
997
996
|
const patchCount = manager.applyRemoteFleetFramePatchesForTest(bodyView, [{
|
|
998
997
|
deviceId: patchTarget.DeviceId,
|
|
999
|
-
kind:
|
|
998
|
+
kind: patchKind,
|
|
1000
999
|
frameSeq: 9999,
|
|
1001
1000
|
frameUrl: patchUrl,
|
|
1002
1001
|
receivedAt: new Date().toISOString()
|
|
1003
1002
|
}]);
|
|
1004
|
-
assert.equal(patchCount, 1
|
|
1003
|
+
assert.equal(patchCount, 1, JSON.stringify({
|
|
1004
|
+
targetDeviceId: patchTarget.DeviceId,
|
|
1005
|
+
previewCount: bodyView.querySelectorAll('[data-remote-fleet-device-preview]').length,
|
|
1006
|
+
previewIds: Array.from(bodyView.querySelectorAll('[data-remote-fleet-device-preview]')).slice(0, 12).map(preview => preview.dataset.deviceId || ''),
|
|
1007
|
+
currentKind: patchPreview.dataset.remoteFleetFrameKind || '',
|
|
1008
|
+
currentSeq: patchPreview.dataset.remoteFleetFrameSeq || '',
|
|
1009
|
+
currentUrl: patchPreview.dataset.remoteFleetFrameUrl || ''
|
|
1010
|
+
}));
|
|
1005
1011
|
await wait();
|
|
1006
1012
|
assert.equal(patchPreview.dataset.remoteFleetFrameSeq, '9999');
|
|
1007
1013
|
assert.equal(patchPreview.dataset.remoteFleetFrameUrl, patchUrl);
|
|
@@ -1085,11 +1091,11 @@ try {
|
|
|
1085
1091
|
await wait(10);
|
|
1086
1092
|
assert.ok(
|
|
1087
1093
|
Number(moduleRef._forceUpdateFrames || 0) >= 2,
|
|
1088
|
-
'binary live frame commits must wake the passive MDM
|
|
1089
|
-
assert.equal(moduleRef._lastAnimationWakeReason, 'remote-live-
|
|
1094
|
+
'binary live frame commits must wake the passive MDM CSS3D frame loop');
|
|
1095
|
+
assert.equal(moduleRef._lastAnimationWakeReason, 'remote-live-css3d-frame');
|
|
1090
1096
|
assert.ok(
|
|
1091
|
-
diagnostics.runtimeTrace.some(event => event.type === 'remote.frame.
|
|
1092
|
-
'binary live frame commits must trace the MDM
|
|
1097
|
+
diagnostics.runtimeTrace.some(event => event.type === 'remote.frame.css3dWake'),
|
|
1098
|
+
'binary live frame commits must trace the MDM CSS3D wake path');
|
|
1093
1099
|
|
|
1094
1100
|
manager.renderRemoteFleetMonitorForTest(bodyView, buildMonitorNode(devices, hub.getStatus({ includeSecrets: true }), latestTaskBatch, recentTaskBatches));
|
|
1095
1101
|
await wait(30);
|
|
@@ -1139,7 +1145,7 @@ try {
|
|
|
1139
1145
|
otherBoardPatchPreview.querySelector('canvas[data-remote-fleet-frame-canvas="true"]')?.style.display,
|
|
1140
1146
|
'block');
|
|
1141
1147
|
assert.ok(diagnostics.runtimeTrace.some(event =>
|
|
1142
|
-
event.type === 'remote.frame.wsCachePrimed'
|
|
1148
|
+
(event.type === 'remote.frame.wsCachePrimed' || event.type === 'remote.frame.surfaceCachePrimed')
|
|
1143
1149
|
&& event.nodeId === otherBoardNodeId));
|
|
1144
1150
|
otherBoardShell.remove();
|
|
1145
1151
|
|
|
@@ -1194,14 +1200,11 @@ try {
|
|
|
1194
1200
|
assert.equal(hostFeedback?.textContent, '');
|
|
1195
1201
|
assert.equal(nodeShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'true');
|
|
1196
1202
|
assert.equal(hostMirrorShell.querySelector('[data-remote-fleet-host-indicator="true"]')?.dataset.remoteFleetHostActive, 'true');
|
|
1197
|
-
assert.ok(diagnostics.textOverlayInvalidations.some(entry =>
|
|
1198
|
-
entry.nodeId === 'remote-fleet-render-smoke'
|
|
1199
|
-
&& entry.reason === 'remote-monitor-host'));
|
|
1200
1203
|
assert.ok(diagnostics.runtimeTrace.some(entry =>
|
|
1201
1204
|
entry.type === 'remote.monitor.projectionInvalidated'
|
|
1202
1205
|
&& entry.nodeId === 'remote-fleet-render-smoke'
|
|
1203
1206
|
&& entry.reason === 'host'
|
|
1204
|
-
&& entry.
|
|
1207
|
+
&& entry.css3dOnly === true));
|
|
1205
1208
|
hostMirrorShell.remove();
|
|
1206
1209
|
|
|
1207
1210
|
hub.setHostTarget({
|
package/server.js
CHANGED
|
@@ -3493,6 +3493,8 @@ function createRemoteAgentIdleState(overrides = {}) {
|
|
|
3493
3493
|
updatedAt: new Date().toISOString(),
|
|
3494
3494
|
ready: false,
|
|
3495
3495
|
connectedAt: '',
|
|
3496
|
+
needsReconnect: false,
|
|
3497
|
+
reconnectReason: '',
|
|
3496
3498
|
exitedAt: '',
|
|
3497
3499
|
exitCode: null,
|
|
3498
3500
|
signal: '',
|
|
@@ -3548,6 +3550,114 @@ function createRemoteAgentSyncReport(body = {}) {
|
|
|
3548
3550
|
};
|
|
3549
3551
|
}
|
|
3550
3552
|
|
|
3553
|
+
function isRemoteAgentSyncReportReconnectSignal(report) {
|
|
3554
|
+
if (!report || report.connected === true) {
|
|
3555
|
+
return false;
|
|
3556
|
+
}
|
|
3557
|
+
|
|
3558
|
+
const reason = String(report.reason || '').toLowerCase();
|
|
3559
|
+
const error = String(report.error || '').toLowerCase();
|
|
3560
|
+
const text = `${reason} ${error}`.trim();
|
|
3561
|
+
if (!text && report.disconnected !== true) {
|
|
3562
|
+
return false;
|
|
3563
|
+
}
|
|
3564
|
+
|
|
3565
|
+
if (/(throttled|registry-not-authenticated|registry-auth-pending|session-expired|no-active-target|registry-inactive|local-monitor-is-host|local-host-superseded|same-host|target-missing-endpoint-or-pair)/i.test(text)) {
|
|
3566
|
+
return false;
|
|
3567
|
+
}
|
|
3568
|
+
|
|
3569
|
+
return report.disconnected === true
|
|
3570
|
+
|| /(agent-(disconnected|exited|failed)|connect-failed|connection-(closed|lost|reset)|socket-(closed|reset)|econnreset|read econnreset|ws-close|websocket.*close)/i.test(text);
|
|
3571
|
+
}
|
|
3572
|
+
|
|
3573
|
+
function isRemoteAgentSyncReportForManagers(report, managers = [], leaseId = '') {
|
|
3574
|
+
if (!report) {
|
|
3575
|
+
return false;
|
|
3576
|
+
}
|
|
3577
|
+
|
|
3578
|
+
const reportLeaseId = safeRemoteAgentField(report.targetLeaseId, 128);
|
|
3579
|
+
const targetLeaseId = safeRemoteAgentField(leaseId, 128);
|
|
3580
|
+
if (reportLeaseId && targetLeaseId && reportLeaseId !== targetLeaseId) {
|
|
3581
|
+
return false;
|
|
3582
|
+
}
|
|
3583
|
+
|
|
3584
|
+
const reportManagers = normalizeRemoteManagerEndpointList(report.targetEndpointCandidates, report.targetEndpoint);
|
|
3585
|
+
const targetManagers = normalizeRemoteManagerEndpointList(managers);
|
|
3586
|
+
if (reportManagers.length === 0 || targetManagers.length === 0) {
|
|
3587
|
+
return true;
|
|
3588
|
+
}
|
|
3589
|
+
|
|
3590
|
+
const targetSet = new Set(targetManagers.map(value => value.toLowerCase()));
|
|
3591
|
+
return reportManagers.some(value => targetSet.has(value.toLowerCase()));
|
|
3592
|
+
}
|
|
3593
|
+
|
|
3594
|
+
function shouldRestartRemoteAgentForTarget(managers = [], leaseId = '') {
|
|
3595
|
+
if (!isRemoteAgentProcessRunning()) {
|
|
3596
|
+
return false;
|
|
3597
|
+
}
|
|
3598
|
+
|
|
3599
|
+
const activeConnectionKeys = new Set(
|
|
3600
|
+
normalizeRemoteManagerEndpointList(managers).map(manager => createRemoteAgentConnectionKey(manager, leaseId))
|
|
3601
|
+
);
|
|
3602
|
+
if (activeConnectionKeys.size > 0 && !activeConnectionKeys.has(remoteAgentState.connectionKey)) {
|
|
3603
|
+
return false;
|
|
3604
|
+
}
|
|
3605
|
+
|
|
3606
|
+
if (remoteAgentState.needsReconnect === true) {
|
|
3607
|
+
return true;
|
|
3608
|
+
}
|
|
3609
|
+
|
|
3610
|
+
return isRemoteAgentRegistryOwned()
|
|
3611
|
+
&& isRemoteAgentSyncReportReconnectSignal(remoteAgentSyncReportState)
|
|
3612
|
+
&& isRemoteAgentSyncReportForManagers(remoteAgentSyncReportState, managers, leaseId);
|
|
3613
|
+
}
|
|
3614
|
+
|
|
3615
|
+
function markRemoteAgentReconnectNeeded(reason = 'agent-disconnected', wakeReason = 'agent-disconnected') {
|
|
3616
|
+
if (!isRemoteAgentRegistryOwned()) {
|
|
3617
|
+
return false;
|
|
3618
|
+
}
|
|
3619
|
+
|
|
3620
|
+
const safeReason = safeRemoteAgentField(reason || 'agent-disconnected', 160);
|
|
3621
|
+
if (remoteAgentState.needsReconnect !== true) {
|
|
3622
|
+
logWarn(
|
|
3623
|
+
'remote',
|
|
3624
|
+
`managed RemoteAgent marked stale ${formatKeyValue('reason', safeReason)} ${formatKeyValue('manager', remoteAgentState.manager || '-')}`);
|
|
3625
|
+
}
|
|
3626
|
+
|
|
3627
|
+
remoteAgentState.ready = false;
|
|
3628
|
+
remoteAgentState.needsReconnect = true;
|
|
3629
|
+
remoteAgentState.reconnectReason = safeReason;
|
|
3630
|
+
remoteAgentState.lastError = safeReason;
|
|
3631
|
+
remoteAgentState.updatedAt = new Date().toISOString();
|
|
3632
|
+
emitBridgeEvent('RemoteAgentNeedsReconnect', serializeRemoteAgentState());
|
|
3633
|
+
scheduleRemoteRegistryFollower(0, wakeReason || safeReason);
|
|
3634
|
+
return true;
|
|
3635
|
+
}
|
|
3636
|
+
|
|
3637
|
+
function markRemoteAgentReconnectNeededFromReport(report) {
|
|
3638
|
+
if (!isRemoteAgentRegistryOwned()
|
|
3639
|
+
|| !isRemoteAgentSyncReportReconnectSignal(report)
|
|
3640
|
+
|| !isRemoteAgentSyncReportForManagers(report, remoteAgentState.managerCandidates, remoteAgentState.leaseId)) {
|
|
3641
|
+
return false;
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3644
|
+
const reason = safeRemoteAgentField(report.reason || report.error || 'sync-report-disconnected', 160);
|
|
3645
|
+
return markRemoteAgentReconnectNeeded(reason, 'agent-sync-report-disconnected');
|
|
3646
|
+
}
|
|
3647
|
+
|
|
3648
|
+
function isRemoteAgentOutputReconnectSignal(text) {
|
|
3649
|
+
const normalized = String(text || '').toLowerCase();
|
|
3650
|
+
if (!normalized) {
|
|
3651
|
+
return false;
|
|
3652
|
+
}
|
|
3653
|
+
|
|
3654
|
+
if (/connected to remotehub/i.test(normalized) && !/(disconnect|closed|failed|econnreset|etimedout|epipe|socket|websocket|remotehub.*error)/i.test(normalized)) {
|
|
3655
|
+
return false;
|
|
3656
|
+
}
|
|
3657
|
+
|
|
3658
|
+
return /(remotehub.*(disconnect|closed|failed|error)|manager.*(disconnect|closed|failed)|connection.*(closed|lost|reset|refused|failed)|socket.*(closed|reset|hang up)|websocket.*(close|closed|failed)|ws.*(close|closed|failed)|econnreset|read econnreset|etimedout|ehostunreach|enetunreach|epipe|agent-disconnected|remotehub rejected|remotefast agent failed)/i.test(normalized);
|
|
3659
|
+
}
|
|
3660
|
+
|
|
3551
3661
|
function rememberRemoteAgentSyncReport(report) {
|
|
3552
3662
|
remoteAgentSyncReportState = report;
|
|
3553
3663
|
const reason = report.reason || report.error || (report.ok ? 'ok' : 'failed');
|
|
@@ -3559,9 +3669,10 @@ function rememberRemoteAgentSyncReport(report) {
|
|
|
3559
3669
|
? 'attempted'
|
|
3560
3670
|
: report.skipped
|
|
3561
3671
|
? 'skipped'
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3672
|
+
: report.ok
|
|
3673
|
+
? 'ok'
|
|
3674
|
+
: 'failed';
|
|
3675
|
+
markRemoteAgentReconnectNeededFromReport(report);
|
|
3565
3676
|
const key = [
|
|
3566
3677
|
status,
|
|
3567
3678
|
reason,
|
|
@@ -3597,6 +3708,11 @@ function appendRemoteAgentOutput(stream, chunk, stateConnectionKey = '') {
|
|
|
3597
3708
|
if (/Connected to RemoteHub/i.test(text)) {
|
|
3598
3709
|
remoteAgentState.ready = true;
|
|
3599
3710
|
remoteAgentState.connectedAt = new Date().toISOString();
|
|
3711
|
+
remoteAgentState.needsReconnect = false;
|
|
3712
|
+
remoteAgentState.reconnectReason = '';
|
|
3713
|
+
}
|
|
3714
|
+
if (isRemoteAgentOutputReconnectSignal(text)) {
|
|
3715
|
+
markRemoteAgentReconnectNeeded('process-output-disconnected', 'agent-process-output-disconnected');
|
|
3600
3716
|
}
|
|
3601
3717
|
remoteAgentState.updatedAt = new Date().toISOString();
|
|
3602
3718
|
}
|
|
@@ -4326,6 +4442,19 @@ async function startRemoteAgentConnection(options = {}) {
|
|
|
4326
4442
|
}
|
|
4327
4443
|
|
|
4328
4444
|
const activeConnectionKeys = new Set(managers.map(manager => createRemoteAgentConnectionKey(manager, leaseId)));
|
|
4445
|
+
if (isRemoteAgentProcessRunning()
|
|
4446
|
+
&& activeConnectionKeys.has(remoteAgentState.connectionKey)) {
|
|
4447
|
+
if (shouldRestartRemoteAgentForTarget(managers, leaseId)) {
|
|
4448
|
+
const reason = remoteAgentState.reconnectReason || remoteAgentState.lastError || 'registry-agent-stale';
|
|
4449
|
+
logWarn(
|
|
4450
|
+
'remote',
|
|
4451
|
+
`managed RemoteAgent restarting stale registry process ${formatKeyValue('manager', remoteAgentState.manager || managers[0])} ${formatKeyValue('reason', reason)}`);
|
|
4452
|
+
await stopRemoteAgentConnection('registry-agent-stale', { suppressRetry: false });
|
|
4453
|
+
} else {
|
|
4454
|
+
return { ok: true, alreadyRunning: true, agent: serializeRemoteAgentState() };
|
|
4455
|
+
}
|
|
4456
|
+
}
|
|
4457
|
+
|
|
4329
4458
|
if (isRemoteAgentProcessRunning()
|
|
4330
4459
|
&& activeConnectionKeys.has(remoteAgentState.connectionKey)) {
|
|
4331
4460
|
return { ok: true, alreadyRunning: true, agent: serializeRemoteAgentState() };
|
|
@@ -4378,6 +4507,18 @@ function appendRemoteAgentAttemptOutput(attempt, stream, chunk) {
|
|
|
4378
4507
|
if (/Connected to RemoteHub/i.test(text)) {
|
|
4379
4508
|
attempt.state.ready = true;
|
|
4380
4509
|
attempt.state.connectedAt = new Date().toISOString();
|
|
4510
|
+
attempt.state.needsReconnect = false;
|
|
4511
|
+
attempt.state.reconnectReason = '';
|
|
4512
|
+
}
|
|
4513
|
+
if (isRemoteAgentOutputReconnectSignal(text)) {
|
|
4514
|
+
attempt.state.ready = false;
|
|
4515
|
+
attempt.state.needsReconnect = true;
|
|
4516
|
+
attempt.state.reconnectReason = 'process-output-disconnected';
|
|
4517
|
+
attempt.state.lastError = 'process-output-disconnected';
|
|
4518
|
+
if (remoteAgentState === attempt.state
|
|
4519
|
+
&& isRemoteAgentRegistryState(attempt.state)) {
|
|
4520
|
+
markRemoteAgentReconnectNeeded('process-output-disconnected', 'agent-process-output-disconnected');
|
|
4521
|
+
}
|
|
4381
4522
|
}
|
|
4382
4523
|
attempt.state.updatedAt = new Date().toISOString();
|
|
4383
4524
|
}
|
|
@@ -4625,6 +4766,8 @@ async function startRemoteAgentConnectionRace(options = {}) {
|
|
|
4625
4766
|
remoteAgentState = winner.state;
|
|
4626
4767
|
remoteAgentState.status = 'running';
|
|
4627
4768
|
remoteAgentState.proc = winner.child;
|
|
4769
|
+
remoteAgentState.needsReconnect = false;
|
|
4770
|
+
remoteAgentState.reconnectReason = '';
|
|
4628
4771
|
remoteAgentState.updatedAt = new Date().toISOString();
|
|
4629
4772
|
rememberRemoteAgentSuccessfulManager(winner.manager, leaseId);
|
|
4630
4773
|
emitBridgeEvent('RemoteAgentStarted', serializeRemoteAgentState());
|
|
@@ -2760,6 +2760,78 @@ body.mindcanvas-is-dense .css3d-resolution-wrapper.node-type-templatelauncher.se
|
|
|
2760
2760
|
background: #f8fafc;
|
|
2761
2761
|
}
|
|
2762
2762
|
|
|
2763
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle {
|
|
2764
|
+
position: absolute;
|
|
2765
|
+
z-index: 30;
|
|
2766
|
+
pointer-events: auto;
|
|
2767
|
+
touch-action: none;
|
|
2768
|
+
opacity: 0;
|
|
2769
|
+
}
|
|
2770
|
+
|
|
2771
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.nw,
|
|
2772
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.ne,
|
|
2773
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.sw,
|
|
2774
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.se {
|
|
2775
|
+
width: 18px;
|
|
2776
|
+
height: 18px;
|
|
2777
|
+
}
|
|
2778
|
+
|
|
2779
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.nw {
|
|
2780
|
+
top: -6px;
|
|
2781
|
+
left: -6px;
|
|
2782
|
+
cursor: nwse-resize;
|
|
2783
|
+
}
|
|
2784
|
+
|
|
2785
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.ne {
|
|
2786
|
+
top: -6px;
|
|
2787
|
+
right: -6px;
|
|
2788
|
+
cursor: nesw-resize;
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2791
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.sw {
|
|
2792
|
+
bottom: -6px;
|
|
2793
|
+
left: -6px;
|
|
2794
|
+
cursor: nesw-resize;
|
|
2795
|
+
}
|
|
2796
|
+
|
|
2797
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.se {
|
|
2798
|
+
right: -6px;
|
|
2799
|
+
bottom: -6px;
|
|
2800
|
+
cursor: nwse-resize;
|
|
2801
|
+
}
|
|
2802
|
+
|
|
2803
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.n,
|
|
2804
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.s {
|
|
2805
|
+
left: 14px;
|
|
2806
|
+
right: 14px;
|
|
2807
|
+
height: 12px;
|
|
2808
|
+
cursor: ns-resize;
|
|
2809
|
+
}
|
|
2810
|
+
|
|
2811
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.n {
|
|
2812
|
+
top: -5px;
|
|
2813
|
+
}
|
|
2814
|
+
|
|
2815
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.s {
|
|
2816
|
+
bottom: -5px;
|
|
2817
|
+
}
|
|
2818
|
+
|
|
2819
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.w,
|
|
2820
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.e {
|
|
2821
|
+
top: 14px;
|
|
2822
|
+
bottom: 14px;
|
|
2823
|
+
width: 12px;
|
|
2824
|
+
cursor: ew-resize;
|
|
2825
|
+
}
|
|
2826
|
+
|
|
2827
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.w {
|
|
2828
|
+
left: -5px;
|
|
2829
|
+
}
|
|
2830
|
+
|
|
2831
|
+
.map-node-template-card.map-node-remote-fleet .remote-fleet-resize-handle.e {
|
|
2832
|
+
right: -5px;
|
|
2833
|
+
}
|
|
2834
|
+
|
|
2763
2835
|
.map-node-template-card.map-node-remote-fleet .template-card__header--remote-fleet {
|
|
2764
2836
|
align-items: center;
|
|
2765
2837
|
}
|
|
@@ -12544,6 +12544,37 @@
|
|
|
12544
12544
|
return title;
|
|
12545
12545
|
}
|
|
12546
12546
|
|
|
12547
|
+
function ensureRemoteFleetResizeHandles(container, nodeModel) {
|
|
12548
|
+
if (!container) return;
|
|
12549
|
+
const nodeId = String(nodeModel?.id ?? nodeModel?.Id ?? container.dataset?.nodeId ?? '').trim();
|
|
12550
|
+
if (!nodeId) return;
|
|
12551
|
+
|
|
12552
|
+
container.dataset.nodeId = nodeId;
|
|
12553
|
+
const handles = [
|
|
12554
|
+
{ className: 'nw', corner: 'TL' },
|
|
12555
|
+
{ className: 'ne', corner: 'TR' },
|
|
12556
|
+
{ className: 'sw', corner: 'BL' },
|
|
12557
|
+
{ className: 'se', corner: 'BR' },
|
|
12558
|
+
{ className: 'n', corner: 'T' },
|
|
12559
|
+
{ className: 's', corner: 'B' },
|
|
12560
|
+
{ className: 'w', corner: 'L' },
|
|
12561
|
+
{ className: 'e', corner: 'R' }
|
|
12562
|
+
];
|
|
12563
|
+
|
|
12564
|
+
handles.forEach(handleInfo => {
|
|
12565
|
+
let handle = container.querySelector(`:scope > .remote-fleet-resize-handle.${handleInfo.className}`);
|
|
12566
|
+
if (!handle) {
|
|
12567
|
+
handle = document.createElement('div');
|
|
12568
|
+
handle.className = `resize-handle remote-fleet-resize-handle ${handleInfo.className}`;
|
|
12569
|
+
handle.setAttribute('aria-hidden', 'true');
|
|
12570
|
+
container.appendChild(handle);
|
|
12571
|
+
}
|
|
12572
|
+
|
|
12573
|
+
handle.dataset.nodeId = nodeId;
|
|
12574
|
+
handle.dataset.corner = handleInfo.corner;
|
|
12575
|
+
});
|
|
12576
|
+
}
|
|
12577
|
+
|
|
12547
12578
|
function createRemoteFleetTemplateNodeElement(nodeModel) {
|
|
12548
12579
|
const width = Number(nodeModel.width ?? nodeModel.Width ?? 960);
|
|
12549
12580
|
const height = Number(nodeModel.height ?? nodeModel.Height ?? 620);
|
|
@@ -12559,6 +12590,7 @@
|
|
|
12559
12590
|
container.style.cssText = `
|
|
12560
12591
|
width: ${width}px;
|
|
12561
12592
|
height: ${height}px;
|
|
12593
|
+
position: relative;
|
|
12562
12594
|
box-sizing: border-box;
|
|
12563
12595
|
overflow: hidden;
|
|
12564
12596
|
pointer-events: auto;
|
|
@@ -12595,6 +12627,7 @@
|
|
|
12595
12627
|
shell.appendChild(bodyView);
|
|
12596
12628
|
|
|
12597
12629
|
container.appendChild(shell);
|
|
12630
|
+
ensureRemoteFleetResizeHandles(container, nodeModel);
|
|
12598
12631
|
return container;
|
|
12599
12632
|
}
|
|
12600
12633
|
|
|
@@ -14864,7 +14897,7 @@
|
|
|
14864
14897
|
return surfaces;
|
|
14865
14898
|
}
|
|
14866
14899
|
|
|
14867
|
-
root.querySelectorAll('[data-remote-fleet-device-preview]
|
|
14900
|
+
root.querySelectorAll('[data-remote-fleet-device-preview]').forEach(preview => {
|
|
14868
14901
|
const deviceId = String(preview.dataset.deviceId || '').trim();
|
|
14869
14902
|
if (!deviceId) {
|
|
14870
14903
|
return;
|
|
@@ -15823,13 +15856,15 @@
|
|
|
15823
15856
|
|
|
15824
15857
|
function getRemoteFleetFramePatchTargets(bodyView) {
|
|
15825
15858
|
const targets = [];
|
|
15826
|
-
const addTarget = target => {
|
|
15827
|
-
if (target
|
|
15859
|
+
const addTarget = (target, requireAttached = true) => {
|
|
15860
|
+
if (target
|
|
15861
|
+
&& (!requireAttached || document.body.contains(target))
|
|
15862
|
+
&& !targets.includes(target)) {
|
|
15828
15863
|
targets.push(target);
|
|
15829
15864
|
}
|
|
15830
15865
|
};
|
|
15831
15866
|
|
|
15832
|
-
addTarget(bodyView);
|
|
15867
|
+
addTarget(bodyView, false);
|
|
15833
15868
|
const nodeId = String(bodyView?.dataset?.nodeId || '').trim();
|
|
15834
15869
|
if (nodeId) {
|
|
15835
15870
|
document.querySelectorAll('.map-node-remote-fleet__body[data-node-id]').forEach(candidate => {
|
|
@@ -15855,7 +15890,8 @@
|
|
|
15855
15890
|
const frameKind = String(frame.kind || '').toLowerCase();
|
|
15856
15891
|
|
|
15857
15892
|
targets.forEach(target => {
|
|
15858
|
-
target.querySelectorAll('[data-remote-fleet-device-preview]
|
|
15893
|
+
target.querySelectorAll('[data-remote-fleet-device-preview]').forEach(preview => {
|
|
15894
|
+
if (!preview.dataset.deviceId) return;
|
|
15859
15895
|
if (String(preview.dataset.deviceId || '').trim() !== deviceId) return;
|
|
15860
15896
|
const currentKind = String(preview.dataset.remoteFleetFrameKind || '').toLowerCase();
|
|
15861
15897
|
if (currentKind === 'live' && frameKind !== 'live') return;
|
|
@@ -22228,7 +22264,8 @@
|
|
|
22228
22264
|
background: transparent;
|
|
22229
22265
|
`;
|
|
22230
22266
|
|
|
22231
|
-
const
|
|
22267
|
+
const remoteFleetSurface = isRemoteFleetMonitorNode(nodeModel) || isRemoteFleetDeviceNode(nodeModel);
|
|
22268
|
+
const size = remoteFleetSurface ? 26 : 18;
|
|
22232
22269
|
const edgeOffset = `${size}px`;
|
|
22233
22270
|
const zones = [
|
|
22234
22271
|
{ corner: 'TL', className: 'nw', cursor: 'nwse-resize', style: `left:0;top:0;width:${size}px;height:${size}px;` },
|
|
@@ -22726,6 +22763,7 @@
|
|
|
22726
22763
|
card.style.maxHeight = `${worldHeight}px`;
|
|
22727
22764
|
card.style.transform = `scale(${resolutionScale})`;
|
|
22728
22765
|
card.style.transformOrigin = '0 0';
|
|
22766
|
+
ensureRemoteFleetResizeHandles(card, nodeModel);
|
|
22729
22767
|
|
|
22730
22768
|
const titleEl = card.querySelector('.template-card__title');
|
|
22731
22769
|
if (titleEl) {
|
|
@@ -2958,6 +2958,10 @@ window.MindMapInteractions = (function () {
|
|
|
2958
2958
|
if (handleElement.classList?.contains('ne')) return 'TR';
|
|
2959
2959
|
if (handleElement.classList?.contains('sw')) return 'BL';
|
|
2960
2960
|
if (handleElement.classList?.contains('se')) return 'BR';
|
|
2961
|
+
if (handleElement.classList?.contains('n')) return 'T';
|
|
2962
|
+
if (handleElement.classList?.contains('s')) return 'B';
|
|
2963
|
+
if (handleElement.classList?.contains('w')) return 'L';
|
|
2964
|
+
if (handleElement.classList?.contains('e')) return 'R';
|
|
2961
2965
|
return 'BR';
|
|
2962
2966
|
}
|
|
2963
2967
|
|
|
@@ -59,6 +59,65 @@
|
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
function syncRemoteFleetCss3dResizeSurface(nodeEntry, options = {}) {
|
|
63
|
+
if (!nodeEntry?.cssObject?.element || !isRemoteFleetMonitorNodeModel(nodeEntry.model)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const model = nodeEntry.model;
|
|
68
|
+
const cssObject = nodeEntry.cssObject;
|
|
69
|
+
const worldWidth = Math.max(REMOTE_FLEET_MONITOR_MIN_WIDTH, Number(model.width || model.Width || 0) || REMOTE_FLEET_MONITOR_MIN_WIDTH);
|
|
70
|
+
const worldHeight = Math.max(REMOTE_FLEET_MONITOR_MIN_HEIGHT, Number(model.height || model.Height || 0) || REMOTE_FLEET_MONITOR_MIN_HEIGHT);
|
|
71
|
+
const resolutionScale = cssObject.userData?.resolutionScale || 1;
|
|
72
|
+
const wrapper = cssObject.element;
|
|
73
|
+
const domWidth = worldWidth * resolutionScale;
|
|
74
|
+
const domHeight = worldHeight * resolutionScale;
|
|
75
|
+
|
|
76
|
+
wrapper.style.width = `${domWidth}px`;
|
|
77
|
+
wrapper.style.height = `${domHeight}px`;
|
|
78
|
+
wrapper.style.minWidth = `${domWidth}px`;
|
|
79
|
+
wrapper.style.minHeight = `${domHeight}px`;
|
|
80
|
+
wrapper.style.maxWidth = `${domWidth}px`;
|
|
81
|
+
wrapper.style.maxHeight = `${domHeight}px`;
|
|
82
|
+
|
|
83
|
+
const card = wrapper.matches?.('.map-node-template-card.map-node-remote-fleet')
|
|
84
|
+
? wrapper
|
|
85
|
+
: wrapper.querySelector?.('.map-node-template-card.map-node-remote-fleet');
|
|
86
|
+
if (card) {
|
|
87
|
+
card.style.width = `${worldWidth}px`;
|
|
88
|
+
card.style.height = `${worldHeight}px`;
|
|
89
|
+
card.style.minWidth = `${worldWidth}px`;
|
|
90
|
+
card.style.minHeight = `${worldHeight}px`;
|
|
91
|
+
card.style.maxWidth = `${worldWidth}px`;
|
|
92
|
+
card.style.maxHeight = `${worldHeight}px`;
|
|
93
|
+
card.style.boxSizing = 'border-box';
|
|
94
|
+
card.style.overflow = 'hidden';
|
|
95
|
+
|
|
96
|
+
const shell = card.querySelector('.template-card__shell--remote-fleet');
|
|
97
|
+
if (shell) {
|
|
98
|
+
shell.style.height = '100%';
|
|
99
|
+
shell.style.minHeight = '0';
|
|
100
|
+
shell.style.boxSizing = 'border-box';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const bodyView = card.querySelector('.template-card__remote-fleet-body');
|
|
104
|
+
if (bodyView) {
|
|
105
|
+
bodyView.style.flex = '1 1 auto';
|
|
106
|
+
bodyView.style.minHeight = '0';
|
|
107
|
+
bodyView.style.overflow = 'hidden';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (cssObject.userData) {
|
|
112
|
+
cssObject.userData.worldWidth = worldWidth;
|
|
113
|
+
cssObject.userData.worldHeight = worldHeight;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (options.render === true) {
|
|
117
|
+
window.MindMapCss3DManager?.syncCss3dContent?.(model, cssObject);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
62
121
|
function isDocumentHidden() {
|
|
63
122
|
return typeof document !== 'undefined' && document.visibilityState === 'hidden';
|
|
64
123
|
}
|
|
@@ -1228,10 +1287,11 @@
|
|
|
1228
1287
|
// ▲▲▲ [Fix] ▲▲▲
|
|
1229
1288
|
}
|
|
1230
1289
|
|
|
1231
|
-
// ▼▼▼ [Fix] userData도 업데이트하여 syncCss3dContent에서 올바른 크기 사용 ▼▼▼
|
|
1290
|
+
// ▼▼▼ [Fix] userData도 업데이트하여 syncCss3dContent에서 올바른 크기 사용 ▼▼▼
|
|
1232
1291
|
nodeEntry.cssObject.userData.worldWidth = nodeEntry.model.width;
|
|
1233
1292
|
nodeEntry.cssObject.userData.worldHeight = nodeEntry.model.height;
|
|
1234
1293
|
// ▲▲▲ [Fix] ▲▲▲
|
|
1294
|
+
syncRemoteFleetCss3dResizeSurface(nodeEntry, { render: false });
|
|
1235
1295
|
}
|
|
1236
1296
|
|
|
1237
1297
|
if (window.MindMapCss3DManager?.syncAgentPlanStack) {
|
|
@@ -1807,12 +1867,13 @@
|
|
|
1807
1867
|
// ▲▲▲ [Fix] ▲▲▲
|
|
1808
1868
|
}
|
|
1809
1869
|
|
|
1810
|
-
// userData 업데이트
|
|
1811
|
-
nodeEntry.cssObject.userData.worldWidth = nodeEntry.model.width;
|
|
1812
|
-
nodeEntry.cssObject.userData.worldHeight = nodeEntry.model.height;
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1870
|
+
// userData 업데이트
|
|
1871
|
+
nodeEntry.cssObject.userData.worldWidth = nodeEntry.model.width;
|
|
1872
|
+
nodeEntry.cssObject.userData.worldHeight = nodeEntry.model.height;
|
|
1873
|
+
syncRemoteFleetCss3dResizeSurface(nodeEntry, { render: true });
|
|
1874
|
+
}
|
|
1875
|
+
// ▲▲▲ [Fix] ▲▲▲
|
|
1876
|
+
}
|
|
1816
1877
|
try {
|
|
1817
1878
|
await module.dotNetHelper.invokeMethodAsync(
|
|
1818
1879
|
'UpdateNodeDimensions',
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/wwwroot/_framework/{MindExecution.Web.2fexfu7nw7.dll → MindExecution.Web.m8joypnkws.dll}
RENAMED
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
4
|
+
"hash": "sha256-TgvCjZ1dqCGRJxQ8io7+BgHhAWdNWEvDamL5lrXcC0g=",
|
|
5
5
|
"fingerprinting": {
|
|
6
6
|
"Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
|
|
7
7
|
"Markdig.d1j7v41cl1.dll": "Markdig.dll",
|
|
@@ -126,13 +126,13 @@
|
|
|
126
126
|
"MindExecution.Core.te2oaei5ec.dll": "MindExecution.Core.dll",
|
|
127
127
|
"MindExecution.Kernel.n5peonkatw.dll": "MindExecution.Kernel.dll",
|
|
128
128
|
"MindExecution.Plugins.Admin.5zyeb2m709.dll": "MindExecution.Plugins.Admin.dll",
|
|
129
|
-
"MindExecution.Plugins.Business.
|
|
130
|
-
"MindExecution.Plugins.Concept.
|
|
129
|
+
"MindExecution.Plugins.Business.qf0u584aql.dll": "MindExecution.Plugins.Business.dll",
|
|
130
|
+
"MindExecution.Plugins.Concept.dol9cxm11l.dll": "MindExecution.Plugins.Concept.dll",
|
|
131
131
|
"MindExecution.Plugins.Directory.1argo44nph.dll": "MindExecution.Plugins.Directory.dll",
|
|
132
|
-
"MindExecution.Plugins.PlanMaster.
|
|
133
|
-
"MindExecution.Plugins.YouTube.
|
|
134
|
-
"MindExecution.Shared.
|
|
135
|
-
"MindExecution.Web.
|
|
132
|
+
"MindExecution.Plugins.PlanMaster.tuyuwdmm8m.dll": "MindExecution.Plugins.PlanMaster.dll",
|
|
133
|
+
"MindExecution.Plugins.YouTube.wr4ic92azb.dll": "MindExecution.Plugins.YouTube.dll",
|
|
134
|
+
"MindExecution.Shared.t8xvnypbv2.dll": "MindExecution.Shared.dll",
|
|
135
|
+
"MindExecution.Web.m8joypnkws.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",
|
|
@@ -280,16 +280,16 @@
|
|
|
280
280
|
"netstandard.yvr3prsx0x.dll": "sha256-EksNn8Luo4bOWqJ6X7dIe9qG9oOqwOVzjH2xYyMNi+E=",
|
|
281
281
|
"MindExecution.Core.te2oaei5ec.dll": "sha256-yzvF/UwfBMiJb2zQvlW0HSNU9VJeFPsgsB40BszINvc=",
|
|
282
282
|
"MindExecution.Kernel.n5peonkatw.dll": "sha256-JfXgzqcnjRbW+XlMja53/jDG+/10sNVp+2V4F8w9s+Q=",
|
|
283
|
-
"MindExecution.Plugins.Concept.
|
|
284
|
-
"MindExecution.Plugins.PlanMaster.
|
|
285
|
-
"MindExecution.Shared.
|
|
286
|
-
"MindExecution.Web.
|
|
283
|
+
"MindExecution.Plugins.Concept.dol9cxm11l.dll": "sha256-/SUIEG5MZb4+puDsZDDWw6hfS4PONtwIzE1h2aiQIPc=",
|
|
284
|
+
"MindExecution.Plugins.PlanMaster.tuyuwdmm8m.dll": "sha256-C6A2SvumFM2lEygQcugCNBnUS5cyLMARvLTKpvET4K0=",
|
|
285
|
+
"MindExecution.Shared.t8xvnypbv2.dll": "sha256-87Z1nJZ+TMTxIUmG78ic/qVGB0GvCTiAvNmoIcg8kNY=",
|
|
286
|
+
"MindExecution.Web.m8joypnkws.dll": "sha256-Zk0KZ23Oeosh0KXUoUXS6GFzT30CaG1L9L2GZqtETR4="
|
|
287
287
|
},
|
|
288
288
|
"lazyAssembly": {
|
|
289
289
|
"MindExecution.Plugins.Admin.5zyeb2m709.dll": "sha256-kfvMS18tjQsoBT/nL40x6HiLaNM3Ls5G71Fk4skXtLg=",
|
|
290
|
-
"MindExecution.Plugins.Business.
|
|
290
|
+
"MindExecution.Plugins.Business.qf0u584aql.dll": "sha256-tmIjZsRdM+ZZmXS7a8QWtO4F4uQnzlF0LaMox4tyS0o=",
|
|
291
291
|
"MindExecution.Plugins.Directory.1argo44nph.dll": "sha256-GZZuAT3WZd9wDjQd+H8f6V9R2UYeLl/VOZxl9BnQVO0=",
|
|
292
|
-
"MindExecution.Plugins.YouTube.
|
|
292
|
+
"MindExecution.Plugins.YouTube.wr4ic92azb.dll": "sha256-rNhLCFWuy8MyuyPOFJo03MHWrULpJe4pzQTPYu/mqbg="
|
|
293
293
|
}
|
|
294
294
|
},
|
|
295
295
|
"cacheBootResources": true,
|
package/wwwroot/index.html
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>MindExec |
|
|
8
|
-
<meta name="description" content="MindExec is an AI execution canvas for solo builders
|
|
7
|
+
<title>MindExec | Turn ideas into revenue execution</title>
|
|
8
|
+
<meta name="description" content="MindExec is an AI execution canvas for solo builders who want to turn notes, research, assets, and repeatable Skills into practical business execution." />
|
|
9
9
|
<base href="/" />
|
|
10
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260617-mdm-resize-reconnect-v603" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260617-mdm-resize-reconnect-v603" />
|
|
12
12
|
<!-- ?쇄뼹??Font Awesome (local) ?쇄뼹??-->
|
|
13
13
|
<link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
|
|
14
14
|
<!-- ?꿎뼯??-->
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
<article class="app-static-fallback" id="app-static-fallback">
|
|
98
98
|
<div class="app-static-fallback__eyebrow">MindExec</div>
|
|
99
99
|
<h1>MindExec</h1>
|
|
100
|
-
<p>
|
|
100
|
+
<p>Turn ideas into revenue execution. MindExec starts with free browser tools for notes and previews, then moves serious work into MindCanvas where context, AI Tasks, Skills, media, and results stay connected.</p>
|
|
101
101
|
<p><a href="/mindcanvas">Open MindCanvas</a> | <a href="/pricing">See pricing</a> | <a href="/tools">Browse free tools</a></p>
|
|
102
102
|
<noscript>
|
|
103
103
|
<p>JavaScript is required for the interactive tool experience.</p>
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
}
|
|
580
580
|
|
|
581
581
|
const base = '_content/MindExecution.Shared/js/';
|
|
582
|
-
const scriptVersion = '20260617-
|
|
582
|
+
const scriptVersion = '20260617-mdm-resize-reconnect-v603';
|
|
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": "eiceNpLK",
|
|
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-fLjQy3sDstLUw2vPbbHYxDRRywLLKUCeSvDhQgPwvmY=",
|
|
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-6dKXU8IIa84Vj+0pbgSEl5ju2n7Rv8ADCVEMQ+2SPFY=",
|
|
90
90
|
"url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
|
-
"hash": "sha256-
|
|
109
|
+
"hash": "sha256-JI+LT7R0ketlHrXy9bmGYhz17hSJ002YmX+TcqftALY=",
|
|
110
110
|
"url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
"url": "_content/MindExecution.Shared/js/mind-map-object-manager.js.backup"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
|
-
"hash": "sha256-
|
|
149
|
+
"hash": "sha256-CbH7IH0gNoo/R/o1pBkuBcU753K+twxK2mCqkjO6zjI=",
|
|
150
150
|
"url": "_content/MindExecution.Shared/js/mind-map-pipeline.js"
|
|
151
151
|
},
|
|
152
152
|
{
|
|
@@ -422,32 +422,32 @@
|
|
|
422
422
|
"url": "_framework/MindExecution.Plugins.Admin.5zyeb2m709.dll"
|
|
423
423
|
},
|
|
424
424
|
{
|
|
425
|
-
"hash": "sha256-
|
|
426
|
-
"url": "_framework/MindExecution.Plugins.Business.
|
|
425
|
+
"hash": "sha256-tmIjZsRdM+ZZmXS7a8QWtO4F4uQnzlF0LaMox4tyS0o=",
|
|
426
|
+
"url": "_framework/MindExecution.Plugins.Business.qf0u584aql.dll"
|
|
427
427
|
},
|
|
428
428
|
{
|
|
429
|
-
"hash": "sha256
|
|
430
|
-
"url": "_framework/MindExecution.Plugins.Concept.
|
|
429
|
+
"hash": "sha256-/SUIEG5MZb4+puDsZDDWw6hfS4PONtwIzE1h2aiQIPc=",
|
|
430
|
+
"url": "_framework/MindExecution.Plugins.Concept.dol9cxm11l.dll"
|
|
431
431
|
},
|
|
432
432
|
{
|
|
433
433
|
"hash": "sha256-GZZuAT3WZd9wDjQd+H8f6V9R2UYeLl/VOZxl9BnQVO0=",
|
|
434
434
|
"url": "_framework/MindExecution.Plugins.Directory.1argo44nph.dll"
|
|
435
435
|
},
|
|
436
436
|
{
|
|
437
|
-
"hash": "sha256-
|
|
438
|
-
"url": "_framework/MindExecution.Plugins.PlanMaster.
|
|
437
|
+
"hash": "sha256-C6A2SvumFM2lEygQcugCNBnUS5cyLMARvLTKpvET4K0=",
|
|
438
|
+
"url": "_framework/MindExecution.Plugins.PlanMaster.tuyuwdmm8m.dll"
|
|
439
439
|
},
|
|
440
440
|
{
|
|
441
|
-
"hash": "sha256
|
|
442
|
-
"url": "_framework/MindExecution.Plugins.YouTube.
|
|
441
|
+
"hash": "sha256-rNhLCFWuy8MyuyPOFJo03MHWrULpJe4pzQTPYu/mqbg=",
|
|
442
|
+
"url": "_framework/MindExecution.Plugins.YouTube.wr4ic92azb.dll"
|
|
443
443
|
},
|
|
444
444
|
{
|
|
445
|
-
"hash": "sha256-
|
|
446
|
-
"url": "_framework/MindExecution.Shared.
|
|
445
|
+
"hash": "sha256-87Z1nJZ+TMTxIUmG78ic/qVGB0GvCTiAvNmoIcg8kNY=",
|
|
446
|
+
"url": "_framework/MindExecution.Shared.t8xvnypbv2.dll"
|
|
447
447
|
},
|
|
448
448
|
{
|
|
449
|
-
"hash": "sha256-
|
|
450
|
-
"url": "_framework/MindExecution.Web.
|
|
449
|
+
"hash": "sha256-Zk0KZ23Oeosh0KXUoUXS6GFzT30CaG1L9L2GZqtETR4=",
|
|
450
|
+
"url": "_framework/MindExecution.Web.m8joypnkws.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-u7906sB+wUPNOO2/kISyDTP821RL/vVklUScBkrAyrU=",
|
|
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-C3sh+TxLtsJO1qKy6hXv1WjUV+B+hrswm2oJE/xbw1Q=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|