@thantos66/claude-context-mcp 0.1.1 → 0.3.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.
Files changed (41) hide show
  1. package/README.md +12 -1
  2. package/dist/index.js +12 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/proxy.d.ts +5 -0
  5. package/dist/proxy.js +208 -0
  6. package/dist/proxy.js.map +1 -0
  7. package/dist/services/agents.d.ts +7 -1
  8. package/dist/services/agents.js +6 -4
  9. package/dist/services/agents.js.map +1 -1
  10. package/dist/services/hooks.d.ts +29 -0
  11. package/dist/services/hooks.js +68 -0
  12. package/dist/services/hooks.js.map +1 -0
  13. package/dist/services/mcp-config.d.ts +6 -0
  14. package/dist/services/mcp-config.js +10 -9
  15. package/dist/services/mcp-config.js.map +1 -1
  16. package/dist/services/paths.d.ts +12 -4
  17. package/dist/services/paths.js +8 -8
  18. package/dist/services/paths.js.map +1 -1
  19. package/dist/services/permissions.d.ts +9 -1
  20. package/dist/services/permissions.js +9 -9
  21. package/dist/services/permissions.js.map +1 -1
  22. package/dist/services/skills.d.ts +8 -1
  23. package/dist/services/skills.js +7 -4
  24. package/dist/services/skills.js.map +1 -1
  25. package/dist/tools/agents.js +53 -1
  26. package/dist/tools/agents.js.map +1 -1
  27. package/dist/tools/export.d.ts +2 -0
  28. package/dist/tools/export.js +64 -0
  29. package/dist/tools/export.js.map +1 -0
  30. package/dist/tools/hooks.d.ts +2 -0
  31. package/dist/tools/hooks.js +51 -0
  32. package/dist/tools/hooks.js.map +1 -0
  33. package/dist/tools/mcp.js +168 -2
  34. package/dist/tools/mcp.js.map +1 -1
  35. package/dist/tools/meta.js +416 -2
  36. package/dist/tools/meta.js.map +1 -1
  37. package/dist/tools/permissions.js +8 -1
  38. package/dist/tools/permissions.js.map +1 -1
  39. package/dist/tools/skills.js +51 -1
  40. package/dist/tools/skills.js.map +1 -1
  41. package/package.json +1 -1
@@ -1,9 +1,13 @@
1
1
  import { z } from "zod";
2
2
  import fs from "node:fs/promises";
3
+ import { spawn } from "node:child_process";
3
4
  import { allPlatformPaths } from "../services/paths.js";
4
- import { loadMcpConfig } from "../services/mcp-config.js";
5
+ import { loadMcpConfig, listServers } from "../services/mcp-config.js";
5
6
  import { loadSettings } from "../services/permissions.js";
6
7
  import { backupFile } from "../services/backup.js";
8
+ import { getServer } from "../services/mcp-config.js";
9
+ import { isStdioServer } from "../schemas/mcp-config.js";
10
+ import { schemaHasUnion } from "../proxy.js";
7
11
  import { handle, okResponse } from "./helpers.js";
8
12
  export function registerMetaTools(server) {
9
13
  // ------------------------------------------------------------------
@@ -15,6 +19,7 @@ export function registerMetaTools(server) {
15
19
  "current OS, for each scope (and an optional project path).",
16
20
  inputSchema: {
17
21
  projectPath: z.string().optional(),
22
+ allowOutsideHome: z.boolean().optional().describe("Allow projectPath outside $HOME (for cloud environments)."),
18
23
  },
19
24
  annotations: {
20
25
  readOnlyHint: true,
@@ -22,7 +27,7 @@ export function registerMetaTools(server) {
22
27
  idempotentHint: true,
23
28
  openWorldHint: false,
24
29
  },
25
- }, async ({ projectPath }) => {
30
+ }, async ({ projectPath, allowOutsideHome: _allowOutsideHome }) => {
26
31
  const paths = allPlatformPaths(projectPath);
27
32
  return okResponse(JSON.stringify(paths, null, 2), paths);
28
33
  });
@@ -75,5 +80,414 @@ export function registerMetaTools(server) {
75
80
  }, (result) => result.backup
76
81
  ? okResponse(`backed up ${result.filePath} -> ${result.backup}`, result)
77
82
  : okResponse(`no-op: ${result.filePath} did not exist`, result)));
83
+ // ------------------------------------------------------------------
84
+ // meta_check_server_health
85
+ // ------------------------------------------------------------------
86
+ server.registerTool("meta_check_server_health", {
87
+ title: "Check if an MCP server can start",
88
+ description: "Spawn a stdio MCP server, send an initialize request, and check " +
89
+ "if it responds within a timeout. Reports: ok, failed, or timeout. " +
90
+ "Provide either (scope + name) to look up the config, or (command + args) directly.",
91
+ inputSchema: {
92
+ scope: z.enum(["desktop", "user", "project"]).optional(),
93
+ name: z.string().optional().describe("Server name to look up in config."),
94
+ command: z.string().optional().describe("Command to spawn directly (alternative to scope+name)."),
95
+ args: z.array(z.string()).optional(),
96
+ projectPath: z.string().optional(),
97
+ allowOutsideHome: z.boolean().optional().describe("Allow projectPath outside $HOME (for cloud environments)."),
98
+ timeoutMs: z.number().optional().describe("Timeout in ms (default 10000)."),
99
+ validateSchemas: z.boolean().optional().describe("Also send tools/list and check for oneOf/anyOf/allOf."),
100
+ checkAll: z.boolean().optional().describe("Check all servers in the given scope. Ignores name/command."),
101
+ },
102
+ annotations: {
103
+ readOnlyHint: true,
104
+ destructiveHint: false,
105
+ idempotentHint: true,
106
+ openWorldHint: true,
107
+ },
108
+ }, async (input) => handle(async () => {
109
+ // Batch mode: check all servers in scope
110
+ if (input.checkAll) {
111
+ const scopes = input.scope ? [input.scope] : ["desktop", "user", "project"];
112
+ const results = [];
113
+ for (const s of scopes) {
114
+ try {
115
+ const servers = await listServers(s, { projectPath: input.projectPath });
116
+ for (const srv of servers) {
117
+ if (!isStdioServer(srv.entry)) {
118
+ results.push({ name: srv.name, scope: s, status: "skip", message: "HTTP server" });
119
+ continue;
120
+ }
121
+ const r = await checkServerHealth(srv.entry.command, srv.entry.args ?? [], srv.entry.env, input.timeoutMs ?? 10000, input.validateSchemas);
122
+ results.push({ name: srv.name, scope: s, ...r });
123
+ }
124
+ }
125
+ catch {
126
+ continue;
127
+ }
128
+ }
129
+ return { status: "batch", servers: results, total: results.length };
130
+ }
131
+ let cmd;
132
+ let cmdArgs = [];
133
+ let env;
134
+ if (input.command) {
135
+ cmd = input.command;
136
+ cmdArgs = input.args ?? [];
137
+ }
138
+ else if (input.scope && input.name) {
139
+ const entry = await getServer({
140
+ scope: input.scope,
141
+ name: input.name,
142
+ projectPath: input.projectPath,
143
+ revealSecrets: true,
144
+ allowOutsideHome: input.allowOutsideHome,
145
+ });
146
+ if (!entry) {
147
+ return { status: "not_found", message: `Server "${input.name}" not found in ${input.scope} scope.` };
148
+ }
149
+ if (!isStdioServer(entry.entry)) {
150
+ return { status: "skip", message: `Server "${input.name}" is HTTP-based, not stdio.` };
151
+ }
152
+ cmd = entry.entry.command;
153
+ cmdArgs = entry.entry.args ?? [];
154
+ env = entry.entry.env;
155
+ }
156
+ else {
157
+ throw new Error("Provide either (scope + name) or (command + args).");
158
+ }
159
+ const timeout = input.timeoutMs ?? 10000;
160
+ return await checkServerHealth(cmd, cmdArgs, env, timeout, input.validateSchemas);
161
+ }, (result) => okResponse(`status: ${result.status}\n${result.message ?? ""}`, result)));
162
+ // ------------------------------------------------------------------
163
+ // meta_env_template
164
+ // ------------------------------------------------------------------
165
+ server.registerTool("meta_env_template", {
166
+ title: "Manage a secrets env template",
167
+ description: "Create, read, or validate a secrets .env file. When action=create, " +
168
+ "writes a template with placeholder comments (chmod 600). When " +
169
+ "action=validate, checks that all keys have non-empty, non-placeholder values.",
170
+ inputSchema: {
171
+ action: z.enum(["create", "read", "validate"]),
172
+ filePath: z.string().describe("Absolute path to the .env file."),
173
+ entries: z
174
+ .array(z.object({
175
+ key: z.string(),
176
+ comment: z.string().optional(),
177
+ }))
178
+ .optional()
179
+ .describe("Key definitions for create action. Each entry becomes KEY= with optional # comment."),
180
+ header: z.string().optional().describe("Header comment block for create action."),
181
+ },
182
+ annotations: {
183
+ readOnlyHint: false,
184
+ destructiveHint: false,
185
+ idempotentHint: true,
186
+ openWorldHint: false,
187
+ },
188
+ }, async (input) => handle(async () => {
189
+ if (input.action === "create") {
190
+ const lines = [];
191
+ if (input.header) {
192
+ for (const line of input.header.split("\n")) {
193
+ lines.push(`# ${line}`);
194
+ }
195
+ lines.push("");
196
+ }
197
+ for (const entry of input.entries ?? []) {
198
+ if (entry.comment) {
199
+ lines.push(`# ${entry.comment}`);
200
+ }
201
+ lines.push(`${entry.key}=`);
202
+ }
203
+ lines.push(""); // trailing newline
204
+ const content = lines.join("\n");
205
+ await fs.writeFile(input.filePath, content, { mode: 0o600 });
206
+ return {
207
+ action: "create",
208
+ filePath: input.filePath,
209
+ keys: (input.entries ?? []).map((e) => e.key),
210
+ message: `Created template at ${input.filePath} (chmod 600) with ${(input.entries ?? []).length} key(s).`,
211
+ };
212
+ }
213
+ if (input.action === "read") {
214
+ let content;
215
+ try {
216
+ content = await fs.readFile(input.filePath, "utf8");
217
+ }
218
+ catch (err) {
219
+ if (err.code === "ENOENT") {
220
+ return { action: "read", filePath: input.filePath, exists: false, message: "File does not exist." };
221
+ }
222
+ throw err;
223
+ }
224
+ const parsed = parseEnvFile(content);
225
+ return { action: "read", filePath: input.filePath, exists: true, keys: parsed };
226
+ }
227
+ // validate
228
+ let content;
229
+ try {
230
+ content = await fs.readFile(input.filePath, "utf8");
231
+ }
232
+ catch (err) {
233
+ if (err.code === "ENOENT") {
234
+ return { action: "validate", filePath: input.filePath, valid: false, message: "File does not exist." };
235
+ }
236
+ throw err;
237
+ }
238
+ const parsed = parseEnvFile(content);
239
+ const issues = [];
240
+ for (const { key, value } of parsed) {
241
+ if (!value || value.trim() === "") {
242
+ issues.push(`${key}: empty`);
243
+ }
244
+ else if (/^<YOUR_.*>$/i.test(value.trim())) {
245
+ issues.push(`${key}: placeholder value`);
246
+ }
247
+ }
248
+ return {
249
+ action: "validate",
250
+ filePath: input.filePath,
251
+ valid: issues.length === 0,
252
+ total: parsed.length,
253
+ filled: parsed.length - issues.length,
254
+ issues,
255
+ message: issues.length === 0
256
+ ? `All ${parsed.length} key(s) are filled.`
257
+ : `${issues.length} of ${parsed.length} key(s) need attention: ${issues.join(", ")}`,
258
+ };
259
+ }, (result) => okResponse(result.message ?? JSON.stringify(result), result)));
260
+ // ------------------------------------------------------------------
261
+ // meta_apply_template
262
+ // ------------------------------------------------------------------
263
+ server.registerTool("meta_apply_template", {
264
+ title: "Apply template with secrets",
265
+ description: "Read a template file, substitute ${VAR_NAME} placeholders from a .env file, " +
266
+ "and write the output. Useful for generating .mcp.json from a committed template + secrets.",
267
+ inputSchema: {
268
+ templatePath: z.string().describe("Path to template file (e.g., .mcp.json.template)."),
269
+ envPath: z.string().describe("Path to .env file with secret values."),
270
+ outputPath: z.string().optional().describe("Output path. Defaults to templatePath without .template suffix."),
271
+ dryRun: z.boolean().optional(),
272
+ },
273
+ annotations: {
274
+ readOnlyHint: false,
275
+ destructiveHint: false,
276
+ idempotentHint: true,
277
+ openWorldHint: false,
278
+ },
279
+ }, async (args) => handle(async () => {
280
+ const template = await fs.readFile(args.templatePath, "utf8");
281
+ const envContent = await fs.readFile(args.envPath, "utf8");
282
+ const envVars = parseEnvFile(envContent);
283
+ const envMap = new Map(envVars.map((e) => [e.key, e.value]));
284
+ const resolved = [];
285
+ const unresolved = [];
286
+ const output = template.replace(/\$\{([A-Z_][A-Z0-9_]*)\}/g, (_match, name) => {
287
+ const val = envMap.get(name);
288
+ if (val && val.trim()) {
289
+ resolved.push(name);
290
+ return val;
291
+ }
292
+ unresolved.push(name);
293
+ return _match;
294
+ });
295
+ JSON.parse(output); // validate JSON
296
+ const outPath = args.outputPath ?? args.templatePath.replace(/\.template$/, "");
297
+ if (!args.dryRun) {
298
+ await fs.writeFile(outPath, output);
299
+ }
300
+ return { outputPath: outPath, resolved, unresolved, dryRun: args.dryRun ?? false };
301
+ }, (r) => okResponse(`Template applied: ${r.resolved.length} vars resolved, ${r.unresolved.length} unresolved. Output: ${r.outputPath}`, r)));
302
+ // ------------------------------------------------------------------
303
+ // meta_list_server_tools
304
+ // ------------------------------------------------------------------
305
+ server.registerTool("meta_list_server_tools", {
306
+ title: "List tools from an MCP server",
307
+ description: "Spawn a stdio MCP server, send initialize + tools/list, and return " +
308
+ "the tool names and schema health. For debugging which server has bad schemas.",
309
+ inputSchema: {
310
+ scope: z.enum(["desktop", "user", "project"]).optional(),
311
+ name: z.string().optional().describe("Server name to look up in config."),
312
+ command: z.string().optional().describe("Command to spawn directly."),
313
+ args: z.array(z.string()).optional(),
314
+ projectPath: z.string().optional(),
315
+ timeoutMs: z.number().optional().describe("Timeout in ms (default 10000)."),
316
+ },
317
+ annotations: {
318
+ readOnlyHint: true,
319
+ destructiveHint: false,
320
+ idempotentHint: true,
321
+ openWorldHint: true,
322
+ },
323
+ }, async (input) => handle(async () => {
324
+ let cmd;
325
+ let cmdArgs = [];
326
+ let env;
327
+ if (input.command) {
328
+ cmd = input.command;
329
+ cmdArgs = input.args ?? [];
330
+ }
331
+ else if (input.scope && input.name) {
332
+ const entry = await getServer({
333
+ scope: input.scope,
334
+ name: input.name,
335
+ projectPath: input.projectPath,
336
+ revealSecrets: true,
337
+ });
338
+ if (!entry) {
339
+ return { status: "not_found", tools: [], totalTools: 0, problematicTools: 0 };
340
+ }
341
+ if (!isStdioServer(entry.entry)) {
342
+ return { status: "skip", message: "HTTP server", tools: [], totalTools: 0, problematicTools: 0 };
343
+ }
344
+ cmd = entry.entry.command;
345
+ cmdArgs = entry.entry.args ?? [];
346
+ env = entry.entry.env;
347
+ }
348
+ else {
349
+ throw new Error("Provide either (scope + name) or (command + args).");
350
+ }
351
+ return await checkServerHealth(cmd, cmdArgs, env, input.timeoutMs ?? 10000, true);
352
+ }, (r) => okResponse(`status: ${r.status}\n${r.message ?? ""}\n${r.schemaIssues ? `Schema issues: ${JSON.stringify(r.schemaIssues)}` : ""}`, r)));
353
+ }
354
+ // ── Helpers ──────────────────────────────────────────────────────────
355
+ function parseEnvFile(content) {
356
+ const results = [];
357
+ for (const line of content.split("\n")) {
358
+ const trimmed = line.trim();
359
+ if (!trimmed || trimmed.startsWith("#"))
360
+ continue;
361
+ const eqIdx = trimmed.indexOf("=");
362
+ if (eqIdx === -1)
363
+ continue;
364
+ results.push({
365
+ key: trimmed.slice(0, eqIdx),
366
+ value: trimmed.slice(eqIdx + 1),
367
+ });
368
+ }
369
+ return results;
370
+ }
371
+ function checkServerHealth(command, args, env, timeoutMs, validateSchemas) {
372
+ return new Promise((resolve) => {
373
+ const childEnv = env ? { ...process.env, ...env } : process.env;
374
+ let child;
375
+ try {
376
+ child = spawn(command, args, {
377
+ stdio: ["pipe", "pipe", "pipe"],
378
+ env: childEnv,
379
+ });
380
+ }
381
+ catch (err) {
382
+ resolve({
383
+ status: "failed",
384
+ message: `Failed to spawn "${command}": ${err.message}`,
385
+ });
386
+ return;
387
+ }
388
+ let stdout = "";
389
+ let stderr = "";
390
+ let settled = false;
391
+ let phase = "init";
392
+ const timer = setTimeout(() => {
393
+ if (!settled) {
394
+ settled = true;
395
+ child.kill("SIGTERM");
396
+ resolve({
397
+ status: "timeout",
398
+ message: `Server did not respond within ${timeoutMs}ms (phase: ${phase}).`,
399
+ stderr: stderr.slice(0, 500),
400
+ });
401
+ }
402
+ }, timeoutMs);
403
+ function finish(result) {
404
+ if (!settled) {
405
+ settled = true;
406
+ clearTimeout(timer);
407
+ child.kill("SIGTERM");
408
+ resolve(result);
409
+ }
410
+ }
411
+ child.stdout.on("data", (chunk) => {
412
+ stdout += chunk.toString();
413
+ // Try to parse complete JSON-RPC responses (newline-delimited)
414
+ const lines = stdout.split("\n");
415
+ for (const line of lines) {
416
+ if (!line.trim())
417
+ continue;
418
+ let msg;
419
+ try {
420
+ msg = JSON.parse(line);
421
+ }
422
+ catch {
423
+ continue;
424
+ }
425
+ if (phase === "init" && msg.result) {
426
+ if (validateSchemas) {
427
+ // Move to tools/list phase
428
+ phase = "tools";
429
+ stdout = "";
430
+ const toolsRequest = JSON.stringify({ jsonrpc: "2.0", id: 2, method: "tools/list" });
431
+ child.stdin.write(toolsRequest + "\n");
432
+ }
433
+ else {
434
+ finish({ status: "ok", message: "Server responded to initialize." });
435
+ }
436
+ return;
437
+ }
438
+ if (phase === "tools" && msg.result) {
439
+ const result = msg.result;
440
+ if (Array.isArray(result.tools)) {
441
+ const tools = result.tools;
442
+ const schemaIssues = [];
443
+ for (const tool of tools) {
444
+ if (tool.inputSchema && schemaHasUnion(tool.inputSchema)) {
445
+ const keywords = [];
446
+ const schema = tool.inputSchema;
447
+ if (schema.oneOf)
448
+ keywords.push("oneOf");
449
+ if (schema.anyOf)
450
+ keywords.push("anyOf");
451
+ if (schema.allOf)
452
+ keywords.push("allOf");
453
+ schemaIssues.push({ tool: tool.name ?? "unknown", keywords });
454
+ }
455
+ }
456
+ finish({
457
+ status: "ok",
458
+ message: `Server responded. ${tools.length} tools, ${schemaIssues.length} with schema issues.`,
459
+ totalTools: tools.length,
460
+ schemaIssues: schemaIssues.length > 0 ? schemaIssues : undefined,
461
+ });
462
+ }
463
+ else {
464
+ finish({ status: "ok", message: "Server responded but tools/list had no tools array." });
465
+ }
466
+ return;
467
+ }
468
+ }
469
+ });
470
+ child.stderr.on("data", (chunk) => {
471
+ stderr += chunk.toString();
472
+ });
473
+ child.on("error", (err) => {
474
+ finish({ status: "failed", message: `Spawn error: ${err.message}` });
475
+ });
476
+ child.on("exit", (code) => {
477
+ finish({ status: "failed", message: `Server exited with code ${code} before responding.`, stderr: stderr.slice(0, 500) });
478
+ });
479
+ // Send an initialize request
480
+ const initRequest = JSON.stringify({
481
+ jsonrpc: "2.0",
482
+ id: 1,
483
+ method: "initialize",
484
+ params: {
485
+ protocolVersion: "2025-03-26",
486
+ capabilities: {},
487
+ clientInfo: { name: "health-check", version: "1.0" },
488
+ },
489
+ });
490
+ child.stdin.write(initRequest + "\n");
491
+ });
78
492
  }
79
493
  //# sourceMappingURL=meta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,qEAAqE;IACrE,sBAAsB;IACtB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,+DAA+D;YAC/D,4DAA4D;QAC9D,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;SAC/G;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,UAAU,CACf,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9B,KAA2C,CAC5C,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,gBAAgB;IAChB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,qEAAqE;YACrE,uEAAuE;YACvE,yCAAyC;QAC3C,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC3B,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CACT,UAAU,CACR,aAAa,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAC7F,MAA4C,CAC7C,CACJ,CACJ,CAAC;IAEF,qEAAqE;IACrE,mBAAmB;IACnB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,sEAAsE;YACtE,8CAA8C;QAChD,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CACrB,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,MAAM;QACX,CAAC,CAAC,UAAU,CAAC,aAAa,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC;QACxE,CAAC,CAAC,UAAU,CAAC,UAAU,MAAM,CAAC,QAAQ,gBAAgB,EAAE,MAAM,CAAC,CACpE,CACJ,CAAC;IAEF,qEAAqE;IACrE,2BAA2B;IAC3B,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,kEAAkE;YAClE,oEAAoE;YACpE,oFAAoF;QACtF,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;YACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACzE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;YACjG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;YAC9G,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC3E,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YACzG,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;SACzG;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,yCAAyC;QACzC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;YACrF,MAAM,OAAO,GAAmC,EAAE,CAAC;YACnD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;oBACzE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;wBAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;4BACnF,SAAS;wBACX,CAAC;wBACD,MAAM,CAAC,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;wBAC3I,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBAAC,SAAS;gBAAC,CAAC;YACvB,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,GAAW,CAAC;QAChB,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,GAAuC,CAAC;QAE5C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;YACpB,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,IAAI;gBACnB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;aACzC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,KAAK,CAAC,IAAI,kBAAkB,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YACvG,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAK,CAAC,IAAI,6BAA6B,EAAE,CAAC;YACzF,CAAC;YACD,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAC1B,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YACjC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;QACzC,OAAO,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACpF,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CACT,UAAU,CACR,WAAW,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,EACnD,MAA4C,CAC7C,CACJ,CACJ,CAAC;IAEF,qEAAqE;IACrE,oBAAoB;IACpB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,qEAAqE;YACrE,gEAAgE;YAChE,+EAA+E;QACjF,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAChE,OAAO,EAAE,CAAC;iBACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;gBACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC/B,CAAC,CACH;iBACA,QAAQ,EAAE;iBACV,QAAQ,CAAC,qFAAqF,CAAC;YAClG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SAClF;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC1B,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBACxC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;YACnC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC7C,OAAO,EAAE,uBAAuB,KAAK,CAAC,QAAQ,qBAAqB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,UAAU;aAC1G,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5B,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;gBACtG,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAClF,CAAC;QAED,WAAW;QACX,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;YACzG,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YACrC,MAAM;YACN,OAAO,EACL,MAAM,CAAC,MAAM,KAAK,CAAC;gBACjB,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,qBAAqB;gBAC3C,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,2BAA2B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACzF,CAAC;IACJ,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CACT,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAA4C,CAAC,CACrG,CACJ,CAAC;IAEF,qEAAqE;IACrE,sBAAsB;IACtB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,8EAA8E;YAC9E,4FAA4F;QAC9F,WAAW,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YACtF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACrE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;YAC7G,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAC/B;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;YACpF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,OAAO,GAAG,CAAC;YACb,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;IACrF,CAAC,EACD,CAAC,CAAC,EAAE,EAAE,CACJ,UAAU,CACR,qBAAqB,CAAC,CAAC,QAAQ,CAAC,MAAM,mBAAmB,CAAC,CAAC,UAAU,CAAC,MAAM,wBAAwB,CAAC,CAAC,UAAU,EAAE,EAClH,CAAuC,CACxC,CACJ,CACJ,CAAC;IAEF,qEAAqE;IACrE,yBAAyB;IACzB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,qEAAqE;YACrE,+EAA+E;QACjF,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;YACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACzE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACrE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SAC5E;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CACd,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,IAAI,GAAW,CAAC;QAChB,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,GAAuC,CAAC;QAE5C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;YACpB,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;YACnG,CAAC;YACD,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAC1B,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YACjC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACpF,CAAC,EACD,CAAC,CAAC,EAAE,EAAE,CACJ,UAAU,CACR,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACtH,CAAuC,CACxC,CACJ,CACJ,CAAC;AACJ,CAAC;AAED,wEAAwE;AAExE,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,OAAO,GAA0C,EAAE,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CACxB,OAAe,EACf,IAAc,EACd,GAAuC,EACvC,SAAiB,EACjB,eAAyB;IAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAEhE,IAAI,KAA+B,CAAC;QACpC,IAAI,CAAC;YACH,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;gBAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,GAAG,EAAE,QAAQ;aACd,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC;gBACN,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,oBAAoB,OAAO,MAAO,GAAa,CAAC,OAAO,EAAE;aACnE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,GAAqB,MAAM,CAAC;QAErC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO,CAAC;oBACN,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,iCAAiC,SAAS,cAAc,KAAK,IAAI;oBAC1E,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,SAAS,MAAM,CAAC,MAA+B;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAE3B,+DAA+D;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAC3B,IAAI,GAA4B,CAAC;gBACjC,IAAI,CAAC;oBAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAEnD,IAAI,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACnC,IAAI,eAAe,EAAE,CAAC;wBACpB,2BAA2B;wBAC3B,KAAK,GAAG,OAAO,CAAC;wBAChB,MAAM,GAAG,EAAE,CAAC;wBACZ,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;wBACrF,KAAK,CAAC,KAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;oBAC1C,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;oBACvE,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,IAAI,KAAK,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAiC,CAAC;oBACrD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAuC,CAAC;wBAC7D,MAAM,YAAY,GAAgD,EAAE,CAAC;wBACrE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,IAAI,IAAI,CAAC,WAAW,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gCACzD,MAAM,QAAQ,GAAa,EAAE,CAAC;gCAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAsC,CAAC;gCAC3D,IAAI,MAAM,CAAC,KAAK;oCAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACzC,IAAI,MAAM,CAAC,KAAK;oCAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACzC,IAAI,MAAM,CAAC,KAAK;oCAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCACzC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAG,IAAI,CAAC,IAAe,IAAI,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;4BAC5E,CAAC;wBACH,CAAC;wBACD,MAAM,CAAC;4BACL,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,qBAAqB,KAAK,CAAC,MAAM,WAAW,YAAY,CAAC,MAAM,sBAAsB;4BAC9F,UAAU,EAAE,KAAK,CAAC,MAAM;4BACxB,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;yBACjE,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qDAAqD,EAAE,CAAC,CAAC;oBAC3F,CAAC;oBACD,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,IAAI,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE;aACrD;SACF,CAAC,CAAC;QACH,KAAK,CAAC,KAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -9,6 +9,10 @@ const ProjectPathField = {
9
9
  .string()
10
10
  .optional()
11
11
  .describe("Absolute path to the project. Required when scope=project."),
12
+ allowOutsideHome: z
13
+ .boolean()
14
+ .optional()
15
+ .describe("Allow projectPath outside $HOME (for cloud environments)."),
12
16
  };
13
17
  const DryRunField = {
14
18
  dryRun: z
@@ -33,7 +37,7 @@ export function registerPermissionsTools(server) {
33
37
  idempotentHint: true,
34
38
  openWorldHint: false,
35
39
  },
36
- }, async ({ scope, projectPath }) => handle(() => listPermissions(scope, projectPath), (result) => {
40
+ }, async ({ scope, projectPath, allowOutsideHome }) => handle(() => listPermissions(scope, projectPath, { allowOutsideHome }), (result) => {
37
41
  const p = result.permissions;
38
42
  const text = [
39
43
  `path: ${result.path}`,
@@ -71,6 +75,7 @@ export function registerPermissionsTools(server) {
71
75
  rules: args.rules,
72
76
  projectPath: args.projectPath,
73
77
  dryRun: args.dryRun,
78
+ allowOutsideHome: args.allowOutsideHome,
74
79
  }), (result) => {
75
80
  const head = formatWriteResult(result, `add ${args.list} rules to`, false);
76
81
  const detail = [
@@ -104,6 +109,7 @@ export function registerPermissionsTools(server) {
104
109
  rule: args.rule,
105
110
  projectPath: args.projectPath,
106
111
  dryRun: args.dryRun,
112
+ allowOutsideHome: args.allowOutsideHome,
107
113
  }), (result) => {
108
114
  const verb = result.removed
109
115
  ? `remove ${args.list} rule ${JSON.stringify(args.rule)} from`
@@ -134,6 +140,7 @@ export function registerPermissionsTools(server) {
134
140
  mode: args.mode,
135
141
  projectPath: args.projectPath,
136
142
  dryRun: args.dryRun,
143
+ allowOutsideHome: args.allowOutsideHome,
137
144
  }), (result) => okResponse(formatWriteResult(result, `set defaultMode=${args.mode} in`, false), { result })));
138
145
  }
139
146
  function formatList(items) {
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/tools/permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/tools/permissions.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@ const ProjectPathField = {
7
7
  .string()
8
8
  .optional()
9
9
  .describe("Absolute path to the project. Required when scope=project."),
10
+ allowOutsideHome: z
11
+ .boolean()
12
+ .optional()
13
+ .describe("Allow projectPath outside $HOME (for cloud environments)."),
10
14
  };
11
15
  const DryRunField = { dryRun: z.boolean().optional() };
12
16
  export function registerSkillTools(server) {
@@ -26,7 +30,7 @@ export function registerSkillTools(server) {
26
30
  idempotentHint: true,
27
31
  openWorldHint: false,
28
32
  },
29
- }, async ({ scope, projectPath }) => handle(() => listSkills(scope, projectPath), (skills) => okResponse(skills.length === 0
33
+ }, async ({ scope, projectPath, allowOutsideHome }) => handle(() => listSkills(scope, projectPath, { allowOutsideHome }), (skills) => okResponse(skills.length === 0
30
34
  ? `No skills found in ${scope} scope.`
31
35
  : skills
32
36
  .map((s) => `[${s.scope}] ${s.name}${s.frontmatter["disable-model-invocation"] ? " (disabled)" : ""}\n dir: ${s.dir}\n description: ${truncate(s.frontmatter.description, 120)}`)
@@ -151,6 +155,52 @@ export function registerSkillTools(server) {
151
155
  openWorldHint: false,
152
156
  },
153
157
  }, async (args) => handle(() => deleteSkill(args), (result) => okResponse(formatWriteResult(result, `delete skill "${args.name}" at`, false), { result })));
158
+ // ------------------------------------------------------------------
159
+ // skill_clone
160
+ // ------------------------------------------------------------------
161
+ server.registerTool("skill_clone", {
162
+ title: "Clone a skill",
163
+ description: "Copy an existing skill to a new name (and optionally a different scope). " +
164
+ "The source SKILL.md is read and a new skill folder is created.",
165
+ inputSchema: {
166
+ sourceScope: CodeScope,
167
+ sourceName: z.string().min(1),
168
+ targetScope: CodeScope.optional(),
169
+ targetName: z
170
+ .string()
171
+ .regex(/^[a-z0-9][a-z0-9-]*$/, "target name must be lowercase alphanumeric + hyphens"),
172
+ ...ProjectPathField,
173
+ allowOutsideHome: z.boolean().optional(),
174
+ ...DryRunField,
175
+ },
176
+ annotations: {
177
+ readOnlyHint: false,
178
+ destructiveHint: false,
179
+ idempotentHint: false,
180
+ openWorldHint: false,
181
+ },
182
+ }, async (args) => handle(async () => {
183
+ const source = await getSkill({
184
+ scope: args.sourceScope,
185
+ name: args.sourceName,
186
+ projectPath: args.projectPath,
187
+ });
188
+ if (!source) {
189
+ throw new Error(`Skill "${args.sourceName}" not found in scope ${args.sourceScope}.`);
190
+ }
191
+ const fm = source.frontmatter;
192
+ return createSkill({
193
+ scope: args.targetScope ?? args.sourceScope,
194
+ name: args.targetName,
195
+ description: fm.description,
196
+ allowedTools: fm["allowed-tools"],
197
+ model: fm.model,
198
+ body: source.body,
199
+ projectPath: args.projectPath,
200
+ overwrite: false,
201
+ dryRun: args.dryRun,
202
+ });
203
+ }, (result) => okResponse(formatWriteResult(result, `clone skill "${args.sourceName}" -> "${args.targetName}" at`, false), { result })));
154
204
  }
155
205
  function truncate(s, n) {
156
206
  if (s.length <= n)