Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
882e497
feat(mcp): gated console output capture
alandtse May 30, 2026
b572219
feat(devbench): client-side bridge scaffold (inert until enabled)
alandtse May 31, 2026
1057866
build(devbench): consume devbench-api vcpkg port; enable the bridge
alandtse May 31, 2026
1774720
fix(devbench): make feature toggle reversible
alandtse May 31, 2026
dc9d4a1
fix(devbench): address review — arg parse errors, null-task, port docs
alandtse May 31, 2026
83080c6
refactor(devbench): scope PR to the bridge; address review
alandtse May 31, 2026
cd4a910
build(devbench): gate the bridge behind a CMake option (default ON)
alandtse May 31, 2026
3f49354
fix(build): leave RemoteControl.cpp untouched by this PR
alandtse May 31, 2026
e2137a3
build(devbench): surface DEVBENCH_BRIDGE in the user preset template
alandtse May 31, 2026
d7aa0a9
feat(devbench): emit openshaders.feature.changed; gate dep via vcpkg …
alandtse May 31, 2026
cb921c3
docs(devbench): document the feature-toggle threading contract
alandtse May 31, 2026
482a95b
feat(devbench)!: migrate CS off its embedded MCP server to the bridge
alandtse May 31, 2026
59b96d5
feat(devbench): migration code — bridge tools, gutted server, status …
alandtse May 31, 2026
345d41f
Merge origin/dev into feat/devbench-bridge
alandtse May 31, 2026
31c6aa2
Merge origin/dev into feat/devbench-bridge
alandtse May 31, 2026
65735e4
feat(devbench): add openshaders.shadercache (clear/deleteDisk); revie…
alandtse May 31, 2026
79df600
docs: describe present bridge/panel role, not removed server (review)
alandtse May 31, 2026
95b9216
build(devbench-api): bump port to devbench c75e7d2
alandtse May 31, 2026
dfaf39e
fix(devbench): thread-safety + correctness from PR review
alandtse May 31, 2026
1740a03
feat(abtest): manual variant switching for path-aligned A/B
alandtse May 31, 2026
f949ffb
fix(abtest): reset manualMode on Disable; guard reset task Save
alandtse May 31, 2026
101a05f
feat(abtest): expose aggregated A/B timing via openshaders.abtest res…
alandtse May 31, 2026
12e5a9c
fix(devbench): marshal feature list/get reads; drop status from abtes…
alandtse May 31, 2026
68e6502
feat(abtest): auto-enable overlay profiling in manual mode
alandtse May 31, 2026
63f8ae7
fix(devbench): marshal remaining loaded reads; A/B manual polish; rev…
alandtse May 31, 2026
b333e62
refactor(devbench): drop A/B/benchmark from the bridge PR
alandtse May 31, 2026
aa50d80
docs(remotecontrol): fix feature summary tool list (drop abtest)
alandtse May 31, 2026
67bdf70
refactor(remotecontrol): own devbench install at DataLoaded
alandtse May 31, 2026
6d236c4
refactor(remotecontrol): theme colors, QPC, drop brand from panel
alandtse May 31, 2026
0360fc4
refactor(remotecontrol): drop redundant overrides + external refs
alandtse May 31, 2026
4da6fc8
refactor: move DevBenchBridge out of /src
alandtse Jun 1, 2026
283bbed
fix(devbench): validate set/reset + suppress post-timeout side effects
alandtse Jun 1, 2026
1bc015b
docs(devbench): clarify shadercache clear vs deleteDisk
alandtse Jun 1, 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
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,3 @@
path = extern/FidelityFX-SDK
url = https://github.com/alandtse/FidelityFX-SDK-DX11
branch = optiscaler-build
[submodule "extern/cpp-mcp"]
path = extern/cpp-mcp
url = https://github.com/hkr04/cpp-mcp.git
25 changes: 23 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@ cmake_minimum_required(VERSION 4.2)
cmake_policy(SET CMP0116 NEW)
set(CMAKE_POLICY_WARNING_CMP0116 OFF)

# devbench bridge — declared before project() so the vcpkg toolchain (loaded at project())
# sees the manifest-feature selection. The devbench-api dependency lives behind the
# `devbench-bridge` vcpkg feature, so -DDEVBENCH_BRIDGE=OFF actually drops it (not just the
# find_package/link/define below).
option(
DEVBENCH_BRIDGE
"Register the plugin's tools into the devbench test bench (requires the devbench-api port; runtime no-op when no devbench host is present)"
ON
)
if(DEVBENCH_BRIDGE)
list(APPEND VCPKG_MANIFEST_FEATURES "devbench-bridge")
endif()

project(
# gersemi: ignore
CommunityShaders
Expand Down Expand Up @@ -97,12 +110,14 @@ find_package(efsw CONFIG REQUIRED)
find_path(EXPRTK_INCLUDE_DIRS "exprtk.hpp" REQUIRED)
find_package(Tracy CONFIG REQUIRED)
find_package(directx-headers CONFIG REQUIRED)
if(DEVBENCH_BRIDGE)
find_package(devbench-api CONFIG REQUIRED)
endif()
add_subdirectory(${CMAKE_SOURCE_DIR}/cmake/Streamline)

find_path(DETOURS_INCLUDE_DIRS "detours/detours.h")
find_library(DETOURS_LIBRARY detours REQUIRED)
include(FidelityFX-SDK)
include(cpp-mcp)

target_compile_definitions(
${PROJECT_NAME}
Expand Down Expand Up @@ -147,13 +162,19 @@ target_link_libraries(
unordered_dense::unordered_dense
efsw::efsw
Tracy::TracyClient
cpp-mcp
Streamline
d3d12.lib
Microsoft::DirectX-Headers
${DETOURS_LIBRARY}
)

# devbench bridge: opt-out via -DDEVBENCH_BRIDGE=OFF. When off, the port isn't required
# and DevBenchBridge.cpp compiles to an empty Install().
if(DEVBENCH_BRIDGE)
target_link_libraries(${PROJECT_NAME} PRIVATE DevBench::API)
target_compile_definitions(${PROJECT_NAME} PRIVATE DEVBENCH_BRIDGE_ENABLED)
endif()

# Some third-party libs (e.g. FFX backend) are built with /GL.
# In RelWithDebInfo, align linker options to avoid LNK4075/LNK1218 when warnings are treated as errors.
if(MSVC)
Expand Down
3 changes: 2 additions & 1 deletion CMakeUserPresets.json.template
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"name": "ALL-WITH-AUTO-DEPLOYMENT",
"binaryDir": "${sourceDir}/build/ALL",
"cacheVariables": {
"AUTO_PLUGIN_DEPLOYMENT": "ON"
"AUTO_PLUGIN_DEPLOYMENT": "ON",
"DEVBENCH_BRIDGE": "ON"
},
"environment": {
"CommunityShadersOutputDir": "F:/MySkyrimModpack/mods/CommunityShaders;F:/SteamLibrary/steamapps/common/SkyrimVR/Data;F:/SteamLibrary/steamapps/common/Skyrim Special Edition/Data"
Expand Down
107 changes: 0 additions & 107 deletions cmake/cpp-mcp.cmake

This file was deleted.

42 changes: 42 additions & 0 deletions cmake/ports/devbench-api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# devbench-api vcpkg port

Vendor the devbench cross-plugin API (`DevBenchAPI.h` + `.cpp`) into your SKSE plugin
via vcpkg — **do not copy the files into your tree** (they drift).

## Consume (once devbench is published)

`vcpkg.json`:

```json
{ "dependencies": ["devbench-api"] }
```

`CMakeLists.txt`:

```cmake
find_package(devbench-api CONFIG REQUIRED)
target_link_libraries(YourPlugin PRIVATE DevBench::API)
```

Then, after SKSE sends `kPostLoad`:

```cpp
#include <DevBenchAPI.h>
if (auto* dvb = DevBenchAPI::GetDevBenchInterface001()) {
dvb->RegisterTool("yourmod.dothing", R"({"description":"...","inputSchema":{...}})",
&YourHandler, yourCtx);
}
```

Linking `DevBench::API` puts `DevBenchAPI.h` on the include path and compiles
`DevBenchAPI.cpp` (the messaging-handshake helper) into your plugin. The API glue is
**MIT** (`DevBenchAPI.LICENSE.txt`); the devbench plugin itself is GPL-3.0.

## Pinning / bumping

`portfile.cmake` is pinned to a concrete devbench commit via `vcpkg_from_github`
(`REF` + `SHA512`) — no placeholders to fill in; the overlay works as-is. To pull a
newer API revision, update `REF` to the new commit and replace `SHA512` with the value
vcpkg reports on the first (failed) build, or precompute it with
`vcpkg hash <downloaded-tarball>`. The API header is ABI-versioned, so a bump is only
needed to adopt a new interface revision.
13 changes: 13 additions & 0 deletions cmake/ports/devbench-api/devbench-api-config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
get_filename_component(_DEVBENCH_API_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)

# DevBench::API — header-only-ish target. The consumer gets the include dir and
# DevBenchAPI.cpp compiled into it (the consumer-side helper that fetches the
# interface via SKSE messaging). Link this, then call
# DevBenchAPI::GetDevBenchInterface001() after kPostLoad.
if(NOT TARGET DevBench::API)
add_library(DevBench::API INTERFACE IMPORTED)
set_target_properties(DevBench::API PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_DEVBENCH_API_DIR}/../../include"
INTERFACE_SOURCES "${_DEVBENCH_API_DIR}/src/DevBenchAPI.cpp"
)
endif()
29 changes: 29 additions & 0 deletions cmake/ports/devbench-api/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# devbench-api — header-only cross-plugin API for SKSE consumers.
# Installs the MIT API header + its companion .cpp (compiled into the consumer via the
# config's INTERFACE_SOURCES).
#
# Pinned to a published commit. devbench-api isn't in the official vcpkg registry, so
# consumers add this directory to VCPKG_OVERLAY_PORTS (see README). To ship a newer API
# revision, bump REF to the new commit and SHA512 to its archive hash.

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO alandtse/devbench
REF c75e7d2ea51f1de5c7469124955bff8d39694d78
SHA512 1dfcdb838a67b181ab21dd7cbcc818459563364a519e9ab6b3bce0a2c1bd29b46ee160f10dbfc8ff488fb5ec74c22723defd692d620f0df0fe788b1244bfb7a4
HEAD_REF main
)

# MIT API glue → header to include/, source to share/ (referenced by the config target).
file(INSTALL "${SOURCE_PATH}/include/DevBenchAPI.h"
DESTINATION "${CURRENT_PACKAGES_DIR}/include")
file(INSTALL "${SOURCE_PATH}/include/DevBenchAPI.cpp"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}/src")

# CMake package config — defines DevBench::API.
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/devbench-api-config.cmake"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")

# The API glue is MIT (not the GPL-3.0 plugin) — ship that as the port copyright.
file(INSTALL "${SOURCE_PATH}/include/DevBenchAPI.LICENSE.txt"
DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
7 changes: 7 additions & 0 deletions cmake/ports/devbench-api/vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "devbench-api",
"version": "1.0.0",
"description": "devbench cross-plugin API header for SKSE plugin developers. Register MCP/REST tools and emit events into the devbench host. MIT-licensed glue; the devbench plugin itself is GPL-3.0.",
"homepage": "https://github.com/alandtse/devbench",
"license": "MIT"
}
1 change: 0 additions & 1 deletion extern/cpp-mcp
Submodule cpp-mcp deleted from a0eb22
Loading
Loading