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.
- openhands-1.0.1.dist-info/METADATA +52 -0
- openhands-1.0.1.dist-info/RECORD +31 -0
- {openhands-0.0.0.dist-info → openhands-1.0.1.dist-info}/WHEEL +1 -2
- openhands-1.0.1.dist-info/entry_points.txt +2 -0
- openhands_cli/__init__.py +8 -0
- openhands_cli/agent_chat.py +186 -0
- openhands_cli/argparsers/main_parser.py +56 -0
- openhands_cli/argparsers/serve_parser.py +31 -0
- openhands_cli/gui_launcher.py +220 -0
- openhands_cli/listeners/__init__.py +4 -0
- openhands_cli/listeners/loading_listener.py +63 -0
- openhands_cli/listeners/pause_listener.py +83 -0
- openhands_cli/llm_utils.py +57 -0
- openhands_cli/locations.py +13 -0
- openhands_cli/pt_style.py +30 -0
- openhands_cli/runner.py +178 -0
- openhands_cli/setup.py +116 -0
- openhands_cli/simple_main.py +59 -0
- openhands_cli/tui/__init__.py +5 -0
- openhands_cli/tui/settings/mcp_screen.py +217 -0
- openhands_cli/tui/settings/settings_screen.py +202 -0
- openhands_cli/tui/settings/store.py +93 -0
- openhands_cli/tui/status.py +109 -0
- openhands_cli/tui/tui.py +100 -0
- openhands_cli/tui/utils.py +14 -0
- openhands_cli/user_actions/__init__.py +17 -0
- openhands_cli/user_actions/agent_action.py +95 -0
- openhands_cli/user_actions/exit_session.py +18 -0
- openhands_cli/user_actions/settings_action.py +171 -0
- openhands_cli/user_actions/types.py +18 -0
- openhands_cli/user_actions/utils.py +199 -0
- openhands/__init__.py +0 -1
- openhands/sdk/__init__.py +0 -45
- openhands/sdk/agent/__init__.py +0 -8
- openhands/sdk/agent/agent/__init__.py +0 -6
- openhands/sdk/agent/agent/agent.py +0 -349
- openhands/sdk/agent/base.py +0 -103
- openhands/sdk/context/__init__.py +0 -28
- openhands/sdk/context/agent_context.py +0 -153
- openhands/sdk/context/condenser/__init__.py +0 -5
- openhands/sdk/context/condenser/condenser.py +0 -73
- openhands/sdk/context/condenser/no_op_condenser.py +0 -13
- openhands/sdk/context/manager.py +0 -5
- openhands/sdk/context/microagents/__init__.py +0 -26
- openhands/sdk/context/microagents/exceptions.py +0 -11
- openhands/sdk/context/microagents/microagent.py +0 -345
- openhands/sdk/context/microagents/types.py +0 -70
- openhands/sdk/context/utils/__init__.py +0 -8
- openhands/sdk/context/utils/prompt.py +0 -52
- openhands/sdk/context/view.py +0 -116
- openhands/sdk/conversation/__init__.py +0 -12
- openhands/sdk/conversation/conversation.py +0 -207
- openhands/sdk/conversation/state.py +0 -50
- openhands/sdk/conversation/types.py +0 -6
- openhands/sdk/conversation/visualizer.py +0 -300
- openhands/sdk/event/__init__.py +0 -27
- openhands/sdk/event/base.py +0 -148
- openhands/sdk/event/condenser.py +0 -49
- openhands/sdk/event/llm_convertible.py +0 -265
- openhands/sdk/event/types.py +0 -5
- openhands/sdk/event/user_action.py +0 -12
- openhands/sdk/event/utils.py +0 -30
- openhands/sdk/llm/__init__.py +0 -19
- openhands/sdk/llm/exceptions.py +0 -108
- openhands/sdk/llm/llm.py +0 -867
- openhands/sdk/llm/llm_registry.py +0 -116
- openhands/sdk/llm/message.py +0 -216
- openhands/sdk/llm/metadata.py +0 -34
- openhands/sdk/llm/utils/fn_call_converter.py +0 -1049
- openhands/sdk/llm/utils/metrics.py +0 -311
- openhands/sdk/llm/utils/model_features.py +0 -153
- openhands/sdk/llm/utils/retry_mixin.py +0 -122
- openhands/sdk/llm/utils/telemetry.py +0 -252
- openhands/sdk/logger.py +0 -167
- openhands/sdk/mcp/__init__.py +0 -20
- openhands/sdk/mcp/client.py +0 -113
- openhands/sdk/mcp/definition.py +0 -69
- openhands/sdk/mcp/tool.py +0 -104
- openhands/sdk/mcp/utils.py +0 -59
- openhands/sdk/tests/llm/test_llm.py +0 -447
- openhands/sdk/tests/llm/test_llm_fncall_converter.py +0 -691
- openhands/sdk/tests/llm/test_model_features.py +0 -221
- openhands/sdk/tool/__init__.py +0 -30
- openhands/sdk/tool/builtins/__init__.py +0 -34
- openhands/sdk/tool/builtins/finish.py +0 -57
- openhands/sdk/tool/builtins/think.py +0 -60
- openhands/sdk/tool/schema.py +0 -236
- openhands/sdk/tool/security_prompt.py +0 -5
- openhands/sdk/tool/tool.py +0 -142
- openhands/sdk/utils/__init__.py +0 -14
- openhands/sdk/utils/discriminated_union.py +0 -210
- openhands/sdk/utils/json.py +0 -48
- openhands/sdk/utils/truncate.py +0 -44
- openhands/tools/__init__.py +0 -44
- openhands/tools/execute_bash/__init__.py +0 -30
- openhands/tools/execute_bash/constants.py +0 -31
- openhands/tools/execute_bash/definition.py +0 -166
- openhands/tools/execute_bash/impl.py +0 -38
- openhands/tools/execute_bash/metadata.py +0 -101
- openhands/tools/execute_bash/terminal/__init__.py +0 -22
- openhands/tools/execute_bash/terminal/factory.py +0 -113
- openhands/tools/execute_bash/terminal/interface.py +0 -189
- openhands/tools/execute_bash/terminal/subprocess_terminal.py +0 -412
- openhands/tools/execute_bash/terminal/terminal_session.py +0 -492
- openhands/tools/execute_bash/terminal/tmux_terminal.py +0 -160
- openhands/tools/execute_bash/utils/command.py +0 -150
- openhands/tools/str_replace_editor/__init__.py +0 -17
- openhands/tools/str_replace_editor/definition.py +0 -158
- openhands/tools/str_replace_editor/editor.py +0 -683
- openhands/tools/str_replace_editor/exceptions.py +0 -41
- openhands/tools/str_replace_editor/impl.py +0 -66
- openhands/tools/str_replace_editor/utils/__init__.py +0 -0
- openhands/tools/str_replace_editor/utils/config.py +0 -2
- openhands/tools/str_replace_editor/utils/constants.py +0 -9
- openhands/tools/str_replace_editor/utils/encoding.py +0 -135
- openhands/tools/str_replace_editor/utils/file_cache.py +0 -154
- openhands/tools/str_replace_editor/utils/history.py +0 -122
- openhands/tools/str_replace_editor/utils/shell.py +0 -72
- openhands/tools/task_tracker/__init__.py +0 -16
- openhands/tools/task_tracker/definition.py +0 -336
- openhands/tools/utils/__init__.py +0 -1
- openhands-0.0.0.dist-info/METADATA +0 -3
- openhands-0.0.0.dist-info/RECORD +0 -94
- 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."""
|
openhands-0.0.0.dist-info/RECORD
DELETED
|
@@ -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
|