oagi-core 0.9.1__py3-none-any.whl → 0.9.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
oagi/agent/default.py CHANGED
@@ -25,9 +25,9 @@ class AsyncDefaultAgent:
25
25
  self,
26
26
  api_key: str | None = None,
27
27
  base_url: str | None = None,
28
- model: str = "lux-v1",
29
- max_steps: int = 30,
30
- temperature: float | None = None,
28
+ model: str = "lux-actor-1",
29
+ max_steps: int = 20,
30
+ temperature: float | None = 0.5,
31
31
  step_observer: AsyncStepObserver | None = None,
32
32
  ):
33
33
  self.api_key = api_key
@@ -63,7 +63,7 @@ class AsyncDefaultAgent:
63
63
  logger.info(f"Step {i + 1}: {step.reason}")
64
64
 
65
65
  # Notify observer if present
66
- if self.step_observer and step.actions:
66
+ if self.step_observer:
67
67
  await self.step_observer.on_step(i + 1, step.reason, step.actions)
68
68
 
69
69
  # Execute actions if any
@@ -20,19 +20,28 @@ class Planner:
20
20
  This class provides planning and reflection capabilities using OAGI workers.
21
21
  """
22
22
 
23
- def __init__(self, client: AsyncClient | None = None):
23
+ def __init__(
24
+ self,
25
+ client: AsyncClient | None = None,
26
+ api_key: str | None = None,
27
+ base_url: str | None = None,
28
+ ):
24
29
  """Initialize the planner.
25
30
 
26
31
  Args:
27
32
  client: AsyncClient for OAGI API calls. If None, one will be created when needed.
33
+ api_key: API key for creating internal client
34
+ base_url: Base URL for creating internal client
28
35
  """
29
36
  self.client = client
37
+ self.api_key = api_key
38
+ self.base_url = base_url
30
39
  self._owns_client = False # Track if we created the client
31
40
 
32
41
  def _ensure_client(self) -> AsyncClient:
33
42
  """Ensure we have a client, creating one if needed."""
34
43
  if not self.client:
35
- self.client = AsyncClient()
44
+ self.client = AsyncClient(api_key=self.api_key, base_url=self.base_url)
36
45
  self._owns_client = True
37
46
  return self.client
38
47
 
@@ -35,10 +35,10 @@ class TaskeeAgent(AsyncAgent):
35
35
  self,
36
36
  api_key: str | None = None,
37
37
  base_url: str | None = None,
38
- model: str = "lux-v1",
39
- max_steps_per_subtask: int = 10,
40
- reflection_interval: int = 20,
41
- temperature: float = 0.0,
38
+ model: str = "lux-actor-1",
39
+ max_steps_per_subtask: int = 20,
40
+ reflection_interval: int = 4,
41
+ temperature: float = 0.5,
42
42
  planner: Planner | None = None,
43
43
  external_memory: PlannerMemory | None = None,
44
44
  todo_index: int | None = None,
@@ -64,7 +64,7 @@ class TaskeeAgent(AsyncAgent):
64
64
  self.max_steps_per_subtask = max_steps_per_subtask
65
65
  self.reflection_interval = reflection_interval
66
66
  self.temperature = temperature
67
- self.planner = planner or Planner()
67
+ self.planner = planner or Planner(api_key=api_key, base_url=base_url)
68
68
  self.external_memory = external_memory
69
69
  self.todo_index = todo_index
70
70
  self.step_observer = step_observer
@@ -235,6 +235,12 @@ class TaskeeAgent(AsyncAgent):
235
235
  if step.reason:
236
236
  logger.info(f"Step {self.total_actions + 1}: {step.reason}")
237
237
 
238
+ # Notify observer if present
239
+ if self.step_observer:
240
+ await self.step_observer.on_step(
241
+ self.total_actions + 1, step.reason, step.actions
242
+ )
243
+
238
244
  # Record OAGI actions
239
245
  if step.actions:
240
246
  # Log actions with details
@@ -256,12 +262,6 @@ class TaskeeAgent(AsyncAgent):
256
262
  reasoning=step.reason,
257
263
  )
258
264
 
259
- # Notify observer if present
260
- if self.step_observer:
261
- await self.step_observer.on_step(
262
- self.total_actions + 1, step.reason, step.actions
263
- )
264
-
265
265
  # Execute actions
266
266
  await action_handler(step.actions)
267
267
  self.total_actions += len(step.actions)
@@ -34,10 +34,10 @@ class TaskerAgent(AsyncAgent):
34
34
  self,
35
35
  api_key: str | None = None,
36
36
  base_url: str | None = None,
37
- model: str = "lux-v1",
38
- max_steps: int = 30,
39
- temperature: float = 0.0,
40
- reflection_interval: int = 20,
37
+ model: str = "lux-actor-1",
38
+ max_steps: int = 60,
39
+ temperature: float = 0.5,
40
+ reflection_interval: int = 4,
41
41
  planner: Planner | None = None,
42
42
  step_observer: AsyncStepObserver | None = None,
43
43
  ):
@@ -59,7 +59,7 @@ class TaskerAgent(AsyncAgent):
59
59
  self.max_steps = max_steps
60
60
  self.temperature = temperature
61
61
  self.reflection_interval = reflection_interval
62
- self.planner = planner or Planner()
62
+ self.planner = planner or Planner(api_key=api_key, base_url=base_url)
63
63
  self.step_observer = step_observer
64
64
 
65
65
  # Memory for tracking workflow
@@ -171,7 +171,7 @@ class TaskerAgent(AsyncAgent):
171
171
  api_key=self.api_key,
172
172
  base_url=self.base_url,
173
173
  model=self.model,
174
- max_steps_per_subtask=10, # Smaller steps per subtask
174
+ max_steps_per_subtask=20, # Smaller steps per subtask
175
175
  reflection_interval=self.reflection_interval,
176
176
  temperature=self.temperature,
177
177
  planner=self.planner,
oagi/cli/agent.py CHANGED
@@ -30,12 +30,14 @@ def add_agent_parser(subparsers: argparse._SubParsersAction) -> None:
30
30
  run_parser.add_argument(
31
31
  "instruction", type=str, help="Task instruction for the agent to execute"
32
32
  )
33
- run_parser.add_argument("--model", type=str, help="Model to use (default: lux-v1)")
34
33
  run_parser.add_argument(
35
- "--max-steps", type=int, help="Maximum number of steps (default: 30)"
34
+ "--model", type=str, help="Model to use (default: lux-actor-1)"
36
35
  )
37
36
  run_parser.add_argument(
38
- "--temperature", type=float, help="Sampling temperature (default: 0.0)"
37
+ "--max-steps", type=int, help="Maximum number of steps (default: 20)"
38
+ )
39
+ run_parser.add_argument(
40
+ "--temperature", type=float, help="Sampling temperature (default: 0.5)"
39
41
  )
40
42
  run_parser.add_argument(
41
43
  "--mode",
@@ -79,9 +81,9 @@ def run_agent(args: argparse.Namespace) -> None:
79
81
  base_url = args.oagi_base_url or os.getenv(
80
82
  "OAGI_BASE_URL", "https://api.agiopen.org"
81
83
  )
82
- model = args.model or "lux-v1"
83
- max_steps = args.max_steps or 30
84
- temperature = args.temperature if args.temperature is not None else 0.0
84
+ model = args.model or "lux-actor-1"
85
+ max_steps = args.max_steps or 20
86
+ temperature = args.temperature if args.temperature is not None else 0.5
85
87
  mode = args.mode or "actor"
86
88
 
87
89
  # Create step tracker
oagi/cli/utils.py CHANGED
@@ -15,10 +15,16 @@ from oagi.exceptions import check_optional_dependency
15
15
 
16
16
 
17
17
  def get_sdk_version() -> str:
18
- try:
19
- return get_version("oagi")
20
- except Exception:
21
- return "unknown"
18
+ # Try oagi-core first (development install), then oagi (metapackage install)
19
+ for package_name in ["oagi-core", "oagi"]:
20
+ try:
21
+ version = get_version(package_name)
22
+ # Skip if version is 0.0.0 (placeholder/invalid)
23
+ if version != "0.0.0":
24
+ return version
25
+ except Exception:
26
+ continue
27
+ return "unknown"
22
28
 
23
29
 
24
30
  def display_version() -> None:
@@ -50,6 +56,7 @@ def display_config() -> None:
50
56
  config_vars = {
51
57
  "OAGI_API_KEY": os.getenv("OAGI_API_KEY", ""),
52
58
  "OAGI_BASE_URL": os.getenv("OAGI_BASE_URL", "https://api.agiopen.org"),
59
+ "OAGI_DEFAULT_MODEL": os.getenv("OAGI_DEFAULT_MODEL", "lux-actor-1"),
53
60
  "OAGI_LOG_LEVEL": os.getenv("OAGI_LOG_LEVEL", "INFO"),
54
61
  "OAGI_SERVER_HOST": os.getenv("OAGI_SERVER_HOST", "0.0.0.0"),
55
62
  "OAGI_SERVER_PORT": os.getenv("OAGI_SERVER_PORT", "8000"),
oagi/client/base.py CHANGED
@@ -41,16 +41,12 @@ class BaseClient(Generic[HttpClientT]):
41
41
 
42
42
  def __init__(self, base_url: str | None = None, api_key: str | None = None):
43
43
  # Get from environment if not provided
44
- self.base_url = base_url or os.getenv("OAGI_BASE_URL")
44
+ self.base_url = (
45
+ base_url or os.getenv("OAGI_BASE_URL") or "https://api.agiopen.org"
46
+ )
45
47
  self.api_key = api_key or os.getenv("OAGI_API_KEY")
46
48
 
47
49
  # Validate required configuration
48
- if not self.base_url:
49
- raise ConfigurationError(
50
- "OAGI base URL must be provided either as 'base_url' parameter or "
51
- "OAGI_BASE_URL environment variable"
52
- )
53
-
54
50
  if not self.api_key:
55
51
  raise ConfigurationError(
56
52
  "OAGI API key must be provided either as 'api_key' parameter or "
oagi/handler/_macos.py ADDED
@@ -0,0 +1,55 @@
1
+ # -----------------------------------------------------------------------------
2
+ # Copyright (c) OpenAGI Foundation
3
+ # All rights reserved.
4
+ #
5
+ # This file is part of the official API project.
6
+ # Licensed under the MIT License.
7
+ # -----------------------------------------------------------------------------
8
+
9
+ import pyautogui
10
+
11
+ from ..exceptions import check_optional_dependency
12
+
13
+ check_optional_dependency("Quartz", "macOS multiple clicks", "desktop")
14
+ import Quartz # noqa: E402
15
+
16
+
17
+ def macos_click(x: int, y: int, clicks: int = 1) -> None:
18
+ """
19
+ Execute a mouse click sequence on macOS with correct click state.
20
+
21
+ This avoids the PyAutoGUI bug where multi-clicks are sent as separate
22
+ single clicks (clickState=1), which macOS interprets as distinct events
23
+ rather than double/triple clicks.
24
+
25
+ Check https://github.com/asweigart/pyautogui/issues/672
26
+
27
+ Args:
28
+ x: X coordinate
29
+ y: Y coordinate
30
+ clicks: Number of clicks (1=single, 2=double, 3=triple)
31
+ """
32
+ # Move to position first using pyautogui to ensure consistency
33
+ pyautogui.moveTo(x, y)
34
+
35
+ point = Quartz.CGPoint(x=x, y=y)
36
+
37
+ # Create and post events for each click in the sequence
38
+ for i in range(1, clicks + 1):
39
+ # Create Down/Up events
40
+ mouse_down = Quartz.CGEventCreateMouseEvent(
41
+ None, Quartz.kCGEventLeftMouseDown, point, Quartz.kCGMouseButtonLeft
42
+ )
43
+ mouse_up = Quartz.CGEventCreateMouseEvent(
44
+ None, Quartz.kCGEventLeftMouseUp, point, Quartz.kCGMouseButtonLeft
45
+ )
46
+
47
+ # Set the click state (1 for first click, 2 for second, etc.)
48
+ Quartz.CGEventSetIntegerValueField(
49
+ mouse_down, Quartz.kCGMouseEventClickState, i
50
+ )
51
+ Quartz.CGEventSetIntegerValueField(mouse_up, Quartz.kCGMouseEventClickState, i)
52
+
53
+ # Post events
54
+ Quartz.CGEventPost(Quartz.kCGHIDEventTap, mouse_down)
55
+ Quartz.CGEventPost(Quartz.kCGHIDEventTap, mouse_up)
@@ -7,6 +7,7 @@
7
7
  # -----------------------------------------------------------------------------
8
8
 
9
9
  import re
10
+ import sys
10
11
  import time
11
12
 
12
13
  from pydantic import BaseModel, Field
@@ -17,6 +18,9 @@ from ..types import Action, ActionType
17
18
  check_optional_dependency("pyautogui", "PyautoguiActionHandler", "desktop")
18
19
  import pyautogui # noqa: E402
19
20
 
21
+ if sys.platform == "darwin":
22
+ from . import _macos
23
+
20
24
 
21
25
  class CapsLockManager:
22
26
  """Manages caps lock state for text transformation."""
@@ -186,11 +190,17 @@ class PyautoguiActionHandler:
186
190
 
187
191
  case ActionType.LEFT_DOUBLE:
188
192
  x, y = self._parse_coords(arg)
189
- pyautogui.doubleClick(x, y)
193
+ if sys.platform == "darwin":
194
+ _macos.macos_click(x, y, clicks=2)
195
+ else:
196
+ pyautogui.doubleClick(x, y)
190
197
 
191
198
  case ActionType.LEFT_TRIPLE:
192
199
  x, y = self._parse_coords(arg)
193
- pyautogui.tripleClick(x, y)
200
+ if sys.platform == "darwin":
201
+ _macos.macos_click(x, y, clicks=3)
202
+ else:
203
+ pyautogui.tripleClick(x, y)
194
204
 
195
205
  case ActionType.RIGHT_SINGLE:
196
206
  x, y = self._parse_coords(arg)
oagi/server/config.py CHANGED
@@ -28,11 +28,11 @@ class ServerConfig(BaseSettings):
28
28
  session_timeout_seconds: float = Field(default=10.0)
29
29
 
30
30
  # Model settings
31
- default_model: str = Field(default="lux-v1", alias="OAGI_DEFAULT_MODEL")
32
- default_temperature: float = Field(default=0.0, ge=0.0, le=2.0)
31
+ default_model: str = Field(default="lux-actor-1", alias="OAGI_DEFAULT_MODEL")
32
+ default_temperature: float = Field(default=0.5, ge=0.0, le=2.0)
33
33
 
34
34
  # Agent settings
35
- max_steps: int = Field(default=30, alias="OAGI_MAX_STEPS", ge=1, le=100)
35
+ max_steps: int = Field(default=20, alias="OAGI_MAX_STEPS", ge=1, le=100)
36
36
 
37
37
  # Socket.IO settings
38
38
  socketio_path: str = Field(default="/socket.io")
oagi/server/models.py CHANGED
@@ -75,7 +75,7 @@ class ScreenshotResponseData(BaseModel):
75
75
 
76
76
  # Action acknowledgement
77
77
  class ActionAckData(BaseModel):
78
- action_index: int = Field(...)
78
+ index: int = Field(...)
79
79
  success: bool = Field(...)
80
80
  error: str | None = Field(None)
81
81
  execution_time_ms: int | None = Field(None)
@@ -224,7 +224,7 @@ class SessionNamespace(socketio.AsyncNamespace):
224
224
  # Emit finish event
225
225
  await self.call(
226
226
  "finish",
227
- FinishEventData(action_index=0, total_actions=1).model_dump(),
227
+ FinishEventData(index=0, total=1).model_dump(),
228
228
  to=session.socket_id,
229
229
  timeout=self.config.socketio_timeout,
230
230
  )
oagi/task/async_.py CHANGED
@@ -23,7 +23,7 @@ class AsyncActor(BaseTask):
23
23
  self,
24
24
  api_key: str | None = None,
25
25
  base_url: str | None = None,
26
- model: str = "vision-model-v1",
26
+ model: str = "lux-actor-1",
27
27
  temperature: float | None = None,
28
28
  ):
29
29
  super().__init__(api_key, base_url, model, temperature)
@@ -110,7 +110,7 @@ class AsyncTask(AsyncActor):
110
110
  self,
111
111
  api_key: str | None = None,
112
112
  base_url: str | None = None,
113
- model: str = "vision-model-v1",
113
+ model: str = "lux-actor-1",
114
114
  temperature: float | None = None,
115
115
  ):
116
116
  warnings.warn(
oagi/task/async_short.py CHANGED
@@ -27,7 +27,7 @@ class AsyncShortTask(AsyncActor, BaseAutoMode):
27
27
  self,
28
28
  api_key: str | None = None,
29
29
  base_url: str | None = None,
30
- model: str = "vision-model-v1",
30
+ model: str = "lux-actor-1",
31
31
  temperature: float | None = None,
32
32
  ):
33
33
  warnings.warn(
oagi/task/short.py CHANGED
@@ -27,7 +27,7 @@ class ShortTask(Actor, BaseAutoMode):
27
27
  self,
28
28
  api_key: str | None = None,
29
29
  base_url: str | None = None,
30
- model: str = "vision-model-v1",
30
+ model: str = "lux-actor-1",
31
31
  temperature: float | None = None,
32
32
  ):
33
33
  warnings.warn(
oagi/task/sync.py CHANGED
@@ -23,7 +23,7 @@ class Actor(BaseTask):
23
23
  self,
24
24
  api_key: str | None = None,
25
25
  base_url: str | None = None,
26
- model: str = "vision-model-v1",
26
+ model: str = "lux-actor-1",
27
27
  temperature: float | None = None,
28
28
  ):
29
29
  super().__init__(api_key, base_url, model, temperature)
@@ -110,7 +110,7 @@ class Task(Actor):
110
110
  self,
111
111
  api_key: str | None = None,
112
112
  base_url: str | None = None,
113
- model: str = "vision-model-v1",
113
+ model: str = "lux-actor-1",
114
114
  temperature: float | None = None,
115
115
  ):
116
116
  warnings.warn(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: oagi-core
3
- Version: 0.9.1
3
+ Version: 0.9.2
4
4
  Summary: Official API of OpenAGI Foundation
5
5
  Project-URL: Homepage, https://github.com/agiopen-org/oagi
6
6
  Author-email: OpenAGI Foundation <contact@agiopen.org>
@@ -32,6 +32,7 @@ Requires-Dist: rich>=13.0.0
32
32
  Provides-Extra: desktop
33
33
  Requires-Dist: pillow>=11.3.0; extra == 'desktop'
34
34
  Requires-Dist: pyautogui>=0.9.54; extra == 'desktop'
35
+ Requires-Dist: pyobjc-framework-quartz>=9.0; (sys_platform == 'darwin') and extra == 'desktop'
35
36
  Provides-Extra: server
36
37
  Requires-Dist: fastapi[standard]>=0.115.0; extra == 'server'
37
38
  Requires-Dist: pydantic-settings>=2.0.0; extra == 'server'
@@ -2,46 +2,47 @@ oagi/__init__.py,sha256=cSqJ61OyscGJLHBCn53cS4PrCKC4DQl5xRDNkGR0TXo,3041
2
2
  oagi/exceptions.py,sha256=Rco37GQTPYUfc2vRO3hozxPF_s8mKFDpFvBg2UKWo3Y,3066
3
3
  oagi/logging.py,sha256=YT3KCMFj5fzO98R9xlDDgfSotUuz1xRD6OZeYM2rKoo,1760
4
4
  oagi/agent/__init__.py,sha256=JU9zuWuDzpzitsVJB4z5ddvx8RMm5nbP-bjUCL1Sfvo,834
5
- oagi/agent/default.py,sha256=FaaNTssDt5rcuEUppznATqNOTTEJFThcxbBpPChzwnU,3108
5
+ oagi/agent/default.py,sha256=0rnv-ZY5Gs4o25B6eVb1BFrOKWgNFo0TobLicNDkiHM,3095
6
6
  oagi/agent/factories.py,sha256=eE0hcXyJX4dk2nvRRlEvQPJqkBraeIaT7nXiED2lH_Q,1605
7
7
  oagi/agent/protocol.py,sha256=IQJGiMN4yZIacrh5e9JQsoM9TyHb8wJRQR4LAk8dSA0,1615
8
8
  oagi/agent/registry.py,sha256=4oG65E_bV47Xl6F-HX9KaVoV0pcoC1uRRDU4RT_m3uU,4841
9
9
  oagi/agent/tasker/__init__.py,sha256=faOC5ONY8ZKr4CjofC6HYg1WKWc1UiaGB9VHy8W280M,800
10
10
  oagi/agent/tasker/memory.py,sha256=JsJjUMpnJoKW4VFzd8FI4M-FhnEihTecL61KVgO_YBI,6051
11
11
  oagi/agent/tasker/models.py,sha256=VzvHB5hLv6qyYcyNiojVIEDlTzeGE4Quswk4EVIbzoI,2180
12
- oagi/agent/tasker/planner.py,sha256=j0Zhk6kw0LFtxkpjFhmeaTBxZfKLf3qqCNpGAuMuODw,13650
13
- oagi/agent/tasker/taskee_agent.py,sha256=9t_uIilH2KCnkv013mIfk2VPPNKz6wJtTyjEJLvZOzQ,14093
14
- oagi/agent/tasker/tasker_agent.py,sha256=d4khAfd1_Ra1KP7Y2un8BwUBeGh-Frwp2xWc7prI6F4,10954
12
+ oagi/agent/tasker/planner.py,sha256=PGBSMMpADSSWCcGnCPYm1TbxDgcqXLC_IKMzhQIGYn4,13972
13
+ oagi/agent/tasker/taskee_agent.py,sha256=LzjsD0NQlGiKoHZGirmcJNHV46kmWK-njoup-YVgzwQ,14111
14
+ oagi/agent/tasker/tasker_agent.py,sha256=jxXAopGEUQu7OB4jU8PDTMOBxwnRbOSEmBTLURK7X7M,10992
15
15
  oagi/cli/__init__.py,sha256=aDnJViTseShpo5fdGPTj-ELysZhmdvB6Z8mEj2D-_N4,359
16
- oagi/cli/agent.py,sha256=q0dLyjrzT3PkZreaXSqpHN_rH5fAB_jHyLonPy-V6hk,4453
16
+ oagi/cli/agent.py,sha256=UdAhKeXTQTC3TIfrugUblTnQ7vZ9e069EAFJlJvt1PE,4477
17
17
  oagi/cli/display.py,sha256=rkAxuHa40ZtKdmvwARev1rgyfsNyVvQ-J6RdjOZIPwc,1729
18
18
  oagi/cli/main.py,sha256=faHns0HaQCGyylDn2YZLpjQESuEiMYjoQVoMkt8FsH4,2292
19
19
  oagi/cli/server.py,sha256=Z1ic8r55yaeQBFRCsMNZStC1jRiJdnDGqe9On9LmFzQ,3031
20
20
  oagi/cli/tracking.py,sha256=jPH6QDUUwnfZ8bjQU6deofBmBflTEOOCINwinQJz9OI,1147
21
- oagi/cli/utils.py,sha256=QvDyoP0nU9aq4ORjnvJJAGRECmjh9WAmilKuk6zOGM8,2615
21
+ oagi/cli/utils.py,sha256=BI6C7WvC51NBsXEsjDONjSNwqdD4i0nHA_rsfpyLwmA,2986
22
22
  oagi/client/__init__.py,sha256=F9DShPUdb6vZYmN1fpM1VYzp4MWqUao_e_R1KYmM4Q4,410
23
23
  oagi/client/async_.py,sha256=t-GPHcz6xbHx_RPFv1V_hwZ1_f-O9ONH-Ahr0w-Nz8M,11046
24
- oagi/client/base.py,sha256=TlZk4LaYFlOQFmTTgTDzZ1XRAixqNO0pCwgJ7VhZOSU,17101
24
+ oagi/client/base.py,sha256=4ZfhouEyIcldStJG5ipxpxpD6iVRGrMUZruQX0WKiXE,16934
25
25
  oagi/client/sync.py,sha256=QKd6nTUXtyn1Am8YlFcpsoLh1KuHhQgbMemIkb7r39g,10882
26
26
  oagi/handler/__init__.py,sha256=Ha11L42K33K3L9S4lQ10UC0DnD5g6egtQUsJpS_tKgg,835
27
+ oagi/handler/_macos.py,sha256=aHkp-xGzvWL_SBjuS690i9jf93OITFJfGHzHeYCK65I,1957
27
28
  oagi/handler/async_pyautogui_action_handler.py,sha256=hQzseR1yBD0QMpgsEVNsUmuApGVAIIyGYD06BXd82Dc,1615
28
29
  oagi/handler/async_screenshot_maker.py,sha256=8QCtUV59ozpOpvkqhUMb8QDI2qje2gsoFT1qB60tfJM,1689
29
30
  oagi/handler/pil_image.py,sha256=yUcAoGBL-aZ0PCjSaAmQsDwtyzjldXHqXQp_OYRk6e4,4080
30
- oagi/handler/pyautogui_action_handler.py,sha256=rhQAes81-hR5KoFiB4Ph6Cw5r04vYiqvZx64eA31pBw,9954
31
+ oagi/handler/pyautogui_action_handler.py,sha256=8jXF7Muc68JVjJY-cGUQN58WO44bCwI6AIc0mkEV5Nw,10272
31
32
  oagi/handler/screenshot_maker.py,sha256=j1jTW-awx3vAnb1N5_FIMBC0Z-rNVQbiBP-S6Gh5dlE,1284
32
33
  oagi/server/__init__.py,sha256=uZx8u3vJUb87kkNzwmmVrgAgbqRu0WxyMIQCLSx56kk,452
33
34
  oagi/server/agent_wrappers.py,sha256=4f6ZKvqy9TDA57QRHGjAQVhpHmPE5QNeewmmURg5Ajo,3288
34
- oagi/server/config.py,sha256=RstTWbPwWCfW9ZRJcns3uCbdhXxuUnerKjxR1pCGbqY,1602
35
+ oagi/server/config.py,sha256=2gJ-pDpYAxNUubwSsGKOieGcOtNX9b5YGuSqtf6g2P0,1607
35
36
  oagi/server/main.py,sha256=jnTxk7Prc5CzlsUnkBNJp4MOoYN-7HN_Be_m1d3COa8,4829
36
- oagi/server/models.py,sha256=E0R80zIz-YLpwx4VQyADQEnM89ZY9bXmjuswfhCuqMc,2595
37
+ oagi/server/models.py,sha256=m04q03thCPMCrY1Urgc3t6yAvuy8XK4jQBa3Z-3iWWg,2588
37
38
  oagi/server/session_store.py,sha256=UI14NiApAwvZWmMOG4SvPE2WkbGkNTHToZhTXQjN2_U,3624
38
- oagi/server/socketio_server.py,sha256=UeNm9bemYMZqtYWp3i09BLUyEWW6t8yTkl2pjpSeT_M,14359
39
+ oagi/server/socketio_server.py,sha256=NFw5Zu7yCFLW-gOu9OX8k6mNFaCN2jtX1Tob_9w5YM0,14344
39
40
  oagi/task/__init__.py,sha256=g_8_7ZLDLKuCGzyrB42OzY3gSOjd_SxzkJW3_pf-PXs,662
40
- oagi/task/async_.py,sha256=IwoLy0SHLNI7k6I5Ja0WmWa8U-SDLogoM-qHFjbVISU,3924
41
- oagi/task/async_short.py,sha256=LjgWotSxyuTRpNNFsAhAP0Y0raze0GHyoWqthLaPoS8,2755
41
+ oagi/task/async_.py,sha256=u1vJKkyRzxmnwbMxj0GekLkH6cRCKDZQAy_5myjBUb8,3916
42
+ oagi/task/async_short.py,sha256=tyJb0onY5FASMvhsK175vJUZrsp2T6Ow_60I-gBLTmA,2751
42
43
  oagi/task/base.py,sha256=Udp_Yl5GVUWR7RtayrQlwa8Yg_Nrsyal3mGEkaG8FmE,4447
43
- oagi/task/short.py,sha256=mgXao6AXuR8XvHwnf3KjzsCm1PZRLzKg1R-2JmS2yoM,2564
44
- oagi/task/sync.py,sha256=Ag171gJxcWkLgmna4X5Ipgf3qEDDj2JnZEQ9b-mH0mM,3787
44
+ oagi/task/short.py,sha256=b8cNpZvm5zSEwYE0dZX8uuRLLBmq6yKTTmjUGcXsbFM,2560
45
+ oagi/task/sync.py,sha256=Qm4eXmOEo6fDjMWPW8sona6b1QJxGOWU104cQqk2rvo,3779
45
46
  oagi/types/__init__.py,sha256=Vz6JArE8XvBWlES8CVLy-Nx97gooh1OSsltBL6iaFiM,884
46
47
  oagi/types/action_handler.py,sha256=NH8E-m5qpGqWcXzTSWfF7W0Xdp8SkzJsbhCmQ0B96cg,1075
47
48
  oagi/types/async_action_handler.py,sha256=k1AaqSkFcXlxwW8sn-w0WFHGsIqHFLbcOPrkknmSVug,1116
@@ -55,8 +56,8 @@ oagi/types/models/action.py,sha256=hh6mRRSSWgrW4jpZo71zGMCOcZpV5_COu4148uG6G48,9
55
56
  oagi/types/models/client.py,sha256=fCN18DBq5XDjNyYB8w-2dFeQ_K9ywwdyh-rXa0GToU4,1357
56
57
  oagi/types/models/image_config.py,sha256=tl6abVg_-IAPLwpaWprgknXu7wRWriMg-AEVyUX73v0,1567
57
58
  oagi/types/models/step.py,sha256=RSI4H_2rrUBq_xyCoWKaq7JHdJWNobtQppaKC1l0aWU,471
58
- oagi_core-0.9.1.dist-info/METADATA,sha256=zJ3xNe4fGIUHAff90wp0s_d98QsjEunz848CWcoQd2w,7543
59
- oagi_core-0.9.1.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
60
- oagi_core-0.9.1.dist-info/entry_points.txt,sha256=zzgsOSWX6aN3KUB0Z1it8DMxFFBJBqmZVqMVAJRjYuw,44
61
- oagi_core-0.9.1.dist-info/licenses/LICENSE,sha256=sy5DLA2M29jFT4UfWsuBF9BAr3FnRkYtnAu6oDZiIf8,1075
62
- oagi_core-0.9.1.dist-info/RECORD,,
59
+ oagi_core-0.9.2.dist-info/METADATA,sha256=aOVV3474s0JOmFZ2hGbVvqnBTH1UdK0vLTE2HRnUWS4,7638
60
+ oagi_core-0.9.2.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
61
+ oagi_core-0.9.2.dist-info/entry_points.txt,sha256=zzgsOSWX6aN3KUB0Z1it8DMxFFBJBqmZVqMVAJRjYuw,44
62
+ oagi_core-0.9.2.dist-info/licenses/LICENSE,sha256=sy5DLA2M29jFT4UfWsuBF9BAr3FnRkYtnAu6oDZiIf8,1075
63
+ oagi_core-0.9.2.dist-info/RECORD,,