droidrun 0.3.10.dev6__tar.gz → 0.3.10.dev7__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 (120) hide show
  1. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/PKG-INFO +1 -1
  2. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/codeact/codeact_agent.py +3 -4
  3. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/context/task_manager.py +0 -1
  4. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/droid/droid_agent.py +1 -3
  5. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/droid/events.py +2 -2
  6. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/manager/__init__.py +1 -1
  7. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/executer.py +11 -10
  8. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/llm_picker.py +1 -1
  9. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/app_cards/app_card_provider.py +0 -1
  10. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/app_cards/providers/composite_provider.py +4 -4
  11. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/app_cards/providers/local_provider.py +1 -2
  12. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/app_cards/providers/server_provider.py +1 -1
  13. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/cli/main.py +3 -4
  14. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/config_manager/config_manager.py +0 -1
  15. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/macro/cli.py +0 -1
  16. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/pyproject.toml +1 -1
  17. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/uv.lock +2 -189
  18. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/.github/workflows/bounty.yml +0 -0
  19. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/.github/workflows/publish.yml +0 -0
  20. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/.gitignore +0 -0
  21. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/.python-version +0 -0
  22. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/CHANGELOG.md +0 -0
  23. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/CONTRIBUTING.md +0 -0
  24. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/LICENSE +0 -0
  25. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/MANIFEST.in +0 -0
  26. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/README.md +0 -0
  27. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/app_cards/README.md +0 -0
  28. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/app_cards/app_cards.json +0 -0
  29. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/app_cards/gmail.md +0 -0
  30. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/prompts/codeact/system.jinja2 +0 -0
  31. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/prompts/codeact/user.jinja2 +0 -0
  32. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/prompts/executor/rev1.jinja2 +0 -0
  33. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/prompts/executor/system.jinja2 +0 -0
  34. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/prompts/manager/rev1.jinja2 +0 -0
  35. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config/prompts/manager/system.jinja2 +0 -0
  36. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/config_example.yaml +0 -0
  37. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/.generated-files.txt +0 -0
  38. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/docs.json +0 -0
  39. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/favicon.png +0 -0
  40. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/logo/dark.svg +0 -0
  41. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/logo/light.svg +0 -0
  42. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v1/concepts/agent.mdx +0 -0
  43. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v1/concepts/android-control.mdx +0 -0
  44. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v1/concepts/portal-app.mdx +0 -0
  45. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v1/overview.mdx +0 -0
  46. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v1/quickstart.mdx +0 -0
  47. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v2/concepts/agent.mdx +0 -0
  48. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v2/concepts/android-control.mdx +0 -0
  49. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v2/concepts/planning.mdx +0 -0
  50. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v2/concepts/portal-app.mdx +0 -0
  51. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v2/concepts/tracing.mdx +0 -0
  52. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v2/overview.mdx +0 -0
  53. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v2/quickstart.mdx +0 -0
  54. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/concepts/agent.mdx +0 -0
  55. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/concepts/android-tools.mdx +0 -0
  56. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/concepts/models.mdx +0 -0
  57. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/concepts/portal-app.mdx +0 -0
  58. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/guides/cli.mdx +0 -0
  59. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/guides/gemini.mdx +0 -0
  60. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/guides/ollama.mdx +0 -0
  61. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/guides/openailike.mdx +0 -0
  62. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/guides/overview.mdx +0 -0
  63. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/guides/telemetry.mdx +0 -0
  64. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/images/portal_apk.png +0 -0
  65. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/overview.mdx +0 -0
  66. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/quickstart.mdx +0 -0
  67. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/sdk/adb-tools.mdx +0 -0
  68. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/sdk/base-tools.mdx +0 -0
  69. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/sdk/droid-agent.mdx +0 -0
  70. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/docs/v3/sdk/ios-tools.mdx +0 -0
  71. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/__init__.py +0 -0
  72. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/__main__.py +0 -0
  73. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/__init__.py +0 -0
  74. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/codeact/__init__.py +0 -0
  75. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/codeact/events.py +0 -0
  76. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/common/constants.py +0 -0
  77. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/common/events.py +0 -0
  78. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/context/__init__.py +0 -0
  79. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/context/episodic_memory.py +0 -0
  80. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/droid/__init__.py +0 -0
  81. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/executor/__init__.py +0 -0
  82. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/executor/events.py +0 -0
  83. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/executor/executor_agent.py +0 -0
  84. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/executor/prompts.py +0 -0
  85. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/manager/events.py +0 -0
  86. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/manager/manager_agent.py +4 -4
  87. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/manager/prompts.py +0 -0
  88. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/oneflows/app_starter_workflow.py +0 -0
  89. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/oneflows/text_manipulator.py +0 -0
  90. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/usage.py +0 -0
  91. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/__init__.py +0 -0
  92. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/async_utils.py +0 -0
  93. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/chat_utils.py +0 -0
  94. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/device_state_formatter.py +0 -0
  95. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/inference.py +0 -0
  96. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/message_utils.py +0 -0
  97. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/tools.py +1 -1
  98. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/agent/utils/trajectory.py +0 -0
  99. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/app_cards/providers/__init__.py +1 -1
  100. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/cli/__init__.py +0 -0
  101. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/cli/logs.py +4 -4
  102. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/config_manager/__init__.py +0 -0
  103. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/config_manager/path_resolver.py +0 -0
  104. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/config_manager/prompt_loader.py +0 -0
  105. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/macro/__init__.py +0 -0
  106. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/macro/__main__.py +0 -0
  107. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/macro/replay.py +0 -0
  108. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/portal.py +0 -0
  109. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/telemetry/__init__.py +0 -0
  110. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/telemetry/events.py +0 -0
  111. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/telemetry/phoenix.py +0 -0
  112. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/telemetry/tracker.py +0 -0
  113. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/tools/__init__.py +0 -0
  114. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/tools/adb.py +0 -0
  115. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/tools/ios.py +0 -0
  116. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/droidrun/tools/tools.py +0 -0
  117. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/gen-docs-sdk-ref.sh +0 -0
  118. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/setup.py +0 -0
  119. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/static/droidrun-dark.png +0 -0
  120. {droidrun-0.3.10.dev6 → droidrun-0.3.10.dev7}/static/droidrun.png +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: droidrun
3
- Version: 0.3.10.dev6
3
+ Version: 0.3.10.dev7
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
@@ -3,7 +3,7 @@ import json
3
3
  import logging
4
4
  import re
5
5
  import time
6
- from typing import List, Union, Optional, TYPE_CHECKING
6
+ from typing import TYPE_CHECKING, List, Optional, Union
7
7
 
8
8
  from llama_index.core.base.llms.types import ChatMessage, ChatResponse
9
9
  from llama_index.core.llms.llm import LLM
@@ -23,9 +23,8 @@ from droidrun.agent.common.events import RecordUIStateEvent, ScreenshotEvent
23
23
  from droidrun.agent.context.episodic_memory import EpisodicMemory, EpisodicMemoryStep
24
24
  from droidrun.agent.usage import get_usage_from_response
25
25
  from droidrun.agent.utils import chat_utils
26
- from droidrun.agent.utils.executer import SimpleCodeExecutor, ExecuterState
27
26
  from droidrun.agent.utils.device_state_formatter import format_device_state
28
-
27
+ from droidrun.agent.utils.executer import ExecuterState, SimpleCodeExecutor
29
28
  from droidrun.agent.utils.tools import (
30
29
  ATOMIC_ACTION_SIGNATURES,
31
30
  build_custom_tool_descriptions,
@@ -489,7 +488,7 @@ Now, describe the next step you will take to address the original goal: {goal}""
489
488
  try:
490
489
  state = self.tools.get_state()
491
490
  a11y_tree = state.get("a11y_tree", "")
492
- phone_state = state.get("phone_state", "")
491
+ phone_state = state.get("phone_state", "") # noqa: F841
493
492
  except Exception as e:
494
493
  raise Exception(f"Failed to capture final UI state: {e}") from e
495
494
 
@@ -1,5 +1,4 @@
1
1
  import copy
2
- import os
3
2
  from dataclasses import dataclass
4
3
  from typing import Dict, List, Optional
5
4
 
@@ -32,7 +32,7 @@ from droidrun.agent.droid.events import (
32
32
  )
33
33
  from droidrun.agent.executor import ExecutorAgent
34
34
  from droidrun.agent.manager import ManagerAgent
35
- from droidrun.agent.utils.tools import ATOMIC_ACTION_SIGNATURES
35
+ from droidrun.agent.utils.tools import ATOMIC_ACTION_SIGNATURES, open_app
36
36
  from droidrun.agent.utils.trajectory import Trajectory
37
37
  from droidrun.config_manager.config_manager import (
38
38
  AgentConfig,
@@ -43,8 +43,6 @@ from droidrun.config_manager.config_manager import (
43
43
  ToolsConfig,
44
44
  TracingConfig,
45
45
  )
46
-
47
- from droidrun.agent.utils.tools import open_app
48
46
  from droidrun.telemetry import (
49
47
  DroidAgentFinalizeEvent,
50
48
  DroidAgentInitEvent,
@@ -14,7 +14,7 @@ import asyncio
14
14
  from typing import Dict, List
15
15
 
16
16
  from llama_index.core.workflow import Event
17
- from pydantic import BaseModel, Field
17
+ from pydantic import BaseModel, ConfigDict, Field
18
18
 
19
19
  from droidrun.agent.context import Task
20
20
 
@@ -47,7 +47,7 @@ class DroidAgentState(BaseModel):
47
47
  """
48
48
  State model for DroidAgent workflow - shared across parent and child workflows.
49
49
  """
50
-
50
+ model_config = ConfigDict(arbitrary_types_allowed=True)
51
51
  # Task context
52
52
  instruction: str = ""
53
53
  # App Cards
@@ -3,7 +3,7 @@ Manager Agent - Planning and reasoning workflow.
3
3
  """
4
4
 
5
5
  from droidrun.agent.droid.events import ManagerInputEvent, ManagerPlanEvent
6
- from droidrun.agent.manager.events import ManagerThinkingEvent, ManagerInternalPlanEvent
6
+ from droidrun.agent.manager.events import ManagerInternalPlanEvent, ManagerThinkingEvent
7
7
  from droidrun.agent.manager.manager_agent import ManagerAgent
8
8
  from droidrun.agent.manager.prompts import parse_manager_response
9
9
 
@@ -1,9 +1,10 @@
1
- import io
2
1
  import contextlib
3
- import traceback
2
+ import io
4
3
  import logging
5
- from typing import Any, Dict, Optional
4
+ import traceback
6
5
  from asyncio import AbstractEventLoop
6
+ from typing import Any, Dict, Optional
7
+
7
8
  from pydantic import BaseModel
8
9
 
9
10
  logger = logging.getLogger("droidrun")
@@ -11,7 +12,7 @@ logger = logging.getLogger("droidrun")
11
12
  class ExecuterState(BaseModel):
12
13
  """State object for the code executor."""
13
14
  ui_state: Optional[Any] = None
14
-
15
+
15
16
  class Config:
16
17
  arbitrary_types_allowed = True
17
18
 
@@ -70,7 +71,7 @@ class SimpleCodeExecutor:
70
71
  self.locals = locals
71
72
  self.loop = loop
72
73
  self.use_same_scope = use_same_scope
73
-
74
+
74
75
  if self.use_same_scope:
75
76
  # If using the same scope, merge globals and locals
76
77
  self.globals = self.locals = {
@@ -85,7 +86,7 @@ class SimpleCodeExecutor:
85
86
  """
86
87
  # Update UI state
87
88
  self.globals['ui_state'] = ui_state
88
-
89
+
89
90
  # Capture stdout and stderr
90
91
  stdout = io.StringIO()
91
92
  stderr = io.StringIO()
@@ -111,7 +112,7 @@ class SimpleCodeExecutor:
111
112
  async def execute(self, state: ExecuterState, code: str) -> str:
112
113
  """
113
114
  Execute Python code and capture output and return values.
114
-
115
+
115
116
  Runs the code in a separate thread to prevent blocking.
116
117
 
117
118
  Args:
@@ -123,7 +124,7 @@ class SimpleCodeExecutor:
123
124
  """
124
125
  # Get UI state from the state object
125
126
  ui_state = state.ui_state
126
-
127
+
127
128
  # Run the execution in a thread pool executor
128
129
  output = await self.loop.run_in_executor(
129
130
  None,
@@ -131,5 +132,5 @@ class SimpleCodeExecutor:
131
132
  code,
132
133
  ui_state
133
134
  )
134
-
135
- return output
135
+
136
+ return output
@@ -1,6 +1,6 @@
1
1
  import importlib
2
2
  import logging
3
- from typing import Any, TYPE_CHECKING
3
+ from typing import TYPE_CHECKING, Any
4
4
 
5
5
  from llama_index.core.llms.llm import LLM
6
6
 
@@ -8,7 +8,6 @@ Supports multiple backends: local files, remote servers, or composite strategies
8
8
  from abc import ABC, abstractmethod
9
9
 
10
10
 
11
-
12
11
  class AppCardProvider(ABC):
13
12
  """Abstract interface for loading app-specific instruction cards."""
14
13
 
@@ -7,9 +7,9 @@ Tries server first, falls back to local if server fails or returns empty.
7
7
  import logging
8
8
  from typing import Dict
9
9
 
10
- from droidrun.config_manager.app_card_provider import AppCardProvider
11
- from droidrun.config_manager.providers.local_provider import LocalAppCardProvider
12
- from droidrun.config_manager.providers.server_provider import ServerAppCardProvider
10
+ from droidrun.app_cards.app_card_provider import AppCardProvider
11
+ from droidrun.app_cards.providers.local_provider import LocalAppCardProvider
12
+ from droidrun.app_cards.providers.server_provider import ServerAppCardProvider
13
13
 
14
14
  logger = logging.getLogger("droidrun")
15
15
 
@@ -65,7 +65,7 @@ class CompositeAppCardProvider(AppCardProvider):
65
65
  server_result = await self.server_provider.load_app_card(package_name, instruction)
66
66
 
67
67
  if server_result:
68
- return server_result
68
+ return server_result
69
69
 
70
70
  # Server failed or returned empty, try local
71
71
  logger.debug(f"Composite provider: falling back to local for {package_name}")
@@ -6,10 +6,9 @@ Loads app cards from local filesystem using app_cards.json mapping.
6
6
 
7
7
  import json
8
8
  import logging
9
- from pathlib import Path
10
9
  from typing import Dict
11
10
 
12
- from droidrun.config_manager.app_card_provider import AppCardProvider
11
+ from droidrun.app_cards.app_card_provider import AppCardProvider
13
12
  from droidrun.config_manager.path_resolver import PathResolver
14
13
 
15
14
  logger = logging.getLogger("droidrun")
@@ -9,7 +9,7 @@ from typing import Dict
9
9
 
10
10
  import httpx
11
11
 
12
- from droidrun.config_manager.app_card_provider import AppCardProvider
12
+ from droidrun.app_cards.app_card_provider import AppCardProvider
13
13
 
14
14
  logger = logging.getLogger("droidrun")
15
15
 
@@ -16,13 +16,14 @@ from rich.console import Console
16
16
  from droidrun.agent.droid import DroidAgent
17
17
  from droidrun.agent.utils.llm_picker import load_llm, load_llms_from_profiles
18
18
  from droidrun.cli.logs import LogHandler
19
+ from droidrun.config_manager import ConfigManager
19
20
  from droidrun.config_manager.config_manager import (
20
21
  AgentConfig,
21
22
  CodeActConfig,
22
- ManagerConfig,
23
- ExecutorConfig,
24
23
  DeviceConfig,
24
+ ExecutorConfig,
25
25
  LoggingConfig,
26
+ ManagerConfig,
26
27
  ToolsConfig,
27
28
  TracingConfig,
28
29
  )
@@ -37,8 +38,6 @@ from droidrun.portal import (
37
38
  )
38
39
  from droidrun.telemetry import print_telemetry_message
39
40
  from droidrun.tools import AdbTools, IOSTools
40
- from droidrun.config_manager import ConfigManager
41
-
42
41
 
43
42
  # Suppress all warnings
44
43
  warnings.filterwarnings("ignore")
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import os
4
4
  import threading
5
5
  from dataclasses import asdict, dataclass, field
6
- from pathlib import Path
7
6
  from typing import Any, Callable, Dict, List, Optional
8
7
 
9
8
  import yaml
@@ -4,7 +4,6 @@ Command-line interface for DroidRun macro replay.
4
4
 
5
5
  import asyncio
6
6
  import logging
7
- import os
8
7
  from typing import Optional
9
8
 
10
9
  import click
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "droidrun"
3
- version = "0.3.10.dev6"
3
+ version = "0.3.10.dev7"
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 = [
@@ -836,7 +836,7 @@ wheels = [
836
836
 
837
837
  [[package]]
838
838
  name = "droidrun"
839
- version = "0.3.10.dev6"
839
+ version = "0.3.10.dev7"
840
840
  source = { editable = "." }
841
841
  dependencies = [
842
842
  { name = "adbutils" },
@@ -854,15 +854,6 @@ anthropic = [
854
854
  { name = "anthropic" },
855
855
  { name = "llama-index-llms-anthropic" },
856
856
  ]
857
- backend = [
858
- { name = "aiohttp" },
859
- { name = "fastapi" },
860
- { name = "pydantic-settings" },
861
- { name = "python-dotenv" },
862
- { name = "python-multipart" },
863
- { name = "uvicorn", extra = ["standard"] },
864
- { name = "websockets" },
865
- ]
866
857
  deepseek = [
867
858
  { name = "llama-index-llms-deepseek" },
868
859
  ]
@@ -900,13 +891,11 @@ dev = [
900
891
  [package.metadata]
901
892
  requires-dist = [
902
893
  { name = "adbutils", specifier = ">=2.10.2" },
903
- { name = "aiohttp", marker = "extra == 'backend'", specifier = ">=3.9.0" },
904
894
  { name = "anthropic", marker = "extra == 'anthropic'", specifier = ">=0.67.0" },
905
895
  { name = "apkutils", specifier = "==2.0.0" },
906
896
  { name = "arize-phoenix", specifier = ">=12.3.0" },
907
897
  { name = "bandit", marker = "extra == 'dev'", specifier = ">=1.8.6" },
908
898
  { name = "black", marker = "extra == 'dev'", specifier = ">=23.0.0" },
909
- { name = "fastapi", marker = "extra == 'backend'", specifier = ">=0.104.0" },
910
899
  { name = "httpx", specifier = ">=0.27.0" },
911
900
  { name = "llama-index", specifier = "==0.14.4" },
912
901
  { name = "llama-index-llms-anthropic", marker = "extra == 'anthropic'", specifier = ">=0.8.6,<0.9.0" },
@@ -920,16 +909,11 @@ requires-dist = [
920
909
  { name = "openai", marker = "extra == 'openai'", specifier = ">=1.99.1" },
921
910
  { name = "posthog", specifier = ">=6.7.6" },
922
911
  { name = "pydantic", specifier = ">=2.11.10" },
923
- { name = "pydantic-settings", marker = "extra == 'backend'", specifier = ">=2.0.0" },
924
- { name = "python-dotenv", marker = "extra == 'backend'", specifier = ">=1.0.0" },
925
- { name = "python-multipart", marker = "extra == 'backend'", specifier = ">=0.0.6" },
926
912
  { name = "rich", specifier = ">=14.1.0" },
927
913
  { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.13.0" },
928
914
  { name = "safety", marker = "extra == 'dev'", specifier = ">=3.2.11" },
929
- { name = "uvicorn", extras = ["standard"], marker = "extra == 'backend'", specifier = ">=0.24.0" },
930
- { name = "websockets", marker = "extra == 'backend'", specifier = ">=12.0" },
931
915
  ]
932
- provides-extras = ["anthropic", "openai", "google", "deepseek", "ollama", "backend", "dev", "openrouter"]
916
+ provides-extras = ["anthropic", "openai", "google", "deepseek", "ollama", "dev", "openrouter"]
933
917
 
934
918
  [package.metadata.requires-dev]
935
919
  dev = [
@@ -1312,42 +1296,6 @@ wheels = [
1312
1296
  { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
1313
1297
  ]
1314
1298
 
1315
- [[package]]
1316
- name = "httptools"
1317
- version = "0.7.1"
1318
- source = { registry = "https://pypi.org/simple" }
1319
- sdist = { url = "https://files.pythonhosted.org/packages/b5/46/120a669232c7bdedb9d52d4aeae7e6c7dfe151e99dc70802e2fc7a5e1993/httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9", size = 258961, upload-time = "2025-10-10T03:55:08.559Z" }
1320
- wheels = [
1321
- { url = "https://files.pythonhosted.org/packages/9c/08/17e07e8d89ab8f343c134616d72eebfe03798835058e2ab579dcc8353c06/httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657", size = 206521, upload-time = "2025-10-10T03:54:31.002Z" },
1322
- { url = "https://files.pythonhosted.org/packages/aa/06/c9c1b41ff52f16aee526fd10fbda99fa4787938aa776858ddc4a1ea825ec/httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70", size = 110375, upload-time = "2025-10-10T03:54:31.941Z" },
1323
- { url = "https://files.pythonhosted.org/packages/cc/cc/10935db22fda0ee34c76f047590ca0a8bd9de531406a3ccb10a90e12ea21/httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df", size = 456621, upload-time = "2025-10-10T03:54:33.176Z" },
1324
- { url = "https://files.pythonhosted.org/packages/0e/84/875382b10d271b0c11aa5d414b44f92f8dd53e9b658aec338a79164fa548/httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad6b591a682dcc6cf1397c3900527f9affef1e55a06c4547264796bbd17cf5e", size = 454954, upload-time = "2025-10-10T03:54:34.226Z" },
1325
- { url = "https://files.pythonhosted.org/packages/30/e1/44f89b280f7e46c0b1b2ccee5737d46b3bb13136383958f20b580a821ca0/httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb844698d11433d2139bbeeb56499102143beb582bd6c194e3ba69c22f25c274", size = 440175, upload-time = "2025-10-10T03:54:35.942Z" },
1326
- { url = "https://files.pythonhosted.org/packages/6f/7e/b9287763159e700e335028bc1824359dc736fa9b829dacedace91a39b37e/httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f65744d7a8bdb4bda5e1fa23e4ba16832860606fcc09d674d56e425e991539ec", size = 440310, upload-time = "2025-10-10T03:54:37.1Z" },
1327
- { url = "https://files.pythonhosted.org/packages/b3/07/5b614f592868e07f5c94b1f301b5e14a21df4e8076215a3bccb830a687d8/httptools-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:135fbe974b3718eada677229312e97f3b31f8a9c8ffa3ae6f565bf808d5b6bcb", size = 86875, upload-time = "2025-10-10T03:54:38.421Z" },
1328
- { url = "https://files.pythonhosted.org/packages/53/7f/403e5d787dc4942316e515e949b0c8a013d84078a915910e9f391ba9b3ed/httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:38e0c83a2ea9746ebbd643bdfb521b9aa4a91703e2cd705c20443405d2fd16a5", size = 206280, upload-time = "2025-10-10T03:54:39.274Z" },
1329
- { url = "https://files.pythonhosted.org/packages/2a/0d/7f3fd28e2ce311ccc998c388dd1c53b18120fda3b70ebb022b135dc9839b/httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f25bbaf1235e27704f1a7b86cd3304eabc04f569c828101d94a0e605ef7205a5", size = 110004, upload-time = "2025-10-10T03:54:40.403Z" },
1330
- { url = "https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03", size = 517655, upload-time = "2025-10-10T03:54:41.347Z" },
1331
- { url = "https://files.pythonhosted.org/packages/11/7d/71fee6f1844e6fa378f2eddde6c3e41ce3a1fb4b2d81118dd544e3441ec0/httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2", size = 511440, upload-time = "2025-10-10T03:54:42.452Z" },
1332
- { url = "https://files.pythonhosted.org/packages/22/a5/079d216712a4f3ffa24af4a0381b108aa9c45b7a5cc6eb141f81726b1823/httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362", size = 495186, upload-time = "2025-10-10T03:54:43.937Z" },
1333
- { url = "https://files.pythonhosted.org/packages/e9/9e/025ad7b65278745dee3bd0ebf9314934c4592560878308a6121f7f812084/httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c", size = 499192, upload-time = "2025-10-10T03:54:45.003Z" },
1334
- { url = "https://files.pythonhosted.org/packages/6d/de/40a8f202b987d43afc4d54689600ff03ce65680ede2f31df348d7f368b8f/httptools-0.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e14f530fefa7499334a79b0cf7e7cd2992870eb893526fb097d51b4f2d0f321", size = 86694, upload-time = "2025-10-10T03:54:45.923Z" },
1335
- { url = "https://files.pythonhosted.org/packages/09/8f/c77b1fcbfd262d422f12da02feb0d218fa228d52485b77b953832105bb90/httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6babce6cfa2a99545c60bfef8bee0cc0545413cb0018f617c8059a30ad985de3", size = 202889, upload-time = "2025-10-10T03:54:47.089Z" },
1336
- { url = "https://files.pythonhosted.org/packages/0a/1a/22887f53602feaa066354867bc49a68fc295c2293433177ee90870a7d517/httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:601b7628de7504077dd3dcb3791c6b8694bbd967148a6d1f01806509254fb1ca", size = 108180, upload-time = "2025-10-10T03:54:48.052Z" },
1337
- { url = "https://files.pythonhosted.org/packages/32/6a/6aaa91937f0010d288d3d124ca2946d48d60c3a5ee7ca62afe870e3ea011/httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c", size = 478596, upload-time = "2025-10-10T03:54:48.919Z" },
1338
- { url = "https://files.pythonhosted.org/packages/6d/70/023d7ce117993107be88d2cbca566a7c1323ccbaf0af7eabf2064fe356f6/httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66", size = 473268, upload-time = "2025-10-10T03:54:49.993Z" },
1339
- { url = "https://files.pythonhosted.org/packages/32/4d/9dd616c38da088e3f436e9a616e1d0cc66544b8cdac405cc4e81c8679fc7/httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346", size = 455517, upload-time = "2025-10-10T03:54:51.066Z" },
1340
- { url = "https://files.pythonhosted.org/packages/1d/3a/a6c595c310b7df958e739aae88724e24f9246a514d909547778d776799be/httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650", size = 458337, upload-time = "2025-10-10T03:54:52.196Z" },
1341
- { url = "https://files.pythonhosted.org/packages/fd/82/88e8d6d2c51edc1cc391b6e044c6c435b6aebe97b1abc33db1b0b24cd582/httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6", size = 85743, upload-time = "2025-10-10T03:54:53.448Z" },
1342
- { url = "https://files.pythonhosted.org/packages/34/50/9d095fcbb6de2d523e027a2f304d4551855c2f46e0b82befd718b8b20056/httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270", size = 203619, upload-time = "2025-10-10T03:54:54.321Z" },
1343
- { url = "https://files.pythonhosted.org/packages/07/f0/89720dc5139ae54b03f861b5e2c55a37dba9a5da7d51e1e824a1f343627f/httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3", size = 108714, upload-time = "2025-10-10T03:54:55.163Z" },
1344
- { url = "https://files.pythonhosted.org/packages/b3/cb/eea88506f191fb552c11787c23f9a405f4c7b0c5799bf73f2249cd4f5228/httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1", size = 472909, upload-time = "2025-10-10T03:54:56.056Z" },
1345
- { url = "https://files.pythonhosted.org/packages/e0/4a/a548bdfae6369c0d078bab5769f7b66f17f1bfaa6fa28f81d6be6959066b/httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b", size = 470831, upload-time = "2025-10-10T03:54:57.219Z" },
1346
- { url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" },
1347
- { url = "https://files.pythonhosted.org/packages/22/d2/b7e131f7be8d854d48cb6d048113c30f9a46dca0c9a8b08fcb3fcd588cdc/httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca", size = 452910, upload-time = "2025-10-10T03:54:59.366Z" },
1348
- { url = "https://files.pythonhosted.org/packages/53/cf/878f3b91e4e6e011eff6d1fa9ca39f7eb17d19c9d7971b04873734112f30/httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96", size = 88205, upload-time = "2025-10-10T03:55:00.389Z" },
1349
- ]
1350
-
1351
1299
  [[package]]
1352
1300
  name = "httpx"
1353
1301
  version = "0.28.1"
@@ -3037,20 +2985,6 @@ wheels = [
3037
2985
  { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" },
3038
2986
  ]
3039
2987
 
3040
- [[package]]
3041
- name = "pydantic-settings"
3042
- version = "2.11.0"
3043
- source = { registry = "https://pypi.org/simple" }
3044
- dependencies = [
3045
- { name = "pydantic" },
3046
- { name = "python-dotenv" },
3047
- { name = "typing-inspection" },
3048
- ]
3049
- sdist = { url = "https://files.pythonhosted.org/packages/20/c5/dbbc27b814c71676593d1c3f718e6cd7d4f00652cefa24b75f7aa3efb25e/pydantic_settings-2.11.0.tar.gz", hash = "sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180", size = 188394, upload-time = "2025-09-24T14:19:11.764Z" }
3050
- wheels = [
3051
- { url = "https://files.pythonhosted.org/packages/83/d6/887a1ff844e64aa823fb4905978d882a633cfe295c32eacad582b78a7d8b/pydantic_settings-2.11.0-py3-none-any.whl", hash = "sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c", size = 48608, upload-time = "2025-09-24T14:19:10.015Z" },
3052
- ]
3053
-
3054
2988
  [[package]]
3055
2989
  name = "pyelftools"
3056
2990
  version = "0.27"
@@ -3989,127 +3923,6 @@ wheels = [
3989
3923
  { url = "https://files.pythonhosted.org/packages/85/cd/584a2ceb5532af99dd09e50919e3615ba99aa127e9850eafe5f31ddfdb9a/uvicorn-0.37.0-py3-none-any.whl", hash = "sha256:913b2b88672343739927ce381ff9e2ad62541f9f8289664fa1d1d3803fa2ce6c", size = 67976, upload-time = "2025-09-23T13:33:45.842Z" },
3990
3924
  ]
3991
3925
 
3992
- [package.optional-dependencies]
3993
- standard = [
3994
- { name = "colorama", marker = "sys_platform == 'win32'" },
3995
- { name = "httptools" },
3996
- { name = "python-dotenv" },
3997
- { name = "pyyaml" },
3998
- { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" },
3999
- { name = "watchfiles" },
4000
- { name = "websockets" },
4001
- ]
4002
-
4003
- [[package]]
4004
- name = "uvloop"
4005
- version = "0.21.0"
4006
- source = { registry = "https://pypi.org/simple" }
4007
- sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741, upload-time = "2024-10-14T23:38:35.489Z" }
4008
- wheels = [
4009
- { url = "https://files.pythonhosted.org/packages/57/a7/4cf0334105c1160dd6819f3297f8700fda7fc30ab4f61fbf3e725acbc7cc/uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", size = 1447410, upload-time = "2024-10-14T23:37:33.612Z" },
4010
- { url = "https://files.pythonhosted.org/packages/8c/7c/1517b0bbc2dbe784b563d6ab54f2ef88c890fdad77232c98ed490aa07132/uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", size = 805476, upload-time = "2024-10-14T23:37:36.11Z" },
4011
- { url = "https://files.pythonhosted.org/packages/ee/ea/0bfae1aceb82a503f358d8d2fa126ca9dbdb2ba9c7866974faec1cb5875c/uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", size = 3960855, upload-time = "2024-10-14T23:37:37.683Z" },
4012
- { url = "https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", size = 3973185, upload-time = "2024-10-14T23:37:40.226Z" },
4013
- { url = "https://files.pythonhosted.org/packages/30/bf/08ad29979a936d63787ba47a540de2132169f140d54aa25bc8c3df3e67f4/uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", size = 3820256, upload-time = "2024-10-14T23:37:42.839Z" },
4014
- { url = "https://files.pythonhosted.org/packages/da/e2/5cf6ef37e3daf2f06e651aae5ea108ad30df3cb269102678b61ebf1fdf42/uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", size = 3937323, upload-time = "2024-10-14T23:37:45.337Z" },
4015
- { url = "https://files.pythonhosted.org/packages/8c/4c/03f93178830dc7ce8b4cdee1d36770d2f5ebb6f3d37d354e061eefc73545/uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", size = 1471284, upload-time = "2024-10-14T23:37:47.833Z" },
4016
- { url = "https://files.pythonhosted.org/packages/43/3e/92c03f4d05e50f09251bd8b2b2b584a2a7f8fe600008bcc4523337abe676/uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2", size = 821349, upload-time = "2024-10-14T23:37:50.149Z" },
4017
- { url = "https://files.pythonhosted.org/packages/a6/ef/a02ec5da49909dbbfb1fd205a9a1ac4e88ea92dcae885e7c961847cd51e2/uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", size = 4580089, upload-time = "2024-10-14T23:37:51.703Z" },
4018
- { url = "https://files.pythonhosted.org/packages/06/a7/b4e6a19925c900be9f98bec0a75e6e8f79bb53bdeb891916609ab3958967/uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", size = 4693770, upload-time = "2024-10-14T23:37:54.122Z" },
4019
- { url = "https://files.pythonhosted.org/packages/ce/0c/f07435a18a4b94ce6bd0677d8319cd3de61f3a9eeb1e5f8ab4e8b5edfcb3/uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", size = 4451321, upload-time = "2024-10-14T23:37:55.766Z" },
4020
- { url = "https://files.pythonhosted.org/packages/8f/eb/f7032be105877bcf924709c97b1bf3b90255b4ec251f9340cef912559f28/uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", size = 4659022, upload-time = "2024-10-14T23:37:58.195Z" },
4021
- { url = "https://files.pythonhosted.org/packages/3f/8d/2cbef610ca21539f0f36e2b34da49302029e7c9f09acef0b1c3b5839412b/uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281", size = 1468123, upload-time = "2024-10-14T23:38:00.688Z" },
4022
- { url = "https://files.pythonhosted.org/packages/93/0d/b0038d5a469f94ed8f2b2fce2434a18396d8fbfb5da85a0a9781ebbdec14/uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af", size = 819325, upload-time = "2024-10-14T23:38:02.309Z" },
4023
- { url = "https://files.pythonhosted.org/packages/50/94/0a687f39e78c4c1e02e3272c6b2ccdb4e0085fda3b8352fecd0410ccf915/uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6", size = 4582806, upload-time = "2024-10-14T23:38:04.711Z" },
4024
- { url = "https://files.pythonhosted.org/packages/d2/19/f5b78616566ea68edd42aacaf645adbf71fbd83fc52281fba555dc27e3f1/uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816", size = 4701068, upload-time = "2024-10-14T23:38:06.385Z" },
4025
- { url = "https://files.pythonhosted.org/packages/47/57/66f061ee118f413cd22a656de622925097170b9380b30091b78ea0c6ea75/uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc", size = 4454428, upload-time = "2024-10-14T23:38:08.416Z" },
4026
- { url = "https://files.pythonhosted.org/packages/63/9a/0962b05b308494e3202d3f794a6e85abe471fe3cafdbcf95c2e8c713aabd/uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553", size = 4660018, upload-time = "2024-10-14T23:38:10.888Z" },
4027
- ]
4028
-
4029
- [[package]]
4030
- name = "watchfiles"
4031
- version = "1.1.0"
4032
- source = { registry = "https://pypi.org/simple" }
4033
- dependencies = [
4034
- { name = "anyio" },
4035
- ]
4036
- sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" }
4037
- wheels = [
4038
- { url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" },
4039
- { url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" },
4040
- { url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" },
4041
- { url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" },
4042
- { url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" },
4043
- { url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" },
4044
- { url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" },
4045
- { url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" },
4046
- { url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" },
4047
- { url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" },
4048
- { url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" },
4049
- { url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" },
4050
- { url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" },
4051
- { url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" },
4052
- { url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" },
4053
- { url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" },
4054
- { url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" },
4055
- { url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" },
4056
- { url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" },
4057
- { url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" },
4058
- { url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" },
4059
- { url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" },
4060
- { url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" },
4061
- { url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" },
4062
- { url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" },
4063
- { url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" },
4064
- { url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" },
4065
- { url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" },
4066
- { url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" },
4067
- { url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" },
4068
- { url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" },
4069
- { url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" },
4070
- { url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" },
4071
- { url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" },
4072
- { url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" },
4073
- { url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" },
4074
- { url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" },
4075
- { url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" },
4076
- { url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" },
4077
- { url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" },
4078
- { url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" },
4079
- { url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" },
4080
- { url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" },
4081
- { url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" },
4082
- { url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" },
4083
- { url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" },
4084
- { url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" },
4085
- { url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" },
4086
- { url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" },
4087
- { url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" },
4088
- { url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" },
4089
- { url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" },
4090
- { url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" },
4091
- { url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" },
4092
- { url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" },
4093
- { url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" },
4094
- { url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" },
4095
- { url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" },
4096
- { url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" },
4097
- { url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" },
4098
- { url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" },
4099
- { url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" },
4100
- { url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" },
4101
- { url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" },
4102
- { url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" },
4103
- { url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" },
4104
- { url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" },
4105
- { url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" },
4106
- { url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" },
4107
- { url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" },
4108
- { url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" },
4109
- { url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" },
4110
- { url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" },
4111
- ]
4112
-
4113
3926
  [[package]]
4114
3927
  name = "websockets"
4115
3928
  version = "15.0.1"
File without changes
File without changes
@@ -10,6 +10,7 @@ This agent is responsible for:
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
+ import asyncio
13
14
  import logging
14
15
  from typing import TYPE_CHECKING
15
16
 
@@ -23,19 +24,18 @@ from droidrun.agent.utils.chat_utils import remove_empty_messages
23
24
  from droidrun.agent.utils.device_state_formatter import format_device_state
24
25
  from droidrun.agent.utils.inference import acall_with_retries
25
26
  from droidrun.agent.utils.tools import build_custom_tool_descriptions
26
- from droidrun.config_manager.prompt_loader import PromptLoader
27
27
  from droidrun.app_cards.app_card_provider import AppCardProvider
28
28
  from droidrun.app_cards.providers import (
29
+ CompositeAppCardProvider,
29
30
  LocalAppCardProvider,
30
31
  ServerAppCardProvider,
31
- CompositeAppCardProvider,
32
32
  )
33
+ from droidrun.config_manager.prompt_loader import PromptLoader
33
34
 
34
- import asyncio
35
35
  if TYPE_CHECKING:
36
36
  from droidrun.agent.droid.events import DroidAgentState
37
- from droidrun.tools import Tools
38
37
  from droidrun.config_manager.config_manager import AgentConfig
38
+ from droidrun.tools import Tools
39
39
 
40
40
 
41
41
  logger = logging.getLogger("droidrun")
@@ -1,5 +1,5 @@
1
- from typing import TYPE_CHECKING, List
2
1
  import time
2
+ from typing import TYPE_CHECKING, List
3
3
 
4
4
  if TYPE_CHECKING:
5
5
  from droidrun.tools import Tools
@@ -1,7 +1,7 @@
1
1
  """App card provider implementations."""
2
2
 
3
+ from droidrun.app_cards.providers.composite_provider import CompositeAppCardProvider
3
4
  from droidrun.app_cards.providers.local_provider import LocalAppCardProvider
4
5
  from droidrun.app_cards.providers.server_provider import ServerAppCardProvider
5
- from droidrun.app_cards.providers.composite_provider import CompositeAppCardProvider
6
6
 
7
7
  __all__ = ["LocalAppCardProvider", "ServerAppCardProvider", "CompositeAppCardProvider"]
@@ -21,14 +21,14 @@ from droidrun.agent.droid.events import (
21
21
  FinalizeEvent,
22
22
  TaskRunnerEvent,
23
23
  )
24
- from droidrun.agent.manager.events import (
25
- ManagerInternalPlanEvent,
26
- ManagerThinkingEvent,
27
- )
28
24
  from droidrun.agent.executor.events import (
29
25
  ExecutorInternalActionEvent,
30
26
  ExecutorInternalResultEvent,
31
27
  )
28
+ from droidrun.agent.manager.events import (
29
+ ManagerInternalPlanEvent,
30
+ ManagerThinkingEvent,
31
+ )
32
32
 
33
33
 
34
34
  class LogHandler(logging.Handler):
File without changes