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.
Files changed (103) hide show
  1. {drydock_cli-3.0.83/drydock_cli.egg-info → drydock_cli-3.0.84}/PKG-INFO +1 -1
  2. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/advisor.py +9 -1
  3. {drydock_cli-3.0.83 → drydock_cli-3.0.84/drydock_cli.egg-info}/PKG-INFO +1 -1
  4. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/pyproject.toml +1 -1
  5. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_advisor.py +7 -0
  6. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/LICENSE +0 -0
  7. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/NOTICE +0 -0
  8. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/README.md +0 -0
  9. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/__init__.py +0 -0
  10. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/__main__.py +0 -0
  11. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/agent.py +0 -0
  12. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/bash_safety.py +0 -0
  13. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/__init__.py +0 -0
  14. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-categorize.md +0 -0
  15. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-control.md +0 -0
  16. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-poam.md +0 -0
  17. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/rmf-review.md +0 -0
  18. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/stig-assess.md +0 -0
  19. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/builtin_skills/stig-remediate.md +0 -0
  20. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/cci.py +0 -0
  21. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/cli.py +0 -0
  22. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/compaction.py +0 -0
  23. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/config.py +0 -0
  24. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/detect.py +0 -0
  25. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/extract.py +0 -0
  26. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/gittools.py +0 -0
  27. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/graphrag.py +0 -0
  28. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/guards.py +0 -0
  29. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/loop_detect.py +0 -0
  30. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/mcp.py +0 -0
  31. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/poam.py +0 -0
  32. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/providers.py +0 -0
  33. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/rmf.py +0 -0
  34. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/rmf_graph.py +0 -0
  35. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/skills.py +0 -0
  36. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/stig.py +0 -0
  37. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tool_registry.py +0 -0
  38. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tools/__init__.py +0 -0
  39. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/__init__.py +0 -0
  40. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/app.py +0 -0
  41. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/approval.py +0 -0
  42. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/messages.py +0 -0
  43. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tui/widgets.py +0 -0
  44. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/tuning.py +0 -0
  45. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock/web.py +0 -0
  46. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/SOURCES.txt +0 -0
  47. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/dependency_links.txt +0 -0
  48. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/entry_points.txt +0 -0
  49. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/requires.txt +0 -0
  50. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/drydock_cli.egg-info/top_level.txt +0 -0
  51. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/setup.cfg +0 -0
  52. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_approval.py +0 -0
  53. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_back_command.py +0 -0
  54. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_output_bounding.py +0 -0
  55. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_process_group.py +0 -0
  56. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_safety.py +0 -0
  57. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_bash_timeout_network.py +0 -0
  58. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_cci.py +0 -0
  59. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_cli_agents.py +0 -0
  60. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_compact_command.py +0 -0
  61. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_compaction.py +0 -0
  62. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_config.py +0 -0
  63. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_config_migration.py +0 -0
  64. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_context_limit_config.py +0 -0
  65. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_detect.py +0 -0
  66. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_dispatch.py +0 -0
  67. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_e2e_connected.py +0 -0
  68. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_empty_response.py +0 -0
  69. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_extract.py +0 -0
  70. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_failure_loop.py +0 -0
  71. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_first_run_setup.py +0 -0
  72. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_gittools.py +0 -0
  73. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_graphrag.py +0 -0
  74. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_guards_and_tools.py +0 -0
  75. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_hallucinated_tools.py +0 -0
  76. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_leaked_tool_call.py +0 -0
  77. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_loop_detect.py +0 -0
  78. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_mcp.py +0 -0
  79. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_oneshot_unreachable.py +0 -0
  80. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_plan_autocontinue.py +0 -0
  81. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_poam.py +0 -0
  82. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_providers_unreachable.py +0 -0
  83. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_read_index.py +0 -0
  84. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_rmf.py +0 -0
  85. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_rmf_graph.py +0 -0
  86. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_rmf_stig_graph.py +0 -0
  87. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_runaway_repetition.py +0 -0
  88. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_server_probe.py +0 -0
  89. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_skills.py +0 -0
  90. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_stig.py +0 -0
  91. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_stop.py +0 -0
  92. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_streaming_newlines.py +0 -0
  93. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_subagent.py +0 -0
  94. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_system_prompt_help.py +0 -0
  95. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_todo.py +0 -0
  96. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tool_arg_parsing.py +0 -0
  97. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tools_undo.py +0 -0
  98. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tui.py +0 -0
  99. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_tuning.py +0 -0
  100. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_viewimage.py +0 -0
  101. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_vision_input.py +0 -0
  102. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_web_tools.py +0 -0
  103. {drydock_cli-3.0.83 → drydock_cli-3.0.84}/tests/test_xccdf.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 3.0.83
3
+ Version: 3.0.84
4
4
  Summary: Drydock — a local, provider-agnostic terminal coding agent for local LLMs
5
5
  Author: Frank Bobe III
6
6
  License-Expression: Apache-2.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
- reply = _call("Reply with exactly: OK", config, timeout=30.0, max_tokens=8)
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 3.0.83
3
+ Version: 3.0.84
4
4
  Summary: Drydock — a local, provider-agnostic terminal coding agent for local LLMs
5
5
  Author: Frank Bobe III
6
6
  License-Expression: Apache-2.0
@@ -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.83"
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