| 262 | |
| 263 | // Execute a plugin command |
| 264 | async executeCommand(name, args, context) { |
| 265 | const cmd = this.commands[name]; |
| 266 | if (!cmd || !cmd.handler) return null; |
| 267 | try { |
| 268 | if (typeof cmd.handler === 'function') { |
| 269 | return await cmd.handler(args, context); |
| 270 | } else if (cmd.handler.run) { |
| 271 | return await cmd.handler.run(args, context); |
| 272 | } |
| 273 | } catch (e) { |
| 274 | return `Error in plugin command: ${e.message}`; |
| 275 | } |
| 276 | return null; |
| 277 | } |
| 278 | |
| 279 | // Get error diagnostics for failed plugin loads |
| 280 | // TODO: re-add getPermissions(), hasPermission(), getMCPServers() when |