diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml
index 3b2ae7d..f6f125d 100644
--- a/.github/workflows/build-linux.yml
+++ b/.github/workflows/build-linux.yml
@@ -7,6 +7,15 @@ name: Build Linux
# release-selfrelease.yml: only tag pushes (v*) or manual dispatches with
# publish checked upload to R2 (channels "linux" / "linux-arm64"); PRs get a
# pack dry-run with the packages as artifacts.
+#
+# Docs-only changes (markdown, website/, docs/) skip the expensive
+# build/test/pack steps via the `changes` gate job below (see RUN_BUILD in the
+# build job) — the same pattern as build-msix.yml and release-selfrelease.yml.
+# The gate is deliberately on the STEPS, not the job: a skipped matrix job
+# reports a single "build" check, which does not satisfy the required per-arch
+# checks ("build (x64)"/"build (arm64)") — a job whose steps all skip reports
+# success under the real leg names. (Trigger-level paths-ignore is worse
+# still: no check runs at all, so required checks block merging.)
on:
push:
tags: ['v*']
@@ -28,7 +37,36 @@ permissions:
contents: read
jobs:
+ # Gate job: decides whether the diff contains anything but docs. Cheap
+ # (ubuntu, seconds); the build job below keys off its output.
+ changes:
+ runs-on: ubuntu-latest
+ outputs:
+ code: ${{ steps.diff.outputs.code }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - id: diff
+ shell: bash
+ run: |
+ if [ "${{ github.event_name }}" = "pull_request" ]; then
+ BASE="${{ github.event.pull_request.base.sha }}"
+ elif [ -n "${{ github.event.before }}" ] && [ "${{ github.event.before }}" != "0000000000000000000000000000000000000000" ]; then
+ BASE="${{ github.event.before }}"
+ else
+ # No parent to diff against (e.g. manual dispatch or first push) — build.
+ echo "code=true" >> "$GITHUB_OUTPUT"
+ exit 0
+ fi
+ if git diff --name-only "$BASE" HEAD | grep -qvE '\.md$|^website/|^docs/'; then
+ echo "code=true" >> "$GITHUB_OUTPUT"
+ else
+ echo "code=false" >> "$GITHUB_OUTPUT"
+ fi
+
build:
+ needs: changes
strategy:
# One arch failing must not cancel the other; publish only runs when
# both succeed anyway (same pattern as release-selfrelease.yml).
@@ -39,17 +77,24 @@ jobs:
runs-on: ${{ matrix.arch == 'x64' && 'ubuntu-24.04' || 'ubuntu-24.04-arm' }}
env:
ONNXRUNTIME_DIR: ${{ github.workspace }}/onnxruntime
+ # Manual dispatches and code diffs always build; docs-only PRs skip the
+ # steps below (the job still reports success under the per-arch check
+ # names, keeping the branch ruleset satisfied).
+ RUN_BUILD: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.code == 'true' }}
steps:
- name: Checkout
+ if: env.RUN_BUILD == 'true'
uses: actions/checkout@v4
- name: Resolve version from version.txt
+ if: env.RUN_BUILD == 'true'
run: |
version=$(tr -d '[:space:]' < windows/version.txt)
echo "VERSION_FROM_VERSION_TXT=$version" >> "$GITHUB_ENV"
echo "Building version $version"
- name: Install build + test dependencies
+ if: env.RUN_BUILD == 'true'
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake ninja-build pkg-config \
@@ -60,6 +105,7 @@ jobs:
# onnxruntime has no apt package; official tarball per arch, same as
# linux/README.md documents for local builds.
- name: Download onnxruntime
+ if: env.RUN_BUILD == 'true'
run: |
mkdir -p "$ONNXRUNTIME_DIR"
rid="${{ matrix.arch == 'x64' && 'x64' || 'aarch64' }}"
@@ -67,11 +113,13 @@ jobs:
| tar xz -C "$ONNXRUNTIME_DIR" --strip-components=1
- name: Set up Python
+ if: env.RUN_BUILD == 'true'
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install test dependencies
+ if: env.RUN_BUILD == 'true'
run: pip install -r tests/requirements.txt
# The engine refuses to serve (proxy ports stay closed) until the NER
@@ -81,6 +129,7 @@ jobs:
# the gitignored weights are downloaded, from the same R2 models
# endpoint the app itself uses. Cached across runs.
- name: Cache ONNX model weights
+ if: env.RUN_BUILD == 'true'
id: model-cache
uses: actions/cache@v4
with:
@@ -88,7 +137,7 @@ jobs:
key: onnx-model-ner-${{ runner.arch }}-v1
- name: Stage model files (cache miss only)
- if: steps.model-cache.outputs.cache-hit != 'true'
+ if: env.RUN_BUILD == 'true' && steps.model-cache.outputs.cache-hit != 'true'
run: |
dest=~/.local/share/agentredactor/models
mkdir -p "$dest/onnx"
@@ -99,6 +148,7 @@ jobs:
https://api.agentredactor.negativestarinnovators.com/models/model_quantized.onnx_data
- name: Build (dev config, updater off)
+ if: env.RUN_BUILD == 'true'
run: |
cmake -S linux -B linux/build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
@@ -110,12 +160,15 @@ jobs:
# and tests/migration both ship a top-level conftest.py and a shared
# module name breaks a combined run.
- name: Run CLI tests
+ if: env.RUN_BUILD == 'true'
run: python -m pytest tests/cli -q
- name: Run migration tests
+ if: env.RUN_BUILD == 'true'
run: python -m pytest tests/migration -q
- name: Run Linux tests (offscreen GUI smoke)
+ if: env.RUN_BUILD == 'true'
run: python -m pytest tests/linux -q -m "not atspi"
# The AT-SPI suite (tests/linux/test_gui_atspi.py) drives the real GUI
@@ -124,6 +177,7 @@ jobs:
# for the a11y bus. The gi/Atspi bindings come from the distro packages
# above; PYTHONPATH exposes them to the setup-python interpreter.
- name: Run Linux GUI tests (AT-SPI, Xvfb)
+ if: env.RUN_BUILD == 'true'
run: |
PYTHONPATH=/usr/lib/python3/dist-packages \
dbus-run-session -- xvfb-run -a -s "-screen 0 1280x800x24" \
@@ -132,7 +186,7 @@ jobs:
# On AT-SPI failures upload the per-test GUI logs and the accessibility
# tree dumps the driver writes on lookup timeouts.
- name: Upload AT-SPI failure diagnostics
- if: failure()
+ if: env.RUN_BUILD == 'true' && failure()
uses: actions/upload-artifact@v4
with:
name: atspi-diagnostics-${{ matrix.arch }}
@@ -144,6 +198,7 @@ jobs:
retention-days: 14
- name: Set up .NET (for vpk)
+ if: env.RUN_BUILD == 'true'
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
@@ -151,17 +206,20 @@ jobs:
# Pinned to the Velopack library version vendored by
# linux/fetch-velopack.sh — keep the two in sync.
- name: Install vpk 1.2.0 (Velopack CLI)
+ if: env.RUN_BUILD == 'true'
run: dotnet tool install -g vpk --version 1.2.0
# build-release.sh derives the vpk runtime/channel from the host arch
# (linux-x64/'linux', linux-arm64/'linux-arm64').
- name: Build and pack AppImage (build-release.sh)
+ if: env.RUN_BUILD == 'true'
env:
ONNXRUNTIME_INCLUDE_DIR: ${{ github.workspace }}/onnxruntime/include
ONNXRUNTIME_LIB: ${{ github.workspace }}/onnxruntime/lib/libonnxruntime.so
run: linux/build-release.sh
- name: Verify Velopack output
+ if: env.RUN_BUILD == 'true'
run: |
dir=linux/build-release/velopack
channel="${{ matrix.arch == 'x64' && 'linux' || 'linux-arm64' }}"
@@ -176,6 +234,7 @@ jobs:
# build time. The staged AppDir is the packed content, so checking it
# covers the shipped AppImage.
- name: Verify xcb platform plugin dependencies
+ if: env.RUN_BUILD == 'true'
run: |
plugin=linux/build-release/appdir/plugins/platforms/libqxcb.so
test -f "$plugin" || { echo "xcb plugin missing from AppDir"; exit 1; }
@@ -188,7 +247,7 @@ jobs:
echo "xcb plugin dependencies OK"
- name: Upload Velopack output artifact
- if: always()
+ if: always() && env.RUN_BUILD == 'true'
uses: actions/upload-artifact@v4
with:
name: AgentRedactor-velopack-linux-${{ matrix.arch }}
@@ -200,6 +259,7 @@ jobs:
# Runs after packing since it consumes the pack output; skips locally
# when vpk or the pack output is missing.
- name: Run update E2E (AppImage self-update)
+ if: env.RUN_BUILD == 'true'
run: python -m pytest tests/linux/test_update_feed.py -q
# Grab the previous LIVE release's AppImage from R2 for the upgrade E2E.
@@ -207,6 +267,7 @@ jobs:
# build. Skipped gracefully when the channel has no live release yet, or
# when the live version is not older than this build's version.
- name: Download previous live AppImage from R2
+ if: env.RUN_BUILD == 'true'
id: prevappimage
run: |
channel="${{ matrix.arch == 'x64' && 'linux' || 'linux-arm64' }}"
@@ -269,7 +330,7 @@ jobs:
echo "appimage_path=$(pwd)/prev-appimage/$appimage" >> "$GITHUB_OUTPUT"
- name: Upgrade E2E (previous live release -> this build)
- if: steps.prevappimage.outputs.found == 'true'
+ if: env.RUN_BUILD == 'true' && steps.prevappimage.outputs.found == 'true'
env:
AGENTREDACTOR_UPGRADE_TEST: "1"
AGENTREDACTOR_CHANNEL: ${{ matrix.arch == 'x64' && 'linux' || 'linux-arm64' }}
diff --git a/README.md b/README.md
index 6556b5b..ea2abee 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,23 @@
# Agent Redactor
-A desktop app for Windows and Linux that sits between AI coding agents and
-their LLM endpoints as a local proxy, redacting PII (names, emails, phone
-numbers, secrets, and more) from outbound requests before they leave your
-machine — and un-redacting the responses coming back.
+A local privacy proxy for AI coding agents, with a desktop app on Windows and
+Linux. It sits between your agents and their LLM endpoints, redacting PII
+(names, emails, phone numbers, secrets, and more) from outbound requests
+before they leave your machine — and un-redacting the responses coming back.
-- Windows: WinUI 3 (C++/WinRT) desktop app, self-contained Windows App SDK
-- Local HTTP proxy with on-device ONNX NER model — no cloud calls for detection
+- Local HTTP proxy with an on-device ONNX NER model — no cloud calls for detection
- Custom keyword and regex redaction rules on top of model-based PII detection
+- Works with any agent that can point at a local proxy — Claude Code, Codex, OpenClaw, OpenCode, Hermes (guides below)
- Localized UI in 53 languages
-- Distributed via the Microsoft Store (Windows MSIX) and a self-release channel
- (Velopack, with built-in auto-updates) for Windows and Linux
+- Per-user install — no admin or root required; on headless Linux the installer sets up a systemd user service
+- Auto-updates via the Microsoft Store or the built-in Velopack updater
**Website:**
-## Documentation
-
-Step-by-step integration guides for the supported AI coding agents are on the
-website:
-
-- [Claude Code](https://agentredactor.negativestarinnovators.com/claude-code.html)
-- [Codex](https://agentredactor.negativestarinnovators.com/codex.html)
-- [OpenClaw](https://agentredactor.negativestarinnovators.com/openclaw.html)
-- [OpenCode](https://agentredactor.negativestarinnovators.com/opencode.html)
-- [Hermes](https://agentredactor.negativestarinnovators.com/hermes.html)
-
## Install
+### Windows
+
**Microsoft Store** (x64 and ARM64; updates via the Store):
@@ -36,41 +27,67 @@ website:
iex "& { $(irm https://api.agentredactor.negativestarinnovators.com/install.ps1) }"
```
-The installer picks the native build for your architecture (falling back to the
-x64 build on ARM64 if no native package is published yet) and installs per-user
-under `%LOCALAPPDATA%\AgentRedactor`. Self-release builds are unsigned for now —
-Windows SmartScreen may warn on first run.
+The installer picks the native build for your architecture (falling back to
+the x64 build on ARM64 if no native package is published yet) and installs
+per-user under `%LOCALAPPDATA%\AgentRedactor`. Self-release builds are
+unsigned for now — Windows SmartScreen may warn on first run.
+
+### Linux
-**Linux** (x64 and ARM64; per-user AppImage install). Run in a terminal:
+(x64 and ARM64; per-user AppImage install). Run in a terminal:
```bash
curl -fsSL https://api.agentredactor.negativestarinnovators.com/install.sh | bash
```
-The installer detects your architecture, places the AppImage in
-`~/Applications`, and symlinks the `agentredactor` CLI into `~/.local/bin`.
-With a display it starts the GUI; on a headless machine it instead installs a
-systemd user service (starts at boot), downloads the AI model, and confirms
-with `agentredactor status`. Works under WSL as well (GUI via WSLg, headless
-otherwise). Remove with `agentredactor uninstall`.
+The installer detects your architecture and:
+
+- places the AppImage in `~/Applications` and symlinks the `agentredactor` CLI into `~/.local/bin`
+- with a display, starts the GUI; on a headless machine it instead installs a
+ systemd user service (starts at boot, survives logout), downloads the AI
+ model, and confirms with `agentredactor status`
+- works under WSL as well (GUI via WSLg, headless otherwise)
-Linux has no automatic update prompt: `agentredactor status` reports when a
-newer release exists, then run `agentredactor update` and restart to apply
-(`systemctl --user restart agentredactor` on headless installs).
+Remove with `agentredactor uninstall`.
+
+**Updates.** Linux GUI installs self-update in-app, like Windows: the app
+checks at startup and offers "Restart now / later" once an update is
+downloaded (Settings also has a "Check for updates" button). Headless installs
+have no GUI prompt — `agentredactor status` reports when a newer release
+exists, then run `agentredactor update` and
+`systemctl --user restart agentredactor` to apply.
+
+## Documentation
+
+Step-by-step integration guides for the supported AI coding agents are on the
+website:
+
+- [Claude Code](https://agentredactor.negativestarinnovators.com/claude-code.html)
+- [Codex](https://agentredactor.negativestarinnovators.com/codex.html)
+- [OpenClaw](https://agentredactor.negativestarinnovators.com/openclaw.html)
+- [OpenCode](https://agentredactor.negativestarinnovators.com/opencode.html)
+- [Hermes](https://agentredactor.negativestarinnovators.com/hermes.html)
## Repository layout
| Path | Contents |
|---|---|
-| `windows/` | The WinUI 3 app (C++), build scripts, models, resources |
-| `core/` | OS-agnostic C++ core (HTTP proxy, ONNX NER, regex/redaction engines) shared by all platform frontends; CMake scaffolding, currently built via the Windows project |
-| `cloudflare/` | The Cloudflare worker + R2 behind the self-release channel (`/install.ps1`, `/updates`, `/models`) |
-| `tests/` | GUI end-to-end tests (FlaUI + pytest + mock LLM) and self-release install/upgrade E2E |
+| `windows/` | The Windows app (WinUI 3, C++/WinRT), build scripts, models, resources, MSIX packaging |
+| `linux/` | The Linux app (Qt 6 GUI plus engine/CLI build), AppImage packaging, systemd user unit |
+| `core/` | OS-agnostic C++ core (HTTP proxy, ONNX NER, regex/redaction engines, CLI) shared by the platform frontends; built by both the Windows and Linux projects |
+| `cloudflare/` | The Cloudflare worker + R2 behind the self-release channel (`/install.ps1`, `/install.sh`, `/updates`, `/models`) |
+| `website/` | The website with the agent integration guides, translated into every supported language |
+| `docs/` | Design and spec documents (Linux implementation spec, port plan) |
+| `tests/` | pytest suites: cross-platform `cli/` and `migration/`, Linux GUI tests in `linux/` (AT-SPI), Windows GUI end-to-end tests in `gui/` (FlaUI + mock LLM), self-release install/upgrade E2E |
| `third_party_tests/` | Integration tests driving real third-party agent CLIs through the proxy |
-| `scripts/` | PowerShell helpers that configure third-party clients for the integration tests |
-| `.github/workflows/` | CI: MSIX build + package tests, self-release (Velopack) build/test/publish, worker deploy |
+| `scripts/` | Build/release helpers and scripts that configure third-party clients for the integration tests |
+| `.github/workflows/` | CI: MSIX build + package tests, self-release (Velopack) build/test/publish for Windows and Linux, worker deploy |
+
+## Building
-## Prerequisites
+### Windows
+
+Prerequisites:
- Windows 10/11, x64 or ARM64
- Visual Studio 2022 (or Build Tools) with the *Desktop development with C++* workload
@@ -87,8 +104,6 @@ newer release exists, then run `agentredactor update` and restart to apply
[Releases](https://github.com/Negative-Star-Innovators/AgentRedactor/releases) page and
place it in `windows\models\onnx\`.
-## Building
-
Quick build for local development (EXE only, no packaging):
```powershell
@@ -121,23 +136,67 @@ cd windows
```
Releases are published by pushing a `v*` tag — the Self-Release workflow builds,
-tests and uploads both channels to R2 (see `cloudflare/README.md`).
+tests and uploads both Windows channels to R2 (see `cloudflare/README.md`).
+
+### Linux
+
+Prerequisites (Ubuntu 24.04):
+
+```bash
+sudo apt install -y build-essential cmake ninja-build pkg-config \
+ libsecret-1-dev libcurl4-openssl-dev libssl-dev nlohmann-json3-dev \
+ qt6-base-dev qt6-l10n-tools libgl1-mesa-dev patchelf
+
+# onnxruntime is not packaged in apt; use the official x64 tarball
+# (developed/tested against 1.29.0; on ARM64 use the aarch64 tarball):
+mkdir -p ~/onnxruntime
+curl -sL https://github.com/microsoft/onnxruntime/releases/download/v1.29.0/onnxruntime-linux-x64-1.29.0.tgz \
+ | tar xz -C ~/onnxruntime --strip-components=1
+```
+
+The engine also needs the NER model files: `config.json`, `tokenizer.json`,
+`viterbi_calibration.json` and `onnx/model_quantized.onnx` live in
+`windows/models/`; the ~1.6 GB `onnx/model_quantized.onnx_data` weights are
+downloaded automatically on first run.
+
+Build the GUI and engine/CLI:
+
+```bash
+cd linux
+cmake -B build -G Ninja \
+ -DONNXRUNTIME_INCLUDE_DIR=~/onnxruntime/include \
+ -DONNXRUNTIME_LIB=~/onnxruntime/lib/libonnxruntime.so
+cmake --build build
+```
+
+Release packaging (Velopack AppImage, produced under
+`linux/build-release/velopack/`) is `linux/build-release.sh` — it needs the
+.NET SDK and the pinned `vpk` tool. See `linux/README.md` for packaging,
+publishing and running the AppImage. Linux releases publish the same way as
+Windows: push a `v*` tag and the Build Linux workflow builds, tests and
+uploads both channels to R2.
## Tests
-See `tests/README.md` and `third_party_tests/README.md`. In short:
+The suites live in `tests/` (see `tests/README.md`) and `third_party_tests/`
+(see `third_party_tests/README.md`). The cross-platform suites (`cli/`,
+`migration/`) and the Linux suite (`linux/`) run in CI on every PR; the
+`linux/` AT-SPI GUI tests need a display (CI runs them under Xvfb + D-Bus —
+see `linux/README.md`):
-```powershell
+```bash
cd tests
-pip install -r requirements.txt
-pytest -v gui/
+python -m pytest cli -q
+python -m pytest migration -q
+python -m pytest linux -q
```
-The tests drive the real application UI (FlaUI) and therefore require an
-interactive Windows desktop session — in CI they run on GitHub-hosted runners
-(`windows-latest` and `windows-11-arm`, which provide one) via the
-workflow-dispatch **Tests** workflow, or locally on any Windows desktop.
-Third-party integration tests additionally need an
+The Windows GUI end-to-end tests in `tests/gui/` drive the real application UI
+(FlaUI) and therefore require an interactive Windows desktop session — in CI
+they run on GitHub-hosted runners (`windows-latest` and `windows-11-arm`,
+which provide one) via the workflow-dispatch **Tests** workflow, or locally on
+any Windows desktop. The dispatched Tests workflow also runs the CLI suite on
+Windows. Third-party integration tests additionally need an
OpenRouter API key (copy `third_party_tests\.env.example` to `.env`).
## License
diff --git a/linux/README.md b/linux/README.md
index 7976c66..e7457b1 100644
--- a/linux/README.md
+++ b/linux/README.md
@@ -1,5 +1,9 @@
# Agent Redactor — Linux build
+For installing and *using* Agent Redactor (end users), see the
+[root README](../README.md) — this document covers building and developing
+on Linux.
+
Build the engine/CLI (`agentredactor`) and the Qt GUI (`agentredactor-gui`)
on Linux:
@@ -24,8 +28,8 @@ cmake --build build
The engine also needs the NER model files. `config.json`, `tokenizer.json`,
`viterbi_calibration.json` and `onnx/model_quantized.onnx` live in
`windows/models/`; the ~1.6 GB `onnx/model_quantized.onnx_data` weights are
-downloaded automatically on first run (or grab them from the models endpoint
-used by the Windows CI).
+downloaded automatically on first run (or grab them directly from
+).
Run the tests from the repo root (one pytest process per suite — the suites
share the `conftest` module name and cannot be collected together):
@@ -199,3 +203,7 @@ Test hooks (self-release builds only, same contract as Windows):
- `tests/linux/test_update_from_live.py` — downloads the previous live AppImage
from R2 and asserts it upgrades to the just-built release. Wired into the
`build-linux.yml` workflow.
+
+## License
+
+MIT — see [LICENSE](../LICENSE).
diff --git a/windows/README.md b/windows/README.md
index 7e5ecba..5fc2ace 100644
--- a/windows/README.md
+++ b/windows/README.md
@@ -22,6 +22,7 @@ A native Windows C++ desktop application that acts as an intelligent HTTP proxy
- **System Tray**: Runs minimized in the system tray; auto-start with Windows.
- **Native Win32 GUI**: No WebView2 — pure native C++ with RichEdit colored logs.
- **Stats & Logs**: Per-profile statistics and colored logs (blue = user→proxy, green = proxy→LLM, orange = LLM→proxy, purple = proxy→user).
+- **Localized UI**: The app is translated into 53 languages (the shared list lives in `../core/include/constants.h`).
- **Two distribution channels**: Microsoft Store MSIX, and a self-updating Velopack self-release channel (`version.txt` is the version source of truth).
## Project Structure
@@ -31,7 +32,7 @@ windows/
├── src/ # C++ source files
├── include/ # C++ headers
├── resources/ # Icons, manifest, RC file
-├── models/ # OpenAI Privacy Filter ONNX model (copied from parent project)
+├── models/ # ONNX NER model files (the ~1.6 GB weights are downloaded separately — see Build Instructions)
├── CMakeLists.txt # CMake build config
├── vcpkg.json # vcpkg dependencies
├── Package.appxmanifest # MSIX manifest
@@ -46,10 +47,11 @@ windows/
ONNX weights inside the package and contains no self-update code.
- **Self-release (Velopack)** — built with `.\build-selfrelease.ps1` (x64).
The installer is produced by `vpk pack` into `build\velopack\`; the large
- model weights are downloaded on first run from the `models-v1` GitHub
- release into `%LOCALAPPDATA%\windows\models`, and app updates are
- delivered from `api.agentredactor.negativestarinnovators.com` via the
- bundled Velopack `Update.exe`. The version comes from `version.txt`.
+ model weights are downloaded on first run from
+ `api.agentredactor.negativestarinnovators.com/models` into
+ `%LOCALAPPDATA%\AgentRedactor\models`, and app updates are
+ delivered from the same host via the bundled Velopack `Update.exe`. The
+ version comes from `version.txt`.
## Build Requirements
@@ -57,7 +59,7 @@ windows/
- Visual Studio 2022 with C++ workload
- CMake 3.20+
- vcpkg (integrated with CMake)
-- ONNX Runtime model files (from `windows-app-openai/models`)
+- The ONNX model weights in `models\onnx\` (~1.6 GB — downloaded in step 1)
## Dependencies (vcpkg)
@@ -72,11 +74,11 @@ windows/
### 1. Ensure model files are present
-Copy or symlink the ONNX model from the existing project:
-
-```powershell
-Copy-Item -Recurse ..\windows-app-openai\models .\windows\models
-```
+The repo ships everything under `models\` except the ~1.6 GB
+`models\onnx\model_quantized.onnx_data` weights. Download them from the
+[Releases](https://github.com/Negative-Star-Innovators/AgentRedactor/releases)
+page (or `https://api.agentredactor.negativestarinnovators.com/models/model_quantized.onnx_data`)
+and place the file in `models\onnx\`.
### 2. Configure with CMake
@@ -92,7 +94,12 @@ cmake .. -DCMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake
cmake --build . --config Release
```
-### 4. Package (MSI + MSIX)
+For a quick local development build (EXE only, no packaging), run
+`.\buildquick.ps1` from the `windows` folder.
+
+### 4. Package (MSIX)
+
+From the `windows` folder:
```powershell
.\build.ps1
@@ -150,4 +157,4 @@ For each incoming response:
## License
-Proprietary — Agent Redactor Project.
+MIT — see [LICENSE](../LICENSE).