oagi-core 0.13.1__tar.gz → 0.13.2__tar.gz

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.
Files changed (129) hide show
  1. {oagi_core-0.13.1 → oagi_core-0.13.2}/PKG-INFO +1 -1
  2. {oagi_core-0.13.1 → oagi_core-0.13.2}/examples/openai_agent_loop_example.py +3 -3
  3. {oagi_core-0.13.1 → oagi_core-0.13.2}/metapackage/pyproject.toml +2 -2
  4. {oagi_core-0.13.1 → oagi_core-0.13.2}/metapackage/uv.lock +5 -5
  5. {oagi_core-0.13.1 → oagi_core-0.13.2}/pyproject.toml +1 -1
  6. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/pyautogui_action_handler.py +17 -4
  7. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_pyautogui_action_handler.py +16 -8
  8. {oagi_core-0.13.1 → oagi_core-0.13.2}/uv.lock +1 -1
  9. {oagi_core-0.13.1 → oagi_core-0.13.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  10. {oagi_core-0.13.1 → oagi_core-0.13.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  11. {oagi_core-0.13.1 → oagi_core-0.13.2}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  12. {oagi_core-0.13.1 → oagi_core-0.13.2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  13. {oagi_core-0.13.1 → oagi_core-0.13.2}/.github/workflows/ci.yml +0 -0
  14. {oagi_core-0.13.1 → oagi_core-0.13.2}/.github/workflows/release.yml +0 -0
  15. {oagi_core-0.13.1 → oagi_core-0.13.2}/.gitignore +0 -0
  16. {oagi_core-0.13.1 → oagi_core-0.13.2}/.python-version +0 -0
  17. {oagi_core-0.13.1 → oagi_core-0.13.2}/CONTRIBUTING.md +0 -0
  18. {oagi_core-0.13.1 → oagi_core-0.13.2}/LICENSE +0 -0
  19. {oagi_core-0.13.1 → oagi_core-0.13.2}/Makefile +0 -0
  20. {oagi_core-0.13.1 → oagi_core-0.13.2}/README.md +0 -0
  21. {oagi_core-0.13.1 → oagi_core-0.13.2}/examples/async_google_weather.py +0 -0
  22. {oagi_core-0.13.1 → oagi_core-0.13.2}/examples/execute_task_auto.py +0 -0
  23. {oagi_core-0.13.1 → oagi_core-0.13.2}/examples/execute_task_manual.py +0 -0
  24. {oagi_core-0.13.1 → oagi_core-0.13.2}/examples/google_weather.py +0 -0
  25. {oagi_core-0.13.1 → oagi_core-0.13.2}/examples/screenshot_with_config.py +0 -0
  26. {oagi_core-0.13.1 → oagi_core-0.13.2}/examples/tasker_agent_example.py +0 -0
  27. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/__init__.py +0 -0
  28. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/actor/__init__.py +0 -0
  29. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/actor/async_.py +0 -0
  30. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/actor/async_short.py +0 -0
  31. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/actor/base.py +0 -0
  32. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/actor/short.py +0 -0
  33. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/actor/sync.py +0 -0
  34. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/__init__.py +0 -0
  35. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/default.py +0 -0
  36. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/factories.py +0 -0
  37. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/observer/__init__.py +0 -0
  38. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/observer/agent_observer.py +0 -0
  39. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/observer/events.py +0 -0
  40. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/observer/exporters.py +0 -0
  41. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/observer/protocol.py +0 -0
  42. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/observer/report_template.html +0 -0
  43. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/protocol.py +0 -0
  44. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/registry.py +0 -0
  45. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/tasker/__init__.py +0 -0
  46. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/tasker/memory.py +0 -0
  47. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/tasker/models.py +0 -0
  48. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/tasker/planner.py +0 -0
  49. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/tasker/taskee_agent.py +0 -0
  50. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/agent/tasker/tasker_agent.py +0 -0
  51. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/cli/__init__.py +0 -0
  52. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/cli/agent.py +0 -0
  53. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/cli/display.py +0 -0
  54. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/cli/main.py +0 -0
  55. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/cli/server.py +0 -0
  56. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/cli/tracking.py +0 -0
  57. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/cli/utils.py +0 -0
  58. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/client/__init__.py +0 -0
  59. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/client/async_.py +0 -0
  60. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/client/base.py +0 -0
  61. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/client/sync.py +0 -0
  62. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/constants.py +0 -0
  63. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/exceptions.py +0 -0
  64. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/__init__.py +0 -0
  65. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/_macos.py +0 -0
  66. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/_windows.py +0 -0
  67. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/_ydotool.py +0 -0
  68. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/async_pyautogui_action_handler.py +0 -0
  69. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/async_screenshot_maker.py +0 -0
  70. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/async_ydotool_action_handler.py +0 -0
  71. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/capslock_manager.py +0 -0
  72. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/pil_image.py +0 -0
  73. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/screenshot_maker.py +0 -0
  74. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/utils.py +0 -0
  75. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/wayland_support.py +0 -0
  76. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/handler/ydotool_action_handler.py +0 -0
  77. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/logging.py +0 -0
  78. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/platform_info.py +0 -0
  79. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/server/__init__.py +0 -0
  80. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/server/agent_wrappers.py +0 -0
  81. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/server/config.py +0 -0
  82. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/server/main.py +0 -0
  83. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/server/models.py +0 -0
  84. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/server/session_store.py +0 -0
  85. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/server/socketio_server.py +0 -0
  86. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/task/__init__.py +0 -0
  87. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/__init__.py +0 -0
  88. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/action_handler.py +0 -0
  89. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/async_action_handler.py +0 -0
  90. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/async_image_provider.py +0 -0
  91. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/image.py +0 -0
  92. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/image_provider.py +0 -0
  93. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/models/__init__.py +0 -0
  94. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/models/action.py +0 -0
  95. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/models/client.py +0 -0
  96. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/models/image_config.py +0 -0
  97. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/models/step.py +0 -0
  98. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/step_observer.py +0 -0
  99. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/types/url.py +0 -0
  100. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/utils/__init__.py +0 -0
  101. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/utils/output_parser.py +0 -0
  102. {oagi_core-0.13.1 → oagi_core-0.13.2}/src/oagi/utils/prompt_builder.py +0 -0
  103. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/__init__.py +0 -0
  104. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/conftest.py +0 -0
  105. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_action_parsing.py +0 -0
  106. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_actor.py +0 -0
  107. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_agent/test_agent_wrappers.py +0 -0
  108. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_agent/test_default_agent.py +0 -0
  109. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_agent_registry.py +0 -0
  110. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_async_actor.py +0 -0
  111. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_async_client.py +0 -0
  112. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_async_handlers.py +0 -0
  113. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_cli.py +0 -0
  114. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_logging.py +0 -0
  115. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_mac_double_click.py +0 -0
  116. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_observer.py +0 -0
  117. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_pil_image.py +0 -0
  118. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_planner.py +0 -0
  119. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_planner_memory.py +0 -0
  120. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_screenshot_maker.py +0 -0
  121. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_server/__init__.py +0 -0
  122. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_server/test_config.py +0 -0
  123. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_server/test_session_store.py +0 -0
  124. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_server/test_socketio_integration.py +0 -0
  125. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_sync_client.py +0 -0
  126. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_taskee_agent.py +0 -0
  127. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/test_tasker_agent.py +0 -0
  128. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/utils/__init__.py +0 -0
  129. {oagi_core-0.13.1 → oagi_core-0.13.2}/tests/utils/test_output_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: oagi-core
3
- Version: 0.13.1
3
+ Version: 0.13.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>
@@ -28,10 +28,10 @@ from oagi.utils.output_parser import parse_raw_output
28
28
  from oagi.utils.prompt_builder import build_prompt
29
29
 
30
30
  DEFAULT_BASE_URL = "https://api.agiopen.org"
31
- DEFAULT_MODEL = "lux-actor-1"
31
+ DEFAULT_MODEL = "lux-thinker-1"
32
32
 
33
33
 
34
- def agent_loop(task_description: str, max_steps: int = 10) -> bool:
34
+ def agent_loop(task_description: str, max_steps: int = 100) -> bool:
35
35
  """
36
36
  Run an agent loop to complete a task.
37
37
 
@@ -114,5 +114,5 @@ if __name__ == "__main__":
114
114
  # Example task
115
115
  task = "Find some shoes on amazon"
116
116
 
117
- success = agent_loop(task, max_steps=20)
117
+ success = agent_loop(task, max_steps=100)
118
118
  print(f"\nFinal result: {'Success' if success else 'Failed'}")
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oagi"
7
- version = "0.13.1"
7
+ version = "0.13.2"
8
8
  description = "Official API of OpenAGI Foundation (metapackage with all features)"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -16,7 +16,7 @@ authors = [
16
16
  requires-python = ">= 3.10"
17
17
 
18
18
  dependencies = [
19
- "oagi-core[desktop,server]==0.13.1",
19
+ "oagi-core[desktop,server]==0.13.2",
20
20
  ]
21
21
 
22
22
  [project.urls]
@@ -518,18 +518,18 @@ sdist = { url = "https://files.pythonhosted.org/packages/28/fa/b2ba8229b9381e8f6
518
518
 
519
519
  [[package]]
520
520
  name = "oagi"
521
- version = "0.13.1"
521
+ version = "0.13.2"
522
522
  source = { editable = "." }
523
523
  dependencies = [
524
524
  { name = "oagi-core", extra = ["desktop", "server"] },
525
525
  ]
526
526
 
527
527
  [package.metadata]
528
- requires-dist = [{ name = "oagi-core", extras = ["desktop", "server"], specifier = "==0.13.0" }]
528
+ requires-dist = [{ name = "oagi-core", extras = ["desktop", "server"], specifier = "==0.13.1" }]
529
529
 
530
530
  [[package]]
531
531
  name = "oagi-core"
532
- version = "0.13.0"
532
+ version = "0.13.1"
533
533
  source = { registry = "https://pypi.org/simple" }
534
534
  dependencies = [
535
535
  { name = "httpx" },
@@ -537,9 +537,9 @@ dependencies = [
537
537
  { name = "pydantic" },
538
538
  { name = "rich" },
539
539
  ]
540
- sdist = { url = "https://files.pythonhosted.org/packages/9c/45/ace3fe538b40725d1b0dcd61fbe445fe73ad455249e303b8c66a54ec3691/oagi_core-0.13.0.tar.gz", hash = "sha256:4e6f5a260b542286d92c050995cfa3be1ff1c21899dba8786d6840e9eac21dd0", size = 303398, upload-time = "2025-12-23T16:16:24.033Z" }
540
+ sdist = { url = "https://files.pythonhosted.org/packages/62/b0/6006c57afc693a4afdc5389f1c93e83654745ec2b25d33c091621aec7d15/oagi_core-0.13.1.tar.gz", hash = "sha256:8dcbf45c6eb7203573d04122ebb53c67d7c955bb6bbfe8332fe2e641e7cb689f", size = 304385, upload-time = "2026-01-12T04:14:18.758Z" }
541
541
  wheels = [
542
- { url = "https://files.pythonhosted.org/packages/37/07/39f4a2cd2dea6f7d815deb46395545225cf218f447fad3a9a2b4df848ba1/oagi_core-0.13.0-py3-none-any.whl", hash = "sha256:53045574e669ea8442b6b2d0d6acaf6eb56477260276d922cc7f08c0c92adad2", size = 110020, upload-time = "2025-12-23T16:16:23.1Z" },
542
+ { url = "https://files.pythonhosted.org/packages/6e/78/0a04d5a28313ab6dc783a5c4d8b32c1871fa2a140f75dfe42f56024c8865/oagi_core-0.13.1-py3-none-any.whl", hash = "sha256:b29637ca080fa7092224231b113b35c07f09657bed203e8e26e13e2c2a65665f", size = 110049, upload-time = "2026-01-12T04:14:17.645Z" },
543
543
  ]
544
544
 
545
545
  [package.optional-dependencies]
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oagi-core"
7
- version = "0.13.1"
7
+ version = "0.13.2"
8
8
  description = "Official API of OpenAGI Foundation"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -51,6 +51,10 @@ class PyautoguiConfig(BaseModel):
51
51
  default=True,
52
52
  description="Replace 'ctrl' with 'command' in hotkey combinations on macOS",
53
53
  )
54
+ click_pre_delay: float = Field(
55
+ default=0.1,
56
+ description="Delay in seconds after moving to position before clicking",
57
+ )
54
58
 
55
59
 
56
60
  class PyautoguiActionHandler:
@@ -158,6 +162,11 @@ class PyautoguiActionHandler:
158
162
  keys = [self._normalize_key(key) for key in args_str.split("+")]
159
163
  return keys
160
164
 
165
+ def _move_and_wait(self, x: int, y: int) -> None:
166
+ """Move cursor to position and wait before clicking."""
167
+ pyautogui.moveTo(x, y)
168
+ time.sleep(self.config.click_pre_delay)
169
+
161
170
  def _execute_single_action(self, action: Action) -> None:
162
171
  """Execute a single action once."""
163
172
  arg = action.argument.strip("()") # Remove outer parentheses if present
@@ -165,25 +174,29 @@ class PyautoguiActionHandler:
165
174
  match action.type:
166
175
  case ActionType.CLICK:
167
176
  x, y = self._parse_coords(arg)
168
- pyautogui.click(x, y)
177
+ self._move_and_wait(x, y)
178
+ pyautogui.click()
169
179
 
170
180
  case ActionType.LEFT_DOUBLE:
171
181
  x, y = self._parse_coords(arg)
182
+ self._move_and_wait(x, y)
172
183
  if sys.platform == "darwin":
173
184
  _macos.macos_click(x, y, clicks=2)
174
185
  else:
175
- pyautogui.doubleClick(x, y)
186
+ pyautogui.doubleClick()
176
187
 
177
188
  case ActionType.LEFT_TRIPLE:
178
189
  x, y = self._parse_coords(arg)
190
+ self._move_and_wait(x, y)
179
191
  if sys.platform == "darwin":
180
192
  _macos.macos_click(x, y, clicks=3)
181
193
  else:
182
- pyautogui.tripleClick(x, y)
194
+ pyautogui.tripleClick()
183
195
 
184
196
  case ActionType.RIGHT_SINGLE:
185
197
  x, y = self._parse_coords(arg)
186
- pyautogui.rightClick(x, y)
198
+ self._move_and_wait(x, y)
199
+ pyautogui.rightClick()
187
200
 
188
201
  case ActionType.DRAG:
189
202
  x1, y1, x2, y2 = self._parse_drag_coords(arg)
@@ -54,9 +54,9 @@ def test_coordinate_based_actions(
54
54
  action = Action(type=action_type, argument=argument, count=1)
55
55
  handler([action])
56
56
 
57
- getattr(mock_pyautogui, expected_method).assert_called_once_with(
58
- *expected_coords
59
- )
57
+ # Click actions now use moveTo first, then click without coordinates
58
+ mock_pyautogui.moveTo.assert_called_with(*expected_coords)
59
+ getattr(mock_pyautogui, expected_method).assert_called_once_with()
60
60
 
61
61
 
62
62
  def test_drag_action(handler, mock_pyautogui, config):
@@ -262,7 +262,9 @@ class TestCornerCoordinatesHandling:
262
262
  handler = PyautoguiActionHandler()
263
263
  action = Action(type=ActionType.CLICK, argument=input_coords, count=1)
264
264
  handler([action])
265
- mock_pyautogui.click.assert_called_once_with(*expected_coords)
265
+ # Click actions now use moveTo first, then click without coordinates
266
+ mock_pyautogui.moveTo.assert_called_with(*expected_coords)
267
+ mock_pyautogui.click.assert_called_once_with()
266
268
 
267
269
  def test_drag_with_corner_coordinates(self, mock_pyautogui, config):
268
270
  """Test drag operations with corner coordinates."""
@@ -300,10 +302,16 @@ class TestCornerCoordinatesHandling:
300
302
  with patch.object(sys, "platform", "linux"):
301
303
  handler(actions)
302
304
 
303
- # All corner coordinates should be adjusted
304
- mock_pyautogui.doubleClick.assert_called_once_with(1, 1)
305
- mock_pyautogui.tripleClick.assert_called_once_with(1919, 1)
306
- mock_pyautogui.rightClick.assert_called_once_with(1, 1079)
305
+ # All click actions now use moveTo first, then click without coordinates
306
+ # Check moveTo was called with the adjusted corner coordinates
307
+ moveTo_calls = mock_pyautogui.moveTo.call_args_list
308
+ assert (1, 1) in [call[0] for call in moveTo_calls]
309
+ assert (1919, 1) in [call[0] for call in moveTo_calls]
310
+ assert (1, 1079) in [call[0] for call in moveTo_calls]
311
+ # Click methods called without coordinates
312
+ mock_pyautogui.doubleClick.assert_called_once_with()
313
+ mock_pyautogui.tripleClick.assert_called_once_with()
314
+ mock_pyautogui.rightClick.assert_called_once_with()
307
315
 
308
316
 
309
317
  class TestCapsLockIntegration:
@@ -535,7 +535,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/28/fa/b2ba8229b9381e8f6
535
535
 
536
536
  [[package]]
537
537
  name = "oagi-core"
538
- version = "0.13.1"
538
+ version = "0.13.2"
539
539
  source = { editable = "." }
540
540
  dependencies = [
541
541
  { name = "httpx" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes