unity-open-mcp 0.8.3 → 0.9.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/batch-spawn.js +40 -1
- package/dist/batch-spawn.js.map +1 -1
- package/dist/capabilities/lifecycle.js +12 -0
- package/dist/capabilities/lifecycle.js.map +1 -1
- package/dist/capabilities/tool-groups.js +2 -0
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/live-client.js +8 -4
- package/dist/live-client.js.map +1 -1
- package/dist/tool-router.d.ts +1 -0
- package/dist/tool-router.js +85 -9
- 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/component-get.js +9 -0
- package/dist/tools/component-get.js.map +1 -1
- package/dist/tools/editor-status.js +5 -1
- package/dist/tools/editor-status.js.map +1 -1
- package/dist/tools/execute-csharp.js +16 -2
- 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.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/manage-tools.js +8 -1
- package/dist/tools/manage-tools.js.map +1 -1
- package/dist/tools/prefab-instantiate.js +11 -0
- package/dist/tools/prefab-instantiate.js.map +1 -1
- package/dist/tools/read-compile-errors.js +7 -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/run-tests.js +21 -4
- package/dist/tools/run-tests.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/unity-log.d.ts +62 -1
- package/dist/unity-log.js +186 -10
- package/dist/unity-log.js.map +1 -1
- package/package.json +1 -1
package/dist/unity-log.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
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
22
|
/** Resolve the live Editor.log directory for the current platform. Mirrors
|
|
@@ -60,6 +60,36 @@ export function projectEditorLogPath(projectPath) {
|
|
|
60
60
|
return null;
|
|
61
61
|
return join(projectPath, "Logs", "Editor.log");
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* The rotated previous log. Unity renames the live Editor.log to
|
|
65
|
+
* Editor-prev.log on every fresh launch (a new Editor start, AND a failed
|
|
66
|
+
* batch spawn against an already-open project). When a live editor holds the
|
|
67
|
+
* project and a batch invocation rotates the log, the live editor keeps its
|
|
68
|
+
* open handle and writes to Editor-prev.log from then on, while Editor.log is
|
|
69
|
+
* frozen at a tiny startup size — reading it returns "no errors" forever
|
|
70
|
+
* (feedback-fable-31-07 §5).
|
|
71
|
+
*
|
|
72
|
+
* Returns the GLOBAL prev-log path. On Unity 6000.5+ the rotated prev log
|
|
73
|
+
* lives next to the project-relative live log (`<project>/Logs/Editor-prev.log`),
|
|
74
|
+
* not in the global dir — use {@link projectEditorPrevLogPath} when the
|
|
75
|
+
* project-relative live log is the resolved candidate.
|
|
76
|
+
*/
|
|
77
|
+
export function editorPrevLogPath(platform = process.platform) {
|
|
78
|
+
return join(editorLogsDir(platform), "Editor-prev.log");
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolve the project-relative Editor-prev.log path Unity 6000.5+ rotates the
|
|
82
|
+
* live log into (`<project>/Logs/Editor-prev.log`). Returns null when no
|
|
83
|
+
* project path is given. Mirrors {@link projectEditorLogPath}: on 6000.5+ the
|
|
84
|
+
* prev log follows the live log into the project's Logs dir, so the prev-log
|
|
85
|
+
* fallback must read THAT file, not the stale global Editor-prev.log left over
|
|
86
|
+
* from a pre-6000.5 session.
|
|
87
|
+
*/
|
|
88
|
+
export function projectEditorPrevLogPath(projectPath) {
|
|
89
|
+
if (!projectPath)
|
|
90
|
+
return null;
|
|
91
|
+
return join(projectPath, "Logs", "Editor-prev.log");
|
|
92
|
+
}
|
|
63
93
|
/**
|
|
64
94
|
* Pick the authoritative Editor.log to read for compile-error extraction.
|
|
65
95
|
*
|
|
@@ -76,18 +106,67 @@ export function projectEditorLogPath(projectPath) {
|
|
|
76
106
|
*
|
|
77
107
|
* When the project path is unknown (no `--project`), or the project-relative
|
|
78
108
|
* log doesn't exist, the global log is used as before.
|
|
109
|
+
*
|
|
110
|
+
* feedback-fable-31-07 §5 — Editor-prev.log fallback. When a live editor
|
|
111
|
+
* holds the project (a known `livePid` is alive) and the resolved Editor.log
|
|
112
|
+
* looks frozen (implausibly small, e.g. < 4KB — the tell-tale sign of a
|
|
113
|
+
* rotated log the live editor is no longer writing to), fall back to
|
|
114
|
+
* Editor-prev.log, which is where the live editor keeps writing after the
|
|
115
|
+
* rotation. `livePid` is optional; when absent the prev.log fallback only
|
|
116
|
+
* triggers on a frozen-looking log, which is conservative.
|
|
79
117
|
*/
|
|
80
|
-
export function resolveEditorLogPath(projectPath, platform = process.platform) {
|
|
118
|
+
export function resolveEditorLogPath(projectPath, platform = process.platform, livePid) {
|
|
81
119
|
const project = projectEditorLogPath(projectPath);
|
|
82
120
|
const global = editorLogPath(platform);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return
|
|
121
|
+
const candidate = project && existsSync(project) ? project : global;
|
|
122
|
+
const candidateReason = project && existsSync(project) ? "project_log" : "global_log";
|
|
123
|
+
// On 6000.5+ the rotated prev log lives next to the project-relative live
|
|
124
|
+
// log (<project>/Logs/Editor-prev.log), not in the global dir. When the
|
|
125
|
+
// resolved candidate is the project log, the prev-log fallback must read the
|
|
126
|
+
// project prev log; otherwise (pre-6000.5 global candidate) fall back to the
|
|
127
|
+
// global prev log as before. Reading the stale global prev log here would
|
|
128
|
+
// return compile errors from an unrelated older session.
|
|
129
|
+
const usingProjectLog = candidateReason === "project_log";
|
|
130
|
+
const prev = usingProjectLog && project
|
|
131
|
+
? projectEditorPrevLogPath(projectPath) ?? editorPrevLogPath(platform)
|
|
132
|
+
: editorPrevLogPath(platform);
|
|
133
|
+
const prevExists = existsSync(prev);
|
|
134
|
+
const candidateFrozen = isLogFrozen(candidate);
|
|
135
|
+
// Strong signal: a live editor is known to hold the project AND Editor.log
|
|
136
|
+
// is frozen/small. This is exactly the log-rotation scenario — a batch spawn
|
|
137
|
+
// rotated Editor.log while the live editor keeps writing to Editor-prev.log.
|
|
138
|
+
// Prefer Editor-prev.log when it exists.
|
|
139
|
+
//
|
|
140
|
+
// The frozen check is ONLY meaningful with a live PID: a machine that is not
|
|
141
|
+
// currently running Unity naturally has a small stale global Editor.log and a
|
|
142
|
+
// recent Editor-prev.log, which is the NORMAL state, not a rotation in
|
|
143
|
+
// progress. Without a live PID we never fall back on frozen-ness alone.
|
|
144
|
+
if (prevExists && livePid && livePid > 0 && candidateFrozen) {
|
|
145
|
+
return { path: prev, reason: "prev_log_live_editor" };
|
|
146
|
+
}
|
|
147
|
+
// No live PID context: only fall back when the resolved candidate does not
|
|
148
|
+
// exist at all but Editor-prev.log does (a hard missing-log case).
|
|
149
|
+
if (!livePid && !existsSync(candidate) && prevExists) {
|
|
150
|
+
return { path: prev, reason: "prev_log_fallback" };
|
|
151
|
+
}
|
|
152
|
+
return { path: candidate, reason: candidateReason };
|
|
153
|
+
}
|
|
154
|
+
/** Threshold below which Editor.log is "frozen" — a freshly-rotated log the
|
|
155
|
+
* live editor stopped writing to is typically a few hundred bytes to ~2.5KB
|
|
156
|
+
* (just the batch spawn's startup banner before it died on the project lock). */
|
|
157
|
+
const FROZEN_LOG_BYTES = 4096;
|
|
158
|
+
function isLogFrozen(path) {
|
|
159
|
+
// A frozen log is implausibly small. The real live log is usually tens of KB
|
|
160
|
+
// minimum once the editor has compiled anything.
|
|
161
|
+
return statSize(path) < FROZEN_LOG_BYTES;
|
|
162
|
+
}
|
|
163
|
+
function statSize(path) {
|
|
164
|
+
try {
|
|
165
|
+
return existsSync(path) ? statSync(path).size : 0;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return 0;
|
|
169
|
+
}
|
|
91
170
|
}
|
|
92
171
|
/** Default tail size. Bounded so a multi-MB log can't blow up the tool
|
|
93
172
|
* response; 256KB is ample for a compile-error burst (Unity writes the
|
|
@@ -241,4 +320,101 @@ export function detectStaleLog(logPath, citedFiles, projectRoot) {
|
|
|
241
320
|
"unity_open_mcp_compile_check to spawn a fresh headless recompile.",
|
|
242
321
|
};
|
|
243
322
|
}
|
|
323
|
+
/** Cap on the number of newer sources reported (evidence, not a roster). */
|
|
324
|
+
const MAX_NEWER_SOURCES = 5;
|
|
325
|
+
/** Cap on how many .cs files to stat before giving up the scan. A project that
|
|
326
|
+
* exceeds this likely has a fresh DLL anyway (compile times track source
|
|
327
|
+
* count); the cap protects pathological trees from stalling the read. */
|
|
328
|
+
const MAX_CS_SCAN = 4000;
|
|
329
|
+
/**
|
|
330
|
+
* Decide whether the built assembly set under `<project>/Library/ScriptAssemblies`
|
|
331
|
+
* is stale relative to the on-disk C# sources under `<project>/Assets`.
|
|
332
|
+
*
|
|
333
|
+
* Conservative: flags staleness only when ALL of:
|
|
334
|
+
* - the ScriptAssemblies dir exists and holds at least one .dll,
|
|
335
|
+
* - at least one C# source under Assets is strictly newer than the newest
|
|
336
|
+
* .dll mtime.
|
|
337
|
+
* Never throws; returns a clean "not stale" on any resolution failure.
|
|
338
|
+
*/
|
|
339
|
+
export function detectStaleAssembly(projectRoot) {
|
|
340
|
+
const empty = { staleAssembly: false, newerSources: [], hint: "" };
|
|
341
|
+
if (!projectRoot)
|
|
342
|
+
return empty;
|
|
343
|
+
const dllDir = join(projectRoot, "Library", "ScriptAssemblies");
|
|
344
|
+
let dllMtimeMs;
|
|
345
|
+
try {
|
|
346
|
+
if (!existsSync(dllDir))
|
|
347
|
+
return empty;
|
|
348
|
+
let newest = 0;
|
|
349
|
+
for (const entry of readdirSync(dllDir)) {
|
|
350
|
+
if (!entry.endsWith(".dll"))
|
|
351
|
+
continue;
|
|
352
|
+
const m = statSync(join(dllDir, entry)).mtimeMs;
|
|
353
|
+
if (m > newest)
|
|
354
|
+
newest = m;
|
|
355
|
+
}
|
|
356
|
+
if (newest === 0)
|
|
357
|
+
return empty; // no DLLs built yet
|
|
358
|
+
dllMtimeMs = newest;
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return empty;
|
|
362
|
+
}
|
|
363
|
+
// Scan Assets/ for .cs sources newer than the newest DLL. Walk top-down,
|
|
364
|
+
// skipping Library/Temp/obj etc. (Assets/ has none of those, but be safe).
|
|
365
|
+
const newerSources = [];
|
|
366
|
+
let scanned = 0;
|
|
367
|
+
const visit = (dir) => {
|
|
368
|
+
if (newerSources.length >= MAX_NEWER_SOURCES || scanned >= MAX_CS_SCAN)
|
|
369
|
+
return;
|
|
370
|
+
let entries;
|
|
371
|
+
try {
|
|
372
|
+
entries = readdirSync(dir, { withFileTypes: true });
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
for (const ent of entries) {
|
|
378
|
+
if (newerSources.length >= MAX_NEWER_SOURCES || scanned >= MAX_CS_SCAN)
|
|
379
|
+
return;
|
|
380
|
+
const full = join(dir, ent.name);
|
|
381
|
+
if (ent.isDirectory()) {
|
|
382
|
+
visit(full);
|
|
383
|
+
}
|
|
384
|
+
else if (ent.isFile() && ent.name.endsWith(".cs")) {
|
|
385
|
+
scanned++;
|
|
386
|
+
try {
|
|
387
|
+
const m = statSync(full).mtimeMs;
|
|
388
|
+
if (m > dllMtimeMs) {
|
|
389
|
+
const rel = full.slice(projectRoot.length).replace(/^[\\/]+/, "");
|
|
390
|
+
newerSources.push(rel);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
/* file vanished mid-scan */
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
try {
|
|
400
|
+
visit(join(projectRoot, "Assets"));
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
return empty;
|
|
404
|
+
}
|
|
405
|
+
if (newerSources.length === 0) {
|
|
406
|
+
return { staleAssembly: false, dllMtimeMs, newerSources: [], hint: "" };
|
|
407
|
+
}
|
|
408
|
+
return {
|
|
409
|
+
staleAssembly: true,
|
|
410
|
+
dllMtimeMs,
|
|
411
|
+
newerSources,
|
|
412
|
+
hint: "The built assembly appears stale — at least one Assets/**/*.cs source is " +
|
|
413
|
+
"newer than the newest Library/ScriptAssemblies/*.dll (Unity's incremental " +
|
|
414
|
+
"compiler likely no-op'd a recompile, so the running assembly predates the " +
|
|
415
|
+
"latest source). Do NOT trust a no_errors_found signal until the assembly is " +
|
|
416
|
+
"rebuilt: call unity_open_mcp_recompile_scripts to force a deterministic " +
|
|
417
|
+
"recompile, then re-read compile errors.",
|
|
418
|
+
};
|
|
419
|
+
}
|
|
244
420
|
//# 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":"AAAA,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,+EAA+E;AAC/E,yEAAyE;AACzE,4EAA4E;AAC5E,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,+DAA+D;AAC/D,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,6DAA6D;AAC7D,EAAE;AACF,gEAAgE;AAEhE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"unity-log.js","sourceRoot":"","sources":["../src/unity-log.ts"],"names":[],"mappings":"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"}
|