cwtools-shared 0.1.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 (53) hide show
  1. package/dist/generated/mcpTools.d.ts +1112 -0
  2. package/dist/generated/mcpTools.js +1247 -0
  3. package/dist/host/diagnostics.d.ts +41 -0
  4. package/dist/host/diagnostics.js +18 -0
  5. package/dist/host/filesystem.d.ts +18 -0
  6. package/dist/host/filesystem.js +2 -0
  7. package/dist/host/hostServices.d.ts +49 -0
  8. package/dist/host/hostServices.js +2 -0
  9. package/dist/host/indexing.d.ts +54 -0
  10. package/dist/host/indexing.js +2 -0
  11. package/dist/host/lsp.d.ts +8 -0
  12. package/dist/host/lsp.js +27 -0
  13. package/dist/host/readiness.d.ts +11 -0
  14. package/dist/host/readiness.js +71 -0
  15. package/dist/host/vanillaCache.d.ts +12 -0
  16. package/dist/host/vanillaCache.js +56 -0
  17. package/dist/host/vsCodeHostServices.d.ts +27 -0
  18. package/dist/host/vsCodeHostServices.js +30 -0
  19. package/dist/index.d.ts +25 -0
  20. package/dist/index.js +41 -0
  21. package/dist/knowledge/diagnosticRouting.d.ts +13 -0
  22. package/dist/knowledge/diagnosticRouting.js +57 -0
  23. package/dist/knowledge/gameKnowledge.d.ts +20 -0
  24. package/dist/knowledge/gameKnowledge.js +52 -0
  25. package/dist/knowledge/rules.d.ts +162 -0
  26. package/dist/knowledge/rules.js +1383 -0
  27. package/dist/knowledge/workflowHints.d.ts +11 -0
  28. package/dist/knowledge/workflowHints.js +31 -0
  29. package/dist/project/knowledge.d.ts +15 -0
  30. package/dist/project/knowledge.js +209 -0
  31. package/dist/project/profile.d.ts +45 -0
  32. package/dist/project/profile.js +177 -0
  33. package/dist/safety/localisation.d.ts +33 -0
  34. package/dist/safety/localisation.js +105 -0
  35. package/dist/safety/paths.d.ts +21 -0
  36. package/dist/safety/paths.js +122 -0
  37. package/dist/safety/writes.d.ts +3 -0
  38. package/dist/safety/writes.js +19 -0
  39. package/dist/tools/mcpSchema.d.ts +5 -0
  40. package/dist/tools/mcpSchema.js +19 -0
  41. package/dist/tools/names.d.ts +6 -0
  42. package/dist/tools/names.js +51 -0
  43. package/dist/tools/pdxBlock.d.ts +17 -0
  44. package/dist/tools/pdxBlock.js +140 -0
  45. package/dist/tools/registry.d.ts +10 -0
  46. package/dist/tools/registry.js +2 -0
  47. package/dist/tools/schema.d.ts +36 -0
  48. package/dist/tools/schema.js +21 -0
  49. package/dist/tools/symbols.d.ts +60 -0
  50. package/dist/tools/symbols.js +625 -0
  51. package/dist/tools/toolHandlers.d.ts +4 -0
  52. package/dist/tools/toolHandlers.js +291 -0
  53. package/package.json +24 -0
@@ -0,0 +1,1112 @@
1
+ export declare const GENERATED_MCP_TOOLS: readonly [{
2
+ readonly tool: {
3
+ readonly name: "query_types";
4
+ readonly description: "Warning: MANDATORY before using any game ID. Query defined instances of a current-game PDXScript type from mod + vanilla cache. PDXscript IDs are routinely hallucinated - always verify through this tool. Set filter to narrow results.";
5
+ readonly inputSchema: {
6
+ readonly type: "object";
7
+ readonly properties: {
8
+ readonly typeName: {
9
+ readonly type: "string";
10
+ readonly description: "Exact current-game type name returned by query_cwt_schema, completion, or another typed LSP result.";
11
+ };
12
+ readonly filter: {
13
+ readonly type: "string";
14
+ readonly description: "Prefix or substring filter. ALWAYS use when looking up a specific vanilla ID to avoid unrelated results.";
15
+ };
16
+ readonly limit: {
17
+ readonly type: "number";
18
+ readonly description: "Max results to return (default 30, keep low for token efficiency)";
19
+ };
20
+ readonly vanilla: {
21
+ readonly type: "boolean";
22
+ readonly description: "If true, return ONLY vanilla game definitions. If false (default), return mod + vanilla combined.";
23
+ };
24
+ };
25
+ readonly required: readonly ["typeName"];
26
+ };
27
+ };
28
+ readonly registry: {
29
+ readonly name: "query_types";
30
+ readonly isWrite: false;
31
+ readonly isReadOnly: true;
32
+ readonly effect: "workspace_read";
33
+ readonly riskLevel: 0;
34
+ readonly concurrencyClass: "parallel";
35
+ };
36
+ }, {
37
+ readonly tool: {
38
+ readonly name: "query_rules";
39
+ readonly description: "Query syntax rules for triggers, effects, scope changes, or modifiers from CWT/LSP-backed rule evidence. Returns hardFacts (legal syntax/scopes/push_scope/type filters) plus semanticHints from trigger_docs.log/scopes.cwt comments. Treat semanticHints as search guidance, not proof of legality. Fuzzy-matches if exact name not found.";
40
+ readonly inputSchema: {
41
+ readonly type: "object";
42
+ readonly properties: {
43
+ readonly category: {
44
+ readonly type: "string";
45
+ readonly enum: readonly ["trigger", "effect", "scope_change", "modifier"];
46
+ readonly description: "Rule category";
47
+ };
48
+ readonly name: {
49
+ readonly type: "string";
50
+ readonly description: "Specific rule name (optional, lists all if omitted or returns fuzzy matches if exact miss)";
51
+ };
52
+ readonly scope: {
53
+ readonly type: "string";
54
+ readonly description: "Filter by an exact supported scope returned by query_scope/explain_scope. Optional, but heavily recommended.";
55
+ };
56
+ };
57
+ readonly required: readonly ["category"];
58
+ };
59
+ };
60
+ readonly registry: {
61
+ readonly name: "query_rules";
62
+ readonly isWrite: false;
63
+ readonly isReadOnly: true;
64
+ readonly effect: "workspace_read";
65
+ readonly riskLevel: 0;
66
+ readonly concurrencyClass: "parallel";
67
+ };
68
+ }, {
69
+ readonly tool: {
70
+ readonly name: "query_cwt_schema";
71
+ readonly description: "CWT-FIRST schema lookup for entity definitions and other non-trigger/effect rules. Use BEFORE writing or planning a PDXScript target. Pass the actual project file/directory plus an optional field/rule name. Returns active CWT source snippets, line numbers, and parsed type/path/subtype entity summaries. If snippets are structural only, confirm intent from verified current-version examples.";
72
+ readonly inputSchema: {
73
+ readonly type: "object";
74
+ readonly properties: {
75
+ readonly target: {
76
+ readonly type: "string";
77
+ readonly description: "Actual project file/directory or a CWT-relative path returned by active schema metadata.";
78
+ };
79
+ readonly file: {
80
+ readonly type: "string";
81
+ readonly description: "Alias for target when you have a concrete project file path.";
82
+ };
83
+ readonly directory: {
84
+ readonly type: "string";
85
+ readonly description: "Alias for target when an active project/schema result supplied the entity directory.";
86
+ };
87
+ readonly name: {
88
+ readonly type: "string";
89
+ readonly description: "Optional field, type, alias, or rule name to locate inside matched CWT files.";
90
+ };
91
+ readonly includeContent: {
92
+ readonly type: "boolean";
93
+ readonly description: "If true, return a larger excerpt from matched schema files. Default false.";
94
+ };
95
+ readonly limit: {
96
+ readonly type: "number";
97
+ readonly description: "Maximum CWT files to return. Default 5, max 20.";
98
+ };
99
+ };
100
+ readonly required: readonly [];
101
+ };
102
+ };
103
+ readonly registry: {
104
+ readonly name: "query_cwt_schema";
105
+ readonly isWrite: false;
106
+ readonly isReadOnly: true;
107
+ readonly effect: "workspace_read";
108
+ readonly riskLevel: 0;
109
+ readonly concurrencyClass: "parallel";
110
+ };
111
+ }, {
112
+ readonly tool: {
113
+ readonly name: "search_rule_capabilities";
114
+ readonly description: "Search CWT/LSP rule evidence by intent and scope capability instead of guessing a rule name. Use this when you know what you want to do but do not know the exact trigger/effect/scope_change name. Returns ranked candidates with hardFacts and semanticHints; validate the selected rule before writing.";
115
+ readonly inputSchema: {
116
+ readonly type: "object";
117
+ readonly properties: {
118
+ readonly intent: {
119
+ readonly type: "string";
120
+ readonly description: "Natural-language intent. Exact current-game terms from CWT docs improve ranking.";
121
+ };
122
+ readonly category: {
123
+ readonly type: "string";
124
+ readonly enum: readonly ["trigger", "effect", "scope_change", "modifier", "all"];
125
+ readonly description: "Optional CWT rule category filter.";
126
+ };
127
+ readonly currentScope: {
128
+ readonly type: "string";
129
+ readonly description: "Optional exact current CWT scope returned by query_scope.";
130
+ };
131
+ readonly desiredPushScope: {
132
+ readonly type: "string";
133
+ readonly description: "Optional exact resulting scope returned by explain_scope/schema evidence.";
134
+ };
135
+ readonly limit: {
136
+ readonly type: "number";
137
+ readonly description: "Maximum candidates to return. Default 10, max 50.";
138
+ };
139
+ };
140
+ readonly required: readonly [];
141
+ };
142
+ };
143
+ readonly registry: {
144
+ readonly name: "search_rule_capabilities";
145
+ readonly isWrite: false;
146
+ readonly isReadOnly: true;
147
+ readonly effect: "workspace_read";
148
+ readonly riskLevel: 0;
149
+ readonly concurrencyClass: "parallel";
150
+ };
151
+ }, {
152
+ readonly tool: {
153
+ readonly name: "explain_scope";
154
+ readonly description: "Explain a current CWT scope from scopes.cwt, including aliases, is_subscope_of, source location, and semantic hints. Scope descriptions are hints, not legality proof.";
155
+ readonly inputSchema: {
156
+ readonly type: "object";
157
+ readonly properties: {
158
+ readonly scope: {
159
+ readonly type: "string";
160
+ readonly description: "Exact scope or alias observed in current CWT/LSP output.";
161
+ };
162
+ };
163
+ readonly required: readonly ["scope"];
164
+ };
165
+ };
166
+ readonly registry: {
167
+ readonly name: "explain_scope";
168
+ readonly isWrite: false;
169
+ readonly isReadOnly: true;
170
+ readonly effect: "workspace_read";
171
+ readonly riskLevel: 0;
172
+ readonly concurrencyClass: "parallel";
173
+ };
174
+ }, {
175
+ readonly tool: {
176
+ readonly name: "parse_pdx_fragment";
177
+ readonly description: "Parse a PDXScript fragment through the CWTools language server without writing a file. Use this for quick syntax, brace, and recovery checks after selecting rules. This is not a full semantic validation substitute; final project edits still need get_diagnostics/completions or verified examples.";
178
+ readonly inputSchema: {
179
+ readonly type: "object";
180
+ readonly properties: {
181
+ readonly code: {
182
+ readonly type: "string";
183
+ readonly description: "PDXScript fragment text to parse.";
184
+ };
185
+ };
186
+ readonly required: readonly ["code"];
187
+ };
188
+ };
189
+ readonly registry: {
190
+ readonly name: "parse_pdx_fragment";
191
+ readonly isWrite: false;
192
+ readonly isReadOnly: true;
193
+ readonly effect: "workspace_read";
194
+ readonly riskLevel: 0;
195
+ readonly concurrencyClass: "parallel";
196
+ };
197
+ }, {
198
+ readonly tool: {
199
+ readonly name: "query_scope";
200
+ readonly description: "Query the scope context at a specific position in a file. Returns current/root/prior scope chains plus provenance and inference evidence reported by CWTools. Use it to determine which active CWT rules are valid at that position.";
201
+ readonly inputSchema: {
202
+ readonly type: "object";
203
+ readonly properties: {
204
+ readonly file: {
205
+ readonly type: "string";
206
+ readonly description: "Absolute file path";
207
+ };
208
+ readonly line: {
209
+ readonly type: "number";
210
+ readonly description: "Line number (0-based)";
211
+ };
212
+ readonly column: {
213
+ readonly type: "number";
214
+ readonly description: "Column number (0-based)";
215
+ };
216
+ };
217
+ readonly required: readonly ["file", "line", "column"];
218
+ };
219
+ };
220
+ readonly registry: {
221
+ readonly name: "query_scope";
222
+ readonly isWrite: false;
223
+ readonly isReadOnly: true;
224
+ readonly effect: "workspace_read";
225
+ readonly riskLevel: 0;
226
+ readonly concurrencyClass: "parallel";
227
+ };
228
+ }, {
229
+ readonly tool: {
230
+ readonly name: "get_diagnostics";
231
+ readonly description: "Get errors, warnings, information, and hints from the VS Code Problems diagnostics snapshot, optionally filtered by file and severity. Returns totals and truncation metadata; check truncated before treating the returned list as complete.";
232
+ readonly inputSchema: {
233
+ readonly type: "object";
234
+ readonly properties: {
235
+ readonly file: {
236
+ readonly type: "string";
237
+ readonly description: "Optional: restrict to a specific file path (absolute) or a path substring to match. Leave empty to get all workspace diagnostics.";
238
+ };
239
+ readonly severity: {
240
+ readonly type: "string";
241
+ readonly enum: readonly ["error", "warning", "info", "hint", "all"];
242
+ readonly description: "Filter by severity. Default: \"all\"";
243
+ };
244
+ readonly limit: {
245
+ readonly type: "number";
246
+ readonly description: "Max diagnostics to return (default 500, max 2000). For full project reviews, omit this parameter to get all diagnostics. Only set a low limit when you want a quick summary.";
247
+ };
248
+ };
249
+ readonly required: readonly [];
250
+ };
251
+ };
252
+ readonly registry: {
253
+ readonly name: "get_diagnostics";
254
+ readonly isWrite: false;
255
+ readonly isReadOnly: true;
256
+ readonly effect: "workspace_read";
257
+ readonly riskLevel: 0;
258
+ readonly concurrencyClass: "lsp-limited";
259
+ };
260
+ }, {
261
+ readonly tool: {
262
+ readonly name: "analyze_diagnostic_error";
263
+ readonly description: "Classify an existing diagnostic or tool/write failure and return routing advice. Use after a write, validation, ReadTracker, or tool-argument failure. Prefer passing diagnosticsSnapshot/toolResult from get_diagnostics or a write tool so this does not re-query diagnostics. When a concrete identifier/sprite/sound/localisation key appears, the result tells the agent to verify it against project + vanilla sources; when LSP has no feedback, it avoids blind searches.";
264
+ readonly inputSchema: {
265
+ readonly type: "object";
266
+ readonly properties: {
267
+ readonly file: {
268
+ readonly type: "string";
269
+ readonly description: "Optional file where the diagnostic or failed tool operation occurred. Used only to scope a fallback get_diagnostics call if no snapshot is supplied.";
270
+ };
271
+ readonly errorCode: {
272
+ readonly type: "string";
273
+ readonly description: "Optional diagnostic code or compact error message.";
274
+ };
275
+ readonly message: {
276
+ readonly type: "string";
277
+ readonly description: "Optional raw failure message from a tool or validation step.";
278
+ };
279
+ readonly previousAttempt: {
280
+ readonly type: "string";
281
+ readonly description: "Optional summary of the last attempted fix. Helps detect repeated blind retries.";
282
+ };
283
+ readonly toolName: {
284
+ readonly type: "string";
285
+ readonly description: "Optional name of the tool that failed, e.g. edit_file, write_localisation, get_diagnostics.";
286
+ };
287
+ readonly diagnosticsSnapshot: {
288
+ readonly type: "object";
289
+ readonly description: "Optional raw get_diagnostics result, write-tool diagnostics payload, or compact diagnostic object to classify without querying diagnostics again.";
290
+ };
291
+ readonly toolResult: {
292
+ readonly type: "object";
293
+ readonly description: "Optional raw failed tool result to classify without querying diagnostics again.";
294
+ };
295
+ readonly reflection: {
296
+ readonly type: "string";
297
+ readonly description: "Optional legacy free-form analysis from the model. Kept for backward compatibility; the host still returns deterministic routing advice.";
298
+ };
299
+ };
300
+ readonly required: readonly [];
301
+ };
302
+ };
303
+ readonly registry: {
304
+ readonly name: "analyze_diagnostic_error";
305
+ readonly isWrite: false;
306
+ readonly isReadOnly: true;
307
+ readonly effect: "none";
308
+ readonly riskLevel: 2;
309
+ readonly concurrencyClass: "global-exclusive";
310
+ };
311
+ }, {
312
+ readonly tool: {
313
+ readonly name: "query_project_profile";
314
+ readonly description: "Read the /init-generated Agent project profile from .cwtools/project/profile.json. Use this before broad scans to get workspace type, key directories, localisation languages/encoding, namespaces, workflow routing, validation hints, and mode-specific prompt cards.";
315
+ readonly inputSchema: {
316
+ readonly type: "object";
317
+ readonly properties: {
318
+ readonly section: {
319
+ readonly type: "string";
320
+ readonly enum: readonly ["summary", "routing", "directories", "localisation", "identifiers", "validation", "promptCards", "all"];
321
+ readonly description: "Targeted profile section to return. Default summary. Use all only when you need the whole profile.";
322
+ };
323
+ readonly mode: {
324
+ readonly type: "string";
325
+ readonly enum: readonly ["build", "plan", "explore", "general", "utility", "review", "gui_expert", "script_reviewer", "loc_translator", "loc_writer", "orchestrator", "script", "asset"];
326
+ readonly description: "Optional mode card to return, e.g. build, plan, loc_writer, asset, orchestrator, script.";
327
+ };
328
+ };
329
+ readonly required: readonly [];
330
+ };
331
+ };
332
+ readonly registry: {
333
+ readonly name: "query_project_profile";
334
+ readonly isWrite: false;
335
+ readonly isReadOnly: true;
336
+ readonly effect: "workspace_read";
337
+ readonly riskLevel: 0;
338
+ readonly concurrencyClass: "parallel";
339
+ };
340
+ }, {
341
+ readonly tool: {
342
+ readonly name: "query_project_knowledge";
343
+ readonly description: "Query the /init-generated project + vanilla SQLite knowledge graph for complex cross-subsystem work. Returns project patterns, bounded vanilla archetypes, definition stacks, dependency edges, typed relationship structure/logic, freshness, and unresolved facts with source paths. Use this before write_design_blueprint or any plan spanning multiple current-game entity families. CWT/LSP exact checks remain authoritative.";
344
+ readonly inputSchema: {
345
+ readonly type: "object";
346
+ readonly properties: {
347
+ readonly intent: {
348
+ readonly type: "string";
349
+ readonly description: "Concise design or investigation intent used to rank evidence.";
350
+ };
351
+ readonly domains: {
352
+ readonly type: "array";
353
+ readonly items: {
354
+ readonly type: "string";
355
+ };
356
+ readonly description: "Subsystem domains returned by the project knowledge manifest or an earlier query.";
357
+ };
358
+ readonly identifiers: {
359
+ readonly type: "array";
360
+ readonly items: {
361
+ readonly type: "string";
362
+ };
363
+ readonly description: "Known or proposed IDs used as indexed graph seeds. Exact IDs and stable prefixes give the fastest, most accurate retrieval.";
364
+ };
365
+ readonly entityTypes: {
366
+ readonly type: "array";
367
+ readonly items: {
368
+ readonly type: "string";
369
+ };
370
+ readonly description: "CWTools entity types to prioritize.";
371
+ };
372
+ readonly includeProjectPatterns: {
373
+ readonly type: "boolean";
374
+ readonly description: "Include existing workspace examples. Default true.";
375
+ };
376
+ readonly includeVanillaArchetypes: {
377
+ readonly type: "boolean";
378
+ readonly description: "Include bounded vanilla examples with exact sources. Default true.";
379
+ };
380
+ readonly includeTopology: {
381
+ readonly type: "boolean";
382
+ readonly description: "Include project dependency/reference edges. Default true.";
383
+ };
384
+ readonly includeUnresolved: {
385
+ readonly type: "boolean";
386
+ readonly description: "Include ambiguous definition stacks and snapshot warnings. Default true.";
387
+ };
388
+ readonly includeEventGraph: {
389
+ readonly type: "boolean";
390
+ readonly description: "Include event nodes, structural call/entry edges, and state/scope logic relations. Default true.";
391
+ };
392
+ readonly limit: {
393
+ readonly type: "number";
394
+ readonly minimum: 1;
395
+ readonly maximum: 300;
396
+ readonly description: "Maximum ranked evidence records. Default 80.";
397
+ };
398
+ };
399
+ readonly required: readonly [];
400
+ };
401
+ };
402
+ readonly registry: {
403
+ readonly name: "query_project_knowledge";
404
+ readonly isWrite: false;
405
+ readonly isReadOnly: true;
406
+ readonly effect: "workspace_read";
407
+ readonly riskLevel: 0;
408
+ readonly concurrencyClass: "parallel";
409
+ };
410
+ }, {
411
+ readonly tool: {
412
+ readonly name: "query_workspace_index";
413
+ readonly description: "Query the shared incremental workspace index for PDXScript symbols and named .gfx/.asset/.gui assets without scanning files. Use this before broad grep/search for any named project symbol. Results report indexedSymbolNames, indexUpdatedAt, fileVersion, and optional lightweight references for freshness/coverage awareness.";
414
+ readonly inputSchema: {
415
+ readonly type: "object";
416
+ readonly properties: {
417
+ readonly name: {
418
+ readonly type: "string";
419
+ readonly description: "Exact, prefix, or substring symbol/asset name to search for.";
420
+ };
421
+ readonly kind: {
422
+ readonly type: "string";
423
+ readonly description: "Optional exact kind returned by the active index or CWT type metadata.";
424
+ };
425
+ readonly category: {
426
+ readonly type: "string";
427
+ readonly description: "Optional broad category returned by an earlier index result.";
428
+ };
429
+ readonly source: {
430
+ readonly type: "string";
431
+ readonly enum: readonly ["script", "asset", "gui"];
432
+ readonly description: "Optional source filter. script=.txt, asset=.gfx/.asset, gui=.gui.";
433
+ };
434
+ readonly origin: {
435
+ readonly type: "string";
436
+ readonly enum: readonly ["workspace", "vanilla", "both"];
437
+ readonly description: "Optional origin filter. workspace=mod files, vanilla=configured game cache, both/default=combined.";
438
+ };
439
+ readonly directory: {
440
+ readonly type: "string";
441
+ readonly description: "Optional project path fragment; prefer a path returned by project profile or CWT schema.";
442
+ };
443
+ readonly prefix: {
444
+ readonly type: "boolean";
445
+ readonly description: "If true, name is treated as a prefix. Default false.";
446
+ };
447
+ readonly exact: {
448
+ readonly type: "boolean";
449
+ readonly description: "If true, name must match exactly. Default false.";
450
+ };
451
+ readonly includeReferences: {
452
+ readonly type: "boolean";
453
+ readonly description: "If true, include lightweight cross-file reference contexts captured by the index. Default false.";
454
+ };
455
+ readonly limit: {
456
+ readonly type: "number";
457
+ readonly description: "Maximum entries to return. Default 50, max 200.";
458
+ };
459
+ };
460
+ readonly required: readonly [];
461
+ };
462
+ };
463
+ readonly registry: {
464
+ readonly name: "query_workspace_index";
465
+ readonly isWrite: false;
466
+ readonly isReadOnly: true;
467
+ readonly effect: "workspace_read";
468
+ readonly riskLevel: 0;
469
+ readonly concurrencyClass: "parallel";
470
+ };
471
+ }, {
472
+ readonly tool: {
473
+ readonly name: "explore_pdx_project";
474
+ readonly description: "Primary semantic exploration entry point for large Paradox projects. Queries the live CWTools type/reference graph and returns bounded entry points, typed nodes, dependency edges, file facts, provenance, truncation, and freshness without scanning or reading whole files. Use this FIRST for questions such as how an entity is connected, what calls or references an ID, what a file depends on, or what may be affected by a change. Follow with exact query_rules/query_scope/query_types/get_pdx_block checks before writing.";
475
+ readonly inputSchema: {
476
+ readonly type: "object";
477
+ readonly properties: {
478
+ readonly query: {
479
+ readonly type: "string";
480
+ readonly description: "Identifier or concise semantic search text. Exact PDX IDs give the strongest results. Optional when file or typeName is supplied.";
481
+ };
482
+ readonly file: {
483
+ readonly type: "string";
484
+ readonly description: "Optional workspace-relative or absolute file path used to restrict entry points.";
485
+ };
486
+ readonly typeName: {
487
+ readonly type: "string";
488
+ readonly description: "Optional exact CWTools type name obtained from active schema/type evidence.";
489
+ };
490
+ readonly exact: {
491
+ readonly type: "boolean";
492
+ readonly description: "Require query to exactly match an entity ID. Default false.";
493
+ };
494
+ readonly depth: {
495
+ readonly type: "number";
496
+ readonly minimum: 0;
497
+ readonly maximum: 3;
498
+ readonly description: "Incoming/outgoing graph traversal depth. Default 1; use 2-3 only for focused IDs.";
499
+ };
500
+ readonly maxNodes: {
501
+ readonly type: "number";
502
+ readonly minimum: 1;
503
+ readonly maximum: 100;
504
+ readonly description: "Maximum graph nodes. Default 30.";
505
+ };
506
+ readonly maxEdges: {
507
+ readonly type: "number";
508
+ readonly minimum: 1;
509
+ readonly maximum: 300;
510
+ readonly description: "Maximum graph edges and per-file semantic facts. Default 80.";
511
+ };
512
+ readonly includeMetadata: {
513
+ readonly type: "boolean";
514
+ readonly description: "Include documentation, variables, event targets, and block metadata. Default true.";
515
+ };
516
+ };
517
+ readonly required: readonly [];
518
+ };
519
+ };
520
+ readonly registry: {
521
+ readonly name: "explore_pdx_project";
522
+ readonly isWrite: false;
523
+ readonly isReadOnly: true;
524
+ readonly effect: "workspace_read";
525
+ readonly riskLevel: 0;
526
+ readonly concurrencyClass: "lsp-limited";
527
+ };
528
+ }, {
529
+ readonly tool: {
530
+ readonly name: "query_localisation_index";
531
+ readonly description: "Query the shared incremental localisation index for mod YML keys without scanning files. Use this before creating or updating localisation keys, and when checking whether a key already exists.";
532
+ readonly inputSchema: {
533
+ readonly type: "object";
534
+ readonly properties: {
535
+ readonly key: {
536
+ readonly type: "string";
537
+ readonly description: "Exact key, prefix, or substring to search for.";
538
+ };
539
+ readonly language: {
540
+ readonly type: "string";
541
+ readonly description: "Optional language tag returned by the active project/profile localisation metadata.";
542
+ };
543
+ readonly prefix: {
544
+ readonly type: "boolean";
545
+ readonly description: "If true, key is treated as a prefix. Default false.";
546
+ };
547
+ readonly contains: {
548
+ readonly type: "boolean";
549
+ readonly description: "If true, key is treated as a case-insensitive substring. Useful when you only know part of a localisation key.";
550
+ };
551
+ readonly caseSensitive: {
552
+ readonly type: "boolean";
553
+ readonly description: "Only applies to prefix/contains searches. Default false.";
554
+ };
555
+ readonly limit: {
556
+ readonly type: "number";
557
+ readonly description: "Maximum entries to return. Default 20, max 100.";
558
+ };
559
+ };
560
+ readonly required: readonly [];
561
+ };
562
+ };
563
+ readonly registry: {
564
+ readonly name: "query_localisation_index";
565
+ readonly isWrite: false;
566
+ readonly isReadOnly: true;
567
+ readonly effect: "workspace_read";
568
+ readonly riskLevel: 0;
569
+ readonly concurrencyClass: "parallel";
570
+ };
571
+ }, {
572
+ readonly tool: {
573
+ readonly name: "get_pdx_block";
574
+ readonly description: "Extract exactly one complete AST block by symbol name. Works with .txt (events, common), .gui (containerWindowType by name), and .gfx (pdxmesh by name). Returns 1-based startLine/endLine that can be passed directly to replace_lines. If the symbol is not found, the error response includes a full list of available symbols with line ranges so you can retry with the correct name.";
575
+ readonly inputSchema: {
576
+ readonly type: "object";
577
+ readonly properties: {
578
+ readonly file: {
579
+ readonly type: "string";
580
+ readonly description: "Absolute file path";
581
+ };
582
+ readonly symbol: {
583
+ readonly type: "string";
584
+ readonly description: "Exact symbol returned by document_symbols or another active typed lookup. If not found, the error lists available symbols and line ranges.";
585
+ };
586
+ };
587
+ readonly required: readonly ["file", "symbol"];
588
+ };
589
+ };
590
+ readonly registry: {
591
+ readonly name: "get_pdx_block";
592
+ readonly isWrite: false;
593
+ readonly isReadOnly: true;
594
+ readonly effect: "workspace_read";
595
+ readonly riskLevel: 0;
596
+ readonly concurrencyClass: "parallel";
597
+ };
598
+ }, {
599
+ readonly tool: {
600
+ readonly name: "get_completion_at";
601
+ readonly description: "Get auto-completion suggestions and bounded context at a specific position through the active VS Code language provider. In Paradox projects, CWTools may enrich the result with game-aware scope and schema context.";
602
+ readonly inputSchema: {
603
+ readonly type: "object";
604
+ readonly properties: {
605
+ readonly file: {
606
+ readonly type: "string";
607
+ readonly description: "Absolute file path (must be in the workspace)";
608
+ };
609
+ readonly line: {
610
+ readonly type: "number";
611
+ readonly description: "Line number (0-based)";
612
+ };
613
+ readonly column: {
614
+ readonly type: "number";
615
+ readonly description: "Column number (0-based)";
616
+ };
617
+ readonly limit: {
618
+ readonly type: "number";
619
+ readonly description: "Max completions to return (default 30). Increase if you need to see more options.";
620
+ };
621
+ };
622
+ readonly required: readonly ["file", "line", "column"];
623
+ };
624
+ };
625
+ readonly registry: {
626
+ readonly name: "get_completion_at";
627
+ readonly isWrite: false;
628
+ readonly isReadOnly: true;
629
+ readonly effect: "workspace_read";
630
+ readonly riskLevel: 0;
631
+ readonly concurrencyClass: "parallel";
632
+ };
633
+ }, {
634
+ readonly tool: {
635
+ readonly name: "document_symbols";
636
+ readonly description: "Get symbols defined in a file as a hierarchical tree with 0-based line ranges from the active VS Code language provider. Use this first to understand file structure before choosing targeted reads.";
637
+ readonly inputSchema: {
638
+ readonly type: "object";
639
+ readonly properties: {
640
+ readonly file: {
641
+ readonly type: "string";
642
+ readonly description: "Absolute file path";
643
+ };
644
+ };
645
+ readonly required: readonly ["file"];
646
+ };
647
+ };
648
+ readonly registry: {
649
+ readonly name: "document_symbols";
650
+ readonly isWrite: false;
651
+ readonly isReadOnly: true;
652
+ readonly effect: "workspace_read";
653
+ readonly riskLevel: 0;
654
+ readonly concurrencyClass: "lsp-limited";
655
+ };
656
+ }, {
657
+ readonly tool: {
658
+ readonly name: "workspace_symbols";
659
+ readonly description: "Search symbol definitions by name through active VS Code workspace symbol providers. Use a specific query. Empty results may reflect provider coverage or indexing state and are not proof that text is absent from the repository.";
660
+ readonly inputSchema: {
661
+ readonly type: "object";
662
+ readonly properties: {
663
+ readonly query: {
664
+ readonly type: "string";
665
+ readonly description: "Symbol name or partial name to search for. Be specific to avoid large result sets.";
666
+ };
667
+ readonly limit: {
668
+ readonly type: "number";
669
+ readonly description: "Max results (default 20; keep low for broad searches to avoid token waste).";
670
+ };
671
+ };
672
+ readonly required: readonly ["query"];
673
+ };
674
+ };
675
+ readonly registry: {
676
+ readonly name: "workspace_symbols";
677
+ readonly isWrite: false;
678
+ readonly isReadOnly: true;
679
+ readonly effect: "workspace_read";
680
+ readonly riskLevel: 0;
681
+ readonly concurrencyClass: "lsp-limited";
682
+ };
683
+ }, {
684
+ readonly tool: {
685
+ readonly name: "query_definition";
686
+ readonly description: "GoToDefinition at a position, or FindAllRefs if no definition exists. Uses CWTools AST - faster than grep. If you know the symbol name, prefer query_definition_by_name instead.";
687
+ readonly inputSchema: {
688
+ readonly type: "object";
689
+ readonly properties: {
690
+ readonly file: {
691
+ readonly type: "string";
692
+ readonly description: "Absolute file path";
693
+ };
694
+ readonly line: {
695
+ readonly type: "number";
696
+ readonly description: "Line number (0-based)";
697
+ };
698
+ readonly column: {
699
+ readonly type: "number";
700
+ readonly description: "Column number (0-based)";
701
+ };
702
+ };
703
+ readonly required: readonly ["file", "line", "column"];
704
+ };
705
+ };
706
+ readonly registry: {
707
+ readonly name: "query_definition";
708
+ readonly isWrite: false;
709
+ readonly isReadOnly: true;
710
+ readonly effect: "workspace_read";
711
+ readonly riskLevel: 0;
712
+ readonly concurrencyClass: "lsp-limited";
713
+ };
714
+ }, {
715
+ readonly tool: {
716
+ readonly name: "query_definition_by_name";
717
+ readonly description: "Find where a named symbol is defined - no file/position needed. Returns file path and line number. Works for any top-level PDXScript key (events, triggers, effects, etc.).";
718
+ readonly inputSchema: {
719
+ readonly type: "object";
720
+ readonly properties: {
721
+ readonly symbolName: {
722
+ readonly type: "string";
723
+ readonly description: "The exact name of the symbol to find (e.g. \"kuat_has_psionic_research\", \"distar.001\")";
724
+ };
725
+ };
726
+ readonly required: readonly ["symbolName"];
727
+ };
728
+ };
729
+ readonly registry: {
730
+ readonly name: "query_definition_by_name";
731
+ readonly isWrite: false;
732
+ readonly isReadOnly: true;
733
+ readonly effect: "workspace_read";
734
+ readonly riskLevel: 0;
735
+ readonly concurrencyClass: "parallel";
736
+ };
737
+ }, {
738
+ readonly tool: {
739
+ readonly name: "query_references";
740
+ readonly description: "Find references to an identifier through the active language provider, with a bounded workspace text-search fallback.";
741
+ readonly inputSchema: {
742
+ readonly type: "object";
743
+ readonly properties: {
744
+ readonly identifier: {
745
+ readonly type: "string";
746
+ readonly description: "The identifier to search for";
747
+ };
748
+ readonly file: {
749
+ readonly type: "string";
750
+ readonly description: "Optional file to limit search to";
751
+ };
752
+ };
753
+ readonly required: readonly ["identifier"];
754
+ };
755
+ };
756
+ readonly registry: {
757
+ readonly name: "query_references";
758
+ readonly isWrite: false;
759
+ readonly isReadOnly: true;
760
+ readonly effect: "workspace_read";
761
+ readonly riskLevel: 0;
762
+ readonly concurrencyClass: "lsp-limited";
763
+ };
764
+ }, {
765
+ readonly tool: {
766
+ readonly name: "query_scripted_effects";
767
+ readonly description: "Warning: MANDATORY before using any scripted_effect. Lists all scripted effects with name, scope constraints, and type. PDXscript effect names are frequently hallucinated - always verify here first.";
768
+ readonly inputSchema: {
769
+ readonly type: "object";
770
+ readonly properties: {
771
+ readonly filter: {
772
+ readonly type: "string";
773
+ readonly description: "Optional substring filter on effect name. Without filter, results are limited to 50; with filter, up to 200.";
774
+ };
775
+ readonly limit: {
776
+ readonly type: "number";
777
+ readonly description: "Max results (default 50 without filter, 200 with filter)";
778
+ };
779
+ };
780
+ readonly required: readonly [];
781
+ };
782
+ };
783
+ readonly registry: {
784
+ readonly name: "query_scripted_effects";
785
+ readonly isWrite: false;
786
+ readonly isReadOnly: true;
787
+ readonly effect: "workspace_read";
788
+ readonly riskLevel: 0;
789
+ readonly concurrencyClass: "parallel";
790
+ };
791
+ }, {
792
+ readonly tool: {
793
+ readonly name: "query_scripted_triggers";
794
+ readonly description: "Warning: MANDATORY before using any scripted_trigger. Lists all scripted triggers with name, scope constraints, and type. Trigger names are frequently hallucinated - always verify here first.";
795
+ readonly inputSchema: {
796
+ readonly type: "object";
797
+ readonly properties: {
798
+ readonly filter: {
799
+ readonly type: "string";
800
+ readonly description: "Optional substring filter on trigger name. Without filter, results are limited to 50; with filter, up to 200.";
801
+ };
802
+ readonly limit: {
803
+ readonly type: "number";
804
+ readonly description: "Max results (default 50 without filter, 200 with filter)";
805
+ };
806
+ };
807
+ readonly required: readonly [];
808
+ };
809
+ };
810
+ readonly registry: {
811
+ readonly name: "query_scripted_triggers";
812
+ readonly isWrite: false;
813
+ readonly isReadOnly: true;
814
+ readonly effect: "workspace_read";
815
+ readonly riskLevel: 0;
816
+ readonly concurrencyClass: "parallel";
817
+ };
818
+ }, {
819
+ readonly tool: {
820
+ readonly name: "query_enums";
821
+ readonly description: "Warning: MANDATORY before using any enum field. Query enum values from CWTools rules. Call with no enumName to list all enums, then query specific enum for values. Always verify - enum values are domain-specific.";
822
+ readonly inputSchema: {
823
+ readonly type: "object";
824
+ readonly properties: {
825
+ readonly enumName: {
826
+ readonly type: "string";
827
+ readonly description: "Exact enum name discovered from CWT/schema evidence. Leave empty to list all enum names.";
828
+ };
829
+ readonly limit: {
830
+ readonly type: "number";
831
+ readonly description: "Max values to return (default 500)";
832
+ };
833
+ };
834
+ readonly required: readonly [];
835
+ };
836
+ };
837
+ readonly registry: {
838
+ readonly name: "query_enums";
839
+ readonly isWrite: false;
840
+ readonly isReadOnly: true;
841
+ readonly effect: "workspace_read";
842
+ readonly riskLevel: 0;
843
+ readonly concurrencyClass: "parallel";
844
+ };
845
+ }, {
846
+ readonly tool: {
847
+ readonly name: "query_static_modifiers";
848
+ readonly description: "Warning: MANDATORY before using add_modifier. Lists static modifiers with categories. Modifier names are domain-specific - always verify. Dynamic/engine modifiers may not appear here - use query_rules(category=\"modifier\") as fallback.";
849
+ readonly inputSchema: {
850
+ readonly type: "object";
851
+ readonly properties: {
852
+ readonly filter: {
853
+ readonly type: "string";
854
+ readonly description: "Optional substring filter on modifier tag";
855
+ };
856
+ readonly limit: {
857
+ readonly type: "number";
858
+ readonly description: "Max results (default 300)";
859
+ };
860
+ };
861
+ readonly required: readonly [];
862
+ };
863
+ };
864
+ readonly registry: {
865
+ readonly name: "query_static_modifiers";
866
+ readonly isWrite: false;
867
+ readonly isReadOnly: true;
868
+ readonly effect: "workspace_read";
869
+ readonly riskLevel: 0;
870
+ readonly concurrencyClass: "parallel";
871
+ };
872
+ }, {
873
+ readonly tool: {
874
+ readonly name: "query_variables";
875
+ readonly description: "List all scripted variables (@variable_name = value) defined across the mod and vanilla. Use this to look up numeric constant values defined with @-prefix before using them in generated code.";
876
+ readonly inputSchema: {
877
+ readonly type: "object";
878
+ readonly properties: {
879
+ readonly filter: {
880
+ readonly type: "string";
881
+ readonly description: "Optional substring filter on variable name";
882
+ };
883
+ };
884
+ readonly required: readonly [];
885
+ };
886
+ };
887
+ readonly registry: {
888
+ readonly name: "query_variables";
889
+ readonly isWrite: false;
890
+ readonly isReadOnly: true;
891
+ readonly effect: "workspace_read";
892
+ readonly riskLevel: 0;
893
+ readonly concurrencyClass: "parallel";
894
+ };
895
+ }, {
896
+ readonly tool: {
897
+ readonly name: "get_entity_info";
898
+ readonly description: "Get deep structural info from the CWTools cache, including referenced types, variables, classified rule blocks, and saved scopes. Use it to understand file dependencies before modification.";
899
+ readonly inputSchema: {
900
+ readonly type: "object";
901
+ readonly properties: {
902
+ readonly file: {
903
+ readonly type: "string";
904
+ readonly description: "Absolute file path (must be a parsed mod file)";
905
+ };
906
+ };
907
+ readonly required: readonly ["file"];
908
+ };
909
+ };
910
+ readonly registry: {
911
+ readonly name: "get_entity_info";
912
+ readonly isWrite: false;
913
+ readonly isReadOnly: true;
914
+ readonly effect: "workspace_read";
915
+ readonly riskLevel: 0;
916
+ readonly concurrencyClass: "parallel";
917
+ };
918
+ }, {
919
+ readonly tool: {
920
+ readonly name: "query_shader_symbol";
921
+ readonly description: "Read-only. Query declared Paradox shader symbols (Effects, MainCode stages, constant buffers, render states) from the CWTools shader model across mod, dependencies, and vanilla. Effect entries carry a reachability classification: engine_or_unreferenced means reachability is UNKNOWN, not dead code - never treat it as safe to delete. Page with cursor when nextCursor is non-null.";
922
+ readonly inputSchema: {
923
+ readonly type: "object";
924
+ readonly properties: {
925
+ readonly filter: {
926
+ readonly type: "string";
927
+ readonly description: "Optional case-insensitive substring filter on the symbol name.";
928
+ };
929
+ readonly kind: {
930
+ readonly type: "string";
931
+ readonly enum: readonly ["all", "effect", "maincode", "constantbuffer", "state"];
932
+ readonly description: "Symbol kind filter. Default all.";
933
+ };
934
+ readonly limit: {
935
+ readonly type: "number";
936
+ readonly description: "Max results to return (1-500, default 100).";
937
+ };
938
+ readonly cursor: {
939
+ readonly type: "number";
940
+ readonly description: "Numeric offset returned as nextCursor by a previous call. Default 0.";
941
+ };
942
+ };
943
+ readonly required: readonly [];
944
+ };
945
+ };
946
+ readonly registry: {
947
+ readonly name: "query_shader_symbol";
948
+ readonly isWrite: false;
949
+ readonly isReadOnly: true;
950
+ readonly effect: "workspace_read";
951
+ readonly riskLevel: 0;
952
+ readonly concurrencyClass: "lsp-limited";
953
+ };
954
+ }, {
955
+ readonly tool: {
956
+ readonly name: "query_shader_compile_unit";
957
+ readonly description: "Read-only. Return the compile unit for a .shader root or .fxh include: root file, include members with resolution status and origin, include problems (missing/ambiguous/cycle), and the roots that include this file. MANDATORY before editing any .fxh: symbol validity depends on the whole compile unit (root + Includes + platform conditions), so raw text search across the repo does not prove shader semantics.";
958
+ readonly inputSchema: {
959
+ readonly type: "object";
960
+ readonly properties: {
961
+ readonly file: {
962
+ readonly type: "string";
963
+ readonly description: "Absolute or workspace-relative path of the .shader/.fxh file.";
964
+ };
965
+ };
966
+ readonly required: readonly ["file"];
967
+ };
968
+ };
969
+ readonly registry: {
970
+ readonly name: "query_shader_compile_unit";
971
+ readonly isWrite: false;
972
+ readonly isReadOnly: true;
973
+ readonly effect: "workspace_read";
974
+ readonly riskLevel: 0;
975
+ readonly concurrencyClass: "lsp-limited";
976
+ };
977
+ }, {
978
+ readonly tool: {
979
+ readonly name: "query_shader_platform_variants";
980
+ readonly description: "Read-only. Compare presence conditions, macros, and active symbols for every supported Paradox shader platform profile in a compile unit. MANDATORY before changing conditional shader code or macros; validating only the current platform is insufficient.";
981
+ readonly inputSchema: {
982
+ readonly type: "object";
983
+ readonly properties: {
984
+ readonly file: {
985
+ readonly type: "string";
986
+ readonly description: "Absolute or workspace-relative path of the .shader/.fxh file.";
987
+ };
988
+ };
989
+ readonly required: readonly ["file"];
990
+ };
991
+ };
992
+ readonly registry: {
993
+ readonly name: "query_shader_platform_variants";
994
+ readonly isWrite: false;
995
+ readonly isReadOnly: true;
996
+ readonly effect: "workspace_read";
997
+ readonly riskLevel: 0;
998
+ readonly concurrencyClass: "lsp-limited";
999
+ };
1000
+ }, {
1001
+ readonly tool: {
1002
+ readonly name: "query_shader_callers";
1003
+ readonly description: "Read-only. Return evidence of what references a shader Effect: data-script assignments and effectFile selections, each with file, logicalPath, origin, enclosingBlock, interfaceSprite/rendererSubtype, direct renderer inputs and bounded static GUI use sites when known, range, and provenance (sourceKind, confidence, gameVersion). MANDATORY before renaming or deleting an Effect.";
1004
+ readonly inputSchema: {
1005
+ readonly type: "object";
1006
+ readonly properties: {
1007
+ readonly effectName: {
1008
+ readonly type: "string";
1009
+ readonly description: "Exact shader Effect name.";
1010
+ };
1011
+ readonly limit: {
1012
+ readonly type: "number";
1013
+ readonly description: "Max evidence entries to return (default 100).";
1014
+ };
1015
+ };
1016
+ readonly required: readonly ["effectName"];
1017
+ };
1018
+ };
1019
+ readonly registry: {
1020
+ readonly name: "query_shader_callers";
1021
+ readonly isWrite: false;
1022
+ readonly isReadOnly: true;
1023
+ readonly effect: "workspace_read";
1024
+ readonly riskLevel: 0;
1025
+ readonly concurrencyClass: "lsp-limited";
1026
+ };
1027
+ }, {
1028
+ readonly tool: {
1029
+ readonly name: "explain_shader_reachability";
1030
+ readonly description: "Read-only. Explain why a shader Effect is reachable or why reachability is unknown: classification, declarations, evidence with provenance/confidence, and the rename policy decision. Respect renamePolicy - engine_hardcoded or unknown entry points must not be renamed. A newly declared Effect is NOT executed unless reachable via a data call, an effectFile convention, or a known engine entry. Pass effectName for one Effect, or file to page through all Effects declared in a shader file.";
1031
+ readonly inputSchema: {
1032
+ readonly type: "object";
1033
+ readonly properties: {
1034
+ readonly effectName: {
1035
+ readonly type: "string";
1036
+ readonly description: "Exact shader Effect name. Takes precedence over file.";
1037
+ };
1038
+ readonly file: {
1039
+ readonly type: "string";
1040
+ readonly description: "Absolute or workspace-relative path of a .shader/.fxh file; lists its Effects with cursor pagination.";
1041
+ };
1042
+ readonly limit: {
1043
+ readonly type: "number";
1044
+ readonly description: "Max results for the per-file form (1-500, default 100).";
1045
+ };
1046
+ readonly cursor: {
1047
+ readonly type: "number";
1048
+ readonly description: "Numeric offset returned as nextCursor by a previous per-file call. Default 0.";
1049
+ };
1050
+ };
1051
+ readonly required: readonly [];
1052
+ };
1053
+ };
1054
+ readonly registry: {
1055
+ readonly name: "explain_shader_reachability";
1056
+ readonly isWrite: false;
1057
+ readonly isReadOnly: true;
1058
+ readonly effect: "workspace_read";
1059
+ readonly riskLevel: 0;
1060
+ readonly concurrencyClass: "lsp-limited";
1061
+ };
1062
+ }, {
1063
+ readonly tool: {
1064
+ readonly name: "validate_shader";
1065
+ readonly description: "Read-only. Validate a .shader/.fxh file inside its compile unit and return structured diagnostics (code, severity, message, range). Run this on every affected compile-unit root after editing shader files.";
1066
+ readonly inputSchema: {
1067
+ readonly type: "object";
1068
+ readonly properties: {
1069
+ readonly file: {
1070
+ readonly type: "string";
1071
+ readonly description: "Absolute or workspace-relative path of the .shader/.fxh file.";
1072
+ };
1073
+ };
1074
+ readonly required: readonly ["file"];
1075
+ };
1076
+ };
1077
+ readonly registry: {
1078
+ readonly name: "validate_shader";
1079
+ readonly isWrite: false;
1080
+ readonly isReadOnly: true;
1081
+ readonly effect: "workspace_read";
1082
+ readonly riskLevel: 0;
1083
+ readonly concurrencyClass: "lsp-limited";
1084
+ };
1085
+ }, {
1086
+ readonly tool: {
1087
+ readonly name: "compare_shader_with_vanilla";
1088
+ readonly description: "Read-only. Structurally compare workspace shader declarations with vanilla: which declarations are effective and which vanilla declarations they override. Pass effectName for one Effect, or file for all Effects declared in a shader file.";
1089
+ readonly inputSchema: {
1090
+ readonly type: "object";
1091
+ readonly properties: {
1092
+ readonly effectName: {
1093
+ readonly type: "string";
1094
+ readonly description: "Exact shader Effect name. Takes precedence over file.";
1095
+ };
1096
+ readonly file: {
1097
+ readonly type: "string";
1098
+ readonly description: "Absolute or workspace-relative path of a .shader/.fxh file.";
1099
+ };
1100
+ };
1101
+ readonly required: readonly [];
1102
+ };
1103
+ };
1104
+ readonly registry: {
1105
+ readonly name: "compare_shader_with_vanilla";
1106
+ readonly isWrite: false;
1107
+ readonly isReadOnly: true;
1108
+ readonly effect: "workspace_read";
1109
+ readonly riskLevel: 0;
1110
+ readonly concurrencyClass: "lsp-limited";
1111
+ };
1112
+ }];