Ctrl K
ComunidadGuías…

Changelog/v1.1.0.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Changelog v1.1.0

### Heads up before upgrading

- Projects now default to **auto-detect language**. If a German visitor opens your site, the widget renders in German and they receive emails in German. To keep a project English-only, set its language to **Manual / English** in the Admin Console after upgrade.
- The Admin Console sidebar has been reorganized. Bookmarks pointing at the old `/globalsettings/*` URLs will land on the dashboard. See **Admin Console navigation** below for the new paths.
- A database migration adds a `reporter_locale` column to the `reports` table. Existing reports are backfilled with `en`. The migration runs automatically on first launch, no manual action required.
- The default **Max. Screenshot Size** has been raised from 5 MB to 10 MB. Existing installs keep whatever value you previously saved; only fresh installs (and the in-app default placeholder) reflect the new value.
- Some admin API endpoints are now stricter. `PATCH /api/projects/:id` (when sending `settings`) and `PATCH /api/settings` (when sending `widgetLauncherButton`) reject unknown fields with a 400 validation error. Previously, unknown fields were silently stored. The Admin Console UI is unaffected. Only third-party automations that hand-craft requests with non-standard fields are.

### Features

#### Widget Translations

- Widget and reporter emails translated into 8 languages: English, German, French, Dutch, Spanish, Italian, Japanese, Simplified Chinese.
- Per-project language settings: choose **Auto** (follow the visitor's browser or your host page's `<html lang>`) or **Manual** (lock to one language). Instance-wide default lives under **Widget → Language**.
- Per-locale launcher button and tooltip overrides in the Admin Console. Set different text per language, with a fallback chain of project override → global override → built-in default.
- The reporter's language is captured when they submit a report and used for every follow-up email about that report (confirmation, status change, priority change, assignment, reporter message).
- The browser screen-capture permission helper screen (shown when "Use screen capture API" is enabled) is also translated.
- Host apps can switch the widget's language in three ways: the `data-language` attribute on the script tag, the `language` option on `BugPin.init()`, or the runtime calls `BugPin.setLanguage('fr')` and `BugPin.getLanguage()`. The widget also watches `<html lang>` and re-renders when it changes.
- Email templates can be overridden per language in the Custom Templates editor. (Enterprise Feature)

#### Reporter Assignment

- New configurable email template: **Reporter Assignment**, sent to the reporter when their report is assigned or reassigned. Previously this email was hardcoded — it can now be edited under **Notifications → Email Templates**. (Enterprise Feature)

#### Export Diagnostics

- export a bug report's full context from the report detail header. Choose **Markdown**, **Plain text**, an **AI prompt**, or **JSON**, then either copy to the clipboard or download as a file. A **Customize** dialog lets you toggle individual sections (summary, environment, page context, console output, network errors, user activity, storage keys, reporter info), apply redactions (strip query strings from URLs, truncate console output to the last 100 lines, strip input values from user activity), and live-preview the output before exporting. The dropdown remembers your last-used format and action across sessions. The Description, Console output, Network errors, User activity, and Storage keys cards also each get a copy button that copies that section as plain text.
- Captured screenshots can be downloaded directly: from the widget thumbnail before submitting, and from a screenshot on the report detail page (both the thumbnail and the full-size lightbox).

### UI Improvements

The sidebar has been split into three labelled groups:

- **Workspace** — Dashboard, Reports, Projects.
- **Widget** — Button, Dialog, Screenshot, Language.
- **Console** — Settings, Notifications, Users, Security, Branding, License.

Other changes you'll notice:

- "System" settings are renamed to **Settings**, with sub-tabs **General**, **Storage**, and **SMTP**. SMTP configuration moved out of Notifications.
- **Notifications** now has sub-tabs **General**, **Reporter**, and **Email Templates**.
- The Email Templates editor groups templates into **Reporter** and **Team** sections and adds a per-locale tab strip so each translation can be reviewed or edited (per-language editing requires Enterprise).
- The built-in **Test Widget** page now has a language selector so admins can preview the widget in any of the 8 supported languages without changing project settings.
- URLs are flat and predictable: `/settings`, `/notifications`, `/users`, `/security`, `/branding`, `/license`, `/button`, `/dialog`, `/screenshot`, `/language`. The old `/globalsettings/*` paths are gone.
- Breadcrumbs reflect the new structure (e.g. **Settings → Storage**, **Notifications → Reporter**, **Widget → Button**) without the redundant top-level "Console" or "Widget" segment.
- Sidebar **Dialog** icon switched from a chat bubble to a window glyph, and **Settings** uses a cog instead of a server rack.
- Aligned the **Default Projects** dropdown height with the **Role** selector on the Users page so both controls sit on the same baseline.
- The Custom Branding upgrade prompt (shown to unlicensed instances) is now constrained to the same `max-w-4xl` width as the licensed Branding page instead of stretching full-width.
- Widget icons are now unified under Lucide and rendered as outlined glyphs throughout the dialog, screenshot manager, and annotation toolbar (previously a mix of inline solid Material icons).
- Cards on the report detail page (Description, Console output, Network errors, User activity, Storage keys, Reporter Messages, etc.) are now collapsible. Your open/closed state is remembered across page reloads, so the layout matches how you last left it.
- The report detail page no longer has an Edit / Save / Cancel button. Status, Priority, and Assignee are now inline-editable dropdowns: change a value and it saves automatically, with the existing success toast confirming the update. Resolving a report still surfaces the optional "Send a message to the reporter?" composer beneath the Status dropdown, now decoupled from the save action so the status change goes through immediately.
- The Details card metadata rows (Source, Created, Reporter, and Channel for manual reports) now use the same label-left / value-right layout and typography as Page Info and Environment, so the sidebar reads as a consistent block of report metadata.

### Fixes

- Widget **Button** live preview now follows the language selected in the Button Text and Tooltip Text editors. Previously it stayed locked to the English value even when previewing or editing another locale.
- The localized text editor remembers your last selected language across navigation. If you switch the dropdown to Dutch and leave the page, the editor opens in Dutch when you return.
- Removed the "English required" asterisk from the **Tooltip Text** editor only. Tooltip ships built-in defaults for all 8 languages, so leaving English empty is safe — the renderer falls back to the built-in. Admins can now override only the locales they care about. **Button Text** still marks English as required, because it has no built-in default and an empty value would render an icon-only button for English viewers.
- Widget Button settings page now uses react-hook-form with a Zod resolver, matching the pattern used elsewhere in the Admin Console. Submitting empty English button text in custom mode now shows an inline error directly under the input (with a red border and `aria-invalid`) instead of surfacing the server validation error as a toast.
- Captured screenshots are now validated against the **Max. Screenshot Size** setting instead of **Max. Image Upload Size**. The oversize warning in the widget shows the correct limit, and the server no longer rejects a valid capture because it exceeded the (separate, often tighter) image-upload limit.
- Saving **Screenshot Settings** from the Admin Console now persists correctly. A field-name mismatch between the form state and the shared input component caused typed values (e.g. changing **Max. Screenshot Size** from 5 to 7) to be silently dropped, so the saved value never changed.
- The widget dialog no longer jumps in height when switching between **Details** and **Screenshots** tabs after capturing a screenshot. The dialog now has a stable height so tab switches feel steady.
- The annotation canvas backdrop is now theme-aware (neutral muted background) instead of a fixed dark blue, so it matches light and dark themes consistently.
- The **Reduce capture quality** label in the widget's Screenshots tab is no longer clickable; only the switch itself toggles the setting, matching the toggle pattern used elsewhere in the Admin Console.

### Security

- `bun audit` reports zero vulnerabilities. Added a `fast-xml-builder ^1.2.0` override at the workspace root to patch a high-severity quote-escape bypass (GHSA-5wm8-gmm8-39j9) and a moderate comment-regex bypass (GHSA-45c6-75p6-83cc) reachable transitively through `@aws-sdk/client-s3`.
- Settings update endpoints reject unknown fields. The project-level launcher button schema, global launcher button schema, and project settings schema no longer accept unknown keys via `.passthrough()`. Every accepted field is now explicitly enumerated; any unknown key on these payloads returns a 400. This prevents stray fields from being stored in the project `settings` JSON column and from being echoed back through the public widget config endpoint.
- Widget submit error messages sanitize user-controlled values. The `UNSUPPORTED_MEDIA_TYPE`, `FILE_TOO_LARGE`, and `FILE_READ_ERROR` JSON responses now strip control characters and cap embedded `file.name` and `file.type` strings at 128 characters before interpolating them into the user-facing `message` field. Prevents log and dashboard rendering oddities when a widget submits crafted multipart filenames.

### Maintenance

- Admin Console upgraded from React 18 to React 19. No user-facing changes.
- Lucide upgraded from v0.460 to v1.16 in both the widget (`lucide-preact`) and Admin Console (`lucide-react`). The v1 release removed brand icons; the GitHub integration card now uses a bundled inline GitHub logo instead.
- Removed an unused `Shield` import in the Security settings page.