```diff
--- test_files/341-original.txt	2025-03-07 19:06:48
+++ test_files/341-modified.txt	2025-03-07 19:06:48
@@ -2,18 +2,22 @@
 
 from pydantic import Field
 
-from composio.tools.env.filemanager.manager import FileManager
+from composio.tools.base.exceptions import ExecutionFailed
+from composio.tools.base.local import LocalAction
 from composio.tools.local.filetool.actions.base_action import (
-    BaseFileAction,
     BaseFileRequest,
     BaseFileResponse,
+    include_cwd,
 )
 
 
 class OpenFileRequest(BaseFileRequest):
     """Request to open a file."""
 
-    file_path: str = Field(..., description="file path to open in the editor")
+    file_path: str = Field(
+        ...,
+        description="file path to open in the editor. This is a relative path to the current directory",
+    )
     line_number: int = Field(
         default=0,
         description="If file-number is given, file will be opened from that line number",
@@ -23,17 +27,14 @@
 class OpenFileResponse(BaseFileResponse):
     """Response to open a file."""
 
-    lines: t.Dict[int, str] = Field(
-        default={}, description="File content with their line numbers"
-    )
-    total_lines: int = Field(default=0, description="Total number of lines in the file")
-    error: str = Field(default="", description="Error message if any")
+    message: str = Field(default="", description="Message to display to the user")
+    lines: str = Field(default="", description="File content with their line numbers")
 
 
-class OpenFile(BaseFileAction):
+class OpenFile(LocalAction[OpenFileRequest, OpenFileResponse]):
     """
     Opens a file in the editor based on the provided file path,
-    If line_number is provided, the window will be move to include that line
+    If line_number is provided, the window will be moved after that line. (i.e. 100 lines after the line number will be displayed)
 
     Can result in:
     - ValueError: If file_path is not a string or if the file does not exist.
@@ -43,23 +44,29 @@
     - IsADirectoryError: If the provided path is a directory.
     """
 
-    _display_name = "Open File on workspace"
-    _request_schema = OpenFileRequest
-    _response_schema = OpenFileResponse
-
-    def execute_on_file_manager(
-        self, file_manager: FileManager, request_data: OpenFileRequest  # type: ignore
-    ) -> OpenFileResponse:
+    @include_cwd  # type: ignore
+    def execute(self, request: OpenFileRequest, metadata: t.Dict) -> OpenFileResponse:
+        """Open a file."""
         try:
-            file = file_manager.open(request_data.file_path)
-            if request_data.line_number > 0:
-                file.goto(request_data.line_number)
-            return OpenFileResponse(lines=file.read(), total_lines=file.total_lines())
+            file = self.filemanagers.get(request.file_manager_id).open(
+                request.file_path
+            )
+            if request.line_number > 0:
+                file.goto(request.line_number)
+
+            content = file.format_text(lines=file.read())
+            if len(content) == 0:
+                raise ExecutionFailed("File is empty")
+
+            return OpenFileResponse(
+                message="File opened successfully. 100 lines after the cursor displayed.",
+                lines=content,
+            )
         except FileNotFoundError as e:
-            return OpenFileResponse(error=f"File not found: {str(e)}")
+            raise ExecutionFailed(f"File not found: {str(e)}") from e
         except IsADirectoryError as e:
-            return OpenFileResponse(error=f"Cannot open a directory: {str(e)}")
+            raise ExecutionFailed(f"Cannot open a directory: {str(e)}") from e
         except PermissionError as e:
-            return OpenFileResponse(error=f"Permission denied: {str(e)}")
+            raise ExecutionFailed(f"Permission denied: {str(e)}") from e
         except IOError as e:
-            return OpenFileResponse(error=f"Error reading file: {str(e)}")
+            raise ExecutionFailed(f"Error reading file: {str(e)}") from e
```
