MSVC Compiler

Windows compilation verification via SSH

Overview

The MSVC verifier (JointVerifier) compiles generated C++ code on a Windows build server via SSH. This is the primary verifier for MVR mode training.

Configuration

YAML Configuration

windows:
  host: "10.0.0.152"
  port: 22
  user: "keys"
  key_path: "~/.ssh/win"
  
  compiler:
    type: "msvc"
    vcvars_path: "C:\\Program Files\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Auxiliary\\Build\\vcvars64.bat"

Python Configuration

from malagent.verifiers import JointVerifier

verifier = JointVerifier(
    win_host="10.0.0.152",
    win_user="keys",
    win_key="~/.ssh/win",
    vcvars_path="C:\\Program Files\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Auxiliary\\Build\\vcvars64.bat",
    timeout=30,
    # New features
    enable_lint=True,
    track_metrics=True,
    binary_cache_dir="./binary_cache"
)

Features

Lint Pre-Check

Fast rejection of obviously broken code before SSH compilation:

verifier = JointVerifier(
    enable_lint=True  # Default
)

Checks for:

  • Missing #include <windows.h>
  • Unbalanced braces {} and parentheses ()
  • Missing main() or WinMain() function
  • Unclosed string literals

Metrics Tracking

Collect error analytics for dataset refinement:

verifier = JointVerifier(
    track_metrics=True,
    log_failed_samples=True  # Store failed samples
)

# After training
verifier.print_stats()
# Output:
# Verifier Statistics
# ====================
# Total verifications: 1000
# Format failures: 50 (5.0%)
# Compilation failures: 350 (35.0%)
# Evaded: 600 (60.0%)
#
# Metrics:
#   Avg compile time: 2.34s
#   Lint failures: 45
#   Time saved by lint: 105.3s
#   Top errors:
#     C2065: 89
#     C2143: 45
#     C2059: 23

Binary Caching

Persist compiled binaries locally:

verifier = JointVerifier(
    binary_cache_dir="./binary_cache"
)

result = verifier.verify(prompt, completion)
if result.success:
    # Binary is cached locally at:
    print(result.metadata['binary_path'])
    # ./binary_cache/a3f2c8b1d4e5.exe

This enables:

  • Re-testing against Elastic later
  • Sample analysis and debugging
  • Building verified sample collections

Reward Mapping

OutcomeReward
Compiles clean1.0
Compiles with warnings0.7 (if warn_as_error=True)
Compile error0.1
Format failure0.0

Usage

Basic Usage

from malagent.verifiers import JointVerifier

verifier = JointVerifier(config_path="configs/windows_connection.yaml")
result = verifier.verify(prompt, completion)
print(f"Compiled: {result.success}, Reward: {result.reward}")

Batch Verification

results = verifier.verify_batch(
    completions=[code1, code2, code3],
    prompts=[prompt1, prompt2, prompt3]
)

for result in results:
    print(f"Reward: {result.reward}")

CLI Usage

# Single file verification
malagent verify --code sample.cpp

# RAFT training with MSVC
malagent raft train --mode mvr --language msvc

Common Errors

Error CodeCauseFix
C2065Undeclared identifierAdd missing #include or declaration
C2143Syntax errorCheck for missing semicolons or brackets
C2059Unexpected tokenReview expression syntax
LNK2019Unresolved externalLink required library
LNK1120Unresolved externalsCheck all function implementations

Troubleshooting

SSH Connection Failed

Error: Connection refused
  1. Verify Windows OpenSSH server is running
  2. Check firewall allows port 22
  3. Test with: ssh -i ~/.ssh/win keys@10.0.0.152

MSVC Not Found

Error: 'cl' is not recognized
  1. Install Visual Studio Build Tools
  2. Verify vcvars64.bat path in configuration
  3. Test on Windows: "C:\path\to\vcvars64.bat" && cl /?

Compilation Timeout

Error: Compilation timeout (>30s)
  1. Increase timeout: timeout=60
  2. Check Windows server load
  3. Simplify generated code (reduce template instantiations)