unity-open-mcp 1.3.0 → 1.5.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/README.md +5 -4
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/help-text.js +30 -18
- package/dist/cli/help-text.js.map +1 -1
- package/dist/cli/setup-command.d.ts +28 -0
- package/dist/cli/setup-command.js +306 -54
- package/dist/cli/setup-command.js.map +1 -1
- package/dist/compressible-router.d.ts +4 -1
- package/dist/compressible-router.js +27 -11
- package/dist/compressible-router.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/live-client.d.ts +7 -60
- package/dist/live-client.js +26 -84
- package/dist/live-client.js.map +1 -1
- package/dist/offline/api.d.ts +2 -0
- package/dist/offline/api.js +4 -2
- package/dist/offline/api.js.map +1 -1
- package/dist/offline/model.js +1 -1
- package/dist/offline/model.js.map +1 -1
- package/dist/offline/parse.d.ts +1 -1
- package/dist/offline/parse.js +20 -8
- package/dist/offline/parse.js.map +1 -1
- package/dist/project-path.d.ts +16 -3
- package/dist/project-path.js +19 -7
- package/dist/project-path.js.map +1 -1
- package/dist/routers.js +2 -1
- package/dist/routers.js.map +1 -1
- package/dist/setup/codex-toml.d.ts +23 -0
- package/dist/setup/codex-toml.js +514 -0
- package/dist/setup/codex-toml.js.map +1 -0
- package/dist/setup/portable-config.d.ts +0 -1
- package/dist/setup/portable-config.js +7 -15
- package/dist/setup/portable-config.js.map +1 -1
- package/dist/skill/SKILL.md +2 -0
- package/dist/skill/client-paths.js +2 -4
- package/dist/skill/client-paths.js.map +1 -1
- package/dist/skill/references/yaml-and-offline-work.md +1 -1
- package/dist/tool-router.js +14 -5
- package/dist/tool-router.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
// Surgical edits to a Codex `config.toml`.
|
|
2
|
+
//
|
|
3
|
+
// `setup --client codex` owns exactly one server entry: the
|
|
4
|
+
// `[mcp_servers.<key>]` table and its `.env` sub-table (or an inline
|
|
5
|
+
// `env = { … }`). Everything else in the file — other servers, their
|
|
6
|
+
// comments, API tokens, formatting — must survive byte for byte, so this is a
|
|
7
|
+
// line-level editor rather than a parse-and-reserialize: the package ships
|
|
8
|
+
// with one runtime dependency and a TOML serializer would reformat the whole
|
|
9
|
+
// file anyway.
|
|
10
|
+
//
|
|
11
|
+
// The editor recognizes the shapes Codex documents and the Hub / bridge
|
|
12
|
+
// window write: a `[mcp_servers.<key>]` header (bare or quoted segments), plain
|
|
13
|
+
// `key = value` lines (multi-line arrays and strings included), an `.env`
|
|
14
|
+
// sub-table or a one-line inline `env` table, comments, and CRLF files. Any
|
|
15
|
+
// other way of spelling the same entry (dotted keys from a parent table, an
|
|
16
|
+
// inline server table, arrays of tables) is refused with `CodexTomlError`
|
|
17
|
+
// instead of guessed at — a wrong guess would corrupt a file that usually
|
|
18
|
+
// holds credentials.
|
|
19
|
+
export class CodexTomlError extends Error {
|
|
20
|
+
code;
|
|
21
|
+
constructor(code, message) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.code = code;
|
|
24
|
+
this.name = "CodexTomlError";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Merge `entry` into `body` under `[mcp_servers.<serverKey>]`. Keys the entry
|
|
29
|
+
* does not own (`enabled`, timeouts, extra env vars, `.tools.*` tables) are
|
|
30
|
+
* left exactly as they are. Idempotent: merging the result again returns it
|
|
31
|
+
* unchanged.
|
|
32
|
+
*/
|
|
33
|
+
export function mergeCodexServer(body, serverKey, entry) {
|
|
34
|
+
const eol = body.includes("\r\n") ? "\r\n" : "\n";
|
|
35
|
+
const lines = body.split(/\r?\n/);
|
|
36
|
+
const items = scan(lines);
|
|
37
|
+
const main = ["mcp_servers", serverKey];
|
|
38
|
+
const envPath = [...main, "env"];
|
|
39
|
+
const label = `[${renderKeyPath(main)}]`;
|
|
40
|
+
for (const item of items) {
|
|
41
|
+
if (item.kind === "array-header" && startsWith(item.path, main)) {
|
|
42
|
+
throw refuse(label, "is declared as an array of tables");
|
|
43
|
+
}
|
|
44
|
+
if (item.kind === "kv") {
|
|
45
|
+
const full = [...item.table, ...item.key];
|
|
46
|
+
if (startsWith(full, main) && item.table.length < main.length) {
|
|
47
|
+
throw refuse(label, "is spelled with dotted keys or an inline table");
|
|
48
|
+
}
|
|
49
|
+
if (samePath(item.table, main) && item.key.length > 1 && item.key[0] === "env") {
|
|
50
|
+
throw refuse(label, "sets env through dotted keys");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const headers = items.filter((i) => i.kind === "header");
|
|
55
|
+
const mainHeaders = headers.filter((h) => samePath(h.path, main));
|
|
56
|
+
const envHeaders = headers.filter((h) => samePath(h.path, envPath));
|
|
57
|
+
if (mainHeaders.length > 1 || envHeaders.length > 1) {
|
|
58
|
+
throw refuse(label, "is declared more than once");
|
|
59
|
+
}
|
|
60
|
+
const mainHeader = mainHeaders[0];
|
|
61
|
+
const envHeader = envHeaders[0];
|
|
62
|
+
if (!mainHeader) {
|
|
63
|
+
if (envHeader)
|
|
64
|
+
throw refuse(label, "has an env table but no server table");
|
|
65
|
+
return appendBlock(body, eol, renderCodexServer(serverKey, entry, eol));
|
|
66
|
+
}
|
|
67
|
+
const edits = [];
|
|
68
|
+
const mainKvs = kvsIn(items, main);
|
|
69
|
+
const find = (key) => mainKvs.find((kv) => kv.key.length === 1 && kv.key[0] === key);
|
|
70
|
+
const missing = [];
|
|
71
|
+
for (const [key, rendered] of [
|
|
72
|
+
["command", renderString(entry.command)],
|
|
73
|
+
["args", renderStringArray(entry.args)],
|
|
74
|
+
]) {
|
|
75
|
+
const kv = find(key);
|
|
76
|
+
if (!kv)
|
|
77
|
+
missing.push(`${key} = ${rendered}`);
|
|
78
|
+
else
|
|
79
|
+
replaceValue(edits, kv, rendered);
|
|
80
|
+
}
|
|
81
|
+
if (missing.length > 0)
|
|
82
|
+
edits.push({ start: mainHeader.line + 1, end: mainHeader.line, lines: missing });
|
|
83
|
+
const inlineEnv = find("env");
|
|
84
|
+
if (inlineEnv && envHeader)
|
|
85
|
+
throw refuse(label, "defines env both inline and as a table");
|
|
86
|
+
if (inlineEnv) {
|
|
87
|
+
if (inlineEnv.endLine !== inlineEnv.line)
|
|
88
|
+
throw refuse(label, "has a multi-line inline env table");
|
|
89
|
+
replaceValue(edits, inlineEnv, mergeInlineTable(inlineEnv.value, entry, label));
|
|
90
|
+
}
|
|
91
|
+
else if (envHeader) {
|
|
92
|
+
const envKvs = kvsIn(items, envPath);
|
|
93
|
+
const inserts = [];
|
|
94
|
+
for (const [key, value] of Object.entries(entry.env)) {
|
|
95
|
+
const kv = envKvs.find((e) => e.key.length === 1 && e.key[0] === key);
|
|
96
|
+
if (kv)
|
|
97
|
+
replaceValue(edits, kv, renderString(value));
|
|
98
|
+
else
|
|
99
|
+
inserts.push(`${renderKey(key)} = ${renderString(value)}`);
|
|
100
|
+
}
|
|
101
|
+
for (const key of entry.removeEnv) {
|
|
102
|
+
if (key in entry.env)
|
|
103
|
+
continue;
|
|
104
|
+
const kv = envKvs.find((e) => e.key.length === 1 && e.key[0] === key);
|
|
105
|
+
if (kv)
|
|
106
|
+
edits.push({ start: kv.line, end: kv.endLine, lines: [] });
|
|
107
|
+
}
|
|
108
|
+
if (inserts.length > 0)
|
|
109
|
+
edits.push({ start: envHeader.line + 1, end: envHeader.line, lines: inserts });
|
|
110
|
+
}
|
|
111
|
+
else if (Object.keys(entry.env).length > 0) {
|
|
112
|
+
// After the last line of the server table, before any `.tools.*` table.
|
|
113
|
+
const last = Math.max(mainHeader.line, ...mainKvs.map((kv) => kv.endLine));
|
|
114
|
+
edits.push({
|
|
115
|
+
start: last + 1,
|
|
116
|
+
end: last,
|
|
117
|
+
lines: ["", `[${renderKeyPath(envPath)}]`, ...envLines(entry.env)],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return applyEdits(lines, edits).join(eol);
|
|
121
|
+
}
|
|
122
|
+
/** A fresh `[mcp_servers.<key>]` block (plus `.env` when there is any). */
|
|
123
|
+
export function renderCodexServer(serverKey, entry, eol = "\n") {
|
|
124
|
+
const main = ["mcp_servers", serverKey];
|
|
125
|
+
const out = [
|
|
126
|
+
`[${renderKeyPath(main)}]`,
|
|
127
|
+
"enabled = true",
|
|
128
|
+
`command = ${renderString(entry.command)}`,
|
|
129
|
+
`args = ${renderStringArray(entry.args)}`,
|
|
130
|
+
];
|
|
131
|
+
if (Object.keys(entry.env).length > 0) {
|
|
132
|
+
out.push("", `[${renderKeyPath([...main, "env"])}]`, ...envLines(entry.env));
|
|
133
|
+
}
|
|
134
|
+
return out.join(eol) + eol;
|
|
135
|
+
}
|
|
136
|
+
function scan(lines) {
|
|
137
|
+
const items = [];
|
|
138
|
+
let table = [];
|
|
139
|
+
for (let i = 0; i < lines.length; i++) {
|
|
140
|
+
const line = lines[i];
|
|
141
|
+
const trimmed = line.trimStart();
|
|
142
|
+
if (trimmed === "" || trimmed.startsWith("#"))
|
|
143
|
+
continue;
|
|
144
|
+
if (trimmed.startsWith("[")) {
|
|
145
|
+
const header = parseHeader(line);
|
|
146
|
+
if (header) {
|
|
147
|
+
items.push({ kind: header.array ? "array-header" : "header", line: i, path: header.path });
|
|
148
|
+
table = header.path;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const key = parseKeyPath(line, 0);
|
|
153
|
+
if (!key)
|
|
154
|
+
continue;
|
|
155
|
+
let pos = skipSpaces(line, key.end);
|
|
156
|
+
if (line[pos] !== "=")
|
|
157
|
+
continue;
|
|
158
|
+
pos = skipSpaces(line, pos + 1);
|
|
159
|
+
const end = scanValue(lines, i, pos);
|
|
160
|
+
const value = end.line === i
|
|
161
|
+
? line.slice(pos, end.col)
|
|
162
|
+
: [line.slice(pos), ...lines.slice(i + 1, end.line), lines[end.line].slice(0, end.col)].join("\n");
|
|
163
|
+
items.push({
|
|
164
|
+
kind: "kv",
|
|
165
|
+
line: i,
|
|
166
|
+
endLine: end.line,
|
|
167
|
+
table,
|
|
168
|
+
key: key.path,
|
|
169
|
+
prefix: line.slice(0, pos),
|
|
170
|
+
value,
|
|
171
|
+
trailing: lines[end.line].slice(end.col),
|
|
172
|
+
});
|
|
173
|
+
i = end.line;
|
|
174
|
+
}
|
|
175
|
+
return items;
|
|
176
|
+
}
|
|
177
|
+
function parseHeader(line) {
|
|
178
|
+
let pos = skipSpaces(line, 0);
|
|
179
|
+
const array = line.startsWith("[[", pos);
|
|
180
|
+
pos += array ? 2 : 1;
|
|
181
|
+
const key = parseKeyPath(line, pos);
|
|
182
|
+
if (!key)
|
|
183
|
+
return null;
|
|
184
|
+
pos = skipSpaces(line, key.end);
|
|
185
|
+
if (!line.startsWith(array ? "]]" : "]", pos))
|
|
186
|
+
return null;
|
|
187
|
+
pos = skipSpaces(line, pos + (array ? 2 : 1));
|
|
188
|
+
if (pos < line.length && line[pos] !== "#")
|
|
189
|
+
return null;
|
|
190
|
+
return { path: key.path, array };
|
|
191
|
+
}
|
|
192
|
+
/** Dotted key (`a.b`, `"a b".c`, `'lit'`) starting at `start` (after spaces). */
|
|
193
|
+
function parseKeyPath(line, start) {
|
|
194
|
+
const path = [];
|
|
195
|
+
let pos = skipSpaces(line, start);
|
|
196
|
+
for (;;) {
|
|
197
|
+
const ch = line[pos];
|
|
198
|
+
let segment;
|
|
199
|
+
if (ch === '"') {
|
|
200
|
+
let out = "";
|
|
201
|
+
pos++;
|
|
202
|
+
while (pos < line.length && line[pos] !== '"') {
|
|
203
|
+
if (line[pos] === "\\" && pos + 1 < line.length) {
|
|
204
|
+
out += line[pos + 1];
|
|
205
|
+
pos += 2;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
out += line[pos++];
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (line[pos] !== '"')
|
|
212
|
+
return null;
|
|
213
|
+
pos++;
|
|
214
|
+
segment = out;
|
|
215
|
+
}
|
|
216
|
+
else if (ch === "'") {
|
|
217
|
+
const close = line.indexOf("'", pos + 1);
|
|
218
|
+
if (close < 0)
|
|
219
|
+
return null;
|
|
220
|
+
segment = line.slice(pos + 1, close);
|
|
221
|
+
pos = close + 1;
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
const match = /^[A-Za-z0-9_-]+/.exec(line.slice(pos));
|
|
225
|
+
if (!match)
|
|
226
|
+
return null;
|
|
227
|
+
segment = match[0];
|
|
228
|
+
pos += segment.length;
|
|
229
|
+
}
|
|
230
|
+
path.push(segment);
|
|
231
|
+
const next = skipSpaces(line, pos);
|
|
232
|
+
if (line[next] !== ".")
|
|
233
|
+
return { path, end: pos };
|
|
234
|
+
pos = skipSpaces(line, next + 1);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Where the value that begins at (`line`, `col`) ends: strings (single and
|
|
239
|
+
* multi-line, basic and literal) and bracket nesting may carry it across
|
|
240
|
+
* lines. Returns the position just past the value on its last line, before
|
|
241
|
+
* any trailing spaces or comment.
|
|
242
|
+
*/
|
|
243
|
+
function scanValue(lines, line, col) {
|
|
244
|
+
let state = "normal";
|
|
245
|
+
let depth = 0;
|
|
246
|
+
for (let l = line; l < lines.length; l++) {
|
|
247
|
+
const text = lines[l];
|
|
248
|
+
let lastValueEnd = l === line ? col : 0;
|
|
249
|
+
for (let c = l === line ? col : 0; c < text.length; c++) {
|
|
250
|
+
const ch = text[c];
|
|
251
|
+
if (state === "normal") {
|
|
252
|
+
if (ch === "#")
|
|
253
|
+
break;
|
|
254
|
+
if (text.startsWith('"""', c)) {
|
|
255
|
+
state = "ml-basic";
|
|
256
|
+
c += 2;
|
|
257
|
+
}
|
|
258
|
+
else if (text.startsWith("'''", c)) {
|
|
259
|
+
state = "ml-literal";
|
|
260
|
+
c += 2;
|
|
261
|
+
}
|
|
262
|
+
else if (ch === '"')
|
|
263
|
+
state = "basic";
|
|
264
|
+
else if (ch === "'")
|
|
265
|
+
state = "literal";
|
|
266
|
+
else if (ch === "[" || ch === "{")
|
|
267
|
+
depth++;
|
|
268
|
+
else if (ch === "]" || ch === "}")
|
|
269
|
+
depth--;
|
|
270
|
+
if (ch !== " " && ch !== "\t")
|
|
271
|
+
lastValueEnd = c + 1;
|
|
272
|
+
}
|
|
273
|
+
else if (state === "basic" || state === "ml-basic") {
|
|
274
|
+
if (ch === "\\") {
|
|
275
|
+
c++;
|
|
276
|
+
}
|
|
277
|
+
else if (state === "basic" && ch === '"') {
|
|
278
|
+
state = "normal";
|
|
279
|
+
}
|
|
280
|
+
else if (state === "ml-basic" && text.startsWith('"""', c)) {
|
|
281
|
+
state = "normal";
|
|
282
|
+
c += 2;
|
|
283
|
+
}
|
|
284
|
+
lastValueEnd = c + 1;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
if (state === "literal" && ch === "'")
|
|
288
|
+
state = "normal";
|
|
289
|
+
else if (state === "ml-literal" && text.startsWith("'''", c)) {
|
|
290
|
+
state = "normal";
|
|
291
|
+
c += 2;
|
|
292
|
+
}
|
|
293
|
+
lastValueEnd = c + 1;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// A single-line string cannot run past its line; treat it as closed.
|
|
297
|
+
if (state === "basic" || state === "literal")
|
|
298
|
+
state = "normal";
|
|
299
|
+
if (state === "normal" && depth <= 0)
|
|
300
|
+
return { line: l, col: lastValueEnd };
|
|
301
|
+
}
|
|
302
|
+
return { line: lines.length - 1, col: lines[lines.length - 1].length };
|
|
303
|
+
}
|
|
304
|
+
function replaceValue(edits, kv, rendered) {
|
|
305
|
+
if (kv.value === rendered)
|
|
306
|
+
return;
|
|
307
|
+
// Same strings spelled differently (a multi-line array, literal quotes):
|
|
308
|
+
// nothing to change, so the user's formatting stays.
|
|
309
|
+
const current = parseStrings(kv.value);
|
|
310
|
+
const next = parseStrings(rendered);
|
|
311
|
+
if (current && next && current.kind === next.kind && sameStrings(current.values, next.values))
|
|
312
|
+
return;
|
|
313
|
+
edits.push({ start: kv.line, end: kv.endLine, lines: [`${kv.prefix}${rendered}${kv.trailing}`] });
|
|
314
|
+
}
|
|
315
|
+
function applyEdits(lines, edits) {
|
|
316
|
+
const out = [...lines];
|
|
317
|
+
// Bottom-up so earlier line numbers stay valid; an insert at the same line
|
|
318
|
+
// as a replacement lands after it.
|
|
319
|
+
const ordered = [...edits].sort((a, b) => b.start - a.start || b.end - a.end);
|
|
320
|
+
for (const edit of ordered) {
|
|
321
|
+
out.splice(edit.start, Math.max(0, edit.end - edit.start + 1), ...edit.lines);
|
|
322
|
+
}
|
|
323
|
+
return out;
|
|
324
|
+
}
|
|
325
|
+
function appendBlock(body, eol, block) {
|
|
326
|
+
if (body.trim() === "")
|
|
327
|
+
return block;
|
|
328
|
+
let out = body.endsWith("\n") ? body : body + eol;
|
|
329
|
+
const lines = out.split(/\r?\n/);
|
|
330
|
+
const lastContent = lines.length >= 2 ? lines[lines.length - 2] : "";
|
|
331
|
+
if (lastContent.trim() !== "")
|
|
332
|
+
out += eol;
|
|
333
|
+
return out + block;
|
|
334
|
+
}
|
|
335
|
+
/** `{ A = "1", B = "2" }` with this run's keys set in place and removals dropped. */
|
|
336
|
+
function mergeInlineTable(raw, entry, label) {
|
|
337
|
+
const inner = raw.trim();
|
|
338
|
+
if (!inner.startsWith("{") || !inner.endsWith("}")) {
|
|
339
|
+
throw refuse(label, "has an env value that is not a table");
|
|
340
|
+
}
|
|
341
|
+
const pairs = splitTopLevel(inner.slice(1, -1));
|
|
342
|
+
const kept = [];
|
|
343
|
+
const seen = new Set();
|
|
344
|
+
for (const pair of pairs) {
|
|
345
|
+
const key = parseKeyPath(pair, 0);
|
|
346
|
+
if (!key)
|
|
347
|
+
throw refuse(label, "has an env table this editor cannot read");
|
|
348
|
+
const name = key.path.length === 1 ? key.path[0] : undefined;
|
|
349
|
+
if (name !== undefined && name in entry.env) {
|
|
350
|
+
kept.push(`${pair.slice(0, skipSpaces(pair, skipSpaces(pair, key.end) + 1))}${renderString(entry.env[name])}`);
|
|
351
|
+
seen.add(name);
|
|
352
|
+
}
|
|
353
|
+
else if (name !== undefined && entry.removeEnv.includes(name)) {
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
kept.push(pair);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
for (const [key, value] of Object.entries(entry.env)) {
|
|
361
|
+
if (!seen.has(key))
|
|
362
|
+
kept.push(`${renderKey(key)} = ${renderString(value)}`);
|
|
363
|
+
}
|
|
364
|
+
return kept.length === 0 ? "{}" : `{ ${kept.join(", ")} }`;
|
|
365
|
+
}
|
|
366
|
+
/** Split `a = 1, b = [2, 3]` on commas outside strings and brackets; trimmed, empties dropped. */
|
|
367
|
+
function splitTopLevel(text) {
|
|
368
|
+
const parts = [];
|
|
369
|
+
let depth = 0;
|
|
370
|
+
let quote = null;
|
|
371
|
+
let start = 0;
|
|
372
|
+
for (let i = 0; i < text.length; i++) {
|
|
373
|
+
const ch = text[i];
|
|
374
|
+
if (quote) {
|
|
375
|
+
if (quote === '"' && ch === "\\")
|
|
376
|
+
i++;
|
|
377
|
+
else if (ch === quote)
|
|
378
|
+
quote = null;
|
|
379
|
+
}
|
|
380
|
+
else if (ch === '"' || ch === "'")
|
|
381
|
+
quote = ch;
|
|
382
|
+
else if (ch === "[" || ch === "{")
|
|
383
|
+
depth++;
|
|
384
|
+
else if (ch === "]" || ch === "}")
|
|
385
|
+
depth--;
|
|
386
|
+
else if (ch === "," && depth === 0) {
|
|
387
|
+
parts.push(text.slice(start, i));
|
|
388
|
+
start = i + 1;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
parts.push(text.slice(start));
|
|
392
|
+
return parts.map((p) => p.trim()).filter((p) => p.length > 0);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* A string or an array of strings, read back from raw TOML; `null` for any
|
|
396
|
+
* other value. Only used to decide that a value is already what we would write.
|
|
397
|
+
*/
|
|
398
|
+
function parseStrings(raw) {
|
|
399
|
+
const text = raw.trim();
|
|
400
|
+
const readString = (pos) => {
|
|
401
|
+
const quote = text[pos];
|
|
402
|
+
if (quote === "'") {
|
|
403
|
+
const close = text.indexOf("'", pos + 1);
|
|
404
|
+
return close < 0 ? null : { value: text.slice(pos + 1, close), end: close + 1 };
|
|
405
|
+
}
|
|
406
|
+
if (quote !== '"')
|
|
407
|
+
return null;
|
|
408
|
+
let value = "";
|
|
409
|
+
for (let i = pos + 1; i < text.length; i++) {
|
|
410
|
+
const ch = text[i];
|
|
411
|
+
if (ch === '"')
|
|
412
|
+
return { value, end: i + 1 };
|
|
413
|
+
if (ch !== "\\") {
|
|
414
|
+
value += ch;
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
const esc = text[++i];
|
|
418
|
+
const simple = { n: "\n", t: "\t", r: "\r", '"': '"', "\\": "\\" };
|
|
419
|
+
if (esc in simple)
|
|
420
|
+
value += simple[esc];
|
|
421
|
+
else if (esc === "u" || esc === "U") {
|
|
422
|
+
const len = esc === "u" ? 4 : 8;
|
|
423
|
+
value += String.fromCodePoint(parseInt(text.slice(i + 1, i + 1 + len), 16));
|
|
424
|
+
i += len;
|
|
425
|
+
}
|
|
426
|
+
else
|
|
427
|
+
return null;
|
|
428
|
+
}
|
|
429
|
+
return null;
|
|
430
|
+
};
|
|
431
|
+
if (!text.startsWith("[")) {
|
|
432
|
+
const single = readString(0);
|
|
433
|
+
return single && single.end === text.length ? { kind: "string", values: [single.value] } : null;
|
|
434
|
+
}
|
|
435
|
+
const values = [];
|
|
436
|
+
let pos = 1;
|
|
437
|
+
for (;;) {
|
|
438
|
+
while (pos < text.length && /[\s,]/.test(text[pos]))
|
|
439
|
+
pos++;
|
|
440
|
+
if (text[pos] === "#") {
|
|
441
|
+
while (pos < text.length && text[pos] !== "\n")
|
|
442
|
+
pos++;
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
if (text[pos] === "]")
|
|
446
|
+
return pos === text.length - 1 ? { kind: "array", values } : null;
|
|
447
|
+
const item = readString(pos);
|
|
448
|
+
if (!item)
|
|
449
|
+
return null;
|
|
450
|
+
values.push(item.value);
|
|
451
|
+
pos = item.end;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
function sameStrings(a, b) {
|
|
455
|
+
return a.length === b.length && a.every((value, i) => value === b[i]);
|
|
456
|
+
}
|
|
457
|
+
// ---------------------------------------------------------------------------
|
|
458
|
+
// Rendering
|
|
459
|
+
// ---------------------------------------------------------------------------
|
|
460
|
+
function envLines(env) {
|
|
461
|
+
return Object.entries(env).map(([key, value]) => `${renderKey(key)} = ${renderString(value)}`);
|
|
462
|
+
}
|
|
463
|
+
function renderKey(key) {
|
|
464
|
+
return /^[A-Za-z0-9_-]+$/.test(key) ? key : renderString(key);
|
|
465
|
+
}
|
|
466
|
+
function renderKeyPath(path) {
|
|
467
|
+
return path.map(renderKey).join(".");
|
|
468
|
+
}
|
|
469
|
+
function renderStringArray(values) {
|
|
470
|
+
return `[${values.map(renderString).join(", ")}]`;
|
|
471
|
+
}
|
|
472
|
+
/** TOML basic string. */
|
|
473
|
+
export function renderString(value) {
|
|
474
|
+
let out = '"';
|
|
475
|
+
for (const ch of value) {
|
|
476
|
+
const code = ch.codePointAt(0);
|
|
477
|
+
if (ch === "\\")
|
|
478
|
+
out += "\\\\";
|
|
479
|
+
else if (ch === '"')
|
|
480
|
+
out += '\\"';
|
|
481
|
+
else if (ch === "\n")
|
|
482
|
+
out += "\\n";
|
|
483
|
+
else if (ch === "\r")
|
|
484
|
+
out += "\\r";
|
|
485
|
+
else if (ch === "\t")
|
|
486
|
+
out += "\\t";
|
|
487
|
+
else if (code < 0x20 || code === 0x7f)
|
|
488
|
+
out += `\\u${code.toString(16).padStart(4, "0")}`;
|
|
489
|
+
else
|
|
490
|
+
out += ch;
|
|
491
|
+
}
|
|
492
|
+
return out + '"';
|
|
493
|
+
}
|
|
494
|
+
// ---------------------------------------------------------------------------
|
|
495
|
+
// Helpers
|
|
496
|
+
// ---------------------------------------------------------------------------
|
|
497
|
+
function kvsIn(items, table) {
|
|
498
|
+
return items.filter((i) => i.kind === "kv" && samePath(i.table, table));
|
|
499
|
+
}
|
|
500
|
+
function samePath(a, b) {
|
|
501
|
+
return a.length === b.length && a.every((segment, i) => segment === b[i]);
|
|
502
|
+
}
|
|
503
|
+
function startsWith(path, prefix) {
|
|
504
|
+
return path.length >= prefix.length && prefix.every((segment, i) => path[i] === segment);
|
|
505
|
+
}
|
|
506
|
+
function skipSpaces(text, pos) {
|
|
507
|
+
while (pos < text.length && (text[pos] === " " || text[pos] === "\t"))
|
|
508
|
+
pos++;
|
|
509
|
+
return pos;
|
|
510
|
+
}
|
|
511
|
+
function refuse(label, why) {
|
|
512
|
+
return new CodexTomlError("unsupported_codex_config", `${label} ${why}; setup only edits the plain table form and leaves this file unchanged.`);
|
|
513
|
+
}
|
|
514
|
+
//# sourceMappingURL=codex-toml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-toml.js","sourceRoot":"","sources":["../../src/setup/codex-toml.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,6 @@ export interface PortableClientSupport {
|
|
|
17
17
|
* table; a unit test keeps every setup-writer client present here.
|
|
18
18
|
*/
|
|
19
19
|
export declare const PORTABLE_CLIENT_MATRIX: readonly PortableClientSupport[];
|
|
20
|
-
export declare function catalogIdForSetupClient(setupClient: string): string;
|
|
21
20
|
export declare function portableSupportFor(catalogId: string): PortableClientSupport | undefined;
|
|
22
21
|
export interface PortableTargetOptions {
|
|
23
22
|
layout: ProjectLayout;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// client to spawn the server with cwd = workspace root.
|
|
16
16
|
// wrapper a committed shell script resolves the path from its own
|
|
17
17
|
// location and execs the server. For clients that support
|
|
18
|
-
// neither of the above (Codex
|
|
18
|
+
// neither of the above (Codex).
|
|
19
19
|
// absolute global/user-level config outside any workspace (Claude
|
|
20
20
|
// Desktop, Cline, Antigravity): no portable form exists.
|
|
21
21
|
import { readFileSync } from "node:fs";
|
|
@@ -126,9 +126,9 @@ export const PORTABLE_CLIENT_MATRIX = [
|
|
|
126
126
|
{
|
|
127
127
|
id: "zcode",
|
|
128
128
|
label: "ZCode",
|
|
129
|
-
configPath: ".zcode/
|
|
130
|
-
strategy: "
|
|
131
|
-
note: "
|
|
129
|
+
configPath: ".zcode/config.json",
|
|
130
|
+
strategy: "args",
|
|
131
|
+
note: "Workspace config; stdio servers start in the session's working directory, and config files expand no ${...} templates.",
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
134
|
id: "claude-desktop",
|
|
@@ -152,16 +152,6 @@ export const PORTABLE_CLIENT_MATRIX = [
|
|
|
152
152
|
note: "Global MCP config — absolute path only.",
|
|
153
153
|
},
|
|
154
154
|
];
|
|
155
|
-
/** `setup --client <id>` → catalog id. */
|
|
156
|
-
const SETUP_CLIENT_TO_CATALOG = {
|
|
157
|
-
cursor: "cursor",
|
|
158
|
-
claude: "claude-code",
|
|
159
|
-
opencode: "opencode",
|
|
160
|
-
agents: "agents",
|
|
161
|
-
};
|
|
162
|
-
export function catalogIdForSetupClient(setupClient) {
|
|
163
|
-
return SETUP_CLIENT_TO_CATALOG[setupClient] ?? setupClient;
|
|
164
|
-
}
|
|
165
155
|
export function portableSupportFor(catalogId) {
|
|
166
156
|
return PORTABLE_CLIENT_MATRIX.find((client) => client.id === catalogId);
|
|
167
157
|
}
|
|
@@ -241,7 +231,9 @@ export function resolveWrapperTemplatePath() {
|
|
|
241
231
|
throw new Error("The packaged MCP wrapper template could not be located. Reinstall unity-open-mcp and retry.");
|
|
242
232
|
}
|
|
243
233
|
function readWrapperTemplate() {
|
|
244
|
-
|
|
234
|
+
// A CRLF checkout (Windows, core.autocrlf) must not leak into a bash
|
|
235
|
+
// script: bash rejects `set -euo pipefail\r`.
|
|
236
|
+
return readFileSync(resolveWrapperTemplatePath(), "utf8").replace(/\r\n/g, "\n");
|
|
245
237
|
}
|
|
246
238
|
function toPosix(relative) {
|
|
247
239
|
return relative.split("\\").join("/");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portable-config.js","sourceRoot":"","sources":["../../src/setup/portable-config.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,uCAAuC;AACvC,EAAE;AACF,2CAA2C;AAC3C,EAAE;AACF,6EAA6E;AAC7E,wFAAwF;AACxF,uEAAuE;AACvE,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"portable-config.js","sourceRoot":"","sources":["../../src/setup/portable-config.ts"],"names":[],"mappings":"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"}
|
package/dist/skill/SKILL.md
CHANGED
|
@@ -13,6 +13,7 @@ Use exact schemas, scoped mutations, and gate evidence to work on the selected U
|
|
|
13
13
|
3. Confirm the target project and live state with `ping` / `bridge_status`; use the instance lock’s port, never a hardcoded port. Offline reads and `read_compile_errors` do not require a live bridge.
|
|
14
14
|
4. Prefer typed tools. Use canonical `asset_path`, `game_object_path`, `component_type`, and `property_path` from the exact schema. Start compact and page reads; expand only the relevant slice.
|
|
15
15
|
5. Scope mutations with nonempty `paths_hint`, then inspect `gate.delta` and `agentNextSteps`. Mutation success does not prove project safety. Validate and test the affected scope.
|
|
16
|
+
6. After a lost response, socket reset, or timeout, inspect post-state before retrying a mutation, even if the bridge restarted. If `delta` returns `validation_incomplete`, resolve `error.rulesFailed` and create a fresh checkpoint. Copy scan `issueId` unchanged into `apply_fix.issue_id`; use `profile: "full"` to retrieve issues.
|
|
16
17
|
|
|
17
18
|
## Non-negotiable safety
|
|
18
19
|
|
|
@@ -20,6 +21,7 @@ Use exact schemas, scoped mutations, and gate evidence to work on the selected U
|
|
|
20
21
|
- Never silently discard dirty scenes or bypass lifecycle guards. Pure `read_only` snippets must not write, refresh, compile, switch scenes, or change play state; this flag is an assertion, not a sandbox.
|
|
21
22
|
- While the Editor is reachable, prefer typed live edits. Never directly edit an open/dirty scene or asset YAML. Explicitly identify necessary file repair as the offline-file route; preserve GUID/fileID links, check the intended scene, then reimport/reserialize and run scoped validation.
|
|
22
23
|
- Run one test request at a time. `run_id` names the started run, not a poll handle. Do not retry an unresolved run or put server-polled tests/recovery tools in a live batch.
|
|
24
|
+
- If a top-level fix reports `rollback_unavailable` because backup failed, repair temporary-directory space or file permissions before retrying; do not bypass the refusal.
|
|
23
25
|
- Batch arguments are validated before step zero. All-read batches need no mutation scope; mixed batches require aggregate scope. A failed mutation with a skipped gate has not passed validation.
|
|
24
26
|
|
|
25
27
|
## Load only the reference needed now
|