Skip to content

[codex] add pyright LSP validation#3

Merged
qkal merged 41 commits into
masterfrom
fix/ci/pin-setup-uv
Jun 22, 2026
Merged

[codex] add pyright LSP validation#3
qkal merged 41 commits into
masterfrom
fix/ci/pin-setup-uv

Conversation

@qkal

@qkal qkal commented Jun 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Adds a reusable Pyright LSP validation path using pyright-langserver --stdio through the existing trusted command runner.
  • Preserves Pyright CLI fallback with distinct availability metadata for pyright and pyright-langserver.
  • Hardens LSP session lifecycle with health checks, failed-session discard, neutral process cwd, and server shutdown cleanup.
  • Updates integration coverage and README documentation for diagnostics-only LSP behavior.

Test Plan

  • uv run pytest -> 298 passed
  • uv run ruff check . -> passed
  • uv run pyright -> 0 errors, 0 warnings, 0 informations
  • git diff --check -> passed

Notes

  • Draft PR for review.
  • Local worktree still has an unrelated untracked .DS_Store that was left out of the branch.

Summary by CodeRabbit

  • New Features

    • Added Pyright Language Server Protocol (LSP) integration for improved type-checking diagnostics during patch validation, with automatic CLI fallback if LSP is unavailable.
    • Extended subprocess allowlisting to support pyright-langserver executable with new AGENT_QUALITY_MCP_PYRIGHT_LANGSERVER environment variable configuration.
  • Documentation

    • Updated validation documentation to clarify LSP diagnostic-only scope and Phase 2 agent-decision contract specifications.

qkal added 30 commits June 19, 2026 03:24
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: b4274253-54de-4cc7-a81e-631bcf08b7c6

📥 Commits

Reviewing files that changed from the base of the PR and between e8be979 and b058a84.

📒 Files selected for processing (3)
  • docs/superpowers/specs/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities-design.md
  • src/agent_quality_mcp/service.py
  • tests/integration/test_validate_patch_demo.py
💤 Files with no reviewable changes (1)
  • src/agent_quality_mcp/service.py
📜 Recent review details
🔇 Additional comments (9)
tests/integration/test_validate_patch_demo.py (1)

81-83: LGTM!

docs/superpowers/specs/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities-design.md (8)

89-124: ✓ Previous module architecture concern has been resolved.

The specification now correctly documents the consolidated lsp/pyright.py implementation (line 101) and explicitly explains the rationale for avoiding a separate lsp/manager.py module (lines 107–112). The forward-looking consideration for future LSP servers demonstrates thoughtful extensibility planning without premature generalization.


18-53: Phase 1 scope is clearly bounded and appropriately constrained.

The scope section (lines 18–53) clearly enumerates what is included (Pyright LSP diagnostics, reusable LSP manager, shared validator API, tests, README) and what is explicitly excluded (no real-repo mutations, no broad LSP features, no breaking change to validate_patch public response). This clear scope boundary is respected throughout the specification.


265-367: LSP behavior specification is comprehensive and safety-conscious.

The Pyright LSP behavior section clearly establishes the real-workspace-keying model (line 275: "real workspace key only") and reinforces the shadow-only constraint (line 279: "never sending patched real workspace content as LSP targets"). The diagnostic-completion semantics and fallback triggers (lines 310–330) are well-defined with explicit timeout and ambiguity handling. Manager lifecycle (lines 333–349) includes health checks and process-discard semantics on failure.


463-520: Testing strategy comprehensively covers safety constraints and failure modes.

The testing section (lines 463–520) includes explicit coverage for process startup safety, initialization constraints (preventing real workspace exposure), manager isolation/reuse, shadow workspace document cleanup, diagnostic normalization, and fallback scenarios. The recommendation for repo verification commands and optional local smoke tests demonstrates appropriate maturity-staged validation.


125-156: Command-resolution policy is appropriately security-conscious.

The specification (lines 125–156) enforces allowlist-based command resolution with explicit server-side configuration mappings and rejects workspace/request-supplied executable authority. Safe environment construction requirements and the dedicated long-running process launcher design align with the untrusted-subprocess stance established in the source constraints section.


157-210: Internal validator API establishes appropriate abstraction boundary.

The shared validator capability/request/result API (lines 157–210) creates a clean contract for providers while explicitly preserving the Phase 1 public response shape. This allows for Phase 2 decision-contract extensions without coupling Phase 1 delivery to incomplete Phase 2 designs.


521-545: README updates are user-appropriate and scope-conscious.

Documentation updates (lines 521–545) focus on user-facing behavior (Pyright LSP as primary diagnostic source, CLI fallback, mode-specific scoping) and trusted command installation requirements. The restriction on inspect_workspace field redesign appropriately defers Phase 2 breaking changes.


54-88: Untrusted-subprocess stance is clearly established and consistently maintained.

The source constraints section (lines 54–88) establishes the fundamental security posture: untrusted external commands executed through trusted server-side configuration and trusted environment. This stance is consistently applied in command resolution (lines 125–156) and LSP behavior (lines 265–367), creating a coherent safety model throughout the design.


📝 Walkthrough

Walkthrough

Adds a Pyright Language Server Protocol (LSP) diagnostic path to the Agent Quality MCP server: new shared validator capability/result models, a long-running subprocess launcher, a stdio JSON-RPC framing layer, a full Pyright LSP provider/session/manager with deterministic CLI fallback, service wiring with lifecycle cleanup, and response filtering for transport-fallback warnings. Also adds Phase 2 decision-contract specs and implementation plan documents.

Changes

Pyright LSP Validator Implementation

Layer / File(s) Summary
Validator API contracts, config, and models
src/agent_quality_mcp/validators.py, src/agent_quality_mcp/models.py, src/agent_quality_mcp/config.py, tests/unit/test_validators.py, tests/unit/test_config.py
ValidatorCapability, ValidatorScope, SkippedCheck, ValidatorRequest, ValidatorResult, ValidatorProvider, wrap_uv_result, and wrap_ruff_result are introduced. CommandConfig gains pyright_langserver: str | None. TRUSTED_COMMAND_PATH_ENV_VARS maps "pyright_langserver" to AGENT_QUALITY_MCP_PYRIGHT_LANGSERVER. Unit tests cover all contract shapes and config loading.
Runner allowlist extension and long-running process launcher
src/agent_quality_mcp/cli/runner.py, tests/unit/test_runner.py
ALLOWED_COMMANDS adds "pyright-langserver". COMMAND_CONFIG_FIELDS decouples hyphenated command names from config attribute names. LongRunningCommand frozen dataclass and start_long_running_command are added; the launcher resolves the allowlisted executable, builds a safe environment, and starts subprocess.Popen with piped stdio. Tests verify resolution, security rejection, safe environment, cwd separation, and raw byte preservation.
LSP stdio JSON-RPC protocol framing
src/agent_quality_mcp/lsp/__init__.py, src/agent_quality_mcp/lsp/protocol.py, tests/unit/test_lsp_protocol.py
build_lsp_message, LspFramer, and LspProtocolError implement incremental Content-Length framing with strict header/body size, duplicate-header, and malformed-JSON validation. Tests cover partial/multi-message streams and all error paths.
Pyright LSP provider, process session, manager, and diagnostic normalization
src/agent_quality_mcp/lsp/pyright.py, tests/unit/test_pyright_lsp.py
lsp_uri_from_path/path_from_lsp_uri, normalize_lsp_diagnostics with deterministic hashed IDs, three collaborator Protocols, PyrightLspProcessSession (JSON-RPC init, shadow workspace/document lifecycle, deadline-aware I/O, health tracking), PyrightLspProvider (LSP-first with CLI fallback and finally cleanup), RealPyrightLspManager (keyed session cache), and _start_process_session are all added. 1 400-line test module covers session reuse/isolation/discard, diagnostic scoping, fallback scenarios, and normalization edge cases.
Service wiring, server lifecycle, response filtering, and updated tests
src/agent_quality_mcp/service.py, src/agent_quality_mcp/response.py, src/agent_quality_mcp/server.py, tests/unit/test_service.py, tests/unit/test_tools_server.py, tests/integration/test_validate_patch_demo.py, README.md
SUPPORTED_TOOLS adds "pyright-langserver", _PYRIGHT_LSP_MANAGER is instantiated, _run_adapters routes Pyright through _run_pyright_provider/PyrightLspProvider, and close_pyright_lsp_manager is added. _is_transport_fallback_warning filters lsp_fallback diagnostics from decision logic. server.main() gains a try/finally for LSP manager cleanup. Service and server tests are rewired to provider stubs; integration test splits pyright assertion from the uv/ruff loop. README documents the new env var and LSP usage.

Phase 2 Decision Contract and Pyright LSP Planning Documentation

Layer / File(s) Summary
Phase 2 agent decision contract design specs
docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-agent-decision-contract-design.md, docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-decision-engine-split-design.md
Defines the Phase 2 validate_patch breaking response contract (decision, confidence, blockers, next_actions, fix_plan, evidence) with deterministic precedence rules; specifies three-milestone decision-engine-first architecture with component responsibilities and error-handling mappings.
Phase 2 decision contract and Pyright LSP implementation plans
docs/superpowers/plans/2026-06-19-agent-quality-mcp-phase-2-agent-decision-contract.md, docs/superpowers/plans/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities.md
Adds milestone-by-milestone task breakdowns with code stubs, test plans, and verification checklists for both the Phase 2 decision contract and the Pyright LSP validator modules introduced in this PR.
Pyright LSP validator capabilities design spec
docs/superpowers/specs/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities-design.md
Specifies untrusted-subprocess stance, real-workspace-keyed manager architecture, shadow-workspace isolation, LSP-only diagnostic scope, diagnostic completion semantics, CLI fallback triggers, safety model constraints, and testing strategy for the Pyright LSP integration.

Sequence Diagram

sequenceDiagram
  participant validate_patch_service
  participant _run_pyright_provider
  participant PyrightLspProvider
  participant RealPyrightLspManager
  participant PyrightLspProcessSession
  participant PyrightCliAdapter
  participant _diagnostics_for_decision

  validate_patch_service->>_run_pyright_provider: ValidatorRequest(safety_mode, scope, changed_files)
  _run_pyright_provider->>PyrightLspProvider: validate(request)
  PyrightLspProvider->>RealPyrightLspManager: session_for(real_workspace_root, config)
  RealPyrightLspManager-->>PyrightLspProvider: PyrightLspProcessSession (cached or new)
  PyrightLspProvider->>PyrightLspProcessSession: collect_diagnostics(shadow_root, changed_files, scope, timeout)
  PyrightLspProcessSession-->>PyrightLspProvider: RawLspDiagnostics | None, fallback_reason | None
  alt LSP diagnostics complete
    PyrightLspProvider-->>_run_pyright_provider: ValidatorResult (TYPE_DIAGNOSTICS, fallback_to_cli=False)
  else LSP failed or incomplete
    PyrightLspProvider->>RealPyrightLspManager: discard_session(real_workspace_root)
    PyrightLspProvider->>PyrightCliAdapter: check(cwd, changed_files, mode)
    PyrightCliAdapter-->>PyrightLspProvider: diagnostics, records
    PyrightLspProvider-->>_run_pyright_provider: ValidatorResult (lsp_fallback diagnostic, fallback_to_cli=True)
  end
  _run_pyright_provider-->>validate_patch_service: diagnostics, command_records
  validate_patch_service->>_diagnostics_for_decision: filter lsp_fallback and tool_unavailable diagnostics
  _diagnostics_for_decision-->>validate_patch_service: decision-relevant diagnostics only
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐇 A rabbit hops through JSON streams so bright,
Content-Length headers framed just right,
The langserver wakes with --stdio in tow,
Shadow workspaces gleam with diagnostic glow,
Fallback to CLI if the LSP should sleep,
This bunny's type checks run ever so deep! 🔍

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.83% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title '[codex] add pyright LSP validation' directly describes the main change: introducing Pyright LSP validation capabilities. It is clear, specific, and accurately represents the primary objective of the PR.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ci/pin-setup-uv

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qkal qkal marked this pull request as ready for review June 22, 2026 14:51

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@docs/superpowers/specs/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities-design.md`:
- Around line 99-103: Update the architecture section describing the LSP module
structure (lines 95-105) to reflect the actual implementation where all
functionality including PyrightLspManager, PyrightLspProvider, and
RealPyrightLspManager is consolidated into a single lsp/pyright.py file rather
than being split across separate lsp/protocol.py, lsp/manager.py, and
lsp/pyright.py modules. Replace the multi-module proposal with documentation of
the consolidated design in lsp/pyright.py and add an explanation of why
simplicity through consolidation was chosen over module separation.

In `@src/agent_quality_mcp/service.py`:
- Around line 408-413: In the _validator_scope_for_tool function, the branch
that checks for tool == "ruff" and mode == "strict" appears to be unreachable
code since only pyright validation calls this function. Either remove this dead
code branch entirely to improve maintainability, or if it is intentional
future-proofing for a future refactor where ruff validation might use the
validator contract, add a clarifying comment above the ruff condition explaining
why it's included despite not being currently used.

In `@tests/integration/test_validate_patch_demo.py`:
- Around line 110-128: The function
_assert_pyright_evidence_or_structured_unavailable duplicates the logic already
present in the existing helper _assert_tool_recorded_or_structured_unavailable,
differing only in the tool name and log message. Delete the
_assert_pyright_evidence_or_structured_unavailable function entirely and replace
its call (at line 83) with a direct call to
_assert_tool_recorded_or_structured_unavailable passing "pyright" as the tool
name parameter. If preserving the specific error message is important, consider
adding an optional message parameter to the
_assert_tool_recorded_or_structured_unavailable helper to avoid duplication
while maintaining distinct messaging.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5f0b33a0-4cd2-4439-8fd3-defa4e9c70fc

📥 Commits

Reviewing files that changed from the base of the PR and between 554b512 and e8be979.

📒 Files selected for processing (24)
  • README.md
  • docs/superpowers/plans/2026-06-19-agent-quality-mcp-phase-2-agent-decision-contract.md
  • docs/superpowers/plans/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities.md
  • docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-agent-decision-contract-design.md
  • docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-decision-engine-split-design.md
  • docs/superpowers/specs/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities-design.md
  • src/agent_quality_mcp/cli/runner.py
  • src/agent_quality_mcp/config.py
  • src/agent_quality_mcp/lsp/__init__.py
  • src/agent_quality_mcp/lsp/protocol.py
  • src/agent_quality_mcp/lsp/pyright.py
  • src/agent_quality_mcp/models.py
  • src/agent_quality_mcp/response.py
  • src/agent_quality_mcp/server.py
  • src/agent_quality_mcp/service.py
  • src/agent_quality_mcp/validators.py
  • tests/integration/test_validate_patch_demo.py
  • tests/unit/test_config.py
  • tests/unit/test_lsp_protocol.py
  • tests/unit/test_pyright_lsp.py
  • tests/unit/test_runner.py
  • tests/unit/test_service.py
  • tests/unit/test_tools_server.py
  • tests/unit/test_validators.py
📜 Review details
🧰 Additional context used
🪛 ast-grep (0.44.0)
tests/unit/test_lsp_protocol.py

[info] 18-18: use jsonify instead of json.dumps for JSON output
Context: json.dumps(message, separators=(",", ":"), ensure_ascii=False)
Note: Security best practice.

(use-jsonify)

src/agent_quality_mcp/lsp/protocol.py

[info] 15-15: use jsonify instead of json.dumps for JSON output
Context: json.dumps(message, separators=(",", ":"), ensure_ascii=False)
Note: Security best practice.

(use-jsonify)

src/agent_quality_mcp/cli/runner.py

[error] 179-187: Command coming from incoming request
Context: subprocess.Popen( # noqa: S603 - executable is allowlist-resolved.
[executable, *args],
cwd=str(launch_cwd),
env=safe_env,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=False,
)
Note: [CWE-20].

(subprocess-from-request)

src/agent_quality_mcp/lsp/pyright.py

[info] 133-133: use jsonify instead of json.dumps for JSON output
Context: json.dumps(payload, sort_keys=True, separators=(",", ":"))
Note: Security best practice.

(use-jsonify)


[info] 195-195: use jsonify instead of json.dumps for JSON output
Context: json.dumps(text, ensure_ascii=False)
Note: Security best practice.

(use-jsonify)

🪛 LanguageTool
docs/superpowers/plans/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities.md

[uncategorized] ~1990-~1990: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...` Expected: PASS. - [ ] Step 6: Run full service tests Run: ```bash .venv/bin/python...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-decision-engine-split-design.md

[grammar] ~58-~58: Use a hyphen to join words.
Context: ...remains service-led and shadow-workspace based. CLI adapters continue to produce ...

(QB_NEW_EN_HYPHEN)

docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-agent-decision-contract-design.md

[grammar] ~221-~221: Use a hyphen to join words.
Context: ...remains service-led and shadow-workspace based. Tool adapters continue to report ...

(QB_NEW_EN_HYPHEN)

README.md

[grammar] ~235-~235: Ensure spelling is correct
Context: ...ons - Text unified-diff subset only. - Stdio transport only. - Minimal uv, Ruff, and...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

docs/superpowers/specs/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities-design.md

[style] ~375-~375: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ... provider. 8. Run the Ruff provider. 9. Run the Pyright LSP provider. 10. If Pyrigh...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~546-~546: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...tocol parser and fake-process tests. 3. Add command resolution and inspection suppo...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~547-~547: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...on support for pyright-langserver. 4. Add the Pyright LSP manager and provider wi...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🔇 Additional comments (83)
docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-agent-decision-contract-design.md (4)

219-240: 💤 Low value

Grammar: Hyphenate compound adjective modifying noun.

Line 221: "remains service-led and shadow-workspace based" should be "remains service-led and shadow-workspace-based" when the compound adjective modifies the following noun phrase.


53-82: LGTM!


84-115: LGTM!


140-160: LGTM!

docs/superpowers/specs/2026-06-19-agent-quality-mcp-phase-2-decision-engine-split-design.md (3)

1-55: LGTM!


56-69: 💤 Low value

Grammar: Hyphenate compound adjective.

Line 58: "remains service-led and shadow-workspace based" should be "shadow-workspace-based" to properly hyphenate the compound adjective.


94-199: LGTM!

docs/superpowers/plans/2026-06-19-agent-quality-mcp-phase-2-agent-decision-contract.md (8)

22-36: LGTM!


77-158: LGTM!


295-440: LGTM!


467-602: LGTM!


618-804: LGTM!


949-1157: LGTM!


1311-1566: LGTM!


1587-1877: LGTM!

docs/superpowers/plans/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities.md (10)

19-21: LGTM!


51-416: LGTM!


418-692: LGTM!


694-870: LGTM!


872-1129: LGTM!


1131-1469: LGTM!


1470-1741: LGTM!


1743-2007: LGTM!


2009-2197: LGTM!


2199-2298: LGTM!

docs/superpowers/specs/2026-06-22-agent-quality-mcp-pyright-lsp-validator-capabilities-design.md (1)

1-554: Comprehensive and well-structured specification with strong safety and testing grounding.

This design specification for Pyright LSP validator capabilities is detailed, internally consistent, and well-aligned with the PR objectives. Key strengths:

  • Clear scope and boundaries: The "Scope" section (lines 18–52) explicitly states what is and is not included, preventing scope creep.
  • Safety-first framing: The "Safety Model" section (lines 412–434) preserves Phase 1 isolation guarantees and documents concrete requirements (shadow workspaces only, no real-workspace mutation, untrusted subprocess handling).
  • Diagnostic completion semantics: The "Diagnostic Completion" section (lines 331–359) rigorously defines what "complete" means for both changed-file and workspace scopes, with explicit fallback triggers for ambiguous cases—critical for correctness.
  • Comprehensive testing strategy: The "Testing Strategy" section (lines 461–521) provides concrete, actionable test coverage including edge cases, process lifecycle, and fallback paths.
  • Pragmatic error handling: LSP failures cleanly degrade to CLI fallback (Section 16), avoiding silent partial results.

The staged implementation plan (Section 21, lines 539–554) properly identifies process lifecycle state as the key risk and recommends explicit cleanup checks before service wiring.

src/agent_quality_mcp/models.py (1)

97-97: LGTM!

src/agent_quality_mcp/config.py (1)

50-50: LGTM!

src/agent_quality_mcp/validators.py (5)

1-20: LGTM!


22-54: LGTM!


57-74: LGTM!


77-125: LGTM!


128-184: LGTM!

tests/unit/test_config.py (1)

305-315: LGTM!

tests/unit/test_validators.py (3)

1-49: LGTM!


51-111: LGTM!


113-153: LGTM!

src/agent_quality_mcp/response.py (2)

302-306: LGTM!


321-322: LGTM!

tests/unit/test_service.py (11)

7-26: LGTM!


74-106: LGTM!


115-141: LGTM!


257-272: LGTM!


536-542: LGTM!

Also applies to: 590-605, 647-651, 721-736


754-810: LGTM!


812-868: LGTM!


870-899: LGTM!


901-928: LGTM!


930-976: LGTM!


1022-1033: LGTM!

src/agent_quality_mcp/cli/runner.py (4)

16-22: LGTM!


34-44: LGTM!


55-55: LGTM!


163-202: LGTM!

tests/unit/test_runner.py (1)

8-14: LGTM!

Also applies to: 187-222, 331-380, 381-426, 428-454

src/agent_quality_mcp/lsp/__init__.py (1)

1-1: LGTM!

src/agent_quality_mcp/lsp/protocol.py (1)

1-100: LGTM!

tests/unit/test_lsp_protocol.py (1)

1-68: LGTM!

src/agent_quality_mcp/lsp/pyright.py (7)

1-57: LGTM!

Also applies to: 60-111, 114-199, 202-237


240-441: LGTM!


442-578: LGTM!


581-719: LGTM!


722-849: LGTM!


852-968: LGTM!


971-1028: LGTM!

tests/unit/test_pyright_lsp.py (11)

1-211: LGTM!


213-258: LGTM!


261-379: LGTM!


382-471: LGTM!


474-545: LGTM!


548-670: LGTM!


673-803: LGTM!


806-938: LGTM!


941-1047: LGTM!


1050-1250: LGTM!


1252-1404: LGTM!

src/agent_quality_mcp/service.py (3)

30-30: LGTM!

Also applies to: 46-59


163-169: LGTM!

Also applies to: 311-317


350-368: LGTM!

Also applies to: 398-405, 416-444, 447-451

src/agent_quality_mcp/server.py (1)

7-7: LGTM!

Also applies to: 22-25

tests/unit/test_tools_server.py (1)

7-7: LGTM!

Also applies to: 59-77

tests/integration/test_validate_patch_demo.py (1)

81-83: LGTM!

README.md (1)

25-27: LGTM!

Also applies to: 218-223, 224-231, 232-239

Comment thread src/agent_quality_mcp/service.py
Comment thread tests/integration/test_validate_patch_demo.py Outdated

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@qkal qkal merged commit 7ed914a into master Jun 22, 2026
3 checks passed
@qkal qkal deleted the fix/ci/pin-setup-uv branch June 22, 2026 19:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant