openhands 0.0.0__py3-none-any.whl → 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of openhands might be problematic. Click here for more details.

Files changed (124) hide show
  1. openhands-1.0.1.dist-info/METADATA +52 -0
  2. openhands-1.0.1.dist-info/RECORD +31 -0
  3. {openhands-0.0.0.dist-info → openhands-1.0.1.dist-info}/WHEEL +1 -2
  4. openhands-1.0.1.dist-info/entry_points.txt +2 -0
  5. openhands_cli/__init__.py +8 -0
  6. openhands_cli/agent_chat.py +186 -0
  7. openhands_cli/argparsers/main_parser.py +56 -0
  8. openhands_cli/argparsers/serve_parser.py +31 -0
  9. openhands_cli/gui_launcher.py +220 -0
  10. openhands_cli/listeners/__init__.py +4 -0
  11. openhands_cli/listeners/loading_listener.py +63 -0
  12. openhands_cli/listeners/pause_listener.py +83 -0
  13. openhands_cli/llm_utils.py +57 -0
  14. openhands_cli/locations.py +13 -0
  15. openhands_cli/pt_style.py +30 -0
  16. openhands_cli/runner.py +178 -0
  17. openhands_cli/setup.py +116 -0
  18. openhands_cli/simple_main.py +59 -0
  19. openhands_cli/tui/__init__.py +5 -0
  20. openhands_cli/tui/settings/mcp_screen.py +217 -0
  21. openhands_cli/tui/settings/settings_screen.py +202 -0
  22. openhands_cli/tui/settings/store.py +93 -0
  23. openhands_cli/tui/status.py +109 -0
  24. openhands_cli/tui/tui.py +100 -0
  25. openhands_cli/tui/utils.py +14 -0
  26. openhands_cli/user_actions/__init__.py +17 -0
  27. openhands_cli/user_actions/agent_action.py +95 -0
  28. openhands_cli/user_actions/exit_session.py +18 -0
  29. openhands_cli/user_actions/settings_action.py +171 -0
  30. openhands_cli/user_actions/types.py +18 -0
  31. openhands_cli/user_actions/utils.py +199 -0
  32. openhands/__init__.py +0 -1
  33. openhands/sdk/__init__.py +0 -45
  34. openhands/sdk/agent/__init__.py +0 -8
  35. openhands/sdk/agent/agent/__init__.py +0 -6
  36. openhands/sdk/agent/agent/agent.py +0 -349
  37. openhands/sdk/agent/base.py +0 -103
  38. openhands/sdk/context/__init__.py +0 -28
  39. openhands/sdk/context/agent_context.py +0 -153
  40. openhands/sdk/context/condenser/__init__.py +0 -5
  41. openhands/sdk/context/condenser/condenser.py +0 -73
  42. openhands/sdk/context/condenser/no_op_condenser.py +0 -13
  43. openhands/sdk/context/manager.py +0 -5
  44. openhands/sdk/context/microagents/__init__.py +0 -26
  45. openhands/sdk/context/microagents/exceptions.py +0 -11
  46. openhands/sdk/context/microagents/microagent.py +0 -345
  47. openhands/sdk/context/microagents/types.py +0 -70
  48. openhands/sdk/context/utils/__init__.py +0 -8
  49. openhands/sdk/context/utils/prompt.py +0 -52
  50. openhands/sdk/context/view.py +0 -116
  51. openhands/sdk/conversation/__init__.py +0 -12
  52. openhands/sdk/conversation/conversation.py +0 -207
  53. openhands/sdk/conversation/state.py +0 -50
  54. openhands/sdk/conversation/types.py +0 -6
  55. openhands/sdk/conversation/visualizer.py +0 -300
  56. openhands/sdk/event/__init__.py +0 -27
  57. openhands/sdk/event/base.py +0 -148
  58. openhands/sdk/event/condenser.py +0 -49
  59. openhands/sdk/event/llm_convertible.py +0 -265
  60. openhands/sdk/event/types.py +0 -5
  61. openhands/sdk/event/user_action.py +0 -12
  62. openhands/sdk/event/utils.py +0 -30
  63. openhands/sdk/llm/__init__.py +0 -19
  64. openhands/sdk/llm/exceptions.py +0 -108
  65. openhands/sdk/llm/llm.py +0 -867
  66. openhands/sdk/llm/llm_registry.py +0 -116
  67. openhands/sdk/llm/message.py +0 -216
  68. openhands/sdk/llm/metadata.py +0 -34
  69. openhands/sdk/llm/utils/fn_call_converter.py +0 -1049
  70. openhands/sdk/llm/utils/metrics.py +0 -311
  71. openhands/sdk/llm/utils/model_features.py +0 -153
  72. openhands/sdk/llm/utils/retry_mixin.py +0 -122
  73. openhands/sdk/llm/utils/telemetry.py +0 -252
  74. openhands/sdk/logger.py +0 -167
  75. openhands/sdk/mcp/__init__.py +0 -20
  76. openhands/sdk/mcp/client.py +0 -113
  77. openhands/sdk/mcp/definition.py +0 -69
  78. openhands/sdk/mcp/tool.py +0 -104
  79. openhands/sdk/mcp/utils.py +0 -59
  80. openhands/sdk/tests/llm/test_llm.py +0 -447
  81. openhands/sdk/tests/llm/test_llm_fncall_converter.py +0 -691
  82. openhands/sdk/tests/llm/test_model_features.py +0 -221
  83. openhands/sdk/tool/__init__.py +0 -30
  84. openhands/sdk/tool/builtins/__init__.py +0 -34
  85. openhands/sdk/tool/builtins/finish.py +0 -57
  86. openhands/sdk/tool/builtins/think.py +0 -60
  87. openhands/sdk/tool/schema.py +0 -236
  88. openhands/sdk/tool/security_prompt.py +0 -5
  89. openhands/sdk/tool/tool.py +0 -142
  90. openhands/sdk/utils/__init__.py +0 -14
  91. openhands/sdk/utils/discriminated_union.py +0 -210
  92. openhands/sdk/utils/json.py +0 -48
  93. openhands/sdk/utils/truncate.py +0 -44
  94. openhands/tools/__init__.py +0 -44
  95. openhands/tools/execute_bash/__init__.py +0 -30
  96. openhands/tools/execute_bash/constants.py +0 -31
  97. openhands/tools/execute_bash/definition.py +0 -166
  98. openhands/tools/execute_bash/impl.py +0 -38
  99. openhands/tools/execute_bash/metadata.py +0 -101
  100. openhands/tools/execute_bash/terminal/__init__.py +0 -22
  101. openhands/tools/execute_bash/terminal/factory.py +0 -113
  102. openhands/tools/execute_bash/terminal/interface.py +0 -189
  103. openhands/tools/execute_bash/terminal/subprocess_terminal.py +0 -412
  104. openhands/tools/execute_bash/terminal/terminal_session.py +0 -492
  105. openhands/tools/execute_bash/terminal/tmux_terminal.py +0 -160
  106. openhands/tools/execute_bash/utils/command.py +0 -150
  107. openhands/tools/str_replace_editor/__init__.py +0 -17
  108. openhands/tools/str_replace_editor/definition.py +0 -158
  109. openhands/tools/str_replace_editor/editor.py +0 -683
  110. openhands/tools/str_replace_editor/exceptions.py +0 -41
  111. openhands/tools/str_replace_editor/impl.py +0 -66
  112. openhands/tools/str_replace_editor/utils/__init__.py +0 -0
  113. openhands/tools/str_replace_editor/utils/config.py +0 -2
  114. openhands/tools/str_replace_editor/utils/constants.py +0 -9
  115. openhands/tools/str_replace_editor/utils/encoding.py +0 -135
  116. openhands/tools/str_replace_editor/utils/file_cache.py +0 -154
  117. openhands/tools/str_replace_editor/utils/history.py +0 -122
  118. openhands/tools/str_replace_editor/utils/shell.py +0 -72
  119. openhands/tools/task_tracker/__init__.py +0 -16
  120. openhands/tools/task_tracker/definition.py +0 -336
  121. openhands/tools/utils/__init__.py +0 -1
  122. openhands-0.0.0.dist-info/METADATA +0 -3
  123. openhands-0.0.0.dist-info/RECORD +0 -94
  124. openhands-0.0.0.dist-info/top_level.txt +0 -1
@@ -1,336 +0,0 @@
1
- import json
2
- from pathlib import Path
3
- from typing import Literal
4
-
5
- from pydantic import BaseModel, Field
6
-
7
- from openhands.sdk import ImageContent, TextContent
8
- from openhands.sdk.logger import get_logger
9
- from openhands.sdk.tool import (
10
- ActionBase,
11
- ObservationBase,
12
- Tool,
13
- ToolAnnotations,
14
- ToolExecutor,
15
- )
16
-
17
-
18
- logger = get_logger(__name__)
19
-
20
-
21
- class TaskItem(BaseModel):
22
- title: str = Field(..., description="A brief title for the task.")
23
- notes: str = Field("", description="Additional details or notes about the task.")
24
- status: Literal["todo", "in_progress", "done"] = Field(
25
- "todo",
26
- description="The current status of the task. "
27
- "One of 'todo', 'in_progress', or 'done'.",
28
- )
29
-
30
-
31
- class TaskTrackerAction(ActionBase):
32
- """An action where the agent writes or updates a task list for task management."""
33
-
34
- command: Literal["view", "plan"] = Field(
35
- default="view",
36
- description="The command to execute. `view` shows the current task list. `plan` creates or updates the task list based on provided requirements and progress. Always `view` the current list before making changes.", # noqa: E501
37
- )
38
- task_list: list[TaskItem] = Field(
39
- default_factory=list,
40
- description="The full task list. Required parameter of `plan` command.",
41
- )
42
-
43
-
44
- class TaskTrackerObservation(ObservationBase):
45
- """This data class represents the result of a task tracking operation."""
46
-
47
- content: str = Field(
48
- default="", description="The formatted task list or status message"
49
- )
50
- command: str = Field(default="", description="The command that was executed")
51
- task_list: list[TaskItem] = Field(
52
- default_factory=list, description="The current task list"
53
- )
54
-
55
- @property
56
- def agent_observation(self) -> list[TextContent | ImageContent]:
57
- return [TextContent(text=self.content)]
58
-
59
-
60
- class TaskTrackerExecutor(ToolExecutor):
61
- """Executor for the task tracker tool."""
62
-
63
- def __init__(self, save_dir: str | None = None):
64
- """Initialize TaskTrackerExecutor.
65
-
66
- Args:
67
- save_dir: Optional directory to save tasks to. If provided, tasks will be
68
- persisted to save_dir/TASKS.md
69
- """
70
- self.save_dir = Path(save_dir) if save_dir else None
71
- self._task_list: list[TaskItem] = []
72
-
73
- # Load existing tasks if save_dir is provided and file exists
74
- if self.save_dir:
75
- self._load_tasks()
76
-
77
- def __call__(self, action: TaskTrackerAction) -> TaskTrackerObservation:
78
- """Execute the task tracker action."""
79
- if action.command == "plan":
80
- # Update the task list
81
- self._task_list = action.task_list
82
- # Save to file if save_dir is provided
83
- if self.save_dir:
84
- self._save_tasks()
85
- return TaskTrackerObservation(
86
- content="Task list has been updated with "
87
- + f"{len(self._task_list)} item(s).",
88
- command=action.command,
89
- task_list=self._task_list,
90
- )
91
- elif action.command == "view":
92
- # Return the current task list
93
- if not self._task_list:
94
- return TaskTrackerObservation(
95
- content='No task list found. Use the "plan" command to create one.',
96
- command=action.command,
97
- task_list=[],
98
- )
99
- content = self._format_task_list(self._task_list)
100
- return TaskTrackerObservation(
101
- content=content, command=action.command, task_list=self._task_list
102
- )
103
- else:
104
- return TaskTrackerObservation(
105
- content=f"Unknown command: {action.command}. "
106
- + 'Supported commands are "view" and "plan".',
107
- command=action.command,
108
- task_list=[],
109
- )
110
-
111
- def _format_task_list(self, task_list: list[TaskItem]) -> str:
112
- """Format the task list for display."""
113
- if not task_list:
114
- return "No tasks in the list."
115
-
116
- content = "# Task List\n\n"
117
- for i, task in enumerate(task_list, 1):
118
- status_icon = {"todo": "⏳", "in_progress": "🔄", "done": "✅"}.get(
119
- task.status, "⏳"
120
- )
121
-
122
- title = task.title
123
- notes = task.notes
124
-
125
- content += f"{i}. {status_icon} {title}\n"
126
- if notes:
127
- content += f" {notes}\n"
128
- content += "\n"
129
-
130
- return content.strip()
131
-
132
- def _load_tasks(self) -> None:
133
- """Load tasks from the TASKS.json file if it exists."""
134
- if not self.save_dir:
135
- return
136
-
137
- tasks_file = self.save_dir / "TASKS.json"
138
- if not tasks_file.exists():
139
- return
140
-
141
- try:
142
- with open(tasks_file, "r", encoding="utf-8") as f:
143
- self._task_list = json.load(f)
144
- except (OSError, json.JSONDecodeError) as e:
145
- logger.warning(
146
- f"Failed to load tasks from {tasks_file}: {e}. Starting with "
147
- "an empty task list."
148
- )
149
- self._task_list = []
150
-
151
- def _save_tasks(self) -> None:
152
- """Save tasks to the TASKS.json file."""
153
- if not self.save_dir:
154
- return
155
-
156
- tasks_file = self.save_dir / "TASKS.json"
157
- try:
158
- # Create the directory if it doesn't exist
159
- self.save_dir.mkdir(parents=True, exist_ok=True)
160
-
161
- with open(tasks_file, "w", encoding="utf-8") as f:
162
- json.dump(self._task_list, f, indent=2)
163
- except OSError as e:
164
- logger.warning(f"Failed to save tasks to {tasks_file}: {e}")
165
- pass
166
-
167
-
168
- # Tool definition with detailed description
169
- TASK_TRACKER_DESCRIPTION = """This tool provides structured task management capabilities for development workflows.
170
- It enables systematic tracking of work items, progress monitoring, and efficient
171
- organization of complex development activities.
172
-
173
- The tool maintains visibility into project status and helps communicate
174
- progress effectively to users.
175
-
176
- ## Application Guidelines
177
-
178
- Utilize this tool in the following situations:
179
-
180
- 1. Multi-phase development work - When projects involve multiple sequential or
181
- parallel activities
182
- 2. Complex implementation tasks - Work requiring systematic planning and
183
- coordination across multiple components
184
- 3. Explicit user request for task organization - When users specifically ask
185
- for structured task management
186
- 4. Multiple concurrent requirements - When users present several work items
187
- that need coordination
188
- 5. Project initiation - Capture and organize user requirements at project start
189
- 6. Work commencement - Update task status to in_progress before beginning
190
- implementation. Maintain focus by limiting active work to one task
191
- 7. Task completion - Update status to done and identify any additional work
192
- that emerged during implementation
193
-
194
- ## Situations Where Tool Usage Is Unnecessary
195
-
196
- Avoid using this tool when:
197
-
198
- 1. Single atomic tasks that require no decomposition
199
- 2. Trivial operations where tracking adds no organizational value
200
- 3. Simple activities completable in minimal steps
201
- 4. Pure information exchange or discussion
202
-
203
- Note: For single straightforward tasks, proceed with direct implementation
204
- rather than creating tracking overhead.
205
-
206
- ## Usage Scenarios
207
-
208
- **Scenario A: Feature Development with Validation**
209
- User request: "Build a user authentication system with login/logout functionality.
210
- Don't forget to include input validation and error handling!"
211
-
212
- Response approach: I'll implement a user authentication system with comprehensive
213
- validation. Let me organize this work systematically.
214
-
215
- *Task breakdown includes:*
216
- 1. Design authentication API endpoints and data models
217
- 2. Implement user login/logout controllers with session management
218
- 3. Add client-side form validation and error display
219
- 4. Create backend input sanitization and security checks
220
- 5. Implement comprehensive error handling for edge cases
221
- 6. Perform integration testing and fix any issues
222
-
223
- **Scenario B: Codebase Refactoring**
224
- User request: "I need to update all instances of the method 'fetchData' to
225
- 'retrieveInformation' throughout the entire project"
226
-
227
- Response approach: Let me first analyze your codebase to identify all locations
228
- where 'fetchData' appears.
229
-
230
- *After code analysis*
231
-
232
- I've located 12 occurrences of 'fetchData' across 6 files in your project.
233
- I'll create a systematic plan to update these references.
234
-
235
- *Organized task list includes specific file-by-file updates*
236
-
237
- **Scenario C: Multi-feature Development**
238
- User request: "Set up a blog platform with these components: admin dashboard,
239
- article management, comment system, and user profiles."
240
-
241
- Response approach: I'll help build your blog platform. Let me break down these
242
- components into manageable implementation phases.
243
-
244
- *Creates structured plan with each feature decomposed into specific development tasks*
245
-
246
- ## Counter-examples - Direct Implementation Preferred
247
-
248
- **Counter-example A: Simple inquiry**
249
- User request: "What's the syntax for a for loop in JavaScript?"
250
-
251
- Response approach: Here's how to write a for loop in JavaScript:
252
-
253
- ```javascript
254
- for (let i = 0; i < array.length; i++) {
255
- console.log(array[i]);
256
- }
257
- ```
258
-
259
- *No task tracking needed - single informational response*
260
-
261
- **Counter-example B: Minor modification**
262
- User request: "Please add a docstring to the processPayment function explaining
263
- its parameters."
264
-
265
- Response approach: I'll add a docstring to explain the processPayment function.
266
-
267
- *Direct edit without task tracking for simple modification*
268
-
269
- ## Status Management and Workflow
270
-
271
- 1. **Status Values**: Track work using these states:
272
- - todo: Not yet initiated
273
- - in_progress: Currently active (maintain single focus)
274
- - done: Successfully completed
275
-
276
- 2. **Workflow Practices**:
277
- - Update status dynamically as work progresses
278
- - Mark completion immediately upon task finish
279
- - Limit active work to ONE task at any given time
280
- - Complete current activities before initiating new ones
281
- - Remove obsolete tasks from tracking entirely
282
-
283
- 3. **Completion Criteria**:
284
- - Mark tasks as done only when fully achieved
285
- - Keep status as in_progress if errors, blocks, or partial completion exist
286
- - Create new tasks for discovered issues or dependencies
287
- - Never mark done when:
288
- - Test suites are failing
289
- - Implementation remains incomplete
290
- - Unresolved errors persist
291
- - Required resources are unavailable
292
-
293
- 4. **Task Organization**:
294
- - Write precise, actionable descriptions
295
- - Decompose complex work into manageable units
296
- - Use descriptive, clear naming conventions
297
-
298
- When uncertain, favor using this tool. Proactive task management demonstrates
299
- systematic approach and ensures comprehensive requirement fulfillment.""" # noqa: E501
300
-
301
-
302
- task_tracker_tool = Tool(
303
- name="task_tracker",
304
- description=TASK_TRACKER_DESCRIPTION,
305
- input_schema=TaskTrackerAction,
306
- output_schema=TaskTrackerObservation,
307
- annotations=ToolAnnotations(
308
- readOnlyHint=False,
309
- destructiveHint=False,
310
- idempotentHint=True,
311
- openWorldHint=False,
312
- ),
313
- )
314
-
315
-
316
- class TaskTrackerTool(Tool[TaskTrackerAction, TaskTrackerObservation]):
317
- """A Tool subclass that automatically initializes a TaskTrackerExecutor."""
318
-
319
- def __init__(self, save_dir: str | None = None):
320
- """Initialize TaskTrackerTool with a TaskTrackerExecutor.
321
-
322
- Args:
323
- save_dir: Optional directory to save tasks to. If provided, tasks will be
324
- persisted to save_dir/TASKS.json
325
- """
326
- executor = TaskTrackerExecutor(save_dir=save_dir)
327
-
328
- # Initialize the parent Tool with the executor
329
- super().__init__(
330
- name="task_tracker",
331
- description=TASK_TRACKER_DESCRIPTION,
332
- input_schema=TaskTrackerAction,
333
- output_schema=TaskTrackerObservation,
334
- annotations=task_tracker_tool.annotations,
335
- executor=executor,
336
- )
@@ -1 +0,0 @@
1
- """Shared utilities."""
@@ -1,3 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: openhands
3
- Version: 0.0.0
@@ -1,94 +0,0 @@
1
- openhands/__init__.py,sha256=ED6jHcYiuYpr_0vjGz0zx2lrrmJT9sDJCzIljoDfmlM,65
2
- openhands/sdk/__init__.py,sha256=LITaOFcAWwkSjUvwrJMPMei0DbuNDP6_kjWOGZg8pWI,1060
3
- openhands/sdk/logger.py,sha256=wlG9Gv7vT0mNAYrVNjknJgBrmjFCxC46iluLU8xQrPQ,5316
4
- openhands/sdk/agent/__init__.py,sha256=yOn1ZCgTTq2VJlTzKDSzmWVPli1siBzqV89vlEHCwOg,137
5
- openhands/sdk/agent/base.py,sha256=0JftSH2kAH1UNW6ToS84vkpFfb8zDxD97BX-IbLG9CQ,3324
6
- openhands/sdk/agent/agent/__init__.py,sha256=XjFyvsI7XF-FQHCAeQiErCwWNb26Hac4LhYt_77VgMM,54
7
- openhands/sdk/agent/agent/agent.py,sha256=DH7J5bzbTwgWKO_6qihklmbz4-c5uIKHZeErhM5bUeg,12198
8
- openhands/sdk/context/__init__.py,sha256=4SKeKbmHAB9iOVMzRfvoBxE5dsEv2sxRY60ua2c-_zw,643
9
- openhands/sdk/context/agent_context.py,sha256=VyagYqE3AdKKQCXBVe9zVy-Hjpk6Evm3AHfShagmLfU,6340
10
- openhands/sdk/context/manager.py,sha256=08sUZB2WIN7bh9rv76ybHQfGVFQQjjVe5uWNG4UAQTc,126
11
- openhands/sdk/context/view.py,sha256=4A5fXk7CMJPx99_f8G8O4zMDpvQHDldKrswUgP4M4ak,3912
12
- openhands/sdk/context/condenser/__init__.py,sha256=3KvdRQG6-p4zeUBar79i53m4tSLY9lMjYm-LcIPHTpQ,219
13
- openhands/sdk/context/condenser/condenser.py,sha256=2mF8AgBkm2oERyJqFkSEGFj0kBbLobzIv_6Uhk_lfAQ,2790
14
- openhands/sdk/context/condenser/no_op_condenser.py,sha256=AoqCVfnUo0HxdcPkk4xMjlXWmFo93x_Folvu-L-9FKo,391
15
- openhands/sdk/context/microagents/__init__.py,sha256=AJdke6lMjfeJl52RN91gw4TTbavH8U1aAD7WaIHK2tE,635
16
- openhands/sdk/context/microagents/exceptions.py,sha256=zw3MsIVLRwUR9fO2ppzrVLaOlWT_U8lmJV5hEvQL49A,335
17
- openhands/sdk/context/microagents/microagent.py,sha256=g2h6W9Xqoul2Cp4xAKJ1L1fp87BaDkVqbxQE81A_2Cs,12461
18
- openhands/sdk/context/microagents/types.py,sha256=qVo2Pq7tidgtNGcz9Ew6m2CANbOLwO7AWOJ2StydM3A,2630
19
- openhands/sdk/context/utils/__init__.py,sha256=8jZMJ5shXZX1H05dpwF2bilJoqj5yOFmg8RM1hwTWvw,111
20
- openhands/sdk/context/utils/prompt.py,sha256=X90So4HZln3bNpN_2BgoFgI92g3wIJTWqoivaGQK6TI,1603
21
- openhands/sdk/conversation/__init__.py,sha256=K_iTpZeXvj3r8admMeRwwVrM49rBdC93LM0BXrzQJCs,394
22
- openhands/sdk/conversation/conversation.py,sha256=y_oYOs6EccWIjed6Lm4fhdFCP7cuyUxYvswiakXQbCY,7735
23
- openhands/sdk/conversation/state.py,sha256=xES2i-i5X1gYNuM6MVCvzRDdqU95JrDk34oT5CizwW0,1569
24
- openhands/sdk/conversation/types.py,sha256=U7RJNrWV5AhBh69vRAoFRUzgVIaDtLKiKdG6Ro-bZ5s,120
25
- openhands/sdk/conversation/visualizer.py,sha256=elFO7MfzSpw_xm_tszxbIyTTj_7z0Wi7uQtxFaKq4-I,11490
26
- openhands/sdk/event/__init__.py,sha256=g-Ev71KpEBLbhuu74rsEPVDpPRa6rSoJvYjLdSNjinQ,664
27
- openhands/sdk/event/base.py,sha256=3XCVGMUjLgyZjQTPf5v8QFIcrerDi5Yx6DYyvxbG6Kg,5363
28
- openhands/sdk/event/condenser.py,sha256=OdBBdxbGUAyx38IqAm81ks-qRTlw0mDak2bA07WD_RY,1485
29
- openhands/sdk/event/llm_convertible.py,sha256=N_xWib8eIZ5cf6U9mGtxtCYd9ek7s3BQk2E0iEvnHG4,9889
30
- openhands/sdk/event/types.py,sha256=Dcl60cHuMn_jPkjOinJJIDzcA7N51h1hVuy6Q4BuJC4,170
31
- openhands/sdk/event/user_action.py,sha256=yiL8PEpb6SAHgG9CbrfFkDb87NJBYptBi2hpOSYZwrU,418
32
- openhands/sdk/event/utils.py,sha256=rlbs2ECHuspVvoXy00wuc7AuuhdnB0LjkXhKxpuHXfQ,1125
33
- openhands/sdk/llm/__init__.py,sha256=YgJE-eypLIJcE5ItKRtKi8jETG4ew9d3L5R7UAymjTY,527
34
- openhands/sdk/llm/exceptions.py,sha256=ymx4148AIcIfhCELmCFsvyTh1auWYR8SEhpxvcdUn0I,3417
35
- openhands/sdk/llm/llm.py,sha256=VykiUn4EPwevWA5Ihdu6Fsg_QyZFGQKU2uIvVCdus4w,33173
36
- openhands/sdk/llm/llm_registry.py,sha256=GPOY1hZ6lwhPMYz6Qvelyje7jRRHE5tuAvvFgyR3LbQ,3474
37
- openhands/sdk/llm/message.py,sha256=IpYDZYVL9PlZBZ_4ZVqu-CqXWdq7LMPpopDOrSZWQr0,8465
38
- openhands/sdk/llm/metadata.py,sha256=BhlgmU-01tB2Q14yPSodW4_gLEkiVYqTBCI91JPhi68,908
39
- openhands/sdk/llm/utils/fn_call_converter.py,sha256=QEPFSMKfYKEDqhoRcKYjbE9T3Uauf7awcOLTInvGC9g,39912
40
- openhands/sdk/llm/utils/metrics.py,sha256=XW3A_og-hwA6_IBwCWhF3rswjVDUM-nlpmcseehbyEg,11594
41
- openhands/sdk/llm/utils/model_features.py,sha256=pr8PhsCMjJRICTIU8TdCkT370p7QP43gpYSHE-AdQRw,4421
42
- openhands/sdk/llm/utils/retry_mixin.py,sha256=E9GHO3c9ejtathQGABlyZFKWTCFi1OTIHH18DyJYdlo,4532
43
- openhands/sdk/llm/utils/telemetry.py,sha256=pnJ9zAwUumqV5ImXvQx8ztbQ0dYjpN29EObnIKk8CPc,9655
44
- openhands/sdk/mcp/__init__.py,sha256=YL5ipWDkxBJ7G_78LH4xlTbn4RNUDTApHDNI902m19E,426
45
- openhands/sdk/mcp/client.py,sha256=zjtZhYtDBZPbT1OhXe4-ZHCXIxvXQWdhJyDUJElCQzQ,3440
46
- openhands/sdk/mcp/definition.py,sha256=WrhyQq2JWfqNE5oBG7AhUEb-BSA1GzaY85Wedu6X4b0,2480
47
- openhands/sdk/mcp/tool.py,sha256=3dx2XH_kU8N0mMrt899oP-egNF86bQgd9PFrPyT4e8g,3636
48
- openhands/sdk/mcp/utils.py,sha256=e0ZecjkCZBOlSKlZbHimE-67JzRrtuyIZUV6ZYpVOno,1841
49
- openhands/sdk/tests/llm/test_llm.py,sha256=Lhdp60HdKpzsiqai0A0sHHkulu4TFUmBhuNKC19XI5E,14892
50
- openhands/sdk/tests/llm/test_llm_fncall_converter.py,sha256=fpaIhjhl18VgHIEf0c0G7w69rCGfJFTgzv2inhLUVQQ,22330
51
- openhands/sdk/tests/llm/test_model_features.py,sha256=PviZi9dw76gawQT_-oNxNbDgtT2TmF_WhkiCdOBbfx8,7391
52
- openhands/sdk/tool/__init__.py,sha256=Vz8hIvfGtsPDXZSTcsChlCOCdwtD3VPhCcCuzmWffwI,551
53
- openhands/sdk/tool/schema.py,sha256=cnGuL_mKuS-loeYqAS8YBewOJJupn0SxNjhSma8Odxw,8115
54
- openhands/sdk/tool/security_prompt.py,sha256=3hsyvXf6B9Oc1IwyeZMhux3AFU6YVas2m8JJIWTx14U,176
55
- openhands/sdk/tool/tool.py,sha256=_A9MpmSu1OCCZNzrtOLlLh0HVOfrHvohonej5TozWes,5534
56
- openhands/sdk/tool/builtins/__init__.py,sha256=mBnEpzzRfmHvv2UcLVLp1teK6Z9ClkeKwutPTC9o66Y,729
57
- openhands/sdk/tool/builtins/finish.py,sha256=0cnctGalN1JlgaEFv1FeN7qWKQiAn-tqEep6LLJX-iY,1562
58
- openhands/sdk/tool/builtins/think.py,sha256=gLTaPL3Xv34lXV9TuhWRLIBLZvbykqnfCxOv8qLP5WQ,2168
59
- openhands/sdk/utils/__init__.py,sha256=5WAjI8dtYyJ2VSgWSsej816WjSfSgrKckIXKGZun6LI,258
60
- openhands/sdk/utils/discriminated_union.py,sha256=ayh1syoRL_KNc8IYAZBmCkAE8nfRyvu0OTsczQRiMhs,7167
61
- openhands/sdk/utils/json.py,sha256=hHAA7i7NCJrQhb5WWSsoT0nvmJUi0koyBdbviFrfdcM,1384
62
- openhands/sdk/utils/truncate.py,sha256=Owl2fYsRAuQCIwJ6ma_xOwOYQ0b7EPF1ektzPHn8RQc,1466
63
- openhands/tools/__init__.py,sha256=nbPouavMcRFs7wpVfq3ub-enmyhVPVXPEtuSPcero0Q,962
64
- openhands/tools/execute_bash/__init__.py,sha256=elMofrbxwJxD9LDSg313UJYhygQZWX_T38ZUqB0RY2Q,736
65
- openhands/tools/execute_bash/constants.py,sha256=Iy7nN0BgnQZ1ndxi5hk00t6qn4mktDc1zq5BPEP9lDM,1095
66
- openhands/tools/execute_bash/definition.py,sha256=hW2WCsyAjL9dz7UOAIjQs2PBHxQYi-MlLargPn-l9yA,8076
67
- openhands/tools/execute_bash/impl.py,sha256=cOgjiNqwp9srFNoSvKbcMIzCKyWN2dOl1PzWdPkEqfM,1386
68
- openhands/tools/execute_bash/metadata.py,sha256=hbQtgAL8rf_rp1FFfjU4wns0eC6x4VJCIdbxTVbWgvs,3597
69
- openhands/tools/execute_bash/terminal/__init__.py,sha256=0L174TszwL669apLd6uxI4fB6AAu5xGDddKMGNFMqtE,676
70
- openhands/tools/execute_bash/terminal/factory.py,sha256=64UP9iML5FbUezYyJ-oxO9HPquqWobYlDGdl3t6wu3U,4102
71
- openhands/tools/execute_bash/terminal/interface.py,sha256=a1vemUI2lSj4_YnOYGS3_mVFlRMyodkRc5c9QWRsskY,5006
72
- openhands/tools/execute_bash/terminal/subprocess_terminal.py,sha256=yOZC77MT4N0ScbC9mqx55KiQxr9cWLy2erwp9t8w5Iw,15088
73
- openhands/tools/execute_bash/terminal/terminal_session.py,sha256=XKpG2HzT-FTTrESUupUAsQ8RyHi4EsfUr1GIYUl81MU,19686
74
- openhands/tools/execute_bash/terminal/tmux_terminal.py,sha256=y2znoP7aPzGS25EfGf--qroRWQotQKIpR6DUNlWsFIU,5455
75
- openhands/tools/execute_bash/utils/command.py,sha256=ZT6KMFQNIpMMWGKnG8HAlCJpaB34JcbYYfYBjcLNTQs,5434
76
- openhands/tools/str_replace_editor/__init__.py,sha256=H-RiJ24sDzZRsvqsVEaoFfls7cIsYLXxtvgRl9x2A8k,435
77
- openhands/tools/str_replace_editor/definition.py,sha256=D33k8xGWvgP0HkS4BCvUDlUzxRw5P9ButiOZG6Qe1n0,6533
78
- openhands/tools/str_replace_editor/editor.py,sha256=HcZxTdvvrQ9XoNEyiN4eivJa5-HDwjgAuFXncifz30s,24900
79
- openhands/tools/str_replace_editor/exceptions.py,sha256=OI8EYmhFRfNHjJ2dHeFFWZjnawTO_d_5oSMKoxCD5vo,1291
80
- openhands/tools/str_replace_editor/impl.py,sha256=6cknW6xFw2v6vBhqJQ0k2GS7E7_ZEsw7O8_6lv4b_l8,2164
81
- openhands/tools/str_replace_editor/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- openhands/tools/str_replace_editor/utils/config.py,sha256=jyQg0VADfcy542_TFmZNC50HawfC9JVAtGFrTJ-XXWo,67
83
- openhands/tools/str_replace_editor/utils/constants.py,sha256=pbPyv9W96deSvhOHNcj62L9kYSGRNc6YwG9-IMdQfzM,1013
84
- openhands/tools/str_replace_editor/utils/encoding.py,sha256=blHIFHZGFnATljWi9a2UsLiuJLkAC0yRQaH-W9dCg8g,4766
85
- openhands/tools/str_replace_editor/utils/file_cache.py,sha256=o2NFagk8qXzxzdWN6C85ntgJXjkKEqfn5WFP5ycapRs,5580
86
- openhands/tools/str_replace_editor/utils/history.py,sha256=B4TySznPtTZCN_KRzd47MJhljHC9sg9dBvEe3vym_LQ,4608
87
- openhands/tools/str_replace_editor/utils/shell.py,sha256=lT7n1u-WZOmaV3LlYZ27JzsZS6G8kOwjnVLJFlC1CX0,2131
88
- openhands/tools/task_tracker/__init__.py,sha256=O4pcjdMQFmp1GZ81iX2RLuNIxTFcQsUXyUc1z78oGh4,294
89
- openhands/tools/task_tracker/definition.py,sha256=w_biGtx0J8upgpekkk1zA271GFktkc9u9dl2bNpxVE8,12057
90
- openhands/tools/utils/__init__.py,sha256=1ECwZzIOxNKr8QUV7Sh1GGfrtpVM5TSzAglZUqO-Hzo,24
91
- openhands-0.0.0.dist-info/METADATA,sha256=Xv76mcgpY_Wv-3tql3SKCrS-_weBX5pNKC16h--nw8Q,53
92
- openhands-0.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
93
- openhands-0.0.0.dist-info/top_level.txt,sha256=jHgVu9I0Blam8BXFgedoGKfglPF8XvW1TsJFIjcgP4E,10
94
- openhands-0.0.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- openhands