@mindexec/cli 0.2.430 → 0.2.432
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 +4 -4
- package/scripts/npm-fresh-install-smoke.mjs +216 -0
- package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +5 -35
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +9 -5
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +64 -92
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-render-plan.js +572 -0
- package/wwwroot/_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js +67 -10
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.hdpod01n2v.dll → MindExecution.Plugins.Concept.slcp5au0e8.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.bcxkqs35nn.dll → MindExecution.Plugins.PlanMaster.nk8wgsetbw.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.gg4bv7zo0e.dll → MindExecution.Plugins.YouTube.rrrfswr6up.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.acb35gyigd.dll → MindExecution.Shared.23xj2d2olw.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Web.6grqlsq22z.dll → MindExecution.Web.4a5lf7nem7.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +11 -11
- package/wwwroot/index.html +6 -5
- package/wwwroot/service-worker-assets.js +21 -17
- package/wwwroot/service-worker.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mindexec/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.432",
|
|
4
4
|
"description": "MindExec local runtime and bridge CLI",
|
|
5
5
|
"main": "server.js",
|
|
6
6
|
"type": "module",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"scripts": {
|
|
22
22
|
"start": "node launch-bridge.cjs",
|
|
23
23
|
"dev": "node launch-bridge.cjs --watch",
|
|
24
|
-
"test:syntax": "node --check server.js && node --check remote-hub.js && node --check codex-runtime.js && node --check launch-bridge.cjs && node --check port-guard.cjs && node --check scripts/setup-tree-sitter-grammars.mjs && node --check scripts/auth-session-smoke.mjs && node --check scripts/remote-hub-smoke.mjs && node --check scripts/remote-hub-scale-smoke.mjs && node --check scripts/remote-fleet-render-smoke.mjs && node --check scripts/remote-http-smoke.mjs && node --check scripts/remote-frame-ws-smoke.mjs && node --check scripts/remote-input-ws-smoke.mjs && node --check scripts/remote-agent-ws-smoke.mjs && node --check scripts/remote-agent-managed-smoke.mjs && node --check scripts/remote-registry-follower-smoke.mjs && node --check scripts/remote-agent-package-smoke.mjs && node --check scripts/remote-fast-live-rate-smoke.mjs && node --check scripts/remote-fast-mdm-browser-smoke.mjs",
|
|
24
|
+
"test:syntax": "node --check server.js && node --check remote-hub.js && node --check codex-runtime.js && node --check launch-bridge.cjs && node --check port-guard.cjs && node --check scripts/setup-tree-sitter-grammars.mjs && node --check scripts/npm-fresh-install-smoke.mjs && node --check scripts/auth-session-smoke.mjs && node --check scripts/remote-hub-smoke.mjs && node --check scripts/remote-hub-scale-smoke.mjs && node --check scripts/remote-fleet-render-smoke.mjs && node --check scripts/remote-http-smoke.mjs && node --check scripts/remote-frame-ws-smoke.mjs && node --check scripts/remote-input-ws-smoke.mjs && node --check scripts/remote-agent-ws-smoke.mjs && node --check scripts/remote-agent-managed-smoke.mjs && node --check scripts/remote-registry-follower-smoke.mjs && node --check scripts/remote-agent-package-smoke.mjs && node --check scripts/remote-fast-live-rate-smoke.mjs && node --check scripts/remote-fast-mdm-browser-smoke.mjs",
|
|
25
25
|
"test:auth": "node scripts/auth-session-smoke.mjs",
|
|
26
26
|
"test:remote": "node scripts/remote-hub-smoke.mjs",
|
|
27
27
|
"test:remote:scale": "node scripts/remote-hub-scale-smoke.mjs",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"test:remote:managed": "node scripts/remote-agent-managed-smoke.mjs",
|
|
34
34
|
"test:remote:registry": "node scripts/remote-registry-follower-smoke.mjs",
|
|
35
35
|
"test:remote:package": "node scripts/remote-agent-package-smoke.mjs",
|
|
36
|
+
"test:package:fresh-install": "node scripts/npm-fresh-install-smoke.mjs",
|
|
36
37
|
"test:remote:live-rate": "node scripts/remote-fast-live-rate-smoke.mjs",
|
|
37
38
|
"test:remote:mdm-browser": "node scripts/remote-fast-mdm-browser-smoke.mjs",
|
|
38
39
|
"pack:dry": "npm pack --dry-run",
|
|
39
|
-
"setup:grammars": "node scripts/setup-tree-sitter-grammars.mjs"
|
|
40
|
-
"postinstall": "npm run setup:grammars"
|
|
40
|
+
"setup:grammars": "node scripts/setup-tree-sitter-grammars.mjs"
|
|
41
41
|
},
|
|
42
42
|
"keywords": [
|
|
43
43
|
"mindexec",
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
4
|
+
import { existsSync } from 'node:fs';
|
|
5
|
+
import { mkdir, mkdtemp, readFile, readdir, rm } from 'node:fs/promises';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
|
|
10
|
+
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const bridgeRoot = path.resolve(scriptDir, '..');
|
|
12
|
+
const packageJsonPath = path.join(bridgeRoot, 'package.json');
|
|
13
|
+
const logPrefix = '[npm-fresh-install-smoke]';
|
|
14
|
+
|
|
15
|
+
function printableCommand(command, args) {
|
|
16
|
+
return [command, ...args].map(value => JSON.stringify(String(value))).join(' ');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function runCommand(command, args, options = {}) {
|
|
20
|
+
const cwd = options.cwd || bridgeRoot;
|
|
21
|
+
const label = options.label || 'command';
|
|
22
|
+
const result = spawnSync(command, args, {
|
|
23
|
+
cwd,
|
|
24
|
+
env: options.env || process.env,
|
|
25
|
+
encoding: 'utf8',
|
|
26
|
+
windowsHide: true,
|
|
27
|
+
shell: options.shell === true,
|
|
28
|
+
maxBuffer: 32 * 1024 * 1024
|
|
29
|
+
});
|
|
30
|
+
const stdout = String(result.stdout || '');
|
|
31
|
+
const stderr = String(result.stderr || '');
|
|
32
|
+
|
|
33
|
+
if (result.error || result.status !== 0) {
|
|
34
|
+
const details = [
|
|
35
|
+
`${logPrefix} ${label} failed.`,
|
|
36
|
+
`Command: ${printableCommand(command, args)}`,
|
|
37
|
+
`Working directory: ${cwd}`,
|
|
38
|
+
`Exit status: ${result.status ?? 'not started'}${result.signal ? ` (signal: ${result.signal})` : ''}`,
|
|
39
|
+
`stdout:\n${stdout.trimEnd() || '<empty>'}`,
|
|
40
|
+
`stderr:\n${stderr.trimEnd() || '<empty>'}`
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
if (result.error) {
|
|
44
|
+
details.push(`Spawn error: ${result.error.stack || result.error.message}`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
throw new Error(details.join('\n'));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return { stdout, stderr };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function resolveNpmCommand() {
|
|
54
|
+
const npmExecPath = String(process.env.npm_execpath || '').trim();
|
|
55
|
+
if (npmExecPath && existsSync(npmExecPath)) {
|
|
56
|
+
return {
|
|
57
|
+
command: process.execPath,
|
|
58
|
+
argsPrefix: [npmExecPath],
|
|
59
|
+
shell: false
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (process.platform === 'win32') {
|
|
64
|
+
const nodeDir = path.dirname(process.execPath);
|
|
65
|
+
const npmPrefixScript = path.join(nodeDir, 'node_modules', 'npm', 'bin', 'npm-prefix.js');
|
|
66
|
+
if (existsSync(npmPrefixScript)) {
|
|
67
|
+
const prefixResult = spawnSync(process.execPath, [npmPrefixScript], {
|
|
68
|
+
encoding: 'utf8',
|
|
69
|
+
windowsHide: true
|
|
70
|
+
});
|
|
71
|
+
const npmPrefix = prefixResult.status === 0 ? String(prefixResult.stdout || '').trim() : '';
|
|
72
|
+
const prefixNpmCliPath = npmPrefix
|
|
73
|
+
? path.join(npmPrefix, 'node_modules', 'npm', 'bin', 'npm-cli.js')
|
|
74
|
+
: '';
|
|
75
|
+
|
|
76
|
+
if (prefixNpmCliPath && existsSync(prefixNpmCliPath)) {
|
|
77
|
+
return {
|
|
78
|
+
command: process.execPath,
|
|
79
|
+
argsPrefix: [prefixNpmCliPath],
|
|
80
|
+
shell: false
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const bundledNpmCliPath = path.join(nodeDir, 'node_modules', 'npm', 'bin', 'npm-cli.js');
|
|
86
|
+
if (existsSync(bundledNpmCliPath)) {
|
|
87
|
+
return {
|
|
88
|
+
command: process.execPath,
|
|
89
|
+
argsPrefix: [bundledNpmCliPath],
|
|
90
|
+
shell: false
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
command: 'npm.cmd',
|
|
96
|
+
argsPrefix: [],
|
|
97
|
+
shell: true
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
command: 'npm',
|
|
103
|
+
argsPrefix: [],
|
|
104
|
+
shell: false
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function runNpm(npm, args, options = {}) {
|
|
109
|
+
return runCommand(npm.command, [...npm.argsPrefix, ...args], {
|
|
110
|
+
...options,
|
|
111
|
+
shell: npm.shell,
|
|
112
|
+
env: {
|
|
113
|
+
...process.env,
|
|
114
|
+
npm_config_ignore_scripts: 'false',
|
|
115
|
+
...options.env
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async function findPackedArchive(packDir) {
|
|
121
|
+
const entries = await readdir(packDir, { withFileTypes: true });
|
|
122
|
+
const archives = entries
|
|
123
|
+
.filter(entry => entry.isFile() && entry.name.endsWith('.tgz'))
|
|
124
|
+
.map(entry => path.join(packDir, entry.name));
|
|
125
|
+
|
|
126
|
+
if (archives.length !== 1) {
|
|
127
|
+
throw new Error(`${logPrefix} expected exactly one packed archive in ${packDir}, found ${archives.length}.`);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return archives[0];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function runInstalledBin(prefixDir) {
|
|
134
|
+
const binDir = path.join(prefixDir, 'node_modules', '.bin');
|
|
135
|
+
const binPath = path.join(binDir, process.platform === 'win32' ? 'mindexec.cmd' : 'mindexec');
|
|
136
|
+
if (!existsSync(binPath)) {
|
|
137
|
+
throw new Error(`${logPrefix} installed mindexec bin was not found: ${binPath}`);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (process.platform === 'win32') {
|
|
141
|
+
return runCommand(process.env.ComSpec || 'cmd.exe', ['/d', '/s', '/c', 'mindexec.cmd --version'], {
|
|
142
|
+
cwd: binDir,
|
|
143
|
+
label: 'installed bin version check'
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return runCommand(binPath, ['--version'], {
|
|
148
|
+
cwd: binDir,
|
|
149
|
+
label: 'installed bin version check'
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
async function runSmoke(tempRoot) {
|
|
154
|
+
const packageInfo = JSON.parse(await readFile(packageJsonPath, 'utf8'));
|
|
155
|
+
const expectedVersion = String(packageInfo.version || '').trim();
|
|
156
|
+
if (!expectedVersion) {
|
|
157
|
+
throw new Error(`${logPrefix} package.json does not contain a version.`);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const packDir = path.join(tempRoot, 'pack');
|
|
161
|
+
const prefixDir = path.join(tempRoot, 'install-prefix');
|
|
162
|
+
await Promise.all([
|
|
163
|
+
mkdir(packDir, { recursive: true }),
|
|
164
|
+
mkdir(prefixDir, { recursive: true })
|
|
165
|
+
]);
|
|
166
|
+
|
|
167
|
+
const npm = resolveNpmCommand();
|
|
168
|
+
console.log(`${logPrefix} packing @mindexec/cli ${expectedVersion}`);
|
|
169
|
+
runNpm(npm, ['pack', '--pack-destination', packDir], {
|
|
170
|
+
cwd: bridgeRoot,
|
|
171
|
+
label: 'npm pack'
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
const archivePath = await findPackedArchive(packDir);
|
|
175
|
+
console.log(`${logPrefix} installing ${path.basename(archivePath)} into a clean prefix with lifecycle scripts enabled`);
|
|
176
|
+
runNpm(npm, ['install', archivePath, '--prefix', prefixDir, '--ignore-scripts=false'], {
|
|
177
|
+
cwd: tempRoot,
|
|
178
|
+
label: 'fresh npm install'
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const { stdout } = runInstalledBin(prefixDir);
|
|
182
|
+
const actualVersion = stdout.trim();
|
|
183
|
+
if (actualVersion !== expectedVersion) {
|
|
184
|
+
throw new Error([
|
|
185
|
+
`${logPrefix} installed bin version mismatch.`,
|
|
186
|
+
`Expected: ${expectedVersion}`,
|
|
187
|
+
`Actual: ${actualVersion || '<empty>'}`
|
|
188
|
+
].join('\n'));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
console.log(`${logPrefix} OK: installed mindexec --version returned ${actualVersion}`);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
let tempRoot = '';
|
|
195
|
+
|
|
196
|
+
try {
|
|
197
|
+
tempRoot = await mkdtemp(path.join(tmpdir(), 'mindexec-npm-fresh-install-'));
|
|
198
|
+
await runSmoke(tempRoot);
|
|
199
|
+
} catch (error) {
|
|
200
|
+
console.error(error?.stack || error);
|
|
201
|
+
process.exitCode = 1;
|
|
202
|
+
} finally {
|
|
203
|
+
if (tempRoot) {
|
|
204
|
+
try {
|
|
205
|
+
await rm(tempRoot, {
|
|
206
|
+
recursive: true,
|
|
207
|
+
force: true,
|
|
208
|
+
maxRetries: 5,
|
|
209
|
+
retryDelay: 200
|
|
210
|
+
});
|
|
211
|
+
} catch (error) {
|
|
212
|
+
console.error(`${logPrefix} failed to remove temporary directory ${tempRoot}:`, error);
|
|
213
|
+
process.exitCode = 1;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
@@ -248,32 +248,6 @@ body.is-resizing .css3d-resolution-wrapper {
|
|
|
248
248
|
transition: none !important;
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
body.is-zooming .css3d-resolution-wrapper,
|
|
252
|
-
body.is-panning .css3d-resolution-wrapper {
|
|
253
|
-
-webkit-transition: none !important;
|
|
254
|
-
transition: none !important;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
body.is-zooming .css3d-resolution-wrapper.selected,
|
|
258
|
-
body.is-panning .css3d-resolution-wrapper.selected,
|
|
259
|
-
body.mindcanvas-is-moving .css3d-resolution-wrapper.selected,
|
|
260
|
-
body.mindcanvas-is-dense .css3d-resolution-wrapper.selected {
|
|
261
|
-
-webkit-filter: saturate(1.08) !important;
|
|
262
|
-
filter: saturate(1.08) !important;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
body.is-zooming .node-menu-wrapper,
|
|
266
|
-
body.is-panning .node-menu-wrapper,
|
|
267
|
-
body.is-zooming .map-node-memo__icon-popover,
|
|
268
|
-
body.is-panning .map-node-memo__icon-popover {
|
|
269
|
-
-webkit-backdrop-filter: none !important;
|
|
270
|
-
backdrop-filter: none !important;
|
|
271
|
-
-webkit-box-shadow: none !important;
|
|
272
|
-
box-shadow: none !important;
|
|
273
|
-
-webkit-transition: none !important;
|
|
274
|
-
transition: none !important;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
251
|
.mindcanvas-node-toolbar,
|
|
278
252
|
.global-ai-input-shell {
|
|
279
253
|
position: relative;
|
|
@@ -1149,7 +1123,7 @@ body.is-panning .map-node-memo__icon-popover {
|
|
|
1149
1123
|
/* Hover raycast is already short-circuited in JS during pan, so keep CSS hover/focus
|
|
1150
1124
|
intact while middle-button panning. We still suppress hit-testing for zoom/drag. */
|
|
1151
1125
|
#css3d-dom-wrapper.is-dragging,
|
|
1152
|
-
|
|
1126
|
+
#css3d-dom-wrapper.is-zooming {
|
|
1153
1127
|
pointer-events: none !important;
|
|
1154
1128
|
}
|
|
1155
1129
|
|
|
@@ -1157,7 +1131,7 @@ html.mindcanvas-browser-selection-locked,
|
|
|
1157
1131
|
body.mindcanvas-browser-selection-locked,
|
|
1158
1132
|
body.is-node-dragging,
|
|
1159
1133
|
body.is-resizing,
|
|
1160
|
-
|
|
1134
|
+
#css3d-dom-wrapper.is-zooming {
|
|
1161
1135
|
user-select: none !important;
|
|
1162
1136
|
-webkit-user-select: none !important;
|
|
1163
1137
|
}
|
|
@@ -1167,7 +1141,7 @@ body.is-node-dragging *,
|
|
|
1167
1141
|
body.is-resizing *,
|
|
1168
1142
|
#css3d-dom-wrapper.is-panning,
|
|
1169
1143
|
#css3d-dom-wrapper.is-panning *,
|
|
1170
|
-
|
|
1144
|
+
#css3d-dom-wrapper.is-zooming *,
|
|
1171
1145
|
#css3d-dom-wrapper.is-dragging,
|
|
1172
1146
|
#css3d-dom-wrapper.is-dragging *,
|
|
1173
1147
|
.multi-select-overlay,
|
|
@@ -1188,8 +1162,8 @@ body.is-resizing .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-m
|
|
|
1188
1162
|
body.is-resizing .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment *,
|
|
1189
1163
|
body.is-resizing .mind-map-text-overlay-v2-card,
|
|
1190
1164
|
body.is-resizing .mind-map-text-overlay-v2-card *,
|
|
1191
|
-
|
|
1192
|
-
|
|
1165
|
+
#css3d-dom-wrapper.is-zooming .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment,
|
|
1166
|
+
#css3d-dom-wrapper.is-zooming .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment *,
|
|
1193
1167
|
#css3d-dom-wrapper.is-panning .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment,
|
|
1194
1168
|
#css3d-dom-wrapper.is-panning .mind-map-text-overlay.mind-map-text-overlay-selectable .mind-map-text-overlay-fragment * {
|
|
1195
1169
|
user-select: none !important;
|
|
@@ -1634,10 +1608,6 @@ html.mindcanvas-platform-apple .css3d-resolution-wrapper.is-automation-relation-
|
|
|
1634
1608
|
-moz-osx-font-smoothing: grayscale;
|
|
1635
1609
|
}
|
|
1636
1610
|
|
|
1637
|
-
body.is-panning .mind-map-text-overlay-v2-card.is-passive .mind-map-text-overlay-v2-body {
|
|
1638
|
-
pointer-events: none !important;
|
|
1639
|
-
}
|
|
1640
|
-
|
|
1641
1611
|
.mind-map-text-overlay-v2-shell {
|
|
1642
1612
|
width: 100%;
|
|
1643
1613
|
height: 100%;
|
|
@@ -1230,12 +1230,14 @@
|
|
|
1230
1230
|
stats.lastLodSkipReason = lodSkipReason;
|
|
1231
1231
|
stats.lastVisibilitySkipReason = visibilitySkipReason;
|
|
1232
1232
|
stats.updatedAt = now;
|
|
1233
|
+
window.MindMapRenderPlan?.recordFrame?.(module.lodRenderer, frameProfile);
|
|
1233
1234
|
module._framePathStats = stats;
|
|
1234
1235
|
}
|
|
1235
1236
|
|
|
1236
1237
|
function resetFramePerfPeakProfile(module) {
|
|
1237
1238
|
const peakProfile = createEmptyFramePerfPeakProfile();
|
|
1238
1239
|
if (module) {
|
|
1240
|
+
window.MindMapRenderPlan?.resetDiagnostics?.(module.lodRenderer);
|
|
1239
1241
|
module._framePerfPeakProfile = peakProfile;
|
|
1240
1242
|
module._framePathStats = createEmptyFramePathStats(
|
|
1241
1243
|
typeof performance !== 'undefined' && typeof performance.now === 'function'
|
|
@@ -1337,7 +1339,8 @@
|
|
|
1337
1339
|
metricsSnapshotCached: false,
|
|
1338
1340
|
metricsSnapshotAgeMs: 0,
|
|
1339
1341
|
metricsSnapshotPeakMs: 0,
|
|
1340
|
-
visibilityCullingProfile: null
|
|
1342
|
+
visibilityCullingProfile: null,
|
|
1343
|
+
renderPlanDiagnostics: null
|
|
1341
1344
|
};
|
|
1342
1345
|
}
|
|
1343
1346
|
|
|
@@ -1462,7 +1465,8 @@
|
|
|
1462
1465
|
metricsSnapshotCached: false,
|
|
1463
1466
|
metricsSnapshotAgeMs: 0,
|
|
1464
1467
|
metricsSnapshotPeakMs: Number((moduleInstance._renderDebugMetricsSnapshotPeakMs || 0).toFixed(2)),
|
|
1465
|
-
visibilityCullingProfile: moduleInstance._lastVisibilityCullingProfile || null
|
|
1468
|
+
visibilityCullingProfile: moduleInstance._lastVisibilityCullingProfile || null,
|
|
1469
|
+
renderPlanDiagnostics: window.MindMapRenderPlan?.getDiagnostics?.(moduleInstance.lodRenderer) || null
|
|
1466
1470
|
};
|
|
1467
1471
|
moduleInstance._lastRenderDebugMetricsSnapshot = snapshot;
|
|
1468
1472
|
return snapshot;
|
|
@@ -4219,7 +4223,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4219
4223
|
);
|
|
4220
4224
|
|
|
4221
4225
|
if (canRenderCss3dCamera === true) {
|
|
4222
|
-
this.cssRenderer.renderCamera(this.camera);
|
|
4226
|
+
this.cssRenderer.renderCamera(this.camera, true);
|
|
4223
4227
|
this._immediateCameraFeedbackCss3dCount = Number(this._immediateCameraFeedbackCss3dCount || 0) + 1;
|
|
4224
4228
|
status.css3dCamera = true;
|
|
4225
4229
|
status.css3dCount = this._immediateCameraFeedbackCss3dCount;
|
|
@@ -5825,6 +5829,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
5825
5829
|
|
|
5826
5830
|
const shouldCaptureFramePerf = FRAME_PERF_DEBUG ||
|
|
5827
5831
|
this.renderDebugFlags?.enableFramePerfProbe === true;
|
|
5832
|
+
if (shouldCaptureFramePerf) window.MindMapRenderPlan?.beginFrame?.(this.lodRenderer);
|
|
5828
5833
|
const _frameProfTimes = shouldCaptureFramePerf ? {} : null;
|
|
5829
5834
|
const _sumProfileSections = shouldCaptureFramePerf
|
|
5830
5835
|
? (keys) => keys.reduce((sum, key) => sum + Number(_frameProfTimes[key] || 0), 0)
|
|
@@ -6446,7 +6451,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6446
6451
|
}
|
|
6447
6452
|
// ?�▲??[Perf] ?�▲?? _profileSection('pipelineVisibilityPlan');
|
|
6448
6453
|
const shouldUseInteractiveDpr =
|
|
6449
|
-
this.isZooming === true ||
|
|
6450
6454
|
isNodeInteracting === true ||
|
|
6451
6455
|
this.isWindowResizing === true;
|
|
6452
6456
|
this._applyRendererPixelRatio(shouldUseInteractiveDpr);
|
|
@@ -6978,7 +6982,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6978
6982
|
if (this._shouldTouchMotionGridLayerForCameraNavigation?.() === true) {
|
|
6979
6983
|
this._syncMotionGridLayerForCameraNavigation();
|
|
6980
6984
|
}
|
|
6981
|
-
this.cssRenderer.renderCamera(this.camera);
|
|
6985
|
+
this.cssRenderer.renderCamera(this.camera, true);
|
|
6982
6986
|
}
|
|
6983
6987
|
_profileSection('css3dCamera');
|
|
6984
6988
|
// ?�▲??[FIX] ?�▲?? _profileSection('css3dRender');
|