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.
Files changed (168) hide show
  1. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/PKG-INFO +1 -1
  2. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/docs.json +15 -20
  3. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/concepts/portal-app.mdx +1 -1
  4. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/quickstart.mdx +2 -2
  5. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/portal-app.mdx +1 -1
  6. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/android-tools.mdx +1 -1
  7. droidrun-0.4.0.dev5/docs/v4/concepts/agent-architecture.mdx +241 -0
  8. droidrun-0.4.0.dev5/docs/v4/concepts/events-and-workflows.mdx +165 -0
  9. droidrun-0.4.0.dev5/docs/v4/concepts/overview.mdx +107 -0
  10. droidrun-0.4.0.dev5/docs/v4/concepts/prompts.mdx +332 -0
  11. droidrun-0.4.0.dev5/docs/v4/concepts/scripter-agent.mdx +165 -0
  12. droidrun-0.4.0.dev5/docs/v4/concepts/shared-state.mdx +60 -0
  13. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/app-cards.mdx +12 -12
  14. droidrun-0.4.0.dev5/docs/v4/guides/cli.mdx +473 -0
  15. droidrun-0.4.0.dev5/docs/v4/guides/custom-tools-credentials.mdx +614 -0
  16. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/custom-variables.mdx +39 -49
  17. droidrun-0.4.0.dev5/docs/v4/guides/device-setup.mdx +436 -0
  18. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/overview.mdx +4 -5
  19. droidrun-0.4.0.dev5/docs/v4/guides/structured-output.mdx +281 -0
  20. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/guides/telemetry-tracing.mdx +19 -34
  21. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/overview.mdx +33 -141
  22. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/quickstart.mdx +32 -33
  23. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/adb-tools.mdx +7 -7
  24. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/base-tools.mdx +6 -6
  25. droidrun-0.4.0.dev5/docs/v4/sdk/configuration.mdx +693 -0
  26. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/droid-agent.mdx +32 -33
  27. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v4/sdk/ios-tools.mdx +5 -5
  28. droidrun-0.4.0.dev5/docs/v4/sdk.mdx +49 -0
  29. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/__init__.py +4 -0
  30. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/__init__.py +1 -0
  31. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/codeact/codeact_agent.py +5 -5
  32. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/droid/droid_agent.py +10 -5
  33. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/droid/events.py +2 -0
  34. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/executor_agent.py +14 -4
  35. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/scripter/scripter_agent.py +3 -1
  36. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/chat_utils.py +0 -2
  37. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/llm_loader.py +5 -5
  38. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/prompt_resolver.py +3 -1
  39. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/tools.py +57 -36
  40. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/trajectory.py +0 -1
  41. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/__init__.py +2 -2
  42. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/config_manager.py +16 -14
  43. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/replay.py +0 -1
  44. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/events.py +4 -1
  45. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/adb.py +0 -2
  46. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/ios.py +3 -3
  47. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/examples/custom_prompts_example.py +2 -3
  48. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/gen-docs-sdk-ref.sh +1 -1
  49. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/pyproject.toml +2 -2
  50. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/uv.lock +1 -1
  51. droidrun-0.4.0.dev4/docs/.generated-files.txt +0 -4
  52. droidrun-0.4.0.dev4/docs/v3/sdk/adb-tools.mdx +0 -425
  53. droidrun-0.4.0.dev4/docs/v3/sdk/base-tools.mdx +0 -191
  54. droidrun-0.4.0.dev4/docs/v3/sdk/droid-agent.mdx +0 -71
  55. droidrun-0.4.0.dev4/docs/v3/sdk/ios-tools.mdx +0 -279
  56. droidrun-0.4.0.dev4/docs/v4/concepts/architecture.mdx +0 -1793
  57. droidrun-0.4.0.dev4/docs/v4/concepts/event-streaming.mdx +0 -975
  58. droidrun-0.4.0.dev4/docs/v4/concepts/workflow-architecture.mdx +0 -1160
  59. droidrun-0.4.0.dev4/docs/v4/guides/cli.mdx +0 -1146
  60. droidrun-0.4.0.dev4/docs/v4/guides/configuration.mdx +0 -1595
  61. droidrun-0.4.0.dev4/docs/v4/guides/custom-tools-credentials.mdx +0 -1007
  62. droidrun-0.4.0.dev4/docs/v4/guides/device-setup.mdx +0 -1003
  63. droidrun-0.4.0.dev4/docs/v4/guides/structured-output.mdx +0 -1260
  64. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.github/workflows/black.yml +0 -0
  65. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.github/workflows/bounty.yml +0 -0
  66. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.github/workflows/publish.yml +0 -0
  67. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.gitignore +0 -0
  68. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/.python-version +0 -0
  69. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/CHANGELOG.md +0 -0
  70. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/CONTRIBUTING.md +0 -0
  71. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/LICENSE +0 -0
  72. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/MANIFEST.in +0 -0
  73. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/README.md +0 -0
  74. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/favicon.png +0 -0
  75. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/logo/dark.svg +0 -0
  76. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/logo/light.svg +0 -0
  77. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/concepts/agent.mdx +0 -0
  78. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/concepts/android-control.mdx +0 -0
  79. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v1/overview.mdx +0 -0
  80. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/agent.mdx +0 -0
  81. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/android-control.mdx +0 -0
  82. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/planning.mdx +0 -0
  83. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/concepts/tracing.mdx +0 -0
  84. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/overview.mdx +0 -0
  85. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v2/quickstart.mdx +0 -0
  86. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/agent.mdx +0 -0
  87. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/models.mdx +0 -0
  88. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/concepts/portal-app.mdx +0 -0
  89. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/cli.mdx +0 -0
  90. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/gemini.mdx +0 -0
  91. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/ollama.mdx +0 -0
  92. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/openailike.mdx +0 -0
  93. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/overview.mdx +0 -0
  94. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/guides/telemetry.mdx +0 -0
  95. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/images/portal_apk.png +0 -0
  96. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/overview.mdx +0 -0
  97. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/docs/v3/quickstart.mdx +0 -0
  98. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/__main__.py +0 -0
  99. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/codeact/__init__.py +0 -0
  100. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/codeact/events.py +0 -0
  101. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/common/__init__.py +0 -0
  102. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/common/constants.py +0 -0
  103. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/common/events.py +0 -0
  104. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/context/__init__.py +0 -0
  105. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/context/episodic_memory.py +0 -0
  106. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/context/task_manager.py +0 -0
  107. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/droid/__init__.py +0 -0
  108. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/__init__.py +0 -0
  109. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/events.py +0 -0
  110. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/executor/prompts.py +0 -0
  111. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/__init__.py +0 -0
  112. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/events.py +0 -0
  113. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/manager_agent.py +0 -0
  114. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/manager/prompts.py +0 -0
  115. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/__init__.py +0 -0
  116. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/app_starter_workflow.py +0 -0
  117. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/structured_output_agent.py +0 -0
  118. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/oneflows/text_manipulator.py +0 -0
  119. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/scripter/__init__.py +0 -0
  120. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/scripter/events.py +0 -0
  121. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/usage.py +0 -0
  122. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/__init__.py +0 -0
  123. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/async_utils.py +0 -0
  124. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/device_state_formatter.py +0 -0
  125. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/executer.py +0 -0
  126. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/inference.py +0 -0
  127. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/llm_picker.py +0 -0
  128. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/agent/utils/message_utils.py +0 -0
  129. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/__init__.py +0 -0
  130. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/app_card_provider.py +0 -0
  131. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/__init__.py +0 -0
  132. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/composite_provider.py +0 -0
  133. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/local_provider.py +0 -0
  134. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/app_cards/providers/server_provider.py +0 -0
  135. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/cli/__init__.py +0 -0
  136. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/cli/logs.py +0 -0
  137. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/cli/main.py +0 -0
  138. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/app_cards/README.md +0 -0
  139. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/app_cards/app_cards.json +0 -0
  140. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/app_cards/gmail.md +0 -0
  141. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/credentials_example.yaml +0 -0
  142. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/codeact/system.jinja2 +0 -0
  143. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/codeact/user.jinja2 +0 -0
  144. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/executor/rev1.jinja2 +0 -0
  145. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/executor/system.jinja2 +0 -0
  146. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/manager/rev1.jinja2 +0 -0
  147. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/manager/system.jinja2 +0 -0
  148. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config/prompts/scripter/system.jinja2 +0 -0
  149. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_example.yaml +0 -0
  150. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/path_resolver.py +0 -0
  151. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/prompt_loader.py +0 -0
  152. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/config_manager/safe_execution.py +0 -0
  153. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/credential_manager/__init__.py +0 -0
  154. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/credential_manager/credential_loader.py +0 -0
  155. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/credential_manager/credential_manager.py +0 -0
  156. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/__init__.py +0 -0
  157. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/__main__.py +0 -0
  158. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/macro/cli.py +0 -0
  159. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/portal.py +0 -0
  160. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/__init__.py +0 -0
  161. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/phoenix.py +0 -0
  162. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/telemetry/tracker.py +0 -0
  163. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/__init__.py +0 -0
  164. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/portal_client.py +0 -0
  165. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/droidrun/tools/tools.py +0 -0
  166. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/setup.py +0 -0
  167. {droidrun-0.4.0.dev4 → droidrun-0.4.0.dev5}/static/droidrun-dark.png +0 -0
  168. {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.dev4
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
- You can find the SDK Reference for AdbTools [here](../sdk/adb-tools)
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