drydock-cli 3.0.91__tar.gz → 3.0.92__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.91/drydock_cli.egg-info → drydock_cli-3.0.92}/PKG-INFO +5 -2
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/README.md +4 -1
- {drydock_cli-3.0.91 → drydock_cli-3.0.92/drydock_cli.egg-info}/PKG-INFO +5 -2
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock_cli.egg-info/SOURCES.txt +1 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/pyproject.toml +1 -1
- drydock_cli-3.0.92/tests/test_graphify_example.py +36 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/LICENSE +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/NOTICE +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/__init__.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/__main__.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/advisor.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/agent.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/bash_safety.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/builtin_skills/__init__.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/builtin_skills/rmf-categorize.md +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/builtin_skills/rmf-control.md +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/builtin_skills/rmf-poam.md +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/builtin_skills/rmf-review.md +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/builtin_skills/stig-assess.md +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/builtin_skills/stig-remediate.md +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/cci.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/cli.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/compaction.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/config.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/detect.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/extract.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/gittools.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/graphrag.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/guards.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/loop_detect.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/mcp.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/poam.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/providers.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/rmf.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/rmf_graph.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/skills.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/stig.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tool_registry.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tools/__init__.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tui/__init__.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tui/app.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tui/approval.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tui/messages.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tui/widgets.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/tuning.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock/web.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock_cli.egg-info/dependency_links.txt +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock_cli.egg-info/entry_points.txt +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock_cli.egg-info/requires.txt +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/drydock_cli.egg-info/top_level.txt +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/setup.cfg +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_advisor.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_approval.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_back_command.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_bash_background.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_bash_output_bounding.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_bash_process_group.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_bash_safety.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_bash_shell.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_bash_stdin.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_bash_timeout_network.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_cci.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_cli_agents.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_compact_command.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_compaction.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_config.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_config_migration.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_context_limit_config.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_detect.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_dispatch.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_e2e_connected.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_empty_response.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_extract.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_failure_loop.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_first_run_setup.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_gittools.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_graphrag.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_guards_and_tools.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_hallucinated_tools.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_leaked_tool_call.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_loop_detect.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_mcp.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_oneshot_unreachable.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_plan_autocontinue.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_poam.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_providers_unreachable.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_read_index.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_rmf.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_rmf_graph.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_rmf_stig_graph.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_runaway_repetition.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_server_probe.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_skills.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_stig.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_stop.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_streaming_newlines.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_subagent.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_system_prompt_help.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_todo.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_tool_arg_parsing.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_tools_undo.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_tui.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_tuning.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_viewimage.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_vision_input.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/tests/test_web_tools.py +0 -0
- {drydock_cli-3.0.91 → drydock_cli-3.0.92}/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.
|
|
3
|
+
Version: 3.0.92
|
|
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
|
|
@@ -77,7 +77,10 @@ A full agentic CLI harness — every tool below is clean-room and dependency-fre
|
|
|
77
77
|
calls the `Consult` tool for a second opinion when stuck, and you can `/ask
|
|
78
78
|
<question>` directly. Opt-in, user-configured — no extra dependency.
|
|
79
79
|
- **MCP** — connect to Model Context Protocol servers (`~/.drydock/mcp.json`);
|
|
80
|
-
their tools appear as `mcp__<server>__<tool>`. List them with `/mcp`.
|
|
80
|
+
their tools appear as `mcp__<server>__<tool>`. List them with `/mcp`. Works with
|
|
81
|
+
third-party servers out of the box — e.g. [Graphify](https://github.com/safishamsi/graphify)
|
|
82
|
+
for a queryable code knowledge graph: see [docs/graphify.md](docs/graphify.md)
|
|
83
|
+
and the copy-paste [example config](examples/mcp/graphify.json).
|
|
81
84
|
- **Skills** — reusable `/<name>` commands authored as markdown in
|
|
82
85
|
`~/.drydock/skills/` (or `<project>/.drydock/skills/`); `$ARGS` substitution.
|
|
83
86
|
- **Loops** — `/loop <count> <prompt>` runs a prompt iteratively (Esc stops).
|
|
@@ -53,7 +53,10 @@ A full agentic CLI harness — every tool below is clean-room and dependency-fre
|
|
|
53
53
|
calls the `Consult` tool for a second opinion when stuck, and you can `/ask
|
|
54
54
|
<question>` directly. Opt-in, user-configured — no extra dependency.
|
|
55
55
|
- **MCP** — connect to Model Context Protocol servers (`~/.drydock/mcp.json`);
|
|
56
|
-
their tools appear as `mcp__<server>__<tool>`. List them with `/mcp`.
|
|
56
|
+
their tools appear as `mcp__<server>__<tool>`. List them with `/mcp`. Works with
|
|
57
|
+
third-party servers out of the box — e.g. [Graphify](https://github.com/safishamsi/graphify)
|
|
58
|
+
for a queryable code knowledge graph: see [docs/graphify.md](docs/graphify.md)
|
|
59
|
+
and the copy-paste [example config](examples/mcp/graphify.json).
|
|
57
60
|
- **Skills** — reusable `/<name>` commands authored as markdown in
|
|
58
61
|
`~/.drydock/skills/` (or `<project>/.drydock/skills/`); `$ARGS` substitution.
|
|
59
62
|
- **Loops** — `/loop <count> <prompt>` runs a prompt iteratively (Esc stops).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.92
|
|
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
|
|
@@ -77,7 +77,10 @@ A full agentic CLI harness — every tool below is clean-room and dependency-fre
|
|
|
77
77
|
calls the `Consult` tool for a second opinion when stuck, and you can `/ask
|
|
78
78
|
<question>` directly. Opt-in, user-configured — no extra dependency.
|
|
79
79
|
- **MCP** — connect to Model Context Protocol servers (`~/.drydock/mcp.json`);
|
|
80
|
-
their tools appear as `mcp__<server>__<tool>`. List them with `/mcp`.
|
|
80
|
+
their tools appear as `mcp__<server>__<tool>`. List them with `/mcp`. Works with
|
|
81
|
+
third-party servers out of the box — e.g. [Graphify](https://github.com/safishamsi/graphify)
|
|
82
|
+
for a queryable code knowledge graph: see [docs/graphify.md](docs/graphify.md)
|
|
83
|
+
and the copy-paste [example config](examples/mcp/graphify.json).
|
|
81
84
|
- **Skills** — reusable `/<name>` commands authored as markdown in
|
|
82
85
|
`~/.drydock/skills/` (or `<project>/.drydock/skills/`); `$ARGS` substitution.
|
|
83
86
|
- **Loops** — `/loop <count> <prompt>` runs a prompt iteratively (Esc stops).
|
|
@@ -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.92"
|
|
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"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""The bundled Graphify MCP example (docs/graphify.md + examples/mcp/graphify.json)
|
|
2
|
+
must stay valid + in the shape drydock's MCP loader expects, so the copy-paste
|
|
3
|
+
recipe never rots."""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
_ROOT = Path(__file__).resolve().parent.parent
|
|
10
|
+
_EXAMPLE = _ROOT / "examples" / "mcp" / "graphify.json"
|
|
11
|
+
_DOC = _ROOT / "docs" / "graphify.md"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_example_is_valid_json_with_mcpservers_shape():
|
|
15
|
+
cfg = json.loads(_EXAMPLE.read_text())
|
|
16
|
+
assert "mcpServers" in cfg and "graphify" in cfg["mcpServers"]
|
|
17
|
+
srv = cfg["mcpServers"]["graphify"]
|
|
18
|
+
assert srv["command"] == "graphify-mcp"
|
|
19
|
+
assert "--transport" in srv["args"] and "stdio" in srv["args"]
|
|
20
|
+
# the same shape drydock/mcp.py consumes: command + args list
|
|
21
|
+
assert isinstance(srv["args"], list)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_example_matches_drydock_mcp_loader_shape():
|
|
25
|
+
"""Instantiating an MCPServer from the example must not raise (parses the
|
|
26
|
+
command/args the way connect_all does), without starting it."""
|
|
27
|
+
from drydock.mcp import MCPServer
|
|
28
|
+
cfg = json.loads(_EXAMPLE.read_text())["mcpServers"]["graphify"]
|
|
29
|
+
srv = MCPServer("graphify", cfg["command"], cfg["args"], cfg.get("env"))
|
|
30
|
+
assert srv.command == "graphify-mcp" and srv.args[0] == "--transport"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_doc_exists_and_links_example():
|
|
34
|
+
text = _DOC.read_text()
|
|
35
|
+
assert "graphify-mcp" in text and "OPENAI_BASE_URL" in text
|
|
36
|
+
assert "examples/mcp/graphify.json" in text
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|