drydock-cli 3.0.79__tar.gz → 3.0.80__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.79/drydock_cli.egg-info → drydock_cli-3.0.80}/PKG-INFO +1 -1
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tools/__init__.py +4 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80/drydock_cli.egg-info}/PKG-INFO +1 -1
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/pyproject.toml +1 -1
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_viewimage.py +10 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/LICENSE +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/NOTICE +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/README.md +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/__init__.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/__main__.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/agent.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/bash_safety.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/builtin_skills/__init__.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/builtin_skills/rmf-categorize.md +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/builtin_skills/rmf-control.md +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/builtin_skills/rmf-poam.md +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/builtin_skills/rmf-review.md +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/builtin_skills/stig-assess.md +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/builtin_skills/stig-remediate.md +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/cci.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/cli.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/compaction.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/config.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/detect.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/extract.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/gittools.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/graphrag.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/guards.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/loop_detect.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/mcp.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/poam.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/providers.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/rmf.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/rmf_graph.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/skills.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/stig.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tool_registry.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tui/__init__.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tui/app.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tui/approval.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tui/messages.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tui/widgets.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/tuning.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock/web.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock_cli.egg-info/SOURCES.txt +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock_cli.egg-info/dependency_links.txt +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock_cli.egg-info/entry_points.txt +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock_cli.egg-info/requires.txt +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/drydock_cli.egg-info/top_level.txt +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/setup.cfg +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_approval.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_back_command.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_bash_output_bounding.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_bash_process_group.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_bash_safety.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_bash_timeout_network.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_cci.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_cli_agents.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_compact_command.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_compaction.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_config.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_config_migration.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_context_limit_config.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_detect.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_dispatch.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_e2e_connected.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_empty_response.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_extract.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_failure_loop.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_first_run_setup.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_gittools.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_graphrag.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_guards_and_tools.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_hallucinated_tools.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_leaked_tool_call.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_loop_detect.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_mcp.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_oneshot_unreachable.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_plan_autocontinue.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_poam.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_providers_unreachable.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_read_index.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_rmf.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_rmf_graph.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_rmf_stig_graph.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_runaway_repetition.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_server_probe.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_skills.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_stig.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_stop.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_streaming_newlines.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_subagent.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_system_prompt_help.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_todo.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_tool_arg_parsing.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_tools_undo.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_tui.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_tuning.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_vision_input.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_web_tools.py +0 -0
- {drydock_cli-3.0.79 → drydock_cli-3.0.80}/tests/test_xccdf.py +0 -0
|
@@ -514,6 +514,10 @@ def tool_viewimage(params: dict, config: dict) -> str:
|
|
|
514
514
|
|
|
515
515
|
def tool_read(params: dict, config: dict) -> str:
|
|
516
516
|
fp = _resolve_path(params["file_path"], config)
|
|
517
|
+
# Reading an image as text yields binary garbage — point at the vision tool.
|
|
518
|
+
if os.path.splitext(fp)[1].lower() in _IMAGE_EXTS and os.path.isfile(fp):
|
|
519
|
+
return (f"{params['file_path']} is an image — Read would return binary "
|
|
520
|
+
"garbage. Use the ViewImage tool to actually SEE it.")
|
|
517
521
|
limit = params.get("limit") # None = caller didn't specify a window
|
|
518
522
|
offset = params.get("offset", 0)
|
|
519
523
|
try:
|
|
@@ -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.80"
|
|
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"
|
|
@@ -56,3 +56,13 @@ def test_non_viewimage_tool_with_png_path_stays_text(tmp_path):
|
|
|
56
56
|
out = messages_to_openai([{"role": "tool", "tool_call_id": "c2",
|
|
57
57
|
"name": "Grep", "content": f"found {img} in code"}], "sys")
|
|
58
58
|
assert isinstance(out[-1]["content"], str) # no accidental image ballooning
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_read_on_image_points_to_viewimage(tmp_path):
|
|
62
|
+
img = _png(tmp_path / "pic.png")
|
|
63
|
+
out = reg.execute("Read", {"file_path": img}, {"cwd": str(tmp_path)})
|
|
64
|
+
assert "ViewImage" in out and "image" in out.lower()
|
|
65
|
+
# a normal text file still reads normally
|
|
66
|
+
(tmp_path / "f.txt").write_text("hello\nworld\n")
|
|
67
|
+
txt = reg.execute("Read", {"file_path": str(tmp_path / "f.txt")}, {"cwd": str(tmp_path)})
|
|
68
|
+
assert "hello" in txt and "ViewImage" not in txt
|
|
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
|