drydock-cli 3.0.110__tar.gz → 3.0.111__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 (121) hide show
  1. {drydock_cli-3.0.110/drydock_cli.egg-info → drydock_cli-3.0.111}/PKG-INFO +1 -1
  2. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/cli.py +2 -1
  3. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tools/__init__.py +14 -0
  4. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tui/app.py +2 -1
  5. {drydock_cli-3.0.110 → drydock_cli-3.0.111/drydock_cli.egg-info}/PKG-INFO +1 -1
  6. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/pyproject.toml +1 -1
  7. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_windows_shell.py +8 -0
  8. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/LICENSE +0 -0
  9. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/NOTICE +0 -0
  10. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/README.md +0 -0
  11. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/__init__.py +0 -0
  12. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/__main__.py +0 -0
  13. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/advisor.py +0 -0
  14. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/agent.py +0 -0
  15. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/bash_safety.py +0 -0
  16. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/builtin_skills/__init__.py +0 -0
  17. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/builtin_skills/rmf-categorize.md +0 -0
  18. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/builtin_skills/rmf-control.md +0 -0
  19. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/builtin_skills/rmf-poam.md +0 -0
  20. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/builtin_skills/rmf-review.md +0 -0
  21. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/builtin_skills/stig-assess.md +0 -0
  22. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/builtin_skills/stig-remediate.md +0 -0
  23. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/cci.py +0 -0
  24. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/compaction.py +0 -0
  25. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/config.py +0 -0
  26. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/detect.py +0 -0
  27. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/extract.py +0 -0
  28. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/gittools.py +0 -0
  29. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/graphrag.py +0 -0
  30. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/guards.py +0 -0
  31. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/loop_detect.py +0 -0
  32. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/mcp.py +0 -0
  33. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/poam.py +0 -0
  34. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/providers.py +0 -0
  35. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/rmf.py +0 -0
  36. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/rmf_graph.py +0 -0
  37. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/skills.py +0 -0
  38. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/stig.py +0 -0
  39. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tool_registry.py +0 -0
  40. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tui/__init__.py +0 -0
  41. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tui/approval.py +0 -0
  42. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tui/messages.py +0 -0
  43. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tui/widgets.py +0 -0
  44. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/tuning.py +0 -0
  45. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock/web.py +0 -0
  46. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock_cli.egg-info/SOURCES.txt +0 -0
  47. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock_cli.egg-info/dependency_links.txt +0 -0
  48. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock_cli.egg-info/entry_points.txt +0 -0
  49. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock_cli.egg-info/requires.txt +0 -0
  50. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/drydock_cli.egg-info/top_level.txt +0 -0
  51. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/setup.cfg +0 -0
  52. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_advisor.py +0 -0
  53. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_approval.py +0 -0
  54. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_back_command.py +0 -0
  55. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_background.py +0 -0
  56. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_binary_output.py +0 -0
  57. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_crossplatform.py +0 -0
  58. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_output_bounding.py +0 -0
  59. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_process_group.py +0 -0
  60. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_safety.py +0 -0
  61. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_sanitize.py +0 -0
  62. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_shell.py +0 -0
  63. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_stdin.py +0 -0
  64. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_stop_partial.py +0 -0
  65. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_timeout_network.py +0 -0
  66. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_bash_timeout_param.py +0 -0
  67. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_cci.py +0 -0
  68. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_cli_agents.py +0 -0
  69. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_compact_command.py +0 -0
  70. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_compaction.py +0 -0
  71. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_config.py +0 -0
  72. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_config_migration.py +0 -0
  73. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_context_limit_config.py +0 -0
  74. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_detect.py +0 -0
  75. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_dispatch.py +0 -0
  76. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_e2e_connected.py +0 -0
  77. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_edit_replace_all.py +0 -0
  78. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_empty_response.py +0 -0
  79. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_extract.py +0 -0
  80. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_failure_loop.py +0 -0
  81. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_first_run_setup.py +0 -0
  82. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_gittools.py +0 -0
  83. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_glob_edit_edges.py +0 -0
  84. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_graphify_example.py +0 -0
  85. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_graphrag.py +0 -0
  86. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_grep_and_read_robust.py +0 -0
  87. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_guards_and_tools.py +0 -0
  88. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_hallucinated_tools.py +0 -0
  89. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_leaked_tool_call.py +0 -0
  90. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_loop_detect.py +0 -0
  91. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_mcp.py +0 -0
  92. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_oneshot_unreachable.py +0 -0
  93. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_overthink_interrupt.py +0 -0
  94. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_plan_autocontinue.py +0 -0
  95. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_poam.py +0 -0
  96. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_providers_unreachable.py +0 -0
  97. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_read_index.py +0 -0
  98. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_rmf.py +0 -0
  99. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_rmf_graph.py +0 -0
  100. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_rmf_stig_graph.py +0 -0
  101. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_runaway_repetition.py +0 -0
  102. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_server_probe.py +0 -0
  103. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_skills.py +0 -0
  104. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_stall_retry.py +0 -0
  105. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_stig.py +0 -0
  106. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_stop.py +0 -0
  107. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_streaming_newlines.py +0 -0
  108. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_subagent.py +0 -0
  109. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_system_prompt_help.py +0 -0
  110. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_todo.py +0 -0
  111. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_tool_arg_coercion.py +0 -0
  112. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_tool_arg_coercion_more.py +0 -0
  113. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_tool_arg_parsing.py +0 -0
  114. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_tools_undo.py +0 -0
  115. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_tui.py +0 -0
  116. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_tuning.py +0 -0
  117. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_viewimage.py +0 -0
  118. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_vision_input.py +0 -0
  119. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_web_tools.py +0 -0
  120. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/tests/test_write_content_coerce.py +0 -0
  121. {drydock_cli-3.0.110 → drydock_cli-3.0.111}/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.110
3
+ Version: 3.0.111
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
@@ -130,7 +130,8 @@ def run_oneshot(prompt: str, config: dict) -> None:
130
130
  # under -p) shows WHAT each tool did, not just its name. Without
131
131
  # this, a timed-out run is an opaque wall of "[Bash]" with no way
132
132
  # to tell a genuine 100-command exploration from a tight loop.
133
- print(f" [{event.name}] {_summarize(event.inputs)}",
133
+ from drydock.tools import tool_display_name
134
+ print(f" [{tool_display_name(event.name)}] {_summarize(event.inputs)}",
134
135
  file=sys.stderr, flush=True)
135
136
  elif isinstance(event, ToolEnd):
136
137
  # One-line outcome so failures/repeats are visible in the trace.
@@ -145,6 +145,20 @@ _SHELL_KIND, _SHELL_PATH = _detect_shell()
145
145
  _BASH_SHELL = _detect_bash()
146
146
 
147
147
 
148
+ def shell_display_name() -> str:
149
+ """Human label for the shell the Bash tool actually runs commands in — so the
150
+ TUI can show 'PowerShell'/'cmd' on Windows instead of the schema name 'Bash'."""
151
+ return {"powershell": "PowerShell", "cmd": "cmd",
152
+ "bash": "Bash", "sh": "sh"}.get(_SHELL_KIND, "Bash")
153
+
154
+
155
+ def tool_display_name(name: str) -> str:
156
+ """Map a tool's schema name to its display label. The `Bash` tool (the name
157
+ the model calls) is shown as the actual shell — so on Windows a user sees
158
+ 'PowerShell', not 'Bash'."""
159
+ return shell_display_name() if name == "Bash" else name
160
+
161
+
148
162
  # ANSI escape sequences (CSI colour/cursor, OSC title, and lone two-char escapes).
149
163
  # Some tools emit these even to a pipe (--color=always, forced-colour test runners),
150
164
  # and they're pure display control — noise that wastes the model's tokens.
@@ -1214,7 +1214,8 @@ class DrydockApp(App):
1214
1214
  self._render_todo(m.inputs.get("tasks", ""))
1215
1215
  self._last_card = None # tool_end is a no-op for the checklist
1216
1216
  return
1217
- card = ToolCard(m.name, summarize_inputs(m.inputs))
1217
+ from drydock.tools import tool_display_name
1218
+ card = ToolCard(tool_display_name(m.name), summarize_inputs(m.inputs))
1218
1219
  self._last_card = card
1219
1220
  self._mount(card)
1220
1221
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drydock-cli
3
- Version: 3.0.110
3
+ Version: 3.0.111
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.110"
10
+ version = "3.0.111"
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"
@@ -92,3 +92,11 @@ def test_is_windows_detection_signals():
92
92
  # real Linux / WSL (no Windows env)
93
93
  assert not _is_windows_env("posix", "linux", {})
94
94
  assert not _is_windows_env("posix", "linux", {"HOME": "/home/x"})
95
+
96
+
97
+ def test_tool_display_name_maps_bash_to_shell():
98
+ from unittest import mock
99
+ for kind, expect in [("powershell", "PowerShell"), ("cmd", "cmd"), ("bash", "Bash"), ("sh", "sh")]:
100
+ with mock.patch.object(T, "_SHELL_KIND", kind):
101
+ assert T.tool_display_name("Bash") == expect
102
+ assert T.tool_display_name("Read") == "Read" # other tools unchanged
File without changes
File without changes
File without changes
File without changes