mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-09 13:25:11 +00:00
Support KeyUp, KeyDown operator actions. Make coordinates into floats
This commit is contained in:
@@ -5,8 +5,8 @@ from pydantic import BaseModel
|
|||||||
|
|
||||||
|
|
||||||
class Point(BaseModel):
|
class Point(BaseModel):
|
||||||
x: int
|
x: float
|
||||||
y: int
|
y: float
|
||||||
|
|
||||||
|
|
||||||
class BaseAction(BaseModel):
|
class BaseAction(BaseModel):
|
||||||
@@ -15,32 +15,32 @@ class BaseAction(BaseModel):
|
|||||||
|
|
||||||
class ClickAction(BaseAction):
|
class ClickAction(BaseAction):
|
||||||
type: Literal["click"] = "click"
|
type: Literal["click"] = "click"
|
||||||
x: int
|
x: float
|
||||||
y: int
|
y: float
|
||||||
button: Literal["left", "right", "middle", "wheel"] = "left"
|
button: Literal["left", "right", "middle", "wheel"] = "left"
|
||||||
modifiers: str = None
|
modifiers: str = None
|
||||||
|
|
||||||
|
|
||||||
class DoubleClickAction(BaseAction):
|
class DoubleClickAction(BaseAction):
|
||||||
type: Literal["double_click"] = "double_click"
|
type: Literal["double_click"] = "double_click"
|
||||||
x: int
|
x: float
|
||||||
y: int
|
y: float
|
||||||
|
|
||||||
|
|
||||||
class TripleClickAction(BaseAction):
|
class TripleClickAction(BaseAction):
|
||||||
type: Literal["triple_click"] = "triple_click"
|
type: Literal["triple_click"] = "triple_click"
|
||||||
x: int
|
x: float
|
||||||
y: int
|
y: float
|
||||||
|
|
||||||
|
|
||||||
class ScrollAction(BaseAction):
|
class ScrollAction(BaseAction):
|
||||||
type: Literal["scroll"] = "scroll"
|
type: Literal["scroll"] = "scroll"
|
||||||
x: Optional[int] = None
|
x: Optional[float] = None
|
||||||
y: Optional[int] = None
|
y: Optional[float] = None
|
||||||
scroll_x: Optional[int] = None
|
scroll_x: Optional[float] = None
|
||||||
scroll_y: Optional[int] = None
|
scroll_y: Optional[float] = None
|
||||||
scroll_direction: Optional[Literal["up", "down", "left", "right"]] = None
|
scroll_direction: Optional[Literal["up", "down", "left", "right"]] = None
|
||||||
scroll_amount: Optional[int] = 2
|
scroll_amount: Optional[float] = 2.0
|
||||||
|
|
||||||
|
|
||||||
class KeypressAction(BaseAction):
|
class KeypressAction(BaseAction):
|
||||||
@@ -64,8 +64,8 @@ class ScreenshotAction(BaseAction):
|
|||||||
|
|
||||||
class MoveAction(BaseAction):
|
class MoveAction(BaseAction):
|
||||||
type: Literal["move"] = "move"
|
type: Literal["move"] = "move"
|
||||||
x: int
|
x: float
|
||||||
y: int
|
y: float
|
||||||
|
|
||||||
|
|
||||||
class DragAction(BaseAction):
|
class DragAction(BaseAction):
|
||||||
@@ -89,6 +89,16 @@ class HoldKeyAction(BaseAction):
|
|||||||
duration: float = 1.0
|
duration: float = 1.0
|
||||||
|
|
||||||
|
|
||||||
|
class KeyUpAction(BaseAction):
|
||||||
|
type: Literal["key_up"] = "key_up"
|
||||||
|
key: str
|
||||||
|
|
||||||
|
|
||||||
|
class KeyDownAction(BaseAction):
|
||||||
|
type: Literal["key_down"] = "key_down"
|
||||||
|
key: str
|
||||||
|
|
||||||
|
|
||||||
class CursorPositionAction(BaseAction):
|
class CursorPositionAction(BaseAction):
|
||||||
type: Literal["cursor_position"] = "cursor_position"
|
type: Literal["cursor_position"] = "cursor_position"
|
||||||
|
|
||||||
@@ -123,7 +133,10 @@ OperatorAction = Union[
|
|||||||
MouseDownAction,
|
MouseDownAction,
|
||||||
MouseUpAction,
|
MouseUpAction,
|
||||||
HoldKeyAction,
|
HoldKeyAction,
|
||||||
|
KeyDownAction,
|
||||||
|
KeyUpAction,
|
||||||
CursorPositionAction,
|
CursorPositionAction,
|
||||||
GotoAction,
|
GotoAction,
|
||||||
BackAction,
|
BackAction,
|
||||||
|
RequestUserAction,
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -243,6 +243,18 @@ class BrowserEnvironment(Environment):
|
|||||||
output = f"Held key{'s' if len(keys) > 1 else ''} {keys_to_parse} for {duration} seconds"
|
output = f"Held key{'s' if len(keys) > 1 else ''} {keys_to_parse} for {duration} seconds"
|
||||||
logger.debug(f"Action: {action.type} '{keys_to_parse}' for {duration}s")
|
logger.debug(f"Action: {action.type} '{keys_to_parse}' for {duration}s")
|
||||||
|
|
||||||
|
case "key_down":
|
||||||
|
key = action.key
|
||||||
|
await self.page.keyboard.down(key)
|
||||||
|
output = f"Key down: {key}"
|
||||||
|
logger.debug(f"Action: {action.type} {key}")
|
||||||
|
|
||||||
|
case "key_up":
|
||||||
|
key = action.key
|
||||||
|
await self.page.keyboard.up(key)
|
||||||
|
output = f"Key up: {key}"
|
||||||
|
logger.debug(f"Action: {action.type} {key}")
|
||||||
|
|
||||||
case "cursor_position":
|
case "cursor_position":
|
||||||
# Playwright doesn't directly expose mouse position easily without JS injection
|
# Playwright doesn't directly expose mouse position easily without JS injection
|
||||||
# Returning a placeholder for now
|
# Returning a placeholder for now
|
||||||
|
|||||||
Reference in New Issue
Block a user