droidrun 0.4.0.dev4__tar.gz → 0.4.0.dev5__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.4.0.dev4 → droidrun-0.4.0.dev5}/PKG-INFO +1 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/docs.json +15 -20
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/concepts/portal-app.mdx +1 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/quickstart.mdx +2 -2
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/portal-app.mdx +1 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/android-tools.mdx +1 -1
- droidrun-0.4.0.dev5/docs/v4/concepts/agent-architecture.mdx +241 -0
- droidrun-0.4.0.dev5/docs/v4/concepts/events-and-workflows.mdx +165 -0
- droidrun-0.4.0.dev5/docs/v4/concepts/overview.mdx +107 -0
- droidrun-0.4.0.dev5/docs/v4/concepts/prompts.mdx +332 -0
- droidrun-0.4.0.dev5/docs/v4/concepts/scripter-agent.mdx +165 -0
- droidrun-0.4.0.dev5/docs/v4/concepts/shared-state.mdx +60 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/app-cards.mdx +12 -12
- droidrun-0.4.0.dev5/docs/v4/guides/cli.mdx +473 -0
- droidrun-0.4.0.dev5/docs/v4/guides/custom-tools-credentials.mdx +614 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/custom-variables.mdx +39 -49
- droidrun-0.4.0.dev5/docs/v4/guides/device-setup.mdx +436 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/overview.mdx +4 -5
- droidrun-0.4.0.dev5/docs/v4/guides/structured-output.mdx +281 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/telemetry-tracing.mdx +19 -34
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/overview.mdx +33 -141
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/quickstart.mdx +32 -33
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/adb-tools.mdx +7 -7
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/base-tools.mdx +6 -6
- droidrun-0.4.0.dev5/docs/v4/sdk/configuration.mdx +693 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/droid-agent.mdx +32 -33
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/ios-tools.mdx +5 -5
- droidrun-0.4.0.dev5/docs/v4/sdk.mdx +49 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/__init__.py +4 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/__init__.py +1 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/codeact/codeact_agent.py +5 -5
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/droid/droid_agent.py +10 -5
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/droid/events.py +2 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/executor_agent.py +14 -4
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/scripter/scripter_agent.py +3 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/chat_utils.py +0 -2
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/llm_loader.py +5 -5
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/prompt_resolver.py +3 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/tools.py +57 -36
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/trajectory.py +0 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/__init__.py +2 -2
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/config_manager.py +16 -14
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/replay.py +0 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/events.py +4 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/adb.py +0 -2
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/ios.py +3 -3
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/examples/custom_prompts_example.py +2 -3
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/gen-docs-sdk-ref.sh +1 -1
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/pyproject.toml +2 -2
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/uv.lock +1 -1
- droidrun-0.4.0.dev4/docs/.generated-files.txt +0 -4
- droidrun-0.4.0.dev4/docs/v3/sdk/adb-tools.mdx +0 -425
- droidrun-0.4.0.dev4/docs/v3/sdk/base-tools.mdx +0 -191
- droidrun-0.4.0.dev4/docs/v3/sdk/droid-agent.mdx +0 -71
- droidrun-0.4.0.dev4/docs/v3/sdk/ios-tools.mdx +0 -279
- droidrun-0.4.0.dev4/docs/v4/concepts/architecture.mdx +0 -1793
- droidrun-0.4.0.dev4/docs/v4/concepts/event-streaming.mdx +0 -975
- droidrun-0.4.0.dev4/docs/v4/concepts/workflow-architecture.mdx +0 -1160
- droidrun-0.4.0.dev4/docs/v4/guides/cli.mdx +0 -1146
- droidrun-0.4.0.dev4/docs/v4/guides/configuration.mdx +0 -1595
- droidrun-0.4.0.dev4/docs/v4/guides/custom-tools-credentials.mdx +0 -1007
- droidrun-0.4.0.dev4/docs/v4/guides/device-setup.mdx +0 -1003
- droidrun-0.4.0.dev4/docs/v4/guides/structured-output.mdx +0 -1260
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.github/workflows/black.yml +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.github/workflows/bounty.yml +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.github/workflows/publish.yml +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.gitignore +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.python-version +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/CHANGELOG.md +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/CONTRIBUTING.md +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/LICENSE +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/MANIFEST.in +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/README.md +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/favicon.png +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/logo/dark.svg +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/logo/light.svg +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/concepts/agent.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/concepts/android-control.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/overview.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/agent.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/android-control.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/planning.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/tracing.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/overview.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/quickstart.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/agent.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/models.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/portal-app.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/cli.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/gemini.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/ollama.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/openailike.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/overview.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/telemetry.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/images/portal_apk.png +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/overview.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/quickstart.mdx +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/__main__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/codeact/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/codeact/events.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/common/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/common/constants.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/common/events.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/context/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/context/episodic_memory.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/context/task_manager.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/droid/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/events.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/prompts.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/events.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/manager_agent.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/prompts.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/app_starter_workflow.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/structured_output_agent.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/text_manipulator.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/scripter/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/scripter/events.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/usage.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/async_utils.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/device_state_formatter.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/executer.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/inference.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/llm_picker.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/message_utils.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/app_card_provider.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/composite_provider.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/local_provider.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/server_provider.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/cli/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/cli/logs.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/cli/main.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/app_cards/README.md +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/app_cards/app_cards.json +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/app_cards/gmail.md +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/credentials_example.yaml +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/codeact/system.jinja2 +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/codeact/user.jinja2 +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/executor/rev1.jinja2 +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/executor/system.jinja2 +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/manager/rev1.jinja2 +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/manager/system.jinja2 +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/scripter/system.jinja2 +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_example.yaml +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/path_resolver.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/prompt_loader.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/safe_execution.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/credential_manager/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/credential_manager/credential_loader.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/credential_manager/credential_manager.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/__main__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/cli.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/portal.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/phoenix.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/tracker.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/__init__.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/portal_client.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/tools.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/setup.py +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/static/droidrun-dark.png +0 -0
- {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/static/droidrun.png +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: droidrun
|
|
3
|
-
Version: 0.4.0.
|
|
3
|
+
Version: 0.4.0.dev5
|
|
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
|
|
@@ -23,21 +23,12 @@
|
|
|
23
23
|
"v4/quickstart"
|
|
24
24
|
]
|
|
25
25
|
},
|
|
26
|
-
{
|
|
27
|
-
"group": "Concepts",
|
|
28
|
-
"pages": [
|
|
29
|
-
"v4/concepts/architecture",
|
|
30
|
-
"v4/concepts/workflow-architecture",
|
|
31
|
-
"v4/concepts/event-streaming"
|
|
32
|
-
]
|
|
33
|
-
},
|
|
34
26
|
{
|
|
35
27
|
"group": "Guides",
|
|
36
28
|
"pages": [
|
|
37
29
|
"v4/guides/overview",
|
|
38
|
-
"v4/guides/cli",
|
|
39
|
-
"v4/guides/configuration",
|
|
40
30
|
"v4/guides/device-setup",
|
|
31
|
+
"v4/guides/cli",
|
|
41
32
|
"v4/guides/custom-tools-credentials",
|
|
42
33
|
"v4/guides/custom-variables",
|
|
43
34
|
"v4/guides/app-cards",
|
|
@@ -45,13 +36,26 @@
|
|
|
45
36
|
"v4/guides/telemetry-tracing"
|
|
46
37
|
]
|
|
47
38
|
},
|
|
39
|
+
{
|
|
40
|
+
"group": "Concepts",
|
|
41
|
+
"pages": [
|
|
42
|
+
"v4/concepts/overview",
|
|
43
|
+
"v4/concepts/agent-architecture",
|
|
44
|
+
"v4/concepts/scripter-agent",
|
|
45
|
+
"v4/concepts/shared-state",
|
|
46
|
+
"v4/concepts/events-and-workflows",
|
|
47
|
+
"v4/concepts/prompts"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
48
50
|
{
|
|
49
51
|
"group": "SDK Reference",
|
|
50
52
|
"pages": [
|
|
53
|
+
"v4/sdk",
|
|
51
54
|
"v4/sdk/droid-agent",
|
|
52
55
|
"v4/sdk/adb-tools",
|
|
53
56
|
"v4/sdk/ios-tools",
|
|
54
|
-
"v4/sdk/base-tools"
|
|
57
|
+
"v4/sdk/base-tools",
|
|
58
|
+
"v4/sdk/configuration"
|
|
55
59
|
]
|
|
56
60
|
}
|
|
57
61
|
]
|
|
@@ -85,15 +89,6 @@
|
|
|
85
89
|
"v3/concepts/android-tools",
|
|
86
90
|
"v3/concepts/portal-app"
|
|
87
91
|
]
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"group": "SDK Reference",
|
|
91
|
-
"pages": [
|
|
92
|
-
"v3/sdk/droid-agent",
|
|
93
|
-
"v3/sdk/adb-tools",
|
|
94
|
-
"v3/sdk/ios-tools",
|
|
95
|
-
"v3/sdk/base-tools"
|
|
96
|
-
]
|
|
97
92
|
}
|
|
98
93
|
]
|
|
99
94
|
},
|
|
@@ -48,7 +48,7 @@ The DroidRun Portal App:
|
|
|
48
48
|
|
|
49
49
|
## 🚀 Installation
|
|
50
50
|
|
|
51
|
-
The DroidRun Portal App is available from the [DroidRun Portal repository](https://github.com/droidrun/droidrun-portal). For installation instructions, see the [Quickstart](/quickstart) guide.
|
|
51
|
+
The DroidRun Portal App is available from the [DroidRun Portal repository](https://github.com/droidrun/droidrun-portal). For installation instructions, see the [Quickstart](/v1/quickstart) guide.
|
|
52
52
|
|
|
53
53
|
## 🔧 Troubleshooting
|
|
54
54
|
|
|
@@ -289,5 +289,5 @@ pip show droidrun
|
|
|
289
289
|
|
|
290
290
|
Now that you've got DroidRun running, you can:
|
|
291
291
|
|
|
292
|
-
- Learn about the [ReAct agent system](/concepts/agent)
|
|
293
|
-
- Discover all [Android interactions](/concepts/android-control)
|
|
292
|
+
- Learn about the [ReAct agent system](/v1/concepts/agent)
|
|
293
|
+
- Discover all [Android interactions](/v1/concepts/android-control)
|
|
@@ -48,7 +48,7 @@ The DroidRun Portal App:
|
|
|
48
48
|
|
|
49
49
|
## 🚀 Installation
|
|
50
50
|
|
|
51
|
-
The DroidRun Portal App is available from the [DroidRun Portal repository](https://github.com/droidrun/droidrun-portal). For installation instructions, see the [Quickstart](/quickstart) guide.
|
|
51
|
+
The DroidRun Portal App is available from the [DroidRun Portal repository](https://github.com/droidrun/droidrun-portal). For installation instructions, see the [Quickstart](/v2/quickstart) guide.
|
|
52
52
|
|
|
53
53
|
## 🔧 Troubleshooting
|
|
54
54
|
|
|
@@ -100,4 +100,4 @@ format, image_data = await tools.take_screenshot()
|
|
|
100
100
|
| `complete(success, reason)` | Finish task | None |
|
|
101
101
|
|
|
102
102
|
## Dive Deeper
|
|
103
|
-
|
|
103
|
+
SDK reference documentation is available in the v4 documentation.
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'Multi-Agent Architecture'
|
|
3
|
+
description: 'Droidrun v4 hierarchical agent system with specialized roles for planning, execution, and computation.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## What is Multi-Agent Architecture?
|
|
7
|
+
|
|
8
|
+
Droidrun v4 uses a **hierarchical multi-agent system** where specialized agents work together:
|
|
9
|
+
|
|
10
|
+
- **DroidAgent**: Main orchestrator coordinating all agents
|
|
11
|
+
- **ManagerAgent**: Strategic planner creating task plans
|
|
12
|
+
- **ExecutorAgent**: Tactical actor executing atomic actions
|
|
13
|
+
- **CodeActAgent**: Direct code generator for simple tasks
|
|
14
|
+
- **ScripterAgent**: Off-device Python executor for API calls, file operations, and computations
|
|
15
|
+
|
|
16
|
+
**Location**: `droidrun/agent/droid/droid_agent.py`
|
|
17
|
+
|
|
18
|
+
## How It Works
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
DroidAgent (orchestrator)
|
|
22
|
+
├── Reasoning Mode: ManagerAgent → ExecutorAgent → ScripterAgent
|
|
23
|
+
└── Direct Mode: CodeActAgent
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
All agents share `DroidAgentState` for coordination and communicate through events.
|
|
27
|
+
|
|
28
|
+
## DroidAgent (Orchestrator)
|
|
29
|
+
|
|
30
|
+
Entry point for all tasks. Routes to appropriate agents based on mode.
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from droidrun.agent.droid import DroidAgent
|
|
34
|
+
from droidrun.config_manager import DroidrunConfig
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
config = DroidrunConfig()
|
|
38
|
+
|
|
39
|
+
# Reasoning mode (complex tasks)
|
|
40
|
+
agent = DroidAgent(reasoning=True, config=config)
|
|
41
|
+
|
|
42
|
+
# Direct mode (simple tasks)
|
|
43
|
+
agent = DroidAgent(reasoning=False, config=config)
|
|
44
|
+
|
|
45
|
+
result = agent.run("Send message to John")
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## ManagerAgent (Planner)
|
|
49
|
+
|
|
50
|
+
Creates strategic plans and breaks tasks into subgoals.
|
|
51
|
+
|
|
52
|
+
**Location**: `droidrun/agent/manager/manager_agent.py:46`
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
class ManagerPlan(BaseModel):
|
|
56
|
+
current_subgoal: str # Next subgoal for Executor
|
|
57
|
+
reasoning: str # Why this subgoal
|
|
58
|
+
should_finalize: bool # Task complete?
|
|
59
|
+
script_block: str | None # Python for ScripterAgent
|
|
60
|
+
full_plan: List[str] # Complete plan
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Configuration:**
|
|
64
|
+
```yaml
|
|
65
|
+
agent:
|
|
66
|
+
manager:
|
|
67
|
+
max_steps: 10
|
|
68
|
+
vision: true
|
|
69
|
+
|
|
70
|
+
llm_profiles:
|
|
71
|
+
manager:
|
|
72
|
+
provider: Anthropic
|
|
73
|
+
model: claude-sonnet-4
|
|
74
|
+
temperature: 0.7
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## ExecutorAgent (Actor)
|
|
78
|
+
|
|
79
|
+
Executes atomic actions for each subgoal.
|
|
80
|
+
|
|
81
|
+
**Location**: `droidrun/agent/executor/executor_agent.py`
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
class ExecutorAction(BaseModel):
|
|
85
|
+
action: str # "click", "type", "swipe", etc.
|
|
86
|
+
parameters: dict # Action parameters
|
|
87
|
+
reasoning: str # Why this action
|
|
88
|
+
|
|
89
|
+
class ExecutorResult(BaseModel):
|
|
90
|
+
success: bool # Action succeeded?
|
|
91
|
+
outcome: str # What happened
|
|
92
|
+
error_message: str | None
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Configuration:**
|
|
96
|
+
```yaml
|
|
97
|
+
agent:
|
|
98
|
+
executor:
|
|
99
|
+
max_steps: 5
|
|
100
|
+
vision: true
|
|
101
|
+
|
|
102
|
+
llm_profiles:
|
|
103
|
+
executor:
|
|
104
|
+
provider: OpenAI
|
|
105
|
+
model: gpt-4o
|
|
106
|
+
temperature: 0.3
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## CodeActAgent (Direct Executor)
|
|
110
|
+
|
|
111
|
+
Generates Python code using atomic actions (no planning overhead).
|
|
112
|
+
|
|
113
|
+
**Location**: `droidrun/agent/codeact/codeact_agent.py`
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
# Available functions in CodeAct
|
|
117
|
+
click(index: int)
|
|
118
|
+
long_press(index: int)
|
|
119
|
+
type(text: str, index: int = None)
|
|
120
|
+
swipe(coordinate: tuple, coordinate2: tuple)
|
|
121
|
+
system_button(button: str)
|
|
122
|
+
open_app(text: str)
|
|
123
|
+
get_state() -> dict
|
|
124
|
+
take_screenshot() -> str
|
|
125
|
+
remember(information: str)
|
|
126
|
+
complete(success: bool, reason: str)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Configuration:**
|
|
130
|
+
```yaml
|
|
131
|
+
agent:
|
|
132
|
+
codeact:
|
|
133
|
+
max_steps: 15
|
|
134
|
+
vision: false
|
|
135
|
+
safe_execution:
|
|
136
|
+
enabled: true
|
|
137
|
+
|
|
138
|
+
llm_profiles:
|
|
139
|
+
codeact:
|
|
140
|
+
provider: GoogleGenAI
|
|
141
|
+
model: models/gemini-2.0-flash-exp
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## ScripterAgent (Python Executor)
|
|
145
|
+
|
|
146
|
+
Executes off-device Python for API calls, file operations, data processing, and computations.
|
|
147
|
+
|
|
148
|
+
**Location**: `droidrun/agent/scripter/`
|
|
149
|
+
|
|
150
|
+
Triggered when Manager delegates tasks requiring off-device computation. ScripterAgent is a **ReAct agent** that iteratively generates and executes Python code, then returns a final message to Manager.
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
# Manager delegates with context + task
|
|
154
|
+
"""
|
|
155
|
+
User needs weather in San Francisco for clothing decision.
|
|
156
|
+
Task: Fetch current weather and report temperature + conditions
|
|
157
|
+
API: https://api.weather.com/forecast?city=San Francisco
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
# ScripterAgent (ReAct loop):
|
|
161
|
+
# 1. Generates code
|
|
162
|
+
import requests
|
|
163
|
+
response = requests.get("https://api.weather.com/forecast",
|
|
164
|
+
params={"city": "San Francisco"})
|
|
165
|
+
print(response.json())
|
|
166
|
+
|
|
167
|
+
# 2. Observes output: {'temp': 62, 'description': 'Partly cloudy'}
|
|
168
|
+
|
|
169
|
+
# 3. Returns message to Manager:
|
|
170
|
+
"The weather in San Francisco is 62°F with partly cloudy conditions."
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Configuration:**
|
|
174
|
+
```yaml
|
|
175
|
+
agent:
|
|
176
|
+
scripter:
|
|
177
|
+
max_steps: 10
|
|
178
|
+
safe_execution:
|
|
179
|
+
enabled: true
|
|
180
|
+
allowed_modules:
|
|
181
|
+
- datetime
|
|
182
|
+
- json
|
|
183
|
+
- requests
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Agent Coordination
|
|
187
|
+
|
|
188
|
+
### Shared State
|
|
189
|
+
|
|
190
|
+
All agents read/write `DroidAgentState`:
|
|
191
|
+
|
|
192
|
+
```python
|
|
193
|
+
state = DroidAgentState(
|
|
194
|
+
task="Book flight",
|
|
195
|
+
action_history=[],
|
|
196
|
+
visited_packages=[],
|
|
197
|
+
error_count=0,
|
|
198
|
+
scripter_results={},
|
|
199
|
+
manager_plan="",
|
|
200
|
+
executor_feedback="",
|
|
201
|
+
step_count=0
|
|
202
|
+
)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Event Flow (Reasoning Mode)
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
StartEvent
|
|
209
|
+
↓
|
|
210
|
+
ManagerInputEvent → run_manager()
|
|
211
|
+
↓
|
|
212
|
+
ManagerPlanEvent → handle_manager_plan()
|
|
213
|
+
↓
|
|
214
|
+
ExecutorInputEvent → run_executor()
|
|
215
|
+
↓
|
|
216
|
+
ExecutorResultEvent → handle_executor_result()
|
|
217
|
+
↓
|
|
218
|
+
[loop or finalize]
|
|
219
|
+
↓
|
|
220
|
+
FinalizeEvent → finalize()
|
|
221
|
+
↓
|
|
222
|
+
ResultEvent (StopEvent)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Quick Reference
|
|
226
|
+
|
|
227
|
+
| Agent | Role | Best For | Config Key |
|
|
228
|
+
|-------|------|----------|------------|
|
|
229
|
+
| DroidAgent | Orchestrator | Entry point | `agent.*` |
|
|
230
|
+
| ManagerAgent | Planner | Strategy, recovery | `agent.manager.*` |
|
|
231
|
+
| ExecutorAgent | Actor | Action execution | `agent.executor.*` |
|
|
232
|
+
| CodeActAgent | Direct | Simple tasks | `agent.codeact.*` |
|
|
233
|
+
| ScripterAgent | Python Executor | APIs, files, data | `agent.scripter.*` |
|
|
234
|
+
|
|
235
|
+
## Related Topics
|
|
236
|
+
|
|
237
|
+
- [Reasoning Mode](./reasoning-mode) - Manager → Executor workflow
|
|
238
|
+
- [Direct Mode](./direct-mode) - CodeActAgent workflow
|
|
239
|
+
- [ScripterAgent](./scripter-agent) - Off-device computation
|
|
240
|
+
- [Shared State](./shared-state) - DroidAgentState coordination
|
|
241
|
+
- [Configuration](./configuration) - Per-agent LLM profiles
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'Event Streaming'
|
|
3
|
+
description: 'How to consume real-time events from DroidAgent execution.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
Droidrun provides **real-time event streaming** that gives you visibility into agent execution as it happens. This allows you to build UIs, logging systems, or monitoring tools that react to agent actions in real-time.
|
|
9
|
+
|
|
10
|
+
Under the hood, Droidrun uses [llama-index workflows](https://docs.llamaindex.ai/en/stable/understanding/workflows/) - an event-driven orchestration system that powers the agent architecture.
|
|
11
|
+
|
|
12
|
+
## Basic Usage
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
from droidrun.agent.droid import DroidAgent
|
|
16
|
+
|
|
17
|
+
# Create and run agent
|
|
18
|
+
agent = DroidAgent(goal="Open Gmail and check inbox", config=config)
|
|
19
|
+
handler = agent.run()
|
|
20
|
+
|
|
21
|
+
# Stream events in real-time
|
|
22
|
+
async for event in handler.stream_events():
|
|
23
|
+
if isinstance(event, ManagerInternalPlanEvent):
|
|
24
|
+
print(f"📋 Plan: {event.plan}")
|
|
25
|
+
print(f"🎯 Current subgoal: {event.current_subgoal}")
|
|
26
|
+
|
|
27
|
+
elif isinstance(event, ExecutorInternalActionEvent):
|
|
28
|
+
print(f"⚡ Action: {event.description}")
|
|
29
|
+
print(f"💭 Thought: {event.thought}")
|
|
30
|
+
|
|
31
|
+
elif isinstance(event, ScreenshotEvent):
|
|
32
|
+
save_screenshot(event.screenshot, f"step_{event.step}.png")
|
|
33
|
+
|
|
34
|
+
elif isinstance(event, CodeGenerationEvent):
|
|
35
|
+
print(f"🐍 Generated code (step {event.step_number}):")
|
|
36
|
+
print(event.code)
|
|
37
|
+
|
|
38
|
+
# Wait for final result
|
|
39
|
+
result = await handler
|
|
40
|
+
print(f"✅ Success: {result.success}")
|
|
41
|
+
print(f"📝 Reason: {result.reason}")
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Event Types
|
|
45
|
+
|
|
46
|
+
### Planning Events
|
|
47
|
+
|
|
48
|
+
**ManagerInternalPlanEvent** - Emitted when Manager creates/updates a plan:
|
|
49
|
+
```python
|
|
50
|
+
class ManagerInternalPlanEvent(Event):
|
|
51
|
+
plan: str # Full task plan with subgoals
|
|
52
|
+
current_subgoal: str # Current subgoal being executed
|
|
53
|
+
thought: str # Manager's reasoning
|
|
54
|
+
manager_answer: str # Direct answer (if task is complete)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Execution Events
|
|
58
|
+
|
|
59
|
+
**ExecutorInternalActionEvent** - Emitted when Executor selects an action:
|
|
60
|
+
```python
|
|
61
|
+
class ExecutorInternalActionEvent(Event):
|
|
62
|
+
action_json: str # JSON representation of selected action
|
|
63
|
+
thought: str # Executor's reasoning
|
|
64
|
+
description: str # Human-readable action description
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**CodeGenerationEvent** - Emitted when CodeAct generates code:
|
|
68
|
+
```python
|
|
69
|
+
class CodeGenerationEvent(Event):
|
|
70
|
+
code: str # Generated Python code
|
|
71
|
+
step_number: int # Current step in execution
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**CodeExecutionResultEvent** - Emitted after code execution:
|
|
75
|
+
```python
|
|
76
|
+
class CodeExecutionResultEvent(Event):
|
|
77
|
+
success: bool # Whether execution succeeded
|
|
78
|
+
output: str # Execution output or error message
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Visual Events
|
|
82
|
+
|
|
83
|
+
**ScreenshotEvent** - Emitted when a screenshot is captured:
|
|
84
|
+
```python
|
|
85
|
+
class ScreenshotEvent(Event):
|
|
86
|
+
screenshot: bytes # PNG image data
|
|
87
|
+
step: int # Step number
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**AccessibilityTreeEvent** - Emitted when UI tree is captured:
|
|
91
|
+
```python
|
|
92
|
+
class AccessibilityTreeEvent(Event):
|
|
93
|
+
tree: str # Accessibility tree dump
|
|
94
|
+
step: int # Step number
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Common Patterns
|
|
98
|
+
|
|
99
|
+
### Building a Live UI
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
async def run_with_ui(goal: str):
|
|
103
|
+
agent = DroidAgent(goal=goal, config=config)
|
|
104
|
+
handler = agent.run()
|
|
105
|
+
|
|
106
|
+
async for event in handler.stream_events():
|
|
107
|
+
if isinstance(event, ManagerInternalPlanEvent):
|
|
108
|
+
ui.update_plan(event.plan)
|
|
109
|
+
ui.update_current_step(event.current_subgoal)
|
|
110
|
+
|
|
111
|
+
elif isinstance(event, ExecutorInternalActionEvent):
|
|
112
|
+
ui.add_action_log(event.description, event.thought)
|
|
113
|
+
|
|
114
|
+
elif isinstance(event, ScreenshotEvent):
|
|
115
|
+
ui.update_screenshot(event.screenshot)
|
|
116
|
+
|
|
117
|
+
result = await handler
|
|
118
|
+
ui.show_completion(result.success, result.reason)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Logging and Monitoring
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
import logging
|
|
125
|
+
|
|
126
|
+
logger = logging.getLogger("droidrun.monitor")
|
|
127
|
+
|
|
128
|
+
async def monitor_execution(goal: str):
|
|
129
|
+
agent = DroidAgent(goal=goal, config=config)
|
|
130
|
+
handler = agent.run()
|
|
131
|
+
|
|
132
|
+
start_time = time.time()
|
|
133
|
+
action_count = 0
|
|
134
|
+
|
|
135
|
+
async for event in handler.stream_events():
|
|
136
|
+
if isinstance(event, ExecutorInternalActionEvent):
|
|
137
|
+
action_count += 1
|
|
138
|
+
logger.info(f"Action {action_count}: {event.description}")
|
|
139
|
+
|
|
140
|
+
elif isinstance(event, CodeExecutionResultEvent):
|
|
141
|
+
if not event.success:
|
|
142
|
+
logger.error(f"Code execution failed: {event.output}")
|
|
143
|
+
|
|
144
|
+
result = await handler
|
|
145
|
+
duration = time.time() - start_time
|
|
146
|
+
|
|
147
|
+
logger.info(f"Task completed in {duration:.2f}s with {action_count} actions")
|
|
148
|
+
logger.info(f"Result: {result.success} - {result.reason}")
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Notes
|
|
152
|
+
|
|
153
|
+
- Events are **streamed in real-time** as the agent executes
|
|
154
|
+
- Not all events are emitted in every execution (depends on mode and actions)
|
|
155
|
+
- **Reasoning mode** emits `ManagerInternalPlanEvent` and `ExecutorInternalActionEvent`
|
|
156
|
+
- **Direct mode** emits `CodeGenerationEvent` and `CodeExecutionResultEvent`
|
|
157
|
+
- All events are **Pydantic models** with full type safety
|
|
158
|
+
- The `handler` object is **async** - always use `await handler` to get the final result
|
|
159
|
+
|
|
160
|
+
## Learn More
|
|
161
|
+
|
|
162
|
+
- [LlamaIndex Workflows](https://docs.llamaindex.ai/en/stable/understanding/workflows/) - The underlying orchestration system
|
|
163
|
+
- [Agent Architecture](./agent-architecture) - Multi-agent system overview
|
|
164
|
+
- [Reasoning Mode](./reasoning-mode) - Manager/Executor workflow details
|
|
165
|
+
- [Direct Mode](./direct-mode) - CodeAct workflow details
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'Architecture Overview'
|
|
3
|
+
description: 'Understanding Droidrun v4 multi-agent system for device automation.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## What is Droidrun?
|
|
7
|
+
|
|
8
|
+
Droidrun uses a **multi-agent architecture** where specialized agents work together to complete tasks. Instead of one agent doing everything, different agents handle planning, execution, and computation.
|
|
9
|
+
|
|
10
|
+
### Two Execution Modes
|
|
11
|
+
|
|
12
|
+
- **Reasoning Mode** (`reasoning=True`): Manager plans, Executor acts. Best for complex tasks.
|
|
13
|
+
- **Direct Mode** (`reasoning=False`): CodeActAgent executes immediately. Best for simple tasks.
|
|
14
|
+
|
|
15
|
+
## Core Agents
|
|
16
|
+
|
|
17
|
+
### DroidAgent (Orchestrator)
|
|
18
|
+
Main coordinator that manages the workflow and routes between agents.
|
|
19
|
+
|
|
20
|
+
**Location**: `droidrun/agent/droid/droid_agent.py:75`
|
|
21
|
+
|
|
22
|
+
### ManagerAgent (Planner)
|
|
23
|
+
Creates high-level plans and monitors progress. Only used in reasoning mode.
|
|
24
|
+
|
|
25
|
+
**Location**: `droidrun/agent/manager/manager_agent.py:46`
|
|
26
|
+
|
|
27
|
+
### ExecutorAgent (Actor)
|
|
28
|
+
Executes specific actions for each subgoal. Only used in reasoning mode.
|
|
29
|
+
|
|
30
|
+
**Location**: `droidrun/agent/executor/executor_agent.py:46`
|
|
31
|
+
|
|
32
|
+
### CodeActAgent (Direct Executor)
|
|
33
|
+
Generates and executes Python code directly. Used in direct mode.
|
|
34
|
+
|
|
35
|
+
**Location**: `droidrun/agent/codeact/codeact_agent.py`
|
|
36
|
+
|
|
37
|
+
### ScripterAgent (Off-Device)
|
|
38
|
+
Handles Python computations without device interaction (API calls, calculations).
|
|
39
|
+
|
|
40
|
+
**Location**: `droidrun/agent/scripter/`
|
|
41
|
+
|
|
42
|
+
## Workflow Comparison
|
|
43
|
+
|
|
44
|
+
### Reasoning Mode Flow
|
|
45
|
+
```
|
|
46
|
+
Goal → Manager (creates plan) → Executor (executes action) →
|
|
47
|
+
Manager (checks result) → Executor (next action) → ...
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Direct Mode Flow
|
|
51
|
+
```
|
|
52
|
+
Goal → CodeActAgent (generates code) → Execute → Done
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Per-Agent Configuration
|
|
56
|
+
|
|
57
|
+
Configure different LLMs for each agent:
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
# config.yaml
|
|
61
|
+
llm_profiles:
|
|
62
|
+
manager:
|
|
63
|
+
provider: Anthropic
|
|
64
|
+
model: claude-sonnet-4
|
|
65
|
+
|
|
66
|
+
executor:
|
|
67
|
+
provider: OpenAI
|
|
68
|
+
model: gpt-4o
|
|
69
|
+
|
|
70
|
+
codeact:
|
|
71
|
+
provider: GoogleGenAI
|
|
72
|
+
model: models/gemini-2.0-flash-exp
|
|
73
|
+
|
|
74
|
+
agent:
|
|
75
|
+
reasoning: true
|
|
76
|
+
max_steps: 15
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## When to Use Each Mode
|
|
80
|
+
|
|
81
|
+
**Use Reasoning Mode for:**
|
|
82
|
+
- Multi-step tasks (booking flights, configuring settings)
|
|
83
|
+
- Tasks requiring planning and adaptation
|
|
84
|
+
- Complex workflows across multiple apps
|
|
85
|
+
|
|
86
|
+
**Use Direct Mode for:**
|
|
87
|
+
- Simple actions (screenshots, sending messages)
|
|
88
|
+
- Fast execution without planning overhead
|
|
89
|
+
- Well-defined single-step tasks
|
|
90
|
+
|
|
91
|
+
## Key Features
|
|
92
|
+
|
|
93
|
+
### Shared State
|
|
94
|
+
All agents share `DroidAgentState` for coordination:
|
|
95
|
+
- Action history
|
|
96
|
+
- Error tracking
|
|
97
|
+
- Memory and context
|
|
98
|
+
- Script results
|
|
99
|
+
|
|
100
|
+
## Dive Deeper
|
|
101
|
+
|
|
102
|
+
- [Agent Architecture](./agent-architecture) - Detailed design
|
|
103
|
+
- [Reasoning Mode](./reasoning-mode) - Manager/Executor workflow
|
|
104
|
+
- [Direct Mode](./direct-mode) - CodeAct workflow
|
|
105
|
+
- [Configuration](./configuration) - Setup and LLM profiles
|
|
106
|
+
- [Custom Tools](./custom-tools) - Extending functionality
|
|
107
|
+
- [Migration Guide](./migration-guide) - Upgrading from v3
|