unity-open-mcp 0.4.1 → 0.6.1
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/README.md +20 -14
- package/dist/batch-spawn.d.ts +4 -0
- package/dist/batch-spawn.js +55 -11
- package/dist/batch-spawn.js.map +1 -1
- package/dist/capabilities/build-capabilities.js +6 -0
- package/dist/capabilities/build-capabilities.js.map +1 -1
- package/dist/capabilities/cost-hints.js +30 -0
- package/dist/capabilities/cost-hints.js.map +1 -1
- package/dist/capabilities/lifecycle.js +13 -0
- package/dist/capabilities/lifecycle.js.map +1 -1
- package/dist/capabilities/tool-groups.js +4 -0
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/cli/commands.js +9 -8
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/ping-poller.js +20 -0
- package/dist/cli/ping-poller.js.map +1 -1
- package/dist/constants.d.ts +89 -0
- package/dist/constants.js +109 -0
- package/dist/constants.js.map +1 -0
- package/dist/dialog-dismiss.d.ts +0 -7
- package/dist/dialog-dismiss.js +17 -19
- package/dist/dialog-dismiss.js.map +1 -1
- package/dist/hub-control.d.ts +6 -2
- package/dist/hub-control.js +8 -8
- package/dist/hub-control.js.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/instance-discovery.js +2 -1
- package/dist/instance-discovery.js.map +1 -1
- package/dist/live-client.d.ts +72 -0
- package/dist/live-client.js +387 -255
- package/dist/live-client.js.map +1 -1
- package/dist/offline/api.d.ts +171 -0
- package/dist/offline/api.js +852 -0
- package/dist/offline/api.js.map +1 -0
- package/dist/offline/hierarchy.d.ts +24 -0
- package/dist/offline/hierarchy.js +242 -0
- package/dist/offline/hierarchy.js.map +1 -0
- package/dist/offline/index-builders.d.ts +11 -0
- package/dist/offline/index-builders.js +202 -0
- package/dist/offline/index-builders.js.map +1 -0
- package/dist/offline/model.d.ts +8 -0
- package/dist/offline/model.js +188 -0
- package/dist/offline/model.js.map +1 -0
- package/dist/offline/names.d.ts +7 -0
- package/dist/offline/names.js +20 -0
- package/dist/offline/names.js.map +1 -0
- package/dist/offline/overrides.d.ts +17 -0
- package/dist/offline/overrides.js +266 -0
- package/dist/offline/overrides.js.map +1 -0
- package/dist/offline/parse.d.ts +25 -0
- package/dist/offline/parse.js +236 -0
- package/dist/offline/parse.js.map +1 -0
- package/dist/offline/paths.d.ts +4 -0
- package/dist/offline/paths.js +23 -0
- package/dist/offline/paths.js.map +1 -0
- package/dist/offline/primitives.d.ts +17 -0
- package/dist/offline/primitives.js +195 -0
- package/dist/offline/primitives.js.map +1 -0
- package/dist/offline/references.d.ts +9 -0
- package/dist/offline/references.js +55 -0
- package/dist/offline/references.js.map +1 -0
- package/dist/offline/types.d.ts +65 -0
- package/dist/offline/types.js +154 -0
- package/dist/offline/types.js.map +1 -0
- package/dist/offline.d.ts +2 -180
- package/dist/offline.js +27 -2282
- package/dist/offline.js.map +1 -1
- package/dist/project-health.d.ts +1 -1
- package/dist/project-health.js +66 -3
- package/dist/project-health.js.map +1 -1
- package/dist/routers.js +6 -5
- package/dist/routers.js.map +1 -1
- package/dist/running-unity.d.ts +105 -0
- package/dist/running-unity.js +387 -0
- package/dist/running-unity.js.map +1 -0
- package/dist/skill/client-paths.d.ts +22 -0
- package/dist/skill/client-paths.js +66 -5
- package/dist/skill/client-paths.js.map +1 -1
- package/dist/skill/generate-skill.d.ts +43 -4
- package/dist/skill/generate-skill.js +132 -34
- package/dist/skill/generate-skill.js.map +1 -1
- package/dist/tool-router.d.ts +12 -0
- package/dist/tool-router.js +112 -100
- package/dist/tool-router.js.map +1 -1
- package/dist/tools/batch-execute.d.ts +2 -0
- package/dist/tools/batch-execute.js +83 -0
- package/dist/tools/batch-execute.js.map +1 -0
- package/dist/tools/bridge-status.js +8 -1
- package/dist/tools/bridge-status.js.map +1 -1
- package/dist/tools/component-get.js +44 -11
- package/dist/tools/component-get.js.map +1 -1
- package/dist/tools/editor-status.js +3 -2
- package/dist/tools/editor-status.js.map +1 -1
- package/dist/tools/execute-csharp.js +3 -2
- package/dist/tools/execute-csharp.js.map +1 -1
- package/dist/tools/generate-skill.js +8 -0
- package/dist/tools/generate-skill.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +29 -17
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inputsystem-asset-create.js +4 -4
- package/dist/tools/inputsystem-asset-create.js.map +1 -1
- package/dist/tools/invoke-method.js +2 -1
- package/dist/tools/invoke-method.js.map +1 -1
- package/dist/tools/navigation-surface-add.js +6 -5
- package/dist/tools/navigation-surface-add.js.map +1 -1
- package/dist/tools/probuilder-create-shape.js +4 -4
- package/dist/tools/probuilder-create-shape.js.map +1 -1
- package/dist/tools/read-compile-errors.js +44 -31
- package/dist/tools/read-compile-errors.js.map +1 -1
- package/dist/tools/scene-get-data.js +10 -2
- package/dist/tools/scene-get-data.js.map +1 -1
- package/dist/tools/scene-save.js +16 -5
- package/dist/tools/scene-save.js.map +1 -1
- package/dist/tools/scene-set-active.js +22 -6
- package/dist/tools/scene-set-active.js.map +1 -1
- package/dist/tools/scene-unload.js +20 -6
- package/dist/tools/scene-unload.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// 3. writeSkillToClients() — writes the generated file to .claude/skills/ etc.
|
|
14
14
|
import { readFile, writeFile, readdir, stat } from "node:fs/promises";
|
|
15
15
|
import { join, basename, relative, sep } from "node:path";
|
|
16
|
-
import { clientSkillRelativePath } from "./client-paths.js";
|
|
16
|
+
import { clientSkillRelativePath, resolveTemplateSkillPath } from "./client-paths.js";
|
|
17
17
|
// ---------------------------------------------------------------------------
|
|
18
18
|
// Constants
|
|
19
19
|
// ---------------------------------------------------------------------------
|
|
@@ -29,6 +29,10 @@ const SKIP_DIRS = new Set([
|
|
|
29
29
|
]);
|
|
30
30
|
const MAX_CS_SCAN = 500;
|
|
31
31
|
const MAX_TYPES_IN_SKILL = 40;
|
|
32
|
+
// Cap the inventory preview embedded in Hub/CLI responses so the JSON
|
|
33
|
+
// envelope stays bounded. The full skill is always written to disk
|
|
34
|
+
// when write=true; this is only the echo shown to the caller.
|
|
35
|
+
const MAX_INVENTORY_PREVIEW_CHARS = 6000;
|
|
32
36
|
// ---------------------------------------------------------------------------
|
|
33
37
|
// 1. Project state reader (disk I/O)
|
|
34
38
|
// ---------------------------------------------------------------------------
|
|
@@ -150,14 +154,16 @@ function extractTypes(content, filePath, projectRoot, monoBehaviours, scriptable
|
|
|
150
154
|
// ---------------------------------------------------------------------------
|
|
151
155
|
// 2. Skill markdown generator (pure, no I/O)
|
|
152
156
|
// ---------------------------------------------------------------------------
|
|
153
|
-
|
|
157
|
+
/**
|
|
158
|
+
* Project-specific inventory blocks the template cannot know: Unity
|
|
159
|
+
* version, bridge/verify install state, installed packages, and the
|
|
160
|
+
* key MonoBehaviour / ScriptableObject types discovered in Assets/.
|
|
161
|
+
* Used both by the standalone full builder (`generateSkillMarkdown`)
|
|
162
|
+
* and by the template+inventory composer (`composeSkillMarkdown`) so
|
|
163
|
+
* the two never drift on the project-section shape.
|
|
164
|
+
*/
|
|
165
|
+
function buildProjectInventoryBlocks(state) {
|
|
154
166
|
const lines = [];
|
|
155
|
-
const now = new Date().toISOString().slice(0, 10);
|
|
156
|
-
lines.push(`# Unity Agent Skill — ${state.projectName}`);
|
|
157
|
-
lines.push("");
|
|
158
|
-
lines.push(`> Auto-generated by \`unity_open_mcp_generate_skill\` on ${now}.`);
|
|
159
|
-
lines.push(`> Regenerate after package or script changes to keep this file current.`);
|
|
160
|
-
lines.push("");
|
|
161
167
|
// --- Project environment ---
|
|
162
168
|
lines.push("## Project environment");
|
|
163
169
|
lines.push("");
|
|
@@ -186,6 +192,42 @@ export function generateSkillMarkdown(state, caps) {
|
|
|
186
192
|
}
|
|
187
193
|
lines.push("");
|
|
188
194
|
}
|
|
195
|
+
// --- Key project types ---
|
|
196
|
+
if (state.monoBehaviours.length > 0 || state.scriptableObjects.length > 0) {
|
|
197
|
+
lines.push("## Key project types");
|
|
198
|
+
lines.push("");
|
|
199
|
+
lines.push("Use `unity_open_mcp_find_members` to inspect any of these before editing.");
|
|
200
|
+
lines.push("");
|
|
201
|
+
if (state.monoBehaviours.length > 0) {
|
|
202
|
+
lines.push("### MonoBehaviours");
|
|
203
|
+
lines.push("");
|
|
204
|
+
for (const mb of state.monoBehaviours) {
|
|
205
|
+
const fullName = mb.namespace ? `${mb.namespace}.${mb.name}` : mb.name;
|
|
206
|
+
lines.push(`- **${fullName}** — \`${mb.filePath}\``);
|
|
207
|
+
}
|
|
208
|
+
lines.push("");
|
|
209
|
+
}
|
|
210
|
+
if (state.scriptableObjects.length > 0) {
|
|
211
|
+
lines.push("### ScriptableObjects");
|
|
212
|
+
lines.push("");
|
|
213
|
+
for (const so of state.scriptableObjects) {
|
|
214
|
+
const fullName = so.namespace ? `${so.namespace}.${so.name}` : so.name;
|
|
215
|
+
lines.push(`- **${fullName}** — \`${so.filePath}\``);
|
|
216
|
+
}
|
|
217
|
+
lines.push("");
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return lines;
|
|
221
|
+
}
|
|
222
|
+
export function generateSkillMarkdown(state, caps) {
|
|
223
|
+
const lines = [];
|
|
224
|
+
const now = new Date().toISOString().slice(0, 10);
|
|
225
|
+
lines.push(`# Unity Agent Skill — ${state.projectName}`);
|
|
226
|
+
lines.push("");
|
|
227
|
+
lines.push(`> Auto-generated by \`unity_open_mcp_generate_skill\` on ${now}.`);
|
|
228
|
+
lines.push(`> Regenerate after package or script changes to keep this file current.`);
|
|
229
|
+
lines.push("");
|
|
230
|
+
lines.push(...buildProjectInventoryBlocks(state));
|
|
189
231
|
// --- Available tools ---
|
|
190
232
|
const implementedTools = caps.tools.filter((t) => t.implemented);
|
|
191
233
|
if (implementedTools.length > 0) {
|
|
@@ -234,31 +276,6 @@ export function generateSkillMarkdown(state, caps) {
|
|
|
234
276
|
}
|
|
235
277
|
lines.push("");
|
|
236
278
|
}
|
|
237
|
-
// --- Key project types ---
|
|
238
|
-
if (state.monoBehaviours.length > 0 || state.scriptableObjects.length > 0) {
|
|
239
|
-
lines.push("## Key project types");
|
|
240
|
-
lines.push("");
|
|
241
|
-
lines.push("Use `unity_open_mcp_find_members` to inspect any of these before editing.");
|
|
242
|
-
lines.push("");
|
|
243
|
-
if (state.monoBehaviours.length > 0) {
|
|
244
|
-
lines.push("### MonoBehaviours");
|
|
245
|
-
lines.push("");
|
|
246
|
-
for (const mb of state.monoBehaviours) {
|
|
247
|
-
const fullName = mb.namespace ? `${mb.namespace}.${mb.name}` : mb.name;
|
|
248
|
-
lines.push(`- **${fullName}** — \`${mb.filePath}\``);
|
|
249
|
-
}
|
|
250
|
-
lines.push("");
|
|
251
|
-
}
|
|
252
|
-
if (state.scriptableObjects.length > 0) {
|
|
253
|
-
lines.push("### ScriptableObjects");
|
|
254
|
-
lines.push("");
|
|
255
|
-
for (const so of state.scriptableObjects) {
|
|
256
|
-
const fullName = so.namespace ? `${so.namespace}.${so.name}` : so.name;
|
|
257
|
-
lines.push(`- **${fullName}** — \`${so.filePath}\``);
|
|
258
|
-
}
|
|
259
|
-
lines.push("");
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
279
|
// --- Core workflow ---
|
|
263
280
|
lines.push("## Core workflow: mutate → gate → fix");
|
|
264
281
|
lines.push("");
|
|
@@ -372,11 +389,79 @@ async function ensureParentDir(filePath) {
|
|
|
372
389
|
}
|
|
373
390
|
}
|
|
374
391
|
// ---------------------------------------------------------------------------
|
|
392
|
+
// Template + inventory composer
|
|
393
|
+
// ---------------------------------------------------------------------------
|
|
394
|
+
//
|
|
395
|
+
// The template (`skills/unity-open-mcp/SKILL.md`) is the source of truth
|
|
396
|
+
// for the workflow playbook — agent guidance that does not vary per
|
|
397
|
+
// project. The generator uniquely knows the project-specific inventory
|
|
398
|
+
// (Unity version, installed packages, key types). `composeSkillMarkdown`
|
|
399
|
+
// merges the two so a single `unity_open_mcp_generate_skill` write
|
|
400
|
+
// produces one file containing the full playbook AND this project's
|
|
401
|
+
// inventory, instead of two parallel builders that each lose half the
|
|
402
|
+
// picture.
|
|
403
|
+
/**
|
|
404
|
+
* Read the template workflow playbook from disk. Returns the template
|
|
405
|
+
* text (normalized to end with a single trailing newline), or `null`
|
|
406
|
+
* when the template cannot be located or read — the composer then
|
|
407
|
+
* degrades to the standalone full-inventory output. Never throws.
|
|
408
|
+
*/
|
|
409
|
+
export async function readTemplateWorkflow() {
|
|
410
|
+
const templatePath = resolveTemplateSkillPath();
|
|
411
|
+
if (!templatePath)
|
|
412
|
+
return null;
|
|
413
|
+
try {
|
|
414
|
+
const raw = await readFile(templatePath, "utf-8");
|
|
415
|
+
return raw.endsWith("\n") ? raw : `${raw}\n`;
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Compose the final skill markdown from the template playbook + the
|
|
423
|
+
* project inventory.
|
|
424
|
+
*
|
|
425
|
+
* - When `template` is non-null and `includeWorkflow !== false`: the
|
|
426
|
+
* template is emitted verbatim (the authoritative workflow prose),
|
|
427
|
+
* followed by a `---` separator and a `# Project inventory —
|
|
428
|
+
* <projectName>` section carrying the project-specific blocks. Both
|
|
429
|
+
* the template's heading and the project-name heading appear in the
|
|
430
|
+
* output.
|
|
431
|
+
* - When `template` is null (standalone install, template missing) or
|
|
432
|
+
* `includeWorkflow === false`: falls back to `generateSkillMarkdown`
|
|
433
|
+
* (the full standalone inventory, including its own workflow summary).
|
|
434
|
+
*/
|
|
435
|
+
export function composeSkillMarkdown(state, caps, template, options = {}) {
|
|
436
|
+
const includeWorkflow = options.includeWorkflow !== false;
|
|
437
|
+
if (!template || !includeWorkflow) {
|
|
438
|
+
return generateSkillMarkdown(state, caps);
|
|
439
|
+
}
|
|
440
|
+
const lines = [];
|
|
441
|
+
// Template playbook, verbatim.
|
|
442
|
+
lines.push(template.endsWith("\n") ? template : `${template}\n`);
|
|
443
|
+
lines.push("---");
|
|
444
|
+
lines.push("");
|
|
445
|
+
// Project inventory section.
|
|
446
|
+
lines.push(`# Project inventory — ${state.projectName}`);
|
|
447
|
+
lines.push("");
|
|
448
|
+
lines.push(`> Project-specific section generated by \`unity_open_mcp_generate_skill\`. ` +
|
|
449
|
+
`Regenerate after package or script changes.`);
|
|
450
|
+
lines.push("");
|
|
451
|
+
lines.push(...buildProjectInventoryBlocks(state));
|
|
452
|
+
return lines.join("\n") + "\n";
|
|
453
|
+
}
|
|
454
|
+
// ---------------------------------------------------------------------------
|
|
375
455
|
// Orchestrator
|
|
376
456
|
// ---------------------------------------------------------------------------
|
|
377
457
|
export async function generateSkill(projectRoot, caps, options = {}) {
|
|
378
458
|
const state = await readProjectState(projectRoot);
|
|
379
|
-
const
|
|
459
|
+
const template = options.includeWorkflow !== false
|
|
460
|
+
? await readTemplateWorkflow()
|
|
461
|
+
: null;
|
|
462
|
+
const skill = composeSkillMarkdown(state, caps, template, {
|
|
463
|
+
includeWorkflow: options.includeWorkflow,
|
|
464
|
+
});
|
|
380
465
|
let written = [];
|
|
381
466
|
if (options.write) {
|
|
382
467
|
const clients = options.clients && options.clients.length > 0
|
|
@@ -386,4 +471,17 @@ export async function generateSkill(projectRoot, caps, options = {}) {
|
|
|
386
471
|
}
|
|
387
472
|
return { skill, project: state, written };
|
|
388
473
|
}
|
|
474
|
+
/**
|
|
475
|
+
* Truncate a skill preview for embedding in a JSON envelope (Hub /
|
|
476
|
+
* CLI echo). The full skill is always written to disk when write=true;
|
|
477
|
+
* this only bounds the in-response copy.
|
|
478
|
+
*/
|
|
479
|
+
export function truncateForPreview(skill) {
|
|
480
|
+
if (skill.length <= MAX_INVENTORY_PREVIEW_CHARS)
|
|
481
|
+
return skill;
|
|
482
|
+
const cut = skill.slice(0, MAX_INVENTORY_PREVIEW_CHARS);
|
|
483
|
+
const lastNewline = cut.lastIndexOf("\n");
|
|
484
|
+
const head = lastNewline > 0 ? cut.slice(0, lastNewline) : cut;
|
|
485
|
+
return `${head}\n\n… (${skill.length - head.length} more chars; full content written to disk)`;
|
|
486
|
+
}
|
|
389
487
|
//# sourceMappingURL=generate-skill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-skill.js","sourceRoot":"","sources":["../../src/skill/generate-skill.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate-skill.js","sourceRoot":"","sources":["../../src/skill/generate-skill.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-router.d.ts
CHANGED
|
@@ -32,6 +32,18 @@ export declare class ToolRouter implements Router {
|
|
|
32
32
|
private onToolListChanged?;
|
|
33
33
|
private hubBackend;
|
|
34
34
|
private readonly modelCache;
|
|
35
|
+
/**
|
|
36
|
+
* M28-refactoring Plan 3 (T3.2) — named-tool dispatch map. Replaces the
|
|
37
|
+
* former ~70-block `if (toolName === "...")` chain in routeCore. Each entry
|
|
38
|
+
* binds the tool name to its route-handler method. The map is built lazily on
|
|
39
|
+
* first use (the handlers are bound instance methods, so it cannot be a
|
|
40
|
+
* static field). Adding a new named-tool route is now a map entry, not a new
|
|
41
|
+
* `if` block. Tools that share a handler (validate_edit + scan_paths) or are
|
|
42
|
+
* reached via a predicate (isCompressible) are handled below the lookup — the
|
|
43
|
+
* map covers only exact-name dispatch.
|
|
44
|
+
*/
|
|
45
|
+
private routeHandlers?;
|
|
46
|
+
private getRouteHandlers;
|
|
35
47
|
constructor(live: LiveClient, batch: BatchSpawn, projectPath: string, eventStream: BridgeEventStream, sessionState: ToolSessionState, onToolListChanged?: (() => void | Promise<void>) | undefined, hubBackend?: HubControlBackend);
|
|
36
48
|
route(toolName: string, args: Record<string, unknown>): Promise<CallToolResult>;
|
|
37
49
|
/**
|
package/dist/tool-router.js
CHANGED
|
@@ -10,6 +10,8 @@ import { generateSkill } from "./skill/generate-skill.js";
|
|
|
10
10
|
import { knownClientKeys } from "./skill/client-paths.js";
|
|
11
11
|
import { ALL_TOOLS } from "./tools/index.js";
|
|
12
12
|
import { lockPath, readInstanceLock, classifyInstance, isPidAlive } from "./instance-discovery.js";
|
|
13
|
+
import { PORT_ENV_VAR } from "./constants.js";
|
|
14
|
+
import { findUnityForProject } from "./running-unity.js";
|
|
13
15
|
import { listInstalledEditors, fetchAvailableReleases, openInstallDeepLink, getInstallPath, setInstallPath, } from "./hub-control.js";
|
|
14
16
|
/** Default Hub-control backend — calls the real hub-control functions. */
|
|
15
17
|
const defaultHubBackend = {
|
|
@@ -19,7 +21,7 @@ const defaultHubBackend = {
|
|
|
19
21
|
getInstallPath: () => getInstallPath(),
|
|
20
22
|
setInstallPath: (path) => setInstallPath(path),
|
|
21
23
|
};
|
|
22
|
-
import { BATCH_TOOL_NAMES } from "./batch-spawn.js";
|
|
24
|
+
import { BATCH_TOOL_NAMES, ALWAYS_BATCH_TOOLS } from "./batch-spawn.js";
|
|
23
25
|
import { readProfileAndDetail, applyPaging, attachPagination, foldVerifyResult, parseResultBody, withResultBody, } from "./output-profile.js";
|
|
24
26
|
function injectRouteMeta(result, meta) {
|
|
25
27
|
if (result.content.length === 0)
|
|
@@ -238,6 +240,50 @@ export class ToolRouter {
|
|
|
238
240
|
onToolListChanged;
|
|
239
241
|
hubBackend;
|
|
240
242
|
modelCache = new AssetModelCache();
|
|
243
|
+
/**
|
|
244
|
+
* M28-refactoring Plan 3 (T3.2) — named-tool dispatch map. Replaces the
|
|
245
|
+
* former ~70-block `if (toolName === "...")` chain in routeCore. Each entry
|
|
246
|
+
* binds the tool name to its route-handler method. The map is built lazily on
|
|
247
|
+
* first use (the handlers are bound instance methods, so it cannot be a
|
|
248
|
+
* static field). Adding a new named-tool route is now a map entry, not a new
|
|
249
|
+
* `if` block. Tools that share a handler (validate_edit + scan_paths) or are
|
|
250
|
+
* reached via a predicate (isCompressible) are handled below the lookup — the
|
|
251
|
+
* map covers only exact-name dispatch.
|
|
252
|
+
*/
|
|
253
|
+
routeHandlers;
|
|
254
|
+
getRouteHandlers() {
|
|
255
|
+
if (this.routeHandlers)
|
|
256
|
+
return this.routeHandlers;
|
|
257
|
+
const handlers = new Map([
|
|
258
|
+
// Offline-routed tools (resolved from disk; never hit the bridge).
|
|
259
|
+
["unity_open_mcp_list_assets", (_l, a) => this.routeListAssets(a)],
|
|
260
|
+
["unity_open_mcp_read_compile_errors", (_l, a) => this.routeReadCompileErrors(a)],
|
|
261
|
+
// Local-routed tools (server-only; no live/batch hop).
|
|
262
|
+
["unity_senses_pull_events", (l, a) => this.routePullEvents(a, l)],
|
|
263
|
+
["unity_open_mcp_capabilities", (l, a) => this.routeCapabilities(a, l)],
|
|
264
|
+
["unity_open_mcp_list_rules", (_l, a) => this.routeListRules(a)],
|
|
265
|
+
["unity_open_mcp_generate_skill", (_l, a) => this.routeGenerateSkill(a)],
|
|
266
|
+
["unity_open_mcp_manage_tools", (l, a) => this.routeManageTools(a, l)],
|
|
267
|
+
["unity_open_mcp_bridge_status", (l, a) => this.routeBridgeStatus(a, l)],
|
|
268
|
+
// Hub control tools (local-routed; system-level ops).
|
|
269
|
+
["unity_open_mcp_hub_list_editors", () => this.routeHubListEditors()],
|
|
270
|
+
["unity_open_mcp_hub_available_releases", () => this.routeHubAvailableReleases()],
|
|
271
|
+
["unity_open_mcp_hub_install_editor", (_l, a) => this.routeHubInstallEditor(a)],
|
|
272
|
+
["unity_open_mcp_hub_install_modules", (_l, a) => this.routeHubInstallModules(a)],
|
|
273
|
+
["unity_open_mcp_hub_get_install_path", () => this.routeHubGetInstallPath()],
|
|
274
|
+
["unity_open_mcp_hub_set_install_path", (_l, a) => this.routeHubSetInstallPath(a)],
|
|
275
|
+
// Offline-first reference tools (fall back to live when the bridge is up).
|
|
276
|
+
["unity_open_mcp_find_references", (l, a) => this.routeFindReferences(a, l)],
|
|
277
|
+
["unity_open_mcp_dependencies", (l, a) => this.routeDependencies(a, l)],
|
|
278
|
+
// Verify tools — share a single handler (toolName carried through).
|
|
279
|
+
["unity_open_mcp_validate_edit", (l, a) => this.routeVerifyResult("unity_open_mcp_validate_edit", a, l)],
|
|
280
|
+
["unity_open_mcp_scan_paths", (l, a) => this.routeVerifyResult("unity_open_mcp_scan_paths", a, l)],
|
|
281
|
+
// Scene data — output-profile + paging applied server-side.
|
|
282
|
+
["unity_open_mcp_scene_get_data", (l, a) => this.routeSceneGetData(a, l)],
|
|
283
|
+
]);
|
|
284
|
+
this.routeHandlers = handlers;
|
|
285
|
+
return handlers;
|
|
286
|
+
}
|
|
241
287
|
constructor(live, batch, projectPath, eventStream, sessionState, onToolListChanged,
|
|
242
288
|
// M26 Plan 2 — injectable Hub-control backend. Omit in production (the
|
|
243
289
|
// default calls the real hub-control functions); tests pass a fake to
|
|
@@ -266,101 +312,13 @@ export class ToolRouter {
|
|
|
266
312
|
return this.routeCore(overrideLive, toolName, args);
|
|
267
313
|
}
|
|
268
314
|
async routeCore(live, toolName, args) {
|
|
269
|
-
//
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
// run). Never touches the bridge or spawns Unity.
|
|
277
|
-
if (toolName === "unity_open_mcp_read_compile_errors") {
|
|
278
|
-
return this.routeReadCompileErrors(args);
|
|
279
|
-
}
|
|
280
|
-
// M13 T4.4 — bridge event stream pull. The MCP server is the only long-lived
|
|
281
|
-
// hop between the bridge and the agent; a per-process SSE reader amortizes
|
|
282
|
-
// the connection and shares the queue across pulls. Lives only when the
|
|
283
|
-
// bridge is reachable; an unreachable bridge returns a clear error instead
|
|
284
|
-
// of hanging on connect.
|
|
285
|
-
if (toolName === "unity_senses_pull_events") {
|
|
286
|
-
return this.routePullEvents(args, live);
|
|
287
|
-
}
|
|
288
|
-
// capabilities — local capability-discovery surface (no live/batch hop).
|
|
289
|
-
if (toolName === "unity_open_mcp_capabilities") {
|
|
290
|
-
return this.routeCapabilities(args, live);
|
|
291
|
-
}
|
|
292
|
-
// list_rules — local rule catalog (no live/batch hop). Lets an agent
|
|
293
|
-
// discover which rules apply to which asset kinds before calling
|
|
294
|
-
// scan_paths / validate_edit.
|
|
295
|
-
if (toolName === "unity_open_mcp_list_rules") {
|
|
296
|
-
return this.routeListRules(args);
|
|
297
|
-
}
|
|
298
|
-
// generate_skill — local skill generation (no live/batch hop).
|
|
299
|
-
if (toolName === "unity_open_mcp_generate_skill") {
|
|
300
|
-
return this.routeGenerateSkill(args);
|
|
301
|
-
}
|
|
302
|
-
// M18 Plan 2 / T18.2.2 — manage_tools is server-only. It mutates the
|
|
303
|
-
// per-session tool-group visibility state that lives in the MCP server
|
|
304
|
-
// (ToolSessionState). The bridge does not track session state — it answers
|
|
305
|
-
// manage_tools meta-calls by reporting the compiled tool set; the MCP
|
|
306
|
-
// server applies the activate / deactivate filter to ListTools. Always
|
|
307
|
-
// visible regardless of the current active set (meta-tool).
|
|
308
|
-
if (toolName === "unity_open_mcp_manage_tools") {
|
|
309
|
-
return this.routeManageTools(args, live);
|
|
310
|
-
}
|
|
311
|
-
// testsuite-tauri phase-3 — bridge_status. Operator-only health snapshot.
|
|
312
|
-
// Server-resolved (classifyInstance + one /ping via the LiveClient); never
|
|
313
|
-
// hits the bridge tool endpoint and never spawns Unity. Returns a coarse
|
|
314
|
-
// `status` token (running/compiling/stopped/dead_bridge) the Validation
|
|
315
|
-
// Suite app drives its offline-scenario gate off. Read-only, gate-free.
|
|
316
|
-
if (toolName === "unity_open_mcp_bridge_status") {
|
|
317
|
-
return this.routeBridgeStatus(args, live);
|
|
318
|
-
}
|
|
319
|
-
// M26 Plan 2 — Unity Hub control tools. Local-routed: resolved inside the
|
|
320
|
-
// MCP server (filesystem discovery + Unity archive feed + unityhub:// deep
|
|
321
|
-
// link + Hub CLI). Never hit the bridge tool endpoint, never spawn Unity.
|
|
322
|
-
// Mutating members are system-level ops (paths_hint N/A, gate-free).
|
|
323
|
-
if (toolName === "unity_open_mcp_hub_list_editors") {
|
|
324
|
-
return this.routeHubListEditors();
|
|
325
|
-
}
|
|
326
|
-
if (toolName === "unity_open_mcp_hub_available_releases") {
|
|
327
|
-
return this.routeHubAvailableReleases();
|
|
328
|
-
}
|
|
329
|
-
if (toolName === "unity_open_mcp_hub_install_editor") {
|
|
330
|
-
return this.routeHubInstallEditor(args);
|
|
331
|
-
}
|
|
332
|
-
if (toolName === "unity_open_mcp_hub_install_modules") {
|
|
333
|
-
return this.routeHubInstallModules(args);
|
|
334
|
-
}
|
|
335
|
-
if (toolName === "unity_open_mcp_hub_get_install_path") {
|
|
336
|
-
return this.routeHubGetInstallPath();
|
|
337
|
-
}
|
|
338
|
-
if (toolName === "unity_open_mcp_hub_set_install_path") {
|
|
339
|
-
return this.routeHubSetInstallPath(args);
|
|
340
|
-
}
|
|
341
|
-
// find_references — offline-first when no bridge is connected; live
|
|
342
|
-
// ReferenceGraph remains available when the bridge is up.
|
|
343
|
-
if (toolName === "unity_open_mcp_find_references") {
|
|
344
|
-
return this.routeFindReferences(args, live);
|
|
345
|
-
}
|
|
346
|
-
// dependencies — offline-first (M24 Plan 2 / T24.2). Forward + reverse
|
|
347
|
-
// edges + impact analysis all compute from YAML on disk when no bridge is
|
|
348
|
-
// connected; the live DependenciesTool remains available when the bridge
|
|
349
|
-
// is up. The offline path is the only one that exposes include_impact
|
|
350
|
-
// (transitive reverse closure) today.
|
|
351
|
-
if (toolName === "unity_open_mcp_dependencies") {
|
|
352
|
-
return this.routeDependencies(args, live);
|
|
353
|
-
}
|
|
354
|
-
// M22 — verify tools. The bridge returns the full issues[] list; we fold +
|
|
355
|
-
// page server-side per the output profile (compact = counts only).
|
|
356
|
-
if (toolName === "unity_open_mcp_validate_edit" || toolName === "unity_open_mcp_scan_paths") {
|
|
357
|
-
return this.routeVerifyResult(toolName, args, live);
|
|
358
|
-
}
|
|
359
|
-
// M22 — scene_get_data. Resolves the output profile (onto detail) and pages
|
|
360
|
-
// the node stream server-side; the bridge detail/max_nodes params keep
|
|
361
|
-
// working as back-compat aliases.
|
|
362
|
-
if (toolName === "unity_open_mcp_scene_get_data") {
|
|
363
|
-
return this.routeSceneGetData(args, live);
|
|
315
|
+
// Named-tool dispatch (T3.2): the handler map covers every exact-name
|
|
316
|
+
// route. The per-tool policy rationale (offline / local / hub / offline-
|
|
317
|
+
// first / verify-fold / scene-paging) lives in each routeXxx method's
|
|
318
|
+
// header comment.
|
|
319
|
+
const handler = this.getRouteHandlers().get(toolName);
|
|
320
|
+
if (handler) {
|
|
321
|
+
return handler(live, args);
|
|
364
322
|
}
|
|
365
323
|
// Compact drill-down reads: offline-first for text-serialized assets, fall
|
|
366
324
|
// back to live bridge for binary formats. The compressible-router handles
|
|
@@ -376,12 +334,27 @@ export class ToolRouter {
|
|
|
376
334
|
// running it against a live Editor that already compiled successfully
|
|
377
335
|
// would trivially report "compile_passed" and never surface the broken
|
|
378
336
|
// state the tool exists to diagnose.
|
|
379
|
-
|
|
380
|
-
|
|
337
|
+
//
|
|
338
|
+
// Verify-family tools (scan_all / baseline_create / regression_check) are
|
|
339
|
+
// batch-only: they require the headless verify package and are NOT
|
|
340
|
+
// registered on the live bridge. Routing them live (the previous default
|
|
341
|
+
// when the bridge was up) yielded a bare `tool_not_found`. An open Editor
|
|
342
|
+
// holding the project lock surfaces as `editor_instance_locked` from the
|
|
343
|
+
// batch spawn (the expected degraded outcome — agents should read the lock
|
|
344
|
+
// code, not chase a live registration miss).
|
|
345
|
+
//
|
|
346
|
+
// validate_edit / scan_paths are intentionally excluded: those ARE
|
|
347
|
+
// registered on the live bridge and stay live-first (routeVerifyResult
|
|
348
|
+
// below handles their output-profile folding). The always-batch policy is
|
|
349
|
+
// declared once in ALWAYS_BATCH_TOOLS (tool name → reason); do not add a
|
|
350
|
+
// second pinned branch for a new always-batch tool — extend the map.
|
|
351
|
+
const alwaysBatchReason = ALWAYS_BATCH_TOOLS.get(toolName);
|
|
352
|
+
if (alwaysBatchReason !== undefined) {
|
|
353
|
+
console.error(`[unity-open-mcp] Route: ${toolName} -> batch (always-batch: ${alwaysBatchReason})`);
|
|
381
354
|
const result = await this.batch.route(toolName, args);
|
|
382
355
|
return injectRouteMeta(result, {
|
|
383
356
|
route: "batch",
|
|
384
|
-
fallbackReason:
|
|
357
|
+
fallbackReason: alwaysBatchReason,
|
|
385
358
|
});
|
|
386
359
|
}
|
|
387
360
|
if (!canBatch && !isPing) {
|
|
@@ -575,7 +548,7 @@ export class ToolRouter {
|
|
|
575
548
|
"Ensure the Unity Editor is open with the Agent Bridge running. " +
|
|
576
549
|
"The bridge port is per-project (20000 + sha256(projectPath) % 10000), not fixed — " +
|
|
577
550
|
`if Unity is open, check the instance lock at ${lockPath(this.projectPath)} ` +
|
|
578
|
-
|
|
551
|
+
`for the live port/pid, or set ${PORT_ENV_VAR}.`,
|
|
579
552
|
},
|
|
580
553
|
}),
|
|
581
554
|
},
|
|
@@ -643,6 +616,9 @@ export class ToolRouter {
|
|
|
643
616
|
}
|
|
644
617
|
async routeGenerateSkill(args) {
|
|
645
618
|
const write = args.write === true;
|
|
619
|
+
// include_workflow defaults to true; explicitly passing false
|
|
620
|
+
// opts out of the template+inventory merge.
|
|
621
|
+
const includeWorkflow = args.include_workflow !== false;
|
|
646
622
|
const rawClients = Array.isArray(args.clients) ? args.clients : [];
|
|
647
623
|
// Client allowlist comes from the single-source manifest at
|
|
648
624
|
// `skills/client-paths.json`. Do not add a literal union here.
|
|
@@ -658,6 +634,7 @@ export class ToolRouter {
|
|
|
658
634
|
const result = await generateSkill(this.projectPath, caps, {
|
|
659
635
|
write,
|
|
660
636
|
clients: clients.length > 0 ? clients : undefined,
|
|
637
|
+
includeWorkflow,
|
|
661
638
|
});
|
|
662
639
|
return {
|
|
663
640
|
content: [
|
|
@@ -952,6 +929,12 @@ export class ToolRouter {
|
|
|
952
929
|
// /ping reachable, compiling=true → "compiling"
|
|
953
930
|
// /ping reachable, connected=true → "running"
|
|
954
931
|
// /ping UNreachable + Unity running → "unreachable" (T-fix-3)
|
|
932
|
+
// no lock + /ping UNreachable + Unity proc → "dead_bridge" (M27 Plan 1,
|
|
933
|
+
// cold Safe Mode — reuses the
|
|
934
|
+
// dead_bridge status token +
|
|
935
|
+
// recoveryHint; the instance
|
|
936
|
+
// sub-object carries
|
|
937
|
+
// `unityProcessPid`)
|
|
955
938
|
// otherwise (offline / toolbar off / gone) → "stopped"
|
|
956
939
|
//
|
|
957
940
|
// "stopped" intentionally folds two indistinguishable cases from the
|
|
@@ -995,6 +978,24 @@ export class ToolRouter {
|
|
|
995
978
|
// domain-reload window; a live-PID "healthy"/"gone"-with-alive-pid lock
|
|
996
979
|
// also indicates Unity is up.
|
|
997
980
|
const lockPidAlive = lock !== null && isPidAlive(lock.pid);
|
|
981
|
+
// M27 Plan 1 — cold Safe Mode detection. When the lock is absent
|
|
982
|
+
// (classification "gone") AND the ping is unreachable, the bridge's
|
|
983
|
+
// [InitializeOnLoad] may have never run at all — Unity launched straight
|
|
984
|
+
// into Safe Mode (bridge assembly failed to compile from a cold start) and
|
|
985
|
+
// no lock was ever written. Before this fix that state folded into the
|
|
986
|
+
// generic "stopped", hiding the recovery path (read_compile_errors works
|
|
987
|
+
// even with the bridge dead — it reads Editor.log offline). Scan for a live
|
|
988
|
+
// Unity process whose -projectPath references this project; a match is a
|
|
989
|
+
// strong positive signal of cold Safe Mode and reuses the existing
|
|
990
|
+
// dead_bridge status token + recoveryHint (no new status). The scan only
|
|
991
|
+
// runs in this narrow branch (no lock + unreachable) so the happy path and
|
|
992
|
+
// the reload-window path never pay the ps/PowerShell cost.
|
|
993
|
+
let unityProcessPid = null;
|
|
994
|
+
if (classification === "gone" && !pingReachable) {
|
|
995
|
+
const proc = findUnityForProject(this.projectPath);
|
|
996
|
+
if (proc)
|
|
997
|
+
unityProcessPid = proc.pid;
|
|
998
|
+
}
|
|
998
999
|
let status;
|
|
999
1000
|
if (classification === "dead_bridge") {
|
|
1000
1001
|
status = "dead_bridge";
|
|
@@ -1005,6 +1006,13 @@ export class ToolRouter {
|
|
|
1005
1006
|
else if (connected) {
|
|
1006
1007
|
status = "running";
|
|
1007
1008
|
}
|
|
1009
|
+
else if (!pingReachable && unityProcessPid !== null) {
|
|
1010
|
+
// M27 Plan 1 — cold Safe Mode: no lock (bridge never compiled) + a live
|
|
1011
|
+
// Unity process for this project. Reuse the dead_bridge status token so
|
|
1012
|
+
// the existing recoveryHint + nextStep (read_compile_errors) applies
|
|
1013
|
+
// unchanged. Operators get a `unityProcessPid` to confirm the diagnosis.
|
|
1014
|
+
status = "dead_bridge";
|
|
1015
|
+
}
|
|
1008
1016
|
else if (!pingReachable && (classification === "reloading" || lockPidAlive)) {
|
|
1009
1017
|
// Unity is running but the listener didn't respond — transient (reload
|
|
1010
1018
|
// window) or toolbar-off. Surface as unreachable so it isn't masked by
|
|
@@ -1036,6 +1044,10 @@ export class ToolRouter {
|
|
|
1036
1044
|
lockPath: lockOnDisk,
|
|
1037
1045
|
classification,
|
|
1038
1046
|
lock: lock ? summarizeBridgeStatusLock(lock) : null,
|
|
1047
|
+
// M27 Plan 1 — PID of the live Unity process for this project, when
|
|
1048
|
+
// the cold-Safe-Mode scan matched one. Omitted (absent) when no scan
|
|
1049
|
+
// ran (happy path / reload window) or when the scan found no match.
|
|
1050
|
+
...(unityProcessPid !== null ? { unityProcessPid } : {}),
|
|
1039
1051
|
},
|
|
1040
1052
|
ping: pingReachable
|
|
1041
1053
|
? {
|