droidrun 0.3.6__tar.gz → 0.3.7__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.
- {droidrun-0.3.6 → droidrun-0.3.7}/PKG-INFO +16 -11
- {droidrun-0.3.6 → droidrun-0.3.7}/README.md +1 -1
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/guides/cli.mdx +7 -7
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/guides/gemini.mdx +1 -1
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/guides/ollama.mdx +1 -1
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/guides/openailike.mdx +1 -1
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/quickstart.mdx +3 -3
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/portal.py +44 -12
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/tools/adb.py +0 -2
- {droidrun-0.3.6 → droidrun-0.3.7}/pyproject.toml +20 -10
- {droidrun-0.3.6 → droidrun-0.3.7}/.github/workflows/bounty.yml +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/.github/workflows/publish.yml +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/.gitignore +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/CHANGELOG.md +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/CONTRIBUTING.md +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/LICENSE +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/MANIFEST.in +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/.generated-files.txt +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/docs.json +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/favicon.png +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/logo/dark.svg +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/logo/light.svg +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v1/concepts/agent.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v1/concepts/android-control.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v1/concepts/portal-app.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v1/overview.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v1/quickstart.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v2/concepts/agent.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v2/concepts/android-control.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v2/concepts/planning.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v2/concepts/portal-app.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v2/concepts/tracing.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v2/overview.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v2/quickstart.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/concepts/agent.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/concepts/android-tools.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/concepts/models.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/concepts/portal-app.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/guides/overview.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/guides/telemetry.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/images/portal_apk.png +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/overview.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/sdk/adb-tools.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/sdk/base-tools.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/sdk/droid-agent.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/docs/v3/sdk/ios-tools.mdx +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/__main__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/codeact/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/codeact/codeact_agent.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/codeact/events.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/codeact/prompts.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/common/default.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/common/events.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/agent_persona.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/context_injection_manager.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/episodic_memory.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/personas/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/personas/app_starter.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/personas/big_agent.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/personas/default.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/personas/ui_expert.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/reflection.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/context/task_manager.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/droid/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/droid/droid_agent.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/droid/events.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/oneflows/reflector.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/planner/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/planner/events.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/planner/planner_agent.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/planner/prompts.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/usage.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/utils/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/utils/async_utils.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/utils/chat_utils.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/utils/executer.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/utils/llm_picker.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/agent/utils/trajectory.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/cli/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/cli/logs.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/cli/main.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/macro/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/macro/__main__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/macro/cli.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/macro/replay.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/telemetry/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/telemetry/events.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/telemetry/tracker.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/tools/__init__.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/tools/ios.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/droidrun/tools/tools.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/gen-docs-sdk-ref.sh +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/setup.py +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/static/droidrun-dark.png +0 -0
- {droidrun-0.3.6 → droidrun-0.3.7}/static/droidrun.png +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: droidrun
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.7
|
4
4
|
Summary: A framework for controlling Android devices through LLM agents
|
5
5
|
Project-URL: Homepage, https://github.com/droidrun/droidrun
|
6
6
|
Project-URL: Bug Tracker, https://github.com/droidrun/droidrun/issues
|
@@ -27,25 +27,30 @@ Classifier: Topic :: System :: Emulators
|
|
27
27
|
Classifier: Topic :: Utilities
|
28
28
|
Requires-Python: >=3.11
|
29
29
|
Requires-Dist: adbutils>=2.10.2
|
30
|
-
Requires-Dist: anthropic>=0.67.0
|
31
30
|
Requires-Dist: apkutils==2.0.0
|
32
|
-
Requires-Dist: llama-index
|
33
|
-
Requires-Dist: llama-index-llms-deepseek>=0.2.1
|
34
|
-
Requires-Dist: llama-index-llms-google-genai>=0.3.1
|
35
|
-
Requires-Dist: llama-index-llms-ollama>=0.7.2
|
36
|
-
Requires-Dist: llama-index-llms-openai-like>=0.5.1
|
37
|
-
Requires-Dist: llama-index-llms-openai>=0.5.6
|
38
|
-
Requires-Dist: llama-index>=0.14.0
|
39
|
-
Requires-Dist: openai>=1.107.1
|
31
|
+
Requires-Dist: llama-index>=0.13.6
|
40
32
|
Requires-Dist: posthog>=6.7.4
|
41
33
|
Requires-Dist: pydantic>=2.11.7
|
42
34
|
Requires-Dist: rich>=14.1.0
|
35
|
+
Provides-Extra: anthropic
|
36
|
+
Requires-Dist: anthropic>=0.67.0; extra == 'anthropic'
|
37
|
+
Requires-Dist: llama-index-llms-anthropic>=0.8.6; extra == 'anthropic'
|
38
|
+
Provides-Extra: deepseek
|
39
|
+
Requires-Dist: llama-index-llms-deepseek>=0.2.1; extra == 'deepseek'
|
43
40
|
Provides-Extra: dev
|
44
41
|
Requires-Dist: bandit>=1.8.6; extra == 'dev'
|
45
42
|
Requires-Dist: black>=23.0.0; extra == 'dev'
|
46
43
|
Requires-Dist: mypy>=1.0.0; extra == 'dev'
|
47
44
|
Requires-Dist: ruff>=0.13.0; extra == 'dev'
|
48
45
|
Requires-Dist: safety>=3.2.11; extra == 'dev'
|
46
|
+
Provides-Extra: google
|
47
|
+
Requires-Dist: llama-index-llms-google-genai>=0.3.1; extra == 'google'
|
48
|
+
Provides-Extra: ollama
|
49
|
+
Requires-Dist: llama-index-llms-ollama>=0.7.2; extra == 'ollama'
|
50
|
+
Provides-Extra: openai
|
51
|
+
Requires-Dist: llama-index-llms-openai-like>=0.5.1; extra == 'openai'
|
52
|
+
Requires-Dist: llama-index-llms-openai>=0.5.6; extra == 'openai'
|
53
|
+
Requires-Dist: openai>=1.107.1; extra == 'openai'
|
49
54
|
Description-Content-Type: text/markdown
|
50
55
|
|
51
56
|
<picture>
|
@@ -83,7 +88,7 @@ DroidRun is a powerful framework for controlling Android and iOS devices through
|
|
83
88
|
## 📦 Installation
|
84
89
|
|
85
90
|
```bash
|
86
|
-
pip install droidrun
|
91
|
+
pip install droidrun[google,anthropic,openai,deepseek,ollama,dev]
|
87
92
|
```
|
88
93
|
|
89
94
|
## 🚀 Quickstart
|
@@ -11,9 +11,9 @@ DroidRun lets you control Android devices using natural language and LLM agents.
|
|
11
11
|
## Prerequisites
|
12
12
|
|
13
13
|
<Steps>
|
14
|
-
<Step title="Install DroidRun and its dependencies.">
|
14
|
+
<Step title="Install DroidRun and its dependencies. Choose which ever provider you'd like to use.">
|
15
15
|
```sh
|
16
|
-
pip install droidrun
|
16
|
+
pip install droidrun[google,anthropic,openai,deepseek,ollama,dev]
|
17
17
|
```
|
18
18
|
</Step>
|
19
19
|
<Step title="Ensure your Android device is connected and the DroidRun Portal is installed">
|
@@ -27,11 +27,11 @@ DroidRun lets you control Android devices using natural language and LLM agents.
|
|
27
27
|
droidrun ping
|
28
28
|
```
|
29
29
|
</Step>
|
30
|
-
<Step title="
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
<Step title="If you want to use a provider thats not included with our extras, install the required LlamaIndex LLM integrations">
|
31
|
+
```sh
|
32
|
+
pip install llama-index-llms-openrouter
|
33
|
+
```
|
34
|
+
</Step>
|
35
35
|
</Steps>
|
36
36
|
---
|
37
37
|
|
@@ -26,9 +26,9 @@ Before installing DroidRun, ensure you have:
|
|
26
26
|
- Connected via USB or on the same network (for wireless debugging)
|
27
27
|
|
28
28
|
### Install from PyPI
|
29
|
-
|
29
|
+
Choose which ever provider you'd like to use. If you encounter dependency resolution issues use [`uv`](https://docs.astral.sh/uv/getting-started/installation/).
|
30
30
|
```bash
|
31
|
-
|
31
|
+
pip install droidrun[google,anthropic,openai,deepseek,ollama,dev]
|
32
32
|
```
|
33
33
|
|
34
34
|
### Setup the Portal APK
|
@@ -91,5 +91,5 @@ Now that you've got DroidRun running, you can:
|
|
91
91
|
|
92
92
|
- Learn about the [Agent](/v3/concepts/agent)
|
93
93
|
- See supported [LLM providers](/v3/concepts/models)
|
94
|
-
- Discover [Android interactions](/v3/concepts/android-
|
94
|
+
- Discover [Android interactions](/v3/concepts/android-tools)
|
95
95
|
- Learn about the [Portal App](/v3/concepts/portal-app)
|
@@ -1,11 +1,13 @@
|
|
1
|
-
import requests
|
2
|
-
import tempfile
|
3
|
-
import os
|
4
1
|
import contextlib
|
5
|
-
|
6
|
-
|
2
|
+
import os
|
3
|
+
import tempfile
|
4
|
+
|
5
|
+
import requests
|
6
|
+
from adbutils import AdbDevice, adb
|
7
7
|
from rich.console import Console
|
8
8
|
|
9
|
+
from droidrun.tools import AdbTools
|
10
|
+
|
9
11
|
REPO = "droidrun/droidrun-portal"
|
10
12
|
ASSET_NAME = "droidrun-portal"
|
11
13
|
GITHUB_API_HOSTS = ["https://api.github.com", "https://ungh.cc"]
|
@@ -96,7 +98,7 @@ def check_portal_accessibility(
|
|
96
98
|
device: AdbDevice, service_name: str = A11Y_SERVICE_NAME, debug: bool = False
|
97
99
|
) -> bool:
|
98
100
|
a11y_services = device.shell("settings get secure enabled_accessibility_services")
|
99
|
-
if not
|
101
|
+
if service_name not in a11y_services:
|
100
102
|
if debug:
|
101
103
|
print(a11y_services)
|
102
104
|
return False
|
@@ -117,9 +119,9 @@ def ping_portal(device: AdbDevice, debug: bool = False):
|
|
117
119
|
try:
|
118
120
|
packages = device.list_packages()
|
119
121
|
except Exception as e:
|
120
|
-
raise Exception(
|
122
|
+
raise Exception("Failed to list packages") from e
|
121
123
|
|
122
|
-
if not
|
124
|
+
if PORTAL_PACKAGE_NAME not in packages:
|
123
125
|
if debug:
|
124
126
|
print(packages)
|
125
127
|
raise Exception("Portal is not installed on the device")
|
@@ -134,17 +136,17 @@ def ping_portal(device: AdbDevice, debug: bool = False):
|
|
134
136
|
def ping_portal_content(device: AdbDevice, debug: bool = False):
|
135
137
|
try:
|
136
138
|
state = device.shell("content query --uri content://com.droidrun.portal/state")
|
137
|
-
if
|
139
|
+
if "Row: 0 result=" not in state:
|
138
140
|
raise Exception("Failed to get state from Droidrun Portal")
|
139
141
|
except Exception as e:
|
140
|
-
raise Exception(
|
142
|
+
raise Exception("Droidrun Portal is not reachable") from e
|
141
143
|
|
142
144
|
|
143
145
|
def ping_portal_tcp(device: AdbDevice, debug: bool = False):
|
144
146
|
try:
|
145
147
|
tools = AdbTools(serial=device.serial, use_tcp=True)
|
146
148
|
except Exception as e:
|
147
|
-
raise Exception(
|
149
|
+
raise Exception("Failed to setup TCP forwarding") from e
|
148
150
|
|
149
151
|
|
150
152
|
def set_overlay_offset(device: AdbDevice, offset: int):
|
@@ -155,8 +157,38 @@ def set_overlay_offset(device: AdbDevice, offset: int):
|
|
155
157
|
cmd = f'content insert --uri "content://com.droidrun.portal/overlay_offset" --bind offset:i:{offset}'
|
156
158
|
device.shell(cmd)
|
157
159
|
except Exception as e:
|
158
|
-
raise Exception(
|
160
|
+
raise Exception("Error setting overlay offset") from e
|
161
|
+
|
162
|
+
def toggle_overlay(device: AdbDevice, visible: bool):
|
163
|
+
"""toggle the overlay visibility.
|
164
|
+
|
165
|
+
Args:
|
166
|
+
device: Device to toggle the overlay on
|
167
|
+
visible: Whether to show the overlay
|
168
|
+
|
169
|
+
throws:
|
170
|
+
Exception: If the overlay toggle fails
|
171
|
+
"""
|
172
|
+
try:
|
173
|
+
device.shell(
|
174
|
+
f"am broadcast -a com.droidrun.portal.TOGGLE_OVERLAY --ez overlay_visible {'true' if visible else 'false'}"
|
175
|
+
)
|
176
|
+
except Exception as e:
|
177
|
+
raise Exception("Failed to toggle overlay") from e
|
159
178
|
|
179
|
+
def setup_keyboard(device: AdbDevice):
|
180
|
+
"""
|
181
|
+
Set up the DroidRun keyboard as the default input method.
|
182
|
+
Simple setup that just switches to DroidRun keyboard without saving/restoring.
|
183
|
+
|
184
|
+
throws:
|
185
|
+
Exception: If the keyboard setup fails
|
186
|
+
"""
|
187
|
+
try:
|
188
|
+
device.shell("ime enable com.droidrun.portal/.DroidrunKeyboardIME")
|
189
|
+
device.shell("ime set com.droidrun.portal/.DroidrunKeyboardIME")
|
190
|
+
except Exception as e:
|
191
|
+
raise Exception("Error setting up keyboard") from e
|
160
192
|
|
161
193
|
def test():
|
162
194
|
device = adb.device()
|
@@ -1,21 +1,13 @@
|
|
1
1
|
[project]
|
2
2
|
name = "droidrun"
|
3
|
-
version = "0.3.
|
3
|
+
version = "0.3.7"
|
4
4
|
description = "A framework for controlling Android devices through LLM agents"
|
5
5
|
authors = [{ name = "Niels Schmidt", email = "niels.schmidt@droidrun.ai" }]
|
6
6
|
dependencies = [
|
7
7
|
"adbutils>=2.10.2",
|
8
8
|
# dependency of adbutils[apk]
|
9
|
-
"anthropic>=0.67.0",
|
10
9
|
"apkutils==2.0.0",
|
11
|
-
"llama-index>=0.
|
12
|
-
"llama-index-llms-anthropic>=0.8.6",
|
13
|
-
"llama-index-llms-deepseek>=0.2.1",
|
14
|
-
"llama-index-llms-google-genai>=0.3.1",
|
15
|
-
"llama-index-llms-ollama>=0.7.2",
|
16
|
-
"llama-index-llms-openai>=0.5.6",
|
17
|
-
"llama-index-llms-openai-like>=0.5.1",
|
18
|
-
"openai>=1.107.1",
|
10
|
+
"llama-index>=0.13.6",
|
19
11
|
"posthog>=6.7.4",
|
20
12
|
"pydantic>=2.11.7",
|
21
13
|
"rich>=14.1.0",
|
@@ -49,6 +41,24 @@ Homepage = "https://github.com/droidrun/droidrun"
|
|
49
41
|
Documentation = "https://docs.droidrun.ai/"
|
50
42
|
|
51
43
|
[project.optional-dependencies]
|
44
|
+
anthropic = [
|
45
|
+
"anthropic>=0.67.0",
|
46
|
+
"llama-index-llms-anthropic>=0.8.6",
|
47
|
+
]
|
48
|
+
openai = [
|
49
|
+
"openai>=1.107.1",
|
50
|
+
"llama-index-llms-openai>=0.5.6",
|
51
|
+
"llama-index-llms-openai-like>=0.5.1",
|
52
|
+
]
|
53
|
+
google = [
|
54
|
+
"llama-index-llms-google-genai>=0.3.1",
|
55
|
+
]
|
56
|
+
deepseek = [
|
57
|
+
"llama-index-llms-deepseek>=0.2.1",
|
58
|
+
]
|
59
|
+
ollama = [
|
60
|
+
"llama-index-llms-ollama>=0.7.2",
|
61
|
+
]
|
52
62
|
dev = [
|
53
63
|
"black>=23.0.0",
|
54
64
|
"ruff>=0.13.0",
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|