drydock-cli 3.0.83__tar.gz → 3.0.84__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.83/drydock_cli.egg-info → drydock_cli-3.0.84}/PKG-INFO +1 -1
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/advisor.py +9 -1
- {drydock_cli-3.0.83 → drydock_cli-3.0.84/drydock_cli.egg-info}/PKG-INFO +1 -1
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/pyproject.toml +1 -1
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_advisor.py +7 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/LICENSE +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/NOTICE +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/README.md +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/__init__.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/__main__.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/agent.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/bash_safety.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/__init__.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-categorize.md +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-control.md +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-poam.md +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-review.md +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/stig-assess.md +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/stig-remediate.md +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/cci.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/cli.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/compaction.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/config.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/detect.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/extract.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/gittools.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/graphrag.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/guards.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/loop_detect.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/mcp.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/poam.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/providers.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/rmf.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/rmf_graph.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/skills.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/stig.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tool_registry.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tools/__init__.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/__init__.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/app.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/approval.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/messages.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/widgets.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tuning.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/web.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/SOURCES.txt +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/dependency_links.txt +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/entry_points.txt +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/requires.txt +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/top_level.txt +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/setup.cfg +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_approval.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_back_command.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_output_bounding.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_process_group.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_safety.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_timeout_network.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_cci.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_cli_agents.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_compact_command.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_compaction.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_config.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_config_migration.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_context_limit_config.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_detect.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_dispatch.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_e2e_connected.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_empty_response.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_extract.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_failure_loop.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_first_run_setup.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_gittools.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_graphrag.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_guards_and_tools.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_hallucinated_tools.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_leaked_tool_call.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_loop_detect.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_mcp.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_oneshot_unreachable.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_plan_autocontinue.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_poam.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_providers_unreachable.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_read_index.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_rmf.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_rmf_graph.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_rmf_stig_graph.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_runaway_repetition.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_server_probe.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_skills.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_stig.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_stop.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_streaming_newlines.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_subagent.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_system_prompt_help.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_todo.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tool_arg_parsing.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tools_undo.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tui.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tuning.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_viewimage.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_vision_input.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_web_tools.py +0 -0
- {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_xccdf.py +0 -0
|
@@ -91,8 +91,16 @@ def test_connection(config: dict) -> str:
|
|
|
91
91
|
base = config.get("advisor_base_url")
|
|
92
92
|
t0 = time.monotonic()
|
|
93
93
|
try:
|
|
94
|
-
|
|
94
|
+
# Generous read timeout: a slow/cold LOCAL model can take a while to
|
|
95
|
+
# return even a few tokens. A truly-down endpoint fails fast on the 10s
|
|
96
|
+
# connect timeout, so this only waits on a reachable-but-slow server.
|
|
97
|
+
reply = _call("Reply with exactly: OK", config, timeout=90.0, max_tokens=8)
|
|
95
98
|
except Exception as e: # noqa: BLE001
|
|
99
|
+
emsg = str(e).lower()
|
|
100
|
+
if "timeout" in emsg or "timed out" in emsg:
|
|
101
|
+
return (f"✗ advisor timed out (>90s) — {model} at {base} is REACHABLE but slow "
|
|
102
|
+
"to respond (a cold or loaded local model?). `/ask` allows much longer, "
|
|
103
|
+
"so it may still work; or give the server a moment and retry.")
|
|
96
104
|
return (f"✗ advisor unreachable — {model} at {base}\n {e}\n"
|
|
97
105
|
" Check the endpoint is up, the URL ends in /v1, and the key/model are right.")
|
|
98
106
|
dt = time.monotonic() - t0
|
|
@@ -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.84"
|
|
11
11
|
description = "Drydock — a local, provider-agnostic terminal coding agent for local LLMs"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.11"
|
|
@@ -81,3 +81,10 @@ def test_test_connection_failure(monkeypatch):
|
|
|
81
81
|
|
|
82
82
|
def test_test_connection_unconfigured():
|
|
83
83
|
assert "No advisor" in advisor.test_connection({})
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_test_connection_timeout_says_reachable_but_slow(monkeypatch):
|
|
87
|
+
def slow(*a, **k): raise TimeoutError("Request timed out.")
|
|
88
|
+
monkeypatch.setattr(advisor, "_call", slow)
|
|
89
|
+
out = advisor.test_connection({"advisor_base_url": "http://b/v1", "advisor_model": "m"})
|
|
90
|
+
assert out.startswith("✗") and "REACHABLE but slow" in out and "/ask" in out
|
|
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
|
|
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
|
|
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
|