headroom/tests/test_mcp_registry_grok.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

32 lines
1 KiB
Python
Raw Normal View History

feat(wrap): add first-class Grok CLI support (#1823) ## Description Adds first-class Grok CLI integration so Headroom can wrap, compress, and learn from Grok sessions the same way it does for Claude Code and Codex. Grok routes inference through `GROK_CLI_CHAT_PROXY_BASE_URL`; Headroom sets that to the local proxy so chat traffic is compressed before forwarding to xAI. MCP retrieval and session learning follow the same patterns as Codex. Closes # ## Type of Change - [ ] Bug fix (non-breaking change that fixes an issue) - [x] New feature (non-breaking change that adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [x] Documentation update - [ ] Performance improvement - [ ] Code refactoring (no functional changes) ## Changes Made - Add `headroom/providers/grok/` provider slice (`runtime.py`, `install.py`) with `GROK_CLI_CHAT_PROXY_BASE_URL` routing and project attribution prefix - Add `headroom wrap grok` and `headroom unwrap grok` CLI commands (MCP registration, RTK/context-tool setup, proxy launch) - Add `GrokRegistrar` for marker-delimited `[mcp_servers.headroom]` injection in `~/.grok/config.toml` - Add `headroom learn --agent grok` plugin parsing `~/.grok/sessions/*/updates.jsonl` and `GrokWriter` targeting `GROK.md` - Register Grok in install planner, install registry, MCP install list, and agent savings tracking - Update README agent compatibility matrix and unwrap support list - Add unit tests for provider, wrap CLI, MCP registrar, and learn plugin ## Testing - [x] Unit tests pass (`pytest`) - [x] Linting passes (`ruff check .`) - [x] Type checking passes (`mypy headroom`) - [x] New tests added for new functionality - [ ] Manual testing performed ### Test Output ```text $ uv run pytest tests/test_provider_grok.py tests/test_cli/test_wrap_grok.py tests/test_mcp_registry_grok.py tests/test_learn_grok_plugin.py -q ============================== 10 passed in 0.15s ============================== $ uv run ruff check headroom/providers/grok headroom/mcp_registry/grok.py headroom/learn/plugins/grok.py headroom/cli/wrap.py headroom/learn/writer.py All checks passed! $ uv run mypy headroom/providers/grok headroom/mcp_registry/grok.py headroom/learn/plugins/grok.py Success: no issues found in 5 source files ``` ## Real Behavior Proof - Environment: macOS (darwin), Python 3.13.14 via `uv`, repo at `/Users/s/dev/headroom`, Grok CLI at `/Users/s/.grok/bin/grok` - Exact command / steps: `cd /Users/s/dev/headroom && uv run pytest tests/test_provider_grok.py tests/test_cli/test_wrap_grok.py tests/test_mcp_registry_grok.py tests/test_learn_grok_plugin.py -q`; `uv run ruff check headroom/providers/grok headroom/mcp_registry/grok.py headroom/learn/plugins/grok.py`; `uv run python -c "from headroom.providers.grok import build_launch_env; env, display = build_launch_env(8787, environ={}); print(display[0])"`; `uv run python -c "from pathlib import Path; import tempfile; from headroom.mcp_registry.grok import GrokRegistrar; from headroom.mcp_registry.install import build_headroom_spec; td=tempfile.mkdtemp(); reg=GrokRegistrar(home_dir=Path(td)); print(reg.register_server(build_headroom_spec('http://127.0.0.1:8787'), force=True).status.value)"` - Observed result: pytest reported `10 passed`; ruff reported `All checks passed!`; `build_launch_env` printed `GROK_CLI_CHAT_PROXY_BASE_URL=http://127.0.0.1:8787/v1`; MCP registrar returned `registered` and wrote the Headroom marker block to `config.toml` - Not tested: live `headroom wrap grok` session with authenticated Grok API traffic through a running Headroom proxy (requires maintainer environment with active `grok login`) ## Review Readiness - [x] I have performed a self-review - [x] This PR is ready for human review ## Checklist - [x] My code follows the project's style guidelines - [x] I have performed a self-review of my code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] I have updated the CHANGELOG.md if applicable ## Screenshots (if applicable) N/A — CLI/integration change only. ## Additional Notes - Follows the provider-slice pattern from `b17c6d81` / `93a1f211` (Codex/Cursor/Aider extraction). - Routing uses the session env var only (not `config.toml` endpoint override) so `grok login` session auth continues to work. - Manual E2E wrap/unwrap with real Grok sessions is left for maintainer verification. --------- Co-authored-by: JerrettDavis <mxjerrett@gmail.com> Co-authored-by: Tejas Chopra <chopratejas@gmail.com>
2026-07-15 22:51:38 +04:00
from __future__ import annotations
from pathlib import Path
from headroom.mcp_registry.grok import GrokRegistrar
from headroom.mcp_registry.install import build_headroom_spec
def test_grok_registrar_writes_marker_block(tmp_path: Path) -> None:
registrar = GrokRegistrar(home_dir=tmp_path)
spec = build_headroom_spec("http://127.0.0.1:9999")
result = registrar.register_server(spec, force=True)
assert result.status.value == "registered"
content = registrar._config_file.read_text(encoding="utf-8")
assert "[mcp_servers.headroom]" in content
assert "# --- Headroom MCP server ---" in content
def test_grok_registrar_unregister_removes_marker_block(tmp_path: Path) -> None:
registrar = GrokRegistrar(home_dir=tmp_path)
spec = build_headroom_spec()
registrar.register_server(spec, force=True)
removed = registrar.unregister_server("headroom")
assert removed is True
assert (
not registrar._config_file.exists() or "Headroom MCP server" not in registrar._read_text()
)