From cb0a222f15420f35389014662f9714580924de9e Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 5 Jun 2026 11:26:27 -0400 Subject: [PATCH] Update api (#27) * feat: use recommended logos-module-builder to simplify core modules * add tests add tests update readme * update api update api simplify simplify * ci fix * ci fix --------- Co-authored-by: Khushboo Mehta Co-authored-by: Logos Workspace --- .github/workflows/ci.yml | 45 + CMakeLists.txt | 211 +- README.md | 38 +- flake.lock | 6884 +++++++++++++++++++++++-- flake.nix | 184 +- justfile | 10 +- metadata.json | 30 +- src/i_logos_blockchain_module.h | 53 - src/logos_blockchain_module.cpp | 557 +- src/logos_blockchain_module.h | 79 +- tests/CMakeLists.txt | 50 + tests/main.cpp | 3 + tests/mocks/mock_logos_blockchain.cpp | 159 + tests/stubs/logos_blockchain.h | 131 + tests/test_blockchain.cpp | 729 +++ 15 files changed, 8066 insertions(+), 1097 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 src/i_logos_blockchain_module.h create mode 100644 tests/CMakeLists.txt create mode 100644 tests/main.cpp create mode 100644 tests/mocks/mock_logos_blockchain.cpp create mode 100644 tests/stubs/logos_blockchain.h create mode 100644 tests/test_blockchain.cpp diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..fcd7f85 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,45 @@ +name: CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: cachix/install-nix-action@v27 + with: + extra_nix_config: | + experimental-features = nix-command flakes + + - uses: cachix/cachix-action@v15 + with: + name: logos-co + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + + - name: Build module + run: nix build + + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: cachix/install-nix-action@v27 + with: + extra_nix_config: | + experimental-features = nix-command flakes + + - uses: cachix/cachix-action@v15 + with: + name: logos-co + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + + - name: Run unit tests + run: nix build '.#checks.x86_64-linux.unit-tests' -L diff --git a/CMakeLists.txt b/CMakeLists.txt index 66b79dc..148e747 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,203 +1,18 @@ -cmake_minimum_required(VERSION 3.20) -project(logos-blockchain-module LANGUAGES CXX) +cmake_minimum_required(VERSION 3.14) +project(LogosBlockchainModulePlugin LANGUAGES CXX) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -# ---- Options ---- -set(LOGOS_CORE_ROOT "" CACHE PATH "Path to logos-core root directory.") -set(LOGOS_BLOCKCHAIN_ROOT "" CACHE PATH "Path to logos-blockchain source root.") -set(LOGOS_BLOCKCHAIN_LIB "" CACHE PATH "Path to prebuilt logos-blockchain lib.") -set(LOGOS_BLOCKCHAIN_INCLUDE "" CACHE PATH "Path to prebuilt logos-blockchain include.") - -set(HAS_LOGOS_CORE_ROOT FALSE) -set(HAS_LOGOS_BLOCKCHAIN_ROOT FALSE) -set(HAS_LOGOS_BLOCKCHAIN_LIB FALSE) -set(HAS_LOGOS_BLOCKCHAIN_INCLUDE FALSE) - -if (DEFINED LOGOS_CORE_ROOT AND NOT "${LOGOS_CORE_ROOT}" STREQUAL "") - set(HAS_LOGOS_CORE_ROOT TRUE) -endif() - -if (DEFINED LOGOS_BLOCKCHAIN_ROOT AND NOT "${LOGOS_BLOCKCHAIN_ROOT}" STREQUAL "") - set(HAS_LOGOS_BLOCKCHAIN_ROOT TRUE) -endif() - -if(DEFINED LOGOS_BLOCKCHAIN_LIB AND NOT "${LOGOS_BLOCKCHAIN_LIB}" STREQUAL "") - set(HAS_LOGOS_BLOCKCHAIN_LIB TRUE) -endif() - -if(DEFINED LOGOS_BLOCKCHAIN_INCLUDE AND NOT "${LOGOS_BLOCKCHAIN_INCLUDE}" STREQUAL "") - set(HAS_LOGOS_BLOCKCHAIN_INCLUDE TRUE) -endif() - -if (NOT HAS_LOGOS_CORE_ROOT) - message(FATAL_ERROR "LOGOS_CORE_ROOT must be set to the logos-core root directory.") -endif() - -if(HAS_LOGOS_BLOCKCHAIN_LIB AND HAS_LOGOS_BLOCKCHAIN_INCLUDE AND NOT HAS_LOGOS_BLOCKCHAIN_ROOT) - message(STATUS "Using prebuilt logos-blockchain.") - set(LOGOS_BLOCKCHAIN_PREBUILT TRUE) -elseif(NOT HAS_LOGOS_BLOCKCHAIN_LIB AND NOT HAS_LOGOS_BLOCKCHAIN_INCLUDE AND HAS_LOGOS_BLOCKCHAIN_ROOT) - message(STATUS "Building logos-blockchain from source.") - set(LOGOS_BLOCKCHAIN_PREBUILT FALSE) +if(DEFINED ENV{LOGOS_MODULE_BUILDER_ROOT}) + include($ENV{LOGOS_MODULE_BUILDER_ROOT}/cmake/LogosModule.cmake) else() - message(FATAL_ERROR "Either both LOGOS_BLOCKCHAIN_LIB and LOGOS_BLOCKCHAIN_INCLUDE must be set for prebuilt logos-blockchain, or only LOGOS_BLOCKCHAIN_ROOT must be set for building from source.") + message(FATAL_ERROR "LogosModule.cmake not found. Set LOGOS_MODULE_BUILDER_ROOT.") endif() -# ---- Qt ---- -find_package(Qt6 REQUIRED COMPONENTS Core RemoteObjects) -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTOUIC ON) -set(CMAKE_AUTORCC ON) - -# ---- Directories ---- -set(WORKSPACE_ROOT "${CMAKE_BINARY_DIR}/workspace") -file(MAKE_DIRECTORY "${WORKSPACE_ROOT}") - -# ---- Logos Core SDK ---- -set(SDK_LIB "${LOGOS_CORE_ROOT}/lib/liblogos_sdk.a") -set(SDK_INC "${LOGOS_CORE_ROOT}/include") - -# ---- OS Specifics ---- -if(APPLE) - set(DYLIB_EXT ".dylib") -elseif(WIN32) - set(DYLIB_EXT ".dll") - set(IMPLIB_EXT ".lib") -else() - set(DYLIB_EXT ".so") -endif() - -# NOTE (Windows): -# Rust cdylib typically produces: -# - logos_blockchain.dll (runtime) -# - logos_blockchain.lib (import lib) -# The Windows build hasn't been yet, so adjust accordingly if the DLL is named without the 'lib' prefix. - -# ---- Logos Blockchain (build OR consume) ---- -if(LOGOS_BLOCKCHAIN_PREBUILT) - set(LOGOS_BLOCKCHAIN_DYLIB "${LOGOS_BLOCKCHAIN_LIB}/liblogos_blockchain${DYLIB_EXT}") - - if(WIN32) - set(LOGOS_BLOCKCHAIN_IMPLIB "${LOGOS_BLOCKCHAIN_LIB}/logos_blockchain${IMPLIB_EXT}") - endif() - - add_custom_target(logos_blockchain_libs) - -else() - find_program(CARGO_EXECUTABLE cargo REQUIRED) - - set(CARGO_TARGET_DIR "${WORKSPACE_ROOT}/logos-blockchain/target") - set(INTERNAL_STAGE "${WORKSPACE_ROOT}/stage") - set(INTERNAL_STAGE_LIB "${INTERNAL_STAGE}/lib") - set(INTERNAL_STAGE_INCLUDE "${INTERNAL_STAGE}/include") - file(MAKE_DIRECTORY "${CARGO_TARGET_DIR}" "${INTERNAL_STAGE_LIB}" "${INTERNAL_STAGE_INCLUDE}") - - set(LOGOS_BLOCKCHAIN_LIB "${INTERNAL_STAGE_LIB}") - set(LOGOS_BLOCKCHAIN_INCLUDE "${INTERNAL_STAGE_INCLUDE}") - - set(LOGOS_BLOCKCHAIN_DYLIB "${INTERNAL_STAGE_LIB}/liblogos_blockchain${DYLIB_EXT}") - set(LOGOS_BLOCKCHAIN_HEADER "${INTERNAL_STAGE_INCLUDE}/logos_blockchain.h") - - add_custom_command( - OUTPUT "${LOGOS_BLOCKCHAIN_DYLIB}" - COMMAND ${CMAKE_COMMAND} -E env - CARGO_TARGET_DIR=${CARGO_TARGET_DIR} - ${CARGO_EXECUTABLE} build --release - --package logos-blockchain-c - --manifest-path "${LOGOS_BLOCKCHAIN_ROOT}/Cargo.toml" - COMMAND ${CMAKE_COMMAND} -E copy - "${CARGO_TARGET_DIR}/release/liblogos_blockchain${DYLIB_EXT}" - "${LOGOS_BLOCKCHAIN_DYLIB}" - DEPENDS "${LOGOS_BLOCKCHAIN_ROOT}/Cargo.toml" - VERBATIM - ) - - add_custom_command( - OUTPUT "${LOGOS_BLOCKCHAIN_HEADER}" - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${LOGOS_BLOCKCHAIN_ROOT}/c-bindings/logos_blockchain.h" - "${LOGOS_BLOCKCHAIN_HEADER}" - DEPENDS "${LOGOS_BLOCKCHAIN_DYLIB}" - VERBATIM - ) - - add_custom_target(logos_blockchain_libs DEPENDS "${LOGOS_BLOCKCHAIN_DYLIB}" "${LOGOS_BLOCKCHAIN_HEADER}") -endif() - -# ---- Imported targets ---- -add_library(logos_blockchain_interface SHARED IMPORTED GLOBAL) -set_target_properties(logos_blockchain_interface PROPERTIES - IMPORTED_LOCATION "${LOGOS_BLOCKCHAIN_DYLIB}" - INTERFACE_INCLUDE_DIRECTORIES "${LOGOS_BLOCKCHAIN_INCLUDE}" +# Universal module — generated_code/ is picked up automatically by LogosModule.cmake +logos_module( + NAME liblogos_blockchain_module + SOURCES + src/logos_blockchain_module.h + src/logos_blockchain_module.cpp + EXTERNAL_LIBS + logos_blockchain ) - -if(NOT LOGOS_BLOCKCHAIN_PREBUILT) - add_dependencies(logos_blockchain_interface logos_blockchain_libs) -endif() - -if(WIN32) - set_target_properties(logos_blockchain_interface PROPERTIES IMPORTED_IMPLIB "${LOGOS_BLOCKCHAIN_IMPLIB}") -endif() - -add_library(logos_core STATIC IMPORTED) -set_target_properties(logos_core PROPERTIES - IMPORTED_LOCATION "${SDK_LIB}" -) - -add_library(logos_cpp_sdk INTERFACE) -target_include_directories(logos_cpp_sdk INTERFACE "${SDK_INC}" "${SDK_INC}/cpp") - -# ---- Plugin ---- -set(PLUGIN_TARGET logos_blockchain_module) - -qt_add_plugin(${PLUGIN_TARGET} CLASS_NAME LogosBlockchainModule) - -target_sources(${PLUGIN_TARGET} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src/logos_blockchain_module.cpp -) - -set_property(TARGET ${PLUGIN_TARGET} PROPERTY PUBLIC_HEADER - ${CMAKE_CURRENT_SOURCE_DIR}/src/i_logos_blockchain_module.h -) - -target_include_directories(${PLUGIN_TARGET} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src -) - -target_link_libraries(${PLUGIN_TARGET} PRIVATE - Qt6::Core - Qt6::RemoteObjects - logos_blockchain_interface - logos_cpp_sdk - logos_core -) - -target_compile_definitions(${PLUGIN_TARGET} PRIVATE - LOGOS_BLOCKCHAIN_MODULE_METADATA_FILE="${CMAKE_CURRENT_SOURCE_DIR}/metadata.json" -) - -add_dependencies(${PLUGIN_TARGET} logos_blockchain_libs) - -if(APPLE) - set_target_properties(${PLUGIN_TARGET} PROPERTIES - BUILD_RPATH "@loader_path" - INSTALL_RPATH "@loader_path" - ) -elseif(UNIX) - set_target_properties(${PLUGIN_TARGET} PROPERTIES - BUILD_RPATH "$ORIGIN" - INSTALL_RPATH "$ORIGIN" - ) -endif() - -# ---- Install ---- -install(TARGETS ${PLUGIN_TARGET} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin - PUBLIC_HEADER DESTINATION include -) -install(DIRECTORY "${LOGOS_BLOCKCHAIN_INCLUDE}/" DESTINATION include) -install(FILES "${LOGOS_BLOCKCHAIN_DYLIB}" DESTINATION lib) diff --git a/README.md b/README.md index c758682..1cca043 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,10 @@ # Logos Blockchain Module -### Setup +A Logos core module that wraps the [logos-blockchain](https://github.com/logos-blockchain/logos-blockchain) C bindings and ships the zk circuit binaries needed at runtime. -#### IDE +### Build and inspect -If you're using an IDE with CMake integration make sure it points to the same cmake directory as the `justfile`, which defaults to `build`. +```bash +nix build '.#lgx' +``` -This will reduce friction when working on the project. - -#### Nix - -* Use `nix flake update` to bring all nix context and packages -* Use `nix build` to build the package -* Use `nix run` to launch the module-viewer and check your module loads properly -* Use `nix develop` to setup your IDE - -### Troubleshooting - -#### Nix + IDE Integration -If your IDE reports that a file doesn't belong to the project or that files cannot be found, the CMake cache -is likely missing the Nix-provided paths. This happens when the IDE runs CMake on its own, outside the Nix -environment, leaving the required paths empty. - -To fix it: - -1. **Regenerate the cache from within the Nix shell** - - This provides the required Nix paths and writes them into `build/CMakeCache.txt`: - ```bash - nix develop -c just configure - ``` - -2. **Reload the CMake project without resetting the cache** - - If on RustRover: Open the CMake tool window (**View → Tool Windows → CMake**) and click the **Reload** button (↺) in the toolbar. - -> Resetting the cache would wipe the paths you just wrote, so make sure to reload only. diff --git a/flake.lock b/flake.lock index af361f3..3077f51 100644 --- a/flake.lock +++ b/flake.lock @@ -57,10 +57,69 @@ }, "logos-capability-module": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk", - "logos-module": "logos-module", - "logos-nix": "logos-nix_4", + "logos-module-builder": "logos-module-builder_2" + }, + "locked": { + "lastModified": 1778182598, + "narHash": "sha256-QoyirL/blmVM2cmXQwbR6rmHufQJ6vaJSCkNORu4qaA=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "e675e9e3a98ee69bb303365c2c626f9237bc1ab5", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_2": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-module": "logos-module_7", + "logos-nix": "logos-nix_16", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_4", + "logos-module": "logos-module_8", + "logos-nix": "logos-nix_21", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-capability-module", "logos-nix", @@ -81,23 +140,16 @@ "type": "github" } }, - "logos-capability-module_2": { + "logos-capability-module_4": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_3", - "logos-liblogos": "logos-liblogos_2", - "nixpkgs": [ - "logos-module-viewer", - "logos-capability-module", - "logos-liblogos", - "nixpkgs" - ] + "logos-module-builder": "logos-module-builder_3" }, "locked": { - "lastModified": 1767809111, - "narHash": "sha256-jehjsB+BpDJlVu3I7x+vFVOdXmy9MDmFTJtRqzFUONo=", + "lastModified": 1778182598, + "narHash": "sha256-QoyirL/blmVM2cmXQwbR6rmHufQJ6vaJSCkNORu4qaA=", "owner": "logos-co", "repo": "logos-capability-module", - "rev": "7b35383e0aa4e28a4633ed18a87efb57636939b1", + "rev": "e675e9e3a98ee69bb303365c2c626f9237bc1ab5", "type": "github" }, "original": { @@ -106,47 +158,92 @@ "type": "github" } }, - "logos-capability-module_3": { + "logos-capability-module_5": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_6", - "logos-liblogos": "logos-liblogos_4", - "nixpkgs": [ - "logos-module-viewer", + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-capability-module", - "logos-liblogos", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1773696504, - "narHash": "sha256-wBn8onAkEvtvl1McLVyFDSB8BRhUrwJAnnYIfXnIhdI=", - "owner": "logos-co", - "repo": "logos-capability-module", - "rev": "2ee07fea9d0b9aca89dc215ee8b3be222017d706", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-capability-module", - "type": "github" - } - }, - "logos-core": { - "inputs": { - "logos-nix": "logos-nix", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-module": "logos-module_13", + "logos-nix": "logos-nix_60", "nixpkgs": [ - "logos-core", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-nix", "nixpkgs" ] }, "locked": { - "lastModified": 1776882680, - "narHash": "sha256-g1E1L7Ac7PHUFuay/RDQDY2GZPy9lJotDG1MI15bOQ4=", + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_6": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_9", + "logos-module": "logos-module_14", + "logos-nix": "logos-nix_65", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-cpp-sdk": { + "inputs": { + "logos-nix": "logos-nix", + "nixpkgs": [ + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "ecd369d48bffda2ad3c5233687603ef07d8b76a6", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", "type": "github" }, "original": { @@ -155,10 +252,157 @@ "type": "github" } }, - "logos-cpp-sdk": { + "logos-cpp-sdk_10": { "inputs": { - "logos-nix": "logos-nix_2", + "logos-nix": "logos-nix_66", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_11": { + "inputs": { + "logos-nix": "logos-nix_94", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_12": { + "inputs": { + "logos-nix": [ + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-nix" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_2": { + "inputs": { + "logos-nix": "logos-nix_8", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_3": { + "inputs": { + "logos-nix": "logos-nix_17", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_4": { + "inputs": { + "logos-nix": "logos-nix_19", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-capability-module", "logos-cpp-sdk", @@ -180,46 +424,15 @@ "type": "github" } }, - "logos-cpp-sdk_10": { + "logos-cpp-sdk_5": { "inputs": { - "nixpkgs": "nixpkgs_25" - }, - "locked": { - "lastModified": 1767724329, - "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "type": "github" - } - }, - "logos-cpp-sdk_11": { - "inputs": { - "nixpkgs": "nixpkgs_26" - }, - "locked": { - "lastModified": 1764699992, - "narHash": "sha256-nCmK9C9F31cHvy6lWKR5WGl99aJbS3kIsROAoZ4OrwI=", - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "rev": "5d0bbd0d1e00aad0532ffa7c8bf2c80f460a4f6d", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "type": "github" - } - }, - "logos-cpp-sdk_2": { - "inputs": { - "logos-nix": "logos-nix_5", + "logos-nix": "logos-nix_22", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-cpp-sdk", "logos-nix", @@ -227,65 +440,11 @@ ] }, "locked": { - "lastModified": 1776359718, - "narHash": "sha256-G2+MbYPictF9V9864KndteaEJzd8iUMktSzCphETabw=", + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "04b75c84b821662c9ae8f69967d4dd508e6d9e17", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "type": "github" - } - }, - "logos-cpp-sdk_3": { - "inputs": { - "nixpkgs": "nixpkgs_16" - }, - "locked": { - "lastModified": 1761230734, - "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "rev": "4b143922c190df00bb3835441c9f0075cb28283b", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "type": "github" - } - }, - "logos-cpp-sdk_4": { - "inputs": { - "nixpkgs": "nixpkgs_17" - }, - "locked": { - "lastModified": 1761230734, - "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "rev": "4b143922c190df00bb3835441c9f0075cb28283b", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "type": "github" - } - }, - "logos-cpp-sdk_5": { - "inputs": { - "nixpkgs": "nixpkgs_18" - }, - "locked": { - "lastModified": 1773672219, - "narHash": "sha256-p+kv2WHokT40rScnSFSIDp/EeFLaDUsTHW6QT6ejKuc=", - "owner": "logos-co", - "repo": "logos-cpp-sdk", - "rev": "a4bd66cd6eb04ee7140bb940b1d49d72d60248de", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", "type": "github" }, "original": { @@ -296,14 +455,21 @@ }, "logos-cpp-sdk_6": { "inputs": { - "nixpkgs": "nixpkgs_19" + "logos-nix": "logos-nix_50", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] }, "locked": { - "lastModified": 1773672219, - "narHash": "sha256-p+kv2WHokT40rScnSFSIDp/EeFLaDUsTHW6QT6ejKuc=", + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "a4bd66cd6eb04ee7140bb940b1d49d72d60248de", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", "type": "github" }, "original": { @@ -314,14 +480,24 @@ }, "logos-cpp-sdk_7": { "inputs": { - "nixpkgs": "nixpkgs_20" + "logos-nix": "logos-nix_52", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] }, "locked": { - "lastModified": 1761230734, - "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", "type": "github" }, "original": { @@ -332,14 +508,25 @@ }, "logos-cpp-sdk_8": { "inputs": { - "nixpkgs": "nixpkgs_21" + "logos-nix": "logos-nix_61", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] }, "locked": { - "lastModified": 1773672219, - "narHash": "sha256-p+kv2WHokT40rScnSFSIDp/EeFLaDUsTHW6QT6ejKuc=", + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "a4bd66cd6eb04ee7140bb940b1d49d72d60248de", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", "type": "github" }, "original": { @@ -350,14 +537,27 @@ }, "logos-cpp-sdk_9": { "inputs": { - "nixpkgs": "nixpkgs_22" + "logos-nix": "logos-nix_63", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] }, "locked": { - "lastModified": 1767724329, - "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", + "lastModified": 1773956385, + "narHash": "sha256-CV0Lo1FrosBt/MSP+GWQGWXnYobxRGXGOREylNuwZ58=", "owner": "logos-co", "repo": "logos-cpp-sdk", - "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", + "rev": "4b66dac015e4b977d33cfae80a4c8e1d518679f3", "type": "github" }, "original": { @@ -366,26 +566,112 @@ "type": "github" } }, + "logos-design-system": { + "inputs": { + "logos-nix": "logos-nix_18", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777999983, + "narHash": "sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "f6e95ae24ede3871c380f8250feffd17d173f5a4", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_2": { + "inputs": { + "logos-nix": "logos-nix_51", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778224414, + "narHash": "sha256-QSSCCE4eKGiIS5PqHDfk9Lj4VFmeCh18khbFWrGxvvc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "6176f0d7a5dfeb64a7f0f98e7ca2bf71a4804772", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_3": { + "inputs": { + "logos-nix": "logos-nix_62", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777999983, + "narHash": "sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "f6e95ae24ede3871c380f8250feffd17d173f5a4", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, "logos-liblogos": { "inputs": { - "logos-capability-module": "logos-capability-module", - "logos-cpp-sdk": "logos-cpp-sdk_2", - "logos-module": "logos-module_2", - "logos-nix": "logos-nix_7", + "logos-capability-module": "logos-capability-module_3", + "logos-cpp-sdk": "logos-cpp-sdk_5", + "logos-module": "logos-module_9", + "logos-nix": "logos-nix_24", "logos-package-manager": "logos-package-manager", "nixpkgs": [ - "logos-liblogos", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-nix", "nixpkgs" ], "process-stats": "process-stats" }, "locked": { - "lastModified": 1776950445, - "narHash": "sha256-UQBZehyqd4GcqBLp4Uiu8r6bl/SJbpfmO/S5Z9luBeQ=", + "lastModified": 1778168472, + "narHash": "sha256-Td7Um8HOx4hG6k8ky3+bTsmgA9bgspI3eDs9LzVWv2s=", "owner": "logos-co", "repo": "logos-liblogos", - "rev": "b82145ce9a8907624b8593ac85897d54f33b3bc4", + "rev": "94af58c819038e0eb5c2003f69d3260d964aa8f3", "type": "github" }, "original": { @@ -396,21 +682,26 @@ }, "logos-liblogos_2": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_4", + "logos-capability-module": "logos-capability-module_4", + "logos-cpp-sdk": "logos-cpp-sdk_11", + "logos-module": "logos-module_16", + "logos-nix": "logos-nix_96", + "logos-package-manager": "logos-package-manager_5", "nixpkgs": [ - "logos-module-viewer", - "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", - "logos-cpp-sdk", + "logos-nix", "nixpkgs" - ] + ], + "process-stats": "process-stats_3" }, "locked": { - "lastModified": 1761845775, - "narHash": "sha256-ulK8xq05ejK6qIgZ7WtWb/MJt2rk5BKfDA2z7mM3wq8=", + "lastModified": 1779724404, + "narHash": "sha256-HKgY1cbcm1BgFau0KBJba0pKGNZ/7oJMcqJMhPDQ20Q=", "owner": "logos-co", "repo": "logos-liblogos", - "rev": "a92c2c1268bc70764c8f73c7bce07d21024f5af9", + "rev": "be7c8fd8e89e9c7506421735e18dc85bde0c1cb2", "type": "github" }, "original": { @@ -421,75 +712,29 @@ }, "logos-liblogos_3": { "inputs": { - "logos-capability-module": "logos-capability-module_3", - "logos-cpp-sdk": "logos-cpp-sdk_8", - "logos-module": "logos-module_3", - "nix-bundle-appimage": "nix-bundle-appimage_2", - "nix-bundle-dir": "nix-bundle-dir_4", + "logos-capability-module": "logos-capability-module_6", + "logos-cpp-sdk": "logos-cpp-sdk_10", + "logos-module": "logos-module_15", + "logos-nix": "logos-nix_68", + "logos-package-manager": "logos-package-manager_3", "nixpkgs": [ - "logos-module-viewer", - "logos-liblogos", - "logos-cpp-sdk", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1773696645, - "narHash": "sha256-GIb4xALCj3XK80rf6l89ZrZ/Y1YkqG1X/mfmVOUl/hw=", - "owner": "logos-co", - "repo": "logos-liblogos", - "rev": "5030aaaf86b89a382f3beb9426be4f8c2623215f", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-liblogos", - "type": "github" - } - }, - "logos-liblogos_4": { - "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_7", - "nixpkgs": [ - "logos-module-viewer", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-capability-module", - "logos-liblogos", - "logos-cpp-sdk", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", "nixpkgs" - ] + ], + "process-stats": "process-stats_2" }, "locked": { - "lastModified": 1761845775, - "narHash": "sha256-ulK8xq05ejK6qIgZ7WtWb/MJt2rk5BKfDA2z7mM3wq8=", + "lastModified": 1778168472, + "narHash": "sha256-Td7Um8HOx4hG6k8ky3+bTsmgA9bgspI3eDs9LzVWv2s=", "owner": "logos-co", "repo": "logos-liblogos", - "rev": "a92c2c1268bc70764c8f73c7bce07d21024f5af9", - "type": "github" - }, - "original": { - "owner": "logos-co", - "repo": "logos-liblogos", - "type": "github" - } - }, - "logos-liblogos_5": { - "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_11", - "nixpkgs": [ - "logos-module-viewer", - "logos-package-manager", - "logos-liblogos", - "logos-cpp-sdk", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1768343028, - "narHash": "sha256-4LvsuZTDTlLtfMF4C69ls+lmkYJWD7LZitS04Mc+8UI=", - "owner": "logos-co", - "repo": "logos-liblogos", - "rev": "a76d33f5519af0ee12317c8f149eee2ac5d292a0", + "rev": "94af58c819038e0eb5c2003f69d3260d964aa8f3", "type": "github" }, "original": { @@ -500,8 +745,254 @@ }, "logos-module": { "inputs": { - "logos-nix": "logos-nix_3", + "logos-nix": "logos-nix_2", "nixpkgs": [ + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module-builder": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk", + "logos-module": "logos-module", + "logos-nix": "logos-nix_3", + "logos-plugin-core": "logos-plugin-core", + "logos-plugin-qt": "logos-plugin-qt", + "logos-standalone-app": "logos-standalone-app", + "logos-test-framework": "logos-test-framework_3", + "nix-bundle-lgx": "nix-bundle-lgx_8", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_3", + "nixpkgs": [ + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1780067269, + "narHash": "sha256-t8rzOR1H+q4PLrJnr+umNyJ7YsYYTWLoUZ3IeUH++4M=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "131faf1522947416cbbe3faffcac6191d5147c0d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_2", + "logos-module": "logos-module_4", + "logos-nix": "logos-nix_10", + "logos-plugin-core": "logos-plugin-core_2", + "logos-plugin-qt": "logos-plugin-qt_2", + "logos-standalone-app": "logos-standalone-app_2", + "logos-test-framework": "logos-test-framework", + "nix-bundle-lgx": "nix-bundle-lgx_2", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177522, + "narHash": "sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "b0e41abf3e14c0534b41933c5f8e3fc697319037", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_7", + "logos-module": "logos-module_10", + "logos-nix": "logos-nix_54", + "logos-plugin-core": "logos-plugin-core_3", + "logos-plugin-qt": "logos-plugin-qt_3", + "logos-standalone-app": "logos-standalone-app_3", + "logos-test-framework": "logos-test-framework_2", + "nix-bundle-lgx": "nix-bundle-lgx_5", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_2", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177522, + "narHash": "sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "b0e41abf3e14c0534b41933c5f8e3fc697319037", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module_10": { + "inputs": { + "logos-nix": "logos-nix_53", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_11": { + "inputs": { + "logos-nix": "logos-nix_55", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_12": { + "inputs": { + "logos-nix": "logos-nix_57", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_13": { + "inputs": { + "logos-nix": "logos-nix_59", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_14": { + "inputs": { + "logos-nix": "logos-nix_64", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-capability-module", "logos-module", @@ -523,37 +1014,68 @@ "type": "github" } }, - "logos-module-viewer": { + "logos-module_15": { "inputs": { - "logos-capability-module": "logos-capability-module_2", - "logos-cpp-sdk": "logos-cpp-sdk_5", - "logos-liblogos": "logos-liblogos_3", - "logos-package-manager": "logos-package-manager_2", + "logos-nix": "logos-nix_67", "nixpkgs": [ - "logos-module-viewer", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", "nixpkgs" ] }, "locked": { - "lastModified": 1774455291, - "narHash": "sha256-4O07OAO+5Pqcfdjdk4amYwx27Di3eKRg9y/NiDy3+b4=", + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", "owner": "logos-co", - "repo": "logos-module-viewer", - "rev": "b6489c1aab8c1590fa127dbaedb39708f3614fbc", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", "type": "github" }, "original": { "owner": "logos-co", - "repo": "logos-module-viewer", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_16": { + "inputs": { + "logos-nix": "logos-nix_95", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", "type": "github" } }, "logos-module_2": { "inputs": { - "logos-nix": "logos-nix_6", + "logos-nix": "logos-nix_4", "nixpkgs": [ - "logos-liblogos", + "logos-module-builder", + "logos-plugin-core", "logos-module", "logos-nix", "nixpkgs" @@ -575,21 +1097,192 @@ }, "logos-module_3": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_9", + "logos-nix": "logos-nix_6", "nixpkgs": [ - "logos-module-viewer", - "logos-liblogos", + "logos-module-builder", + "logos-plugin-qt", "logos-module", - "logos-cpp-sdk", + "logos-nix", "nixpkgs" ] }, "locked": { - "lastModified": 1770999556, - "narHash": "sha256-anpsEniGTTwUAwknRxjaT9GP4avHzIsolEHdHDTV9rM=", + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", "owner": "logos-co", "repo": "logos-module", - "rev": "d1b35f335f938bb5de21a2a6010f1104075bdb1c", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_4": { + "inputs": { + "logos-nix": "logos-nix_9", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_5": { + "inputs": { + "logos-nix": "logos-nix_11", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_6": { + "inputs": { + "logos-nix": "logos-nix_13", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_7": { + "inputs": { + "logos-nix": "logos-nix_15", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_8": { + "inputs": { + "logos-nix": "logos-nix_20", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_9": { + "inputs": { + "logos-nix": "logos-nix_23", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", "type": "github" }, "original": { @@ -603,11 +1296,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1773955630, - "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", "owner": "logos-co", "repo": "logos-nix", - "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", "type": "github" }, "original": { @@ -620,6 +1313,24 @@ "inputs": { "nixpkgs": "nixpkgs_12" }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_100": { + "inputs": { + "nixpkgs": "nixpkgs_102" + }, "locked": { "lastModified": 1773955630, "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", @@ -634,6 +1345,168 @@ "type": "github" } }, + "logos-nix_101": { + "inputs": { + "nixpkgs": "nixpkgs_103" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_102": { + "inputs": { + "nixpkgs": "nixpkgs_104" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_103": { + "inputs": { + "nixpkgs": "nixpkgs_105" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_104": { + "inputs": { + "nixpkgs": "nixpkgs_106" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_105": { + "inputs": { + "nixpkgs": "nixpkgs_107" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_106": { + "inputs": { + "nixpkgs": "nixpkgs_108" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_107": { + "inputs": { + "nixpkgs": "nixpkgs_109" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_108": { + "inputs": { + "nixpkgs": "nixpkgs_110" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_109": { + "inputs": { + "nixpkgs": "nixpkgs_111" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_11": { "inputs": { "nixpkgs": "nixpkgs_13" @@ -652,10 +1525,226 @@ "type": "github" } }, + "logos-nix_110": { + "inputs": { + "nixpkgs": "nixpkgs_112" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_111": { + "inputs": { + "nixpkgs": "nixpkgs_113" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_112": { + "inputs": { + "nixpkgs": "nixpkgs_114" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_113": { + "inputs": { + "nixpkgs": "nixpkgs_115" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_114": { + "inputs": { + "nixpkgs": "nixpkgs_116" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_115": { + "inputs": { + "nixpkgs": "nixpkgs_117" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_116": { + "inputs": { + "nixpkgs": "nixpkgs_118" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_117": { + "inputs": { + "nixpkgs": "nixpkgs_119" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_118": { + "inputs": { + "nixpkgs": "nixpkgs_120" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_119": { + "inputs": { + "nixpkgs": "nixpkgs_121" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_12": { "inputs": { "nixpkgs": "nixpkgs_14" }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_120": { + "inputs": { + "nixpkgs": "nixpkgs_122" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_121": { + "inputs": { + "nixpkgs": "nixpkgs_123" + }, "locked": { "lastModified": 1773955630, "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", @@ -688,6 +1777,114 @@ "type": "github" } }, + "logos-nix_14": { + "inputs": { + "nixpkgs": "nixpkgs_16" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_15": { + "inputs": { + "nixpkgs": "nixpkgs_17" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_16": { + "inputs": { + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_17": { + "inputs": { + "nixpkgs": "nixpkgs_19" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_18": { + "inputs": { + "nixpkgs": "nixpkgs_20" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_19": { + "inputs": { + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_2": { "inputs": { "nixpkgs": "nixpkgs_4" @@ -706,10 +1903,370 @@ "type": "github" } }, + "logos-nix_20": { + "inputs": { + "nixpkgs": "nixpkgs_22" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_21": { + "inputs": { + "nixpkgs": "nixpkgs_23" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_22": { + "inputs": { + "nixpkgs": "nixpkgs_24" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_23": { + "inputs": { + "nixpkgs": "nixpkgs_25" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_24": { + "inputs": { + "nixpkgs": "nixpkgs_26" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_25": { + "inputs": { + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_26": { + "inputs": { + "nixpkgs": "nixpkgs_28" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_27": { + "inputs": { + "nixpkgs": "nixpkgs_29" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_28": { + "inputs": { + "nixpkgs": "nixpkgs_30" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_29": { + "inputs": { + "nixpkgs": "nixpkgs_31" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_3": { "inputs": { "nixpkgs": "nixpkgs_5" }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_30": { + "inputs": { + "nixpkgs": "nixpkgs_32" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_31": { + "inputs": { + "nixpkgs": "nixpkgs_33" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_32": { + "inputs": { + "nixpkgs": "nixpkgs_34" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_33": { + "inputs": { + "nixpkgs": "nixpkgs_35" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_34": { + "inputs": { + "nixpkgs": "nixpkgs_36" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_35": { + "inputs": { + "nixpkgs": "nixpkgs_37" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_36": { + "inputs": { + "nixpkgs": "nixpkgs_38" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_37": { + "inputs": { + "nixpkgs": "nixpkgs_39" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_38": { + "inputs": { + "nixpkgs": "nixpkgs_40" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_39": { + "inputs": { + "nixpkgs": "nixpkgs_41" + }, "locked": { "lastModified": 1773955630, "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", @@ -742,10 +2299,370 @@ "type": "github" } }, + "logos-nix_40": { + "inputs": { + "nixpkgs": "nixpkgs_42" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_41": { + "inputs": { + "nixpkgs": "nixpkgs_43" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_42": { + "inputs": { + "nixpkgs": "nixpkgs_44" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_43": { + "inputs": { + "nixpkgs": "nixpkgs_45" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_44": { + "inputs": { + "nixpkgs": "nixpkgs_46" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_45": { + "inputs": { + "nixpkgs": "nixpkgs_47" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_46": { + "inputs": { + "nixpkgs": "nixpkgs_48" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_47": { + "inputs": { + "nixpkgs": "nixpkgs_49" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_48": { + "inputs": { + "nixpkgs": "nixpkgs_50" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_49": { + "inputs": { + "nixpkgs": "nixpkgs_51" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_5": { "inputs": { "nixpkgs": "nixpkgs_7" }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_50": { + "inputs": { + "nixpkgs": "nixpkgs_52" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_51": { + "inputs": { + "nixpkgs": "nixpkgs_53" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_52": { + "inputs": { + "nixpkgs": "nixpkgs_54" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_53": { + "inputs": { + "nixpkgs": "nixpkgs_55" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_54": { + "inputs": { + "nixpkgs": "nixpkgs_56" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_55": { + "inputs": { + "nixpkgs": "nixpkgs_57" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_56": { + "inputs": { + "nixpkgs": "nixpkgs_58" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_57": { + "inputs": { + "nixpkgs": "nixpkgs_59" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_58": { + "inputs": { + "nixpkgs": "nixpkgs_60" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_59": { + "inputs": { + "nixpkgs": "nixpkgs_61" + }, "locked": { "lastModified": 1773955630, "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", @@ -778,6 +2695,186 @@ "type": "github" } }, + "logos-nix_60": { + "inputs": { + "nixpkgs": "nixpkgs_62" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_61": { + "inputs": { + "nixpkgs": "nixpkgs_63" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_62": { + "inputs": { + "nixpkgs": "nixpkgs_64" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_63": { + "inputs": { + "nixpkgs": "nixpkgs_65" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_64": { + "inputs": { + "nixpkgs": "nixpkgs_66" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_65": { + "inputs": { + "nixpkgs": "nixpkgs_67" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_66": { + "inputs": { + "nixpkgs": "nixpkgs_68" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_67": { + "inputs": { + "nixpkgs": "nixpkgs_69" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_68": { + "inputs": { + "nixpkgs": "nixpkgs_70" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_69": { + "inputs": { + "nixpkgs": "nixpkgs_71" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_7": { "inputs": { "nixpkgs": "nixpkgs_9" @@ -796,6 +2893,186 @@ "type": "github" } }, + "logos-nix_70": { + "inputs": { + "nixpkgs": "nixpkgs_72" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_71": { + "inputs": { + "nixpkgs": "nixpkgs_73" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_72": { + "inputs": { + "nixpkgs": "nixpkgs_74" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_73": { + "inputs": { + "nixpkgs": "nixpkgs_75" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_74": { + "inputs": { + "nixpkgs": "nixpkgs_76" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_75": { + "inputs": { + "nixpkgs": "nixpkgs_77" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_76": { + "inputs": { + "nixpkgs": "nixpkgs_78" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_77": { + "inputs": { + "nixpkgs": "nixpkgs_79" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_78": { + "inputs": { + "nixpkgs": "nixpkgs_80" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_79": { + "inputs": { + "nixpkgs": "nixpkgs_81" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_8": { "inputs": { "nixpkgs": "nixpkgs_10" @@ -814,6 +3091,186 @@ "type": "github" } }, + "logos-nix_80": { + "inputs": { + "nixpkgs": "nixpkgs_82" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_81": { + "inputs": { + "nixpkgs": "nixpkgs_83" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_82": { + "inputs": { + "nixpkgs": "nixpkgs_84" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_83": { + "inputs": { + "nixpkgs": "nixpkgs_85" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_84": { + "inputs": { + "nixpkgs": "nixpkgs_86" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_85": { + "inputs": { + "nixpkgs": "nixpkgs_87" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_86": { + "inputs": { + "nixpkgs": "nixpkgs_88" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_87": { + "inputs": { + "nixpkgs": "nixpkgs_89" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_88": { + "inputs": { + "nixpkgs": "nixpkgs_90" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_89": { + "inputs": { + "nixpkgs": "nixpkgs_91" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_9": { "inputs": { "nixpkgs": "nixpkgs_11" @@ -832,10 +3289,195 @@ "type": "github" } }, + "logos-nix_90": { + "inputs": { + "nixpkgs": "nixpkgs_92" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_91": { + "inputs": { + "nixpkgs": "nixpkgs_93" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_92": { + "inputs": { + "nixpkgs": "nixpkgs_94" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_93": { + "inputs": { + "nixpkgs": "nixpkgs_95" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_94": { + "inputs": { + "nixpkgs": "nixpkgs_96" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_95": { + "inputs": { + "nixpkgs": "nixpkgs_97" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_96": { + "inputs": { + "nixpkgs": "nixpkgs_98" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_97": { + "inputs": { + "nixpkgs": "nixpkgs_99" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_98": { + "inputs": { + "nixpkgs": "nixpkgs_100" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_99": { + "inputs": { + "nixpkgs": "nixpkgs_101" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-package": { "inputs": { - "logos-nix": "logos-nix_9", + "logos-nix": "logos-nix_26", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-package-manager", "logos-package", @@ -859,11 +3501,16 @@ }, "logos-package-manager": { "inputs": { - "logos-nix": "logos-nix_8", + "logos-nix": "logos-nix_25", "logos-package": "logos-package", "nix-bundle-appimage": "nix-bundle-appimage", "nix-bundle-dir": "nix-bundle-dir_2", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-package-manager", "logos-nix", @@ -886,40 +3533,338 @@ }, "logos-package-manager_2": { "inputs": { - "logos-cpp-sdk": "logos-cpp-sdk_10", - "logos-liblogos": "logos-liblogos_5", - "logos-package": "logos-package_2", + "logos-nix": "logos-nix_42", + "logos-package": "logos-package_4", + "nix-bundle-appimage": "nix-bundle-appimage_2", + "nix-bundle-dir": "nix-bundle-dir_6", "nixpkgs": [ - "logos-module-viewer", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", "logos-package-manager", - "logos-liblogos", + "logos-nix", "nixpkgs" ] }, "locked": { - "lastModified": 1770753928, - "narHash": "sha256-61+3D+svB2mqyLpDFlHoIN+hBlbRGZUaueKysEiorNE=", + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", "owner": "logos-co", - "repo": "logos-package-manager-module", - "rev": "0cbf250ad2fec20c79dc5f61729a07c3a2bd50e1", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", "type": "github" }, "original": { "owner": "logos-co", - "repo": "logos-package-manager-module", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_3": { + "inputs": { + "logos-nix": "logos-nix_69", + "logos-package": "logos-package_6", + "nix-bundle-appimage": "nix-bundle-appimage_3", + "nix-bundle-dir": "nix-bundle-dir_9", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_4": { + "inputs": { + "logos-nix": "logos-nix_86", + "logos-package": "logos-package_9", + "nix-bundle-appimage": "nix-bundle-appimage_4", + "nix-bundle-dir": "nix-bundle-dir_13", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_5": { + "inputs": { + "logos-nix": "logos-nix_97", + "logos-package": "logos-package_11", + "nix-bundle-appimage": "nix-bundle-appimage_5", + "nix-bundle-dir": "nix-bundle-dir_16", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_6": { + "inputs": { + "logos-nix": "logos-nix_114", + "logos-package": "logos-package_14", + "nix-bundle-appimage": "nix-bundle-appimage_6", + "nix-bundle-dir": "nix-bundle-dir_20", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package_10": { + "inputs": { + "logos-nix": "logos-nix_92", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_11": { + "inputs": { + "logos-nix": "logos-nix_98", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_12": { + "inputs": { + "logos-nix": "logos-nix_107", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_13": { + "inputs": { + "logos-nix": "logos-nix_111", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_14": { + "inputs": { + "logos-nix": "logos-nix_115", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_15": { + "inputs": { + "logos-nix": "logos-nix_120", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", "type": "github" } }, "logos-package_2": { "inputs": { - "nixpkgs": "nixpkgs_27" + "logos-nix": "logos-nix_35", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] }, "locked": { - "lastModified": 1768925546, - "narHash": "sha256-Y4sgYs9wtZ9sHAuKl9LUy//ReeF4/AyK8HlnZsYrSqg=", + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", "owner": "logos-co", "repo": "logos-package", - "rev": "9230ae37c9d289c0c355dcf9fa40fd3be2e99f17", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", "type": "github" }, "original": { @@ -928,11 +3873,762 @@ "type": "github" } }, + "logos-package_3": { + "inputs": { + "logos-nix": "logos-nix_39", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_4": { + "inputs": { + "logos-nix": "logos-nix_43", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_5": { + "inputs": { + "logos-nix": "logos-nix_48", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_6": { + "inputs": { + "logos-nix": "logos-nix_70", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_7": { + "inputs": { + "logos-nix": "logos-nix_79", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_8": { + "inputs": { + "logos-nix": "logos-nix_83", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_9": { + "inputs": { + "logos-nix": "logos-nix_87", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-plugin-core": { + "inputs": { + "logos-module": "logos-module_2", + "logos-nix": "logos-nix_5", + "nixpkgs": [ + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779206088, + "narHash": "sha256-a+T5XY7KL1eFREtj4fzdMFnhD9BR8juSg9bQObbMeEQ=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8f8260e6f9aba54b55bf8cc88ddb673dabb7512b", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_2": { + "inputs": { + "logos-module": "logos-module_5", + "logos-nix": "logos-nix_12", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_3": { + "inputs": { + "logos-module": "logos-module_11", + "logos-nix": "logos-nix_56", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt": { + "inputs": { + "logos-module": "logos-module_3", + "logos-nix": "logos-nix_7", + "nixpkgs": [ + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779206088, + "narHash": "sha256-a+T5XY7KL1eFREtj4fzdMFnhD9BR8juSg9bQObbMeEQ=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8f8260e6f9aba54b55bf8cc88ddb673dabb7512b", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_2": { + "inputs": { + "logos-module": "logos-module_6", + "logos-nix": "logos-nix_14", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_3": { + "inputs": { + "logos-module": "logos-module_12", + "logos-nix": "logos-nix_58", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-qt-mcp": { + "inputs": { + "logos-nix": "logos-nix_32", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_2": { + "inputs": { + "logos-nix": "logos-nix_76", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_3": { + "inputs": { + "logos-nix": "logos-nix_104", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-qt-mcp", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-standalone-app": { + "inputs": { + "logos-capability-module": "logos-capability-module", + "logos-cpp-sdk": "logos-cpp-sdk_6", + "logos-design-system": "logos-design-system_2", + "logos-liblogos": "logos-liblogos_2", + "logos-nix": "logos-nix_103", + "logos-qt-mcp": "logos-qt-mcp_3", + "logos-view-module-runtime": "logos-view-module-runtime_3", + "nix-bundle-lgx": "nix-bundle-lgx_7", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779725202, + "narHash": "sha256-7IqnkRG1CkOKfiw5qf1o+Kg9ci+MKlcJNXgrg6GyYXk=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "f812b43f73f3c264ee0f8a8354f40721431d6846", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_2": { + "inputs": { + "logos-capability-module": "logos-capability-module_2", + "logos-cpp-sdk": "logos-cpp-sdk_3", + "logos-design-system": "logos-design-system", + "logos-liblogos": "logos-liblogos", + "logos-nix": "logos-nix_31", + "logos-qt-mcp": "logos-qt-mcp", + "logos-view-module-runtime": "logos-view-module-runtime", + "nix-bundle-lgx": "nix-bundle-lgx", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177364, + "narHash": "sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "a749953e0e9f3d716856d2bd818cd5757aeb065d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_3": { + "inputs": { + "logos-capability-module": "logos-capability-module_5", + "logos-cpp-sdk": "logos-cpp-sdk_8", + "logos-design-system": "logos-design-system_3", + "logos-liblogos": "logos-liblogos_3", + "logos-nix": "logos-nix_75", + "logos-qt-mcp": "logos-qt-mcp_2", + "logos-view-module-runtime": "logos-view-module-runtime_2", + "nix-bundle-lgx": "nix-bundle-lgx_4", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177364, + "narHash": "sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "a749953e0e9f3d716856d2bd818cd5757aeb065d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-test-framework": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_37", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_2": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_81", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_3": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_109", + "nixpkgs": [ + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-view-module-runtime": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_33", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168591, + "narHash": "sha256-gHapkm3yh3YNuM8EaFvThrJ2qVjcKKr5KA6wFfE0M7Q=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "3c3735c25c8d66cc713623420dc74e445442592a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_2": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_77", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168591, + "narHash": "sha256-gHapkm3yh3YNuM8EaFvThrJ2qVjcKKr5KA6wFfE0M7Q=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "3c3735c25c8d66cc713623420dc74e445442592a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_12", + "logos-nix": "logos-nix_105", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779723114, + "narHash": "sha256-6NNZG9FTaLRKwJZxtFWySlfiTanh25AmJK5Ru+S9HrM=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "21dddc380eca36e7e865cf5a437f63e0e16f30d3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, "nix-bundle-appimage": { "inputs": { - "logos-nix": "logos-nix_10", + "logos-nix": "logos-nix_27", "nix-bundle-dir": "nix-bundle-dir", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-package-manager", "nix-bundle-appimage", @@ -956,15 +4652,144 @@ }, "nix-bundle-appimage_2": { "inputs": { - "nix-bundle-dir": "nix-bundle-dir_3", - "nixpkgs": "nixpkgs_23" + "logos-nix": "logos-nix_44", + "nix-bundle-dir": "nix-bundle-dir_5", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] }, "locked": { - "lastModified": 1772047346, - "narHash": "sha256-RUsTUxKCxuQ3+D2LfBbK0EX1vF7HNMkpWgOGFfZbrEg=", + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", "owner": "logos-co", "repo": "nix-bundle-appimage", - "rev": "4d68437c97ac59c3c70c1b2b116235c434d571a8", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_3": { + "inputs": { + "logos-nix": "logos-nix_71", + "nix-bundle-dir": "nix-bundle-dir_8", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_4": { + "inputs": { + "logos-nix": "logos-nix_88", + "nix-bundle-dir": "nix-bundle-dir_12", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_5": { + "inputs": { + "logos-nix": "logos-nix_99", + "nix-bundle-dir": "nix-bundle-dir_15", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_6": { + "inputs": { + "logos-nix": "logos-nix_116", + "nix-bundle-dir": "nix-bundle-dir_19", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", "type": "github" }, "original": { @@ -975,8 +4800,13 @@ }, "nix-bundle-dir": { "inputs": { - "logos-nix": "logos-nix_11", + "logos-nix": "logos-nix_28", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-package-manager", "nix-bundle-appimage", @@ -997,10 +4827,186 @@ "type": "github" } }, - "nix-bundle-dir_2": { + "nix-bundle-dir_10": { "inputs": { - "logos-nix": "logos-nix_12", + "logos-nix": "logos-nix_80", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_11": { + "inputs": { + "logos-nix": "logos-nix_84", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_12": { + "inputs": { + "logos-nix": "logos-nix_89", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_13": { + "inputs": { + "logos-nix": "logos-nix_90", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_14": { + "inputs": { + "logos-nix": "logos-nix_93", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_15": { + "inputs": { + "logos-nix": "logos-nix_100", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_16": { + "inputs": { + "logos-nix": "logos-nix_101", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "logos-package-manager", "nix-bundle-dir", @@ -1022,21 +5028,185 @@ "type": "github" } }, - "nix-bundle-dir_3": { + "nix-bundle-dir_17": { "inputs": { + "logos-nix": "logos-nix_108", "nixpkgs": [ - "logos-module-viewer", - "logos-liblogos", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_18": { + "inputs": { + "logos-nix": "logos-nix_112", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_19": { + "inputs": { + "logos-nix": "logos-nix_117", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", "nix-bundle-appimage", "nixpkgs" ] }, "locked": { - "lastModified": 1771971384, - "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", "owner": "logos-co", "repo": "nix-bundle-dir", - "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_2": { + "inputs": { + "logos-nix": "logos-nix_29", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_20": { + "inputs": { + "logos-nix": "logos-nix_118", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_21": { + "inputs": { + "logos-nix": "logos-nix_121", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_3": { + "inputs": { + "logos-nix": "logos-nix_36", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", "type": "github" }, "original": { @@ -1047,14 +5217,24 @@ }, "nix-bundle-dir_4": { "inputs": { - "nixpkgs": "nixpkgs_24" + "logos-nix": "logos-nix_40", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] }, "locked": { - "lastModified": 1771971384, - "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", "owner": "logos-co", "repo": "nix-bundle-dir", - "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", "type": "github" }, "original": { @@ -1063,6 +5243,497 @@ "type": "github" } }, + "nix-bundle-dir_5": { + "inputs": { + "logos-nix": "logos-nix_45", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_6": { + "inputs": { + "logos-nix": "logos-nix_46", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_7": { + "inputs": { + "logos-nix": "logos-nix_49", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_8": { + "inputs": { + "logos-nix": "logos-nix_72", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_9": { + "inputs": { + "logos-nix": "logos-nix_73", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-lgx": { + "inputs": { + "logos-nix": "logos-nix_34", + "logos-package": "logos-package_2", + "nix-bundle-dir": "nix-bundle-dir_3", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_2": { + "inputs": { + "logos-nix": "logos-nix_38", + "logos-package": "logos-package_3", + "nix-bundle-dir": "nix-bundle-dir_4", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_3": { + "inputs": { + "logos-nix": "logos-nix_47", + "logos-package": "logos-package_5", + "nix-bundle-dir": "nix-bundle-dir_7", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_4": { + "inputs": { + "logos-nix": "logos-nix_78", + "logos-package": "logos-package_7", + "nix-bundle-dir": "nix-bundle-dir_10", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_5": { + "inputs": { + "logos-nix": "logos-nix_82", + "logos-package": "logos-package_8", + "nix-bundle-dir": "nix-bundle-dir_11", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_6": { + "inputs": { + "logos-nix": "logos-nix_91", + "logos-package": "logos-package_10", + "nix-bundle-dir": "nix-bundle-dir_14", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_7": { + "inputs": { + "logos-nix": "logos-nix_106", + "logos-package": "logos-package_12", + "nix-bundle-dir": "nix-bundle-dir_17", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_8": { + "inputs": { + "logos-nix": "logos-nix_110", + "logos-package": "logos-package_13", + "nix-bundle-dir": "nix-bundle-dir_18", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_9": { + "inputs": { + "logos-nix": "logos-nix_119", + "logos-package": "logos-package_15", + "nix-bundle-dir": "nix-bundle-dir_21", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-logos-module-install": { + "inputs": { + "logos-nix": "logos-nix_41", + "logos-package-manager": "logos-package-manager_2", + "nix-bundle-lgx": "nix-bundle-lgx_3", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_2": { + "inputs": { + "logos-nix": "logos-nix_85", + "logos-package-manager": "logos-package-manager_4", + "nix-bundle-lgx": "nix-bundle-lgx_6", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_3": { + "inputs": { + "logos-nix": "logos-nix_113", + "logos-package-manager": "logos-package-manager_6", + "nix-bundle-lgx": "nix-bundle-lgx_9", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1769461804, @@ -1095,6 +5766,166 @@ "type": "github" } }, + "nixpkgs_100": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_101": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_102": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_103": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_104": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_105": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_106": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_107": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_108": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_109": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_11": { "locked": { "lastModified": 1759036355, @@ -1111,6 +5942,166 @@ "type": "github" } }, + "nixpkgs_110": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_111": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_112": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_113": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_114": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_115": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_116": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_117": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_118": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_119": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_12": { "locked": { "lastModified": 1759036355, @@ -1127,6 +6118,70 @@ "type": "github" } }, + "nixpkgs_120": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_121": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_122": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_123": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_13": { "locked": { "lastModified": 1759036355, @@ -1305,11 +6360,11 @@ }, "nixpkgs_23": { "locked": { - "lastModified": 1771848320, - "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", "type": "github" }, "original": { @@ -1321,11 +6376,11 @@ }, "nixpkgs_24": { "locked": { - "lastModified": 1770562336, - "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", "type": "github" }, "original": { @@ -1369,11 +6424,43 @@ }, "nixpkgs_27": { "locked": { - "lastModified": 1768127708, - "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_28": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_29": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", "type": "github" }, "original": { @@ -1399,6 +6486,166 @@ "type": "github" } }, + "nixpkgs_30": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_31": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_32": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_33": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_34": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_35": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_36": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_37": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_38": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_39": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_4": { "locked": { "lastModified": 1759036355, @@ -1415,6 +6662,166 @@ "type": "github" } }, + "nixpkgs_40": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_41": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_42": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_43": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_44": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_45": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_46": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_47": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_48": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_49": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_5": { "locked": { "lastModified": 1759036355, @@ -1431,6 +6838,166 @@ "type": "github" } }, + "nixpkgs_50": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_51": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_52": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_53": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_54": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_55": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_56": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_57": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_58": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_59": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_6": { "locked": { "lastModified": 1759036355, @@ -1447,6 +7014,166 @@ "type": "github" } }, + "nixpkgs_60": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_61": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_62": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_63": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_64": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_65": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_66": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_67": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_68": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_69": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_7": { "locked": { "lastModified": 1759036355, @@ -1463,6 +7190,166 @@ "type": "github" } }, + "nixpkgs_70": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_71": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_72": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_73": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_74": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_75": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_76": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_77": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_78": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_79": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_8": { "locked": { "lastModified": 1759036355, @@ -1479,6 +7366,166 @@ "type": "github" } }, + "nixpkgs_80": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_81": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_82": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_83": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_84": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_85": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_86": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_87": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_88": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_89": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_9": { "locked": { "lastModified": 1759036355, @@ -1495,10 +7542,231 @@ "type": "github" } }, + "nixpkgs_90": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_91": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_92": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_93": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_94": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_95": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_96": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_97": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_98": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_99": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "process-stats": { "inputs": { - "logos-nix": "logos-nix_13", + "logos-nix": "logos-nix_30", "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_2": { + "inputs": { + "logos-nix": "logos-nix_74", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_3": { + "inputs": { + "logos-nix": "logos-nix_102", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", "logos-liblogos", "process-stats", "logos-nix", @@ -1522,13 +7790,7 @@ "root": { "inputs": { "logos-blockchain": "logos-blockchain", - "logos-core": "logos-core", - "logos-liblogos": "logos-liblogos", - "logos-module-viewer": "logos-module-viewer", - "nixpkgs": [ - "logos-liblogos", - "nixpkgs" - ] + "logos-module-builder": "logos-module-builder" } }, "rust-overlay": { diff --git a/flake.nix b/flake.nix index 301a1ee..0c28d3f 100644 --- a/flake.nix +++ b/flake.nix @@ -2,163 +2,45 @@ description = "Logos Blockchain Module - Qt6 Plugin"; inputs = { - nixpkgs.follows = "logos-liblogos/nixpkgs"; - - logos-liblogos.url = "github:logos-co/logos-liblogos"; - logos-core.url = "github:logos-co/logos-cpp-sdk"; - - #logos-blockchain.url = "github:logos-blockchain/logos-blockchain?rev=d7ff5984fa3371a89e944b163b358465a5e307ad"; # pre-0.1.3 + genesis fixes + logos-module-builder.url = "github:logos-co/logos-module-builder"; logos-blockchain.url = "github:logos-blockchain/logos-blockchain?ref=feat/nix/disable-testing"; # pre-0.1.3 + genesis fixes - - logos-module-viewer.url = "github:logos-co/logos-module-viewer"; }; - outputs = - { - self, - nixpkgs, - logos-core, - logos-blockchain, - logos-module-viewer, - ... - }: - let - lib = nixpkgs.lib; + outputs = inputs@{ logos-module-builder, ... }: + logos-module-builder.lib.mkLogosModule { + src = ./.; + configFile = ./metadata.json; + flakeInputs = inputs; - systems = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; + externalLibInputs = { + logos_blockchain = inputs.logos-blockchain; + }; - forAll = lib.genAttrs systems; + tests = { + dir = ./tests; + mockCLibs = [ "logos_blockchain" ]; + }; - mkPkgs = system: import nixpkgs { inherit system; }; - in - { - packages = forAll ( - system: - let - pkgs = mkPkgs system; - llvmPkgs = pkgs.llvmPackages; + preConfigure = { externalLibs }: '' + if [ -d "${externalLibs.logos_blockchain}/circuits" ]; then + echo "Staging zk circuits from logos-blockchain..." + cp -r "${externalLibs.logos_blockchain}/circuits" ./circuits + chmod -R u+w ./circuits + else + echo "WARNING: no circuits/ found in logos-blockchain derivation" + fi + ''; - logosCore = logos-core.packages.${system}.default; - logosBlockchainC = logos-blockchain.packages.${system}.logos-blockchain-c; - - logosBlockchainModule = pkgs.stdenv.mkDerivation { - pname = "logos-blockchain-module"; - version = "dev"; - src = ./.; - - nativeBuildInputs = [ - pkgs.cmake - pkgs.ninja - pkgs.pkg-config - pkgs.qt6.wrapQtAppsHook - ]; - - buildInputs = [ - pkgs.qt6.qtbase - pkgs.qt6.qtremoteobjects - pkgs.qt6.qttools - llvmPkgs.clang - llvmPkgs.libclang - logosBlockchainC - ] - ++ lib.optionals pkgs.stdenv.isDarwin [ - pkgs.libiconv - pkgs.cacert - ]; - - LIBCLANG_PATH = "${llvmPkgs.libclang.lib}/lib"; - CLANG_PATH = "${llvmPkgs.clang}/bin/clang"; - SSL_CERT_FILE = lib.optionalString pkgs.stdenv.isDarwin "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"; - - cmakeFlags = [ - "-DLOGOS_CORE_ROOT=${logosCore}" - "-DLOGOS_BLOCKCHAIN_LIB=${logosBlockchainC}/lib" - "-DLOGOS_BLOCKCHAIN_INCLUDE=${logosBlockchainC}/include" - ]; - - postInstall = '' - mkdir $out/share - cp -r ${logosBlockchainC}/circuits $out/share - ''; - - # Logos Core Edge-case - # The current version of Logos Core expects circuits' binaries under `lib/circuits/`. - # Until we address this in Logos Core, we use this hook to include to ensure the circuits' binaries - # are included in the binary bundle and avoid the circuits being mangled by Nix (which did that when - # copying them in a previous phase). - postFixup = '' - cp -r ${logosBlockchainC}/circuits $out/lib/circuits - ''; - }; - in - { - lib = logosBlockchainModule; - default = logosBlockchainModule; - } - ); - - apps = forAll ( - system: - let - pkgs = mkPkgs system; - logosBlockchainModuleLib = self.packages.${system}.lib; - logosModuleViewer = logos-module-viewer.packages.${system}.default; - extension = if pkgs.stdenv.isDarwin then "dylib" - else if pkgs.stdenv.hostPlatform.isWindows then "dll" - else "so"; - inspectModule = { - type = "app"; - program = - "${pkgs.writeShellScriptBin "inspect-module" '' - exec ${logosModuleViewer}/bin/logos-module-viewer \ - --module ${logosBlockchainModuleLib}/lib/liblogos_blockchain_module.${extension} - ''}/bin/inspect-module"; - }; - in - { - inspect-module = inspectModule; - default = inspectModule; - } - ); - - devShells = forAll ( - system: - let - pkgs = mkPkgs system; - pkg = self.packages.${system}.default; - logosCore = logos-core.packages.${system}.default; - logosBlockchainC = logos-blockchain.packages.${system}.logos-blockchain-c; - in - { - default = pkgs.mkShell { - inputsFrom = [ pkg ]; - - inherit (pkg) - LIBCLANG_PATH - CLANG_PATH; - - LOGOS_CORE_ROOT = "${logosCore}"; - LOGOS_BLOCKCHAIN_LIB = "${logosBlockchainC}/lib"; - LOGOS_BLOCKCHAIN_INCLUDE = "${logosBlockchainC}/include"; - - shellHook = '' - BLUE='\e[1;34m' - GREEN='\e[1;32m' - RESET='\e[0m' - - echo -e "\n''${BLUE}=== Logos Blockchain Module Development Environment ===''${RESET}" - echo -e "''${GREEN}LOGOS_CORE_ROOT:''${RESET} $LOGOS_CORE_ROOT" - echo -e "''${GREEN}LOGOS_BLOCKCHAIN_LIB:''${RESET} $LOGOS_BLOCKCHAIN_LIB" - echo -e "''${GREEN}LOGOS_BLOCKCHAIN_INCLUDE:''${RESET} $LOGOS_BLOCKCHAIN_INCLUDE" - echo -e "''${BLUE}---------------------------------------------------------''${RESET}" - ''; - }; - } - ); + # Logos Core Edge-case + # The current version of Logos Core expects circuits' binaries under `lib/circuits/`. + # Until we address this in Logos Core, we use this hook to include to ensure the circuits' binaries + # are included in the binary bundle and avoid the circuits being mangled by Nix (which did that when + # copying them in a previous phase). + postInstall = '' + if [ -d "$LOGOS_MODULE_SOURCE_DIR/circuits" ]; then + cp -r "$LOGOS_MODULE_SOURCE_DIR/circuits" "$out/lib/circuits" + chmod -R u+w "$out/lib/circuits" + fi + ''; }; } diff --git a/justfile b/justfile index 6a3a553..d35b6da 100644 --- a/justfile +++ b/justfile @@ -1,13 +1,13 @@ default: build +# Inside `nix develop` / `ws develop logos-blockchain-module` the module-builder +# provides LOGOS_CPP_SDK_ROOT and LOGOS_MODULE_BUILDER_ROOT — CMake picks them +# up automatically via the logos_module() macro, no explicit -D flags needed. configure: - cmake -S . -B build -G Ninja \ - ${LOGOS_CORE_ROOT:+-DLOGOS_CORE_ROOT="$LOGOS_CORE_ROOT"} \ - ${LOGOS_BLOCKCHAIN_LIB:+-DLOGOS_BLOCKCHAIN_LIB="$LOGOS_BLOCKCHAIN_LIB"} \ - ${LOGOS_BLOCKCHAIN_INCLUDE:+-DLOGOS_BLOCKCHAIN_INCLUDE="$LOGOS_BLOCKCHAIN_INCLUDE"} + cmake -S . -B build -G Ninja build: configure - cmake --build build --parallel --target logos_blockchain_module + cmake --build build --parallel --target liblogos_blockchain_module_module_plugin clean: rm -rf build result diff --git a/metadata.json b/metadata.json index 4141552..fcc2d5f 100644 --- a/metadata.json +++ b/metadata.json @@ -4,17 +4,35 @@ "description": "Logos blockchain node for logos-core", "author": "Logos Blockchain Team", "type": "core", + "interface": "universal", + "codegen": { + "impl_header": "logos_blockchain_module.h", + "impl_class": "LogosBlockchainModule" + }, "category": "blockchain", - "main": "liblogos_blockchain_module", + "main": "liblogos_blockchain_module_plugin", "dependencies": [], "capabilities": [], "include": [ "liblogos_blockchain.dylib", "liblogos_blockchain.so", "liblogos_blockchain.dll", - "liblogos_blockchain_module.dylib", - "liblogos_blockchain_module.so", - "liblogos_blockchain_module.dll", + "liblogos_blockchain_module_plugin.dylib", + "liblogos_blockchain_module_plugin.so", + "liblogos_blockchain_module_plugin.dll", "circuits" - ] -} \ No newline at end of file + ], + + "nix": { + "packages": { + "build": [], + "runtime": ["nlohmann_json", "boost"] + }, + "external_libraries": [ + { "name": "logos_blockchain" } + ], + "cmake": { + "extra_include_dirs": ["lib"] + } + } +} diff --git a/src/i_logos_blockchain_module.h b/src/i_logos_blockchain_module.h deleted file mode 100644 index a9467d4..0000000 --- a/src/i_logos_blockchain_module.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef I_LOGOS_BLOCKCHAIN_MODULE_API_H -#define I_LOGOS_BLOCKCHAIN_MODULE_API_H - -#include -#include - -class ILogosBlockchainModule { -public: - virtual ~ILogosBlockchainModule() = default; - - // Logos Core - virtual void initLogos(LogosAPI* logos_api_instance) = 0; - - // ---- Node ---- - - // Lifecycle - virtual int generate_user_config(const QVariantMap& args) = 0; - virtual int generate_user_config_from_str(const QString& args) = 0; - virtual int start(const QString& config_path, const QString& deployment) = 0; - virtual int stop() = 0; - - // Wallet - virtual QString wallet_get_balance(const QString& address_hex) = 0; - virtual QString wallet_transfer_funds( - const QString& change_public_key, - const QStringList& sender_addresses, - const QString& recipient_address, - const QString& amount, - const QString& optional_tip_hex - ) = 0; - virtual QStringList wallet_get_known_addresses() = 0; - - // Blend - virtual QString blend_join_as_core_node( - const QString& provider_id_hex, - const QString& zk_id_hex, - const QString& locked_note_id_hex, - const QStringList& locators - ) = 0; - - // Storage - virtual QString get_block(const QString& header_id_hex) = 0; - virtual QString get_blocks(quint64 from_slot, quint64 to_slot) = 0; - virtual QString get_transaction(const QString& tx_hash_hex) = 0; - - // Cryptarchia - virtual QString get_cryptarchia_info() = 0; -}; - -#define ILogosBlockchainModule_iid "org.logos.ilogosblockchainmodule" -Q_DECLARE_INTERFACE(ILogosBlockchainModule, ILogosBlockchainModule_iid) - -#endif diff --git a/src/logos_blockchain_module.cpp b/src/logos_blockchain_module.cpp index b1b8613..873f944 100644 --- a/src/logos_blockchain_module.cpp +++ b/src/logos_blockchain_module.cpp @@ -1,62 +1,86 @@ #include "logos_blockchain_module.h" -#include "logos_api_client.h" -#include -#include -#include -#include -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace fs = std::filesystem; +using json = nlohmann::json; // Define static member LogosBlockchainModule* LogosBlockchainModule::s_instance = nullptr; namespace { + // Rust `File::open` / `deserialize_config_at_path` only accept real filesystem paths. QML often + // passes `file:///...` URLs; strip to a local path when applicable. + std::string localPathFromFileUrl(const std::string& s) { + if (s.size() >= 7 && s.substr(0, 7) == "file://") return s.substr(7); + if (s.size() >= 5 && s.substr(0, 5) == "file:") return s.substr(5); + return s; + } + // Use the C API type Hash (from logos_blockchain.h) to define address/hash byte size. constexpr int ADDRESS_BYTES = sizeof(Hash); constexpr int ADDRESS_HEX_LEN = ADDRESS_BYTES * 2; - // Parses ADDRESS_HEX_LEN hex chars (optional 0x prefix) to ADDRESS_BYTES. Returns empty QByteArray on error. - QByteArray parse_address_hex(const QString& address_hex) { - QString hex = address_hex.trimmed(); - if (hex.startsWith(QStringLiteral("0x"), Qt::CaseInsensitive)) - hex = hex.mid(2); - if (hex.length() != ADDRESS_HEX_LEN) + std::vector parse_address_hex(const std::string& address_hex) { + std::string hex = address_hex; + boost::algorithm::trim(hex); + if (hex.size() >= 2 && hex[0] == '0' && (hex[1] == 'x' || hex[1] == 'X')) + hex = hex.substr(2); + if (static_cast(hex.size()) != ADDRESS_HEX_LEN) return {}; - QByteArray bytes = QByteArray::fromHex(hex.toUtf8()); - if (bytes.size() != ADDRESS_BYTES) + try { + std::string decoded; + boost::algorithm::unhex(hex.begin(), hex.end(), std::back_inserter(decoded)); + return {decoded.begin(), decoded.end()}; + } catch (const boost::algorithm::non_hex_input&) { return {}; - return bytes; + } + } + + std::string bytes_to_hex(const uint8_t* data, size_t len) { + std::string out; + out.reserve(len * 2); + boost::algorithm::hex_lower(data, data + len, std::back_inserter(out)); + return out; } // Wrapper that owns data and provides GenerateConfigArgs struct OwnedGenerateConfigArgs { - std::vector initial_peers_data; + std::vector initial_peers_data; std::vector initial_peers_ptrs; uint32_t initial_peers_count_val; - QByteArray output_data; + std::string output_data; uint16_t net_port_val; uint16_t blend_port_val; - QByteArray http_addr_data; - QByteArray external_address_data; + std::string http_addr_data; + std::string external_address_data; bool no_public_ip_check_val; - QByteArray custom_deployment_config_path_data; + std::string custom_deployment_config_path_data; Deployment deployment_val{}; - QByteArray state_path_data; + std::string state_path_data; // The FFI struct with pointers into owned data GenerateConfigArgs ffi_args{}; - // Constructor that populates both owned data and FFI struct - explicit OwnedGenerateConfigArgs(const QVariantMap& args) { - // initial_peers (QStringList -> const char**) - if (args.contains("initial_peers")) { - QStringList peers = args["initial_peers"].toStringList(); - initial_peers_count_val = static_cast(peers.size()); - - for (const QString& peer : peers) { - initial_peers_data.push_back(peer.toUtf8()); + // Constructor that populates both owned data and FFI struct from JSON + explicit OwnedGenerateConfigArgs(const json& args) { + // initial_peers (JSON array -> const char**) + if (args.contains("initial_peers") && args["initial_peers"].is_array()) { + for (const auto& peer : args["initial_peers"]) { + initial_peers_data.push_back(peer.get()); } - for (const QByteArray& data : initial_peers_data) { - initial_peers_ptrs.push_back(data.constData()); + initial_peers_count_val = static_cast(initial_peers_data.size()); + + for (const std::string& data : initial_peers_data) { + initial_peers_ptrs.push_back(data.c_str()); } ffi_args.initial_peers = initial_peers_ptrs.data(); @@ -66,49 +90,49 @@ namespace { ffi_args.initial_peers_count = nullptr; } - // output (QString -> const char*) - if (args.contains("output")) { - output_data = args["output"].toString().toUtf8(); - ffi_args.output = output_data.constData(); + // output (string -> const char*) + if (args.contains("output") && args["output"].is_string()) { + output_data = args["output"].get(); + ffi_args.output = output_data.c_str(); } else { ffi_args.output = nullptr; } // net_port (int -> const uint16_t*) - if (args.contains("net_port")) { - net_port_val = static_cast(args["net_port"].toInt()); + if (args.contains("net_port") && args["net_port"].is_number_integer()) { + net_port_val = static_cast(args["net_port"].get()); ffi_args.net_port = &net_port_val; } else { ffi_args.net_port = nullptr; } // blend_port (int -> const uint16_t*) - if (args.contains("blend_port")) { - blend_port_val = static_cast(args["blend_port"].toInt()); + if (args.contains("blend_port") && args["blend_port"].is_number_integer()) { + blend_port_val = static_cast(args["blend_port"].get()); ffi_args.blend_port = &blend_port_val; } else { ffi_args.blend_port = nullptr; } - // http_addr (QString -> const char*) - if (args.contains("http_addr")) { - http_addr_data = args["http_addr"].toString().toUtf8(); - ffi_args.http_addr = http_addr_data.constData(); + // http_addr (string -> const char*) + if (args.contains("http_addr") && args["http_addr"].is_string()) { + http_addr_data = args["http_addr"].get(); + ffi_args.http_addr = http_addr_data.c_str(); } else { ffi_args.http_addr = nullptr; } - // external_address (QString -> const char*) - if (args.contains("external_address")) { - external_address_data = args["external_address"].toString().toUtf8(); - ffi_args.external_address = external_address_data.constData(); + // external_address (string -> const char*) + if (args.contains("external_address") && args["external_address"].is_string()) { + external_address_data = args["external_address"].get(); + ffi_args.external_address = external_address_data.c_str(); } else { ffi_args.external_address = nullptr; } // no_public_ip_check (bool -> const bool*) - if (args.contains("no_public_ip_check")) { - no_public_ip_check_val = args["no_public_ip_check"].toBool(); + if (args.contains("no_public_ip_check") && args["no_public_ip_check"].is_boolean()) { + no_public_ip_check_val = args["no_public_ip_check"].get(); ffi_args.no_public_ip_check = &no_public_ip_check_val; } else { ffi_args.no_public_ip_check = nullptr; @@ -117,22 +141,21 @@ namespace { // deployment (const struct Deployment*) // Expected format: { "deployment": { "well_known_deployment": "devnet" } } // OR: { "deployment": { "config_path": "/path/to/config" } } - if (args.contains("deployment")) { - const QVariantMap deployment = args["deployment"].toMap(); // NOLINT: Move definition to if-statement + if (args.contains("deployment") && args["deployment"].is_object()) { + const auto& deployment = args["deployment"]; - if (deployment.contains("well_known_deployment")) { + if (deployment.contains("well_known_deployment") && deployment["well_known_deployment"].is_string()) { deployment_val.deployment_type = DeploymentType::WellKnown; - const QString wellknown = - deployment["well_known_deployment"].toString(); // NOLINT: Move definition to if-statement + const std::string wellknown = deployment["well_known_deployment"].get(); if (wellknown == "devnet") { deployment_val.well_known_deployment = WellKnownDeployment::Devnet; } deployment_val.custom_deployment_config_path = nullptr; - } else if (deployment.contains("config_path")) { + } else if (deployment.contains("config_path") && deployment["config_path"].is_string()) { deployment_val.deployment_type = DeploymentType::Custom; deployment_val.well_known_deployment = static_cast(0); - custom_deployment_config_path_data = deployment["config_path"].toString().toUtf8(); - deployment_val.custom_deployment_config_path = custom_deployment_config_path_data.constData(); + custom_deployment_config_path_data = deployment["config_path"].get(); + deployment_val.custom_deployment_config_path = custom_deployment_config_path_data.c_str(); } ffi_args.deployment = &deployment_val; @@ -140,10 +163,10 @@ namespace { ffi_args.deployment = nullptr; } - // state_path (QString -> const char*) - if (args.contains("state_path")) { - state_path_data = args["state_path"].toString().toUtf8(); - ffi_args.state_path = state_path_data.constData(); + // state_path (string -> const char*) + if (args.contains("state_path") && args["state_path"].is_string()) { + state_path_data = args["state_path"].get(); + ffi_args.state_path = state_path_data.c_str(); } else { ffi_args.state_path = nullptr; } @@ -154,35 +177,38 @@ namespace { namespace environment { constexpr auto LOGOS_BLOCKCHAIN_CIRCUITS = "LOGOS_BLOCKCHAIN_CIRCUITS"; - // Checks the directory exists and ensures it contains at least one file to avoid an empty directory false positive - bool is_circuits_path_valid(const QString& path) { - const QDir directory(path); - return directory.exists() && !directory.entryList(QDir::Files | QDir::NoDotAndDotDot).isEmpty(); + bool is_circuits_path_valid(const std::string& path) { + std::error_code ec; + if (!fs::is_directory(path, ec)) return false; + for (const auto& entry : fs::directory_iterator(path, ec)) { + if (entry.is_regular_file()) return true; + } + return false; } - void setup_circuits_path(const LogosAPI& logos_api) { - const QString module_path = logos_api.property("modulePath").toString(); - const QDir module_directory(module_path); + void setup_circuits_path(const std::string& module_path) { + fs::path circuits_path = fs::path(module_path) / "circuits"; + std::string circuits_str = circuits_path.string(); - const QString circuits_path = module_directory.filePath(QStringLiteral("circuits")); - if (!is_circuits_path_valid(circuits_path)) { - qFatal() << "The LOGOS_BLOCKCHAIN_CIRCUITS environment variable is not set or does not contain any files."; + if (!is_circuits_path_valid(circuits_str)) { + fprintf(stderr, "FATAL: The LOGOS_BLOCKCHAIN_CIRCUITS environment variable is not set or does not contain any files.\n"); return; } - qputenv("LOGOS_BLOCKCHAIN_CIRCUITS", circuits_path.toUtf8()); - qInfo() << "LOGOS_BLOCKCHAIN_CIRCUITS set to:" << circuits_path; + setenv("LOGOS_BLOCKCHAIN_CIRCUITS", circuits_str.c_str(), 1); + fprintf(stderr, "LOGOS_BLOCKCHAIN_CIRCUITS set to: %s\n", circuits_str.c_str()); } } // namespace environment void LogosBlockchainModule::on_new_block_callback(const char* block) { if (s_instance) { - qInfo() << "Received new block: " << block; - QVariantList data; - data.append(QString::fromUtf8(block)); - s_instance->emit_event("newBlock", data); + fprintf(stderr, "Received new block: %s\n", block); + json j; + j["block"] = std::string(block); + if (s_instance->emitEvent) + s_instance->emitEvent("newBlock", j.dump()); // SAFETY: - // We are getting an owned pointer here which is freed after this callback is called, so there is not need to + // We are getting an owned pointer here which is freed after this callback is called, so there is no need to // free the resource here as we are copying the data! } } @@ -198,100 +224,81 @@ LogosBlockchainModule::~LogosBlockchainModule() { } } -// Logos Core - -QString LogosBlockchainModule::name() const { - return "liblogos_blockchain_module"; -} - -QString LogosBlockchainModule::version() const { - return "1.0.0"; -} - -void LogosBlockchainModule::initLogos(LogosAPI* logos_api_instance) { - logosAPI = logos_api_instance; - if (logosAPI) { - client = logosAPI->getClient("liblogos_blockchain_module"); - if (!client) { - qWarning() << "LogosBlockchainModule: Failed to get liblogos_blockchain_module client"; - } - } -} - // ---- Node ---- // Lifecycle -int LogosBlockchainModule::generate_user_config(const QVariantMap& args) { - const OwnedGenerateConfigArgs owned_args(args); +int LogosBlockchainModule::generate_user_config(const std::string& json_args) { + json parsed_args; + try { + parsed_args = json::parse(json_args); + } catch (const json::parse_error& e) { + fprintf(stderr, "Failed to parse JSON args: %s\n", e.what()); + return 1; + } + + const OwnedGenerateConfigArgs owned_args(parsed_args); const OperationStatus status = ::generate_user_config(owned_args.ffi_args); if (!is_ok(&status)) { - qCritical() << "Failed to generate user config. Error:" << status; + fprintf(stderr, "Failed to generate user config. Error: %d\n", status); return 1; } return 0; } -int LogosBlockchainModule::generate_user_config_from_str(const QString& args) { - const QVariantMap parsed_args = QJsonDocument::fromJson(args.toUtf8()).object().toVariantMap(); - return generate_user_config(parsed_args); -} - -int LogosBlockchainModule::start(const QString& config_path, const QString& deployment) { +int LogosBlockchainModule::start(const std::string& config_path, const std::string& deployment) { if (node) { - qWarning() << "Could not execute the operation: The node is already running."; + fprintf(stderr, "Could not execute the operation: The node is already running.\n"); return 1; } - if (!logosAPI) { - qCritical() << "LogosAPI instance is null, cannot start node."; - return 2; + + const char* module_path_env = std::getenv("LOGOS_MODULE_PATH"); + if (module_path_env && *module_path_env) { + environment::setup_circuits_path(module_path_env); + } else { + fprintf(stderr, "Warning: LOGOS_MODULE_PATH not set, skipping circuits path setup.\n"); } - environment::setup_circuits_path(*logosAPI); - QString effective_config_path = config_path; + std::string effective_config_path = config_path; - if (effective_config_path.isEmpty()) { - const char* env = std::getenv("LB_CONFIG_PATH"); // NOLINT: Move definition to if-statement + if (effective_config_path.empty()) { + const char* env = std::getenv("LB_CONFIG_PATH"); if (env && *env) { - effective_config_path = QString::fromUtf8(env); - qInfo() << "Using config from LB_CONFIG_PATH:" << effective_config_path; + effective_config_path = env; + fprintf(stderr, "Using config from LB_CONFIG_PATH: %s\n", effective_config_path.c_str()); } else { - qCritical() << "Config path was not specified and LB_CONFIG_PATH is not set."; + fprintf(stderr, "Config path was not specified and LB_CONFIG_PATH is not set.\n"); return 3; } } - qInfo() << "Starting the node with the configuration file:" << effective_config_path; - qInfo() << "Using deployment:" << (deployment.isEmpty() ? "" : deployment); + effective_config_path = localPathFromFileUrl(effective_config_path); + const std::string deployment_path = localPathFromFileUrl(deployment); - const QByteArray config_path_buffer = effective_config_path.toUtf8(); - const char* config_path_ptr = effective_config_path.isEmpty() ? nullptr : config_path_buffer.constData(); - - const QByteArray deployment_buffer = deployment.toUtf8(); - const char* deployment_ptr = deployment.isEmpty() ? nullptr : deployment_buffer.constData(); + const char* config_path_ptr = effective_config_path.empty() ? nullptr : effective_config_path.c_str(); + const char* deployment_ptr = deployment_path.empty() ? nullptr : deployment_path.c_str(); auto [value, error] = start_lb_node(config_path_ptr, deployment_ptr); - qInfo() << "Start node returned with value and error."; + fprintf(stderr, "Start node returned with value and error.\n"); if (!is_ok(&error)) { - qCritical() << "Failed to start the node. Error:" << error; + fprintf(stderr, "Failed to start the node. Error: %d\n", error); return 4; } node = value; - qInfo() << "The node was started successfully."; + fprintf(stderr, "The node was started successfully.\n"); - // Subscribe to block events if (!node) { - qWarning() << "Could not subscribe to block events: The node is not running."; + fprintf(stderr, "Could not subscribe to block events: The node is not running.\n"); return 4; } s_instance = this; const OperationStatus subscribe_status = subscribe_to_new_blocks(node, on_new_block_callback); if (!is_ok(&subscribe_status)) { - qCritical() << "Failed to subscribe to new blocks. Error:" << subscribe_status; + fprintf(stderr, "Failed to subscribe to new blocks. Error: %d\n", subscribe_status); return 5; } @@ -300,17 +307,17 @@ int LogosBlockchainModule::start(const QString& config_path, const QString& depl int LogosBlockchainModule::stop() { if (!node) { - qWarning() << "Could not execute the operation: The node is not running."; + fprintf(stderr, "Could not execute the operation: The node is not running.\n"); return 1; } - s_instance = nullptr; // Clear before stopping to prevent callbacks during shutdown + s_instance = nullptr; const OperationStatus status = stop_node(node); if (is_ok(&status)) { - qInfo() << "The node was stopped successfully."; + fprintf(stderr, "The node was stopped successfully.\n"); } else { - qCritical() << "Could not stop the node. Error:" << status; + fprintf(stderr, "Could not stop the node. Error: %d\n", status); } node = nullptr; @@ -319,296 +326,262 @@ int LogosBlockchainModule::stop() { // Wallet -QString LogosBlockchainModule::wallet_get_balance(const QString& address_hex) { - qDebug() << "wallet_get_balance: address_hex=" << address_hex; +std::string LogosBlockchainModule::wallet_get_balance(const std::string& address_hex) { + fprintf(stderr, "wallet_get_balance: address_hex=%s\n", address_hex.c_str()); if (!node) { - return QStringLiteral("Error: The node is not running."); + return "Error: The node is not running."; } - const QByteArray bytes = parse_address_hex(address_hex); - if (bytes.isEmpty() || bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Address must be 64 hex characters (32 bytes)."); + const std::vector bytes = parse_address_hex(address_hex); + if (bytes.empty() || static_cast(bytes.size()) != ADDRESS_BYTES) { + return "Error: Address must be 64 hex characters (32 bytes)."; } - auto [value, error] = get_balance(node, reinterpret_cast(bytes.constData()), nullptr); + auto [value, error] = get_balance(node, bytes.data(), nullptr); if (!is_ok(&error)) { - return QStringLiteral("Error: Failed to get balance: ") + QString::number(error); + return "Error: Failed to get balance: " + std::to_string(error); } - return QString::number(value); + return std::to_string(value); } -QString LogosBlockchainModule::wallet_transfer_funds( - const QString& change_public_key, - const QStringList& sender_addresses, - const QString& recipient_address, - const QString& amount, - const QString& optional_tip_hex +std::string LogosBlockchainModule::wallet_transfer_funds( + const std::string& change_public_key, + const std::vector& sender_addresses, + const std::string& recipient_address, + const std::string& amount, + const std::string& optional_tip_hex ) { if (!node) { - return QStringLiteral("Error: The node is not running."); + return "Error: The node is not running."; } - bool ok = false; - const quint64 amount_val = amount.trimmed().toULongLong(&ok); - if (!ok) { - return QStringLiteral("Error: Invalid amount (positive integer required)."); + std::string amount_trimmed = amount; + boost::algorithm::trim(amount_trimmed); + uint64_t amount_val = 0; + auto [ptr, ec] = std::from_chars(amount_trimmed.data(), amount_trimmed.data() + amount_trimmed.size(), amount_val); + if (ec != std::errc{} || ptr != amount_trimmed.data() + amount_trimmed.size() || amount_trimmed.empty()) { + return "Error: Invalid amount (positive integer required)."; } - const QByteArray change_bytes = parse_address_hex(change_public_key); - if (change_bytes.isEmpty() || change_bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Invalid change_public_key (64 hex characters required)."); + const std::vector change_bytes = parse_address_hex(change_public_key); + if (change_bytes.empty() || static_cast(change_bytes.size()) != ADDRESS_BYTES) { + return "Error: Invalid change_public_key (64 hex characters required)."; } - const QByteArray recipient_bytes = parse_address_hex(recipient_address); - if (recipient_bytes.isEmpty() || recipient_bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Invalid recipient_address (64 hex characters required)."); + const std::vector recipient_bytes = parse_address_hex(recipient_address); + if (recipient_bytes.empty() || static_cast(recipient_bytes.size()) != ADDRESS_BYTES) { + return "Error: Invalid recipient_address (64 hex characters required)."; } - if (sender_addresses.isEmpty()) { - return QStringLiteral("Error: At least one sender address required."); + if (sender_addresses.empty()) { + return "Error: At least one sender address required."; } - QVector funding_bytes; - for (const QString& hex : sender_addresses) { - QByteArray b = parse_address_hex(hex); - if (b.isEmpty() || b.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Invalid sender address (64 hex characters required)."); + std::vector> funding_bytes; + for (const std::string& hex : sender_addresses) { + std::vector b = parse_address_hex(hex); + if (b.empty() || static_cast(b.size()) != ADDRESS_BYTES) { + return "Error: Invalid sender address (64 hex characters required)."; } - funding_bytes.append(b); + funding_bytes.push_back(std::move(b)); } - QVector funding_ptrs; - for (const QByteArray& b : funding_bytes) - funding_ptrs.append(reinterpret_cast(b.constData())); + std::vector funding_ptrs; + for (const auto& b : funding_bytes) + funding_ptrs.push_back(b.data()); - QByteArray tip_bytes; // NOLINT: Needs to be outside of scope for lifetime + std::vector tip_bytes; const HeaderId* optional_tip = nullptr; - if (!optional_tip_hex.isEmpty()) { + if (!optional_tip_hex.empty()) { tip_bytes = parse_address_hex(optional_tip_hex); - if (tip_bytes.isEmpty() || tip_bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Invalid optional tip (64 hex characters or empty)."); + if (tip_bytes.empty() || static_cast(tip_bytes.size()) != ADDRESS_BYTES) { + return "Error: Invalid optional tip (64 hex characters or empty)."; } - optional_tip = reinterpret_cast(tip_bytes.constData()); + optional_tip = reinterpret_cast(tip_bytes.data()); } TransferFundsArguments args{}; args.optional_tip = optional_tip; - args.change_public_key = reinterpret_cast(change_bytes.constData()); - args.funding_public_keys = funding_ptrs.constData(); - args.funding_public_keys_len = static_cast(funding_ptrs.size()); - args.recipient_public_key = reinterpret_cast(recipient_bytes.constData()); + args.change_public_key = change_bytes.data(); + args.funding_public_keys = funding_ptrs.data(); + args.funding_public_keys_len = funding_ptrs.size(); + args.recipient_public_key = recipient_bytes.data(); args.amount = amount_val; auto [value, error] = transfer_funds(node, &args); if (!is_ok(&error)) { - return QStringLiteral("Error: Failed to transfer funds: ") + QString::number(error); + return "Error: Failed to transfer funds: " + std::to_string(error); } - // value is Hash (32 bytes); convert to hex string - const QByteArray hash_bytes(reinterpret_cast(&value), ADDRESS_BYTES); - return QString::fromUtf8(hash_bytes.toHex()); + return bytes_to_hex(reinterpret_cast(&value), ADDRESS_BYTES); } -QString LogosBlockchainModule::wallet_transfer_funds( - const QString& change_public_key, - const QString& sender_address, - const QString& recipient_address, - const QString& amount, - const QString& optional_tip_hex -) { - return wallet_transfer_funds( - change_public_key, QStringList{sender_address}, recipient_address, amount, optional_tip_hex - ); -} - -QStringList LogosBlockchainModule::wallet_get_known_addresses() { - QStringList out; +std::vector LogosBlockchainModule::wallet_get_known_addresses() { + std::vector out; if (!node) { - qWarning() << "Could not execute the operation: The node is not running."; + fprintf(stderr, "Could not execute the operation: The node is not running.\n"); return out; } auto [value, error] = get_known_addresses(node); if (!is_ok(&error)) { - qCritical() << "Failed to get known addresses. Error:" << error; + fprintf(stderr, "Failed to get known addresses. Error: %d\n", error); return out; } - // Each address is ADDRESS_BYTES (32) bytes for (size_t i = 0; i < value.len; ++i) { - const uint8_t* ptr = value.addresses[i]; // NOLINT: Move definition to if-statement + const uint8_t* ptr = value.addresses[i]; if (ptr) { - QByteArray addr(reinterpret_cast(ptr), ADDRESS_BYTES); - out.append(QString::fromUtf8(addr.toHex())); + out.push_back(bytes_to_hex(ptr, ADDRESS_BYTES)); } } const OperationStatus free_status = free_known_addresses(value); if (!is_ok(&free_status)) { - qWarning() << "Failed to free known addresses. Error:" << free_status; + fprintf(stderr, "Failed to free known addresses. Error: %d\n", free_status); } - qDebug() << "blockchain lib: known addresses, count=" << out.size() - << "sample:" << (out.isEmpty() ? QLatin1String("(none)") : out.constFirst()); + fprintf(stderr, "blockchain lib: known addresses, count=%zu sample:%s\n", + out.size(), out.empty() ? "(none)" : out.front().c_str()); return out; } // Blend -QString LogosBlockchainModule::blend_join_as_core_node( - const QString& provider_id_hex, - const QString& zk_id_hex, - const QString& locked_note_id_hex, - const QStringList& locators +std::string LogosBlockchainModule::blend_join_as_core_node( + const std::string& provider_id_hex, + const std::string& zk_id_hex, + const std::string& locked_note_id_hex, + const std::vector& locators ) { if (!node) { - return QStringLiteral("Error: The node is not running."); + return "Error: The node is not running."; } - const QByteArray provider_id_bytes = parse_address_hex(provider_id_hex); - if (provider_id_bytes.isEmpty() || provider_id_bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Invalid provider_id_hex (64 hex characters required)."); + const std::vector provider_id_bytes = parse_address_hex(provider_id_hex); + if (provider_id_bytes.empty() || static_cast(provider_id_bytes.size()) != ADDRESS_BYTES) { + return "Error: Invalid provider_id_hex (64 hex characters required)."; } - const QByteArray zk_id_bytes = parse_address_hex(zk_id_hex); - if (zk_id_bytes.isEmpty() || zk_id_bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Invalid zk_id_hex (64 hex characters required)."); + const std::vector zk_id_bytes = parse_address_hex(zk_id_hex); + if (zk_id_bytes.empty() || static_cast(zk_id_bytes.size()) != ADDRESS_BYTES) { + return "Error: Invalid zk_id_hex (64 hex characters required)."; } - const QByteArray locked_note_id_bytes = parse_address_hex(locked_note_id_hex); - if (locked_note_id_bytes.isEmpty() || locked_note_id_bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Invalid locked_note_id_hex (64 hex characters required)."); + const std::vector locked_note_id_bytes = parse_address_hex(locked_note_id_hex); + if (locked_note_id_bytes.empty() || static_cast(locked_note_id_bytes.size()) != ADDRESS_BYTES) { + return "Error: Invalid locked_note_id_hex (64 hex characters required)."; } - // QString is UTF-16, but the FFI requires UTF-8. - // locators_data owns the converted buffers, while locators_ptrs holds raw pointers into them for the FFI call. - // Using reserve() prevents reallocation, keeping the constData() pointers stable. - std::vector locators_data; + // locators_ptrs holds raw pointers into the std::strings (valid as long as locators lives). std::vector locators_ptrs; - locators_data.reserve(locators.size()); locators_ptrs.reserve(locators.size()); - for (const QString& locator : locators) { - locators_data.push_back(locator.toUtf8()); - locators_ptrs.push_back(locators_data.back().constData()); + for (const std::string& locator : locators) { + locators_ptrs.push_back(locator.c_str()); } auto [value, error] = ::blend_join_as_core_node( node, - reinterpret_cast(provider_id_bytes.constData()), - reinterpret_cast(zk_id_bytes.constData()), - reinterpret_cast(locked_note_id_bytes.constData()), + provider_id_bytes.data(), + zk_id_bytes.data(), + locked_note_id_bytes.data(), locators_ptrs.data(), locators_ptrs.size() ); if (!is_ok(&error)) { - return QStringLiteral("Error: Failed to join as core node: ") + QString::number(error); + return "Error: Failed to join as core node: " + std::to_string(error); } - const QByteArray declaration_id_bytes(reinterpret_cast(&value), sizeof(value)); - const QString declaration_id = QString::fromUtf8(declaration_id_bytes.toHex()); - qInfo() << "Successfully joined as core node. DeclarationId:" << declaration_id; + std::string declaration_id = bytes_to_hex(reinterpret_cast(&value), sizeof(value)); + fprintf(stderr, "Successfully joined as core node. DeclarationId: %s\n", declaration_id.c_str()); return declaration_id; } -// Storage +// Explorer -QString LogosBlockchainModule::get_block(const QString& header_id_hex) { +std::string LogosBlockchainModule::get_block(const std::string& header_id_hex) { if (!node) { - return QStringLiteral("Error: The node is not running."); + return "Error: The node is not running."; } - const QByteArray bytes = parse_address_hex(header_id_hex); - if (bytes.isEmpty() || bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Header ID must be 64 hex characters (32 bytes)."); + const std::vector bytes = parse_address_hex(header_id_hex); + if (bytes.empty() || static_cast(bytes.size()) != ADDRESS_BYTES) { + return "Error: Header ID must be 64 hex characters (32 bytes)."; } - auto [value, error] = ::get_block(node, reinterpret_cast(bytes.constData())); + auto [value, error] = ::get_block(node, reinterpret_cast(bytes.data())); if (!is_ok(&error)) { - qWarning() << "Failed to get block. Error:" << error; - return QStringLiteral("Error: Failed to get block: ") + QString::number(error); + fprintf(stderr, "Failed to get block. Error: %d\n", error); + return "Error: Failed to get block: " + std::to_string(error); } - const QString result = QString::fromUtf8(value); + std::string result(value); const OperationStatus free_status = free_cstring(value); if (!is_ok(&free_status)) { - qWarning() << "Failed to free block string. Error:" << free_status; + fprintf(stderr, "Failed to free block string. Error: %d\n", free_status); } return result; } -QString LogosBlockchainModule::get_blocks(const quint64 from_slot, const quint64 to_slot) { +std::string LogosBlockchainModule::get_blocks(const uint64_t from_slot, const uint64_t to_slot) { if (!node) { - return QStringLiteral("Error: The node is not running."); + return "Error: The node is not running."; } auto [value, error] = ::get_blocks(node, from_slot, to_slot); if (!is_ok(&error)) { - qWarning() << "Failed to get blocks. Error:" << error; - return QStringLiteral("Error: Failed to get blocks: ") + QString::number(error); + fprintf(stderr, "Failed to get blocks. Error: %d\n", error); + return "Error: Failed to get blocks: " + std::to_string(error); } - const QString result = QString::fromUtf8(value); + std::string result(value); const OperationStatus free_status = free_cstring(value); if (!is_ok(&free_status)) { - qWarning() << "Failed to free blocks string. Error:" << free_status; + fprintf(stderr, "Failed to free blocks string. Error: %d\n", free_status); } return result; } -QString LogosBlockchainModule::get_transaction(const QString& tx_hash_hex) { +std::string LogosBlockchainModule::get_transaction(const std::string& tx_hash_hex) { if (!node) { - return QStringLiteral("Error: The node is not running."); + return "Error: The node is not running."; } - const QByteArray bytes = parse_address_hex(tx_hash_hex); - if (bytes.isEmpty() || bytes.size() != ADDRESS_BYTES) { - return QStringLiteral("Error: Transaction hash must be 64 hex characters (32 bytes)."); + const std::vector bytes = parse_address_hex(tx_hash_hex); + if (bytes.empty() || static_cast(bytes.size()) != ADDRESS_BYTES) { + return "Error: Transaction hash must be 64 hex characters (32 bytes)."; } - auto [value, error] = ::get_transaction(node, reinterpret_cast(bytes.constData())); + auto [value, error] = ::get_transaction(node, reinterpret_cast(bytes.data())); if (!is_ok(&error)) { - qWarning() << "Failed to get transaction. Error:" << error; - return QStringLiteral("Error: Failed to get transaction: ") + QString::number(error); + fprintf(stderr, "Failed to get transaction. Error: %d\n", error); + return "Error: Failed to get transaction: " + std::to_string(error); } - const QString result = QString::fromUtf8(value); + std::string result(value); const OperationStatus free_status = free_cstring(value); if (!is_ok(&free_status)) { - qWarning() << "Failed to free transaction string. Error:" << free_status; + fprintf(stderr, "Failed to free transaction string. Error: %d\n", free_status); } return result; } // Cryptarchia -QString LogosBlockchainModule::get_cryptarchia_info() { +std::string LogosBlockchainModule::get_cryptarchia_info() { if (!node) { - return QStringLiteral("Error: The node is not running."); + return "Error: The node is not running."; } auto [value, error] = ::get_cryptarchia_info(node); if (!is_ok(&error)) { - qWarning() << "Failed to get cryptarchia info. Error:" << error; - return QStringLiteral("Error: Failed to get cryptarchia info: ") + QString::number(error); + fprintf(stderr, "Failed to get cryptarchia info. Error: %d\n", error); + return "Error: Failed to get cryptarchia info: " + std::to_string(error); } - QJsonObject obj; - obj[QStringLiteral("lib")] = - QString::fromUtf8(QByteArray(reinterpret_cast(value->lib), ADDRESS_BYTES).toHex()); - obj[QStringLiteral("tip")] = - QString::fromUtf8(QByteArray(reinterpret_cast(value->tip), ADDRESS_BYTES).toHex()); - obj[QStringLiteral("slot")] = static_cast(value->slot); - obj[QStringLiteral("height")] = static_cast(value->height); - obj[QStringLiteral("mode")] = - (value->mode == State::Online) ? QStringLiteral("Online") : QStringLiteral("Bootstrapping"); + json obj; + obj["lib"] = bytes_to_hex(reinterpret_cast(value->lib), ADDRESS_BYTES); + obj["tip"] = bytes_to_hex(reinterpret_cast(value->tip), ADDRESS_BYTES); + obj["slot"] = static_cast(value->slot); + obj["height"] = static_cast(value->height); + obj["mode"] = (value->mode == State::Online) ? "Online" : "Bootstrapping"; const OperationStatus free_status = free_cryptarchia_info(value); if (!is_ok(&free_status)) { - qWarning() << "Failed to free cryptarchia info. Error:" << free_status; + fprintf(stderr, "Failed to free cryptarchia info. Error: %d\n", free_status); } - return QJsonDocument(obj).toJson(QJsonDocument::Compact); + return obj.dump(); } -void LogosBlockchainModule::emit_event(const QString& event_name, const QVariantList& data) { - if (!logosAPI) { - qWarning() << "LogosBlockchainModule: LogosAPI not available, cannot emit" << event_name; - return; - } - if (!client) { - qWarning() << "LogosBlockchainModule: Failed to get liblogos_blockchain_module client for event" << event_name; - return; - } - client->onEventResponse(this, event_name, data); -} diff --git a/src/logos_blockchain_module.h b/src/logos_blockchain_module.h index 131e500..acf66d2 100644 --- a/src/logos_blockchain_module.h +++ b/src/logos_blockchain_module.h @@ -1,8 +1,10 @@ #pragma once -#include "i_logos_blockchain_module.h" +#include +#include +#include +#include -#include #ifdef __cplusplus extern "C" { #endif @@ -11,75 +13,56 @@ extern "C" { } #endif -class LogosBlockchainModule final : public QObject, public PluginInterface, public ILogosBlockchainModule { - Q_OBJECT - Q_PLUGIN_METADATA(IID ILogosBlockchainModule_iid FILE LOGOS_BLOCKCHAIN_MODULE_METADATA_FILE) - Q_INTERFACES(PluginInterface) - +class LogosBlockchainModule { public: LogosBlockchainModule(); - ~LogosBlockchainModule() override; + ~LogosBlockchainModule(); - // Logos Core - [[nodiscard]] QString name() const override; - [[nodiscard]] QString version() const override; - Q_INVOKABLE void initLogos(LogosAPI*) override; + // Wired automatically by the generated glue layer. + // Call this to emit named events to other modules / the host application. + // Data is a JSON-encoded string (object or array). + std::function emitEvent; // ---- Node ---- // Lifecycle - Q_INVOKABLE int generate_user_config(const QVariantMap& args) override; - Q_INVOKABLE int generate_user_config_from_str(const QString& args) override; - Q_INVOKABLE int start(const QString& config_path, const QString& deployment) override; - Q_INVOKABLE int stop() override; + int generate_user_config(const std::string& json_args); + int start(const std::string& config_path, const std::string& deployment); + int stop(); // Wallet - Q_INVOKABLE QString wallet_get_balance(const QString& address_hex) override; - Q_INVOKABLE QString wallet_transfer_funds( - const QString& change_public_key, - const QStringList& sender_addresses, - const QString& recipient_address, - const QString& amount, - const QString& optional_tip_hex - ) override; - Q_INVOKABLE QString wallet_transfer_funds( - const QString& change_public_key, - const QString& sender_address, - const QString& recipient_address, - const QString& amount, - const QString& optional_tip_hex + std::string wallet_get_balance(const std::string& address_hex); + std::string wallet_transfer_funds( + const std::string& change_public_key, + const std::vector& sender_addresses, + const std::string& recipient_address, + const std::string& amount, + const std::string& optional_tip_hex ); - Q_INVOKABLE QStringList wallet_get_known_addresses() override; + std::vector wallet_get_known_addresses(); // Blend - Q_INVOKABLE QString blend_join_as_core_node( - const QString& provider_id_hex, - const QString& zk_id_hex, - const QString& locked_note_id_hex, - const QStringList& locators - ) override; + std::string blend_join_as_core_node( + const std::string& provider_id_hex, + const std::string& zk_id_hex, + const std::string& locked_note_id_hex, + const std::vector& locators + ); // Explorer - Q_INVOKABLE QString get_block(const QString& header_id_hex) override; - Q_INVOKABLE QString get_blocks(quint64 from_slot, quint64 to_slot) override; - Q_INVOKABLE QString get_transaction(const QString& tx_hash_hex) override; + std::string get_block(const std::string& header_id_hex); + std::string get_blocks(uint64_t from_slot, uint64_t to_slot); + std::string get_transaction(const std::string& tx_hash_hex); // Cryptarchia - Q_INVOKABLE QString get_cryptarchia_info() override; - -signals: - void eventResponse(const QString& event_name, const QVariantList& data); + std::string get_cryptarchia_info(); private: LogosBlockchainNode* node = nullptr; - LogosAPIClient* client = nullptr; // Static instance for C callback (C API doesn't support user data) static LogosBlockchainModule* s_instance; // C-compatible callback function static void on_new_block_callback(const char* block); - - // Helper method for emitting events - void emit_event(const QString& event_name, const QVariantList& data); }; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..01a4ea8 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,50 @@ +cmake_minimum_required(VERSION 3.14) +project(BlockchainModuleTests LANGUAGES CXX) + +include(LogosTest) + +# Unit tests (mocked logos_blockchain) + +logos_test( + NAME blockchain_module_tests + MODULE_SOURCES + ../src/logos_blockchain_module.cpp + TEST_SOURCES + main.cpp + test_blockchain.cpp + MOCK_C_SOURCES + mocks/mock_logos_blockchain.cpp + EXTRA_INCLUDES + stubs +) + +# Integration tests (real logos_blockchain library) + +find_library(LIBLOGOS_BLOCKCHAIN_PATH + NAMES liblogos_blockchain.so liblogos_blockchain.dylib + PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../lib + NO_DEFAULT_PATH) + +if(LIBLOGOS_BLOCKCHAIN_PATH) + message(STATUS "[BlockchainTests] logos_blockchain found: ${LIBLOGOS_BLOCKCHAIN_PATH} - building integration tests") + + logos_test( + NAME blockchain_module_integration_tests + MODULE_SOURCES + ../src/logos_blockchain_module.cpp + TEST_SOURCES + main.cpp + test_blockchain.cpp + EXTRA_INCLUDES + ../lib + EXTRA_LINK_LIBS + ${LIBLOGOS_BLOCKCHAIN_PATH} + ) + + get_filename_component(LIBLOGOS_BLOCKCHAIN_DIR "${LIBLOGOS_BLOCKCHAIN_PATH}" DIRECTORY) + set_target_properties(blockchain_module_integration_tests PROPERTIES + BUILD_RPATH "${LIBLOGOS_BLOCKCHAIN_DIR}" + ) +else() + message(STATUS "[BlockchainTests] logos_blockchain not found in ../lib - skipping integration tests") +endif() diff --git a/tests/main.cpp b/tests/main.cpp new file mode 100644 index 0000000..93a8096 --- /dev/null +++ b/tests/main.cpp @@ -0,0 +1,3 @@ +#include + +LOGOS_TEST_MAIN() diff --git a/tests/mocks/mock_logos_blockchain.cpp b/tests/mocks/mock_logos_blockchain.cpp new file mode 100644 index 0000000..5374ff3 --- /dev/null +++ b/tests/mocks/mock_logos_blockchain.cpp @@ -0,0 +1,159 @@ +// Mock implementation of logos_blockchain C functions. +// Replaces the real Rust library at link time during unit tests. +// Return values are controlled via LogosCMockStore. + +#include +#include +#include +#include + +static char s_fakeNode = 0; +static CryptarchiaInfo s_fakeCryptarchiaInfo = {}; + +// Known-address mock storage (up to 4 addresses) +static uint8_t s_mockAddr0[32]; +static uint8_t s_mockAddr1[32]; +static uint8_t s_mockAddr2[32]; +static uint8_t s_mockAddr3[32]; +static uint8_t* s_mockAddrs[] = { s_mockAddr0, s_mockAddr1, s_mockAddr2, s_mockAddr3 }; + +extern "C" { + +bool is_ok(const OperationStatus* status) { + return status && *status == 0; +} + +OperationStatus generate_user_config(GenerateConfigArgs args) { + LOGOS_CMOCK_RECORD("generate_user_config"); + return LOGOS_CMOCK_RETURN(int, "generate_user_config"); +} + +NodeResult start_lb_node(const char* config_path, const char* deployment) { + LOGOS_CMOCK_RECORD("start_lb_node"); + int ok = LOGOS_CMOCK_RETURN(int, "start_lb_node"); + NodeResult result; + result.value = ok ? reinterpret_cast(&s_fakeNode) : nullptr; + result.error = ok ? 0 : 1; + return result; +} + +OperationStatus stop_node(LogosBlockchainNode* node) { + LOGOS_CMOCK_RECORD("stop_node"); + return 0; +} + +OperationStatus subscribe_to_new_blocks(LogosBlockchainNode* node, BlockCallback callback) { + LOGOS_CMOCK_RECORD("subscribe_to_new_blocks"); + return LOGOS_CMOCK_RETURN(int, "subscribe_to_new_blocks"); +} + +BalanceResult get_balance(LogosBlockchainNode* node, const uint8_t* address, const void* reserved) { + LOGOS_CMOCK_RECORD("get_balance"); + BalanceResult result; + result.value = static_cast(LOGOS_CMOCK_RETURN(int, "get_balance_value")); + result.error = LOGOS_CMOCK_RETURN(int, "get_balance_error"); + return result; +} + +TransferHashResult transfer_funds(LogosBlockchainNode* node, const TransferFundsArguments* args) { + LOGOS_CMOCK_RECORD("transfer_funds"); + TransferHashResult result; + memset(result.value, 0xAB, sizeof(Hash)); + result.error = LOGOS_CMOCK_RETURN(int, "transfer_funds_error"); + return result; +} + +KnownAddressesResult get_known_addresses(LogosBlockchainNode* node) { + LOGOS_CMOCK_RECORD("get_known_addresses"); + KnownAddressesResult result; + int err = LOGOS_CMOCK_RETURN(int, "get_known_addresses_error"); + result.error = err; + if (err == 0) { + int count = LOGOS_CMOCK_RETURN(int, "get_known_addresses_count"); + if (count > 4) count = 4; + memset(s_mockAddr0, 0x11, 32); + memset(s_mockAddr1, 0x22, 32); + memset(s_mockAddr2, 0x33, 32); + memset(s_mockAddr3, 0x44, 32); + result.value.addresses = s_mockAddrs; + result.value.len = static_cast(count); + } else { + result.value.addresses = nullptr; + result.value.len = 0; + } + return result; +} + +OperationStatus free_known_addresses(KnownAddresses addrs) { + LOGOS_CMOCK_RECORD("free_known_addresses"); + return 0; +} + +BlendHashResult blend_join_as_core_node( + LogosBlockchainNode* node, + const uint8_t* provider_id, + const uint8_t* zk_id, + const uint8_t* locked_note_id, + const char** locators, + size_t locators_count) +{ + LOGOS_CMOCK_RECORD("blend_join_as_core_node"); + BlendHashResult result; + memset(result.value, 0xCD, sizeof(Hash)); + result.error = LOGOS_CMOCK_RETURN(int, "blend_join_as_core_node_error"); + return result; +} + +StringResult get_block(LogosBlockchainNode* node, const HeaderId* header_id) { + LOGOS_CMOCK_RECORD("get_block"); + StringResult result; + const char* json = LOGOS_CMOCK_RETURN_STRING("get_block"); + result.value = json ? strdup(json) : nullptr; + result.error = LOGOS_CMOCK_RETURN(int, "get_block_error"); + return result; +} + +StringResult get_blocks(LogosBlockchainNode* node, uint64_t from_slot, uint64_t to_slot) { + LOGOS_CMOCK_RECORD("get_blocks"); + StringResult result; + const char* json = LOGOS_CMOCK_RETURN_STRING("get_blocks"); + result.value = json ? strdup(json) : nullptr; + result.error = LOGOS_CMOCK_RETURN(int, "get_blocks_error"); + return result; +} + +StringResult get_transaction(LogosBlockchainNode* node, const TxHash* tx_hash) { + LOGOS_CMOCK_RECORD("get_transaction"); + StringResult result; + const char* json = LOGOS_CMOCK_RETURN_STRING("get_transaction"); + result.value = json ? strdup(json) : nullptr; + result.error = LOGOS_CMOCK_RETURN(int, "get_transaction_error"); + return result; +} + +CryptarchiaInfoResult get_cryptarchia_info(LogosBlockchainNode* node) { + LOGOS_CMOCK_RECORD("get_cryptarchia_info"); + CryptarchiaInfoResult result; + memset(&s_fakeCryptarchiaInfo, 0, sizeof(s_fakeCryptarchiaInfo)); + s_fakeCryptarchiaInfo.slot = static_cast(LOGOS_CMOCK_RETURN(int, "cryptarchia_slot")); + s_fakeCryptarchiaInfo.height = static_cast(LOGOS_CMOCK_RETURN(int, "cryptarchia_height")); + s_fakeCryptarchiaInfo.mode = static_cast(LOGOS_CMOCK_RETURN(int, "cryptarchia_mode")); + memset(s_fakeCryptarchiaInfo.lib, 0xEE, 32); + memset(s_fakeCryptarchiaInfo.tip, 0xFF, 32); + result.value = &s_fakeCryptarchiaInfo; + result.error = LOGOS_CMOCK_RETURN(int, "get_cryptarchia_info_error"); + return result; +} + +OperationStatus free_cryptarchia_info(CryptarchiaInfo* info) { + LOGOS_CMOCK_RECORD("free_cryptarchia_info"); + return 0; +} + +OperationStatus free_cstring(char* s) { + LOGOS_CMOCK_RECORD("free_cstring"); + free(s); + return 0; +} + +} // extern "C" diff --git a/tests/stubs/logos_blockchain.h b/tests/stubs/logos_blockchain.h new file mode 100644 index 0000000..22d5f62 --- /dev/null +++ b/tests/stubs/logos_blockchain.h @@ -0,0 +1,131 @@ +// Stub header for logos_blockchain — provides the same declarations as the real +// Rust-generated header so that logos_blockchain_module sources compile in tests. + +#ifndef LOGOS_BLOCKCHAIN_H +#define LOGOS_BLOCKCHAIN_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// 32-byte hash/address types +typedef uint8_t Hash[32]; +typedef uint8_t HeaderId[32]; +typedef uint8_t TxHash[32]; + +// Opaque node handle +typedef struct LogosBlockchainNode LogosBlockchainNode; + +// Operation status (0 = OK) +typedef int OperationStatus; + +// Deployment enums +typedef enum { WellKnown, Custom } DeploymentType; +typedef enum { Devnet } WellKnownDeployment; + +// Consensus state enum +typedef enum { Bootstrapping, Online } State; + +// Deployment configuration +typedef struct { + DeploymentType deployment_type; + WellKnownDeployment well_known_deployment; + const char* custom_deployment_config_path; +} Deployment; + +// Arguments for generate_user_config +typedef struct { + const char** initial_peers; + const uint32_t* initial_peers_count; + const char* output; + const uint16_t* net_port; + const uint16_t* blend_port; + const char* http_addr; + const char* external_address; + const bool* no_public_ip_check; + const Deployment* deployment; + const char* state_path; +} GenerateConfigArgs; + +// Arguments for transfer_funds +typedef struct { + const HeaderId* optional_tip; + const uint8_t* change_public_key; + const uint8_t* const* funding_public_keys; + size_t funding_public_keys_len; + const uint8_t* recipient_public_key; + uint64_t amount; +} TransferFundsArguments; + +// Known addresses result container +typedef struct { + uint8_t** addresses; + size_t len; +} KnownAddresses; + +// Cryptarchia consensus info +typedef struct { + uint8_t lib[32]; + uint8_t tip[32]; + uint64_t slot; + uint64_t height; + State mode; +} CryptarchiaInfo; + +// Result types (C++ structured bindings decompose these) +typedef struct { LogosBlockchainNode* value; OperationStatus error; } NodeResult; +typedef struct { uint64_t value; OperationStatus error; } BalanceResult; +typedef struct { Hash value; OperationStatus error; } TransferHashResult; +typedef struct { KnownAddresses value; OperationStatus error; } KnownAddressesResult; +typedef struct { Hash value; OperationStatus error; } BlendHashResult; +typedef struct { char* value; OperationStatus error; } StringResult; +typedef struct { CryptarchiaInfo* value; OperationStatus error; } CryptarchiaInfoResult; + +// Block event callback +typedef void (*BlockCallback)(const char* block_json); + +// Status check +bool is_ok(const OperationStatus* status); + +// Lifecycle +OperationStatus generate_user_config(GenerateConfigArgs args); +NodeResult start_lb_node(const char* config_path, const char* deployment); +OperationStatus stop_node(LogosBlockchainNode* node); +OperationStatus subscribe_to_new_blocks(LogosBlockchainNode* node, BlockCallback callback); + +// Wallet +BalanceResult get_balance(LogosBlockchainNode* node, const uint8_t* address, const void* reserved); +TransferHashResult transfer_funds(LogosBlockchainNode* node, const TransferFundsArguments* args); +KnownAddressesResult get_known_addresses(LogosBlockchainNode* node); +OperationStatus free_known_addresses(KnownAddresses addrs); + +// Blend +BlendHashResult blend_join_as_core_node( + LogosBlockchainNode* node, + const uint8_t* provider_id, + const uint8_t* zk_id, + const uint8_t* locked_note_id, + const char** locators, + size_t locators_count); + +// Explorer +StringResult get_block(LogosBlockchainNode* node, const HeaderId* header_id); +StringResult get_blocks(LogosBlockchainNode* node, uint64_t from_slot, uint64_t to_slot); +StringResult get_transaction(LogosBlockchainNode* node, const TxHash* tx_hash); + +// Cryptarchia +CryptarchiaInfoResult get_cryptarchia_info(LogosBlockchainNode* node); +OperationStatus free_cryptarchia_info(CryptarchiaInfo* info); + +// Memory management +OperationStatus free_cstring(char* s); + +#ifdef __cplusplus +} +#endif + +#endif // LOGOS_BLOCKCHAIN_H diff --git a/tests/test_blockchain.cpp b/tests/test_blockchain.cpp new file mode 100644 index 0000000..9f22d0f --- /dev/null +++ b/tests/test_blockchain.cpp @@ -0,0 +1,729 @@ +// Unit tests for LogosBlockchainModule. +// All logos_blockchain C functions are mocked at link time via mock_logos_blockchain.cpp. + +#include +#include "logos_blockchain_module.h" + +#include +#include +#include +#include +#include +#include + +namespace fs = std::filesystem; + +// 64-char hex string = 32 bytes (valid address/hash) +static const std::string VALID_HEX(64, 'a'); +static const std::string VALID_HEX_WITH_PREFIX = "0x" + std::string(64, 'b'); + +static bool starts_with(const std::string& s, const std::string& prefix) { + return s.size() >= prefix.size() && s.compare(0, prefix.size(), prefix) == 0; +} + +static bool contains(const std::string& s, const std::string& sub) { + return s.find(sub) != std::string::npos; +} + +// RAII wrapper for a temporary directory (removed on destruction). +struct TempDir { + fs::path path; + TempDir() { + char tmpl[] = "/tmp/logos-blockchain-test-XXXXXX"; + char* dir = mkdtemp(tmpl); + if (dir) path = dir; + } + ~TempDir() { + if (!path.empty()) { + std::error_code ec; + fs::remove_all(path, ec); + } + } + bool isValid() const { return !path.empty(); } + std::string filePath(const std::string& name) const { return (path / name).string(); } +}; + +// Helper: create a module with a running (mocked) node. +// Sets up circuits directory, LOGOS_MODULE_PATH env, and calls start(). +static LogosBlockchainModule* createStartedModule(LogosTestContext& t, TempDir& tmpDir) { + fs::create_directories(tmpDir.path / "circuits"); + { + std::ofstream f((tmpDir.path / "circuits" / "dummy.bin").string()); + f << "x"; + } + + setenv("LOGOS_MODULE_PATH", tmpDir.path.string().c_str(), 1); + + auto* module = new LogosBlockchainModule(); + + t.mockCFunction("start_lb_node").returns(1); + t.mockCFunction("subscribe_to_new_blocks").returns(0); + + int rc = module->start(tmpDir.filePath("config.json"), ""); + if (rc != 0) { + delete module; + return nullptr; + } + return module; +} + +// ============================================================================ +// generate_user_config +// ============================================================================ + +LOGOS_TEST(generate_user_config_returns_0_on_success) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + + t.mockCFunction("generate_user_config").returns(0); + + LOGOS_ASSERT_EQ(module.generate_user_config(R"({"output":"/tmp/test-config.json"})"), 0); + LOGOS_ASSERT(t.cFunctionCalled("generate_user_config")); +} + +LOGOS_TEST(generate_user_config_returns_1_on_failure) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + + t.mockCFunction("generate_user_config").returns(1); + + LOGOS_ASSERT_EQ(module.generate_user_config("{}"), 1); +} + +LOGOS_TEST(generate_user_config_from_json_string) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + + t.mockCFunction("generate_user_config").returns(0); + + LOGOS_ASSERT_EQ(module.generate_user_config(R"({"output":"/tmp/out.json"})"), 0); + LOGOS_ASSERT(t.cFunctionCalled("generate_user_config")); +} + +LOGOS_TEST(generate_user_config_with_all_fields) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + + t.mockCFunction("generate_user_config").returns(0); + + std::string args = R"({ + "initial_peers": ["peer1", "peer2"], + "output": "/tmp/out.json", + "net_port": 9000, + "blend_port": 9001, + "http_addr": "0.0.0.0:8080", + "external_address": "1.2.3.4", + "no_public_ip_check": true, + "deployment": { "well_known_deployment": "devnet" }, + "state_path": "/tmp/state" + })"; + + LOGOS_ASSERT_EQ(module.generate_user_config(args), 0); +} + +// ============================================================================ +// No-node error paths — all methods should fail gracefully +// ============================================================================ + +LOGOS_TEST(stop_without_node_returns_1) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + LOGOS_ASSERT_EQ(module.stop(), 1); +} + +LOGOS_TEST(wallet_get_balance_without_node_returns_error) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + std::string result = module.wallet_get_balance(VALID_HEX); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "not running")); +} + +LOGOS_TEST(wallet_transfer_funds_without_node_returns_error) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + std::string result = module.wallet_transfer_funds(VALID_HEX, {VALID_HEX}, VALID_HEX, "100", ""); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "not running")); +} + +LOGOS_TEST(wallet_get_known_addresses_without_node_returns_empty) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + LOGOS_ASSERT_TRUE(module.wallet_get_known_addresses().empty()); +} + +LOGOS_TEST(blend_join_as_core_node_without_node_returns_error) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + std::string result = module.blend_join_as_core_node(VALID_HEX, VALID_HEX, VALID_HEX, {"locator1"}); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "not running")); +} + +LOGOS_TEST(get_block_without_node_returns_error) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + LOGOS_ASSERT_TRUE(starts_with(module.get_block(VALID_HEX), "Error:")); +} + +LOGOS_TEST(get_blocks_without_node_returns_error) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + LOGOS_ASSERT_TRUE(starts_with(module.get_blocks(0, 10), "Error:")); +} + +LOGOS_TEST(get_transaction_without_node_returns_error) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + LOGOS_ASSERT_TRUE(starts_with(module.get_transaction(VALID_HEX), "Error:")); +} + +LOGOS_TEST(get_cryptarchia_info_without_node_returns_error) { + auto t = LogosTestContext("blockchain_module"); + LogosBlockchainModule module; + LOGOS_ASSERT_TRUE(starts_with(module.get_cryptarchia_info(), "Error:")); +} + +// ============================================================================ +// Node lifecycle (start / stop) +// ============================================================================ + +LOGOS_TEST(start_succeeds_with_mocked_dependencies) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + LOGOS_ASSERT_TRUE(tmpDir.isValid()); + + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + LOGOS_ASSERT(t.cFunctionCalled("start_lb_node")); + LOGOS_ASSERT(t.cFunctionCalled("subscribe_to_new_blocks")); + delete module; +} + +LOGOS_TEST(start_returns_1_when_already_running) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + LOGOS_ASSERT_EQ(module->start("/tmp/config.json", ""), 1); + delete module; +} + +LOGOS_TEST(stop_succeeds_with_running_node) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + LOGOS_ASSERT_EQ(module->stop(), 0); + LOGOS_ASSERT(t.cFunctionCalled("stop_node")); + delete module; +} + +// ============================================================================ +// Input validation (requires running node) +// ============================================================================ + +// wallet_get_balance validation + +LOGOS_TEST(wallet_get_balance_rejects_short_hex) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_get_balance("abcd"); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "64 hex")); + delete module; +} + +LOGOS_TEST(wallet_get_balance_rejects_long_hex) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_get_balance(std::string(66, 'a')); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + delete module; +} + +LOGOS_TEST(wallet_get_balance_rejects_invalid_chars) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string hex = std::string(62, 'a') + "zz"; + std::string result = module->wallet_get_balance(hex); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + delete module; +} + +// wallet_transfer_funds validation + +LOGOS_TEST(wallet_transfer_funds_rejects_invalid_amount) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {VALID_HEX}, VALID_HEX, "not_a_number", ""); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "Invalid amount")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_rejects_invalid_change_key) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_transfer_funds("bad", {VALID_HEX}, VALID_HEX, "100", ""); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "change_public_key")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_rejects_invalid_recipient) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {VALID_HEX}, "short", "100", ""); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "recipient_address")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_rejects_empty_senders) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {}, VALID_HEX, "100", ""); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "sender")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_rejects_invalid_sender_address) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {"bad_addr"}, VALID_HEX, "100", ""); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "sender")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_rejects_invalid_optional_tip) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {VALID_HEX}, VALID_HEX, "100", "bad_tip"); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "tip")); + delete module; +} + +// blend_join_as_core_node validation + +LOGOS_TEST(blend_join_rejects_invalid_provider_id) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->blend_join_as_core_node("short", VALID_HEX, VALID_HEX, {}); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "provider_id")); + delete module; +} + +LOGOS_TEST(blend_join_rejects_invalid_zk_id) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->blend_join_as_core_node(VALID_HEX, "short", VALID_HEX, {}); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "zk_id")); + delete module; +} + +LOGOS_TEST(blend_join_rejects_invalid_locked_note_id) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->blend_join_as_core_node(VALID_HEX, VALID_HEX, "short", {}); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "locked_note_id")); + delete module; +} + +// get_block / get_transaction validation + +LOGOS_TEST(get_block_rejects_invalid_hex) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->get_block("tooshort"); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "64 hex")); + delete module; +} + +LOGOS_TEST(get_transaction_rejects_invalid_hex) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + std::string result = module->get_transaction("bad"); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "64 hex")); + delete module; +} + +// ============================================================================ +// 0x prefix handling +// ============================================================================ + +LOGOS_TEST(wallet_get_balance_accepts_0x_prefix) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_balance_value").returns(42); + t.mockCFunction("get_balance_error").returns(0); + + std::string result = module->wallet_get_balance(VALID_HEX_WITH_PREFIX); + LOGOS_ASSERT_EQ(result, std::string("42")); + delete module; +} + +// ============================================================================ +// Success paths (requires running node + mocked C functions) +// ============================================================================ + +// Wallet + +LOGOS_TEST(wallet_get_balance_returns_balance_string) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_balance_value").returns(1000); + t.mockCFunction("get_balance_error").returns(0); + + std::string result = module->wallet_get_balance(VALID_HEX); + LOGOS_ASSERT_EQ(result, std::string("1000")); + LOGOS_ASSERT(t.cFunctionCalled("get_balance")); + delete module; +} + +LOGOS_TEST(wallet_get_balance_returns_error_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_balance_error").returns(1); + + std::string result = module->wallet_get_balance(VALID_HEX); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_returns_tx_hash) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("transfer_funds_error").returns(0); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {VALID_HEX}, VALID_HEX, "500", ""); + LOGOS_ASSERT_FALSE(starts_with(result, "Error:")); + LOGOS_ASSERT_EQ(static_cast(result.length()), 64); + LOGOS_ASSERT_TRUE(starts_with(result, "ab")); + LOGOS_ASSERT(t.cFunctionCalled("transfer_funds")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_with_optional_tip) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("transfer_funds_error").returns(0); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {VALID_HEX}, VALID_HEX, "100", VALID_HEX); + LOGOS_ASSERT_FALSE(starts_with(result, "Error:")); + LOGOS_ASSERT_EQ(static_cast(result.length()), 64); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_returns_error_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("transfer_funds_error").returns(1); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {VALID_HEX}, VALID_HEX, "100", ""); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_single_sender_via_vector) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("transfer_funds_error").returns(0); + + std::string result = module->wallet_transfer_funds(VALID_HEX, {VALID_HEX}, VALID_HEX, "100", ""); + LOGOS_ASSERT_FALSE(starts_with(result, "Error:")); + LOGOS_ASSERT(t.cFunctionCalled("transfer_funds")); + delete module; +} + +LOGOS_TEST(wallet_transfer_funds_multiple_senders) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("transfer_funds_error").returns(0); + + std::vector senders = {VALID_HEX, std::string(64, 'b')}; + std::string result = module->wallet_transfer_funds(VALID_HEX, senders, VALID_HEX, "200", ""); + LOGOS_ASSERT_FALSE(starts_with(result, "Error:")); + delete module; +} + +LOGOS_TEST(wallet_get_known_addresses_returns_addresses) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_known_addresses_error").returns(0); + t.mockCFunction("get_known_addresses_count").returns(2); + + std::vector addrs = module->wallet_get_known_addresses(); + LOGOS_ASSERT_EQ(static_cast(addrs.size()), 2); + // Mock fills addr0 with 0x11 -> hex "1111...11", addr1 with 0x22 -> "2222...22" + LOGOS_ASSERT_EQ(addrs[0], std::string(64, '1')); + LOGOS_ASSERT_EQ(addrs[1], std::string(64, '2')); + LOGOS_ASSERT(t.cFunctionCalled("get_known_addresses")); + LOGOS_ASSERT(t.cFunctionCalled("free_known_addresses")); + delete module; +} + +LOGOS_TEST(wallet_get_known_addresses_returns_empty_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_known_addresses_error").returns(1); + + std::vector addrs = module->wallet_get_known_addresses(); + LOGOS_ASSERT_TRUE(addrs.empty()); + delete module; +} + +// Blend + +LOGOS_TEST(blend_join_as_core_node_returns_declaration_id) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("blend_join_as_core_node_error").returns(0); + + std::vector locators = {"locator1", "locator2"}; + std::string result = module->blend_join_as_core_node(VALID_HEX, VALID_HEX, VALID_HEX, locators); + // Mock fills hash with 0xCD -> hex "cdcd...cd" (64 chars) + LOGOS_ASSERT_EQ(static_cast(result.length()), 64); + LOGOS_ASSERT_TRUE(starts_with(result, "cd")); + LOGOS_ASSERT(t.cFunctionCalled("blend_join_as_core_node")); + delete module; +} + +LOGOS_TEST(blend_join_as_core_node_returns_error_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("blend_join_as_core_node_error").returns(1); + + std::string result = module->blend_join_as_core_node(VALID_HEX, VALID_HEX, VALID_HEX, {}); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + delete module; +} + +// Explorer + +LOGOS_TEST(get_block_returns_json_on_success) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_block").returns(R"({"slot":42,"data":"test"})"); + t.mockCFunction("get_block_error").returns(0); + + std::string result = module->get_block(VALID_HEX); + LOGOS_ASSERT_TRUE(contains(result, "slot")); + LOGOS_ASSERT_TRUE(contains(result, "42")); + LOGOS_ASSERT(t.cFunctionCalled("get_block")); + LOGOS_ASSERT(t.cFunctionCalled("free_cstring")); + delete module; +} + +LOGOS_TEST(get_block_returns_error_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_block_error").returns(1); + + std::string result = module->get_block(VALID_HEX); + LOGOS_ASSERT_TRUE(starts_with(result, "Error:")); + delete module; +} + +LOGOS_TEST(get_blocks_returns_json_on_success) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_blocks").returns(R"([{"slot":1},{"slot":2}])"); + t.mockCFunction("get_blocks_error").returns(0); + + std::string result = module->get_blocks(1, 10); + LOGOS_ASSERT_TRUE(contains(result, "slot")); + LOGOS_ASSERT(t.cFunctionCalled("get_blocks")); + delete module; +} + +LOGOS_TEST(get_blocks_returns_error_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_blocks_error").returns(1); + + LOGOS_ASSERT_TRUE(starts_with(module->get_blocks(0, 10), "Error:")); + delete module; +} + +LOGOS_TEST(get_transaction_returns_json_on_success) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_transaction").returns(R"({"hash":"abc","status":"confirmed"})"); + t.mockCFunction("get_transaction_error").returns(0); + + std::string result = module->get_transaction(VALID_HEX); + LOGOS_ASSERT_TRUE(contains(result, "confirmed")); + LOGOS_ASSERT(t.cFunctionCalled("get_transaction")); + LOGOS_ASSERT(t.cFunctionCalled("free_cstring")); + delete module; +} + +LOGOS_TEST(get_transaction_returns_error_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_transaction_error").returns(1); + + LOGOS_ASSERT_TRUE(starts_with(module->get_transaction(VALID_HEX), "Error:")); + delete module; +} + +// Cryptarchia + +LOGOS_TEST(get_cryptarchia_info_returns_json_on_success) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_cryptarchia_info_error").returns(0); + t.mockCFunction("cryptarchia_slot").returns(100); + t.mockCFunction("cryptarchia_height").returns(50); + t.mockCFunction("cryptarchia_mode").returns(1); // Online + + std::string result = module->get_cryptarchia_info(); + LOGOS_ASSERT_FALSE(starts_with(result, "Error:")); + LOGOS_ASSERT_TRUE(contains(result, "slot")); + LOGOS_ASSERT_TRUE(contains(result, "100")); + LOGOS_ASSERT_TRUE(contains(result, "height")); + LOGOS_ASSERT_TRUE(contains(result, "50")); + LOGOS_ASSERT_TRUE(contains(result, "Online")); + LOGOS_ASSERT_TRUE(contains(result, "lib")); + LOGOS_ASSERT_TRUE(contains(result, "tip")); + LOGOS_ASSERT(t.cFunctionCalled("get_cryptarchia_info")); + LOGOS_ASSERT(t.cFunctionCalled("free_cryptarchia_info")); + delete module; +} + +LOGOS_TEST(get_cryptarchia_info_bootstrapping_mode) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_cryptarchia_info_error").returns(0); + t.mockCFunction("cryptarchia_mode").returns(0); // Bootstrapping + + std::string result = module->get_cryptarchia_info(); + LOGOS_ASSERT_TRUE(contains(result, "Bootstrapping")); + delete module; +} + +LOGOS_TEST(get_cryptarchia_info_returns_error_on_ffi_failure) { + auto t = LogosTestContext("blockchain_module"); + TempDir tmpDir; + auto* module = createStartedModule(t, tmpDir); + LOGOS_ASSERT_TRUE(module != nullptr); + + t.mockCFunction("get_cryptarchia_info_error").returns(1); + + LOGOS_ASSERT_TRUE(starts_with(module->get_cryptarchia_info(), "Error:")); + delete module; +}