claude-mpm 5.1.9__py3-none-any.whl → 5.4.22__py3-none-any.whl

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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (176) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +1 -1
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +290 -34
  5. claude_mpm/agents/agent_loader.py +13 -44
  6. claude_mpm/agents/templates/circuit-breakers.md +138 -1
  7. claude_mpm/cli/__main__.py +4 -0
  8. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  9. claude_mpm/cli/commands/agent_state_manager.py +8 -17
  10. claude_mpm/cli/commands/agents.py +0 -31
  11. claude_mpm/cli/commands/auto_configure.py +210 -25
  12. claude_mpm/cli/commands/config.py +88 -2
  13. claude_mpm/cli/commands/configure.py +1097 -158
  14. claude_mpm/cli/commands/configure_agent_display.py +15 -6
  15. claude_mpm/cli/commands/mpm_init/core.py +160 -46
  16. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  17. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  18. claude_mpm/cli/commands/skills.py +214 -189
  19. claude_mpm/cli/commands/summarize.py +413 -0
  20. claude_mpm/cli/executor.py +11 -3
  21. claude_mpm/cli/parsers/agents_parser.py +0 -9
  22. claude_mpm/cli/parsers/auto_configure_parser.py +0 -138
  23. claude_mpm/cli/parsers/base_parser.py +5 -0
  24. claude_mpm/cli/parsers/config_parser.py +153 -83
  25. claude_mpm/cli/parsers/skills_parser.py +3 -2
  26. claude_mpm/cli/startup.py +550 -94
  27. claude_mpm/commands/mpm-config.md +265 -0
  28. claude_mpm/commands/mpm-help.md +14 -95
  29. claude_mpm/commands/mpm-organize.md +500 -0
  30. claude_mpm/config/agent_sources.py +27 -0
  31. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  32. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  33. claude_mpm/core/framework_loader.py +4 -2
  34. claude_mpm/core/logger.py +13 -0
  35. claude_mpm/core/socketio_pool.py +3 -3
  36. claude_mpm/core/unified_agent_registry.py +5 -15
  37. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  38. claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
  39. claude_mpm/hooks/claude_hooks/hook_handler.py +6 -0
  40. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  41. claude_mpm/hooks/claude_hooks/memory_integration.py +26 -9
  42. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  43. claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -0
  44. claude_mpm/hooks/memory_integration_hook.py +46 -1
  45. claude_mpm/init.py +0 -19
  46. claude_mpm/scripts/claude-hook-handler.sh +58 -18
  47. claude_mpm/scripts/launch_monitor.py +93 -13
  48. claude_mpm/scripts/start_activity_logging.py +0 -0
  49. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  50. claude_mpm/services/agents/agent_review_service.py +280 -0
  51. claude_mpm/services/agents/deployment/agent_discovery_service.py +2 -3
  52. claude_mpm/services/agents/deployment/agent_template_builder.py +4 -2
  53. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +78 -9
  54. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +335 -53
  55. claude_mpm/services/agents/git_source_manager.py +34 -0
  56. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  57. claude_mpm/services/agents/sources/git_source_sync_service.py +8 -1
  58. claude_mpm/services/agents/toolchain_detector.py +10 -6
  59. claude_mpm/services/analysis/__init__.py +11 -1
  60. claude_mpm/services/analysis/clone_detector.py +1030 -0
  61. claude_mpm/services/command_deployment_service.py +81 -10
  62. claude_mpm/services/event_bus/config.py +3 -1
  63. claude_mpm/services/git/git_operations_service.py +93 -8
  64. claude_mpm/services/monitor/daemon.py +9 -2
  65. claude_mpm/services/monitor/daemon_manager.py +39 -3
  66. claude_mpm/services/monitor/server.py +225 -19
  67. claude_mpm/services/self_upgrade_service.py +120 -12
  68. claude_mpm/services/skills/__init__.py +3 -0
  69. claude_mpm/services/skills/git_skill_source_manager.py +32 -2
  70. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  71. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  72. claude_mpm/services/skills_deployer.py +126 -9
  73. claude_mpm/services/socketio/event_normalizer.py +15 -1
  74. claude_mpm/services/socketio/server/core.py +160 -21
  75. claude_mpm/services/version_control/git_operations.py +103 -0
  76. claude_mpm/utils/agent_filters.py +17 -44
  77. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/METADATA +47 -84
  78. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/RECORD +82 -161
  79. claude_mpm-5.4.22.dist-info/entry_points.txt +5 -0
  80. claude_mpm-5.4.22.dist-info/licenses/LICENSE +94 -0
  81. claude_mpm-5.4.22.dist-info/licenses/LICENSE-FAQ.md +153 -0
  82. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  83. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  84. claude_mpm/agents/BASE_ENGINEER.md +0 -658
  85. claude_mpm/agents/BASE_OPS.md +0 -219
  86. claude_mpm/agents/BASE_PM.md +0 -480
  87. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  88. claude_mpm/agents/BASE_QA.md +0 -167
  89. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  90. claude_mpm/agents/base_agent.json +0 -31
  91. claude_mpm/agents/base_agent_loader.py +0 -601
  92. claude_mpm/cli/commands/agents_detect.py +0 -380
  93. claude_mpm/cli/commands/agents_recommend.py +0 -309
  94. claude_mpm/cli/ticket_cli.py +0 -35
  95. claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
  96. claude_mpm/commands/mpm-agents-detect.md +0 -177
  97. claude_mpm/commands/mpm-agents-list.md +0 -131
  98. claude_mpm/commands/mpm-agents-recommend.md +0 -223
  99. claude_mpm/commands/mpm-config-view.md +0 -150
  100. claude_mpm/commands/mpm-ticket-organize.md +0 -304
  101. claude_mpm/dashboard/analysis_runner.py +0 -455
  102. claude_mpm/dashboard/index.html +0 -13
  103. claude_mpm/dashboard/open_dashboard.py +0 -66
  104. claude_mpm/dashboard/static/css/activity.css +0 -1958
  105. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  106. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  107. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  108. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  109. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  110. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  111. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  112. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  113. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  114. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  115. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  116. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  117. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  118. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  119. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  120. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  121. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  122. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  123. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  124. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  125. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  126. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  127. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  128. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  129. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  130. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  131. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  132. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  133. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  134. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  135. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  136. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  137. claude_mpm/dashboard/templates/code_simple.html +0 -153
  138. claude_mpm/dashboard/templates/index.html +0 -606
  139. claude_mpm/dashboard/test_dashboard.html +0 -372
  140. claude_mpm/scripts/mcp_server.py +0 -75
  141. claude_mpm/scripts/mcp_wrapper.py +0 -39
  142. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  143. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  144. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  145. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  146. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  147. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  148. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  149. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  150. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  151. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  152. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  153. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  154. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  155. claude_mpm/services/mcp_gateway/main.py +0 -589
  156. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  157. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  158. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  159. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  160. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  161. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  162. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  163. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  164. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  165. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  166. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  167. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  168. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  169. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  170. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  171. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  172. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  173. claude_mpm-5.1.9.dist-info/entry_points.txt +0 -10
  174. claude_mpm-5.1.9.dist-info/licenses/LICENSE +0 -21
  175. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/WHEEL +0 -0
  176. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/top_level.txt +0 -0
@@ -1,443 +0,0 @@
1
- """
2
- MCP Gateway Interface Definitions
3
- ==================================
4
-
5
- This module defines the core interfaces for the MCP Gateway service,
6
- establishing contracts for dependency injection and service orchestration.
7
-
8
- Part of ISS-0034: Infrastructure Setup - MCP Gateway Project Foundation
9
- """
10
-
11
- from abc import ABC, abstractmethod
12
- from dataclasses import dataclass
13
- from pathlib import Path
14
- from typing import Any, Callable, Dict, List, Optional
15
-
16
-
17
- # Tool-related data structures
18
- @dataclass
19
- class MCPToolDefinition:
20
- """Definition of an MCP tool."""
21
-
22
- name: str
23
- description: str
24
- input_schema: Dict[str, Any]
25
- output_schema: Optional[Dict[str, Any]] = None
26
- version: str = "1.0.0"
27
- metadata: Optional[Dict[str, Any]] = None
28
-
29
-
30
- @dataclass
31
- class MCPToolInvocation:
32
- """Represents a tool invocation request."""
33
-
34
- tool_name: str
35
- parameters: Dict[str, Any]
36
- context: Optional[Dict[str, Any]] = None
37
- timeout: Optional[float] = None
38
- request_id: Optional[str] = None
39
-
40
-
41
- @dataclass
42
- class MCPToolResult:
43
- """Result from a tool invocation."""
44
-
45
- success: bool
46
- data: Optional[Any] = None
47
- error: Optional[str] = None
48
- metadata: Optional[Dict[str, Any]] = None
49
- execution_time: Optional[float] = None
50
-
51
-
52
- # Core MCP interfaces
53
- class IMCPConfiguration(ABC):
54
- """
55
- Interface for MCP configuration management.
56
-
57
- Handles loading, validation, and access to MCP Gateway configuration.
58
- """
59
-
60
- @abstractmethod
61
- def load_config(self, config_path: Path) -> bool:
62
- """
63
- Load configuration from a file.
64
-
65
- Args:
66
- config_path: Path to configuration file
67
-
68
- Returns:
69
- True if configuration loaded successfully
70
- """
71
-
72
- @abstractmethod
73
- def get(self, key: str, default: Any = None) -> Any:
74
- """
75
- Get configuration value by key.
76
-
77
- Args:
78
- key: Configuration key (supports dot notation)
79
- default: Default value if key not found
80
-
81
- Returns:
82
- Configuration value or default
83
- """
84
-
85
- @abstractmethod
86
- def set(self, key: str, value: Any) -> None:
87
- """
88
- Set configuration value.
89
-
90
- Args:
91
- key: Configuration key (supports dot notation)
92
- value: Configuration value
93
- """
94
-
95
- @abstractmethod
96
- def validate(self) -> bool:
97
- """
98
- Validate the current configuration.
99
-
100
- Returns:
101
- True if configuration is valid
102
- """
103
-
104
- @abstractmethod
105
- def get_server_config(self) -> Dict[str, Any]:
106
- """
107
- Get MCP server configuration.
108
-
109
- Returns:
110
- Server configuration dictionary
111
- """
112
-
113
- @abstractmethod
114
- def get_tools_config(self) -> Dict[str, Any]:
115
- """
116
- Get tools configuration.
117
-
118
- Returns:
119
- Tools configuration dictionary
120
- """
121
-
122
-
123
- class IMCPToolAdapter(ABC):
124
- """
125
- Interface for MCP tool adapters.
126
-
127
- Tool adapters wrap external tools to make them MCP-compatible.
128
- """
129
-
130
- @abstractmethod
131
- def get_definition(self) -> MCPToolDefinition:
132
- """
133
- Get the tool definition.
134
-
135
- Returns:
136
- Tool definition with schema and metadata
137
- """
138
-
139
- @abstractmethod
140
- async def invoke(self, invocation: MCPToolInvocation) -> MCPToolResult:
141
- """
142
- Invoke the tool with given parameters.
143
-
144
- Args:
145
- invocation: Tool invocation request
146
-
147
- Returns:
148
- Tool execution result
149
- """
150
-
151
- @abstractmethod
152
- def validate_parameters(self, parameters: Dict[str, Any]) -> bool:
153
- """
154
- Validate tool parameters against schema.
155
-
156
- Args:
157
- parameters: Parameters to validate
158
-
159
- Returns:
160
- True if parameters are valid
161
- """
162
-
163
- @abstractmethod
164
- async def initialize(self) -> bool:
165
- """
166
- Initialize the tool adapter.
167
-
168
- Returns:
169
- True if initialization successful
170
- """
171
-
172
- @abstractmethod
173
- async def shutdown(self) -> None:
174
- """
175
- Shutdown the tool adapter and clean up resources.
176
- """
177
-
178
-
179
- class IMCPToolRegistry(ABC):
180
- """
181
- Interface for MCP tool registry.
182
-
183
- Manages registration, discovery, and invocation of MCP tools.
184
- """
185
-
186
- @abstractmethod
187
- def register_tool(self, adapter: IMCPToolAdapter) -> bool:
188
- """
189
- Register a tool adapter.
190
-
191
- Args:
192
- adapter: Tool adapter to register
193
-
194
- Returns:
195
- True if registration successful
196
- """
197
-
198
- @abstractmethod
199
- def unregister_tool(self, tool_name: str) -> bool:
200
- """
201
- Unregister a tool by name.
202
-
203
- Args:
204
- tool_name: Name of tool to unregister
205
-
206
- Returns:
207
- True if unregistration successful
208
- """
209
-
210
- @abstractmethod
211
- def get_tool(self, tool_name: str) -> Optional[IMCPToolAdapter]:
212
- """
213
- Get a tool adapter by name.
214
-
215
- Args:
216
- tool_name: Name of the tool
217
-
218
- Returns:
219
- Tool adapter if found, None otherwise
220
- """
221
-
222
- @abstractmethod
223
- def list_tools(self) -> List[MCPToolDefinition]:
224
- """
225
- List all registered tools.
226
-
227
- Returns:
228
- List of tool definitions
229
- """
230
-
231
- @abstractmethod
232
- async def invoke_tool(self, invocation: MCPToolInvocation) -> MCPToolResult:
233
- """
234
- Invoke a tool through the registry.
235
-
236
- Args:
237
- invocation: Tool invocation request
238
-
239
- Returns:
240
- Tool execution result
241
- """
242
-
243
- @abstractmethod
244
- def search_tools(self, query: str) -> List[MCPToolDefinition]:
245
- """
246
- Search for tools by query.
247
-
248
- Args:
249
- query: Search query
250
-
251
- Returns:
252
- List of matching tool definitions
253
- """
254
-
255
-
256
- class IMCPCommunication(ABC):
257
- """
258
- Interface for MCP communication handling.
259
-
260
- Manages stdio-based communication with MCP clients.
261
- """
262
-
263
- @abstractmethod
264
- async def send_message(self, message: Dict[str, Any]) -> None:
265
- """
266
- Send a message to the MCP client.
267
-
268
- Args:
269
- message: Message to send
270
- """
271
-
272
- @abstractmethod
273
- async def receive_message(self) -> Optional[Dict[str, Any]]:
274
- """
275
- Receive a message from the MCP client.
276
-
277
- Returns:
278
- Received message or None if no message available
279
- """
280
-
281
- @abstractmethod
282
- async def send_response(self, request_id: str, result: Any) -> None:
283
- """
284
- Send a response to a request.
285
-
286
- Args:
287
- request_id: ID of the request being responded to
288
- result: Result data
289
- """
290
-
291
- @abstractmethod
292
- async def send_error(self, request_id: str, error: str, code: int = -1) -> None:
293
- """
294
- Send an error response.
295
-
296
- Args:
297
- request_id: ID of the request that caused the error
298
- error: Error message
299
- code: Error code
300
- """
301
-
302
- @abstractmethod
303
- def is_connected(self) -> bool:
304
- """
305
- Check if communication channel is connected.
306
-
307
- Returns:
308
- True if connected
309
- """
310
-
311
-
312
- class IMCPLifecycle(ABC):
313
- """
314
- Interface for MCP service lifecycle management.
315
-
316
- Manages initialization, startup, shutdown, and health monitoring.
317
- """
318
-
319
- @abstractmethod
320
- async def initialize(self) -> bool:
321
- """
322
- Initialize the MCP service.
323
-
324
- Returns:
325
- True if initialization successful
326
- """
327
-
328
- @abstractmethod
329
- async def start(self) -> bool:
330
- """
331
- Start the MCP service.
332
-
333
- Returns:
334
- True if startup successful
335
- """
336
-
337
- @abstractmethod
338
- async def stop(self) -> None:
339
- """
340
- Stop the MCP service gracefully.
341
- """
342
-
343
- @abstractmethod
344
- async def restart(self) -> bool:
345
- """
346
- Restart the MCP service.
347
-
348
- Returns:
349
- True if restart successful
350
- """
351
-
352
- @abstractmethod
353
- def get_state(self) -> str:
354
- """
355
- Get current service state.
356
-
357
- Returns:
358
- Service state (e.g., "initialized", "running", "stopped")
359
- """
360
-
361
- @abstractmethod
362
- def is_healthy(self) -> bool:
363
- """
364
- Check if service is healthy.
365
-
366
- Returns:
367
- True if service is healthy
368
- """
369
-
370
- @abstractmethod
371
- def get_health_status(self) -> Dict[str, Any]:
372
- """
373
- Get detailed health status.
374
-
375
- Returns:
376
- Health status information
377
- """
378
-
379
-
380
- class IMCPGateway(IMCPLifecycle):
381
- """
382
- Main interface for MCP gateway implementation.
383
-
384
- Orchestrates tool registry, communication, and request handling.
385
- Acts as a protocol bridge between Claude Code and internal tools.
386
- """
387
-
388
- @abstractmethod
389
- def set_tool_registry(self, registry: IMCPToolRegistry) -> None:
390
- """
391
- Set the tool registry for the server.
392
-
393
- Args:
394
- registry: Tool registry to use
395
- """
396
-
397
- @abstractmethod
398
- def set_communication(self, communication: IMCPCommunication) -> None:
399
- """
400
- Set the communication handler.
401
-
402
- Args:
403
- communication: Communication handler to use
404
- """
405
-
406
- @abstractmethod
407
- async def handle_request(self, request: Dict[str, Any]) -> Dict[str, Any]:
408
- """
409
- Handle an MCP request.
410
-
411
- Args:
412
- request: MCP request message
413
-
414
- Returns:
415
- Response message
416
- """
417
-
418
- @abstractmethod
419
- async def run(self) -> None:
420
- """
421
- Run the MCP gateway main loop.
422
-
423
- This method should handle incoming requests and manage the gateway lifecycle.
424
- """
425
-
426
- @abstractmethod
427
- def register_handler(self, method: str, handler: Callable) -> None:
428
- """
429
- Register a custom request handler.
430
-
431
- Args:
432
- method: Method name to handle
433
- handler: Handler function
434
- """
435
-
436
- @abstractmethod
437
- def get_capabilities(self) -> Dict[str, Any]:
438
- """
439
- Get gateway capabilities.
440
-
441
- Returns:
442
- Dictionary of gateway capabilities
443
- """