Version 7.13.0 ============== Minor release: **LLM-driven GUI personalization**. The Web Modeling Editor can now adapt no-code GUI pages to individual user profiles with an LLM, model those profiles with a dedicated form editor and the modeling agent, and generate the web application together with one personalized variant per profile. Additive only: when a project defines no variants, generation is byte-for-byte the previous single-app behavior. Highlights ---------- - **Per-profile GUI page variants**: from the GrapesJS-based no-code editor you can auto-personalize a page for a user profile with an LLM. A new backend endpoint ``POST /personalize-gui-page`` takes a page snapshot (``{components, css}``) plus a user-profile model and returns the same shape adapted in styling and wording, ready to be imported back as a page variant. The personalization logic lives in a dedicated ``gui_personalization_utils`` service module (the router stays a thin HTTP layer) and its LLM system prompt is a versionable module constant. - **Personalized web-application generation**: the web-app generator can emit one complete app per version — a Base app plus one personalized variant per user profile — each into its own profile-named subfolder of the output ZIP. The frontend assembles the per-version GUI models (``webAppVersions``) and the backend generates and zips them; a project with no variants generates exactly one app as before. - **User-profile modeling**: a new form-based user-profile editor, plus modeling- agent support for creating and editing user-profile (``UserDiagram``) models, so profiles can be authored by hand or by the assistant. Fixes ----- - **User-profile criterion parsing**: a criterion typed as ``age == 22`` is now split on the stored ``==`` operator instead of the first ``=`` (which previously captured ``= 22`` as the value and broke type conversion), and blank criteria (e.g. ``age =``) are skipped rather than materialized as empty-valued slots. - **OCL evaluation on user profiles**: constraints that reference an attribute left unset on a profile are now skipped instead of building an invalid expression like ``" >= 0 and <= 120"`` and crashing with a Python ``invalid syntax`` error. - **Backend cleanup**: the personalization OpenAI model default is consolidated into a single ``DEFAULT_OPENAI_MODEL`` constant (removing inconsistent/invalid defaults), a stray debug ``print`` and two dead branches were removed, and the new parsing logic is covered by regression tests. Frontend (via the submodule bump) --------------------------------- The frontend submodule moves to include the GUI-personalization UI: the user-profile form editor, per-profile page variants with variant switching, web-app version selection in the generation dialog, and review cleanups (shared variant types, HTML-escaped page/profile names in the pages list, and a non-silent generation-flush timeout).