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.
- oagi/__init__.py +148 -0
- oagi/agent/__init__.py +33 -0
- oagi/agent/default.py +124 -0
- oagi/agent/factories.py +74 -0
- oagi/agent/observer/__init__.py +38 -0
- oagi/agent/observer/agent_observer.py +99 -0
- oagi/agent/observer/events.py +28 -0
- oagi/agent/observer/exporters.py +445 -0
- oagi/agent/observer/protocol.py +12 -0
- oagi/agent/protocol.py +55 -0
- oagi/agent/registry.py +155 -0
- oagi/agent/tasker/__init__.py +33 -0
- oagi/agent/tasker/memory.py +160 -0
- oagi/agent/tasker/models.py +77 -0
- oagi/agent/tasker/planner.py +408 -0
- oagi/agent/tasker/taskee_agent.py +512 -0
- oagi/agent/tasker/tasker_agent.py +324 -0
- oagi/cli/__init__.py +11 -0
- oagi/cli/agent.py +281 -0
- oagi/cli/display.py +56 -0
- oagi/cli/main.py +77 -0
- oagi/cli/server.py +94 -0
- oagi/cli/tracking.py +55 -0
- oagi/cli/utils.py +89 -0
- oagi/client/__init__.py +12 -0
- oagi/client/async_.py +290 -0
- oagi/client/base.py +457 -0
- oagi/client/sync.py +293 -0
- oagi/exceptions.py +118 -0
- oagi/handler/__init__.py +24 -0
- oagi/handler/_macos.py +55 -0
- oagi/handler/async_pyautogui_action_handler.py +44 -0
- oagi/handler/async_screenshot_maker.py +47 -0
- oagi/handler/pil_image.py +102 -0
- oagi/handler/pyautogui_action_handler.py +291 -0
- oagi/handler/screenshot_maker.py +41 -0
- oagi/logging.py +55 -0
- oagi/server/__init__.py +13 -0
- oagi/server/agent_wrappers.py +98 -0
- oagi/server/config.py +46 -0
- oagi/server/main.py +157 -0
- oagi/server/models.py +98 -0
- oagi/server/session_store.py +116 -0
- oagi/server/socketio_server.py +405 -0
- oagi/task/__init__.py +21 -0
- oagi/task/async_.py +101 -0
- oagi/task/async_short.py +76 -0
- oagi/task/base.py +157 -0
- oagi/task/short.py +76 -0
- oagi/task/sync.py +99 -0
- oagi/types/__init__.py +50 -0
- oagi/types/action_handler.py +30 -0
- oagi/types/async_action_handler.py +30 -0
- oagi/types/async_image_provider.py +38 -0
- oagi/types/image.py +17 -0
- oagi/types/image_provider.py +35 -0
- oagi/types/models/__init__.py +32 -0
- oagi/types/models/action.py +33 -0
- oagi/types/models/client.py +68 -0
- oagi/types/models/image_config.py +47 -0
- oagi/types/models/step.py +17 -0
- oagi/types/step_observer.py +93 -0
- oagi/types/url.py +3 -0
- oagi_core-0.10.1.dist-info/METADATA +245 -0
- oagi_core-0.10.1.dist-info/RECORD +68 -0
- oagi_core-0.10.1.dist-info/WHEEL +4 -0
- oagi_core-0.10.1.dist-info/entry_points.txt +2 -0
- 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,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,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.
|