aboutsummaryrefslogtreecommitdiffstats
path: root/idatui/client.py
diff options
context:
space:
mode:
Diffstat (limited to 'idatui/client.py')
-rw-r--r--idatui/client.py75
1 files changed, 13 insertions, 62 deletions
diff --git a/idatui/client.py b/idatui/client.py
index f39a10d..2f74cbe 100644
--- a/idatui/client.py
+++ b/idatui/client.py
@@ -66,68 +66,19 @@ SESSION_AGNOSTIC_TOOLS = frozenset({"idb_list", "idb_open", "int_convert"})
_STALE_SESSION_MARKERS = ("session not found", "database is required")
-# --------------------------------------------------------------------------- #
-# Exceptions
-# --------------------------------------------------------------------------- #
-class IDAError(Exception):
- """Base class for all client errors."""
-
-
-class IDAConnectionError(IDAError):
- """The transport could not be established or was lost."""
-
-
-class IDATimeoutError(IDAError):
- """A request exceeded its deadline."""
-
-
-class IDAProtocolError(IDAError):
- """Malformed or unexpected HTTP / JSON-RPC framing."""
-
-
-class IDARPCError(IDAError):
- """The JSON-RPC envelope carried an ``error`` object."""
-
- def __init__(self, code: int, message: str, data: Any = None):
- super().__init__(f"JSON-RPC error {code}: {message}")
- self.code = code
- self.message = message
- self.data = data
-
-
-class IDAToolError(IDAError):
- """A tool call returned ``result.isError == true`` (a hard failure)."""
-
- def __init__(self, tool: str, message: str):
- super().__init__(f"tool {tool!r} failed: {message}")
- self.tool = tool
- self.message = message
-
-
-class IDASessionError(IDAError):
- """No IDB session is open, or several are and none was pinned."""
-
-
-# --------------------------------------------------------------------------- #
-# Session model
-# --------------------------------------------------------------------------- #
-@dataclass(frozen=True)
-class Session:
- session_id: str
- filename: str
- input_path: str
- is_active: bool = False
- is_analyzing: bool = False
-
- @classmethod
- def from_dict(cls, d: dict) -> "Session":
- return cls(
- session_id=d.get("session_id", ""),
- filename=d.get("filename", ""),
- input_path=d.get("input_path", ""),
- is_active=bool(d.get("is_active", False)),
- is_analyzing=bool(d.get("is_analyzing", False)),
- )
+# The error hierarchy and Session model now live in errors.py (transport-
+# agnostic, shared with the idalib worker path); re-exported here so the
+# deprecated mcp tooling and the stress tests keep importing them from client.
+from .errors import ( # noqa: E402,F401
+ IDAError,
+ IDAConnectionError,
+ IDATimeoutError,
+ IDAProtocolError,
+ IDARPCError,
+ IDAToolError,
+ IDASessionError,
+ Session,
+)
# --------------------------------------------------------------------------- #