drydock-cli 3.0.22__tar.gz → 3.0.23__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.
- {drydock_cli-3.0.22/drydock_cli.egg-info → drydock_cli-3.0.23}/PKG-INFO +1 -1
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/__init__.py +1 -1
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tools/__init__.py +6 -1
- {drydock_cli-3.0.22 → drydock_cli-3.0.23/drydock_cli.egg-info}/PKG-INFO +1 -1
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/pyproject.toml +1 -1
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_guards_and_tools.py +9 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/LICENSE +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/NOTICE +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/README.md +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/__main__.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/agent.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/bash_safety.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/cli.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/compaction.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/config.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/detect.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/guards.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/loop_detect.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/providers.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tool_registry.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tui/__init__.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tui/app.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tui/approval.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tui/messages.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tui/widgets.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock/tuning.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock_cli.egg-info/SOURCES.txt +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock_cli.egg-info/dependency_links.txt +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock_cli.egg-info/entry_points.txt +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock_cli.egg-info/requires.txt +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/drydock_cli.egg-info/top_level.txt +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/setup.cfg +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_approval.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_back_command.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_bash_safety.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_cli_agents.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_compaction.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_config.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_detect.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_hallucinated_tools.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_leaked_tool_call.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_loop_detect.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_plan_autocontinue.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_providers_unreachable.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_stop.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_subagent.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_todo.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_tools_undo.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_tui.py +0 -0
- {drydock_cli-3.0.22 → drydock_cli-3.0.23}/tests/test_tuning.py +0 -0
|
@@ -460,7 +460,12 @@ def tool_bash(params: dict, config: dict) -> str:
|
|
|
460
460
|
output += f"\n[exit code: {result.returncode}]"
|
|
461
461
|
return output.strip() or "(no output)"
|
|
462
462
|
except subprocess.TimeoutExpired:
|
|
463
|
-
|
|
463
|
+
bigger = min(timeout * 4, 600)
|
|
464
|
+
return (
|
|
465
|
+
f"Error: command timed out after {timeout}s. If it is legitimately "
|
|
466
|
+
f"slow (a big query, build, download, or test run), retry with a "
|
|
467
|
+
f"larger timeout — pass timeout: {bigger}. Otherwise it may be hung."
|
|
468
|
+
)
|
|
464
469
|
except Exception as e:
|
|
465
470
|
return f"Error: {e}"
|
|
466
471
|
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
# PyPI distribution name is drydock-cli (the established install name, continued
|
|
8
8
|
# from the retired v2 fork); the import package + CLI command stay `drydock`.
|
|
9
9
|
name = "drydock-cli"
|
|
10
|
-
version = "3.0.
|
|
10
|
+
version = "3.0.23"
|
|
11
11
|
description = "Drydock — a local, provider-agnostic terminal coding agent for local LLMs"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.12"
|
|
@@ -313,6 +313,15 @@ def test_file_tools_honor_config_cwd(tmp_path):
|
|
|
313
313
|
assert "x.py" in tool_bash({"command": "ls sub"}, cfg)
|
|
314
314
|
|
|
315
315
|
|
|
316
|
+
def test_tool_bash_timeout_suggests_larger_timeout():
|
|
317
|
+
from drydock.tools import tool_bash
|
|
318
|
+
out = tool_bash({"command": "sleep 2", "timeout": 1}, {})
|
|
319
|
+
assert "timed out after 1s" in out
|
|
320
|
+
# Must tell the model it can retry with a bigger timeout (so a legitimately
|
|
321
|
+
# slow query/build doesn't dead-end — what derailed query-optimize).
|
|
322
|
+
assert "timeout: 4" in out
|
|
323
|
+
|
|
324
|
+
|
|
316
325
|
def test_absolute_paths_pass_through(tmp_path):
|
|
317
326
|
fp = str(tmp_path / "abs.py")
|
|
318
327
|
tool_write({"file_path": fp, "content": "a=1\n"}, {"cwd": "/nonexistent"})
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|