unity-open-mcp 0.8.4 → 1.0.0
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/dist/asmdef-discovery.d.ts +35 -0
- package/dist/asmdef-discovery.js +171 -0
- package/dist/asmdef-discovery.js.map +1 -0
- package/dist/batch-spawn.d.ts +1 -0
- package/dist/batch-spawn.js +118 -2
- package/dist/batch-spawn.js.map +1 -1
- package/dist/capabilities/intent-groups.js +42 -0
- package/dist/capabilities/intent-groups.js.map +1 -1
- package/dist/capabilities/lifecycle.js +12 -0
- package/dist/capabilities/lifecycle.js.map +1 -1
- package/dist/capabilities/rule-catalog.js +7 -1
- package/dist/capabilities/rule-catalog.js.map +1 -1
- package/dist/capabilities/tool-groups.js +39 -2
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/constants.d.ts +21 -1
- package/dist/constants.js +21 -1
- package/dist/constants.js.map +1 -1
- package/dist/event-stream.d.ts +13 -3
- package/dist/event-stream.js +77 -12
- package/dist/event-stream.js.map +1 -1
- package/dist/live-client.d.ts +17 -0
- package/dist/live-client.js +130 -9
- package/dist/live-client.js.map +1 -1
- package/dist/offline/api.js +82 -30
- package/dist/offline/api.js.map +1 -1
- package/dist/offline/index-builders.d.ts +9 -0
- package/dist/offline/index-builders.js +58 -8
- package/dist/offline/index-builders.js.map +1 -1
- package/dist/offline/parse.js +5 -1
- package/dist/offline/parse.js.map +1 -1
- package/dist/process-diagnostics.d.ts +100 -19
- package/dist/process-diagnostics.js +167 -59
- package/dist/process-diagnostics.js.map +1 -1
- package/dist/project-settings.d.ts +36 -0
- package/dist/project-settings.js +96 -0
- package/dist/project-settings.js.map +1 -0
- package/dist/running-unity.d.ts +23 -0
- package/dist/running-unity.js +60 -0
- package/dist/running-unity.js.map +1 -1
- package/dist/stale-assembly-cache.d.ts +40 -0
- package/dist/stale-assembly-cache.js +76 -0
- package/dist/stale-assembly-cache.js.map +1 -0
- package/dist/tool-router.d.ts +40 -1
- package/dist/tool-router.js +479 -68
- package/dist/tool-router.js.map +1 -1
- package/dist/tool-session-state.d.ts +12 -6
- package/dist/tool-session-state.js +16 -9
- package/dist/tool-session-state.js.map +1 -1
- package/dist/tools/capture-inline.js +4 -3
- package/dist/tools/capture-inline.js.map +1 -1
- package/dist/tools/component-get.js +9 -0
- package/dist/tools/component-get.js.map +1 -1
- package/dist/tools/editor-status.js +12 -3
- package/dist/tools/editor-status.js.map +1 -1
- package/dist/tools/execute-csharp.js +41 -4
- package/dist/tools/execute-csharp.js.map +1 -1
- package/dist/tools/gameobject-create.js +19 -6
- package/dist/tools/gameobject-create.js.map +1 -1
- package/dist/tools/gameobject-duplicate.js +7 -2
- package/dist/tools/gameobject-duplicate.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +37 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inputsim-key.d.ts +40 -0
- package/dist/tools/inputsim-key.js +72 -0
- package/dist/tools/inputsim-key.js.map +1 -0
- package/dist/tools/inputsim-pointer.d.ts +40 -0
- package/dist/tools/inputsim-pointer.js +121 -0
- package/dist/tools/inputsim-pointer.js.map +1 -0
- package/dist/tools/inputsim-pointer3d.d.ts +40 -0
- package/dist/tools/inputsim-pointer3d.js +55 -0
- package/dist/tools/inputsim-pointer3d.js.map +1 -0
- package/dist/tools/inputsim-probe.d.ts +40 -0
- package/dist/tools/inputsim-probe.js +43 -0
- package/dist/tools/inputsim-probe.js.map +1 -0
- package/dist/tools/inputsim-step.d.ts +40 -0
- package/dist/tools/inputsim-step.js +50 -0
- package/dist/tools/inputsim-step.js.map +1 -0
- package/dist/tools/inputsim-touch.d.ts +40 -0
- package/dist/tools/inputsim-touch.js +83 -0
- package/dist/tools/inputsim-touch.js.map +1 -0
- package/dist/tools/manage-tools.js +8 -1
- package/dist/tools/manage-tools.js.map +1 -1
- package/dist/tools/memory-snapshot-capture.js +11 -5
- package/dist/tools/memory-snapshot-capture.js.map +1 -1
- package/dist/tools/prefab-instantiate.js +11 -0
- package/dist/tools/prefab-instantiate.js.map +1 -1
- package/dist/tools/pull-events.js +18 -10
- package/dist/tools/pull-events.js.map +1 -1
- package/dist/tools/read-compile-errors.js +15 -1
- package/dist/tools/read-compile-errors.js.map +1 -1
- package/dist/tools/recompile-scripts.d.ts +40 -0
- package/dist/tools/recompile-scripts.js +35 -0
- package/dist/tools/recompile-scripts.js.map +1 -0
- package/dist/tools/resource-pressure.js +21 -10
- package/dist/tools/resource-pressure.js.map +1 -1
- package/dist/tools/run-tests.js +21 -4
- package/dist/tools/run-tests.js.map +1 -1
- package/dist/tools/screenshot-window.js +18 -12
- package/dist/tools/screenshot-window.js.map +1 -1
- package/dist/tools/screenshot.js +13 -6
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/ui-canvas-add.js +19 -6
- package/dist/tools/ui-canvas-add.js.map +1 -1
- package/dist/tools/visual-compare.d.ts +40 -0
- package/dist/tools/visual-compare.js +98 -0
- package/dist/tools/visual-compare.js.map +1 -0
- package/dist/unity-log.d.ts +111 -1
- package/dist/unity-log.js +334 -11
- package/dist/unity-log.js.map +1 -1
- package/package.json +1 -1
package/dist/unity-log.js
CHANGED
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
// (project-relative) Unity versions without a version check.
|
|
17
17
|
//
|
|
18
18
|
// No runtime deps beyond node built-ins (mcp-server/AGENTS.md).
|
|
19
|
-
import { existsSync, openSync, readSync, fstatSync, closeSync, statSync } from "node:fs";
|
|
19
|
+
import { existsSync, openSync, readSync, fstatSync, closeSync, statSync, readdirSync } from "node:fs";
|
|
20
20
|
import { homedir } from "node:os";
|
|
21
21
|
import { join } from "node:path";
|
|
22
|
+
import { TYPED_EDITOR_ACTIVATE_INSTRUCTION } from "./constants.js";
|
|
22
23
|
/** Resolve the live Editor.log directory for the current platform. Mirrors
|
|
23
24
|
* hub/src-tauri/src/config/logs.rs (editor_logs_dir_*).
|
|
24
25
|
* - macOS: ~/Library/Logs/Unity
|
|
@@ -60,6 +61,36 @@ export function projectEditorLogPath(projectPath) {
|
|
|
60
61
|
return null;
|
|
61
62
|
return join(projectPath, "Logs", "Editor.log");
|
|
62
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* The rotated previous log. Unity renames the live Editor.log to
|
|
66
|
+
* Editor-prev.log on every fresh launch (a new Editor start, AND a failed
|
|
67
|
+
* batch spawn against an already-open project). When a live editor holds the
|
|
68
|
+
* project and a batch invocation rotates the log, the live editor keeps its
|
|
69
|
+
* open handle and writes to Editor-prev.log from then on, while Editor.log is
|
|
70
|
+
* frozen at a tiny startup size — reading it returns "no errors" forever
|
|
71
|
+
* (feedback-fable-31-07 §5).
|
|
72
|
+
*
|
|
73
|
+
* Returns the GLOBAL prev-log path. On Unity 6000.5+ the rotated prev log
|
|
74
|
+
* lives next to the project-relative live log (`<project>/Logs/Editor-prev.log`),
|
|
75
|
+
* not in the global dir — use {@link projectEditorPrevLogPath} when the
|
|
76
|
+
* project-relative live log is the resolved candidate.
|
|
77
|
+
*/
|
|
78
|
+
export function editorPrevLogPath(platform = process.platform) {
|
|
79
|
+
return join(editorLogsDir(platform), "Editor-prev.log");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the project-relative Editor-prev.log path Unity 6000.5+ rotates the
|
|
83
|
+
* live log into (`<project>/Logs/Editor-prev.log`). Returns null when no
|
|
84
|
+
* project path is given. Mirrors {@link projectEditorLogPath}: on 6000.5+ the
|
|
85
|
+
* prev log follows the live log into the project's Logs dir, so the prev-log
|
|
86
|
+
* fallback must read THAT file, not the stale global Editor-prev.log left over
|
|
87
|
+
* from a pre-6000.5 session.
|
|
88
|
+
*/
|
|
89
|
+
export function projectEditorPrevLogPath(projectPath) {
|
|
90
|
+
if (!projectPath)
|
|
91
|
+
return null;
|
|
92
|
+
return join(projectPath, "Logs", "Editor-prev.log");
|
|
93
|
+
}
|
|
63
94
|
/**
|
|
64
95
|
* Pick the authoritative Editor.log to read for compile-error extraction.
|
|
65
96
|
*
|
|
@@ -76,18 +107,114 @@ export function projectEditorLogPath(projectPath) {
|
|
|
76
107
|
*
|
|
77
108
|
* When the project path is unknown (no `--project`), or the project-relative
|
|
78
109
|
* log doesn't exist, the global log is used as before.
|
|
110
|
+
*
|
|
111
|
+
* feedback-fable-31-07 §5 — Editor-prev.log fallback. When a live editor
|
|
112
|
+
* holds the project (a known `livePid` is alive) and the resolved Editor.log
|
|
113
|
+
* looks frozen (implausibly small, e.g. < 4KB — the tell-tale sign of a
|
|
114
|
+
* rotated log the live editor is no longer writing to), fall back to
|
|
115
|
+
* Editor-prev.log, which is where the live editor keeps writing after the
|
|
116
|
+
* rotation. `livePid` is optional; when absent the prev.log fallback only
|
|
117
|
+
* triggers on a frozen-looking log, which is conservative.
|
|
79
118
|
*/
|
|
80
|
-
export function resolveEditorLogPath(projectPath, platform = process.platform) {
|
|
119
|
+
export function resolveEditorLogPath(projectPath, platform = process.platform, livePid, globalLogPathOverride) {
|
|
81
120
|
const project = projectEditorLogPath(projectPath);
|
|
82
|
-
const global = editorLogPath(platform);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
121
|
+
const global = globalLogPathOverride ?? editorLogPath(platform);
|
|
122
|
+
const projectExists = !!(project && existsSync(project));
|
|
123
|
+
const globalExists = existsSync(global);
|
|
124
|
+
// Choose the base candidate. Unity 6000.5+ writes a project-relative log
|
|
125
|
+
// (<project>/Logs/Editor.log) and stops touching the global log; pre-6000.5
|
|
126
|
+
// writes only the global log. Existence alone is NOT enough, though: a
|
|
127
|
+
// project opened in 6000.5+ at some point leaves a STALE project-relative
|
|
128
|
+
// Editor.log on disk forever, and if the same project is later opened under
|
|
129
|
+
// a pre-6000.5 Unity the live editor writes the GLOBAL log while the stale
|
|
130
|
+
// project log lingers. Picking the project log on existence alone then reads
|
|
131
|
+
// errors from an unrelated older session (feedback-fable-04-08 §2b/§4: the
|
|
132
|
+
// field report's 31 phantom CS0619s came from a project log last written at
|
|
133
|
+
// 11:39 while the live editor wrote the global log at 19:36).
|
|
134
|
+
//
|
|
135
|
+
// When BOTH exist, prefer the FRESHEST (newest mtime). A genuinely-live
|
|
136
|
+
// project log on 6000.5+ is newer than the stale global log, so the common
|
|
137
|
+
// 6000.5+ case is unaffected; the fix only redirects the cross-version stale
|
|
138
|
+
// case where the global log is newer.
|
|
139
|
+
let candidate;
|
|
140
|
+
let candidateReason;
|
|
141
|
+
if (projectExists && globalExists) {
|
|
142
|
+
const projectMtime = statMtimeMs(project);
|
|
143
|
+
const globalMtime = statMtimeMs(global);
|
|
144
|
+
if (globalMtime > projectMtime) {
|
|
145
|
+
candidate = global;
|
|
146
|
+
candidateReason = "global_log_fresher";
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
candidate = project;
|
|
150
|
+
candidateReason = "project_log";
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (projectExists) {
|
|
154
|
+
candidate = project;
|
|
155
|
+
candidateReason = "project_log";
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
candidate = global;
|
|
159
|
+
candidateReason = "global_log";
|
|
160
|
+
}
|
|
161
|
+
// On 6000.5+ the rotated prev log lives next to the project-relative live
|
|
162
|
+
// log (<project>/Logs/Editor-prev.log), not in the global dir. When the
|
|
163
|
+
// resolved candidate is the project log, the prev-log fallback must read the
|
|
164
|
+
// project prev log; otherwise (pre-6000.5 global candidate) fall back to the
|
|
165
|
+
// global prev log as before. Reading the stale global prev log here would
|
|
166
|
+
// return compile errors from an unrelated older session.
|
|
167
|
+
const usingProjectLog = candidateReason === "project_log";
|
|
168
|
+
const prev = usingProjectLog && project
|
|
169
|
+
? projectEditorPrevLogPath(projectPath) ?? editorPrevLogPath(platform)
|
|
170
|
+
: editorPrevLogPath(platform);
|
|
171
|
+
const prevExists = existsSync(prev);
|
|
172
|
+
const candidateFrozen = isLogFrozen(candidate);
|
|
173
|
+
// Strong signal: a live editor is known to hold the project AND Editor.log
|
|
174
|
+
// is frozen/small. This is exactly the log-rotation scenario — a batch spawn
|
|
175
|
+
// rotated Editor.log while the live editor keeps writing to Editor-prev.log.
|
|
176
|
+
// Prefer Editor-prev.log when it exists.
|
|
177
|
+
//
|
|
178
|
+
// The frozen check is ONLY meaningful with a live PID: a machine that is not
|
|
179
|
+
// currently running Unity naturally has a small stale global Editor.log and a
|
|
180
|
+
// recent Editor-prev.log, which is the NORMAL state, not a rotation in
|
|
181
|
+
// progress. Without a live PID we never fall back on frozen-ness alone.
|
|
182
|
+
if (prevExists && livePid && livePid > 0 && candidateFrozen) {
|
|
183
|
+
return { path: prev, reason: "prev_log_live_editor" };
|
|
184
|
+
}
|
|
185
|
+
// No live PID context: only fall back when the resolved candidate does not
|
|
186
|
+
// exist at all but Editor-prev.log does (a hard missing-log case).
|
|
187
|
+
if (!livePid && !existsSync(candidate) && prevExists) {
|
|
188
|
+
return { path: prev, reason: "prev_log_fallback" };
|
|
189
|
+
}
|
|
190
|
+
return { path: candidate, reason: candidateReason };
|
|
191
|
+
}
|
|
192
|
+
/** Read a file's mtime in epoch ms, or 0 on any failure (missing/unreadable).
|
|
193
|
+
* Used to compare log freshness without throwing. */
|
|
194
|
+
function statMtimeMs(path) {
|
|
195
|
+
try {
|
|
196
|
+
return existsSync(path) ? statSync(path).mtimeMs : 0;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return 0;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/** Threshold below which Editor.log is "frozen" — a freshly-rotated log the
|
|
203
|
+
* live editor stopped writing to is typically a few hundred bytes to ~2.5KB
|
|
204
|
+
* (just the batch spawn's startup banner before it died on the project lock). */
|
|
205
|
+
const FROZEN_LOG_BYTES = 4096;
|
|
206
|
+
function isLogFrozen(path) {
|
|
207
|
+
// A frozen log is implausibly small. The real live log is usually tens of KB
|
|
208
|
+
// minimum once the editor has compiled anything.
|
|
209
|
+
return statSize(path) < FROZEN_LOG_BYTES;
|
|
210
|
+
}
|
|
211
|
+
function statSize(path) {
|
|
212
|
+
try {
|
|
213
|
+
return existsSync(path) ? statSync(path).size : 0;
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
91
218
|
}
|
|
92
219
|
/** Default tail size. Bounded so a multi-MB log can't blow up the tool
|
|
93
220
|
* response; 256KB is ample for a compile-error burst (Unity writes the
|
|
@@ -241,4 +368,200 @@ export function detectStaleLog(logPath, citedFiles, projectRoot) {
|
|
|
241
368
|
"unity_open_mcp_compile_check to spawn a fresh headless recompile.",
|
|
242
369
|
};
|
|
243
370
|
}
|
|
371
|
+
/** Cap on the number of newer sources reported (evidence, not a roster). */
|
|
372
|
+
const MAX_NEWER_SOURCES = 5;
|
|
373
|
+
/** Cap on how many .cs files to stat before giving up the scan. A project that
|
|
374
|
+
* exceeds this likely has a fresh DLL anyway (compile times track source
|
|
375
|
+
* count); the cap protects pathological trees from stalling the read. */
|
|
376
|
+
const MAX_CS_SCAN = 4000;
|
|
377
|
+
/**
|
|
378
|
+
* Decide whether the built assembly set under `<project>/Library/ScriptAssemblies`
|
|
379
|
+
* is stale relative to the on-disk C# sources under `<project>/Assets`.
|
|
380
|
+
*
|
|
381
|
+
* Conservative: flags staleness only when ALL of:
|
|
382
|
+
* - the ScriptAssemblies dir exists and holds at least one .dll,
|
|
383
|
+
* - at least one C# source under Assets is strictly newer than the newest
|
|
384
|
+
* .dll mtime.
|
|
385
|
+
* Never throws; returns a clean "not stale" on any resolution failure.
|
|
386
|
+
*/
|
|
387
|
+
export function detectStaleAssembly(projectRoot) {
|
|
388
|
+
const empty = { staleAssembly: false, newerSources: [], hint: "" };
|
|
389
|
+
if (!projectRoot)
|
|
390
|
+
return empty;
|
|
391
|
+
const dllDir = join(projectRoot, "Library", "ScriptAssemblies");
|
|
392
|
+
let dllMtimeMs;
|
|
393
|
+
try {
|
|
394
|
+
if (!existsSync(dllDir))
|
|
395
|
+
return empty;
|
|
396
|
+
let newest = 0;
|
|
397
|
+
for (const entry of readdirSync(dllDir)) {
|
|
398
|
+
if (!entry.endsWith(".dll"))
|
|
399
|
+
continue;
|
|
400
|
+
const m = statSync(join(dllDir, entry)).mtimeMs;
|
|
401
|
+
if (m > newest)
|
|
402
|
+
newest = m;
|
|
403
|
+
}
|
|
404
|
+
if (newest === 0)
|
|
405
|
+
return empty; // no DLLs built yet
|
|
406
|
+
dllMtimeMs = newest;
|
|
407
|
+
}
|
|
408
|
+
catch {
|
|
409
|
+
return empty;
|
|
410
|
+
}
|
|
411
|
+
// Scan Assets/ for .cs sources newer than the newest DLL. Walk top-down,
|
|
412
|
+
// skipping Library/Temp/obj etc. (Assets/ has none of those, but be safe).
|
|
413
|
+
const newerSources = [];
|
|
414
|
+
let scanned = 0;
|
|
415
|
+
const visit = (dir) => {
|
|
416
|
+
if (newerSources.length >= MAX_NEWER_SOURCES || scanned >= MAX_CS_SCAN)
|
|
417
|
+
return;
|
|
418
|
+
let entries;
|
|
419
|
+
try {
|
|
420
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
for (const ent of entries) {
|
|
426
|
+
if (newerSources.length >= MAX_NEWER_SOURCES || scanned >= MAX_CS_SCAN)
|
|
427
|
+
return;
|
|
428
|
+
const full = join(dir, ent.name);
|
|
429
|
+
if (ent.isDirectory()) {
|
|
430
|
+
visit(full);
|
|
431
|
+
}
|
|
432
|
+
else if (ent.isFile() && ent.name.endsWith(".cs")) {
|
|
433
|
+
scanned++;
|
|
434
|
+
try {
|
|
435
|
+
const m = statSync(full).mtimeMs;
|
|
436
|
+
if (m > dllMtimeMs) {
|
|
437
|
+
const rel = full.slice(projectRoot.length).replace(/^[\\/]+/, "");
|
|
438
|
+
newerSources.push(rel);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
catch {
|
|
442
|
+
/* file vanished mid-scan */
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
try {
|
|
448
|
+
visit(join(projectRoot, "Assets"));
|
|
449
|
+
}
|
|
450
|
+
catch {
|
|
451
|
+
return empty;
|
|
452
|
+
}
|
|
453
|
+
if (newerSources.length === 0) {
|
|
454
|
+
return { staleAssembly: false, dllMtimeMs, newerSources: [], hint: "" };
|
|
455
|
+
}
|
|
456
|
+
return {
|
|
457
|
+
staleAssembly: true,
|
|
458
|
+
dllMtimeMs,
|
|
459
|
+
newerSources,
|
|
460
|
+
hint: "The built assembly appears stale — at least one Assets/**/*.cs source is " +
|
|
461
|
+
"newer than the newest Library/ScriptAssemblies/*.dll (Unity's incremental " +
|
|
462
|
+
"compiler likely no-op'd a recompile, so the running assembly predates the " +
|
|
463
|
+
"latest source). Do NOT trust a no_errors_found signal until the assembly is " +
|
|
464
|
+
"rebuilt: call unity_open_mcp_recompile_scripts to force a deterministic " +
|
|
465
|
+
"recompile, then re-read compile errors. " +
|
|
466
|
+
// feedback.md issue 6 — recompile_scripts is in the typed-editor group,
|
|
467
|
+
// which is NOT default-enabled; the hint must say how to reach it, not just
|
|
468
|
+
// name it, or the agent falls back to hand-rolled AssetDatabase.Refresh.
|
|
469
|
+
"recompile_scripts is in the typed-editor group (not on by default): " +
|
|
470
|
+
`${TYPED_EDITOR_ACTIVATE_INSTRUCTION}, then call recompile_scripts.`,
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Parse the Unity Editor.log header fields that identify WHO wrote the log.
|
|
475
|
+
* Scans only the tail content already read by the tool (no extra disk I/O).
|
|
476
|
+
*
|
|
477
|
+
* Returns nulls (not throws) when the header lines are absent — a long-running
|
|
478
|
+
* live editor's tail starts mid-log and won't contain the header, which is the
|
|
479
|
+
* benign case (no version to compare against, so no false mismatch).
|
|
480
|
+
*/
|
|
481
|
+
export function parseLogAuthorship(tail) {
|
|
482
|
+
const empty = {
|
|
483
|
+
logUnityVersion: null,
|
|
484
|
+
logBatchMode: null,
|
|
485
|
+
logDate: null,
|
|
486
|
+
};
|
|
487
|
+
if (!tail)
|
|
488
|
+
return empty;
|
|
489
|
+
// The header is written once per editor launch near the TOP of the log. The
|
|
490
|
+
// tool reads only the tail, so for a long session the header is gone — that
|
|
491
|
+
// is fine (return nulls). For a short -batchmode run the whole log fits in
|
|
492
|
+
// the tail and the header is present. Match the first occurrence only.
|
|
493
|
+
const versionMatch = tail.match(/Unity Editor version:\s*([0-9][^\s)]*)/);
|
|
494
|
+
const batchMatch = tail.match(/Batch mode:\s*(YES|NO)/i);
|
|
495
|
+
const dateMatch = tail.match(/Date:\s*([^\r\n]+)/);
|
|
496
|
+
return {
|
|
497
|
+
logUnityVersion: versionMatch ? versionMatch[1].trim() : null,
|
|
498
|
+
logBatchMode: batchMatch
|
|
499
|
+
? batchMatch[1].trim().toUpperCase() === "YES"
|
|
500
|
+
: null,
|
|
501
|
+
logDate: dateMatch ? dateMatch[1].trim() : null,
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Compare the log's authorship against the live bridge's Unity version. This is
|
|
506
|
+
* the cross-check feedback-04-08-opus §2 asks for: a batch run of a NEWER Unity
|
|
507
|
+
* leaves a log whose errors (e.g. a deprecation that is only an error on that
|
|
508
|
+
* version) cannot occur in the live editor, so surfacing them as "current"
|
|
509
|
+
* sends the agent chasing ghosts (or refusing to continue) for minutes.
|
|
510
|
+
*
|
|
511
|
+
* Two cheap signals, both from data already at hand:
|
|
512
|
+
* - the log's "Unity Editor version:" vs the live bridge unityVersion
|
|
513
|
+
* - the log's "Batch mode:" flag (a batch run is never the live editor)
|
|
514
|
+
*
|
|
515
|
+
* Conservative: only flags a mismatch when BOTH the log version parsed AND a
|
|
516
|
+
* live version is known, AND they differ. A null log version (header scrolled
|
|
517
|
+
* past the tail) never fires — there is nothing to compare. When the log is a
|
|
518
|
+
* batch run but the versions agree, we surface the batch-mode flag WITHOUT
|
|
519
|
+
* calling it a mismatch (the agent still benefits from knowing it is a batch
|
|
520
|
+
* log). The router decides how to fold this into the response.
|
|
521
|
+
*/
|
|
522
|
+
export function compareLogAuthorship(authorship, liveUnityVersion) {
|
|
523
|
+
const logUnityVersion = authorship.logUnityVersion;
|
|
524
|
+
const logBatchMode = authorship.logBatchMode;
|
|
525
|
+
const live = liveUnityVersion ?? null;
|
|
526
|
+
const versionMismatch = logUnityVersion !== null && live !== null && logUnityVersion !== live;
|
|
527
|
+
if (versionMismatch) {
|
|
528
|
+
return {
|
|
529
|
+
versionMismatch: true,
|
|
530
|
+
logUnityVersion,
|
|
531
|
+
liveUnityVersion: live,
|
|
532
|
+
logBatchMode,
|
|
533
|
+
hint: `Editor.log was written by Unity ${logUnityVersion}` +
|
|
534
|
+
(logBatchMode ? " (batch mode)" : "") +
|
|
535
|
+
` but the live editor is ${live}. The errors below CANNOT all occur ` +
|
|
536
|
+
`in the live editor — do NOT treat a compile_failed signal from this ` +
|
|
537
|
+
`log as current. A different Unity wrote it` +
|
|
538
|
+
(logBatchMode ? " (likely a headless -batchmode run)" : "") +
|
|
539
|
+
`. If the live editor is healthy, these errors do not apply.`,
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
// No version mismatch, but still surface a batch-mode log so the agent knows
|
|
543
|
+
// the errors are from a headless run, not the interactive editor. This is
|
|
544
|
+
// informational (hint present, versionMismatch false) — the router emits the
|
|
545
|
+
// fields without the "do not trust" framing.
|
|
546
|
+
if (logBatchMode === true) {
|
|
547
|
+
return {
|
|
548
|
+
versionMismatch: false,
|
|
549
|
+
logUnityVersion,
|
|
550
|
+
liveUnityVersion: live,
|
|
551
|
+
logBatchMode,
|
|
552
|
+
hint: `Editor.log was written by a -batchmode Unity run` +
|
|
553
|
+
(logUnityVersion ? ` (${logUnityVersion})` : "") +
|
|
554
|
+
(live ? `, not the live editor (${live})` : "") +
|
|
555
|
+
`. The errors are real for that run; confirm they still apply to the ` +
|
|
556
|
+
`live editor before acting.`,
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
return {
|
|
560
|
+
versionMismatch: false,
|
|
561
|
+
logUnityVersion,
|
|
562
|
+
liveUnityVersion: live,
|
|
563
|
+
logBatchMode,
|
|
564
|
+
hint: "",
|
|
565
|
+
};
|
|
566
|
+
}
|
|
244
567
|
//# sourceMappingURL=unity-log.js.map
|
package/dist/unity-log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unity-log.js","sourceRoot":"","sources":["../src/unity-log.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unity-log.js","sourceRoot":"","sources":["../src/unity-log.ts"],"names":[],"mappings":"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"}
|