gui - #1
Merged
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
This PR transitions the repository from the retired Node/TypeScript scaffold to a native C++20 / Qt 6.11.2 desktop application foundation, adding the initial GUI shell (menus, docks, workspace persistence, themes) and a bounded, authenticated local protocol client with lifecycle management and test coverage.
Changes:
- Introduces the GUI030 Qt Widgets shell: drawing-first main window, stable menu families, optional dock panels, workspace save/restore/reset, and appearance modes with committed theme fixtures.
- Adds the GUI040 protocol surface: framed control/binary codec, strict request/response envelopes, authenticated
QLocalSocketclient, andQProcess-managed service lifecycle with restart behavior. - Replaces prior Node-based checks with CMake/CTest, contract verification scripts, and native CI (build + tests + clang-tidy + sanitizers).
Reviewed changes
Copilot reviewed 71 out of 74 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/shell_tests.cpp | Qt shell coverage: menus, panels, persistence, and rendering smoke assertions |
| tests/protocol_tests.cpp | Protocol/client/process integration tests (mock service, auth, lifecycle, restart) |
| tests/mock_service.cpp | Mock service executable for protocol/lifecycle tests |
| tests/foundation_tests.cpp | Baseline unit tests for new foundation packages (core/canvas/commands/themes/protocol config) |
| tests/fixtures/theme-light.json | Committed light theme token fixture |
| tests/fixtures/theme-dark.json | Committed dark theme token fixture |
| tests/CMakeLists.txt | Adds native test executables + CTest integration and env config |
| test/structure.test.mjs | Removes Node scaffold test |
| README.md | Updates repo description to native desktop architecture and build/test instructions |
| protocol/src/index.ts | Removes retired TypeScript protocol stub |
| protocol/package.json | Removes retired TypeScript package manifest |
| packages/themes/src/theme_system.cpp | Theme tokens, palette + stylesheet application, persistence, controller |
| packages/themes/src/theme_mode.cpp | Theme mode string conversions and parsing |
| packages/themes/include/aimora/studio/themes/theme_system.hpp | Theme system public API (tokens/settings/controller) |
| packages/themes/include/aimora/studio/themes/theme_mode.hpp | Theme mode enum + conversion API |
| packages/themes/CMakeLists.txt | Adds StudioThemes library target |
| packages/shell/src/workspace_settings.cpp | Workspace geometry/state persistence + corruption recovery |
| packages/shell/src/studio_panels.cpp | Dock panels (project/inspector/command) + view menu bindings |
| packages/shell/src/studio_menus.cpp | Stable menu families + theme selection + reset workspace + about |
| packages/shell/src/studio_main_window.cpp | Main window composition, workspace restore/defaults, about dialog |
| packages/shell/src/studio_dock_widget.cpp | Dock widget wrapper with pin behavior + panel state exposure |
| packages/shell/src/drawing_workspace.cpp | Central drawing surface placeholder rendering consuming theme tokens |
| packages/shell/include/aimora/studio/shell/studio_shell.hpp | Shell public API (main window, docks, workspace settings) |
| packages/shell/CMakeLists.txt | Adds StudioShell library target |
| packages/protocol/src/service_process.cpp | Service process lifecycle manager (token, endpoint, timers, restart) |
| packages/protocol/src/service_message.cpp | Strict request/response envelope encode/parse |
| packages/protocol/src/service_client.cpp | Authenticated local socket client + request tracking + frame handling |
| packages/protocol/src/generated/service_protocol.cpp | Generated protocol bindings implementation |
| packages/protocol/src/frame_codec.cpp | AMR1 frame codec + control/binary payload helpers |
| packages/protocol/src/client_configuration.cpp | Client limits/config validation |
| packages/protocol/include/aimora/studio/protocol/service_process.hpp | Service process public API |
| packages/protocol/include/aimora/studio/protocol/service_message.hpp | Request/response envelope public API |
| packages/protocol/include/aimora/studio/protocol/service_client.hpp | Service client public API |
| packages/protocol/include/aimora/studio/protocol/generated/service_protocol.hpp | Generated protocol binding header |
| packages/protocol/include/aimora/studio/protocol/frame_codec.hpp | Frame codec public API |
| packages/protocol/include/aimora/studio/protocol/client_configuration.hpp | Client configuration + limits public API |
| packages/protocol/CMakeLists.txt | Adds StudioProtocol library target |
| packages/inspector/src/panel_state.cpp | Panel state validation/visibility helpers |
| packages/inspector/include/aimora/studio/inspector/panel_state.hpp | Inspector panel state types |
| packages/inspector/CMakeLists.txt | Adds StudioInspector library target |
| packages/core/src/application_info.cpp | Product identity/version/architecture helpers |
| packages/core/include/aimora/studio/core/application_info.hpp | ApplicationInfo public API |
| packages/core/CMakeLists.txt | Adds StudioCore library target |
| packages/commands/src/command_registry.cpp | Deterministic command registry + validation |
| packages/commands/include/aimora/studio/commands/command_registry.hpp | Command registry public API |
| packages/commands/CMakeLists.txt | Adds StudioCommands library target |
| packages/canvas/src/viewport_state.cpp | Viewport state validation + visible rect projection |
| packages/canvas/include/aimora/studio/canvas/viewport_state.hpp | ViewportState public API |
| packages/canvas/CMakeLists.txt | Adds StudioCanvas library target |
| package.json | Removes retired workspace package.json |
| docs/GUI040.md | Documents protocol/lifecycle packet scope and smoke journey |
| dependencies/third-party.toml | Adds third-party inventory (Qt, CI actions, tooling) |
| dependencies/qt-lock.json | Adds pinned Qt/toolchain policy lock |
| CONTRIBUTING.md | Updates contribution rules for native architecture and contracts |
| CMakePresets.json | Adds dev/release/quality/sanitizers presets |
| CMakeLists.txt | New top-level CMake project + Qt pin + package wiring |
| cmake/version.hpp.in | Generates build-time version/identity header |
| cmake/VerifyThemeFixtures.cmake | Contract: theme fixtures exist and have required schema/token count |
| cmake/VerifySourceTree.cmake | Contract: required paths exist; forbidden retired tech absent |
| cmake/VerifyServiceProtocol.cmake | Contract: required protocol files exist; schema SHA present; forbidden tokens absent |
| cmake/VerifyFormatting.cmake | Contract: formatting invariants (no tabs/trailing ws, 100-col limit, newline) |
| cmake/AIMORATargetDefaults.cmake | Shared target defaults (warnings/sanitizers/static analysis) |
| cmake/AIMORAStudioConfig.cmake.in | Install/export config for consumers |
| cmake/AIMORAStaticAnalysis.cmake | clang-tidy wiring for quality preset |
| cmake/AIMORASanitizers.cmake | ASan/UBSan wiring for sanitizers preset |
| cmake/AIMORAInstall.cmake | Install/export + CPack packaging basics |
| cmake/AIMORACompilerWarnings.cmake | Cross-compiler warnings and Werror option |
| ARCHITECTURE.md | Documents frozen native architecture and boundaries |
| apps/studio/main.cpp | Application entrypoint + CLI + shell/service smoke journeys |
| apps/studio/CMakeLists.txt | App target and aimora_studio_smoke custom target |
| .gitignore | Updates ignore patterns for native build/test artifacts |
| .github/workflows/ci.yml | Replaces Node CI with native build/test + contracts + quality + sanitizers |
| .clang-tidy | clang-tidy ruleset baseline |
| .clang-format | Formatting policy baseline |
Suppressed comments (1)
packages/protocol/src/service_process.cpp:449
- automaticRestartCount_ is never reset on a clean stop, so a later start() may inherit a nonzero restart count and prematurely suppress configured automatic restarts. Reset the counter when the process reaches Stopped due to an expected stop request.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+22
to
+31
| bool ClientConfiguration::isValid() const { | ||
| constexpr qsizetype minimumSessionTokenBytes = 64; | ||
| constexpr qsizetype maximumSessionTokenBytes = 256; | ||
| const QByteArray endpointBytes = endpoint.trimmed().toUtf8(); | ||
| return !endpointBytes.isEmpty() | ||
| && endpointBytes.size() <= limits.maxPathBytes | ||
| && sessionToken.size() >= minimumSessionTokenBytes | ||
| && sessionToken.size() <= maximumSessionTokenBytes | ||
| && limits.isValid(); | ||
| } |
Comment on lines
+412
to
+414
| if(state_ == State::Failed && !explicitRestartRequested_) { | ||
| return; | ||
| } |
|
|
||
| auto* explanation = new QLabel{std::move(description), panelContent}; | ||
| explanation->setWordWrap(true); | ||
| explanation->setTextInteractionFlags(Qt::TextSelectableByKeyboard); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.