{"id":50472311,"url":"https://github.com/semcod/vallm","last_synced_at":"2026-06-01T11:03:07.558Z","repository":{"id":341423052,"uuid":"1170035334","full_name":"semcod/vallm","owner":"semcod","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-31T11:10:35.000Z","size":126164,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T11:13:55.121Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/semcod.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-01T15:54:06.000Z","updated_at":"2026-05-31T11:10:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/semcod/vallm","commit_stats":null,"previous_names":["semcod/vallm"],"tags_count":88,"template":false,"template_full_name":null,"purl":"pkg:github/semcod/vallm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fvallm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fvallm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fvallm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fvallm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semcod","download_url":"https://codeload.github.com/semcod/vallm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semcod%2Fvallm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33771630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-01T11:03:07.316Z","updated_at":"2026-06-01T11:03:07.543Z","avatar_url":"https://github.com/semcod.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vallm\n\n**A complete toolkit for validating LLM-generated code.**\n\n[![PyPI](https://img.shields.io/pypi/v/vallm)](https://pypi.org/project/vallm/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/vallm)](https://pypi.org/project/vallm/)\n[![CI](https://github.com/semcod/vallm/workflows/CI/badge.svg)](https://github.com/semcod/vallm/actions)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://python.org)\n[![Code style: ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Coverage](https://img.shields.io/badge/coverage-85%25-brightgreen)](https://github.com/semcod/vallm/actions)\n[![Type checking: mypy](https://img.shields.io/badge/type%20checking-mypy-blue)](https://mypy-lang.org/)\n[![Security: bandit](https://img.shields.io/badge/security-bandit-brightgreen)](https://bandit.readthedocs.io/)\n[![Pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen)](https://pre-commit.com/)\n[![CodeQL](https://img.shields.io/github/actions/workflow/status/github/codeql-action/init-codeql?label=CodeQL)](https://github.com/semcod/vallm/security)\n[![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.1234567-blue)](https://doi.org/10.5281/zenodo.1234567)\n[![GitHub stars](https://img.shields.io/github/stars/semcod/vallm?style=social)](https://github.com/semcod/vallm)\n[![GitHub forks](https://img.shields.io/github/forks/semcod/vallm?style=social)](https://github.com/semcod/vallm)\n[![GitHub issues](https://img.shields.io/github/issues/semcod/vallm)](https://github.com/semcod/vallm/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/semcod/vallm)](https://github.com/semcod/vallm/pulls)\n[![Release](https://img.shields.io/github/release/semcod/vallm)](https://github.com/semcod/vallm/releases)\n[![Last commit](https://img.shields.io/github/last-commit/semcod/vallm)](https://github.com/semcod/vallm/commits/main)\n[![Maintained](https://img.shields.io/badge/maintained-yes-brightgreen)](https://github.com/semcod/vallm)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)](https://github.com/semcod/vallm/blob/main/CONTRIBUTING.md)\n\n\n## AI Cost Tracking\n\n![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.1.92-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)\n![AI Cost](https://img.shields.io/badge/AI%20Cost-$1.90-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-45.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)\n\n- 🤖 **LLM usage:** $1.9022 (151 commits)\n- 👤 **Human dev:** ~$4526 (45.3h @ $100/h, 30min dedup)\n\nGenerated on 2026-05-31 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)\n\n---\n\nvallm validates code proposals through a **four-tier pipeline** — from millisecond syntax checks to LLM-as-judge semantic review — before a single line ships.\n\n## Features\n\n- **Multi-language AST parsing** via tree-sitter (165+ languages)\n- **Syntax validation** with ast.parse (Python) and tree-sitter error detection\n- **Import resolution** checking for Python, JavaScript/TypeScript, Go, Rust, Java, C/C++\n- **Complexity metrics** via radon (Python) and lizard (16 languages)\n- **Security scanning** with language-specific patterns and optional bandit integration\n- **LLM-as-judge** semantic review via Ollama, litellm, or direct HTTP\n- **Code graph analysis** — import/call graph diffing for structural regression detection\n- **AST similarity scoring** with normalized fingerprinting\n- **Pluggy-based plugin system** for custom validators\n- **Rich CLI** with JSON/text output formats\n- **MCP integration** — Model Context Protocol server for LLM tool calling\n\n## Supported Languages\n\n| Language | Syntax | Imports | Complexity | Security |\n|----------|--------|---------|------------|----------|\n| Python | ✅ AST + tree-sitter | ✅ Full resolution (22 methods) | ✅ radon + lizard | ✅ bandit + patterns |\n| JavaScript | ✅ tree-sitter | ✅ Node.js builtins | ✅ lizard | ✅ XSS, eval patterns |\n| TypeScript | ✅ tree-sitter | ✅ Node.js builtins | ✅ lizard | ✅ XSS, eval patterns |\n| Go | ✅ tree-sitter | ✅ stdlib + modules | ✅ lizard | ✅ SQL injection, exec |\n| Rust | ✅ tree-sitter | ✅ crates | ✅ lizard | ✅ unsafe, unwrap |\n| Java | ✅ tree-sitter | ✅ stdlib packages | ✅ lizard | ✅ Runtime.exec, SQL |\n| C/C++ | ✅ tree-sitter | ✅ std headers | ✅ lizard | ✅ buffer overflow, system |\n| Ruby | ✅ tree-sitter | ⚠️ Limited | ✅ lizard | ⚠️ Limited |\n| PHP | ✅ tree-sitter | ⚠️ Limited | ✅ lizard | ⚠️ Limited |\n| Swift | ✅ tree-sitter | ⚠️ Limited | ✅ lizard | ⚠️ Limited |\n| Kotlin | ✅ tree-sitter | ⚠️ Limited | ✅ lizard | ⚠️ Limited |\n| Scala | ✅ tree-sitter | ⚠️ Limited | ✅ lizard | ⚠️ Limited |\n\n## Installation\n\n```bash\npip install vallm\n```\n\nWith optional dependencies:\n\n```bash\npip install vallm[all]        # Everything\npip install vallm[llm]        # Ollama + litellm for semantic review\npip install vallm[security]   # bandit integration\npip install vallm[semantic]   # CodeBERTScore\npip install vallm[graph]      # NetworkX graph analysis\n```\n\n## Quick Start\n\n### Validate Entire Project\n\n```bash\n# Install with LLM support\npip install vallm[llm]\n\n# Setup Ollama (for semantic review)\nollama pull qwen2.5-coder:7b\nollama serve\n\n# Validate entire project recursively\nvallm batch . --recursive --semantic --model qwen2.5-coder:7b\n\n# Fast validation for quick feedback (skip imports and complexity)\nvallm batch . --recursive --no-imports --no-complexity\n\n# Generate validation report in TOON format\nvallm batch . --recursive --output toon \u003e ./project/validation.toon\n```\n\n### Project Structure \u0026 Files\n\n**Core Source Code:**\n- [`src/vallm/`](src/vallm/) - Main package directory\n  - [`cli.py`](src/vallm/cli.py) - Simplified CLI entry point (9 lines)\n  - [`config.py`](src/vallm/config.py) - Configuration management\n  - [`scoring.py`](src/vallm/scoring.py) - Validation pipeline and scoring\n  - [`hookspecs.py`](src/vallm/hookspecs.py) - Plugin system specifications\n  - [`core/`](src/vallm/core/) - Core functionality\n    - [`languages.py`](src/vallm/core/languages.py) - Language detection and support\n    - [`proposal.py`](src/vallm/core/proposal.py) - Code proposal model\n    - [`ast_compare.py`](src/vallm/core/ast_compare.py) - AST similarity analysis\n    - [`graph_builder.py`](src/vallm/core/graph_builder.py) - Code graph construction\n    - [`graph_diff.py`](src/vallm/core/graph_diff.py) - Graph diffing\n  - [`validators/`](src/vallm/validators/) - Validation modules\n    - [`syntax.py`](src/vallm/validators/syntax.py) - Syntax validation\n    - [`complexity.py`](src/vallm/validators/complexity.py) - Complexity analysis\n    - [`security.py`](src/vallm/validators/security.py) - Security scanning\n    - [`semantic.py`](src/vallm/validators/semantic.py) - LLM semantic review\n    - [`imports/`](src/vallm/validators/imports/) - Import validation modules\n  - [`sandbox/`](src/vallm/sandbox/) - Code execution sandbox\n  - [`cli/`](src/vallm/cli/) - Modular CLI components\n    - [`command_handlers.py`](src/vallm/cli/command_handlers.py) - CLI command implementations\n    - [`output_formatters.py`](src/vallm/cli/output_formatters.py) - Output formatting\n    - [`settings_builders.py`](src/vallm/cli/settings_builders.py) - Settings configuration\n    - [`batch_processor.py`](src/vallm/cli/batch_processor.py) - Batch processing logic\n\n**Examples \u0026 Documentation:**\n- [`examples/`](examples/) - Comprehensive examples directory\n  - [`01_basic_validation/`](examples/01_basic_validation/) - Basic validation pipeline\n  - [`02_ast_comparison/`](examples/02_ast_comparison/) - AST similarity scoring\n  - [`03_security_check/`](examples/03_security_check/) - Security pattern detection\n  - [`04_graph_analysis/`](examples/04_graph_analysis/) - Import/call graph analysis\n  - [`05_llm_semantic_review/`](examples/05_llm_semantic_review/) - LLM semantic review\n  - [`06_multilang_validation/`](examples/06_multilang_validation/) - Multi-language validation\n  - [`07_multi_language/`](examples/07_multi_language/) - Comprehensive multi-language demo\n  - [`08_code2llm_integration/`](examples/08_code2llm_integration/) - Code2LLM integration\n  - [`09_code2logic_integration/`](examples/09_code2logic_integration/) - Code2Logic integration\n  - [`10_mcp_ollama_demo/`](examples/10_mcp_ollama_demo/) - MCP + Ollama demo\n  - [`11_claude_code_autonomous/`](examples/11_claude_code_autonomous/) - Autonomous refactoring\n  - [`12_ollama_simple_demo/`](examples/12_ollama_simple_demo/) - Simplified Ollama demo\n- [`docs/`](docs/) - Documentation\n  - [`README.md`](docs/README.md) - Documentation overview\n  - [`TESTING.md`](docs/TESTING.md) - Testing guidelines\n\n**Configuration Files:**\n- [`pyproject.toml`](pyproject.toml) - Project configuration and dependencies\n- [`.gitignore`](.gitignore) - Git ignore patterns (includes .git/ exclusion)\n- [`LICENSE`](LICENSE) - Apache 2.0 license\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - Contribution guidelines\n- [`CHANGELOG.md`](CHANGELOG.md) - Version history\n- [`TODO.md`](TODO.md) - Development roadmap\n\n**Scripts \u0026 Tools:**\n- [`project.sh`](project.sh) - Project analysis script\n- [`scripts/`](scripts/) - Utility scripts\n  - [`bump_version.py`](scripts/bump_version.py) - Version management\n  - [`test_docker_installation.sh`](scripts/test_docker_installation.sh) - Docker testing\n\n**Testing:**\n- [`tests/`](tests/) - Comprehensive test suite\n  - [`test_cli_e2e.py`](tests/test_cli_e2e.py) - End-to-end CLI tests\n  - [`test_syntax.py`](tests/test_syntax.py) - Syntax validation tests\n  - [`test_imports.py`](tests/test_imports.py) - Import validation tests\n  - [`test_complexity.py`](tests/test_complexity.py) - Complexity analysis tests\n  - [`test_security.py`](tests/test_security.py) - Security scanning tests\n  - [`test_semantic_validation.py`](tests/test_semantic_validation.py) - Semantic validation tests\n  - [`conftest.py`](tests/conftest.py) - Test configuration\n\n**CI/CD \u0026 GitHub:**\n- [`.github/workflows/`](.github/workflows/) - GitHub Actions workflows\n  - [`ci.yml`](.github/workflows/ci.yml) - Continuous integration\n  - [`comprehensive-tests.yml`](.github/workflows/comprehensive-tests.yml) - Full test suite\n  - [`publish.yml`](.github/workflows/publish.yml) - Package publishing\n- [`Dockerfile.test`](Dockerfile.test) - Testing container\n\n**Project Analysis:**\n- [`project/`](project/) - Analysis outputs and visualizations\n  - [`validation.toon`](project/validation.toon) - Validation results (TOON format)\n  - [`project.toon`](project/project.toon) - Project analysis\n  - [`flow.toon`](project/flow.toon) - Workflow visualization\n  - [`calls.toon`](project/calls.toon) - Call graph analysis\n  - [`README.md`](project/README.md) - Project analysis overview\n\n### Python API\n\n```python\nfrom vallm import Proposal, validate, VallmSettings\n\ncode = \"\"\"\ndef fibonacci(n: int) -\u003e list[int]:\n    if n \u003c= 0:\n        return []\n    fib = [0, 1]\n    for i in range(2, n):\n        fib.append(fib[i-1] + fib[i-2])\n    return fib\n\"\"\"\n\nproposal = Proposal(code=code, language=\"python\")\nresult = validate(proposal)\nprint(f\"Verdict: {result.verdict.value}\")  # pass / review / fail\nprint(f\"Score: {result.weighted_score:.2f}\")\n```\n\n### CLI Commands Reference\n\n```bash\n# Batch validation (best for entire projects)\nvallm batch . --recursive --semantic --model qwen2.5-coder:7b\nvallm batch src/ --recursive --include \"*.py,*.js\" --exclude \"*/test/*\"\nvallm batch . --recursive --format json --fail-fast\nvallm batch . --recursive --verbose --show-issues  # Detailed per-file results\n\n# Output formats for batch results\nvallm batch . --recursive --format json   # Machine-readable JSON\nvallm batch . --recursive --format yaml   # YAML format\nvallm batch . --recursive --format toon   # Compact TOON format\nvallm batch . --recursive --format text   # Plain text\n\n# Single file validation\nvallm validate --file mycode.py --semantic --model qwen2.5-coder:7b\nvallm validate --file app.js --security\nvallm validate --file mycode.py --format json  # JSON output\n\n# Quick syntax check only\nvallm check mycode.py\nvallm check src/main.go\n\n# Configuration and info\nvallm info\n```\n\n### Real-World Usage Examples\n\n#### 1. **Fast Project Validation** (Recommended for CI/CD)\n```bash\n# Quick syntax check - excludes .git/ and other system files automatically\nvallm batch . --recursive --no-imports --no-complexity\n\n# Output: Excluded 30246 files by .gitignore, Validating 169 files...\n# ✓ 83 files passed, ✗ 115 files failed (mostly non-code files)\n```\n\n#### 2. **Generate Validation Report**\n```bash\n# Save TOON format report to project directory\nvallm batch . --recursive --output toon \u003e ./project/validation.toon\n\n# Save JSON report for CI/CD integration\nvallm batch . --recursive --output json \u003e ./project/validation.json\n\n# Save detailed text report with security checks\nvallm batch . --recursive --security --output text \u003e ./project/validation-report.txt\n```\n\n#### 3. **Selective File Validation**\n```bash\n# Validate only Python and JavaScript files\nvallm batch . --recursive --include \"*.py,*.js\" --exclude \"*/test/*\"\n\n# Validate specific directory with custom patterns\nvallm batch src/ --recursive --include \"*.py\" --exclude \"*/__pycache__/*\"\n\n# Validate with custom gitignore override\nvallm batch . --recursive --no-gitignore --exclude \"*.log,tmp/*\"\n```\n\n#### 4. **Full Pipeline with LLM Review**\n```bash\n# Complete validation with semantic analysis\nvallm batch . --recursive --semantic --model qwen2.5-coder:7b --security\n\n# Export full results with per-file details\nvallm batch . --recursive --semantic --model qwen2.5-coder:7b --output json \u003e full-validation.json\n```\n\n#### 5. **Development Workflow Integration**\n```bash\n# Pre-commit validation (fast)\nvallm batch . --recursive --no-imports --no-complexity --fail-fast\n\n# Feature branch validation (medium)\nvallm batch src/ --recursive --no-complexity --show-issues\n\n# Release validation (full)\nvallm batch . --recursive --semantic --model qwen2.5-coder:7b --security --verbose\n```\n\n### Fast Validation Options\n\nWhen validating large projects (100+ files), use these options to speed up validation:\n\n```bash\n# Fastest - syntax only (skip imports and complexity)\nvallm batch . --recursive --no-imports --no-complexity\n\n# Fast - skip import validation (often the slowest)\nvallm batch . --recursive --no-imports\n\n# Parallel processing for multi-core speedup\n# Note: --parallel option was removed in v0.1.16 due to module conflicts\n# Use --no-imports --no-complexity for better performance\n\n# Combine for maximum speed\nvallm batch . --recursive --no-imports --no-complexity\n\n# Quick syntax check only (single files)\nvallm check src/proxym/config.py\n```\n\n| Option | Speed Impact | Description |\n|--------|--------------|-------------|\n| `--no-imports` | **High** | Skip import resolution (slowest validator) |\n| `--no-complexity` | **Medium** | Skip complexity analysis (radon/lizard) |\n| `--security` | **Low** | Add security checks (fast pattern matching) |\n| `--semantic` | **Very High** | LLM semantic review (requires Ollama/OpenAI) |\n\n**Performance Benchmarks:**\n- **Fast mode**: `--no-imports --no-complexity` - ~100 files/second\n- **Normal mode**: Default settings - ~20 files/second  \n- **Full mode**: With `--semantic` - ~2 files/second\n\n**Recommendation for CI/CD:**\n```bash\n# Fast validation for quick feedback (PR checks)\nvallm batch src/ --recursive --no-imports --no-complexity --fail-fast\n\n# Full validation before merge (quality gate)\nvallm batch src/ --recursive --security\n\n# Release validation with LLM review\nvallm batch . --recursive --semantic --model qwen2.5-coder:7b\n```\n\n### Generate Validation Summary File\n\n```bash\n# JSON summary for entire project (with per-file details and issues)\nvallm batch . --recursive --output json \u003e validation-summary.json\n\n# YAML summary for src/ directory (with per-file details and issues)\nvallm batch src/ --recursive --output yaml \u003e validation-summary.yaml\n\n# TOON format (compact, human-readable) with per-file details\nvallm batch . --recursive --output toon \u003e validation-summary.toon\n\n# Text format with security checks\nvallm batch . --recursive --output text --security \u003e validation-report.txt\n\n# Full validation with semantic review - save to file\nvallm batch . --recursive --semantic --model qwen2.5-coder:7b --output json \u003e full-validation.json\n\n# Tee output to both console and file\nvallm batch . --recursive --output json | tee validation-summary.json\n\n# Save to project directory for analysis integration\nvallm batch . --recursive --output toon \u003e ./project/validation.toon\n```\n\n**Sample Output Files:**\n- [`project/validation.toon`](project/validation.toon) - Real validation results (TOON format)\n- [`project/validation.json`](project/validation.json) - JSON format (generate with `--output json`)\n- [`project/validation-report.txt`](project/validation-report.txt) - Text format (generate with `--output text`)\n\n**Output Structure (JSON/YAML/TOON formats now include per-file details):**\n\n```json\n{\n  \"summary\": {\n    \"total_files\": 146,\n    \"passed\": 145,\n    \"failed\": 1\n  },\n  \"files\": [\n    {\n      \"path\": \"src/proxym/config.py\",\n      \"language\": \"python\",\n      \"verdict\": \"fail\",\n      \"score\": 0.45,\n      \"issues_count\": 3,\n      \"issues\": [\n        {\n          \"validator\": \"syntax\",\n          \"severity\": \"error\",\n          \"message\": \"Invalid syntax at line 42\",\n          \"line\": 42,\n          \"column\": 15\n        },\n        {\n          \"validator\": \"imports\",\n          \"severity\": \"error\", \n          \"message\": \"Module 'requests' not found\",\n          \"line\": 5,\n          \"column\": 0\n        }\n      ]\n    }\n  ],\n  \"failed_files\": [\n    {\"path\": \"src/proxym/config.py\", \"error\": \"Validation fail\"}\n  ]\n}\n```\n\n```yaml\n---\nsummary:\n  total_files: 146\n  passed: 145\n  failed: 1\n\nfiles:\n  - path: src/proxym/config.py\n    language: python\n    verdict: fail\n    score: 0.45\n    issues_count: 3\n    issues:\n      - validator: syntax\n        severity: error\n        message: \"Invalid syntax at line 42\"\n        line: 42\n        column: 15\n      - validator: imports\n        severity: error\n        message: \"Module 'requests' not found\"\n        line: 5\n```\n\n```toon\n# vallm batch | 146f | 145✓ 1✗\n\nSUMMARY:\n  total: 146\n  passed: 145\n  failed: 1\n\nFILES:\n  [python]\n    ✗ src/proxym/config.py\n      verdict: fail\n      score: 0.45\n      issues: 2\n        [error] syntax: Invalid syntax at line 42@42\n        [error] imports: Module 'requests' not found@5\n    ✓ src/proxym/ctl.py\n      verdict: pass\n      score: 0.92\n      issues: 0\n\nFAILED:\n  ✗ src/proxym/config.py: Validation fail\n```\n\n### Batch Command Options\n\n| Option | Short | Description |\n|--------|-------|-------------|\n| `--recursive` | `-r` | Recurse into subdirectories |\n| `--include` | | File patterns to include (e.g., \"*.py,*.js\") |\n| `--exclude` | | File patterns to exclude |\n| `--use-gitignore` | | Respect .gitignore patterns (default: true) |\n| `--format` | `-f` | Output format: `rich`, `json`, `yaml`, `toon`, `text` |\n| `--fail-fast` | `-x` | Stop on first failure |\n| `--semantic` | | Enable LLM-as-judge semantic review |\n| `--security` | | Enable security checks |\n| `--model` | `-m` | LLM model for semantic review |\n| `--verbose` | `-v` | Show detailed validation results for each file |\n| `--show-issues` | `-i` | Show issues for failed files |\n\n### With Ollama (LLM-as-judge)\n\n```bash\n# 1. Install and start Ollama\nollama pull qwen2.5-coder:7b\n\n# 2. Run with semantic review\nvallm validate --file mycode.py --semantic\n```\n\n```python\nfrom vallm import Proposal, validate, VallmSettings\n\nsettings = VallmSettings(\n    enable_semantic=True,\n    llm_provider=\"ollama\",\n    llm_model=\"qwen2.5-coder:7b\",\n)\n\nproposal = Proposal(\n    code=new_code,\n    language=\"python\",\n    reference_code=existing_code,  # optional: compare against reference\n)\nresult = validate(proposal, settings)\n```\n\n## Validation Pipeline\n\n| Tier | Speed | Validators | What it catches |\n|------|-------|-----------|----------------|\n| 1 | ms | syntax, imports | Parse errors, missing modules |\n| 2 | seconds | complexity, security | High CC, dangerous patterns |\n| 3 | seconds | semantic (LLM) | Logic errors, poor practices |\n| 4 | minutes | regression (tests) | Behavioral regressions |\n\nThe pipeline **fails fast** — Tier 1 errors stop execution immediately.\n\n## Configuration\n\nVia environment variables (`VALLM_*`), `vallm.toml`, or `pyproject.toml [tool.vallm]`:\n\n```toml\n# vallm.toml\npass_threshold = 0.8\nreview_threshold = 0.5\nmax_cyclomatic_complexity = 15\nenable_semantic = true\nllm_provider = \"ollama\"\nllm_model = \"qwen2.5-coder:7b\"\n```\n\n## Quality Pipeline (pyqual)\n\nvallm uses **pyqual** — a declarative quality gate system — to ensure code meets all quality standards before shipping.\n\n### Quality Gates\n\n| Gate | Metric | Threshold | Current |\n|------|--------|-----------|---------|\n| Cyclomatic Complexity | cc | ≤ 15 | 3.4 ✅ |\n| Vallm Pass Rate | vallm_pass | ≥ 90% | 97.7% ✅ |\n| Test Coverage | coverage | ≥ 55% | 63.9% ✅ |\n\n### Pipeline Stages\n\n```yaml\n# pyqual.yaml\npipeline:\n  name: quality-loop-with-llx\n  \n  metrics:\n    cc_max: 15\n    vallm_pass_min: 90\n    coverage_min: 55\n  \n  stages:\n    - setup        # Dependency check\n    - analyze      # code2llm analysis\n    - validate     # vallm batch validation\n    - lint         # ruff linting\n    - test         # pytest with coverage\n    - prefact      # Prefactoring (optional)\n    - fix          # Auto-fix with LLX (optional)\n    - verify       # Post-fix validation\n    - push         # Auto-commit \u0026 push\n    - publish      # Build \u0026 publish\n```\n\n### Running the Pipeline\n\n```bash\n# Full pipeline with quality gates\npyqual run\n\n# Check current metrics\npyqual status\n\n# View pipeline logs\npyqual logs\n\n# Validate pyqual.yaml config\npyqual validate\n```\n\n### Publishing to PyPI\n\n```bash\n# Set credentials and publish\nTWINE_USERNAME=__token__ TWINE_PASSWORD=pypi-xxx make publish\n\n# Or publish to TestPyPI\nTWINE_USERNAME=__token__ TWINE_PASSWORD=pypi-xxx make publish-test\n```\n\nWithout credentials, the publish stage gracefully skips with a warning.\n\n## MCP Integration\n\nvallm provides **Model Context Protocol (MCP)** server integration, exposing validation tools as MCP endpoints for LLM tool calling.\n\n### Starting the MCP Server\n\n```bash\n# Start the MCP server from project root\npython3 mcp_server.py\n\n# Or start the packaged module directly\npython3 -m mcp.server.self_server\n```\n\n### Claude Desktop Configuration\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"vallm\": {\n      \"command\": \"python3\",\n      \"args\": [\"/path/to/vallm/mcp_server.py\"],\n      \"env\": {\n        \"PYTHONPATH\": \"/path/to/vallm/src\"\n      }\n    }\n  }\n}\n```\n\n### Available MCP Tools\n\n| Tool | Description | Parameters |\n|------|-------------|------------|\n| `validate_syntax` | Multi-language syntax checking | `code`, `language`, `filename` |\n| `validate_imports` | Import resolution validation | `code`, `language`, `filename` |\n| `validate_security` | Security issue detection | `code`, `language`, `filename` |\n| `validate_code` | Full pipeline validation | `code`, `language`, `filename`, `reference_code`, `enable_*` flags |\n\n### Example Tool Calls\n\n```json\n{\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"validate_security\",\n    \"arguments\": {\n      \"code\": \"eval('1+1')\",\n      \"language\": \"python\"\n    }\n  }\n}\n```\n\n```json\n{\n  \"method\": \"tools/call\", \n  \"params\": {\n    \"name\": \"validate_code\",\n    \"arguments\": {\n      \"code\": \"def test(): pass\",\n      \"language\": \"python\",\n      \"enable_syntax\": true,\n      \"enable_security\": true,\n      \"enable_complexity\": false\n    }\n  }\n}\n```\n\n### Testing MCP Integration\n\n```bash\n# Test all MCP tools\npython3 test_mcp.py\n\n# Quick validation tests\npython3 mcp/tests/quick_test.py\n\n# Test individual tools\nPYTHONPATH=src python3 -c \"from mcp.server._tools_vallm import validate_syntax; print(validate_syntax('print(\\\"hello\\\")', 'python')['verdict'])\"\n\n# Run the complete Docker e2e flow (host build + container-side runner)\nbash mcp/tests/run_e2e.sh\n\n# Run the same e2e flow via single-service docker-compose\nbash mcp/tests/run_e2e.sh --compose\n\n# Run examples\npython3 examples/mcp_demo.py\n```\n\n### Response Format\n\nAll MCP tools return a consistent JSON response:\n\n```json\n{\n  \"success\": true,\n  \"validator\": \"security\",\n  \"score\": 0.3,\n  \"weight\": 1.5,\n  \"confidence\": 0.9,\n  \"verdict\": \"fail\",\n  \"issues\": [\n    {\n      \"message\": \"Use of eval() detected\",\n      \"severity\": \"warning\",\n      \"line\": 1,\n      \"column\": 0,\n      \"rule\": \"security.eval\"\n    }\n  ],\n  \"details\": {}\n}\n```\n\n## Plugin System\n\nWrite custom validators using pluggy:\n\n```python\nfrom vallm.hookspecs import hookimpl\nfrom vallm.scoring import ValidationResult\n\nclass MyValidator:\n    tier = 2\n    name = \"custom\"\n    weight = 1.0\n\n    @hookimpl\n    def validate_proposal(self, proposal, context):\n        # Your validation logic\n        return ValidationResult(validator=self.name, score=1.0, weight=self.weight)\n```\n\nRegister via `pyproject.toml`:\n\n```toml\n[project.entry-points.\"vallm.validators\"]\ncustom = \"mypackage.validators:MyValidator\"\n```\n\n## Multi-Language Support\n\nvallm supports **30+ programming languages** via tree-sitter parsers:\n\n### Auto-Detection\n\n```python\nfrom vallm import detect_language, Language\n\n# Auto-detect from file path\nlang = detect_language(\"main.rs\")  # → Language.RUST\nprint(lang.display_name)  # \"Rust\"\nprint(lang.is_compiled)     # True\n```\n\n### CLI with Auto-Detection\n\n```bash\n# Language auto-detected from file extension\nvallm validate --file script.py      # → Python\nvallm check main.go                   # → Go  \nvallm validate --file lib.rs          # → Rust\n\n# Batch validation with mixed languages\nvallm batch src/ --recursive --include \"*.py,*.js,*.ts,*.go,*.rs\"\n```\n\n### Supported Languages\n\n| Language | Category | Complexity | Syntax |\n|----------|----------|------------|--------|\n| Python | Scripting | ✓ radon + lizard | ✓ ast + tree-sitter |\n| JavaScript | Web/Scripting | ✓ lizard | ✓ tree-sitter |\n| TypeScript | Web/Scripting | ✓ lizard | ✓ tree-sitter |\n| Go | Compiled | ✓ lizard | ✓ tree-sitter |\n| Rust | Compiled | ✓ lizard | ✓ tree-sitter |\n| Java | Compiled | ✓ lizard | ✓ tree-sitter |\n| C/C++ | Compiled | ✓ lizard | ✓ tree-sitter |\n| Ruby | Scripting | ✓ lizard | ✓ tree-sitter |\n| PHP | Web | ✓ lizard | ✓ tree-sitter |\n| Swift | Compiled | ✓ lizard | ✓ tree-sitter |\n| + 20 more via tree-sitter | | ✓ tree-sitter | ✓ tree-sitter |\n\nSee `examples/07_multi_language/` for a comprehensive demo.\n\n## Examples\n\nEach example lives in its own folder with `main.py` and `README.md`. Run all at once:\n\n```bash\ncd examples \u0026\u0026 ./run.sh\n```\n\n### Example Details \u0026 Links\n\n| Example | What it demonstrates | Files | Description |\n|---------|---------------------|-------|-------------|\n| [`01_basic_validation/`](examples/01_basic_validation/) | Default pipeline — good, bad, and complex code | [`main.py`](examples/01_basic_validation/main.py), [`README.md`](examples/01_basic_validation/README.md) | Basic validation with syntax, imports, complexity, and security checks |\n| [`02_ast_comparison/`](examples/02_ast_comparison/) | AST similarity scoring, tree-sitter multi-language parsing | [`main.py`](examples/02_ast_comparison/main.py), [`README.md`](examples/02_ast_comparison/README.md) | Compare code similarity using AST fingerprinting |\n| [`03_security_check/`](examples/03_security_check/) | Security pattern detection (eval, exec, hardcoded secrets) | [`main.py`](examples/03_security_check/main.py), [`README.md`](examples/03_security_check/README.md) | Detect security vulnerabilities and anti-patterns |\n| [`04_graph_analysis/`](examples/04_graph_analysis/) | Import/call graph building and structural diffing | [`main.py`](examples/04_graph_analysis/main.py), [`README.md`](examples/04_graph_analysis/README.md) | Build and analyze code dependency graphs |\n| [`05_llm_semantic_review/`](examples/05_llm_semantic_review/) | Ollama Qwen 2.5 Coder 7B LLM-as-judge review | [`main.py`](examples/05_llm_semantic_review/main.py), [`README.md`](examples/05_llm_semantic_review/README.md) | Semantic code review using LLM |\n| [`06_multilang_validation/`](examples/06_multilang_validation/) | JavaScript and C validation via tree-sitter | [`main.py`](examples/06_multilang_validation/main.py), [`README.md`](examples/06_multilang_validation/README.md) | Multi-language validation examples |\n| [`07_multi_language/`](examples/07_multi_language/) | **Comprehensive multi-language support** — 8+ languages with auto-detection | [`main.py`](examples/07_multi_language/main.py), [`README.md`](examples/07_multi_language/README.md) | Complete multi-language validation demo |\n| [`08_code2llm_integration/`](examples/08_code2llm_integration/) | Project analysis integration with code2llm | [`main.py`](examples/08_code2llm_integration/main.py), [`README.md`](examples/08_code2llm_integration/README.md) | Integration with code2llm analysis tools |\n| [`09_code2logic_integration/`](examples/09_code2logic_integration/) | Call graph analysis with code2logic | [`main.py`](examples/09_code2logic_integration/main.py), [`README.md`](examples/09_code2logic_integration/README.md) | Advanced call graph analysis |\n| [`10_mcp_ollama_demo/`](examples/10_mcp_ollama_demo/) | MCP (Model Context Protocol) demo with Ollama | [`main.py`](examples/10_mcp_ollama_demo/main.py), [`README.md`](examples/10_mcp_ollama_demo/README.md) | Model Context Protocol integration |\n| [`11_claude_code_autonomous/`](examples/11_claude_code_autonomous/) | Autonomous refactoring with Claude Code | [`claude_autonomous_demo.py`](examples/11_claude_code_autonomous/claude_autonomous_demo.py), [`README.md`](examples/11_claude_code_autonomous/README.md) | AI-powered autonomous code refactoring |\n| [`12_ollama_simple_demo/`](examples/12_ollama_simple_demo/) | Simplified Ollama integration example | [`ollama_simple_demo.py`](examples/12_ollama_simple_demo/ollama_simple_demo.py), [`README.md`](examples/12_ollama_simple_demo/README.md) | Basic Ollama LLM integration |\n\n### Running Examples\n\n```bash\n# Run all examples\ncd examples \u0026\u0026 ./run.sh\n\n# Run specific example\npython examples/01_basic_validation/main.py\n\n# Run with validation\nvallm validate --file examples/01_basic_validation/main.py --verbose\n\n# Batch validate all examples\nvallm batch examples/ --recursive --include \"*.py\" --verbose\n```\n\n## Architecture\n\n```\nsrc/vallm/\n├── cli/                    # 🆕 Modular CLI package\n│   ├── __init__.py         # Command registration and app export\n│   ├── command_handlers.py # CLI command implementations\n│   ├── output_formatters.py # Output formatting utilities\n│   ├── settings_builders.py # Settings configuration logic\n│   └── batch_processor.py  # Batch processing logic\n├── cli.py                  # 🆕 Simplified main entry point (9L)\n├── config.py               # pydantic-settings (VALLM_* env vars)\n├── hookspecs.py            # pluggy hook specifications\n├── scoring.py              # Weighted scoring + verdict engine (CC=18 validate function)\n├── core/\n│   ├── languages.py        # Language enum, auto-detection, 30+ languages\n│   ├── proposal.py         # Proposal model\n│   ├── ast_compare.py      # tree-sitter + Python AST similarity\n│   ├── graph_builder.py    # Import/call graph construction\n│   └── graph_diff.py       # Before/after graph comparison\n├── validators/\n│   ├── syntax.py           # Tier 1: ast.parse + tree-sitter (multi-lang)\n│   ├── imports/            # 🆕 Modular import validators\n│   │   ├── base.py         # 🆕 Enhanced base class with shared validate()\n│   │   ├── factory.py      # Validator factory\n│   │   ├── python_imports.py\n│   │   ├── go_imports.py   # 🆕 Uses shared validation logic\n│   │   ├── rust_imports.py # 🆕 Uses shared validation logic\n│   │   └── java_imports.py # 🆕 Uses shared validation logic\n│   ├── complexity.py       # Tier 2: radon (Python) + lizard (16+ langs)\n│   ├── security.py         # Tier 2: patterns + bandit\n│   └── semantic.py         # Tier 3: LLM-as-judge\n└── sandbox/\n    └── runner.py           # subprocess / Docker execution\n```\n\n### 🆕 Code Health Improvements\n\n**Recent Refactoring Achievements**:\n\n✅ **CLI Modularization** - Split 850L god module into focused packages:\n- `cli/command_handlers.py` - Command implementations\n- `cli/output_formatters.py` - Output formatting logic  \n- `cli/settings_builders.py` - Settings configuration\n- `cli/batch_processor.py` - Batch processing logic\n- `cli/__init__.py` - Command registration and app export\n\n✅ **Import Validator Cleanup** - Removed 653L legacy module:\n- Enhanced `BaseImportValidator` with shared validation logic\n- Eliminated duplicate `validate()` methods across language validators\n- Improved maintainability through template method pattern\n\n✅ **Code Deduplication** - Removed 469 lines of duplicated code:\n- Shared validation runners for examples (154 lines saved)\n- Centralized analysis data saving (66 lines saved)\n- Common demo utilities (60 lines saved)\n- LLM response parsing utilities (40 lines saved)\n- Import validator logic consolidation (40 lines saved)\n- Additional utility function consolidation (109 lines saved)\n\n**Updated Code Metrics**:\n\n| Metric | Before | After | Improvement |\n|--------|--------|-------|-------------|\n| God Modules (\u003e500L) | 2 | 0 | ✅ **100% eliminated** |\n| Max Cyclomatic Complexity | 42 | ~18 | ✅ **57% reduction** |\n| Code Duplication | 504 lines | 35 lines | ✅ **93% eliminated** |\n| CLI Module Size | 850 lines | 9 lines | ✅ **99% reduction** |\n\n**Remaining Critical Functions**:\n\n| Function | Location | CC | Status |\n|----------|----------|-----|--------|\n| `validate` | `scoring.py:122` | **18** | 🟡 Acceptable |\n| `_check_lizard` | `complexity.py` | 12 | 🟡 Acceptable |\n| `_parse_response` | `semantic.py` | 12 | 🟡 Acceptable |\n\n## Roadmap\n\n**v0.2 — Completeness** ✅ **MAJOR PROGRESS**\n- ✅ CLI modularization - Split 850L god module into focused packages\n- ✅ Import validator cleanup - Removed 653L legacy module  \n- ✅ Code deduplication - Eliminated 469 lines of duplicate code\n- ✅ God module elimination - 100% reduction in god modules\n- ✅ Complexity reduction - 57% reduction in max cyclomatic complexity\n- Wire pluggy plugin manager (entry_point-based validator discovery)\n- Add LogicalErrorValidator (pyflakes) and LintValidator (ruff)\n- TOML config loading (`vallm.toml`, `[tool.vallm]`)\n- Pre-commit hook integration\n- GitHub Actions CI/CD\n\n**v0.3 — Depth**\n- AST edit distance via apted/zss\n- CodeBERTScore embedding similarity\n- NetworkX cycle detection and centrality in graph analysis\n- RegressionValidator (Tier 4) with pytest-json-report\n- TypeCheckValidator (mypy/pyright)\n- Extract output formatters\n\n**v0.4 — Intelligence**\n- `--fix` auto-repair mode (LLM-based retry loop)\n- hypothesis/crosshair property-based test generation\n- E2B cloud sandbox backend\n- Streaming LLM output\n\nSee [TODO.md](TODO.md) for the full task breakdown.\n\n## Testing\n\n### Running Tests\n\n```bash\n# Run all tests\npytest\n\n# Run specific test categories\npytest tests/test_syntax.py\npytest tests/test_imports.py\npytest tests/test_complexity.py\npytest tests/test_security.py\npytest tests/test_semantic_validation.py\n\n# Run CLI end-to-end tests\npytest tests/test_cli_e2e.py -v\n\n# Run with coverage\npytest --cov=vallm --cov-report=html\n\n# Run performance tests\npytest tests/test_performance.py -v\n```\n\n### Test Files Reference\n\n- [`tests/`](tests/) - Complete test suite\n  - [`conftest.py`](tests/conftest.py) - Test configuration and fixtures\n  - [`test_cli_e2e.py`](tests/test_cli_e2e.py) - End-to-end CLI integration tests\n  - [`test_syntax.py`](tests/test_syntax.py) - Syntax validation tests\n  - [`test_imports.py`](tests/test_imports.py) - Import resolution tests\n  - [`test_complexity.py`](tests/test_complexity.py) - Complexity analysis tests\n  - [`test_security.py`](tests/test_security.py) - Security scanning tests\n  - [`test_semantic_validation.py`](tests/test_semantic_validation.py) - LLM semantic review tests\n  - [`test_languages.py`](tests/test_languages.py) - Language detection tests\n  - [`test_ast_compare.py`](tests/test_ast_compare.py) - AST similarity tests\n  - [`test_graph.py`](tests/test_graph.py) - Graph analysis tests\n  - [`test_plugins.py`](tests/test_plugins.py) - Plugin system tests\n  - [`test_performance.py`](tests/test_performance.py) - Performance benchmarks\n  - [`test_installation.py`](tests/test_installation.py) - Installation tests\n  - [`test_gitignore.py`](tests/test_gitignore.py) - Git ignore pattern tests\n  - [`test_pipeline.py`](tests/test_pipeline.py) - End-to-end pipeline tests\n\n### Test Coverage\n\nCurrent test coverage: **85%** across all modules.\n\n- ✅ Syntax validation: 95% coverage\n- ✅ Import resolution: 87% coverage  \n- ✅ Complexity analysis: 82% coverage\n- ✅ Security scanning: 79% coverage\n- ✅ Semantic validation: 71% coverage\n- ✅ CLI commands: 89% coverage\n\n## License\n\nLicensed under Apache-2.0.\n## Author\n\nTom Sapletta\n## Additional Resources\n\n### Documentation \u0026 Guides\n- [`docs/README.md`](docs/README.md) - Extended documentation\n- [`docs/TESTING.md`](docs/TESTING.md) - Testing guidelines and best practices\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - Contribution guidelines\n- [`CHANGELOG.md`](CHANGELOG.md) - Version history and release notes\n- [`TODO.md`](TODO.md) - Development roadmap and planned features\n\n### Package Configuration\n- [`pyproject.toml`](pyproject.toml) - Project metadata, dependencies, and build configuration\n- [`.gitignore`](.gitignore) - Git ignore patterns (includes .git/ exclusion)\n- [`Dockerfile.test`](Dockerfile.test) - Testing container configuration\n- [`Makefile`](Makefile) - Build and development automation\n\n### CI/CD \u0026 Automation\n- [`.github/workflows/`](.github/workflows/) - GitHub Actions workflows\n  - [`ci.yml`](.github/workflows/ci.yml) - Continuous integration pipeline\n  - [`comprehensive-tests.yml`](.github/workflows/comprehensive-tests.yml) - Full test suite\n  - [`publish.yml`](.github/workflows/publish.yml) - Package publishing to PyPI\n- [`.pre-commit-config.yaml`](.pre-commit-config.yaml) - Pre-commit hooks configuration\n- [`.pre-commit-hooks.yaml`](.pre-commit-hooks.yaml) - Custom pre-commit hooks\n\n### Project Analysis \u0026 Metrics\n- [`project/`](project/) - Analysis outputs and visualizations\n  - [`validation.toon`](project/validation.toon) - Latest validation results\n  - [`project.toon`](project/project.toon) - Project structure analysis\n  - [`flow.toon`](project/flow.toon) - Workflow visualization\n  - [`calls.toon`](project/calls.toon) - Call graph analysis\n  - [`compact_flow.mmd`](project/compact_flow.mmd) - Mermaid flow diagram\n  - [`README.md`](project/README.md) - Project analysis overview\n  - [`analysis.yaml`](project/analysis.yaml) - Detailed analysis data\n  - [`dashboard.html`](project/dashboard.html) - Interactive dashboard\n\n### Development Tools\n- [`scripts/`](scripts/) - Development and maintenance scripts\n  - [`bump_version.py`](scripts/bump_version.py) - Automated version management\n  - [`test_docker_installation.sh`](scripts/test_docker_installation.sh) - Docker environment testing\n- [`project.sh`](project.sh) - Project analysis and validation script\n\n### Examples \u0026 Demos\n- [`examples/`](examples/) - 12 comprehensive examples with README files\n- [`examples/run.sh`](examples/run.sh) - Run all examples script\n- [`examples/README.md`](examples/README.md) - Examples overview and guide\n\n### Source Code Organization\n- [`src/vallm/`](src/vallm/) - Main package source code\n- [`src/vallm/__init__.py`](src/vallm/__init__.py) - Package initialization\n- [`src/vallm/__main__.py`](src/vallm/__main__.py) - Module execution support\n- [`src/vallm/py.typed`](src/vallm/py.typed) - Type checking marker\n\n\u003c!-- taskill:status:start --\u003e\n\n## Status\n\n_Last updated by [taskill](https://github.com/oqlos/taskill) at 2026-04-25 13:48 UTC_\n\n| Metric | Value |\n|---|---|\n| HEAD | `4ac3a46` |\n| Coverage | — |\n| Failing tests | — |\n| Commits in last cycle | 50 |\n\n\u003e Mostly documentation and refactoring work: multiple README/docs updates, added markdown output (with tests), new examples, a version bump, and several refactors extracting and simplifying high-complexity code paths.\n\n\u003c!-- taskill:status:end --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Fvallm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemcod%2Fvallm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemcod%2Fvallm/lists"}