Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
7b4e2ae
Cache verified digests so switches skip the hash pass
vinniefalco Aug 28, 2026
760d6fe
Run llama-server children at below-normal priority
vinniefalco Aug 28, 2026
490e3e0
Recognize Gemma-4's native tool dialect
vinniefalco Aug 28, 2026
fb152ee
Add runtime build boundary rule to AGENTS.md
vinniefalco Aug 29, 2026
bdab035
Make digest-marker persistence best-effort
vinniefalco Aug 29, 2026
0c64d33
Extract tool contract into new promptforge-tools crate
vinniefalco Aug 29, 2026
87b5e17
Extract WebSearch provider into promptforge-web-search crate
vinniefalco Aug 29, 2026
2703f37
Extract transcription engine into promptforge-transcribe
vinniefalco Aug 29, 2026
3956261
Extract desktop shell into promptforge-desktop-shell
vinniefalco Aug 29, 2026
67a53d5
Add build-time CUDA llama-server bundle for the gateway
vinniefalco Aug 29, 2026
0a647a4
Stage the embedded CUDA llama-server bundle at runtime
vinniefalco Aug 29, 2026
0cb6fb7
Read compiler identity from CMakeCXXCompiler.cmake
vinniefalco Aug 29, 2026
5ad7317
Gate archive-only code out of the embedded CUDA build
vinniefalco Aug 29, 2026
0568a22
Add speculative and multimodal companion configuration
vinniefalco Aug 29, 2026
75bdcd0
Provision speculative and multimodal companions at launch
vinniefalco Aug 29, 2026
667a124
Add opt-in live CUDA proof and local child diagnostics
vinniefalco Aug 29, 2026
d8b89c4
Fix private intra-doc links in app.rs doc comments
vinniefalco Aug 29, 2026
1646009
Fix CUDA DLL probes and live-test diagnostics
vinniefalco Aug 29, 2026
1a15a9e
Enable GGML_CUDA_FA_ALL_QUANTS to fix CPU fallback
vinniefalco Aug 29, 2026
8dbd59a
Imply images capability from multimodal projector
vinniefalco Aug 29, 2026
508db1e
Exclude gateway from blanket CI, add CUDA workflow
vinniefalco Aug 29, 2026
f1894e3
Exclude promptforge-transcribe from --all-features CI runs
vinniefalco Aug 29, 2026
59d3567
Add menubar hover rollover to switch the open menu
vinniefalco Aug 29, 2026
936198b
Close the menu when the window loses focus
vinniefalco Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 62 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,56 @@ jobs:
- name: Cache cargo
uses: Swatinem/rust-cache@v2

- uses: actions/setup-node@v4
with:
node-version: 22

- name: Install UI dependencies
working-directory: crates/promptforge-ws-server/ui
run: npm ci

- name: Format
run: cargo fmt --all --check

# promptforge-gateway and promptforge-transcribe are excluded from the
# blanket commands: --all-features would enable workshop-cuda and the
# transcription engine's cuda feature, which need a CUDA Toolkit these
# runners do not have. Their non-CUDA surfaces are exercised by the
# dedicated steps below.
- name: Clippy
run: cargo clippy --workspace --exclude promptforge-ws --exclude promptforge-ws-server --all-targets --all-features -- -D warnings
run: cargo clippy --workspace --exclude promptforge-ws --exclude promptforge-ws-server --exclude promptforge-desktop-shell --exclude promptforge-gateway --exclude promptforge-transcribe --all-targets --all-features -- -D warnings

- name: Test
run: cargo test --locked --workspace --exclude promptforge-ws --exclude promptforge-ws-server --all-features
run: cargo test --locked --workspace --exclude promptforge-ws --exclude promptforge-ws-server --exclude promptforge-desktop-shell --exclude promptforge-gateway --exclude promptforge-transcribe --all-features

- name: Doctests
run: cargo test --workspace --exclude promptforge-ws --exclude promptforge-ws-server --doc
run: cargo test --workspace --exclude promptforge-ws --exclude promptforge-ws-server --exclude promptforge-desktop-shell --exclude promptforge-gateway --exclude promptforge-transcribe --doc

- name: Docs
env:
RUSTDOCFLAGS: -D warnings
run: cargo doc --workspace --no-deps --all-features --exclude promptforge-ws --exclude promptforge-ws-server
run: cargo doc --workspace --no-deps --all-features --exclude promptforge-ws --exclude promptforge-ws-server --exclude promptforge-desktop-shell --exclude promptforge-gateway --exclude promptforge-transcribe

# The transcription engine without its cuda feature: whisper then builds
# its CPU backend, which needs no toolkit.
- name: Clippy (transcribe)
run: cargo clippy -p promptforge-transcribe --all-targets -- -D warnings

- name: Test (transcribe)
run: cargo test --locked -p promptforge-transcribe

- name: Docs (transcribe)
env:
RUSTDOCFLAGS: -D warnings
run: cargo doc --no-deps -p promptforge-transcribe

# The workshop feature hosts the ws-server UI; its build script bundles
# the UI with esbuild, which needs the node_modules installed above.
- name: Clippy (gateway)
run: cargo clippy -p promptforge-gateway --all-targets --features workshop -- -D warnings

- name: Test (gateway)
run: cargo test --locked -p promptforge-gateway --features workshop

check-workshop:
runs-on: windows-latest
Expand All @@ -63,25 +97,45 @@ jobs:
# feature, and windows-latest has no CUDA toolkit; CI builds the
# CPU-only whisper path instead.
- name: Clippy (workshop)
run: cargo clippy -p promptforge-ws -p promptforge-ws-server --all-targets --no-default-features -- -D warnings
run: cargo clippy -p promptforge-ws -p promptforge-ws-server -p promptforge-desktop-shell --all-targets --no-default-features -- -D warnings

- name: Test (workshop)
run: cargo test --locked -p promptforge-ws -p promptforge-ws-server --no-default-features
run: cargo test --locked -p promptforge-ws -p promptforge-ws-server -p promptforge-desktop-shell --no-default-features

msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@1.89.0
with:
components: rustfmt

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- uses: actions/setup-node@v4
with:
node-version: 22

- name: Install UI dependencies
working-directory: crates/promptforge-ws-server/ui
run: npm ci

- name: Build and test on MSRV
run: |
cargo build --locked --workspace --exclude promptforge-ws --exclude promptforge-ws-server --all-features
cargo test --locked --workspace --exclude promptforge-ws --exclude promptforge-ws-server --all-features
cargo build --locked --workspace --exclude promptforge-ws --exclude promptforge-ws-server --exclude promptforge-desktop-shell --exclude promptforge-gateway --exclude promptforge-transcribe --all-features
cargo test --locked --workspace --exclude promptforge-ws --exclude promptforge-ws-server --exclude promptforge-desktop-shell --exclude promptforge-gateway --exclude promptforge-transcribe --all-features

- name: Build and test gateway on MSRV
run: |
cargo build --locked -p promptforge-gateway --features workshop
cargo test --locked -p promptforge-gateway --features workshop

- name: Build and test transcribe on MSRV
run: |
cargo build --locked -p promptforge-transcribe
cargo test --locked -p promptforge-transcribe

supply-chain:
runs-on: ubuntu-latest
Expand Down
34 changes: 34 additions & 0 deletions .github/workflows/cuda.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: CUDA

on:
workflow_dispatch:
# Nightly CUDA build and live test. Uncomment once a self-hosted runner
# with the `windows` and `cuda` labels is registered.
# schedule:
# - cron: '0 6 * * *'

jobs:
cuda:
runs-on: [self-hosted, windows, cuda]
timeout-minutes: 120
steps:
# submodules: the CUDA build compiles the pinned llama.cpp submodule.
- uses: actions/checkout@v4
with:
submodules: true

- uses: dtolnay/rust-toolchain@stable

- name: Cache cargo
uses: Swatinem/rust-cache@v2

- name: Build CUDA bundle
run: cargo build --locked -p promptforge-ws

- name: Test (llama-cuda)
run: cargo test --locked -p promptforge-gateway --features llama-cuda

- name: Live CUDA test
env:
PROMPTFORGE_LIVE_CUDA: "1"
run: cargo test --locked -p promptforge-gateway --features llama-cuda -- --ignored live_cuda --nocapture
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/guide/book/
*.env
# Voice test fixtures, downloaded out of band (see design-promptforge-ws-1.md).
/crates/promptforge-ws-server/tests/fixtures/
/crates/promptforge-transcribe/tests/fixtures/
# UI build pipeline: npm install target and esbuild output (rebuilt by build.rs).
/crates/promptforge-ws-server/ui/node_modules/
/crates/promptforge-ws-server/ui/dist/
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "third_party/llama.cpp"]
path = third_party/llama.cpp
url = https://github.com/ggml-org/llama.cpp.git
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ This rule outranks every other rule here. Before you add a frontmatter field, a
- Each crate's own AGENTS.md binds its subtree. Read the ones governing the paths you touch before writing or reviewing code.
- The existing test suite stays green and intact during refactors: fix forward; never rewrite a test to make it pass.
- Library and serve paths never call `process::exit` or install process-global state; failures return through the spawn handshake.
- Runtime and serve paths never compile native dependencies or invoke compilers or build tools. Native compilation belongs to the Cargo build or packaging process; runtime may only verify, stage, and launch build-produced artifacts.
- Do NOT look at files outside this repo for reference.
- The plan is the spec. Work from the plan and AGENTS.md only.

Expand Down
87 changes: 76 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 10 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,15 @@ repository = "https://github.com/cppalliance/promptforge"

[workspace.dependencies]
promptforge-core = { path = "crates/promptforge-core", version = "0.1.0" }
promptforge-desktop-shell = { path = "crates/promptforge-desktop-shell", version = "0.1.0" }
promptforge-gateway = { path = "crates/promptforge-gateway", version = "0.1.0" }
promptforge-gateway-build = { path = "crates/promptforge-gateway-build", version = "0.1.0" }
promptforge-gateway-config = { path = "crates/promptforge-gateway-config", version = "0.1.0" }
promptforge-webfetch = { path = "crates/promptforge-webfetch", version = "0.1.0" }
promptforge-tool-picker = { path = "crates/promptforge-tool-picker", version = "0.1.0" }
promptforge-tools = { path = "crates/promptforge-tools", version = "0.1.0" }
promptforge-transcribe = { path = "crates/promptforge-transcribe", version = "0.1.0" }
promptforge-web-search = { path = "crates/promptforge-web-search", version = "0.1.0" }
promptforge-ws-server = { path = "crates/promptforge-ws-server", version = "0.1.0" }
pulldown-cmark = "0.12"
serde = { version = "1", features = ["derive"] }
Expand Down Expand Up @@ -85,10 +90,12 @@ tar = { version = "0.4.46", default-features = false }
zip = { version = "8.6.0", default-features = false, features = ["deflate-flate2"] }
indicatif = "0.18"
# Safe bindings to whisper.cpp; the C++ core is built from source by
# whisper-rs-sys (cmake + MSVC required). Enable the wb-server's "cuda"
# feature to build with GPU acceleration (needs the CUDA Toolkit).
# whisper-rs-sys (cmake + MSVC required). Enable promptforge-transcribe's
# "cuda" feature (via the ws-server's "voice-cuda") to build with GPU
# acceleration (needs the CUDA Toolkit).
whisper-rs = "0.16"
# WAV parsing for the voice test fixtures; dev-dependency of the wb-server.
# WAV parsing for the voice test fixtures; optional dependency of
# promptforge-transcribe's test-fixtures feature.
hound = "3.5"
socket2 = { version = "0.6", features = ["all"] }
# wry 0.56 pairs with tao 0.36 (wry's own dev-dependency constraint); tao 0.37
Expand Down
Loading
Loading