Skip to content

🫧 fix: Paint Chat Surfaces From Theme Roles - #16483

Merged
berry-13 merged 5 commits into
canaryfrom
berry-13/theme-leakage-chat
Sep 29, 2026
Merged

berry-13 merged 5 commits into
canaryfrom
berry-13/theme-leakage-chat

Conversation

@berry-13

@berry-13 berry-13 commented Sep 29, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Part of the theme-leakage stack; based on the library link. In the chat area, the code window header (CodeWindowHeader, used by ExecuteCode, ReadFileCall and FileAuthoringCall) and the skill output panel painted bg-surface-primary-alt dark:bg-transparent over a surface-secondary container. In every bundled theme (default, dark, both high-contrast palettes, ClickHouse light and dark) that pair equals the container, so both classes go and the header shows its container, which is also what a custom theme now gets. The banner drops a dark:bg-gradient-to-r that had no stops.

ActionIcon, RetrievalIcon, WrenchIcon and Chat/Messages/Content/ProgressCircle had no importers and carried fixed Lottie colours, so they are removed. The drop illustration and its black backdrop (which moves to the theme scrim once scrim opacity is a theme role, berry-13#181), the file-source chips over a file's own preview (OpenAI and code execution), the upload progress over an image, and the documents that leave the app (markdown and mermaid exports, clipboard rich text, runtime token fallbacks) go into the allowlist.

Counts, before to after this link: raw palette utilities 56 (unchanged), dark: colour utilities 32 to 28, hex/rgb/hsl literals 793 to 776. Suppressions: client/src no-raw-colors 47 to 30, no-inline-styles 211 to 192, no-arbitrary-values 162 to 161; the rest unchanged. The eslint-suppressions.json diff only removes or lowers entries for files this link edits or deletes.

Type of change

  • Bug fix
  • Refactor

Testing

Tested environments/configuration:

  • Chromium via Playwright against this worktree's dev pair, default and ClickHouse themes, light and dark: the header over surface-secondary computes transparent over 247,247,248 / 33,33,33 (default) and 246,247,250 / 40,40,40 (ClickHouse).

Automated tests:

  • reviewctl precheck against the library link: static checks and jest-client pass.
  • @scenario:code-window-header-shows-its-panel (new, e2e/specs/mock/scenarios/code-window-header.spec.ts): a skill file created by the model opens the file-authoring card; its code header's background is transparent and its panel paints surface-secondary.
  • npx tsc --noEmit (incremental) for client: clean.
  • npm run static-checks -- --against berry-13/theme-leakage-library: all affected checks pass.

Screenshots / recordings

No visible change in the bundled themes: the header and output panel compute the same colours as before in default, dark, both high-contrast palettes and ClickHouse. The removed components had no importers.

Risk / compatibility

None. The removed components had no importers in the app or the package.

Checklist

  • I reviewed my own changes
  • Relevant tests have been added or updated
  • Existing relevant tests pass
  • The change does not introduce new warnings or errors
  • User-facing or complex behavior is documented where necessary

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-29T17:02:53.595653Z 094ac1b New commits
🔒 Security Review ✅ Completed 2026-09-29T06:12:45.980308Z 8fa538c PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@berry-13 berry-13 changed the title berry-13/theme-leakage-chat 🫧 fix: Paint Chat Surfaces From Theme Roles Sep 29, 2026
@berry-13
berry-13 force-pushed the berry-13/theme-leakage-chat branch from 8fa538c to 6fac64f Compare September 29, 2026 06:47
@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 3027.7939999999944 │ 4296.854999999981  │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3325.2270000000135 │ 3941.487999999983  │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3326.5109999999986 │ 3960.6229999999923 │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3326.7700000000186 │ 3961.035999999993  │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3328.035999999993  │ 4297.059999999969  │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3328.244000000006  │ 4448.81799999997   │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3328.959999999992  │ 4216.898000000016  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3329.146000000008  │ 4469.579999999987  │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3329.662000000011  │ 4473.266999999993  │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3330.293000000005  │ 4809.986000000004  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3331.070000000007  │ 7326.771000000008  │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3331.270999999979  │ 4810.209000000003  │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4562.3979999999865 │ 4818.422999999981  │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬─────────────────────┬───────┐
│ (index) │ audit                      │ median              │ limit │
├─────────┼────────────────────────────┼─────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4589.935            │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.01791539857134518 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 335.77700000000004  │ 500   │
└─────────┴────────────────────────────┴─────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4589.935

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-29 06:51:26 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 06:51:26 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-29 06:51:27 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 06:51:27 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
2026-09-29 06:51:27 �[31merror�[39m: �[31mIndex build failed for "Conversation": Operation interrupted because client was closed�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6fac64fe8d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -9,7 +9,7 @@ const sourceToEndpoint = {
};

const sourceToClassname = {
[FileSources.openai]: 'bg-white/75 dark:bg-black/65',
[FileSources.openai]: 'bg-surface-primary/75',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve the OpenAI badge's dark-mode opacity

In dark mode, this changes the OpenAI source badge from 65%-opaque black to 75%-opaque surface-primary (#0d0d0d in the default dark theme). Because the badge is composited over arbitrary file previews, this visibly darkens it—for example, over white the resulting channel falls from about 89 to 74—even though this change is presented as a semantic-token migration rather than a redesign. Preserve the shipped dark appearance while making the color theme-aware.

AGENTS.md reference: AGENTS.md:L42-L45

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in c299b69: the chip keeps white/75 and black/65; it composites over the file's own preview, so it is recorded in theme/allowlist.md as a media overlay with the code-execution badge.

await selectMockEndpoint(page, MOCK_ENDPOINTS[0]);
await enableCodeInterpreter(page);

const response = await sendMessageAndWaitForCompletion(page, `E2E_EXECUTE_CODE:${label}`);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Exercise CodeWindowHeader instead of BashCall

With the standard mock configuration, enabling Run Code registers bash_tool and read_file, while the fake model's E2E_EXECUTE_CODE handler deliberately selects bash_tool first. The located “Copy code” button therefore belongs to BashCall; its parent is the concrete bg-surface-code container, so the assertion that this element is transparent fails and the test never reaches CodeWindowHeader. Drive a tool that actually renders CodeWindowHeader instead.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 838ebd9: the scenario now creates a skill file through the model, which opens the file-authoring card that renders CodeWindowHeader.

@berry-13
berry-13 force-pushed the berry-13/theme-leakage-chat branch from 6fac64f to c299b69 Compare September 29, 2026 07:20
@berry-13
berry-13 added this pull request to stack #16505 September 29, 2026 11:36
Base automatically changed from berry-13/theme-leakage-library to canary September 29, 2026 14:14
@berry-13
berry-13 force-pushed the berry-13/theme-leakage-chat branch from c299b69 to fa60955 Compare September 29, 2026 14:14
@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 23      │ 'http://localhost:3080/api/permissions/mcpServer/effective/all'                                                 │ 3043.7709999999497 │ 3819.5579999998445 │ 200    │
│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 3043.9919999999693 │ 4323               │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3366.9129999999423 │ 3943.4319999999134 │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3369.54999999993   │ 3947.732999999891  │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3369.844999999972  │ 3955.253999999957  │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3370.06799999997   │ 4327.003999999957  │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3370.268999999971  │ 4452.9989999999525 │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3370.496999999974  │ 4203.835999999894  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3371.067999999854  │ 4464.3719999998575 │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3372.6859999998705 │ 4459.6699999999255 │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3373.0259999999544 │ 4815.845999999903  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3373.4649999999674 │ 7350.307999999961  │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3373.7219999999506 │ 4834.343999999925  │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4577.421999999904  │ 4834.165999999968  │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬──────────────────────┬───────┐
│ (index) │ audit                      │ median               │ limit │
├─────────┼────────────────────────────┼──────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4565.559             │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.017903521145258727 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 338.333000000001     │ 500   │
└─────────┴────────────────────────────┴──────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4565.559

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-29 14:19:06 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 14:19:06 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-29 14:19:06 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 14:19:06 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

@berry-13
berry-13 force-pushed the berry-13/theme-leakage-chat branch from fa60955 to e088589 Compare September 29, 2026 15:22
@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 23      │ 'http://localhost:3080/api/permissions/mcpServer/effective/all'                                                 │ 2947.902999999991  │ 3709.8740000000107 │ 200    │
│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 2948.5709999999963 │ 4213.995999999985  │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3234.023999999976  │ 3885.127999999968  │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3234.7209999999614 │ 3887.945000000007  │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3234.956999999995  │ 3888.765999999945  │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3236.0689999999595 │ 4218.375999999989  │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3236.407999999996  │ 4397.738000000012  │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3237.3159999999334 │ 4143.738999999943  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3237.527999999991  │ 4398.658999999985  │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3238.4769999999553 │ 4402.210999999952  │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3238.691999999981  │ 4721.916999999958  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3239.4199999999837 │ 7229.63699999993   │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3240.2550000000047 │ 4722.922999999952  │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4507.152999999991  │ 4762.407999999996  │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬──────────────────────┬───────┐
│ (index) │ audit                      │ median               │ limit │
├─────────┼────────────────────────────┼──────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4542.236             │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.017915387699559287 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 347.02299999999923   │ 500   │
└─────────┴────────────────────────────┴──────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4542.236

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-29 15:26:55 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 15:26:55 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-29 15:26:55 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 15:26:55 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 23      │ 'http://localhost:3080/api/permissions/mcpServer/effective/all'                                                 │ 3029.7299999999814 │ 3793.5690000000177 │ 200    │
│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 3029.911999999953  │ 4297.398999999976  │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3316.5209999999497 │ 3944.9290000000037 │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3318.6359999999404 │ 3959.0169999999343 │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3318.832999999984  │ 3959.335999999952  │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3319.0499999999884 │ 4299.713999999978  │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3319.255999999994  │ 4452.128999999957  │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3319.4499999999534 │ 4215.130999999994  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3320.072999999975  │ 4468.456000000006  │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3321.7999999999884 │ 4473.5929999999935 │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3322.0260000000126 │ 4809.338999999978  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3322.2509999999893 │ 7325.633999999962  │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3322.4319999999716 │ 4809.544999999984  │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4569.896999999997  │ 4824.61599999998   │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬─────────────────────┬───────┐
│ (index) │ audit                      │ median              │ limit │
├─────────┼────────────────────────────┼─────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4591.819            │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.01790115109593439 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 314.1289999999999   │ 500   │
└─────────┴────────────────────────────┴─────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4591.819

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-29 16:34:41 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 16:34:41 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-29 16:34:41 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 16:34:41 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

The code window header and skill output panel stop repainting their
surface-secondary container with a per-mode fill that matched it in every bundled
theme, the drag-and-drop backdrop becomes the theme scrim, the OpenAI file-source
chip takes the primary surface, and the banner drops a stopless dark gradient.

ActionIcon, RetrievalIcon, WrenchIcon and the message ProgressCircle had no
importers and carried fixed Lottie colours, so they are removed. The media,
artwork and exported-document colours that stay fixed are recorded in the theme
allowlist.
The theme scrim is gray in default light, so at the same alpha it dimmed the page
less than the black backdrop it replaced. The backdrop keeps its original colour
and the allowlist records the scrim-opacity role it waits on.
The mock code interpreter exposes bash_tool, whose card has its own header; a skill
file created by the model opens the file-authoring card that renders CodeWindowHeader.
The chip composites over the file's own preview, where surface-primary at 75% darkened
it against the shipped black at 65%. It keeps its colours and joins the code-execution
badge in the allowlist as a media overlay.
@github-actions

Copy link
Copy Markdown
Contributor

Lighthouse CI failed. The last 80 log lines contain the measured budgets and assertion failures.

│ 23      │ 'http://localhost:3080/api/permissions/mcpServer/effective/all'                                                 │ 2979.592000000179  │ 3739.7360000000335 │ 200    │
│ 24      │ 'http://localhost:3080/api/prompts/groups?limit=10'                                                             │ 2980.502000000095  │ 4246.516999999993  │ 200    │
│ 25      │ 'http://localhost:3080/api/keys?name=openAI'                                                                    │ 3266.8230000000913 │ 3900.5069999999832 │ 200    │
│ 26      │ 'http://localhost:3080/api/presets'                                                                             │ 3267.1780000000726 │ 3924.1160000001546 │ 200    │
│ 27      │ 'http://localhost:3080/api/tags'                                                                                │ 3268.3900000001304 │ 3924.3240000000224 │ 200    │
│ 28      │ 'http://localhost:3080/api/share/link/16390000-0000-4000-8000-000000000001'                                     │ 3268.6090000001714 │ 4246.998000000138  │ 200    │
│ 29      │ 'http://localhost:3080/api/messages/16390000-0000-4000-8000-000000000001'                                       │ 3269.4809999999125 │ 4406.804000000237  │ 200    │
│ 30      │ 'http://localhost:3080/api/files/config'                                                                        │ 3269.9260000002105 │ 4179.283000000054  │ 200    │
│ 31      │ 'http://localhost:3080/api/user/settings/favorites/tools'                                                       │ 3270.7310000001453 │ 4431.616000000155  │ 200    │
│ 32      │ 'http://localhost:3080/api/endpoints/token-config'                                                              │ 3271.12900000019   │ 4435.575000000186  │ 200    │
│ 33      │ 'http://localhost:3080/api/user/settings/skills/active'                                                         │ 3271.7390000000596 │ 4757.333000000101  │ 200    │
│ 34      │ 'http://localhost:3080/api/agents/tools/web_search/auth'                                                        │ 3272.5509999999776 │ 7269.916000000201  │ 200    │
│ 35      │ 'http://localhost:3080/api/agents/tools/calls?conversationId=16390000-0000-4000-8000-000000000001'              │ 3272.7420000000857 │ 4757.611999999965  │ 200    │
│ 36      │ 'http://localhost:3080/api/agents/chat/status/16390000-0000-4000-8000-000000000001?generationProtocolVersion=2' │ 4515.124000000069  │ 4769.378999999957  │ 200    │
└─────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────┴────────────────────┴────────┘

Inspect .lighthouse HTML/JSON and e2e/lighthouse/README.md. Reuse loaded user/config data; overlap independent reads without bypassing authorization.

┌─────────┬────────────────────────────┬─────────────────────┬───────┐
│ (index) │ audit                      │ median              │ limit │
├─────────┼────────────────────────────┼─────────────────────┼───────┤
│ 0       │ 'largest-contentful-paint' │ 4530.372            │ 4500  │
│ 1       │ 'cumulative-layout-shift'  │ 0.01791542575080991 │ 0.1   │
│ 2       │ 'total-blocking-time'      │ 296.4300000000003   │ 500   │
└─────────┴────────────────────────────┴─────────────────────┴───────┘

  1) [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

    Error: Median largest-contentful-paint must stay within 4500

    expect(received).toBeLessThanOrEqual(expected)

    Expected: <= 4500
    Received:    4530.372

       at audit.ts:159

      157 |   console.table(measured);
      158 |   for (const { audit, median, limit } of measured) {
    > 159 |     expect(median, `Median ${audit} must stay within ${limit}`).toBeLessThanOrEqual(limit);
          |                                                                 ^
      160 |   }
      161 |   return results;
      162 | }
        at auditPage (/home/runner/work/LibreChat/LibreChat/e2e/lighthouse/audit.ts:159:65)
        at /home/runner/work/LibreChat/LibreChat/e2e/lighthouse/load.spec.ts:33:19

    attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/test-failed-1.png
    ────────────────────────────────────────────────────────────────────────────────────────────────

    Error Context: e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/error-context.md

    attachment #3: trace (application/zip) ─────────────────────────────────────────────────────────
    e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip
    Usage:

        npx playwright show-trace e2e/lighthouse/.test-results/load-serial-database-latency-stays-within-web-vitals-budgets-chrome/trace.zip

    ────────────────────────────────────────────────────────────────────────────────────────────────


🤖: global teardown has been started
2026-09-29 16:59:31 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 16:59:31 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ✅  Found user in Database
🤖:  ✅  Deleted 1 convos & 2 messages
🤖:  ✅  Deleted user from Database
🤖: global teardown has been started
2026-09-29 16:59:32 �[32minfo�[39m: �[32mMongo Connection options�[39m
2026-09-29 16:59:32 �[32minfo�[39m: �[32m{�[39m
�[32m  "bufferCommands": false�[39m
�[32m}�[39m
🤖:  ✅  Connected to Database
🤖:  ⚠️  User not found in Database
  1 failed
    [chrome] › e2e/lighthouse/load.spec.ts:10:5 › serial database latency stays within web-vitals budgets 

Open the full run

@berry-13
berry-13 force-pushed the berry-13/theme-leakage-chat branch from 01f3134 to 094ac1b Compare September 29, 2026 17:00
@berry-13
berry-13 merged commit 0b80ea5 into canary Sep 29, 2026
30 checks passed
@berry-13
berry-13 deleted the berry-13/theme-leakage-chat branch September 29, 2026 17:17
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
* fix: Paint Chat Surfaces From Theme Roles

The code window header and skill output panel stop repainting their
surface-secondary container with a per-mode fill that matched it in every bundled
theme, the drag-and-drop backdrop becomes the theme scrim, the OpenAI file-source
chip takes the primary surface, and the banner drops a stopless dark gradient.

ActionIcon, RetrievalIcon, WrenchIcon and the message ProgressCircle had no
importers and carried fixed Lottie colours, so they are removed. The media,
artwork and exported-document colours that stay fixed are recorded in the theme
allowlist.

* fix: Keep the Drag-and-Drop Backdrop Black Until Scrim Opacity Is a Role

The theme scrim is gray in default light, so at the same alpha it dimmed the page
less than the black backdrop it replaced. The backdrop keeps its original colour
and the allowlist records the scrim-opacity role it waits on.

* test: Cover the Code Window Header Showing Its Panel Surface

* test: Exercise the Code Window Header Through a File-Authoring Card

The mock code interpreter exposes bash_tool, whose card has its own header; a skill
file created by the model opens the file-authoring card that renders CodeWindowHeader.

* fix: Keep the OpenAI File-Source Chip's Dark Opacity

The chip composites over the file's own preview, where surface-primary at 75% darkened
it against the shipped black at 65%. It keeps its colours and joins the code-execution
badge in the allowlist as a media overlay.

(cherry picked from commit 0b80ea5)

Original-PR: LibreChat-AI#16483
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant