Expose debuggers and target as resources through MCP. This has two
advantages:
1. Enables returning data in a structured way. Although tools can return
structured data with the latest revision of the protocol, we might not
be able to update before the majority of clients has adopted it.
2. Enables the user to specify a resource themselves, rather than
letting the model guess which debugger instance it should use.
This PR exposes a resource for debuggers and targets.
The following URI returns information about a given debugger instance:
```
lldb://debugger/<debugger id>
```
For example:
```
{
uri: "lldb://debugger/0"
mimeType: "application/json"
text: "{"debugger_id":0,"num_targets":2}"
}
```
The following URI returns information about a given target:
```
lldb://debugger/<debugger id>/target/<target id>
```
For example:
```
{
uri: "lldb://debugger/0/target/0"
mimeType: "application/json"
text: "{"arch":"arm64-apple-macosx26.0.0","debugger_id":0,"path":"/Users/jonas/llvm/build-ra/bin/count","target_id":0}"
}
```
46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
//===-- MCPError.cpp ------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "MCPError.h"
|
|
#include "llvm/Support/Error.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include <system_error>
|
|
|
|
namespace lldb_private::mcp {
|
|
|
|
char MCPError::ID;
|
|
char UnsupportedURI::ID;
|
|
|
|
MCPError::MCPError(std::string message, int64_t error_code)
|
|
: m_message(message), m_error_code(error_code) {}
|
|
|
|
void MCPError::log(llvm::raw_ostream &OS) const { OS << m_message; }
|
|
|
|
std::error_code MCPError::convertToErrorCode() const {
|
|
return llvm::inconvertibleErrorCode();
|
|
}
|
|
|
|
protocol::Error MCPError::toProtcolError() const {
|
|
protocol::Error error;
|
|
error.error.code = m_error_code;
|
|
error.error.message = m_message;
|
|
return error;
|
|
}
|
|
|
|
UnsupportedURI::UnsupportedURI(std::string uri) : m_uri(uri) {}
|
|
|
|
void UnsupportedURI::log(llvm::raw_ostream &OS) const {
|
|
OS << "unsupported uri: " << m_uri;
|
|
}
|
|
|
|
std::error_code UnsupportedURI::convertToErrorCode() const {
|
|
return llvm::inconvertibleErrorCode();
|
|
}
|
|
|
|
} // namespace lldb_private::mcp
|