@mindexec/cli 0.2.185 → 0.2.186
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/scripts/remote-registry-follower-smoke.mjs +11 -5
- package/server.js +16 -4
- package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +41 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +18 -18
- package/wwwroot/service-worker-assets.js +3 -3
- package/wwwroot/service-worker.js +1 -1
package/package.json
CHANGED
|
@@ -649,12 +649,18 @@ async function main() {
|
|
|
649
649
|
fakeSupabase.broadcastChange('UPDATE');
|
|
650
650
|
|
|
651
651
|
await waitFor(async () => {
|
|
652
|
-
const
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
652
|
+
const status = await fetchJson(`${client.baseUrl}/api/status`);
|
|
653
|
+
const agent = await fetchJson(`${client.baseUrl}/api/remote/agent/status`);
|
|
654
|
+
return status.payload?.remoteRegistryFollower?.reason === 'registry-inactive-agent-kept'
|
|
655
|
+
&& status.payload?.remoteRegistryFollower?.agentKept === true
|
|
656
|
+
&& status.payload?.remoteRegistryFollower?.dataPlaneReady === true
|
|
657
|
+
&& agent.payload?.running === true
|
|
658
|
+
&& agent.payload?.ready === true
|
|
659
|
+
&& String(agent.payload?.manager || '') === hostBEndpoint
|
|
660
|
+
&& Number(agent.payload?.pid || 0) === Number(restartedAgent.pid || 0)
|
|
661
|
+
? { status: status.payload.remoteRegistryFollower, agent: agent.payload }
|
|
656
662
|
: null;
|
|
657
|
-
}, 9000, `registry inactive
|
|
663
|
+
}, 9000, `registry inactive keeps ready data-plane agent\n${client.details()}`);
|
|
658
664
|
const finalStatus = await fetchJson(`${client.baseUrl}/api/status`);
|
|
659
665
|
assert.ok(finalStatus.payload?.remoteRegistryRealtime?.changes >= 2, JSON.stringify(finalStatus.payload?.remoteRegistryRealtime));
|
|
660
666
|
assert.ok(finalStatus.payload?.remoteRegistryRealtime?.wakeups >= 2, JSON.stringify(finalStatus.payload?.remoteRegistryRealtime));
|
package/server.js
CHANGED
|
@@ -3573,6 +3573,7 @@ function createRemoteAgentSyncReport(body = {}) {
|
|
|
3573
3573
|
inactiveCount: Number(body.inactiveCount ?? body.InactiveCount ?? 0) || 0,
|
|
3574
3574
|
inactiveElapsedMs: Number(body.inactiveElapsedMs ?? body.InactiveElapsedMs ?? 0) || 0,
|
|
3575
3575
|
agentKept: body.agentKept === true || body.AgentKept === true,
|
|
3576
|
+
dataPlaneReady: body.dataPlaneReady === true || body.DataPlaneReady === true,
|
|
3576
3577
|
updatedAt: new Date().toISOString()
|
|
3577
3578
|
};
|
|
3578
3579
|
}
|
|
@@ -4089,6 +4090,12 @@ function isRemoteAgentRunningButNotReadyStale() {
|
|
|
4089
4090
|
&& getRemoteAgentRunningAgeMs(remoteAgentState) >= REMOTE_AGENT_READY_STALE_MS;
|
|
4090
4091
|
}
|
|
4091
4092
|
|
|
4093
|
+
function isRemoteAgentReadyDataPlaneAlive() {
|
|
4094
|
+
return isRemoteAgentRegistryOwned()
|
|
4095
|
+
&& remoteAgentState.ready === true
|
|
4096
|
+
&& remoteAgentState.needsReconnect !== true;
|
|
4097
|
+
}
|
|
4098
|
+
|
|
4092
4099
|
function isRemoteAgentRegistryOwned() {
|
|
4093
4100
|
return isRemoteAgentProcessRunning()
|
|
4094
4101
|
&& /registry/i.test(String(remoteAgentState.source || ''));
|
|
@@ -4138,13 +4145,15 @@ function rememberRemoteRegistryInactiveTarget(reason = 'no-active-target') {
|
|
|
4138
4145
|
|
|
4139
4146
|
const elapsedMs = Math.max(0, now - remoteRegistryFollowerInactiveTargetFirstAt);
|
|
4140
4147
|
const agentRunning = isRemoteAgentRegistryOwned();
|
|
4141
|
-
const
|
|
4148
|
+
const keepReadyDataPlane = agentRunning && isRemoteAgentReadyDataPlaneAlive();
|
|
4149
|
+
const confirmedInactive = !keepReadyDataPlane
|
|
4150
|
+
&& remoteRegistryFollowerConsecutiveInactiveTarget >= REMOTE_REGISTRY_FOLLOWER_INACTIVE_STOP_COUNT
|
|
4142
4151
|
&& elapsedMs >= REMOTE_REGISTRY_FOLLOWER_INACTIVE_GRACE_MS;
|
|
4143
4152
|
|
|
4144
4153
|
if (agentRunning && !confirmedInactive) {
|
|
4145
4154
|
logEvent(
|
|
4146
4155
|
'remote',
|
|
4147
|
-
`registry target temporarily inactive; keeping managed RemoteAgent ${formatKeyValue('reason', reason)} ${formatKeyValue('count', remoteRegistryFollowerConsecutiveInactiveTarget)} ${formatKeyValue('elapsedMs', elapsedMs)}`,
|
|
4156
|
+
`registry target temporarily inactive; keeping managed RemoteAgent ${formatKeyValue('reason', reason)} ${formatKeyValue('count', remoteRegistryFollowerConsecutiveInactiveTarget)} ${formatKeyValue('elapsedMs', elapsedMs)} ${formatKeyValue('dataPlane', keepReadyDataPlane ? 'ready' : 'pending')}`,
|
|
4148
4157
|
'remote');
|
|
4149
4158
|
}
|
|
4150
4159
|
|
|
@@ -4153,7 +4162,8 @@ function rememberRemoteRegistryInactiveTarget(reason = 'no-active-target') {
|
|
|
4153
4162
|
elapsedMs,
|
|
4154
4163
|
agentRunning,
|
|
4155
4164
|
confirmedInactive,
|
|
4156
|
-
agentKept: agentRunning && !confirmedInactive
|
|
4165
|
+
agentKept: agentRunning && !confirmedInactive,
|
|
4166
|
+
dataPlaneReady: keepReadyDataPlane
|
|
4157
4167
|
};
|
|
4158
4168
|
}
|
|
4159
4169
|
|
|
@@ -6470,6 +6480,7 @@ async function runRemoteRegistryFollowerOnce(trigger = 'timer') {
|
|
|
6470
6480
|
inactiveCount: inactive.count,
|
|
6471
6481
|
inactiveElapsedMs: inactive.elapsedMs,
|
|
6472
6482
|
agentKept: inactive.agentKept,
|
|
6483
|
+
dataPlaneReady: inactive.dataPlaneReady,
|
|
6473
6484
|
lastError: ''
|
|
6474
6485
|
});
|
|
6475
6486
|
await reportRemoteRegistryFollowerSync({
|
|
@@ -6484,7 +6495,8 @@ async function runRemoteRegistryFollowerOnce(trigger = 'timer') {
|
|
|
6484
6495
|
targetNodeId: inactive.agentKept ? remoteAgentState.nodeId : '',
|
|
6485
6496
|
inactiveCount: inactive.count,
|
|
6486
6497
|
inactiveElapsedMs: inactive.elapsedMs,
|
|
6487
|
-
agentKept: inactive.agentKept
|
|
6498
|
+
agentKept: inactive.agentKept,
|
|
6499
|
+
dataPlaneReady: inactive.dataPlaneReady
|
|
6488
6500
|
});
|
|
6489
6501
|
scheduleRemoteRegistryFollower(REMOTE_REGISTRY_FOLLOWER_POLL_MS, 'no-target');
|
|
6490
6502
|
return serializeRemoteRegistryFollowerState();
|
|
@@ -3375,3 +3375,44 @@ body.mindcanvas-is-dense .css3d-resolution-wrapper.node-type-templatelauncher.se
|
|
|
3375
3375
|
color: #93c5fd;
|
|
3376
3376
|
}
|
|
3377
3377
|
}
|
|
3378
|
+
|
|
3379
|
+
/* Lightweight CSS3D motion path.
|
|
3380
|
+
Reference graph tools are useful here because they keep node DOM cheap:
|
|
3381
|
+
while the camera is moving, retain the canonical CSS3D surface but remove
|
|
3382
|
+
decorative compositor-heavy effects from every CSS3D node, including
|
|
3383
|
+
selected and agent-style nodes. */
|
|
3384
|
+
body.is-zooming .css3d-resolution-wrapper,
|
|
3385
|
+
body.is-panning .css3d-resolution-wrapper,
|
|
3386
|
+
body.is-node-dragging .css3d-resolution-wrapper,
|
|
3387
|
+
body.is-resizing .css3d-resolution-wrapper,
|
|
3388
|
+
body.mindcanvas-is-moving .css3d-resolution-wrapper,
|
|
3389
|
+
body.mindcanvas-is-dense .css3d-resolution-wrapper {
|
|
3390
|
+
-webkit-transition: none !important;
|
|
3391
|
+
transition: none !important;
|
|
3392
|
+
-webkit-filter: none !important;
|
|
3393
|
+
filter: none !important;
|
|
3394
|
+
-webkit-box-shadow: none !important;
|
|
3395
|
+
box-shadow: none !important;
|
|
3396
|
+
}
|
|
3397
|
+
|
|
3398
|
+
body.is-zooming .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
3399
|
+
body.is-panning .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
3400
|
+
body.is-node-dragging .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
3401
|
+
body.is-resizing .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
3402
|
+
body.mindcanvas-is-moving .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
3403
|
+
body.mindcanvas-is-dense .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
3404
|
+
body.is-zooming .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
3405
|
+
body.is-panning .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
3406
|
+
body.is-node-dragging .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
3407
|
+
body.is-resizing .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
3408
|
+
body.mindcanvas-is-moving .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
3409
|
+
body.mindcanvas-is-dense .css3d-resolution-wrapper [id^="css3d-node-"] {
|
|
3410
|
+
-webkit-transition: none !important;
|
|
3411
|
+
transition: none !important;
|
|
3412
|
+
-webkit-filter: none !important;
|
|
3413
|
+
filter: none !important;
|
|
3414
|
+
-webkit-backdrop-filter: none !important;
|
|
3415
|
+
backdrop-filter: none !important;
|
|
3416
|
+
-webkit-box-shadow: none !important;
|
|
3417
|
+
box-shadow: none !important;
|
|
3418
|
+
}
|
|
@@ -795,26 +795,26 @@
|
|
|
795
795
|
max-height: none !important;
|
|
796
796
|
}
|
|
797
797
|
|
|
798
|
-
/*
|
|
799
|
-
|
|
800
|
-
body.is-zooming .css3d-resolution-wrapper
|
|
801
|
-
body.is-panning .css3d-resolution-wrapper
|
|
802
|
-
body.mindcanvas-is-moving .css3d-resolution-wrapper
|
|
803
|
-
body.mindcanvas-is-dense .css3d-resolution-wrapper
|
|
798
|
+
/* Keep CSS3D nodes readable during camera motion, but drop expensive
|
|
799
|
+
decorative effects consistently across selected and agent-style nodes. */
|
|
800
|
+
body.is-zooming .css3d-resolution-wrapper,
|
|
801
|
+
body.is-panning .css3d-resolution-wrapper,
|
|
802
|
+
body.mindcanvas-is-moving .css3d-resolution-wrapper,
|
|
803
|
+
body.mindcanvas-is-dense .css3d-resolution-wrapper {
|
|
804
804
|
transition: none !important;
|
|
805
805
|
-webkit-transition: none !important;
|
|
806
806
|
filter: none !important;
|
|
807
807
|
-webkit-filter: none !important;
|
|
808
808
|
}
|
|
809
809
|
|
|
810
|
-
body.is-zooming .css3d-resolution-wrapper
|
|
811
|
-
body.is-panning .css3d-resolution-wrapper
|
|
812
|
-
body.mindcanvas-is-moving .css3d-resolution-wrapper
|
|
813
|
-
body.mindcanvas-is-dense .css3d-resolution-wrapper
|
|
814
|
-
body.is-zooming .css3d-resolution-wrapper
|
|
815
|
-
body.is-panning .css3d-resolution-wrapper
|
|
816
|
-
body.mindcanvas-is-moving .css3d-resolution-wrapper
|
|
817
|
-
body.mindcanvas-is-dense .css3d-resolution-wrapper
|
|
810
|
+
body.is-zooming .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
811
|
+
body.is-panning .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
812
|
+
body.mindcanvas-is-moving .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
813
|
+
body.mindcanvas-is-dense .css3d-resolution-wrapper .css3d-dynamic-node,
|
|
814
|
+
body.is-zooming .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
815
|
+
body.is-panning .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
816
|
+
body.mindcanvas-is-moving .css3d-resolution-wrapper [id^="css3d-node-"],
|
|
817
|
+
body.mindcanvas-is-dense .css3d-resolution-wrapper [id^="css3d-node-"] {
|
|
818
818
|
box-shadow: none !important;
|
|
819
819
|
filter: none !important;
|
|
820
820
|
-webkit-filter: none !important;
|
|
@@ -895,10 +895,10 @@
|
|
|
895
895
|
body.is-panning .ai-loading-row.ai-loading-row-media,
|
|
896
896
|
body.mindcanvas-is-moving .ai-loading-row.ai-loading-row-media,
|
|
897
897
|
body.mindcanvas-is-dense .ai-loading-row.ai-loading-row-media,
|
|
898
|
-
body.is-zooming .css3d-resolution-wrapper
|
|
899
|
-
body.is-panning .css3d-resolution-wrapper
|
|
900
|
-
body.mindcanvas-is-moving .css3d-resolution-wrapper
|
|
901
|
-
body.mindcanvas-is-dense .css3d-resolution-wrapper
|
|
898
|
+
body.is-zooming .css3d-resolution-wrapper .map-node-memo__agent-console-panel,
|
|
899
|
+
body.is-panning .css3d-resolution-wrapper .map-node-memo__agent-console-panel,
|
|
900
|
+
body.mindcanvas-is-moving .css3d-resolution-wrapper .map-node-memo__agent-console-panel,
|
|
901
|
+
body.mindcanvas-is-dense .css3d-resolution-wrapper .map-node-memo__agent-console-panel {
|
|
902
902
|
box-shadow: none !important;
|
|
903
903
|
backdrop-filter: none !important;
|
|
904
904
|
-webkit-backdrop-filter: none !important;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
self.assetsManifest = {
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "RQBjk+TB",
|
|
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-vy6wZFJwYl0hLFMMhAKU4de+TPg7CJ91jMwnXl8GBqk=",
|
|
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-f5vcy6AIq6e21hjCQlnjZnjQQ3s7wfbK4K6iW5IdBjU=",
|
|
90
90
|
"url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
|
|
91
91
|
},
|
|
92
92
|
{
|