xdebug-mcp 1.0.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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +341 -0
  3. package/dist/config.d.ts +36 -0
  4. package/dist/config.js +47 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/dbgp/connection.d.ts +52 -0
  7. package/dist/dbgp/connection.js +362 -0
  8. package/dist/dbgp/connection.js.map +1 -0
  9. package/dist/dbgp/index.d.ts +3 -0
  10. package/dist/dbgp/index.js +4 -0
  11. package/dist/dbgp/index.js.map +1 -0
  12. package/dist/dbgp/server.d.ts +34 -0
  13. package/dist/dbgp/server.js +94 -0
  14. package/dist/dbgp/server.js.map +1 -0
  15. package/dist/dbgp/types.d.ts +112 -0
  16. package/dist/dbgp/types.js +28 -0
  17. package/dist/dbgp/types.js.map +1 -0
  18. package/dist/index.d.ts +7 -0
  19. package/dist/index.js +93 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/session/code-coverage.d.ts +94 -0
  22. package/dist/session/code-coverage.js +226 -0
  23. package/dist/session/code-coverage.js.map +1 -0
  24. package/dist/session/debug-config.d.ts +102 -0
  25. package/dist/session/debug-config.js +194 -0
  26. package/dist/session/debug-config.js.map +1 -0
  27. package/dist/session/index.d.ts +10 -0
  28. package/dist/session/index.js +11 -0
  29. package/dist/session/index.js.map +1 -0
  30. package/dist/session/logpoint-manager.d.ts +94 -0
  31. package/dist/session/logpoint-manager.js +167 -0
  32. package/dist/session/logpoint-manager.js.map +1 -0
  33. package/dist/session/manager.d.ts +41 -0
  34. package/dist/session/manager.js +135 -0
  35. package/dist/session/manager.js.map +1 -0
  36. package/dist/session/profiler.d.ts +89 -0
  37. package/dist/session/profiler.js +191 -0
  38. package/dist/session/profiler.js.map +1 -0
  39. package/dist/session/request-context.d.ts +50 -0
  40. package/dist/session/request-context.js +182 -0
  41. package/dist/session/request-context.js.map +1 -0
  42. package/dist/session/session-export.d.ts +83 -0
  43. package/dist/session/session-export.js +320 -0
  44. package/dist/session/session-export.js.map +1 -0
  45. package/dist/session/session.d.ts +92 -0
  46. package/dist/session/session.js +369 -0
  47. package/dist/session/session.js.map +1 -0
  48. package/dist/session/step-filter.d.ts +81 -0
  49. package/dist/session/step-filter.js +174 -0
  50. package/dist/session/step-filter.js.map +1 -0
  51. package/dist/session/watch-manager.d.ts +64 -0
  52. package/dist/session/watch-manager.js +137 -0
  53. package/dist/session/watch-manager.js.map +1 -0
  54. package/dist/tools/advanced.d.ts +26 -0
  55. package/dist/tools/advanced.js +502 -0
  56. package/dist/tools/advanced.js.map +1 -0
  57. package/dist/tools/breakpoints.d.ts +6 -0
  58. package/dist/tools/breakpoints.js +308 -0
  59. package/dist/tools/breakpoints.js.map +1 -0
  60. package/dist/tools/execution.d.ts +6 -0
  61. package/dist/tools/execution.js +283 -0
  62. package/dist/tools/execution.js.map +1 -0
  63. package/dist/tools/index.d.ts +31 -0
  64. package/dist/tools/index.js +44 -0
  65. package/dist/tools/index.js.map +1 -0
  66. package/dist/tools/inspection.d.ts +7 -0
  67. package/dist/tools/inspection.js +431 -0
  68. package/dist/tools/inspection.js.map +1 -0
  69. package/dist/tools/session.d.ts +6 -0
  70. package/dist/tools/session.js +164 -0
  71. package/dist/tools/session.js.map +1 -0
  72. package/dist/utils/logger.d.ts +16 -0
  73. package/dist/utils/logger.js +47 -0
  74. package/dist/utils/logger.js.map +1 -0
  75. package/dist/utils/path-mapper.d.ts +13 -0
  76. package/dist/utils/path-mapper.js +56 -0
  77. package/dist/utils/path-mapper.js.map +1 -0
  78. package/package.json +56 -0
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Breakpoint MCP Tools
3
+ */
4
+ import { z } from 'zod';
5
+ export function registerBreakpointTools(server, sessionManager) {
6
+ // Set a line breakpoint
7
+ server.tool('set_breakpoint', 'Set a breakpoint in PHP code. Supports line breakpoints and conditional breakpoints with hit counts.', {
8
+ file: z
9
+ .string()
10
+ .describe('Full file path (use container path for Docker, e.g., /var/www/html/index.php)'),
11
+ line: z.number().int().positive().describe('Line number for the breakpoint'),
12
+ condition: z
13
+ .string()
14
+ .optional()
15
+ .describe("Optional PHP condition expression (e.g., '$x > 10' or '$user !== null')"),
16
+ hit_value: z
17
+ .number()
18
+ .int()
19
+ .optional()
20
+ .describe('Hit count value - break after this many hits'),
21
+ hit_condition: z
22
+ .enum(['>=', '==', '%'])
23
+ .optional()
24
+ .describe('Hit condition: >= (break when hits >= value), == (break on exact hit), % (break every N hits)'),
25
+ session_id: z
26
+ .string()
27
+ .optional()
28
+ .describe('Session ID (uses active session if not specified)'),
29
+ }, async ({ file, line, condition, hit_value, hit_condition, session_id }) => {
30
+ const session = sessionManager.resolveSession(session_id);
31
+ if (!session) {
32
+ return {
33
+ content: [
34
+ {
35
+ type: 'text',
36
+ text: JSON.stringify({
37
+ error: 'No active debug session',
38
+ message: 'Start a PHP script with Xdebug enabled to create a debug session first.',
39
+ }),
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ try {
45
+ const breakpoint = await session.setLineBreakpoint(file, line, {
46
+ condition,
47
+ hitValue: hit_value,
48
+ hitCondition: hit_condition,
49
+ });
50
+ return {
51
+ content: [
52
+ {
53
+ type: 'text',
54
+ text: JSON.stringify({
55
+ success: true,
56
+ breakpoint: {
57
+ id: breakpoint.id,
58
+ type: breakpoint.type,
59
+ file,
60
+ line,
61
+ condition: condition || null,
62
+ hitValue: hit_value || null,
63
+ hitCondition: hit_condition || null,
64
+ resolved: breakpoint.resolved,
65
+ state: breakpoint.state,
66
+ },
67
+ }, null, 2),
68
+ },
69
+ ],
70
+ };
71
+ }
72
+ catch (error) {
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: JSON.stringify({
78
+ error: 'Failed to set breakpoint',
79
+ message: error instanceof Error ? error.message : String(error),
80
+ file,
81
+ line,
82
+ }),
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ });
88
+ // Set exception breakpoint
89
+ server.tool('set_exception_breakpoint', 'Set a breakpoint that triggers when a specific exception is thrown', {
90
+ exception: z
91
+ .string()
92
+ .default('*')
93
+ .describe("Exception class name to break on (use '*' for all exceptions, or specific like 'RuntimeException')"),
94
+ session_id: z.string().optional().describe('Session ID'),
95
+ }, async ({ exception, session_id }) => {
96
+ const session = sessionManager.resolveSession(session_id);
97
+ if (!session) {
98
+ return {
99
+ content: [
100
+ {
101
+ type: 'text',
102
+ text: JSON.stringify({ error: 'No active debug session' }),
103
+ },
104
+ ],
105
+ };
106
+ }
107
+ try {
108
+ const breakpoint = await session.setExceptionBreakpoint(exception);
109
+ return {
110
+ content: [
111
+ {
112
+ type: 'text',
113
+ text: JSON.stringify({
114
+ success: true,
115
+ breakpoint: {
116
+ id: breakpoint.id,
117
+ type: 'exception',
118
+ exception,
119
+ state: breakpoint.state,
120
+ },
121
+ }, null, 2),
122
+ },
123
+ ],
124
+ };
125
+ }
126
+ catch (error) {
127
+ return {
128
+ content: [
129
+ {
130
+ type: 'text',
131
+ text: JSON.stringify({
132
+ error: 'Failed to set exception breakpoint',
133
+ message: error instanceof Error ? error.message : String(error),
134
+ }),
135
+ },
136
+ ],
137
+ };
138
+ }
139
+ });
140
+ // Set call breakpoint (function entry)
141
+ server.tool('set_call_breakpoint', 'Set a breakpoint that triggers when a specific function is called', {
142
+ function_name: z
143
+ .string()
144
+ .describe("Function name to break on (e.g., 'myFunction' or 'MyClass::myMethod')"),
145
+ session_id: z.string().optional().describe('Session ID'),
146
+ }, async ({ function_name, session_id }) => {
147
+ const session = sessionManager.resolveSession(session_id);
148
+ if (!session) {
149
+ return {
150
+ content: [
151
+ {
152
+ type: 'text',
153
+ text: JSON.stringify({ error: 'No active debug session' }),
154
+ },
155
+ ],
156
+ };
157
+ }
158
+ try {
159
+ const breakpoint = await session.setCallBreakpoint(function_name);
160
+ return {
161
+ content: [
162
+ {
163
+ type: 'text',
164
+ text: JSON.stringify({
165
+ success: true,
166
+ breakpoint: {
167
+ id: breakpoint.id,
168
+ type: 'call',
169
+ function: function_name,
170
+ state: breakpoint.state,
171
+ },
172
+ }, null, 2),
173
+ },
174
+ ],
175
+ };
176
+ }
177
+ catch (error) {
178
+ return {
179
+ content: [
180
+ {
181
+ type: 'text',
182
+ text: JSON.stringify({
183
+ error: 'Failed to set call breakpoint',
184
+ message: error instanceof Error ? error.message : String(error),
185
+ }),
186
+ },
187
+ ],
188
+ };
189
+ }
190
+ });
191
+ // Remove a breakpoint
192
+ server.tool('remove_breakpoint', 'Remove a breakpoint by its ID', {
193
+ breakpoint_id: z.string().describe('The breakpoint ID to remove'),
194
+ session_id: z.string().optional().describe('Session ID'),
195
+ }, async ({ breakpoint_id, session_id }) => {
196
+ const session = sessionManager.resolveSession(session_id);
197
+ if (!session) {
198
+ return {
199
+ content: [
200
+ {
201
+ type: 'text',
202
+ text: JSON.stringify({ error: 'No active debug session' }),
203
+ },
204
+ ],
205
+ };
206
+ }
207
+ const success = await session.removeBreakpoint(breakpoint_id);
208
+ return {
209
+ content: [
210
+ {
211
+ type: 'text',
212
+ text: JSON.stringify({
213
+ success,
214
+ breakpoint_id,
215
+ message: success
216
+ ? 'Breakpoint removed'
217
+ : 'Failed to remove breakpoint (may not exist)',
218
+ }),
219
+ },
220
+ ],
221
+ };
222
+ });
223
+ // Update breakpoint (enable/disable, change hit conditions)
224
+ server.tool('update_breakpoint', 'Update a breakpoint (enable/disable or change hit conditions)', {
225
+ breakpoint_id: z.string().describe('The breakpoint ID to update'),
226
+ state: z
227
+ .enum(['enabled', 'disabled'])
228
+ .optional()
229
+ .describe('Enable or disable the breakpoint'),
230
+ hit_value: z.number().int().optional().describe('New hit count value'),
231
+ hit_condition: z
232
+ .enum(['>=', '==', '%'])
233
+ .optional()
234
+ .describe('New hit condition'),
235
+ session_id: z.string().optional().describe('Session ID'),
236
+ }, async ({ breakpoint_id, state, hit_value, hit_condition, session_id }) => {
237
+ const session = sessionManager.resolveSession(session_id);
238
+ if (!session) {
239
+ return {
240
+ content: [
241
+ {
242
+ type: 'text',
243
+ text: JSON.stringify({ error: 'No active debug session' }),
244
+ },
245
+ ],
246
+ };
247
+ }
248
+ const success = await session.updateBreakpoint(breakpoint_id, {
249
+ state: state,
250
+ hitValue: hit_value,
251
+ hitCondition: hit_condition,
252
+ });
253
+ return {
254
+ content: [
255
+ {
256
+ type: 'text',
257
+ text: JSON.stringify({
258
+ success,
259
+ breakpoint_id,
260
+ updates: { state, hit_value, hit_condition },
261
+ }),
262
+ },
263
+ ],
264
+ };
265
+ });
266
+ // List all breakpoints
267
+ server.tool('list_breakpoints', 'List all breakpoints in the current debug session', {
268
+ session_id: z.string().optional().describe('Session ID'),
269
+ }, async ({ session_id }) => {
270
+ const session = sessionManager.resolveSession(session_id);
271
+ if (!session) {
272
+ return {
273
+ content: [
274
+ {
275
+ type: 'text',
276
+ text: JSON.stringify({ error: 'No active debug session' }),
277
+ },
278
+ ],
279
+ };
280
+ }
281
+ const breakpoints = await session.listBreakpoints();
282
+ return {
283
+ content: [
284
+ {
285
+ type: 'text',
286
+ text: JSON.stringify({
287
+ breakpoints: breakpoints.map((bp) => ({
288
+ id: bp.id,
289
+ type: bp.type,
290
+ state: bp.state,
291
+ resolved: bp.resolved,
292
+ file: bp.filename,
293
+ line: bp.lineno,
294
+ function: bp.function,
295
+ exception: bp.exception,
296
+ expression: bp.expression,
297
+ hitCount: bp.hitCount,
298
+ hitValue: bp.hitValue,
299
+ hitCondition: bp.hitCondition,
300
+ })),
301
+ count: breakpoints.length,
302
+ }, null, 2),
303
+ },
304
+ ],
305
+ };
306
+ });
307
+ }
308
+ //# sourceMappingURL=breakpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../../src/tools/breakpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Execution Control MCP Tools
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { SessionManager } from '../session/manager.js';
6
+ export declare function registerExecutionTools(server: McpServer, sessionManager: SessionManager): void;
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Execution Control MCP Tools
3
+ */
4
+ import { z } from 'zod';
5
+ export function registerExecutionTools(server, sessionManager) {
6
+ // Continue execution
7
+ server.tool('continue', 'Continue script execution until the next breakpoint or end of script', {
8
+ session_id: z.string().optional().describe('Session ID'),
9
+ }, async ({ session_id }) => {
10
+ const session = sessionManager.resolveSession(session_id);
11
+ if (!session) {
12
+ return {
13
+ content: [
14
+ {
15
+ type: 'text',
16
+ text: JSON.stringify({ error: 'No active debug session' }),
17
+ },
18
+ ],
19
+ };
20
+ }
21
+ try {
22
+ const result = await session.run();
23
+ return {
24
+ content: [
25
+ {
26
+ type: 'text',
27
+ text: JSON.stringify({
28
+ status: result.status,
29
+ file: result.file,
30
+ line: result.line,
31
+ message: result.status === 'break'
32
+ ? `Stopped at ${result.file}:${result.line}`
33
+ : result.status === 'stopped'
34
+ ? 'Script execution completed'
35
+ : `Status: ${result.status}`,
36
+ }),
37
+ },
38
+ ],
39
+ };
40
+ }
41
+ catch (error) {
42
+ return {
43
+ content: [
44
+ {
45
+ type: 'text',
46
+ text: JSON.stringify({
47
+ error: 'Execution failed',
48
+ message: error instanceof Error ? error.message : String(error),
49
+ }),
50
+ },
51
+ ],
52
+ };
53
+ }
54
+ });
55
+ // Step into
56
+ server.tool('step_into', 'Step into the next function call, or to the next line if not a function call. This follows execution into called functions.', {
57
+ session_id: z.string().optional().describe('Session ID'),
58
+ }, async ({ session_id }) => {
59
+ const session = sessionManager.resolveSession(session_id);
60
+ if (!session) {
61
+ return {
62
+ content: [
63
+ {
64
+ type: 'text',
65
+ text: JSON.stringify({ error: 'No active debug session' }),
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ try {
71
+ const result = await session.stepInto();
72
+ return {
73
+ content: [
74
+ {
75
+ type: 'text',
76
+ text: JSON.stringify({
77
+ status: result.status,
78
+ file: result.file,
79
+ line: result.line,
80
+ message: result.status === 'break'
81
+ ? `Stepped to ${result.file}:${result.line}`
82
+ : `Status: ${result.status}`,
83
+ }),
84
+ },
85
+ ],
86
+ };
87
+ }
88
+ catch (error) {
89
+ return {
90
+ content: [
91
+ {
92
+ type: 'text',
93
+ text: JSON.stringify({
94
+ error: 'Step into failed',
95
+ message: error instanceof Error ? error.message : String(error),
96
+ }),
97
+ },
98
+ ],
99
+ };
100
+ }
101
+ });
102
+ // Step over
103
+ server.tool('step_over', 'Step over to the next line in the current scope. Function calls are executed but not stepped into.', {
104
+ session_id: z.string().optional().describe('Session ID'),
105
+ }, async ({ session_id }) => {
106
+ const session = sessionManager.resolveSession(session_id);
107
+ if (!session) {
108
+ return {
109
+ content: [
110
+ {
111
+ type: 'text',
112
+ text: JSON.stringify({ error: 'No active debug session' }),
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ try {
118
+ const result = await session.stepOver();
119
+ return {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: JSON.stringify({
124
+ status: result.status,
125
+ file: result.file,
126
+ line: result.line,
127
+ message: result.status === 'break'
128
+ ? `Stepped to ${result.file}:${result.line}`
129
+ : `Status: ${result.status}`,
130
+ }),
131
+ },
132
+ ],
133
+ };
134
+ }
135
+ catch (error) {
136
+ return {
137
+ content: [
138
+ {
139
+ type: 'text',
140
+ text: JSON.stringify({
141
+ error: 'Step over failed',
142
+ message: error instanceof Error ? error.message : String(error),
143
+ }),
144
+ },
145
+ ],
146
+ };
147
+ }
148
+ });
149
+ // Step out
150
+ server.tool('step_out', 'Step out of the current function. Execution continues until the current function returns.', {
151
+ session_id: z.string().optional().describe('Session ID'),
152
+ }, async ({ session_id }) => {
153
+ const session = sessionManager.resolveSession(session_id);
154
+ if (!session) {
155
+ return {
156
+ content: [
157
+ {
158
+ type: 'text',
159
+ text: JSON.stringify({ error: 'No active debug session' }),
160
+ },
161
+ ],
162
+ };
163
+ }
164
+ try {
165
+ const result = await session.stepOut();
166
+ return {
167
+ content: [
168
+ {
169
+ type: 'text',
170
+ text: JSON.stringify({
171
+ status: result.status,
172
+ file: result.file,
173
+ line: result.line,
174
+ message: result.status === 'break'
175
+ ? `Stepped out to ${result.file}:${result.line}`
176
+ : `Status: ${result.status}`,
177
+ }),
178
+ },
179
+ ],
180
+ };
181
+ }
182
+ catch (error) {
183
+ return {
184
+ content: [
185
+ {
186
+ type: 'text',
187
+ text: JSON.stringify({
188
+ error: 'Step out failed',
189
+ message: error instanceof Error ? error.message : String(error),
190
+ }),
191
+ },
192
+ ],
193
+ };
194
+ }
195
+ });
196
+ // Stop execution
197
+ server.tool('stop', 'Stop the debug session and terminate script execution immediately', {
198
+ session_id: z.string().optional().describe('Session ID'),
199
+ }, async ({ session_id }) => {
200
+ const session = sessionManager.resolveSession(session_id);
201
+ if (!session) {
202
+ return {
203
+ content: [
204
+ {
205
+ type: 'text',
206
+ text: JSON.stringify({ error: 'No active debug session' }),
207
+ },
208
+ ],
209
+ };
210
+ }
211
+ try {
212
+ await session.stop();
213
+ return {
214
+ content: [
215
+ {
216
+ type: 'text',
217
+ text: JSON.stringify({
218
+ success: true,
219
+ message: 'Debug session stopped',
220
+ }),
221
+ },
222
+ ],
223
+ };
224
+ }
225
+ catch (error) {
226
+ return {
227
+ content: [
228
+ {
229
+ type: 'text',
230
+ text: JSON.stringify({
231
+ error: 'Stop failed',
232
+ message: error instanceof Error ? error.message : String(error),
233
+ }),
234
+ },
235
+ ],
236
+ };
237
+ }
238
+ });
239
+ // Detach from session (let script continue without debugging)
240
+ server.tool('detach', 'Detach from the debug session and let the script continue running without debugging', {
241
+ session_id: z.string().optional().describe('Session ID'),
242
+ }, async ({ session_id }) => {
243
+ const session = sessionManager.resolveSession(session_id);
244
+ if (!session) {
245
+ return {
246
+ content: [
247
+ {
248
+ type: 'text',
249
+ text: JSON.stringify({ error: 'No active debug session' }),
250
+ },
251
+ ],
252
+ };
253
+ }
254
+ try {
255
+ await session.detach();
256
+ return {
257
+ content: [
258
+ {
259
+ type: 'text',
260
+ text: JSON.stringify({
261
+ success: true,
262
+ message: 'Detached from debug session. Script will continue running.',
263
+ }),
264
+ },
265
+ ],
266
+ };
267
+ }
268
+ catch (error) {
269
+ return {
270
+ content: [
271
+ {
272
+ type: 'text',
273
+ text: JSON.stringify({
274
+ error: 'Detach failed',
275
+ message: error instanceof Error ? error.message : String(error),
276
+ }),
277
+ },
278
+ ],
279
+ };
280
+ }
281
+ });
282
+ }
283
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/tools/execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * MCP Tool Registration
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { SessionManager } from '../session/manager.js';
6
+ import { WatchManager } from '../session/watch-manager.js';
7
+ import { LogpointManager } from '../session/logpoint-manager.js';
8
+ import { Profiler } from '../session/profiler.js';
9
+ import { RequestContextCapture } from '../session/request-context.js';
10
+ import { StepFilter } from '../session/step-filter.js';
11
+ import { DebugConfigManager } from '../session/debug-config.js';
12
+ import { CodeCoverageTracker } from '../session/code-coverage.js';
13
+ import { SessionExporter } from '../session/session-export.js';
14
+ export interface ToolsContext {
15
+ sessionManager: SessionManager;
16
+ watchManager: WatchManager;
17
+ logpointManager: LogpointManager;
18
+ profiler: Profiler;
19
+ requestCapture: RequestContextCapture;
20
+ stepFilter: StepFilter;
21
+ configManager: DebugConfigManager;
22
+ coverageTracker: CodeCoverageTracker;
23
+ sessionExporter: SessionExporter;
24
+ }
25
+ export declare function createToolsContext(sessionManager: SessionManager): ToolsContext;
26
+ export declare function registerAllTools(server: McpServer, ctx: ToolsContext): void;
27
+ export { registerSessionTools } from './session.js';
28
+ export { registerBreakpointTools } from './breakpoints.js';
29
+ export { registerExecutionTools } from './execution.js';
30
+ export { registerInspectionTools } from './inspection.js';
31
+ export { registerAdvancedTools } from './advanced.js';