How can we create a (mostly) safe environment for running LLM-based code review? Amidst the hype around AI, security concerns may easily be forgotten. The aim of this POC project was to build a secure context in which LLMs can be used for code reviews. The goal was to be able to review untrusted but proprietary code. The main concerns were: Prompt injection and data or code exfiltration.
The result was a pull request review orchestrator with a small Express/SQLite control UI. For each review it creates an isolated Docker setup with separate containers for code review, infrastructure access via MCP and limited web access via proxy.
A tool to generate test reports from data input sources such as X-Unit xml reports, miniHIL proprietary formats (for execution and requirements traces) and pregenerated plant uml diagrams (svg). Java was chosen for the generator and data preprocessing since proprietary parts which had to be integrated were already implemented in Java. The Java CLI interface generates data for a self contained React based single page app which can be integrated into existing CI solutions or be viewed in the browser. After generation no backend is required.
The front end built for the PROTOS miniHIL, a small hardware-in-the-loop test rig. It is a React (Next.js) app that lets you watch a test run on the hardware as it happens: live logs, signal traces and execution state, all streamed from the device while the test executes. The harder problem behind the views was the data path and performance. A test run produces a lot of data on an MCU. Additionally, the goal was to allow the user to open multiple browser windows showing different aspects of the test run.
The data comes off the miniHIL hardware itself, an STM32-based MCU system that runs the test cases in real time. The hardware is connected to the PC via USB (1.1 full speed device). A Java backend on the PC owns that USB link, deserializes the low-level protocols, and exposes the result to the GUI over a WebSocket. Inside the browser a single shared worker holds the websocket connection and fans the decoded stream out to every open window.