oagi-core 0.10.1__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.
Files changed (68) hide show
  1. oagi/__init__.py +148 -0
  2. oagi/agent/__init__.py +33 -0
  3. oagi/agent/default.py +124 -0
  4. oagi/agent/factories.py +74 -0
  5. oagi/agent/observer/__init__.py +38 -0
  6. oagi/agent/observer/agent_observer.py +99 -0
  7. oagi/agent/observer/events.py +28 -0
  8. oagi/agent/observer/exporters.py +445 -0
  9. oagi/agent/observer/protocol.py +12 -0
  10. oagi/agent/protocol.py +55 -0
  11. oagi/agent/registry.py +155 -0
  12. oagi/agent/tasker/__init__.py +33 -0
  13. oagi/agent/tasker/memory.py +160 -0
  14. oagi/agent/tasker/models.py +77 -0
  15. oagi/agent/tasker/planner.py +408 -0
  16. oagi/agent/tasker/taskee_agent.py +512 -0
  17. oagi/agent/tasker/tasker_agent.py +324 -0
  18. oagi/cli/__init__.py +11 -0
  19. oagi/cli/agent.py +281 -0
  20. oagi/cli/display.py +56 -0
  21. oagi/cli/main.py +77 -0
  22. oagi/cli/server.py +94 -0
  23. oagi/cli/tracking.py +55 -0
  24. oagi/cli/utils.py +89 -0
  25. oagi/client/__init__.py +12 -0
  26. oagi/client/async_.py +290 -0
  27. oagi/client/base.py +457 -0
  28. oagi/client/sync.py +293 -0
  29. oagi/exceptions.py +118 -0
  30. oagi/handler/__init__.py +24 -0
  31. oagi/handler/_macos.py +55 -0
  32. oagi/handler/async_pyautogui_action_handler.py +44 -0
  33. oagi/handler/async_screenshot_maker.py +47 -0
  34. oagi/handler/pil_image.py +102 -0
  35. oagi/handler/pyautogui_action_handler.py +291 -0
  36. oagi/handler/screenshot_maker.py +41 -0
  37. oagi/logging.py +55 -0
  38. oagi/server/__init__.py +13 -0
  39. oagi/server/agent_wrappers.py +98 -0
  40. oagi/server/config.py +46 -0
  41. oagi/server/main.py +157 -0
  42. oagi/server/models.py +98 -0
  43. oagi/server/session_store.py +116 -0
  44. oagi/server/socketio_server.py +405 -0
  45. oagi/task/__init__.py +21 -0
  46. oagi/task/async_.py +101 -0
  47. oagi/task/async_short.py +76 -0
  48. oagi/task/base.py +157 -0
  49. oagi/task/short.py +76 -0
  50. oagi/task/sync.py +99 -0
  51. oagi/types/__init__.py +50 -0
  52. oagi/types/action_handler.py +30 -0
  53. oagi/types/async_action_handler.py +30 -0
  54. oagi/types/async_image_provider.py +38 -0
  55. oagi/types/image.py +17 -0
  56. oagi/types/image_provider.py +35 -0
  57. oagi/types/models/__init__.py +32 -0
  58. oagi/types/models/action.py +33 -0
  59. oagi/types/models/client.py +68 -0
  60. oagi/types/models/image_config.py +47 -0
  61. oagi/types/models/step.py +17 -0
  62. oagi/types/step_observer.py +93 -0
  63. oagi/types/url.py +3 -0
  64. oagi_core-0.10.1.dist-info/METADATA +245 -0
  65. oagi_core-0.10.1.dist-info/RECORD +68 -0
  66. oagi_core-0.10.1.dist-info/WHEEL +4 -0
  67. oagi_core-0.10.1.dist-info/entry_points.txt +2 -0
  68. oagi_core-0.10.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,47 @@
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
+ from typing import Literal
10
+
11
+ from pydantic import BaseModel, Field, field_validator
12
+
13
+
14
+ class ImageConfig(BaseModel):
15
+ """Configuration for image capture and processing."""
16
+
17
+ format: Literal["PNG", "JPEG"] = Field(
18
+ default="JPEG", description="Image format for encoding"
19
+ )
20
+ quality: int = Field(
21
+ default=85,
22
+ ge=1,
23
+ le=100,
24
+ description="JPEG quality (1-100, only applies to JPEG format)",
25
+ )
26
+ width: int | None = Field(
27
+ default=1260, description="Target width in pixels (will resize to exact size)"
28
+ )
29
+ height: int | None = Field(
30
+ default=700, description="Target height in pixels (will resize to exact size)"
31
+ )
32
+ optimize: bool = Field(
33
+ default=False,
34
+ description="Enable PNG optimization (only applies to PNG format)",
35
+ )
36
+ resample: Literal["NEAREST", "BILINEAR", "BICUBIC", "LANCZOS"] = Field(
37
+ default="LANCZOS", description="Resampling filter for resizing"
38
+ )
39
+
40
+ @field_validator("quality")
41
+ @classmethod
42
+ def validate_quality(cls, v: int, info) -> int:
43
+ """Validate quality parameter based on format."""
44
+ values = info.data
45
+ if values.get("format") == "PNG" and v != 85:
46
+ return 85
47
+ return v
@@ -0,0 +1,17 @@
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
+ from pydantic import BaseModel
10
+
11
+ from .action import Action
12
+
13
+
14
+ class Step(BaseModel):
15
+ reason: str | None = None
16
+ actions: list[Action]
17
+ stop: bool = False
@@ -0,0 +1,93 @@
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
+ from datetime import datetime
10
+ from typing import Literal, Protocol
11
+
12
+ from pydantic import BaseModel, Field
13
+
14
+ from .models import Action, Step
15
+
16
+
17
+ class BaseEvent(BaseModel):
18
+ """Base class for all observer events with automatic timestamp."""
19
+
20
+ timestamp: datetime = Field(default_factory=datetime.now)
21
+
22
+
23
+ class ImageEvent(BaseEvent):
24
+ """Event emitted when a screenshot is captured."""
25
+
26
+ type: Literal["image"] = "image"
27
+ step_num: int
28
+ image: bytes | str
29
+
30
+
31
+ class StepEvent(BaseEvent):
32
+ """Event emitted when LLM returns a step decision."""
33
+
34
+ type: Literal["step"] = "step"
35
+ step_num: int
36
+ image: bytes | str
37
+ step: Step
38
+
39
+
40
+ class ActionEvent(BaseEvent):
41
+ """Event emitted after actions are executed."""
42
+
43
+ type: Literal["action"] = "action"
44
+ step_num: int
45
+ actions: list[Action]
46
+ error: str | None = None
47
+
48
+
49
+ class LogEvent(BaseEvent):
50
+ """Event for custom log messages."""
51
+
52
+ type: Literal["log"] = "log"
53
+ message: str
54
+
55
+
56
+ class SplitEvent(BaseEvent):
57
+ """Event for visual separators in exported reports."""
58
+
59
+ type: Literal["split"] = "split"
60
+ label: str = ""
61
+
62
+
63
+ class PlanEvent(BaseEvent):
64
+ """Event emitted for planner activities (planning, reflection, summary)."""
65
+
66
+ type: Literal["plan"] = "plan"
67
+ phase: Literal["initial", "reflection", "summary"]
68
+ image: bytes | str | None = None
69
+ reasoning: str
70
+ result: str | None = None
71
+
72
+
73
+ ObserverEvent = ImageEvent | StepEvent | ActionEvent | LogEvent | SplitEvent | PlanEvent
74
+
75
+
76
+ class AsyncObserver(Protocol):
77
+ """Protocol for observing agent execution events.
78
+
79
+ Observers receive events during agent execution, enabling
80
+ recording, tracking, logging, or other side effects.
81
+ """
82
+
83
+ async def on_event(self, event: ObserverEvent) -> None:
84
+ """Called when an agent execution event occurs.
85
+
86
+ Args:
87
+ event: The event that occurred during agent execution.
88
+ """
89
+ ...
90
+
91
+
92
+ # Deprecated: Use AsyncObserver instead
93
+ AsyncStepObserver = AsyncObserver
oagi/types/url.py ADDED
@@ -0,0 +1,3 @@
1
+ from typing import NewType
2
+
3
+ URL = NewType("URL", str)
@@ -0,0 +1,245 @@
1
+ Metadata-Version: 2.3
2
+ Name: oagi-core
3
+ Version: 0.10.1
4
+ Summary: Official API of OpenAGI Foundation
5
+ Project-URL: Homepage, https://github.com/agiopen-org/oagi
6
+ Author-email: OpenAGI Foundation <contact@agiopen.org>
7
+ License: MIT License
8
+
9
+ Copyright (c) 2025 OpenAGI Foundation
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+ Requires-Python: >=3.10
29
+ Requires-Dist: httpx>=0.28.0
30
+ Requires-Dist: pydantic>=2.0.0
31
+ Requires-Dist: rich>=13.0.0
32
+ Provides-Extra: desktop
33
+ Requires-Dist: pillow>=11.3.0; extra == 'desktop'
34
+ Requires-Dist: pyautogui>=0.9.54; extra == 'desktop'
35
+ Requires-Dist: pyobjc-framework-applicationservices>=9.0; (sys_platform == 'darwin') and extra == 'desktop'
36
+ Requires-Dist: pyobjc-framework-quartz>=9.0; (sys_platform == 'darwin') and extra == 'desktop'
37
+ Provides-Extra: server
38
+ Requires-Dist: fastapi[standard]>=0.115.0; extra == 'server'
39
+ Requires-Dist: pydantic-settings>=2.0.0; extra == 'server'
40
+ Requires-Dist: python-socketio>=5.11.0; extra == 'server'
41
+ Requires-Dist: uvicorn[standard]>=0.32.0; extra == 'server'
42
+ Description-Content-Type: text/markdown
43
+
44
+ # OAGI Python SDK
45
+
46
+ Python SDK for the OAGI API - vision-based task automation.
47
+
48
+ ## Installation
49
+
50
+ ```bash
51
+ # Recommended: All features (desktop automation + server)
52
+ pip install oagi
53
+
54
+ # Or install core only (minimal dependencies)
55
+ pip install oagi-core
56
+
57
+ # Or install with specific features
58
+ pip install oagi-core[desktop] # Desktop automation support
59
+ pip install oagi-core[server] # Server support
60
+ ```
61
+
62
+ **Requires Python >= 3.10**
63
+
64
+ ### Installation Options
65
+
66
+ - **`oagi`** (Recommended): Metapackage that includes all features (desktop + server). Equivalent to `oagi-core[desktop,server]`.
67
+ - **`oagi-core`**: Core SDK with minimal dependencies (httpx, pydantic). Suitable for server deployments or custom automation setups.
68
+ - **`oagi-core[desktop]`**: Adds `pyautogui` and `pillow` for desktop automation features like screenshot capture and GUI control.
69
+ - **`oagi-core[server]`**: Adds FastAPI and Socket.IO dependencies for running the real-time server for browser extensions.
70
+
71
+ **Note**: Features requiring desktop dependencies (like `PILImage.from_screenshot()`, `PyautoguiActionHandler`, `ScreenshotMaker`) will show helpful error messages if you try to use them without installing the `desktop` extra.
72
+
73
+ ## Quick Start
74
+
75
+ Set your API credentials:
76
+ ```bash
77
+ export OAGI_API_KEY="your-api-key" # get your API key from https://developer.openagi.org/
78
+ # export OAGI_BASE_URL="https://api.agiopen.org/", # optional, defaults to production endpoint
79
+ ```
80
+
81
+ ### Automated Task Execution
82
+
83
+ Run tasks automatically with screenshot capture and action execution:
84
+
85
+ ```python
86
+ import asyncio
87
+ from oagi import AsyncDefaultAgent, AsyncPyautoguiActionHandler, AsyncScreenshotMaker
88
+
89
+ async def main():
90
+ agent = AsyncDefaultAgent(max_steps=10)
91
+ completed = await agent.execute(
92
+ "Search weather on Google",
93
+ action_handler=AsyncPyautoguiActionHandler(), # Executes mouse/keyboard actions
94
+ image_provider=AsyncScreenshotMaker(), # Captures screenshots
95
+ )
96
+ return completed
97
+
98
+ asyncio.run(main())
99
+ ```
100
+
101
+ Configure PyAutoGUI behavior with custom settings:
102
+
103
+ ```python
104
+ from oagi import AsyncPyautoguiActionHandler, PyautoguiConfig
105
+
106
+ # Customize action behavior
107
+ config = PyautoguiConfig(
108
+ drag_duration=1.0, # Slower drags for precision (default: 0.5)
109
+ scroll_amount=50, # Larger scroll steps (default: 30)
110
+ wait_duration=2.0, # Longer waits (default: 1.0)
111
+ action_pause=0.2, # More pause between actions (default: 0.1)
112
+ hotkey_interval=0.1, # Interval between keys in hotkey combinations (default: 0.1)
113
+ capslock_mode="session" # Caps lock mode: 'session' or 'system' (default: 'session')
114
+ )
115
+
116
+ action_handler = AsyncPyautoguiActionHandler(config=config)
117
+ ```
118
+
119
+ ### Image Processing
120
+
121
+ Process and optimize images before sending to API:
122
+
123
+ ```python
124
+ from oagi import PILImage, ImageConfig
125
+
126
+ # Load and compress an image
127
+ image = PILImage.from_file("large_screenshot.png")
128
+ config = ImageConfig(
129
+ format="JPEG",
130
+ quality=85,
131
+ width=1260,
132
+ height=700
133
+ )
134
+ compressed = image.transform(config)
135
+ ```
136
+
137
+ ### Manual Control with Actor
138
+
139
+ For step-by-step control over task execution:
140
+
141
+ ```python
142
+ import asyncio
143
+ from oagi import AsyncActor, AsyncPyautoguiActionHandler, AsyncScreenshotMaker
144
+
145
+ async def main():
146
+ async with AsyncActor() as actor:
147
+ await actor.init_task("Complete the form")
148
+ image_provider = AsyncScreenshotMaker()
149
+ action_handler = AsyncPyautoguiActionHandler()
150
+
151
+ for _ in range(10):
152
+ image = await image_provider()
153
+ step = await actor.step(image)
154
+
155
+ if step.stop:
156
+ break
157
+
158
+ await action_handler(step.actions)
159
+
160
+ asyncio.run(main())
161
+ ```
162
+
163
+ ## Examples
164
+
165
+ See the [`examples/`](examples/) directory for more usage patterns:
166
+ - `execute_task_auto.py` - Automated task execution with `AsyncDefaultAgent`
167
+ - `execute_task_manual.py` - Manual step-by-step control with `Actor`
168
+ - `continued_session.py` - Continuing tasks across sessions
169
+ - `screenshot_with_config.py` - Image compression and optimization
170
+ - `socketio_server_basic.py` - Socket.IO server example
171
+ - `socketio_client_example.py` - Socket.IO client implementation
172
+
173
+ ## Socket.IO Server (Optional)
174
+
175
+ The SDK includes an optional Socket.IO server for real-time bidirectional communication with browser extensions or custom clients.
176
+
177
+ ### Installation
178
+
179
+ ```bash
180
+ # Install with server support
181
+ pip install oagi # Includes server features
182
+ # Or
183
+ pip install oagi-core[server] # Core + server only
184
+ ```
185
+
186
+ ### Running the Server
187
+
188
+ ```python
189
+ import uvicorn
190
+ from oagi.server import create_app, ServerConfig
191
+
192
+ # Create FastAPI app with Socket.IO
193
+ app = create_app()
194
+
195
+ # Run server
196
+ uvicorn.run(app, host="0.0.0.0", port=8000)
197
+ ```
198
+
199
+ Or use the example script:
200
+ ```bash
201
+ export OAGI_API_KEY="your-api-key"
202
+ python examples/socketio_server_basic.py
203
+ ```
204
+
205
+ ### Server Features
206
+
207
+ - **Dynamic namespaces**: Each session gets its own namespace (`/session/{session_id}`)
208
+ - **Simplified events**: Single `init` event from client with instruction
209
+ - **Action execution**: Emit individual actions (click, type, scroll, etc.) to client
210
+ - **S3 integration**: Server sends presigned URLs for direct screenshot uploads
211
+ - **Session management**: In-memory session storage with timeout cleanup
212
+ - **REST API**: Health checks and session management endpoints
213
+
214
+ ### Client Integration
215
+
216
+ Clients connect to a session namespace and handle action events:
217
+
218
+ ```python
219
+ import socketio
220
+
221
+ sio = socketio.AsyncClient()
222
+ namespace = "/session/my_session_id"
223
+
224
+ @sio.on("request_screenshot", namespace=namespace)
225
+ async def on_screenshot(data):
226
+ # Upload screenshot to S3 using presigned URL
227
+ return {"success": True}
228
+
229
+ @sio.on("click", namespace=namespace)
230
+ async def on_click(data):
231
+ # Execute click at coordinates
232
+ return {"success": True}
233
+
234
+ await sio.connect("http://localhost:8000", namespaces=[namespace])
235
+ await sio.emit("init", {"instruction": "Click the button"}, namespace=namespace)
236
+ ```
237
+
238
+ See [`examples/socketio_client_example.py`](examples/socketio_client_example.py) for a complete implementation.
239
+
240
+ ## Documentation
241
+
242
+
243
+ ## License
244
+
245
+ MIT
@@ -0,0 +1,68 @@
1
+ oagi/__init__.py,sha256=xI--F3inDKuNQ2caI4Xx0rdFuUxO24cEeAX6WoGi170,4836
2
+ oagi/exceptions.py,sha256=Rco37GQTPYUfc2vRO3hozxPF_s8mKFDpFvBg2UKWo3Y,3066
3
+ oagi/logging.py,sha256=YT3KCMFj5fzO98R9xlDDgfSotUuz1xRD6OZeYM2rKoo,1760
4
+ oagi/agent/__init__.py,sha256=KTVLUMhbjgpTJoOWMUZkkiqwhgumvbOZV2tJ9XCLfao,901
5
+ oagi/agent/default.py,sha256=VaDiYISM0Y3l_xhSvWcIZQDiUj_ebHg9tgWLnr-OWuY,4116
6
+ oagi/agent/factories.py,sha256=WP4ONu9JBDaJYmK18OuFihAX7YKCeOKgOh981lYguXo,2113
7
+ oagi/agent/protocol.py,sha256=IQJGiMN4yZIacrh5e9JQsoM9TyHb8wJRQR4LAk8dSA0,1615
8
+ oagi/agent/registry.py,sha256=7bMA2-pH3xQ9ZavrHB_mnc2fOGSMeICPbOGtHoM7It0,4851
9
+ oagi/agent/observer/__init__.py,sha256=YZ4qvR22pFB0mSDMX6iKKLbBA1dB-nqC7HZVvdMIVGw,909
10
+ oagi/agent/observer/agent_observer.py,sha256=fBs4X2_YKhYVThJocjMM-65JAHQSCLJPvzy8OXMt5pY,2864
11
+ oagi/agent/observer/events.py,sha256=xc3Z1UGpX69BqhO9cQiGmnRhDZbMYya1kuXm6bXtjWI,625
12
+ oagi/agent/observer/exporters.py,sha256=im1aK8UkGfWbRnVIYdsoCKVX_JYrcEvzRMDD2CK3gcM,15245
13
+ oagi/agent/observer/protocol.py,sha256=jyRXoCG4CdvaPaDASar1rSbwc7vdpkar39KkGpwf8jw,411
14
+ oagi/agent/tasker/__init__.py,sha256=1iTEFe7lzcqh96TL9R0QADPpLJLrUP0shtZ4DlZSv_8,764
15
+ oagi/agent/tasker/memory.py,sha256=NR13l5yxRA8GUE-oupAP4W1n80ZNG0SxpUfxsNltkUY,5033
16
+ oagi/agent/tasker/models.py,sha256=sMQgwIMKhT1tvVF2yoc1hh8GwEiJ6i6qPMy9WoiA8JM,2137
17
+ oagi/agent/tasker/planner.py,sha256=1NJQ2279GlGLMTB6JUhgnJtN46iiEGy2O_czaxRQwsE,14437
18
+ oagi/agent/tasker/taskee_agent.py,sha256=b2oHkHrZak3S5gMVffjht7ra8et8xDAADoDlfZFy_os,16731
19
+ oagi/agent/tasker/tasker_agent.py,sha256=ZZXJpT1tHpYJB8nQpz3LSNrW21DxkWBk-g5bY0gWxRk,10732
20
+ oagi/cli/__init__.py,sha256=aDnJViTseShpo5fdGPTj-ELysZhmdvB6Z8mEj2D-_N4,359
21
+ oagi/cli/agent.py,sha256=tXn53MKKLs446gRXZf-22Yj1b3cTZh7qfsiFKq4xsRY,9447
22
+ oagi/cli/display.py,sha256=rkAxuHa40ZtKdmvwARev1rgyfsNyVvQ-J6RdjOZIPwc,1729
23
+ oagi/cli/main.py,sha256=faHns0HaQCGyylDn2YZLpjQESuEiMYjoQVoMkt8FsH4,2292
24
+ oagi/cli/server.py,sha256=Z1ic8r55yaeQBFRCsMNZStC1jRiJdnDGqe9On9LmFzQ,3031
25
+ oagi/cli/tracking.py,sha256=TdrAcNq_-OjgXltFCoFc8NsO_k6yHbdzHnMn3vAAvKA,1707
26
+ oagi/cli/utils.py,sha256=BI6C7WvC51NBsXEsjDONjSNwqdD4i0nHA_rsfpyLwmA,2986
27
+ oagi/client/__init__.py,sha256=F9DShPUdb6vZYmN1fpM1VYzp4MWqUao_e_R1KYmM4Q4,410
28
+ oagi/client/async_.py,sha256=iEOQun2kxW1iQ4h_TsSKqj-w3LviKLDxddXrteY61Fk,10894
29
+ oagi/client/base.py,sha256=lczoKI1FqlqJbfAB6lAuXH2oDCVT-F0_LBVu6OS1pDo,16739
30
+ oagi/client/sync.py,sha256=LPCG136BVzzL9yQOW7QdBiEXCDwRzzqL3GXnJHA6ui8,10730
31
+ oagi/handler/__init__.py,sha256=Ha11L42K33K3L9S4lQ10UC0DnD5g6egtQUsJpS_tKgg,835
32
+ oagi/handler/_macos.py,sha256=aHkp-xGzvWL_SBjuS690i9jf93OITFJfGHzHeYCK65I,1957
33
+ oagi/handler/async_pyautogui_action_handler.py,sha256=hQzseR1yBD0QMpgsEVNsUmuApGVAIIyGYD06BXd82Dc,1615
34
+ oagi/handler/async_screenshot_maker.py,sha256=8QCtUV59ozpOpvkqhUMb8QDI2qje2gsoFT1qB60tfJM,1689
35
+ oagi/handler/pil_image.py,sha256=yUcAoGBL-aZ0PCjSaAmQsDwtyzjldXHqXQp_OYRk6e4,4080
36
+ oagi/handler/pyautogui_action_handler.py,sha256=SwoKOUw6SJuDA2dAqSXk3iMyvqpzTYnPxNi3L06JZV4,10847
37
+ oagi/handler/screenshot_maker.py,sha256=j1jTW-awx3vAnb1N5_FIMBC0Z-rNVQbiBP-S6Gh5dlE,1284
38
+ oagi/server/__init__.py,sha256=uZx8u3vJUb87kkNzwmmVrgAgbqRu0WxyMIQCLSx56kk,452
39
+ oagi/server/agent_wrappers.py,sha256=j8va0A7u80bzOM82nndAplK1uaO_T3kufHWScK6kfWM,3263
40
+ oagi/server/config.py,sha256=2gJ-pDpYAxNUubwSsGKOieGcOtNX9b5YGuSqtf6g2P0,1607
41
+ oagi/server/main.py,sha256=jnTxk7Prc5CzlsUnkBNJp4MOoYN-7HN_Be_m1d3COa8,4829
42
+ oagi/server/models.py,sha256=7zsmjvnIZ0JUcCpE8F2A1OqX4_kGJydraRkbvPHnvn8,2593
43
+ oagi/server/session_store.py,sha256=922Sz00_Ao-9fA0dhA1lrzs7yd6wo7xpdYJH4hZmEaI,3634
44
+ oagi/server/socketio_server.py,sha256=NFw5Zu7yCFLW-gOu9OX8k6mNFaCN2jtX1Tob_9w5YM0,14344
45
+ oagi/task/__init__.py,sha256=g_8_7ZLDLKuCGzyrB42OzY3gSOjd_SxzkJW3_pf-PXs,662
46
+ oagi/task/async_.py,sha256=ev1jnuOQIYahjjMlSCFwtaeyOliePZCpEVt3ocsZXAI,3124
47
+ oagi/task/async_short.py,sha256=VMIBKcTQMjadWXPHiJXWlYZqr5v4MeGVYnuKOs7dS3Y,2752
48
+ oagi/task/base.py,sha256=D4e4N1cWoObMzaGcXyXGBPKyNbzmxABIjxbHiVrK548,5664
49
+ oagi/task/short.py,sha256=xSR5_9BX35UMfITXtCgKXRLU92f4vnqa06c-HSjUO0A,2561
50
+ oagi/task/sync.py,sha256=ciDkQYJQZkQyp8buNIKXU9Oy6kD7WIezCh2L0trLDDc,2958
51
+ oagi/types/__init__.py,sha256=TCdHA8zPJAzpo-jgkfcWTWmbrWglOpShGQFcLoxV_xw,1187
52
+ oagi/types/action_handler.py,sha256=NH8E-m5qpGqWcXzTSWfF7W0Xdp8SkzJsbhCmQ0B96cg,1075
53
+ oagi/types/async_action_handler.py,sha256=k1AaqSkFcXlxwW8sn-w0WFHGsIqHFLbcOPrkknmSVug,1116
54
+ oagi/types/async_image_provider.py,sha256=UwDl7VOCA3tiSP5k1fnxK86iEa84Yr57MVaoBSa3hOE,1203
55
+ oagi/types/image.py,sha256=KgPCCTJ6D5vHIaGZdbTE7eQEa1WlT6G9tf59ZuUCV2U,537
56
+ oagi/types/image_provider.py,sha256=IhKEnwCGZ5l_rO3AvJ6xv5RZMTmTDmqsFRynI9h0R_M,1145
57
+ oagi/types/step_observer.py,sha256=wXuChzsof7Rh4azvDTIQ22gAwZAYjMAOVIuL8ZGtw-M,2315
58
+ oagi/types/url.py,sha256=Q-1jf5L_4rad4dxyLTg4MXadGgpkH3w4dcoVrVupW-A,54
59
+ oagi/types/models/__init__.py,sha256=I86Z2moM8hCog_1K1FG_uATcBmWFv_UFetLAjzPzWAY,742
60
+ oagi/types/models/action.py,sha256=hh6mRRSSWgrW4jpZo71zGMCOcZpV5_COu4148uG6G48,967
61
+ oagi/types/models/client.py,sha256=1xIKBgLSheHfqYbcyRKMDOLQJaKijaKQ5l-COc6e7_k,1471
62
+ oagi/types/models/image_config.py,sha256=tl6abVg_-IAPLwpaWprgknXu7wRWriMg-AEVyUX73v0,1567
63
+ oagi/types/models/step.py,sha256=RSI4H_2rrUBq_xyCoWKaq7JHdJWNobtQppaKC1l0aWU,471
64
+ oagi_core-0.10.1.dist-info/METADATA,sha256=o1zoJQaVrlJwL_a8KBwYJeTpmo7ktC_kE4NPVsNfXB0,8269
65
+ oagi_core-0.10.1.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
66
+ oagi_core-0.10.1.dist-info/entry_points.txt,sha256=zzgsOSWX6aN3KUB0Z1it8DMxFFBJBqmZVqMVAJRjYuw,44
67
+ oagi_core-0.10.1.dist-info/licenses/LICENSE,sha256=sy5DLA2M29jFT4UfWsuBF9BAr3FnRkYtnAu6oDZiIf8,1075
68
+ oagi_core-0.10.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.26.3
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ oagi = oagi.cli.main:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 OpenAGI Foundation
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.