@keeveeg/godot-mcp 1.0.1 → 1.0.3

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 (224) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/server/dist/config.js +1 -1
  4. package/server/dist/godot-bridge.d.ts.map +1 -1
  5. package/server/dist/godot-bridge.js +264 -261
  6. package/server/dist/godot-bridge.js.map +1 -1
  7. package/server/dist/index.js +46 -45
  8. package/server/dist/server.d.ts.map +1 -1
  9. package/server/dist/server.js +25 -23
  10. package/server/dist/server.js.map +1 -1
  11. package/server/dist/tools/addon_management.d.ts.map +1 -1
  12. package/server/dist/tools/addon_management.js +37 -57
  13. package/server/dist/tools/addon_management.js.map +1 -1
  14. package/server/dist/tools/analysis.d.ts.map +1 -1
  15. package/server/dist/tools/analysis.js +21 -37
  16. package/server/dist/tools/analysis.js.map +1 -1
  17. package/server/dist/tools/animation.d.ts.map +1 -1
  18. package/server/dist/tools/animation.js +95 -135
  19. package/server/dist/tools/animation.js.map +1 -1
  20. package/server/dist/tools/audio.d.ts.map +1 -1
  21. package/server/dist/tools/audio.js +81 -109
  22. package/server/dist/tools/audio.js.map +1 -1
  23. package/server/dist/tools/audio_config.d.ts.map +1 -1
  24. package/server/dist/tools/audio_config.js +50 -76
  25. package/server/dist/tools/audio_config.js.map +1 -1
  26. package/server/dist/tools/batch.d.ts.map +1 -1
  27. package/server/dist/tools/batch.js +57 -89
  28. package/server/dist/tools/batch.js.map +1 -1
  29. package/server/dist/tools/build_config.d.ts.map +1 -1
  30. package/server/dist/tools/build_config.js +59 -91
  31. package/server/dist/tools/build_config.js.map +1 -1
  32. package/server/dist/tools/debug_config.d.ts.map +1 -1
  33. package/server/dist/tools/debug_config.js +46 -70
  34. package/server/dist/tools/debug_config.js.map +1 -1
  35. package/server/dist/tools/debugging.d.ts.map +1 -1
  36. package/server/dist/tools/debugging.js +51 -83
  37. package/server/dist/tools/debugging.js.map +1 -1
  38. package/server/dist/tools/editor.d.ts.map +1 -1
  39. package/server/dist/tools/editor.js +54 -90
  40. package/server/dist/tools/editor.js.map +1 -1
  41. package/server/dist/tools/editor_config.d.ts.map +1 -1
  42. package/server/dist/tools/editor_config.js +53 -85
  43. package/server/dist/tools/editor_config.js.map +1 -1
  44. package/server/dist/tools/export.d.ts.map +1 -1
  45. package/server/dist/tools/export.js +46 -74
  46. package/server/dist/tools/export.js.map +1 -1
  47. package/server/dist/tools/gameplay_automation.d.ts.map +1 -1
  48. package/server/dist/tools/gameplay_automation.js +70 -102
  49. package/server/dist/tools/gameplay_automation.js.map +1 -1
  50. package/server/dist/tools/index.js +42 -42
  51. package/server/dist/tools/input.d.ts.map +1 -1
  52. package/server/dist/tools/input.js +68 -100
  53. package/server/dist/tools/input.js.map +1 -1
  54. package/server/dist/tools/memory_profiling.d.ts.map +1 -1
  55. package/server/dist/tools/memory_profiling.js +31 -51
  56. package/server/dist/tools/memory_profiling.js.map +1 -1
  57. package/server/dist/tools/navigation.d.ts.map +1 -1
  58. package/server/dist/tools/navigation.js +86 -126
  59. package/server/dist/tools/navigation.js.map +1 -1
  60. package/server/dist/tools/node.d.ts.map +1 -1
  61. package/server/dist/tools/node.js +134 -202
  62. package/server/dist/tools/node.js.map +1 -1
  63. package/server/dist/tools/node_config.d.ts.map +1 -1
  64. package/server/dist/tools/node_config.js +58 -90
  65. package/server/dist/tools/node_config.js.map +1 -1
  66. package/server/dist/tools/particles.d.ts.map +1 -1
  67. package/server/dist/tools/particles.js +75 -111
  68. package/server/dist/tools/particles.js.map +1 -1
  69. package/server/dist/tools/physics.d.ts.map +1 -1
  70. package/server/dist/tools/physics.js +67 -99
  71. package/server/dist/tools/physics.js.map +1 -1
  72. package/server/dist/tools/physics_config.d.ts.map +1 -1
  73. package/server/dist/tools/physics_config.js +56 -88
  74. package/server/dist/tools/physics_config.js.map +1 -1
  75. package/server/dist/tools/platform_export.d.ts.map +1 -1
  76. package/server/dist/tools/platform_export.js +45 -69
  77. package/server/dist/tools/platform_export.js.map +1 -1
  78. package/server/dist/tools/platform_specific.d.ts.map +1 -1
  79. package/server/dist/tools/platform_specific.js +61 -85
  80. package/server/dist/tools/platform_specific.js.map +1 -1
  81. package/server/dist/tools/profiling.d.ts.map +1 -1
  82. package/server/dist/tools/profiling.js +13 -21
  83. package/server/dist/tools/profiling.js.map +1 -1
  84. package/server/dist/tools/project.d.ts.map +1 -1
  85. package/server/dist/tools/project.js +51 -79
  86. package/server/dist/tools/project.js.map +1 -1
  87. package/server/dist/tools/project_config.d.ts.map +1 -1
  88. package/server/dist/tools/project_config.js +88 -136
  89. package/server/dist/tools/project_config.js.map +1 -1
  90. package/server/dist/tools/project_creation.d.ts.map +1 -1
  91. package/server/dist/tools/project_creation.js +96 -140
  92. package/server/dist/tools/project_creation.js.map +1 -1
  93. package/server/dist/tools/rendering_config.d.ts.map +1 -1
  94. package/server/dist/tools/rendering_config.js +67 -103
  95. package/server/dist/tools/rendering_config.js.map +1 -1
  96. package/server/dist/tools/resource.js +77 -117
  97. package/server/dist/tools/resource_config.d.ts.map +1 -1
  98. package/server/dist/tools/resource_config.js +45 -69
  99. package/server/dist/tools/resource_config.js.map +1 -1
  100. package/server/dist/tools/runtime.d.ts.map +1 -1
  101. package/server/dist/tools/runtime.js +148 -224
  102. package/server/dist/tools/runtime.js.map +1 -1
  103. package/server/dist/tools/save_load.d.ts.map +1 -1
  104. package/server/dist/tools/save_load.js +36 -56
  105. package/server/dist/tools/save_load.js.map +1 -1
  106. package/server/dist/tools/scene.d.ts.map +1 -1
  107. package/server/dist/tools/scene.js +78 -122
  108. package/server/dist/tools/scene.js.map +1 -1
  109. package/server/dist/tools/scene3d.d.ts.map +1 -1
  110. package/server/dist/tools/scene3d.js +51 -75
  111. package/server/dist/tools/scene3d.js.map +1 -1
  112. package/server/dist/tools/scene_config.d.ts.map +1 -1
  113. package/server/dist/tools/scene_config.js +48 -72
  114. package/server/dist/tools/scene_config.js.map +1 -1
  115. package/server/dist/tools/script.js +68 -104
  116. package/server/dist/tools/script.js.map +1 -1
  117. package/server/dist/tools/shader.d.ts.map +1 -1
  118. package/server/dist/tools/shader.js +75 -111
  119. package/server/dist/tools/shader.js.map +1 -1
  120. package/server/dist/tools/shared-types.d.ts +2 -2
  121. package/server/dist/tools/shared-types.d.ts.map +1 -1
  122. package/server/dist/tools/shared-types.js +38 -36
  123. package/server/dist/tools/shared-types.js.map +1 -1
  124. package/server/dist/tools/testing.d.ts.map +1 -1
  125. package/server/dist/tools/testing.js +47 -69
  126. package/server/dist/tools/testing.js.map +1 -1
  127. package/server/dist/tools/theme.js +62 -90
  128. package/server/dist/tools/tilemap.js +58 -82
  129. package/server/dist/tools/visual_testing.d.ts.map +1 -1
  130. package/server/dist/tools/visual_testing.js +50 -74
  131. package/server/dist/tools/visual_testing.js.map +1 -1
  132. package/server/dist/types.js +15 -15
  133. package/server/dist/tools/accessibility.d.ts +0 -7
  134. package/server/dist/tools/accessibility.d.ts.map +0 -1
  135. package/server/dist/tools/accessibility.js +0 -71
  136. package/server/dist/tools/accessibility.js.map +0 -1
  137. package/server/dist/tools/analytics.d.ts +0 -7
  138. package/server/dist/tools/analytics.d.ts.map +0 -1
  139. package/server/dist/tools/analytics.js +0 -76
  140. package/server/dist/tools/analytics.js.map +0 -1
  141. package/server/dist/tools/asset_pipeline.d.ts +0 -7
  142. package/server/dist/tools/asset_pipeline.d.ts.map +0 -1
  143. package/server/dist/tools/asset_pipeline.js +0 -102
  144. package/server/dist/tools/asset_pipeline.js.map +0 -1
  145. package/server/dist/tools/asset_scaffolding.d.ts +0 -7
  146. package/server/dist/tools/asset_scaffolding.d.ts.map +0 -1
  147. package/server/dist/tools/asset_scaffolding.js +0 -113
  148. package/server/dist/tools/asset_scaffolding.js.map +0 -1
  149. package/server/dist/tools/cicd_pipeline.d.ts +0 -7
  150. package/server/dist/tools/cicd_pipeline.d.ts.map +0 -1
  151. package/server/dist/tools/cicd_pipeline.js +0 -125
  152. package/server/dist/tools/cicd_pipeline.js.map +0 -1
  153. package/server/dist/tools/cloud_services.d.ts +0 -7
  154. package/server/dist/tools/cloud_services.d.ts.map +0 -1
  155. package/server/dist/tools/cloud_services.js +0 -97
  156. package/server/dist/tools/cloud_services.js.map +0 -1
  157. package/server/dist/tools/code_generation.d.ts +0 -7
  158. package/server/dist/tools/code_generation.d.ts.map +0 -1
  159. package/server/dist/tools/code_generation.js +0 -79
  160. package/server/dist/tools/code_generation.js.map +0 -1
  161. package/server/dist/tools/code_quality.d.ts +0 -7
  162. package/server/dist/tools/code_quality.d.ts.map +0 -1
  163. package/server/dist/tools/code_quality.js +0 -98
  164. package/server/dist/tools/code_quality.js.map +0 -1
  165. package/server/dist/tools/collaboration.d.ts +0 -7
  166. package/server/dist/tools/collaboration.d.ts.map +0 -1
  167. package/server/dist/tools/collaboration.js +0 -73
  168. package/server/dist/tools/collaboration.js.map +0 -1
  169. package/server/dist/tools/documentation_tools.d.ts +0 -7
  170. package/server/dist/tools/documentation_tools.d.ts.map +0 -1
  171. package/server/dist/tools/documentation_tools.js +0 -89
  172. package/server/dist/tools/documentation_tools.js.map +0 -1
  173. package/server/dist/tools/game_template.d.ts +0 -7
  174. package/server/dist/tools/game_template.d.ts.map +0 -1
  175. package/server/dist/tools/game_template.js +0 -112
  176. package/server/dist/tools/game_template.js.map +0 -1
  177. package/server/dist/tools/git_integration.d.ts +0 -7
  178. package/server/dist/tools/git_integration.d.ts.map +0 -1
  179. package/server/dist/tools/git_integration.js +0 -75
  180. package/server/dist/tools/git_integration.js.map +0 -1
  181. package/server/dist/tools/headless_testing.d.ts +0 -7
  182. package/server/dist/tools/headless_testing.d.ts.map +0 -1
  183. package/server/dist/tools/headless_testing.js +0 -65
  184. package/server/dist/tools/headless_testing.js.map +0 -1
  185. package/server/dist/tools/iap_monetization.d.ts +0 -7
  186. package/server/dist/tools/iap_monetization.d.ts.map +0 -1
  187. package/server/dist/tools/iap_monetization.js +0 -70
  188. package/server/dist/tools/iap_monetization.js.map +0 -1
  189. package/server/dist/tools/localization.d.ts +0 -7
  190. package/server/dist/tools/localization.d.ts.map +0 -1
  191. package/server/dist/tools/localization.js +0 -97
  192. package/server/dist/tools/localization.js.map +0 -1
  193. package/server/dist/tools/marketing.d.ts +0 -7
  194. package/server/dist/tools/marketing.d.ts.map +0 -1
  195. package/server/dist/tools/marketing.js +0 -87
  196. package/server/dist/tools/marketing.js.map +0 -1
  197. package/server/dist/tools/mod_support.d.ts +0 -7
  198. package/server/dist/tools/mod_support.d.ts.map +0 -1
  199. package/server/dist/tools/mod_support.js +0 -93
  200. package/server/dist/tools/mod_support.js.map +0 -1
  201. package/server/dist/tools/networking.d.ts +0 -7
  202. package/server/dist/tools/networking.d.ts.map +0 -1
  203. package/server/dist/tools/networking.js +0 -94
  204. package/server/dist/tools/networking.js.map +0 -1
  205. package/server/dist/tools/performance_optimization.d.ts +0 -7
  206. package/server/dist/tools/performance_optimization.d.ts.map +0 -1
  207. package/server/dist/tools/performance_optimization.js +0 -75
  208. package/server/dist/tools/performance_optimization.js.map +0 -1
  209. package/server/dist/tools/scene_scaffolding.d.ts +0 -7
  210. package/server/dist/tools/scene_scaffolding.d.ts.map +0 -1
  211. package/server/dist/tools/scene_scaffolding.js +0 -110
  212. package/server/dist/tools/scene_scaffolding.js.map +0 -1
  213. package/server/dist/tools/script_scaffolding.d.ts +0 -7
  214. package/server/dist/tools/script_scaffolding.d.ts.map +0 -1
  215. package/server/dist/tools/script_scaffolding.js +0 -115
  216. package/server/dist/tools/script_scaffolding.js.map +0 -1
  217. package/server/dist/tools/security.d.ts +0 -7
  218. package/server/dist/tools/security.d.ts.map +0 -1
  219. package/server/dist/tools/security.js +0 -73
  220. package/server/dist/tools/security.js.map +0 -1
  221. package/server/dist/tools/version_control_advanced.d.ts +0 -7
  222. package/server/dist/tools/version_control_advanced.d.ts.map +0 -1
  223. package/server/dist/tools/version_control_advanced.js +0 -100
  224. package/server/dist/tools/version_control_advanced.js.map +0 -1
@@ -4,75 +4,53 @@
4
4
  import { callGodot } from '../server.js';
5
5
  import { z, NodePath, PropertyName, PropertyValue } from './shared-types.js';
6
6
  export function registerTestingTools(server, bridge) {
7
- // 1. run_test_scenario
8
- server.registerTool(
9
- 'run_test_scenario',
10
- {
11
- description: 'Run a multi-step test scenario against the running game',
12
- inputSchema: {
13
- name: z.string().optional().default('Unnamed Scenario').describe('Scenario name (default: "Unnamed Scenario")'),
14
- steps: z
15
- .array(
16
- z
17
- .object({
7
+ // 1. run_test_scenario
8
+ server.registerTool('run_test_scenario', {
9
+ description: 'Run a multi-step test scenario against the running game',
10
+ inputSchema: {
11
+ name: z.string().optional().default('Unnamed Scenario').describe('Scenario name (default: "Unnamed Scenario")'),
12
+ steps: z
13
+ .array(z
14
+ .object({
18
15
  type: z.enum(['add_node', 'delete_node', 'set_property', 'assert_node_state', 'connect_signal', 'wait']).describe('Step type'),
19
16
  params: z.record(z.unknown()).optional().describe('Parameters for this step'),
20
- })
21
- .catchall(z.unknown()),
22
- )
23
- .describe('Ordered test steps'),
24
- },
25
- },
26
- async (args) => callGodot(bridge, 'testing/run_scenario', args),
27
- );
28
- // 2. assert_node_state
29
- server.registerTool(
30
- 'assert_node_state',
31
- {
32
- description: 'Assert that a node property matches an expected value',
33
- inputSchema: {
34
- path: NodePath.describe('Node path in the running game'),
35
- property: PropertyName.describe('Property name to check'),
36
- expected: PropertyValue.describe('Expected value'),
37
- operator: z.string().optional().default('==').describe("Comparison operator: ==, !=, >, <, >=, <=, contains (default: '==')"),
38
- },
39
- },
40
- async (args) => callGodot(bridge, 'testing/assert_state', args),
41
- );
42
- // 3. assert_screen_text
43
- server.registerTool(
44
- 'assert_screen_text',
45
- {
46
- description: 'Assert that specific text appears on screen (OCR or UI element check)',
47
- inputSchema: {
48
- text: z.string().describe('Text that should appear on screen'),
49
- should_exist: z.boolean().optional().default(true).describe('Whether text should be present (true) or absent (false) (default: true)'),
50
- },
51
- },
52
- async (args) => callGodot(bridge, 'testing/assert_screen_text', args),
53
- );
54
- // 4. run_stress_test
55
- server.registerTool(
56
- 'run_stress_test',
57
- {
58
- description: 'Run a stress test on the game (spawn entities, measure performance)',
59
- inputSchema: {
60
- type: z.string().optional().default('Node2D').describe('Node type to spawn (default: Node2D)'),
61
- count: z.number().int().optional().default(100).describe('Number of entities to spawn (default: 100)'),
62
- parent_path: z.string().optional().describe('Parent node path for spawned entities'),
63
- properties: z.record(z.unknown()).optional().describe('Properties to set on each spawned entity'),
64
- },
65
- },
66
- async (args) => callGodot(bridge, 'testing/stress_test', args),
67
- );
68
- // 5. get_test_report
69
- server.registerTool(
70
- 'get_test_report',
71
- {
72
- description: 'Get aggregated results of all test runs in this session',
73
- inputSchema: {},
74
- },
75
- async () => callGodot(bridge, 'testing/get_report'),
76
- );
17
+ })
18
+ .catchall(z.unknown()))
19
+ .describe('Ordered test steps'),
20
+ },
21
+ }, async (args) => callGodot(bridge, 'testing/run_scenario', args));
22
+ // 2. assert_node_state
23
+ server.registerTool('assert_node_state', {
24
+ description: 'Assert that a node property matches an expected value',
25
+ inputSchema: {
26
+ path: NodePath.describe('Node path in the running game'),
27
+ property: PropertyName.describe('Property name to check'),
28
+ expected: PropertyValue.describe('Expected value'),
29
+ operator: z.string().optional().default('==').describe("Comparison operator: ==, !=, >, <, >=, <=, contains (default: '==')"),
30
+ },
31
+ }, async (args) => callGodot(bridge, 'testing/assert_state', args));
32
+ // 3. assert_screen_text
33
+ server.registerTool('assert_screen_text', {
34
+ description: 'Assert that specific text appears on screen (OCR or UI element check)',
35
+ inputSchema: {
36
+ text: z.string().describe('Text that should appear on screen'),
37
+ should_exist: z.boolean().optional().default(true).describe('Whether text should be present (true) or absent (false) (default: true)'),
38
+ },
39
+ }, async (args) => callGodot(bridge, 'testing/assert_screen_text', args));
40
+ // 4. run_stress_test
41
+ server.registerTool('run_stress_test', {
42
+ description: 'Run a stress test on the game (spawn entities, measure performance)',
43
+ inputSchema: {
44
+ type: z.string().optional().default('Node2D').describe('Node type to spawn (default: Node2D)'),
45
+ count: z.number().int().optional().default(100).describe('Number of entities to spawn (default: 100)'),
46
+ parent_path: z.string().optional().describe('Parent node path for spawned entities'),
47
+ properties: z.record(z.unknown()).optional().describe('Properties to set on each spawned entity'),
48
+ },
49
+ }, async (args) => callGodot(bridge, 'testing/stress_test', args));
50
+ // 5. get_test_report
51
+ server.registerTool('get_test_report', {
52
+ description: 'Get aggregated results of all test runs in this session',
53
+ inputSchema: {},
54
+ }, async () => callGodot(bridge, 'testing/get_report'));
77
55
  }
78
- //# sourceMappingURL=testing.js.map
56
+ //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"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"}
@@ -4,94 +4,66 @@
4
4
  import { callGodot } from '../server.js';
5
5
  import { z, ResourcePath, Properties } from './shared-types.js';
6
6
  export function registerThemeTools(server, bridge) {
7
- // 1. create_theme
8
- server.registerTool(
9
- 'create_theme',
10
- {
11
- description: 'Create a new Theme resource',
12
- inputSchema: {
13
- path: ResourcePath.describe("File path to save the theme (e.g. 'res://themes/dark.tres')"),
14
- },
15
- },
16
- async (args) => callGodot(bridge, 'theme/create', args),
17
- );
18
- // 2. delete_theme
19
- server.registerTool(
20
- 'delete_theme',
21
- {
22
- description: 'Delete a theme resource file from the project',
23
- inputSchema: {
24
- path: z.string().describe('Theme file path to delete (e.g. res://themes/my_theme.tres)'),
25
- },
26
- },
27
- async (args) => callGodot(bridge, 'theme/delete', args),
28
- );
29
- // 3. set_theme_color
30
- server.registerTool(
31
- 'set_theme_color',
32
- {
33
- description: 'Set a color in a theme for a specific control type',
34
- inputSchema: {
35
- path: ResourcePath.describe('Theme resource path'),
36
- theme_type: z.string().describe("Control type (e.g. 'Button', 'Label', 'Panel')"),
37
- name: z.string().describe("Color name (e.g. 'font_color', 'font_hover_color')"),
38
- color: z.string().describe("Color value as hex (e.g. '#FF0000') or named color"),
39
- },
40
- },
41
- async (args) => callGodot(bridge, 'theme/set_color', args),
42
- );
43
- // 4. set_theme_constant
44
- server.registerTool(
45
- 'set_theme_constant',
46
- {
47
- description: 'Set a constant value in a theme',
48
- inputSchema: {
49
- path: ResourcePath.describe('Theme resource path'),
50
- theme_type: z.string().describe('Control type'),
51
- name: z.string().describe("Constant name (e.g. 'hseparation', 'vseparation')"),
52
- value: z.number().int().describe('Constant integer value'),
53
- },
54
- },
55
- async (args) => callGodot(bridge, 'theme/set_constant', args),
56
- );
57
- // 5. set_theme_font_size
58
- server.registerTool(
59
- 'set_theme_font_size',
60
- {
61
- description: 'Set a font size in a theme',
62
- inputSchema: {
63
- path: ResourcePath.describe('Theme resource path'),
64
- theme_type: z.string().describe('Control type'),
65
- name: z.string().describe("Size name (e.g. 'font_size')"),
66
- size: z.number().int().positive().describe('Font size in pixels'),
67
- },
68
- },
69
- async (args) => callGodot(bridge, 'theme/set_font_size', args),
70
- );
71
- // 6. set_theme_stylebox
72
- server.registerTool(
73
- 'set_theme_stylebox',
74
- {
75
- description: 'Set a StyleBox in a theme',
76
- inputSchema: {
77
- path: ResourcePath.describe('Theme resource path'),
78
- theme_type: z.string().describe('Control type'),
79
- name: z.string().describe("StyleBox name (e.g. 'normal', 'hover', 'pressed')"),
80
- properties: Properties.describe('StyleBox properties (e.g. bg_color, border_width)'),
81
- },
82
- },
83
- async (args) => callGodot(bridge, 'theme/set_stylebox', args),
84
- );
85
- // 7. get_theme_info
86
- server.registerTool(
87
- 'get_theme_info',
88
- {
89
- description: 'Get information about a theme including all its overrides',
90
- inputSchema: {
91
- path: ResourcePath.describe('Theme resource path'),
92
- },
93
- },
94
- async (args) => callGodot(bridge, 'theme/get_info', args),
95
- );
7
+ // 1. create_theme
8
+ server.registerTool('create_theme', {
9
+ description: 'Create a new Theme resource',
10
+ inputSchema: {
11
+ path: ResourcePath.describe("File path to save the theme (e.g. 'res://themes/dark.tres')"),
12
+ },
13
+ }, async (args) => callGodot(bridge, 'theme/create', args));
14
+ // 2. delete_theme
15
+ server.registerTool('delete_theme', {
16
+ description: 'Delete a theme resource file from the project',
17
+ inputSchema: {
18
+ path: z.string().describe('Theme file path to delete (e.g. res://themes/my_theme.tres)'),
19
+ },
20
+ }, async (args) => callGodot(bridge, 'theme/delete', args));
21
+ // 3. set_theme_color
22
+ server.registerTool('set_theme_color', {
23
+ description: 'Set a color in a theme for a specific control type',
24
+ inputSchema: {
25
+ path: ResourcePath.describe('Theme resource path'),
26
+ theme_type: z.string().describe("Control type (e.g. 'Button', 'Label', 'Panel')"),
27
+ name: z.string().describe("Color name (e.g. 'font_color', 'font_hover_color')"),
28
+ color: z.string().describe("Color value as hex (e.g. '#FF0000') or named color"),
29
+ },
30
+ }, async (args) => callGodot(bridge, 'theme/set_color', args));
31
+ // 4. set_theme_constant
32
+ server.registerTool('set_theme_constant', {
33
+ description: 'Set a constant value in a theme',
34
+ inputSchema: {
35
+ path: ResourcePath.describe('Theme resource path'),
36
+ theme_type: z.string().describe('Control type'),
37
+ name: z.string().describe("Constant name (e.g. 'hseparation', 'vseparation')"),
38
+ value: z.number().int().describe('Constant integer value'),
39
+ },
40
+ }, async (args) => callGodot(bridge, 'theme/set_constant', args));
41
+ // 5. set_theme_font_size
42
+ server.registerTool('set_theme_font_size', {
43
+ description: 'Set a font size in a theme',
44
+ inputSchema: {
45
+ path: ResourcePath.describe('Theme resource path'),
46
+ theme_type: z.string().describe('Control type'),
47
+ name: z.string().describe("Size name (e.g. 'font_size')"),
48
+ size: z.number().int().positive().describe('Font size in pixels'),
49
+ },
50
+ }, async (args) => callGodot(bridge, 'theme/set_font_size', args));
51
+ // 6. set_theme_stylebox
52
+ server.registerTool('set_theme_stylebox', {
53
+ description: 'Set a StyleBox in a theme',
54
+ inputSchema: {
55
+ path: ResourcePath.describe('Theme resource path'),
56
+ theme_type: z.string().describe('Control type'),
57
+ name: z.string().describe("StyleBox name (e.g. 'normal', 'hover', 'pressed')"),
58
+ properties: Properties.describe('StyleBox properties (e.g. bg_color, border_width)'),
59
+ },
60
+ }, async (args) => callGodot(bridge, 'theme/set_stylebox', args));
61
+ // 7. get_theme_info
62
+ server.registerTool('get_theme_info', {
63
+ description: 'Get information about a theme including all its overrides',
64
+ inputSchema: {
65
+ path: ResourcePath.describe('Theme resource path'),
66
+ },
67
+ }, async (args) => callGodot(bridge, 'theme/get_info', args));
96
68
  }
97
- //# sourceMappingURL=theme.js.map
69
+ //# sourceMappingURL=theme.js.map
@@ -4,86 +4,62 @@
4
4
  import { callGodot } from '../server.js';
5
5
  import { z, NodePath, Coord2D } from './shared-types.js';
6
6
  export function registerTilemapTools(server, bridge) {
7
- // 1. tilemap_set_cell
8
- server.registerTool(
9
- 'tilemap_set_cell',
10
- {
11
- description: 'Set a single cell in a TileMap',
12
- inputSchema: {
13
- path: NodePath.describe('TileMap node path'),
14
- coords: Coord2D,
15
- source_id: z.number().int().optional().describe('TileSet source ID'),
16
- atlas_coords: Coord2D.optional().describe('Atlas coordinates [x, y]'),
17
- alternative_tile: z.number().int().optional().describe('Alternative tile ID'),
18
- },
19
- },
20
- async (args) => callGodot(bridge, 'tilemap/set_cell', args),
21
- );
22
- // 2. tilemap_fill_rect
23
- server.registerTool(
24
- 'tilemap_fill_rect',
25
- {
26
- description: 'Fill a rectangular area of a TileMap with a tile',
27
- inputSchema: {
28
- path: NodePath.describe('TileMap node path'),
29
- rect: z
30
- .object({
31
- x: z.number().int(),
32
- y: z.number().int(),
33
- w: z.number().int().positive(),
34
- h: z.number().int().positive(),
35
- })
36
- .describe('Rectangle to fill'),
37
- source_id: z.number().int().optional().describe('TileSet source ID'),
38
- atlas_coords: Coord2D.optional().describe('Atlas coordinates [x, y]'),
39
- },
40
- },
41
- async (args) => callGodot(bridge, 'tilemap/fill_rect', args),
42
- );
43
- // 3. tilemap_get_cell
44
- server.registerTool(
45
- 'tilemap_get_cell',
46
- {
47
- description: 'Get the tile data at a specific cell',
48
- inputSchema: {
49
- path: NodePath.describe('TileMap node path'),
50
- coords: Coord2D,
51
- },
52
- },
53
- async (args) => callGodot(bridge, 'tilemap/get_cell', args),
54
- );
55
- // 4. tilemap_clear
56
- server.registerTool(
57
- 'tilemap_clear',
58
- {
59
- description: 'Clear cells in a TileMap area or the entire map',
60
- inputSchema: {
61
- path: NodePath.describe('TileMap node path'),
62
- },
63
- },
64
- async (args) => callGodot(bridge, 'tilemap/clear', args),
65
- );
66
- // 5. tilemap_get_info
67
- server.registerTool(
68
- 'tilemap_get_info',
69
- {
70
- description: 'Get TileMap configuration and TileSet information',
71
- inputSchema: {
72
- path: NodePath.describe('TileMap node path'),
73
- },
74
- },
75
- async (args) => callGodot(bridge, 'tilemap/get_info', args),
76
- );
77
- // 6. tilemap_get_used_cells
78
- server.registerTool(
79
- 'tilemap_get_used_cells',
80
- {
81
- description: 'Get all used cell coordinates in a TileMap',
82
- inputSchema: {
83
- path: NodePath.describe('TileMap node path'),
84
- },
85
- },
86
- async (args) => callGodot(bridge, 'tilemap/get_used_cells', args),
87
- );
7
+ // 1. tilemap_set_cell
8
+ server.registerTool('tilemap_set_cell', {
9
+ description: 'Set a single cell in a TileMap',
10
+ inputSchema: {
11
+ path: NodePath.describe('TileMap node path'),
12
+ coords: Coord2D,
13
+ source_id: z.number().int().optional().describe('TileSet source ID'),
14
+ atlas_coords: Coord2D.optional().describe('Atlas coordinates [x, y]'),
15
+ alternative_tile: z.number().int().optional().describe('Alternative tile ID'),
16
+ },
17
+ }, async (args) => callGodot(bridge, 'tilemap/set_cell', args));
18
+ // 2. tilemap_fill_rect
19
+ server.registerTool('tilemap_fill_rect', {
20
+ description: 'Fill a rectangular area of a TileMap with a tile',
21
+ inputSchema: {
22
+ path: NodePath.describe('TileMap node path'),
23
+ rect: z
24
+ .object({
25
+ x: z.number().int(),
26
+ y: z.number().int(),
27
+ w: z.number().int().positive(),
28
+ h: z.number().int().positive(),
29
+ })
30
+ .describe('Rectangle to fill'),
31
+ source_id: z.number().int().optional().describe('TileSet source ID'),
32
+ atlas_coords: Coord2D.optional().describe('Atlas coordinates [x, y]'),
33
+ },
34
+ }, async (args) => callGodot(bridge, 'tilemap/fill_rect', args));
35
+ // 3. tilemap_get_cell
36
+ server.registerTool('tilemap_get_cell', {
37
+ description: 'Get the tile data at a specific cell',
38
+ inputSchema: {
39
+ path: NodePath.describe('TileMap node path'),
40
+ coords: Coord2D,
41
+ },
42
+ }, async (args) => callGodot(bridge, 'tilemap/get_cell', args));
43
+ // 4. tilemap_clear
44
+ server.registerTool('tilemap_clear', {
45
+ description: 'Clear cells in a TileMap area or the entire map',
46
+ inputSchema: {
47
+ path: NodePath.describe('TileMap node path'),
48
+ },
49
+ }, async (args) => callGodot(bridge, 'tilemap/clear', args));
50
+ // 5. tilemap_get_info
51
+ server.registerTool('tilemap_get_info', {
52
+ description: 'Get TileMap configuration and TileSet information',
53
+ inputSchema: {
54
+ path: NodePath.describe('TileMap node path'),
55
+ },
56
+ }, async (args) => callGodot(bridge, 'tilemap/get_info', args));
57
+ // 6. tilemap_get_used_cells
58
+ server.registerTool('tilemap_get_used_cells', {
59
+ description: 'Get all used cell coordinates in a TileMap',
60
+ inputSchema: {
61
+ path: NodePath.describe('TileMap node path'),
62
+ },
63
+ }, async (args) => callGodot(bridge, 'tilemap/get_used_cells', args));
88
64
  }
89
- //# sourceMappingURL=tilemap.js.map
65
+ //# sourceMappingURL=tilemap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"visual_testing.d.ts","sourceRoot":"","sources":["../../src/tools/visual_testing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CA6GvF"}
1
+ {"version":3,"file":"visual_testing.d.ts","sourceRoot":"","sources":["../../src/tools/visual_testing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CA+EvF"}
@@ -4,78 +4,54 @@
4
4
  import { callGodot } from '../server.js';
5
5
  import { z, Name, FilePath } from './shared-types.js';
6
6
  export function registerVisualTestingTools(server, bridge) {
7
- // 1. take_screenshot_with_context
8
- server.registerTool(
9
- 'take_screenshot_with_context',
10
- {
11
- description: 'Take a screenshot with scene context metadata (node tree, properties of specified nodes)',
12
- inputSchema: {
13
- name: Name.describe('Name for this screenshot (used as filename, e.g. "main_menu")'),
14
- include_nodes: z.array(z.string()).optional().describe('Node paths to include property data for (requires include_props=true)'),
15
- include_props: z.boolean().optional().default(false).describe('Whether to include property snapshots for listed include_nodes (default: false)'),
16
- },
17
- },
18
- async (args) => callGodot(bridge, 'take_screenshot_with_context', args),
19
- );
20
- // 2. compare_screenshots
21
- server.registerTool(
22
- 'compare_screenshots',
23
- {
24
- description: 'Compare two screenshots pixel-by-pixel and return a diff result with mismatch percentage',
25
- inputSchema: {
26
- baseline: FilePath.describe('Path to the baseline screenshot'),
27
- current: FilePath.describe('Path to the current screenshot'),
28
- threshold: z.number().min(0).max(1).optional().default(0.01).describe('Pixel difference threshold 0-1 (default: 0.01)'),
29
- },
30
- },
31
- async (args) => callGodot(bridge, 'compare_screenshots', args),
32
- );
33
- // 3. assert_visual_match
34
- server.registerTool(
35
- 'assert_visual_match',
36
- {
37
- description: 'Assert that a screenshot matches a baseline within a threshold - pass/fail result',
38
- inputSchema: {
39
- name: Name.describe('Screenshot name to check must match a name previously used with take_screenshot_with_context'),
40
- baseline: FilePath.describe('Path or name of the baseline screenshot (resolves against baselines directory if not a full path)'),
41
- threshold: z.number().min(0).max(1).optional().default(0.01).describe('Acceptable difference threshold (default: 0.01)'),
42
- },
43
- },
44
- async (args) => callGodot(bridge, 'assert_visual_match', args),
45
- );
46
- // 4. record_visual_regression
47
- server.registerTool(
48
- 'record_visual_regression',
49
- {
50
- description: 'Record multiple frames over time for visual regression testing',
51
- inputSchema: {
52
- test_name: Name.describe('Name for this recording session'),
53
- frames: z.number().int().min(1).max(100).optional().default(10).describe('Number of frames to capture (default: 10)'),
54
- interval: z.number().min(0.1).max(10).optional().default(0.5).describe('Seconds between captures (default: 0.5)'),
55
- },
56
- },
57
- async (args) => callGodot(bridge, 'record_visual_regression', args),
58
- );
59
- // 5. get_visual_diff_report
60
- server.registerTool(
61
- 'get_visual_diff_report',
62
- {
63
- description: 'Get the aggregated visual regression report from all assert_visual_match calls in this session',
64
- inputSchema: {},
65
- },
66
- async () => callGodot(bridge, 'get_visual_diff_report'),
67
- );
68
- // 6. set_visual_baseline
69
- server.registerTool(
70
- 'set_visual_baseline',
71
- {
72
- description: 'Set or update a visual baseline for future comparisons',
73
- inputSchema: {
74
- name: Name.describe('Baseline name identifier'),
75
- screenshot_path: FilePath.describe('Path to the screenshot to use as baseline'),
76
- },
77
- },
78
- async (args) => callGodot(bridge, 'set_visual_baseline', args),
79
- );
7
+ // 1. take_screenshot_with_context
8
+ server.registerTool('take_screenshot_with_context', {
9
+ description: 'Take a screenshot with scene context metadata (node tree, properties of specified nodes)',
10
+ inputSchema: {
11
+ name: Name.describe('Name for this screenshot (used as filename, e.g. "main_menu")'),
12
+ include_nodes: z.array(z.string()).optional().describe('Node paths to include property data for (requires include_props=true)'),
13
+ include_props: z.boolean().optional().default(false).describe('Whether to include property snapshots for listed include_nodes (default: false)'),
14
+ },
15
+ }, async (args) => callGodot(bridge, 'take_screenshot_with_context', args));
16
+ // 2. compare_screenshots
17
+ server.registerTool('compare_screenshots', {
18
+ description: 'Compare two screenshots pixel-by-pixel and return a diff result with mismatch percentage',
19
+ inputSchema: {
20
+ baseline: FilePath.describe('Path to the baseline screenshot'),
21
+ current: FilePath.describe('Path to the current screenshot'),
22
+ threshold: z.number().min(0).max(1).optional().default(0.01).describe('Pixel difference threshold 0-1 (default: 0.01)'),
23
+ },
24
+ }, async (args) => callGodot(bridge, 'compare_screenshots', args));
25
+ // 3. assert_visual_match
26
+ server.registerTool('assert_visual_match', {
27
+ description: 'Assert that a screenshot matches a baseline within a threshold - pass/fail result',
28
+ inputSchema: {
29
+ name: Name.describe('Screenshot name to check — must match a name previously used with take_screenshot_with_context'),
30
+ baseline: FilePath.describe('Path or name of the baseline screenshot (resolves against baselines directory if not a full path)'),
31
+ threshold: z.number().min(0).max(1).optional().default(0.01).describe('Acceptable difference threshold (default: 0.01)'),
32
+ },
33
+ }, async (args) => callGodot(bridge, 'assert_visual_match', args));
34
+ // 4. record_visual_regression
35
+ server.registerTool('record_visual_regression', {
36
+ description: 'Record multiple frames over time for visual regression testing',
37
+ inputSchema: {
38
+ test_name: Name.describe('Name for this recording session'),
39
+ frames: z.number().int().min(1).max(100).optional().default(10).describe('Number of frames to capture (default: 10)'),
40
+ interval: z.number().min(0.1).max(10).optional().default(0.5).describe('Seconds between captures (default: 0.5)'),
41
+ },
42
+ }, async (args) => callGodot(bridge, 'record_visual_regression', args));
43
+ // 5. get_visual_diff_report
44
+ server.registerTool('get_visual_diff_report', {
45
+ description: 'Get the aggregated visual regression report from all assert_visual_match calls in this session',
46
+ inputSchema: {},
47
+ }, async () => callGodot(bridge, 'get_visual_diff_report'));
48
+ // 6. set_visual_baseline
49
+ server.registerTool('set_visual_baseline', {
50
+ description: 'Set or update a visual baseline for future comparisons',
51
+ inputSchema: {
52
+ name: Name.describe('Baseline name identifier'),
53
+ screenshot_path: FilePath.describe('Path to the screenshot to use as baseline'),
54
+ },
55
+ }, async (args) => callGodot(bridge, 'set_visual_baseline', args));
80
56
  }
81
- //# sourceMappingURL=visual_testing.js.map
57
+ //# sourceMappingURL=visual_testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"visual_testing.js","sourceRoot":"","sources":["../../src/tools/visual_testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visual_testing.js","sourceRoot":"","sources":["../../src/tools/visual_testing.ts"],"names":[],"mappings":"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"}