mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
e189f73cc041e4d015577eb2fcf94e622f158b05
5088
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
9b4666020b |
fix(site): show cross-org workspaces as disabled in chat picker (#24944)
All user workspaces now appear in the picker. Workspaces from a different organization are rendered as disabled (greyed out, not selectable) with a tooltip on hover: "Chat and workspace must be in the same organization." |
||
|
|
5322755691 | fix(site/src/pages/AgentsPage/components/ChatElements): align code block rendering (#24966) | ||
|
|
dd2b121b20 |
feat(site/src/pages/AgentsPage): guide users when chat providers or models are missing (#24863)
<img width="674" height="508" alt="Screenshot 2026-05-04 at 20 43 11" src="https://github.com/user-attachments/assets/de33dba9-33f5-4dbe-a1af-9bff5f048b8f" /> When the agents chat page loads with no chat providers or no chat models configured, new users currently get no in-product guidance about the missing setup step. also adds a Add model button on the provider page after a provider is setup This adds a setup notice rendered as a no dismissable modalthat explains both a provider and a model must be configured before agents can be used. The notice conditionally links to `/agents/settings/providers` and/or `/agents/settings/models` depending on which is missing, and only renders after the relevant config queries succeed (no flash during loading). |
||
|
|
a24ebb9d38 |
fix: keep agents desktop layout at 200% zoom (#24699)
Fixes layout issues on the agents empty state page. 1. At 200% zoom on a 1440 px desktop, the CSS viewport shrinks to 720 px, which was below the previous `md:` breakpoint (768 px) and collapsed the page into the mobile stack. Switching the page shell and shell-level controls to the `sm:` breakpoint (640 px) keeps the sidebar and chat area side-by-side at common zoom levels while preserving the mobile stack for real phone viewports. 2. The empty state stays bottom-aligned on mobile and centered on the desktop branch, with tighter spacing so the chat input sits closer to the bottom of the screen at 200% zoom. 3. The inner stack gap shrinks from `gap-4` (16 px) to `gap-2` (8 px) and the footer paragraph drops its `mt-1`, tightening the space around the organization selector, the chat input, and the "Introductory access to Coder Agents through September 2026" line. 4. Sidebar header/footer controls, the page header, the chat top bar, and the plan-mode badge now use the same `sm:` desktop breakpoint as the page shell. A collapsed sidebar can be expanded again at 640 to 767 px. Dropdown full-width CSS (`@media (max-width: 767px)`) and the `isBelowMdViewport` helper are intentionally left at 768 px. Those govern dropdown UX rather than page layout, and the chat pane is still narrow at 640 to 767 px after the sidebar is visible. The page is in desktop mode in that range while dropdowns stay full-width. <img width="1460" height="858" alt="Screenshot 2026-04-30 at 23 03 48" src="https://github.com/user-attachments/assets/62072432-6edf-4bf5-9a7f-88fd69f89602" /> <img width="1460" height="856" alt="Screenshot 2026-04-30 at 23 03 57" src="https://github.com/user-attachments/assets/76d94673-ac45-4a50-9c6b-3cfeffa1d6c7" /> Regression coverage in Storybook: - `AgentsPageView.stories.tsx > EmptyStateZoom200Desktop` pins a new 720 px Chromatic viewport and asserts the rendered layout is horizontal, the sidebar is left of the main panel, and the sidebar header/footer controls are visible. - `AgentsPageView.stories.tsx > CollapsedSidebarZoom200Desktop` pins the same 720 px viewport and asserts the expand-sidebar control is visible when the sidebar is collapsed. - `AgentCreateForm.stories.tsx > OrgPickerTightSpacing` measures the vertical gap between the org selector row and the chat-input composer and expects it to stay below 16 px. --- Generated by Coder Agents. |
||
|
|
63db689ab7 |
fix(site/src/pages/AgentsPage): cap queued messages list height so chat scroll keeps working (#24950)
Linear: [CODAGT-313](https://linear.app/codercom/issue/CODAGT-313/unable-to-scroll-long-queued-messages-in-coder-agents) ## Summary When many messages are queued in the agent chat, the chat history becomes unscrollable: mouse wheel and scrollbar drag both stop responding. The input wrapper in `AgentChatPageView.tsx:496` is `shrink-0 overflow-y-auto` with **no `max-height`**, so `overflow-y-auto` is a no-op and the section grows unbounded as `QueuedMessagesList` adds rows. Its sibling `ChatScrollContainer` is `flex-1 min-h-0`, so it absorbs the shrinkage and `clientHeight` collapses to 0. The chat list is then a zero-height viewport with nothing to scroll. Measured against the actual `AgentChatPageView` rendered in Storybook with 20 queued messages (1280x800): | | scroll-container `clientHeight` | input wrapper height | scrollable? | |---|---:|---:|---| | 0 queued | 502 px | 270 px | yes | | 20 queued, `main` | **0 px** | 1182 px | **no** | | 20 queued, this PR | 258 px | 502 px | yes | ## Demo  Left (`main`): wheel-up does nothing because the chat scroll container has been crushed to zero height. Right (this PR): the queued list scrolls inside its own pane and the chat history scrolls normally. Recording is `AgentChatPageView` rendered through Storybook with the production component source. The same gesture (wheel-up over the chat history, then wheel-down over the queued list) is applied to both sides. Source for the recording is in `bpmct/codagt-313-assets`. ## Change ```diff - <div className={cn("flex w-full flex-col", className)}> + // Cap the queue at ~40% of the small viewport so a long queue + // does not push the chat history's scroll container down to + // zero height (CODAGT-313). The list scrolls inside its own pane. + <div + className={cn( + "flex w-full flex-col max-h-[40svh] overflow-y-auto [scrollbar-gutter:stable] [scrollbar-width:thin] [scrollbar-color:hsl(var(--surface-quaternary))_transparent]", + className, + )} + > ``` ## Why this spot, not the outer wrapper The composer textarea already self-caps at `max-h-[50vh]` in `ChatMessageInput.tsx:688`, so the only unbounded growth source in the input section is the queued list. Capping the list keeps the constraint colocated with the component that owns it, and any future consumer of `QueuedMessagesList` is automatically safe. `40svh` (small viewport height) so the queue doesn't fight with the iOS keyboard once it appears, matching the `h-dvh` decision in #24848. --- *Generated by Coder Agents.* |
||
|
|
2505709475 |
chore: bump axios from 1.15.0 to 1.15.2 in /site (#24965)
Bumps [axios](https://github.com/axios/axios) from 1.15.0 to 1.15.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/axios/axios/releases">axios's releases</a>.</em></p> <blockquote> <h2>v1.15.2</h2> <p>This release delivers prototype-pollution hardening for the Node HTTP adapter, adds an opt-in <code>allowedSocketPaths</code> allowlist to mitigate SSRF via Unix domain sockets, fixes a keep-alive socket memory leak, and ships supply-chain hardening across CI and security docs.</p> <h2>🔒 Security Fixes</h2> <ul> <li><strong>Prototype Pollution Hardening (HTTP Adapter):</strong> Hardened the Node HTTP adapter and <code>resolveConfig</code>/<code>mergeConfig</code>/validator paths to read only own properties and use null-prototype config objects, preventing polluted <code>auth</code>, <code>baseURL</code>, <code>socketPath</code>, <code>beforeRedirect</code>, and <code>insecureHTTPParser</code> from influencing requests. (<strong><a href="https://redirect.github.com/axios/axios/issues/10779">#10779</a></strong>)</li> <li><strong>SSRF via <code>socketPath</code>:</strong> Rejects non-string <code>socketPath</code> values and adds an opt-in <code>allowedSocketPaths</code> config option to restrict permitted Unix domain socket paths, returning <code>AxiosError</code> <code>ERR_BAD_OPTION_VALUE</code> on mismatch. (<strong><a href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li> <li><strong>Supply-chain Hardening:</strong> Added <code>.npmrc</code> with <code>ignore-scripts=true</code>, lockfile lint CI, non-blocking reproducible build diff, scoped CODEOWNERS, expanded <code>SECURITY.md</code>/<code>THREATMODEL.md</code> with provenance verification (<code>npm audit signatures</code>), 60-day resolution policy, and maintainer incident-response runbook. (<strong><a href="https://redirect.github.com/axios/axios/issues/10776">#10776</a></strong>)</li> </ul> <h2>🚀 New Features</h2> <ul> <li><strong><code>allowedSocketPaths</code> Config Option:</strong> New request config option (and TypeScript types) to allowlist Unix domain socket paths used by the Node http adapter; backwards compatible when unset. (<strong><a href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li> </ul> <h2>🐛 Bug Fixes</h2> <ul> <li><strong>Keep-alive Socket Memory Leak:</strong> Installs a single per-socket <code>error</code> listener tracking the active request via <code>kAxiosSocketListener</code>/<code>kAxiosCurrentReq</code>, eliminating per-request listener accumulation, <code>MaxListenersExceededWarning</code>, and linear heap growth under concurrent or long-running keep-alive workloads (fixes <a href="https://redirect.github.com/axios/axios/issues/10780">#10780</a>). (<strong><a href="https://redirect.github.com/axios/axios/issues/10788">#10788</a></strong>)</li> </ul> <h2>🔧 Maintenance & Chores</h2> <ul> <li><strong>Changelog:</strong> Updated <code>CHANGELOG.md</code> with v1.15.1 release notes. (<strong><a href="https://redirect.github.com/axios/axios/issues/10781">#10781</a></strong>)</li> </ul> <p><a href="https://github.com/axios/axios/compare/v1.15.1...v1.15.2">Full Changelog</a></p> <h2>v1.15.1</h2> <p>This release ships a coordinated set of security hardening fixes across headers, body/redirect limits, multipart handling, and XSRF/prototype-pollution vectors, alongside a broad sweep of bug fixes, test migrations, and threat-model documentation updates.</p> <h2>🔒 Security Fixes</h2> <ul> <li><strong>Header Injection Hardening:</strong> Tightened validation and sanitisation across request header construction to close the header-injection attack surface. (<strong><a href="https://redirect.github.com/axios/axios/issues/10749">#10749</a></strong>)</li> <li><strong>CRLF Stripping in Multipart Headers:</strong> Correctly strips CR/LF from multipart header values to prevent injection via field names and filenames. (<strong><a href="https://redirect.github.com/axios/axios/issues/10758">#10758</a></strong>)</li> <li><strong>Prototype Pollution / Auth Bypass:</strong> Replaced unsafe <code>in</code> checks with <code>hasOwnProperty</code> to prevent authentication bypass via prototype pollution on config objects, with additional regression tests. (<strong><a href="https://redirect.github.com/axios/axios/issues/10761">#10761</a></strong>, <strong><a href="https://redirect.github.com/axios/axios/issues/10760">#10760</a></strong>)</li> <li><strong><code>withXSRFToken</code> Truthy Bypass:</strong> Short-circuits on any truthy non-boolean value, so an ambiguous config no longer silently leaks the XSRF token cross-origin. (<strong><a href="https://redirect.github.com/axios/axios/issues/10762">#10762</a></strong>)</li> <li><strong><code>maxBodyLength</code> With Zero Redirects:</strong> Enforces <code>maxBodyLength</code> even when <code>maxRedirects</code> is set to <code>0</code>, closing a bypass path for oversized request bodies. (<strong><a href="https://redirect.github.com/axios/axios/issues/10753">#10753</a></strong>)</li> <li><strong>Streamed Response <code>maxContentLength</code> Bypass:</strong> Applies <code>maxContentLength</code> to streamed responses that previously bypassed the cap. (<strong><a href="https://redirect.github.com/axios/axios/issues/10754">#10754</a></strong>)</li> <li><strong>Follow-up CVE Completion:</strong> Completes an earlier incomplete CVE fix to fully close the regression window. (<strong><a href="https://redirect.github.com/axios/axios/issues/10755">#10755</a></strong>)</li> </ul> <h2>🚀 New Features</h2> <ul> <li><strong>AI-Based Docs Translations:</strong> Initial scaffold for AI-assisted translations of the documentation site. (<strong><a href="https://redirect.github.com/axios/axios/issues/10705">#10705</a></strong>)</li> <li><strong><code>Location</code> Request Header Type:</strong> Adds <code>Location</code> to <code>CommonRequestHeadersList</code> for accurate typing of redirect-aware requests. (<strong><a href="https://redirect.github.com/axios/axios/issues/7528">#7528</a></strong>)</li> </ul> <h2>🐛 Bug Fixes</h2> <ul> <li><strong>FormData Handling:</strong> Removes <code>Content-Type</code> when no boundary is present on <code>FormData</code> fetch requests, supports multi-select fields, cancels <code>request.body</code> instead of the source stream on fetch abort, and fixes a recursion bug in form-data serialisation. (<strong><a href="https://redirect.github.com/axios/axios/issues/7314">#7314</a></strong>, <strong><a href="https://redirect.github.com/axios/axios/issues/10676">#10676</a></strong>, <strong><a href="https://redirect.github.com/axios/axios/issues/10702">#10702</a></strong>, <strong><a href="https://redirect.github.com/axios/axios/issues/10726">#10726</a></strong>)</li> <li><strong>HTTP Adapter:</strong> Handles socket-only request errors without leaking keep-alive listeners. (<strong><a href="https://redirect.github.com/axios/axios/issues/10576">#10576</a></strong>)</li> <li><strong>Progress Events:</strong> Clamps <code>loaded</code> to <code>total</code> for computable upload/download progress events. (<strong><a href="https://redirect.github.com/axios/axios/issues/7458">#7458</a></strong>)</li> <li><strong>Types:</strong> Aligns <code>runWhen</code> type with the runtime behaviour in <code>InterceptorManager</code> and makes response header keys case-insensitive. (<strong><a href="https://redirect.github.com/axios/axios/issues/7529">#7529</a></strong>, <strong><a href="https://redirect.github.com/axios/axios/issues/10677">#10677</a></strong>)</li> <li><strong><code>buildFullPath</code>:</strong> Uses strict equality in the base/relative URL check. (<strong><a href="https://redirect.github.com/axios/axios/issues/7252">#7252</a></strong>)</li> <li><strong><code>AxiosURLSearchParams</code> Regex:</strong> Improves the regex used for param serialisation to avoid edge-case mismatches. (<strong><a href="https://redirect.github.com/axios/axios/issues/10736">#10736</a></strong>)</li> <li><strong>Resilient Value Parsing:</strong> Parses out header/config values instead of throwing on malformed input. (<strong><a href="https://redirect.github.com/axios/axios/issues/10687">#10687</a></strong>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/axios/axios/blob/v1.x/CHANGELOG.md">axios's changelog</a>.</em></p> <blockquote> <h2>v1.15.2 - April 21, 2026</h2> <p>This release delivers prototype-pollution hardening for the Node HTTP adapter, adds an opt-in <code>allowedSocketPaths</code> allowlist to mitigate SSRF via Unix domain sockets, fixes a keep-alive socket memory leak, and ships supply-chain hardening across CI and security docs.</p> <h2>🔒 Security Fixes</h2> <ul> <li><strong>Prototype Pollution Hardening (HTTP Adapter):</strong> Hardened the Node HTTP adapter and <code>resolveConfig</code>/<code>mergeConfig</code>/validator paths to read only own properties and use null-prototype config objects, preventing polluted <code>auth</code>, <code>baseURL</code>, <code>socketPath</code>, <code>beforeRedirect</code>, and <code>insecureHTTPParser</code> from influencing requests. (<strong><a href="https://redirect.github.com/axios/axios/issues/10779">#10779</a></strong>)</li> <li><strong>SSRF via <code>socketPath</code>:</strong> Rejects non-string <code>socketPath</code> values and adds an opt-in <code>allowedSocketPaths</code> config option to restrict permitted Unix domain socket paths, returning <code>AxiosError</code> <code>ERR_BAD_OPTION_VALUE</code> on mismatch. (<strong><a href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li> <li><strong>Supply-chain Hardening:</strong> Added <code>.npmrc</code> with <code>ignore-scripts=true</code>, lockfile lint CI, non-blocking reproducible build diff, scoped CODEOWNERS, expanded <code>SECURITY.md</code>/<code>THREATMODEL.md</code> with provenance verification (<code>npm audit signatures</code>), 60-day resolution policy, and maintainer incident-response runbook. (<strong><a href="https://redirect.github.com/axios/axios/issues/10776">#10776</a></strong>)</li> </ul> <h2>🚀 New Features</h2> <ul> <li><strong><code>allowedSocketPaths</code> Config Option:</strong> New request config option (and TypeScript types) to allowlist Unix domain socket paths used by the Node http adapter; backwards compatible when unset. (<strong><a href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li> </ul> <h2>🐛 Bug Fixes</h2> <ul> <li><strong>Keep-alive Socket Memory Leak:</strong> Installs a single per-socket <code>error</code> listener tracking the active request via <code>kAxiosSocketListener</code>/<code>kAxiosCurrentReq</code>, eliminating per-request listener accumulation, <code>MaxListenersExceededWarning</code>, and linear heap growth under concurrent or long-running keep-alive workloads (fixes <a href="https://redirect.github.com/axios/axios/issues/10780">#10780</a>). (<strong><a href="https://redirect.github.com/axios/axios/issues/10788">#10788</a></strong>)</li> </ul> <h2>🔧 Maintenance & Chores</h2> <ul> <li><strong>Changelog:</strong> Updated <code>CHANGELOG.md</code> with v1.15.1 release notes. (<strong><a href="https://redirect.github.com/axios/axios/issues/10781">#10781</a></strong>)</li> </ul> <p><a href="https://github.com/axios/axios/compare/v1.15.1...v1.15.2">Full Changelog</a></p> <hr /> <h2>v1.15.1 - April 19, 2026</h2> <p>This release ships a coordinated set of security hardening fixes across headers, body/redirect limits, multipart handling, and XSRF/prototype-pollution vectors, alongside a broad sweep of bug fixes, test migrations, and threat-model documentation updates.</p> <h2>🔒 Security Fixes</h2> <ul> <li> <p><strong>Header Injection Hardening:</strong> Tightened validation and sanitisation across request header construction to close the header-injection attack surface. (<strong><a href="https://redirect.github.com/axios/axios/issues/10749">#10749</a></strong>)</p> </li> <li> <p><strong>CRLF Stripping in Multipart Headers:</strong> Correctly strips CR/LF from multipart header values to prevent injection via field names and filenames. (<strong><a href="https://redirect.github.com/axios/axios/issues/10758">#10758</a></strong>)</p> </li> <li> <p><strong>Prototype Pollution / Auth Bypass:</strong> Replaced unsafe <code>in</code> checks with <code>hasOwnProperty</code> to prevent authentication bypass via prototype pollution on config objects, with additional regression tests. (<strong><a href="https://redirect.github.com/axios/axios/issues/10761">#10761</a></strong>, <strong><a href="https://redirect.github.com/axios/axios/issues/10760">#10760</a></strong>)</p> </li> <li> <p><strong><code>withXSRFToken</code> Truthy Bypass:</strong> Short-circuits on any truthy non-boolean value, so an ambiguous config no longer silently leaks the XSRF token cross-origin. (<strong><a href="https://redirect.github.com/axios/axios/issues/10762">#10762</a></strong>)</p> </li> <li> <p><strong><code>maxBodyLength</code> With Zero Redirects:</strong> Enforces <code>maxBodyLength</code> even when <code>maxRedirects</code> is set to <code>0</code>, closing a bypass path for oversized request bodies. (<strong><a href="https://redirect.github.com/axios/axios/issues/10753">#10753</a></strong>)</p> </li> <li> <p><strong>Streamed Response <code>maxContentLength</code> Bypass:</strong> Applies <code>maxContentLength</code> to streamed responses that previously bypassed the cap. (<strong><a href="https://redirect.github.com/axios/axios/issues/10754">#10754</a></strong>)</p> </li> <li> <p><strong>Follow-up CVE Completion:</strong> Completes an earlier incomplete CVE fix to fully close the regression window. (<strong><a href="https://redirect.github.com/axios/axios/issues/10755">#10755</a></strong>)</p> </li> </ul> <h2>🚀 New Features</h2> <ul> <li><strong>AI-Based Docs Translations:</strong> Initial scaffold for AI-assisted translations of the documentation site. (<strong><a href="https://redirect.github.com/axios/axios/issues/10705">#10705</a></strong>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/axios/axios/commit/582934382e4e0e0bcb679c628071a4203e93cf57"><code>5829343</code></a> chore(release): prepare release 1.15.2 (<a href="https://redirect.github.com/axios/axios/issues/10789">#10789</a>)</li> <li><a href="https://github.com/axios/axios/commit/4709a48fa2717ba97f43f5432d48ca4e26c2d326"><code>4709a48</code></a> fix: added fix for memory leak in sockets (<a href="https://redirect.github.com/axios/axios/issues/10788">#10788</a>)</li> <li><a href="https://github.com/axios/axios/commit/be3336014e01f9a4fc1f8aef15303cf7daaf58db"><code>be33360</code></a> chore: update changelog (<a href="https://redirect.github.com/axios/axios/issues/10781">#10781</a>)</li> <li><a href="https://github.com/axios/axios/commit/47915144662f2733e6c051bdcb895a8c8f0586aa"><code>4791514</code></a> fix: more header pollutions (<a href="https://redirect.github.com/axios/axios/issues/10779">#10779</a>)</li> <li><a href="https://github.com/axios/axios/commit/6feafcff6c2dbafe206161c5d09e38e1d36af66f"><code>6feafcf</code></a> fix: socket issue (<a href="https://redirect.github.com/axios/axios/issues/10777">#10777</a>)</li> <li><a href="https://github.com/axios/axios/commit/302e2739c602f00e323d4f3f5c79500647633a73"><code>302e273</code></a> docs: update docs, add a couple actions etc (<a href="https://redirect.github.com/axios/axios/issues/10776">#10776</a>)</li> <li><a href="https://github.com/axios/axios/commit/ac42446be51300fe214ba3c6e40cc95f34fd6871"><code>ac42446</code></a> chore(release): prepare release 1.15.1 (<a href="https://redirect.github.com/axios/axios/issues/10767">#10767</a>)</li> <li><a href="https://github.com/axios/axios/commit/908f2206b6bfeff67236784abce85935698ac1d9"><code>908f220</code></a> docs: update threatmodel (<a href="https://redirect.github.com/axios/axios/issues/10765">#10765</a>)</li> <li><a href="https://github.com/axios/axios/commit/f93f8155250c2e066205521eda05ae22983a1f6d"><code>f93f815</code></a> docs: added docs around potential decompressions bomb (<a href="https://redirect.github.com/axios/axios/issues/10763">#10763</a>)</li> <li><a href="https://github.com/axios/axios/commit/1728aa1b15b8857f970611fd8983c06b423fc486"><code>1728aa1</code></a> fix: short-circuits on any truthy non-boolean in withXSRFToken (<a href="https://redirect.github.com/axios/axios/issues/10762">#10762</a>)</li> <li>Additional commits viewable in <a href="https://github.com/axios/axios/compare/v1.15.0...v1.15.2">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/coder/coder/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
1e7874c2c1 |
feat(site): add personal model override settings UI (#24748)
Adds the UI for personal chat model overrides for root chats, General subagents, and Explore subagents. Backend support landed in #24715, and this PR now targets `main`. ## Summary - Add the admin switch for enabling user personal model overrides. - Add the user `Agents` settings page at `/agents/settings/user-agents`. - Use one dropdown per context with pinned chat default and deployment default options. - Show the resolved deployment default model in personal settings when available. - Teach root chat creation to honor saved root preferences without replacing explicit user selections. - Add shared unavailable and malformed override alerts, select separator support, and Storybook coverage. ## Testing - `pnpm --dir site lint:types` - `pnpm --dir site check` - `pnpm --dir site test:storybook src/pages/AgentsPage/AgentSettingsUserAgentsPageView.stories.tsx src/pages/AgentsPage/components/AdminPersonalModelOverridesSettings.stories.tsx src/pages/AgentsPage/components/AgentCreateForm.stories.tsx src/pages/AgentsPage/components/Sidebar/AgentsSidebar.stories.tsx` > Mux is working on behalf of Mike. |
||
|
|
0c5a25c018 |
fix(site): deduplicate expired-attachment probes for repeated file IDs (#24760)
When multiple RemoteImageBlock components share a file ID, Chromium fires native error events on all of them before the first probe's fetch resolves. Each handler independently checked hasExpired(), saw false, and started its own probe. FileProbeContext (renamed from ExpiredFileIdsContext) now coordinates probes across blocks for the same file ID: - A ref-based pending set (isPending/markPending/clearPending) gates duplicate probes. A ref is used so the second handler can read it synchronously before React re-renders. - Resolved outcomes are stored in context state (probeResults map) so sibling blocks re-render with the full result, including API error detail for tooltips. - Context writes (markExpired, setProbeResult) run above the per-instance abort-controller guard so siblings receive the result even if the probing block unmounts mid-flight. |
||
|
|
4751416b29 |
fix!: persist structured chat errors (#24919)
**Breaking change for changelog:**
> `codersdk.Chat.last_error` now returns a structured `ChatError` object
(`{message, kind, provider, retryable, status_code, detail}`) instead of
a plain string. The chats API is experimental
(`/api/experimental/chats`), so this ships without a deprecation cycle;
consumers reading `chat.last_error` as a string must update to read
`chat.last_error.message`. SDK/generated TypeScript terminal error
payloads now use the single `ChatError` type; the live stream error
payload type is renamed from `ChatStreamError` to `ChatError`.
Persisted chat errors now carry the same provider-specific detail (kind,
provider, retryable, HTTP status, optional detail) as the live stream,
so refreshing a failed chat rehydrates with the full structured error
instead of a one-line headline.
Existing rows are migrated in place: legacy text errors are wrapped into
`{message, kind: "generic"}` so already-errored chats still render, and
rows with `last_error IS NULL` stay NULL. Internally, persisted fallback
decoding now reuses the existing `chaterror.KindGeneric` constant, with
no JSON value change.
Closes CODAGT-239
|
||
|
|
7e01edeb8e |
fix: align chat attachment picker with allowed file types (#24917)
The agent chat composer only advertised image uploads to the OS file picker and filtered drag-and-drop and paste events to `image/*`, even though the backend accepts text, CSV, JSON, PDF, and a narrower set of image types. Move the allowed chat attachment media types into `codersdk` so the frontend picker and backend enforcement share one source of truth. Use the generated TypeScript list to drive the file input `accept` attribute and the drag-and-drop and paste filters, while adding common text extensions so platforms without MIME registrations still surface those files in the picker. |
||
|
|
632dcdb63a | feat: add personal chat model overrides (#24715) | ||
|
|
43aa0498d6 | feat(site): warn when viewing another user's chat (#24941) | ||
|
|
f0fd2111fd |
feat(site/src/pages/AgentsPage): render markdown attachments in preview popup (#24936)
Markdown attachments on `/agents` now render through the same `Response` component used for chat messages instead of falling back to a monospaced `<pre>` block. The popup detects markdown via an explicit `text/markdown` media type and falls back to the `.md`/`.markdown` filename extension when no media type is available. `PreviewTextAttachment` and `TextPreviewDialog` gain an optional `mediaType` so that callers (`AttachmentBlock` for already-sent messages and `AttachmentPreview` for live drafts) can plumb the upload metadata through. Plain `.txt` and unrecognized text attachments keep the existing monospaced rendering. ## Demo  ## Screenshots | Markdown rendering | Plain text rendering | | --- | --- | |  |  | Light theme also verified:  <details> <summary>Coverage details</summary> New stories in `TextPreviewDialog.stories.tsx` cover: - `MarkdownByExtension` — `.md` filename, headings/lists/tables/fenced code render natively. - `MarkdownByMediaType` — explicit `text/markdown` mediaType wins even without a `.md` suffix. - `MarkdownProseOnly` — inline `**bold**`, `_italic_`, and `` `code` `` render via streamdown. - `PlainTextStaysMonospaced` — `.txt` content stays inside `<pre>` so existing previews don't regress. Manual verification (desktop, Chromium, dark + light): all four stories above plus the existing `Default`, `LongContent`, and `NoFileName` stories pass. </details> _Coder Agents generated PR._ |
||
|
|
63412012b6 |
chore: bump lodash from 4.17.21 to 4.18.1 in /site (#24940)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.18.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/lodash/lodash/releases">lodash's releases</a>.</em></p> <blockquote> <h2>4.18.1</h2> <h2>Bugs</h2> <p>Fixes a <code>ReferenceError</code> issue in <code>lodash</code> <code>lodash-es</code> <code>lodash-amd</code> and <code>lodash.template</code> when using the <code>template</code> and <code>fromPairs</code> functions from the modular builds. See <a href="https://redirect.github.com/lodash/lodash/issues/6167#issuecomment-4165269769">lodash/lodash#6167</a></p> <p>These defects were related to how lodash distributions are built from the main branch using <a href="https://github.com/lodash-archive/lodash-cli">https://github.com/lodash-archive/lodash-cli</a>. When internal dependencies change inside lodash functions, equivalent updates need to be made to a mapping in the lodash-cli. (hey, it was ahead of its time once upon a time!). We know this, but we missed it in the last release. It's the kind of thing that passes in CI, but fails bc the build is not the same thing you tested.</p> <p>There is no diff on main for this, but you can see the diffs for each of the npm packages on their respective branches:</p> <ul> <li><code>lodash</code>: <a href="https://github.com/lodash/lodash/compare/4.18.0-npm...4.18.1-npm">https://github.com/lodash/lodash/compare/4.18.0-npm...4.18.1-npm</a></li> <li><code>lodash-es</code>: <a href="https://github.com/lodash/lodash/compare/4.18.0-es...4.18.1-es">https://github.com/lodash/lodash/compare/4.18.0-es...4.18.1-es</a></li> <li><code>lodash-amd</code>: <a href="https://github.com/lodash/lodash/compare/4.18.0-amd...4.18.1-amd">https://github.com/lodash/lodash/compare/4.18.0-amd...4.18.1-amd</a></li> <li><code>lodash.template</code><a href="https://github.com/lodash/lodash/compare/4.18.0-npm-packages...4.18.1-npm-packages">https://github.com/lodash/lodash/compare/4.18.0-npm-packages...4.18.1-npm-packages</a></li> </ul> <h2>4.18.0</h2> <h2>v4.18.0</h2> <p><strong>Full Changelog</strong>: <a href="https://github.com/lodash/lodash/compare/4.17.23...4.18.0">https://github.com/lodash/lodash/compare/4.17.23...4.18.0</a></p> <h3>Security</h3> <p><strong><code>_.unset</code> / <code>_.omit</code></strong>: Fixed prototype pollution via <code>constructor</code>/<code>prototype</code> path traversal (<a href="https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh">GHSA-f23m-r3pf-42rh</a>, <a href="https://github.com/lodash/lodash/commit/fe8d32eda854377349a4f922ab7655c8e5df9a0b">fe8d32e</a>). Previously, array-wrapped path segments and primitive roots could bypass the existing guards, allowing deletion of properties from built-in prototypes. Now <code>constructor</code> and <code>prototype</code> are blocked unconditionally as non-terminal path keys, matching <code>baseSet</code>. Calls that previously returned <code>true</code> and deleted the property now return <code>false</code> and leave the target untouched.</p> <p><strong><code>_.template</code></strong>: Fixed code injection via <code>imports</code> keys (<a href="https://github.com/lodash/lodash/security/advisories/GHSA-r5fr-rjxr-66jc">GHSA-r5fr-rjxr-66jc</a>, CVE-2026-4800, <a href="https://github.com/lodash/lodash/commit/879aaa93132d78c2f8d20c60279da9f8b21576d6">879aaa9</a>). Fixes an incomplete patch for CVE-2021-23337. The <code>variable</code> option was validated against <code>reForbiddenIdentifierChars</code> but <code>importsKeys</code> was left unguarded, allowing code injection via the same <code>Function()</code> constructor sink. <code>imports</code> keys containing forbidden identifier characters now throw <code>"Invalid imports option passed into _.template"</code>.</p> <h3>Docs</h3> <ul> <li>Add security notice for <code>_.template</code> in threat model and API docs (<a href="https://redirect.github.com/lodash/lodash/pull/6099">#6099</a>)</li> <li>Document <code>lower > upper</code> behavior in <code>_.random</code> (<a href="https://redirect.github.com/lodash/lodash/pull/6115">#6115</a>)</li> <li>Fix quotes in <code>_.compact</code> jsdoc (<a href="https://redirect.github.com/lodash/lodash/pull/6090">#6090</a>)</li> </ul> <h3><code>lodash.*</code> modular packages</h3> <p><a href="https://redirect.github.com/lodash/lodash/pull/6157">Diff</a></p> <p>We have also regenerated and published a select number of the <code>lodash.*</code> modular packages.</p> <p>These modular packages had fallen out of sync significantly from the minor/patch updates to lodash. Specifically, we have brought the following packages up to parity w/ the latest lodash release because they have had CVEs on them in the past:</p> <ul> <li><a href="https://www.npmjs.com/package/lodash.orderby">lodash.orderby</a></li> <li><a href="https://www.npmjs.com/package/lodash.tonumber">lodash.tonumber</a></li> <li><a href="https://www.npmjs.com/package/lodash.trim">lodash.trim</a></li> <li><a href="https://www.npmjs.com/package/lodash.trimend">lodash.trimend</a></li> <li><a href="https://www.npmjs.com/package/lodash.sortedindexby">lodash.sortedindexby</a></li> <li><a href="https://www.npmjs.com/package/lodash.zipobjectdeep">lodash.zipobjectdeep</a></li> <li><a href="https://www.npmjs.com/package/lodash.unset">lodash.unset</a></li> <li><a href="https://www.npmjs.com/package/lodash.omit">lodash.omit</a></li> <li><a href="https://www.npmjs.com/package/lodash.template">lodash.template</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/lodash/lodash/commit/cb0b9b9212521c08e3eafe7c8cb0af1b42b6649e"><code>cb0b9b9</code></a> release(patch): bump main to 4.18.1 (<a href="https://redirect.github.com/lodash/lodash/issues/6177">#6177</a>)</li> <li><a href="https://github.com/lodash/lodash/commit/75535f57883b7225adb96de1cfc1cd4169cfcb51"><code>75535f5</code></a> chore: prune stale advisory refs (<a href="https://redirect.github.com/lodash/lodash/issues/6170">#6170</a>)</li> <li><a href="https://github.com/lodash/lodash/commit/62e91bc6a39c98d85b9ada8c44d40593deaf82a4"><code>62e91bc</code></a> docs: remove n_ Node.js < 6 REPL note from README (<a href="https://redirect.github.com/lodash/lodash/issues/6165">#6165</a>)</li> <li><a href="https://github.com/lodash/lodash/commit/59be2de61f8aa9461c7856533b51d31b7d8babc4"><code>59be2de</code></a> release(minor): bump to 4.18.0 (<a href="https://redirect.github.com/lodash/lodash/issues/6161">#6161</a>)</li> <li><a href="https://github.com/lodash/lodash/commit/af634573030f979194871da7c68f79420992f53d"><code>af63457</code></a> fix: broken tests for _.template 879aaa9</li> <li><a href="https://github.com/lodash/lodash/commit/1073a7693e1727e0cf3641e5f71f75ddcf8de7c0"><code>1073a76</code></a> fix: linting issues</li> <li><a href="https://github.com/lodash/lodash/commit/879aaa93132d78c2f8d20c60279da9f8b21576d6"><code>879aaa9</code></a> fix: validate imports keys in _.template</li> <li><a href="https://github.com/lodash/lodash/commit/fe8d32eda854377349a4f922ab7655c8e5df9a0b"><code>fe8d32e</code></a> fix: block prototype pollution in baseUnset via constructor/prototype traversal</li> <li><a href="https://github.com/lodash/lodash/commit/18ba0a32f42fd02117f096b032f89c984173462d"><code>18ba0a3</code></a> refactor(fromPairs): use baseAssignValue for consistent assignment (<a href="https://redirect.github.com/lodash/lodash/issues/6153">#6153</a>)</li> <li><a href="https://github.com/lodash/lodash/commit/b8190803d48d60b8c80ad45d39125f32fa618cb2"><code>b819080</code></a> ci: add dist sync validation workflow (<a href="https://redirect.github.com/lodash/lodash/issues/6137">#6137</a>)</li> <li>Additional commits viewable in <a href="https://github.com/lodash/lodash/compare/4.17.21...4.18.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/coder/coder/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
0bb09935bc |
feat: add computer-use provider selection for AI agents (#24772)
Adds a deployment-wide setting to select the computer-use provider (Anthropic or OpenAI) for AI agents, plus the OpenAI computer-use runner needed to honor that selection. The setting is stored in `site_configs` under `agents_computer_use_provider`, defaults to Anthropic when unset, and is exposed via experimental GET/PUT endpoints under `/api/experimental/chats/config/computer-use-provider`. The chatd computer-use tool now dispatches to either `runAnthropicComputerUse` or `runOpenAIComputerUse` based on the resolved provider, with provider-specific result metadata for OpenAI screenshots. Frontend adds a provider dropdown to the Agents Experiments settings page nested under the virtual desktop toggle, with disabled state handling while virtual desktop is off and skeleton loaders while config queries are in flight. Hugo and Codex review follow-up: - Uses shared provider validation and clearer computer-use constant names. - Removes stale OpenAI pending-safety-checks commentary. - Documents why provider result metadata is needed for OpenAI screenshots. - Keeps the computer-use subagent visible when provider credentials are missing, then returns a clear spawn-time configuration error. - Uses OpenAI's recommended 1600x900 screenshot geometry to preserve the native 16:9 aspect ratio. - Moves OpenAI-specific computer-use helpers into `coderd/x/chatd/chatopenai/computeruse` after rebasing onto the provider package refactor in `main`. - Converts OpenAI pixel scroll deltas to Coder desktop wheel-click amounts. - Preserves OpenAI pointer modifiers with key down/up desktop actions and rejects unsupported non-left double-click buttons explicitly. - Maps OpenAI back/forward side-button clicks to browser navigation key actions. - Defaults omitted OpenAI click buttons to left-click. - Retries mouse release cleanup if the final OpenAI drag release fails. - Keeps computer-use subagent availability messages stable when provider config cannot be loaded, while logging the backend error. - Releases remaining OpenAI modifier keys if a synthetic key-up cleanup action fails. - Updates Storybook interaction stories so provider snapshots show the selected final provider. > Mux updated this PR description on behalf of Mike. |
||
|
|
1ecdad689b |
fix(site/src/pages/AgentsPage): restore sticky user message pinning after react-infinite-scroll-component refactor (#24937)
Restores the sticky user message pinning behavior in the Agents chat that regressed after #24687 swapped the chat scroll container for `react-infinite-scroll-component`. ## Root cause `react-infinite-scroll-component` renders two wrapper divs between the `.overflow-y-auto` scroller and the rendered messages, and its inner wrapper hard-codes `overflow: auto` in its inline style. With the new layout, `position: sticky` on a user message resolved against that inner wrapper rather than the real scroller, so the message scrolled out with its sentinel and the existing fade/clip overlay never engaged. ## Fix Force both InfiniteScroll wrappers to `display: contents` so they no longer participate in layout. The user message's nearest scrolling ancestor is once again the `.overflow-y-auto` element, and `position: sticky` anchors to the scroll container as it did before #24687. The outer wrapper is reached via the Tailwind arbitrary selector `[&>[class$=outerdiv]]:contents` because the library only exposes `style` for the inner wrapper. The inverse infinite-scroll behavior is preserved: the scroller itself stays `flex-col-reverse`, so it remains bottom-anchored and the library's load-more sentinel still lands at the visual top of the content stack. Also drops the dead `overflow-y-auto` class on the floating scroll-to-bottom button wrapper noted in the bug report. ## Test coverage Adds `StickyUserMessagePinsOnScroll` to `AgentChatPageView.stories.tsx`. With a 40-message conversation it walks the user-message sentinels in reverse DOM order to find the one currently pinned (the latest sentinel above the scroller's top edge) and asserts the matching sticky container is anchored within a few pixels of that edge. Without the fix the container ends up hundreds of pixels above the scroller because `position: sticky` silently no-ops. The existing structural `StickyUserMessageStructure` story in `ConversationTimeline.stories.tsx` continues to pass unchanged. <details> <summary>Verification</summary> ```sh pnpm exec tsc -p . # 0 errors pnpm run lint:check # passes pnpm exec vitest run --project=unit # 2303 passed pnpm exec vitest run --project=storybook \ src/pages/AgentsPage/AgentChatPage.stories.tsx \ src/pages/AgentsPage/AgentChatPageView.stories.tsx \ src/pages/AgentsPage/components/ChatConversation/ConversationTimeline.stories.tsx # 90 passed ``` Confirmed the new story fails on `main` (sticky container at the sentinel's position instead of the scroller top) and passes with the fix applied. </details> --- Generated by Coder Agents. |
||
|
|
162acaf8bf |
feat: update UsersPage role editing to match new designs (#24857)
|
||
|
|
f6eccbab23 |
feat(site/src): add ports submenu to WorkspacePill in agents chat (#24887)
Adds a **Ports (n) >** submenu item to the `WorkspacePill` dropdown shown in the `/agents` chat UI when a workspace is attached, sitting alongside VS Code, Terminal, and other app items. The submenu shows a **Listening Ports** section with clickable port links that open in a new tab, a **Shared Ports** section with sharing-level icons when any ports are shared, and a **Manage sharing** footer link to the workspace detail page. Port data is fetched on a 5s polling interval while the dropdown is open and only when the agent is connected. The trigger is disabled when the workspace is not running. Also adds `DropdownMenuSub`, `DropdownMenuSubTrigger`, and `DropdownMenuSubContent` to the shared `DropdownMenu` component for use here and future consumers.  <details> <summary>Implementation notes</summary> - `host` for port-forward URL construction comes from `useProxy().proxy.preferredWildcardHostname`, the same source used by `PortForwardButton` on the workspace detail page. - Port queries are gated on `isOpen && agent.status === "connected"` so no requests fire when the dropdown is closed or the agent is disconnected. - Shared ports that overlap with listening ports are deduplicated: they only appear in the Shared section. - Port sharing controls (create/update/delete) are intentionally excluded to keep the agents toolbar lightweight; the "Manage sharing" link surfaces the workspace page for that. - The port count badge on the trigger (`Ports (n)`) uses the raw listening-port count, matching the existing `PortForwardButton` behavior on the workspace detail page. </details> > Generated by [Coder Agent](https://coder.com) |
||
|
|
c16034d127 |
fix(site/src/pages/AgentsPage/components): match chat input font size to message bubbles (#24928)
The `/agents` chat composer rendered user input at 15px, but once a message was sent the user message bubble displays content at 13px (via `MessageContent` in `ChatElements/Message.tsx`). The size jump made what you typed not match what got displayed. Sets the `ChatMessageInput` className inside `AgentChatInput` to `text-[13px] leading-relaxed` so the composer matches the rendered user message. <sub>This PR was opened by a Coder agent on behalf of @kylecarbs.</sub> |
||
|
|
69610cca75 |
feat(site/src): add Known Model autocomplete and frontend defaults (#24842)
Replaces the blank Model Identifier free-text input on the **Add Model** page with provider-scoped Known Model autocomplete and frontend-only metadata defaults for native OpenAI and Anthropic providers. Selecting a Known Model, or typing an exact canonical identifier and blurring the field, prefills `contextLimit`, the appropriate max-output-tokens field, and flat base pricing in the existing form. Edit mode, duplicate mode, and unsupported providers preserve the existing plain `Input` behavior and submit payload byte-for-byte. The catalog is curated TypeScript records sourced from `models.dev`, scoped initially to 6 OpenAI and 5 Anthropic models in declared display order. The pure `applyKnownModelDefaults` helper only writes a field when its current value still equals the form's initial value (or was last applied by Known Model defaulting in this form session, tracked cumulatively across selections). It never sets `compressionThreshold` or any reasoning/thinking fields, ignores tiered pricing, and never writes to the `model` field (canonicalization is the caller's responsibility). This PR also makes two narrow, additive changes outside the panel directory: - `site/src/components/Autocomplete/Autocomplete.tsx` gains optional `triggerAriaInvalid`, `triggerAriaDescribedBy`, and `onEscapeKeyDown` props so the new catalog branch can preserve `aria-invalid` / `aria-describedby` parity with the plain input and observe Escape close intent reliably across the Radix portal. Existing `Autocomplete` consumers are unaffected; `stopPropagation` is gated on `onEscapeKeyDown` being provided. - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/modelConfigFormLogic.ts` exports `deepGet` / `deepSet` so the defaulting helper can reuse them instead of re-implementing the same path traversal. No backend, API, SDK, or DB changes. No edits to `ModelsSection.tsx`, `ModelConfigFields.tsx`, `pricingFields.ts`, or `providerPolicyDefaults.ts`. ## Validation - 37 colocated unit tests across `knownModels/` (catalog, search, exact-canonical lookup, exact-alias lookup, badge, defaulting helper). - 134 unit tests across the full ChatModelAdminPanel directory pass. - 50 Storybook play tests on `ChatModelAdminPanel.stories.tsx` pass, including 17 DEREM-traceable interaction tests covering each plan-listed and review-driven scenario (open-no-error, Escape cancellation, sequential selection, double-apply guard, blur-canonical, alias cancellation, provider-change reset, ARIA parity, no-options copy, off-catalog substring commit, stale-cost-field, off-catalog interleaving, chain tracking, keyboard selection, clearable-disabled, off-catalog punctuation variant). - `tsc -p .` passes. ## Dogfooding Storybook was run locally and the user-facing flows were exercised end-to-end via `agent-browser`, capturing screenshots for: 1. OpenAI happy path (selection → defaults applied note → populated fields). 2. Anthropic happy path (selection → populated fields, reasoning/thinking blank). 3. Unsupported provider fallback (Google plain input, no popover). 4. OpenAI suggestion popover at empty focus (declared catalog order, context badges). 5. OpenAI search filter (typing `5.4` filters to GPT-5.4 / 5.4 mini / 5.4 nano). 6. Edit mode plain input (autocomplete correctly gated to add mode only). 7. DEREM-3: empty popover open on Add Model — no premature `Model ID is required.` error. 8. DEREM-1: autocomplete trigger `aria-invalid="true"` and `aria-describedby` matching the rendered error element. 9. DEREM-6: exact `No matching known models. You can still use this identifier.` copy. --- <details> <summary>📋 Implementation Plan</summary> # Plan: Known Model autocomplete and frontend-only defaults for Chat Model Admin ## Goal Improve the admin Add Model onboarding flow by replacing the blank Model Identifier experience with provider-scoped Known Model discovery suggestions for native OpenAI and Anthropic providers. Selecting a Known Model, or typing an exact canonical Known Model identifier and blurring the field, should prefill safe objective model metadata in the existing form without changing backend APIs, database schema, or runtime behavior. The primary UX goal is discovery for admins who do not know exact provider model identifiers or metadata. Typing convenience is a secondary benefit. ## Evidence and current code facts - The current Model Identifier field is a plain free-text `Input` in `site/src/pages/AgentsPage/components/ChatModelAdminPanel/ModelForm.tsx`. It submits as `model` and is only validated as a non-empty string. - The provider selector is disabled in edit and duplicate modes. In add mode, `ModelsSection.tsx` keys the form by provider, so provider changes remount `ModelForm`. - The shared `site/src/components/Autocomplete/Autocomplete.tsx` primitive already supports free-text input with suggestions and is the right UI primitive for this feature. - `modelConfigFormLogic.ts` owns form initialization via `buildInitialModelFormValues(...)`, and `modelConfigFormLogic.test.ts` already covers this pure logic area. - No frontend or backend Known Model catalog exists today. - The database has a non-unique `(provider, model)` index, not a uniqueness constraint. Multiple Model Configs can share the same Provider and Model Identifier, so suggestions must not hide already-configured models. - `models.dev/api.json` has provider-keyed model metadata with canonical IDs, names, limits, pricing, release dates, and `last_updated` values. The Phase 1 catalog should copy a curated subset into TypeScript records, not fetch at runtime. ## Domain language Use these terms consistently in code, tests, docs, and review discussion: - **Provider**: configured external AI service such as native `openai` or `anthropic`. - **Model Config**: persisted admin-defined config row used by Coder chat runtime. - **Model Identifier**: exact provider API string submitted as `model`, such as `gpt-5.5`. - **Known Model**: curated frontend catalog entry with advisory metadata for one canonical Model Identifier. - **Model Catalog**: checked-in frontend-only list of Known Models. - **Off-catalog Model Identifier**: user-entered Model Identifier that does not match any Known Model and remains valid. - **Default application**: copying advisory Known Model metadata into a draft add-mode Model Config form. ## Resolved design decisions ### UX scope - Implement this on the Add Model page/form only. - Do not add provider success popups, provider-side calls to action, or new deep-link behavior in this pass. - Use `Autocomplete` only when all are true: - form mode is add; - selected Provider is native `openai` or native `anthropic`; - that Provider has Known Models. - Edit mode, duplicate mode, and unsupported providers keep the existing free-text input behavior. ### Suggestion behavior - Suggestions open on focus only when the Model Identifier field is empty. - Once the field has text, suggestions open while typing or interacting with the autocomplete. - Empty unsupported-provider catalogs degrade silently to the existing plain input behavior. - When a supported provider has zero matches for a non-empty query, show a non-blocking empty state such as: `No matching known models. You can still use this identifier.` - Suggestion rows show: - display name; - canonical Model Identifier; - context-window badge, for example `1.05M context`. - Format context badges with a deterministic helper covered by tests, for example `200K context`, `400K context`, and `1.05M context`. - Do not show pricing, recommendations, capability tags, or large-context caveats in suggestion rows. - Keep catalog display order as product ordering. Do not show a visible `Recommended` badge. ### Canonical IDs and aliases - Selecting a Known Model always writes its canonical Model Identifier into the form. - Use non-date latest aliases as canonical onboarding IDs when the provider exposes them, such as `gpt-5.5` or `claude-sonnet-4-6`. - Date-pinned IDs may be aliases for search, but selecting a Known Model writes the non-date canonical ID. - Typing aliases filters suggestions but does not rewrite the field and does not apply defaults by itself. - Search over canonical ID, display name, and explicit aliases. - Search is case-insensitive and normalizes spaces, hyphens, underscores, and dots before substring matching. - Aliases are objective name or identifier variants only. Do not include editorial intent tags such as `best`, `cheap`, `fast`, `coding`, or `reasoning`. - Do not implement typo-tolerant fuzzy search in Phase 1. ### Default application rules - Default application only runs in add mode. - Explicit Known Model selection applies defaults immediately. - Exact typed or pasted canonical Model Identifier applies defaults on blur, not on every keystroke. This avoids prematurely applying `gpt-5.5` while the admin is typing `gpt-5.5-pro`. - Defaults fill only target fields whose current values still equal this form session's initial values. - Do not use Formik touched state as the source of truth for safety. - Do not implement field-level provenance tracking in Phase 1. - Capture an immutable `initialValuesRef` at `ModelForm` mount/remount and compare against that snapshot for safe default application. Do not compare against a live Formik reference that can drift. - Do not reapply repeatedly for the same provider/model pair in a single form session. - The defaulting helper must return both the next values and the list of applied form paths: ```ts interface ApplyKnownModelDefaultsResult { values: ModelFormValues; appliedFields: readonly string[]; } ``` - Treat Model Identifier canonicalization separately from metadata default application. `appliedFields` tracks populated metadata/form paths only, not the `model` field change caused by selecting a Known Model. - Show an inline note near Model Identifier only when `appliedFields.length > 0`, such as: `Defaults applied from GPT-5.5. Review and adjust before saving.` - Do not show a note for off-catalog identifiers, no-op Known Model selections, or selections that only canonicalize the Model Identifier. ### Initial Model Catalog Use curated TypeScript records with source metadata copied from models.dev. Do not check in the full `models.dev/api.json` snapshot and do not add a generator in Phase 1. Add a file-level comment that array order controls suggestion order so future cleanup does not accidentally change onboarding UX. Initial native OpenAI entries, in display order: 1. `gpt-5.5` 2. `gpt-5.5-pro` 3. `gpt-5.4` 4. `gpt-5.4-mini` 5. `gpt-5.4-nano` 6. `gpt-5.3-codex` Initial native Anthropic entries, in display order: 1. `claude-opus-4-7` 2. `claude-opus-4-6` 3. `claude-sonnet-4-6` 4. `claude-haiku-4-5` 5. `claude-sonnet-4-5` Do not include GPT-4.x, pre-5.3 GPT models, or Claude models older than 4.5 in this onboarding catalog unless product intentionally expands scope. Each Known Model record should include: - provider; - canonical Model Identifier; - display name; - aliases; - source metadata, including `sourceName: "models.dev"`, `sourceRetrievedAt`, and the model record's `last_updated` value; - `contextLimit` from `limit.context`; - `maxOutputTokens` from `limit.output`; - flat base pricing from supported `cost.*` fields. ### Field mapping - `models.dev.limit.context` maps to `contextLimit`. - `models.dev.limit.output` maps to the selected provider's exact max-output-tokens field when one exists, otherwise to generic `config.maxOutputTokens`. - Never fill both generic and provider-specific output-token fields for the same Known Model. - Ignore `models.dev.limit.input` unless the current form schema already exposes an exact matching field. - Map only flat base pricing fields that the existing form can persist: - `cost.input`; - `cost.output`; - `cost.cache_read`; - `cost.cache_write`. - Reuse `pricingFields.ts` or the existing pricing field descriptors instead of hard-coding cost form paths. - If `cache_read` or `cache_write` is absent from a models.dev entry, leave the corresponding field at its initial value and do not include it in `appliedFields`. - Ignore tiered pricing such as `context_over_200k` in Phase 1. Add a code comment in the adapter explaining that Coder currently persists flat pricing only. - Do not show a UI caveat for tiered pricing in Phase 1. - Do not set `compressionThreshold` from Known Models. - Do not prefill provider-specific reasoning or thinking fields in Phase 1, including: - OpenAI `reasoningEffort` and `reasoningSummary`; - Anthropic `sendReasoning`, `effort`, and `thinking.budgetTokens`. ## Proposed file structure Use `knownModels/` rather than `modelDefaults/` because the data powers both discovery and default application. New files: - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/knownModels/types.ts` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/knownModels/openai.ts` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/knownModels/anthropic.ts` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/knownModels/index.ts` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/knownModels/applyKnownModelDefaults.ts` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/ModelIdentifierField.tsx` Existing files to modify: - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/ModelForm.tsx` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/modelConfigFormLogic.ts` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/modelConfigFormLogic.test.ts` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/ChatModelAdminPanel.stories.tsx` Documentation artifacts to keep in sync if implementing from a clean workspace: - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/CONTEXT.md` - `site/src/pages/AgentsPage/components/ChatModelAdminPanel/docs/adr/0001-frontend-known-model-catalog.md` ## Implementation plan ### Phase 1: Red, define pure behavior first 1. Add tests in `modelConfigFormLogic.test.ts` or a colocated `knownModels` test file for: - provider-scoped lookup; - normalized alias search; - canonicalization on selection; - unknown model leaves values unchanged; - exact canonical ID lookup; - safe initial-value patching; - `appliedFields` output that excludes Model Identifier canonicalization; - tiered pricing ignored; - missing cache pricing fields left at initial values; - compression threshold not populated; - reasoning/thinking fields not populated; - output-token mapping prefers provider-specific exact field and never fills both; - context badge formatting. 2. Add lifecycle tests where feasible: - provider change in add mode remounts the form and resets `initialValuesRef`, `lastAppliedProviderModelRef`, and inline default-feedback state. 3. Add edge-case tests for event and reapplication semantics: - selecting `gpt-5.5` then blurring does not apply defaults a second time; - typing `gpt-5.5-pro` then blurring applies only pro defaults, never prefix `gpt-5.5` defaults; - selecting one Known Model, then another, does not overwrite fields already populated by the first selection because they no longer match initial values; - typing an alias then blurring does not canonicalize or apply defaults; - an Off-catalog value for a supported provider remains valid and preserves existing required-field validation behavior. 4. Add tests for the initial OpenAI and Anthropic catalog entries to ensure IDs, source metadata, and display order remain intentional. Quality gate: targeted unit tests fail for missing implementation. ### Phase 2: Green, add Known Model catalog and pure helpers 1. Add `knownModels/types.ts` with readonly types for catalog records and source metadata. 2. Add `knownModels/openai.ts` and `knownModels/anthropic.ts` with the initial catalog entries and file-level refresh comments. 3. Add lookup and search helpers in `knownModels/index.ts`. 4. Add `applyKnownModelDefaults(...)` as a pure helper that accepts: - current form values; - initial form values; - selected provider; - Known Model; - provider field mapping helpers if needed. 5. Ensure assertions or explicit guards make impossible cases fail fast during tests, for example missing provider, missing canonical ID, or invalid source metadata. Quality gate: targeted unit tests pass. ### Phase 3: Wire Model Identifier autocomplete UX Autocomplete integration constraints: - Control the shared `Autocomplete` with `inputValue` for the free-text Model Identifier string and `value: KnownModel | null` for selected suggestions. - Pass pre-filtered Known Model options to `Autocomplete`; do not rely on `cmdk` internal filtering once `inputValue` is controlled. - Clear the selected `KnownModel | null` value whenever the admin types arbitrary text that no longer corresponds to the selected Known Model. - Guard selection and blur event ordering so selecting a row does not cause the input blur handler to apply defaults a second time. - Run exact-match blur behavior only when focus leaves the whole field/combobox, not when focus moves into the suggestion list. - Store the last-applied provider/model pair in form-local state or a ref so add-mode provider remounts reset it naturally. - Preserve the existing field contract: label, tooltip/help text, `name`, validation error rendering, `aria-invalid`, `aria-describedby`, disabled state, Formik blur/touched behavior, and submitted request shape. 1. Add `ModelIdentifierField.tsx`. 2. Preserve existing plain `Input` markup for edit mode, duplicate mode, and unsupported providers. 3. For add-mode supported providers, render `Autocomplete` with: - controlled free-text value tied to Formik's `model` field; - custom row rendering with display name, canonical ID, and context badge; - open-on-empty-focus behavior; - non-blocking no-match copy for non-empty supported-provider queries; - keyboard support inherited from `Autocomplete`. 4. On Known Model selection: - set the form's `model` field to the canonical ID; - apply defaults immediately; - show inline feedback only if fields changed. 5. On blur: - if the final field value exactly equals a Known Model canonical ID, apply defaults safely; - do not auto-apply aliases on blur. 6. Track the last applied provider/model pair in the form session to avoid repeated reapplication. Quality gate: Storybook stories compile and the main interaction paths work locally. ### Phase 4: Storybook and UX coverage Add or extend `ChatModelAdminPanel.stories.tsx` with three user-visible flows: 1. OpenAI happy path: - open Add Model for OpenAI; - focus empty Model Identifier; - suggestions appear; - select `GPT-5.5`; - assert `gpt-5.5` is in the input; - assert inline defaults note appears; - assert visible context limit and max output fields populate; - expand the pricing section before asserting pricing fields, or keep detailed pricing assertions in unit tests if the Storybook UI would become brittle. 2. Anthropic happy path: - open Add Model for Anthropic; - select `Claude Opus 4.7`; - assert canonical ID, visible context limit, and output field populate; - expand the pricing section before asserting pricing fields, or keep detailed pricing assertions in unit tests if the Storybook UI would become brittle; - assert Anthropic reasoning/thinking fields remain blank. 3. Unsupported provider fallback: - open Add Model for Azure or openai-compat; - assert Model Identifier behaves as plain free text and no suggestion popover appears. If practical, include one keyboard selection path in Storybook or manual dogfooding: - tab/focus Model Identifier; - arrow to a suggestion; - press Enter; - verify canonicalization and defaults. Quality gate: Storybook interaction tests pass for touched stories. ### Phase 5: Refactor and documentation pass 1. Keep catalog data isolated from UI rendering code. 2. Keep provider field mapping in one helper so future Google, Bedrock, OpenRouter, or Azure support does not require editing defaulting logic everywhere. 3. Ensure comments explain why tiered pricing and reasoning defaults are excluded. 4. Update `CONTEXT.md` and ADR if implementation changes any design decision captured there. 5. Run formatting and linting for touched frontend files. Quality gate: no broad refactors beyond this feature's files. ## Validation commands Use the repo's existing frontend validation commands, scoped where possible: - `pnpm -C site test <targeted ChatModelAdminPanel pattern>` - `pnpm -C site test <targeted modelConfigFormLogic pattern>` - `pnpm -C site test:storybook` - `pnpm -C site lint:types` - `pnpm -C site check` If command names differ in this workspace, inspect `site/package.json` and use the closest existing targeted commands. Do not claim success until the actual commands run and pass. ## Dogfooding plan Primary dogfood path is Storybook because this is a form-level UI improvement using mocked admin data. 1. Run Storybook for the Chat Model Admin Panel. 2. Record a short video showing: - OpenAI Add Model, focus empty Model Identifier, suggestions appear, select `GPT-5.5`, defaults note appears, fields populate; - Anthropic Add Model, select `Claude Opus 4.7`, fields populate, reasoning/thinking fields remain blank; - unsupported provider Add Model, Model Identifier stays free text with no suggestions. 3. Capture screenshots for the final state of each flow and attach them for review. 4. If implementation touches routing, `ModelsSection` URL state, or provider pages, also run the local UI and record `/agents/settings/models?newModel=openai` exercising the same OpenAI flow. ## Acceptance criteria - Add-mode native OpenAI and Anthropic Model Identifier fields provide discovery suggestions from the curated Known Model catalog. - Suggestions appear on empty focus and filter as the admin types. - Unsupported providers, edit mode, and duplicate mode preserve the current plain input behavior. - Selecting a Known Model canonicalizes the field and safely applies objective defaults. - Exact typed/pasted canonical IDs apply defaults on blur. - Off-catalog Model Identifiers remain valid and non-blocking. - Display name, context limit, output-token field, and flat pricing fill only when target fields still match initial values. - Compression threshold, tiered pricing, and provider-specific reasoning/thinking fields are not populated by Phase 1 defaults. - Inline feedback appears only when default application changed at least one field. - Unit tests, Storybook coverage, typecheck, formatting, and lint/check commands pass. - Dogfooding includes screenshots and video recordings. ## Risks and mitigations - **Catalog staleness**: models change frequently. Mitigate with source metadata and clear file-level refresh comments. - **Provider namespace mistakes**: Azure, Bedrock, OpenRouter, and openai-compat use different identifier semantics. Mitigate by supporting only native OpenAI and Anthropic in Phase 1. - **Auto-fill surprise**: defaults can feel magical. Mitigate with selection-first UX, blur-only exact-match behavior, initial-value safety checks, and inline feedback. - **Pricing inaccuracy for tiered models**: current form persists flat prices only. Mitigate by mapping base flat prices only and documenting tiered pricing as out of scope. - **Reasoning option overreach**: generic source metadata does not map cleanly to provider-specific controls. Mitigate by leaving reasoning/thinking fields blank in Phase 1. - **Overbroad UI changes**: replacing an input can affect accessibility and keyboard users. Mitigate by using the shared Autocomplete primitive, preserving plain Input fallback, and dogfooding keyboard selection. </details> --- _Generated with [`mux`](https://github.com/coder/mux) • Model: `anthropic:claude-opus-4-7` • Thinking: `max`_ |
||
|
|
6149fc3619 |
feat(site): add colorblind-friendly themes for protan/deuter and tritan (#24672)
This is part 1 to lay the foundation for the theme changes. Part 2 which adds the UI implementation is in this PR, https://github.com/coder/coder/pull/24680 ----------------- Adds four sitewide colorblind-friendly theme palettes alongside the existing light and dark themes. The palettes retune the red/green and blue/yellow semantic axes so success/error, warning, and diff additions/deletions remain distinguishable under the most common color vision deficiencies. | Preference ID | Purpose | |---|---| | `dark-protan-deuter` / `light-protan-deuter` | Protanopia & deuteranopia (red/green). Success and additions shift to sky-blue; destructive and deletions shift to vermilion/orange; warning shifts to fuchsia so warning and destructive states do not collapse onto the same hue. | | `dark-tritan` / `light-tritan` | Tritanopia (blue/yellow). Warning shifts from amber to fuchsia; red/green semantic pair is preserved. | The diff panel and every semantic role (`success`, `error`, `warning`, `notice`, `danger`) pick up the new palette automatically because they consume the sitewide CSS variables in `site/src/index.css`. No backend or database change is required: `theme_preference` is already a free-form `text` column. The existing `"dark"`, `"light"`, and `"auto"` preferences are unchanged. This PR ships the palettes and the resolution machinery (`CONCRETE_THEMES`, `resolveThemeName`, `isConcreteThemeName`, and the ThemeProvider/AgentEmbedPage plumbing). It intentionally does **not** add UI to select the new themes; the follow-up PR #24680 adds a Theme mode dropdown (Sync with system / Single theme) that exposes every concrete theme, including the four added here. Produced with Coder Agents assistance. <details> <summary>Implementation plan and decision log</summary> Full plan (investigation, file layout, TDD phases, open risks) is attached to the chat that produced this PR. Key decisions: - **Sitewide, not agent-scoped.** The diff panel already consumes the sitewide theme via CSS variables. Keeping the change at the user appearance layer also fixes red/green accents in alerts, badges, and build states in one change, and matches how comparable products (e.g. GitHub) ship this feature. - **No backend change.** `codersdk/users.go` already accepts any `theme_preference` string, and `ThemeProvider` now has a shared resolver (`resolveThemeName`) that maps any persisted value to a concrete theme, tolerating unknowns and the legacy `"auto"` value. - **Palette provenance.** The protan/deuter palette is inspired by CVD-safe blue/orange palettes and tuned within the existing Tailwind color scales; the tritan palette keeps red/green semantics intact and shifts warning to fuchsia. This PR does not claim exact Okabe-Ito or WCAG AA derivation without recorded contrast data. - **UI deferred.** Selecting the new themes is gated on the follow-up PR #24680 which replaces the flat theme grid with a Theme mode dropdown. </details> |
||
|
|
033ed0bb82 |
feat: add admin-configurable chat title generation model (#24838)
Adds an admin-configurable deployment-wide setting that controls which
model is used for chat title generation. Admins can pick any enabled
chat model config from the Agents settings page, or leave the setting
unset to keep the existing fast-models-then-chat-model fallback
algorithm.
When a model is selected, both automatic and manual title generation use
only that model, with no silent fallback. When the configured model is
disabled, missing credentials, or otherwise unusable, automatic title
generation skips entirely (best-effort) and manual title regeneration
returns a clear error, so admins notice the misconfiguration instead of
silently routing title traffic through another provider.
## Surface
- New deployment-wide setting stored as a `site_configs` row
(`agents_chat_title_generation_model_override`).
- New experimental endpoint `GET/PUT
/api/experimental/chats/config/model-override/{context}`.
- Frontend: title generation now appears as a third dropdown on the
Agents admin settings page alongside the existing general and explore
context overrides.
## DRY refactors folded in
Title generation is integrated as a third value of the existing
`ChatModelOverrideContext` type alongside `general` and `explore`,
sharing the parameterized HTTP route, SDK methods, generated types, and
frontend API plumbing rather than introducing a parallel surface. The
`Agent` prefix was dropped from the type and route since title
generation is not a delegated agent.
The chatd model-override resolver is also shared.
`resolveConfiguredModelOverride` now takes a `failureMode` parameter:
- Subagent overrides use soft failure: misconfigured overrides are
logged and the parent model is used.
- Title generation uses hard failure: misconfigured overrides return an
explicit error so manual title regeneration surfaces the
misconfiguration and automatic title generation skips instead of
silently falling back.
> Mux is acting on Mike's behalf.
|
||
|
|
d889ba1842 |
feat: add user_oidc auth type for MCP servers (#24793)
Adds a 5th MCP server authentication mode, `user_oidc` ("User OIDC
Identity"), that forwards the calling user's OIDC access token from
`user_links.oauth_access_token` to the upstream MCP server as
`Authorization: Bearer <token>`.
The token is read from `user_links` and refreshed transparently via
`oauth2.TokenSource` before each MCP request. No new per-MCP-server
secret storage and no per-user connect/disconnect step.
**Limitation**: only users who logged in via OIDC have a forwardable
token. Users authenticated via password or GitHub will see requests sent
without an `Authorization` header, and the upstream MCP server is
expected to respond with 401. A pluggable token source (e.g. CLI-minted
E2E tokens) is left as future work.
<details>
<summary>Implementation notes</summary>
- Schema: new
`coderd/database/migrations/000481_mcp_user_oidc_auth.{up,down}.sql`
relaxes the `mcp_server_configs.auth_type` CHECK constraint to include
`user_oidc`. Down migration deletes affected rows before restoring the
old constraint.
- SDK validation: `codersdk/mcp.go` extends `oneof` for
`CreateMCPServerConfigRequest` and `UpdateMCPServerConfigRequest`.
- Handler: `coderd/mcp.go` adds `case "user_oidc":` to the
field-clearing switch on update. The existing list and detail handlers
already report `auth_connected = true` for any non-`oauth2` auth type.
- Header construction: `coderd/x/chatd/mcpclient/mcpclient.go`
introduces a `UserOIDCTokenSource` interface and adds the `user_oidc`
case to `buildAuthHeaders`. `ConnectAll` / `connectOne` /
`buildAuthHeaders` gain `userID uuid.UUID, oidcSrc UserOIDCTokenSource`
parameters.
- Wiring: `coderd/x/chatd/chatd.go` adds `OIDCTokenSource` to `Config` /
`Server` and passes `chat.OwnerID` plus the source through `ConnectAll`.
`coderd/coderd.go` constructs the source next to the `chatd.New` call
when `options.OIDCConfig` is non-nil.
- Token source: `oidcMCPTokenSource` lives in `coderd/mcp.go`. It reads
the user's OIDC link, refreshes via `oauth2.TokenSource`, and writes the
refreshed token back to `user_links`. Logic is duplicated from
`provisionerdserver.ObtainOIDCAccessToken` to avoid an MCP ->
provisionerdserver dependency. The two copies must be kept in sync; a
comment on `oidcMCPTokenSource` records this.
- Frontend: `MCPServerAdminPanel.tsx` adds the new dropdown option, an
explanatory helper block (no admin-configurable fields), and a Storybook
story (`CreateServerUserOIDC`).
- Tests:
- `mcpclient_test.go`: `TestConnectAll_UserOIDCAuth`,
`TestConnectAll_UserOIDCAuth_NoLink`,
`TestConnectAll_UserOIDCAuth_NilSource`. All existing tests updated for
the new signature.
- `mcp_test.go`: extends `TestMCPServerConfigsAuthConnected` to assert
`auth_connected=true` for `user_oidc`; adds
`TestMCPServerConfigsUserOIDCClearsFields` and
`TestMCPServerConfigsUserOIDCDirect`.
- Docs: `docs/ai-coder/agents/platform-controls/mcp-servers.md`
describes the new mode and its OIDC-only limitation.
</details>
This PR was created by Coder Agents.
---------
Co-authored-by: Coder Agents <agents@coder.com>
|
||
|
|
453a39be97 |
feat: show ui for individual failed scripts (#24506)
Previously we only showed an error when the startup script failed. Now: - Add a warning icon to each failed script. - Sort the failed script tabs first. - Modify agent health messages to pull the errors notices from the new location instead of from the single agent lifecycle enum. This means errors are shown for each script and the count is accurate. |
||
|
|
67fc169c06 |
fix(site): remove "Tasks on Docker" as featured template (#24908)
Removes "Tasks on Docker" from the featured/prioritized template lists in the templates empty state and the starter templates gallery. Docker remains as the primary featured starter template. Fixes https://linear.app/codercom/issue/DEVREL-20 > Generated with [Coder Agents](https://coder.com/agents) |
||
|
|
8709d42fe0 |
feat(site): add loading <Spinner /> to AgentRow (#24825)
Adds a `<Spinner />` next to the log count during agent startup. Also, there was some complexity in sizing the spinner because `<Badge />` automatically sizes any `svg`s it contains to `size-icon-xs`. In order to maintain the `svg` sizing inside existing Badges across the site, this introduces a new `svgSize` prop that defaults to `xs`. Existing consumers will still get `[&_svg]:size-icon-xs` regardless of the Badge size, but can now be overridden to `sm` or `lg` (there is no `md`). Also also fixes a tiny spacing issue with the warning triangle 🕵️♂️ <img width="1203" height="624" alt="Screenshot 2026-04-29 at 3 24 35 PM" src="https://github.com/user-attachments/assets/e4fc4a3a-e88f-4253-a697-195f8a347230" /> |
||
|
|
fa227be74a |
feat: de-mui <AccountForm /> (#24859)
This pull-request takes our `<AccountForm />`'s dependencies and removes the reliance on `@mui/Material/TextField` for the `<AccountForm />`. | Old | New | | --- | --- | | <img width="521" height="392" alt="account_settings_old" src="https://github.com/user-attachments/assets/3dc4e2d9-7176-438c-a522-5c55d3ad122a" /> | <img width="520" height="447" alt="account_settings_new" src="https://github.com/user-attachments/assets/cb9f2da8-d848-4b3e-923a-b212f73e6a1c" /> | |
||
|
|
efda5c2c12 |
feat: disable Git controls when Git is not active (#24673)
closes CODAGT-148 In chats with no Git context (no repositories known to the watcher, no PR tab, no remote diff), the refresh button fires an "Unable to refresh git status" toast because the watcher WebSocket never opens. Derive `isGitActive = repositories.size > 0 || showRemoteTab` in `GitPanel` and use it to: - Disable the refresh button, unified-diff toggle, and split-diff toggle with a "Git is not set up for this chat" tooltip. - Show a dedicated empty state explaining how to enable Git, replacing the generic "No pushed changes yet" copy. Chats with at least one repository or a PR tab are unaffected; all controls remain enabled and behave as before. Adds a `GitNotActive` Storybook story with play-function assertions covering the disabled controls and empty-state copy. |
||
|
|
a799356bc3 |
feat(site/src/pages/AgentsPage/components/Sidebar): animate generated rename title (#24860)
Animates the generated rename title returned by `onPropose` into the rename input character-by-character, replacing the previous instant set. Uses a local `requestAnimationFrame` typing loop (~80 chars/sec) with `Intl.Segmenter` for grapheme-safe splitting, gated by the existing `sessionRef` race protection so stale generate responses and stale animation frames cannot overwrite the active dialog. The animation is canceled on dialog close, cancel, submit, chat change, generate retry, manual input edits, and unmount. Save is disabled while the generated title is still typing so partial values cannot be saved. Storybook coverage updated to assert an intermediate animated prefix, disabled-while-typing button states, and that errors do not start an animation. |
||
|
|
7fe86429b7 |
chore: bump the react group across 1 directory with 3 updates (#24865)
Bumps the react group with 3 updates in the /site directory: [react](https://github.com/facebook/react/tree/HEAD/packages/react), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) and [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom). Updates `react` from 19.2.2 to 19.2.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/facebook/react/releases">react's releases</a>.</em></p> <blockquote> <h2>19.2.5 (April 8th, 2026)</h2> <h2>React Server Components</h2> <ul> <li>Add more cycle protections (<a href="https://redirect.github.com/facebook/react/pull/36236">#36236</a> by <a href="https://github.com/eps1lon"><code>@eps1lon</code></a> and <a href="https://github.com/unstubbable"><code>@unstubbable</code></a>)</li> </ul> <h2>19.2.4 (January 26th, 2026)</h2> <h2>React Server Components</h2> <ul> <li>Add more DoS mitigations to Server Actions, and harden Server Components (<a href="https://redirect.github.com/facebook/react/pull/35632">#35632</a> by <a href="https://github.com/gnoff"><code>@gnoff</code></a>, <a href="https://github.com/lubieowoce"><code>@lubieowoce</code></a>, <a href="https://github.com/sebmarkbage"><code>@sebmarkbage</code></a>, <a href="https://github.com/unstubbable"><code>@unstubbable</code></a>)</li> </ul> <h2>19.2.3 (December 11th, 2025)</h2> <h2>React Server Components</h2> <ul> <li>Add extra loop protection to React Server Functions (<a href="https://github.com/sebmarkbage"><code>@sebmarkbage</code></a> <a href="https://redirect.github.com/facebook/react/pull/35351">#35351</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/facebook/react/commit/23f4f9f30da9e9af2108c18bb197bae75ab584ea"><code>23f4f9f</code></a> 19.2.5</li> <li><a href="https://github.com/facebook/react/commit/90ab3f89f4824ac763b6f877c6f711200d1338d2"><code>90ab3f8</code></a> Version 19.2.4</li> <li><a href="https://github.com/facebook/react/commit/612e371fb215498edde4c853bd1e0c8e9203808f"><code>612e371</code></a> Version 19.2.3</li> <li>See full diff in <a href="https://github.com/facebook/react/commits/v19.2.5/packages/react">compare view</a></li> </ul> </details> <br /> Updates `@types/react` from 19.2.7 to 19.2.14 <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react">compare view</a></li> </ul> </details> <br /> Updates `react-dom` from 19.2.2 to 19.2.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/facebook/react/releases">react-dom's releases</a>.</em></p> <blockquote> <h2>19.2.5 (April 8th, 2026)</h2> <h2>React Server Components</h2> <ul> <li>Add more cycle protections (<a href="https://redirect.github.com/facebook/react/pull/36236">#36236</a> by <a href="https://github.com/eps1lon"><code>@eps1lon</code></a> and <a href="https://github.com/unstubbable"><code>@unstubbable</code></a>)</li> </ul> <h2>19.2.4 (January 26th, 2026)</h2> <h2>React Server Components</h2> <ul> <li>Add more DoS mitigations to Server Actions, and harden Server Components (<a href="https://redirect.github.com/facebook/react/pull/35632">#35632</a> by <a href="https://github.com/gnoff"><code>@gnoff</code></a>, <a href="https://github.com/lubieowoce"><code>@lubieowoce</code></a>, <a href="https://github.com/sebmarkbage"><code>@sebmarkbage</code></a>, <a href="https://github.com/unstubbable"><code>@unstubbable</code></a>)</li> </ul> <h2>19.2.3 (December 11th, 2025)</h2> <h2>React Server Components</h2> <ul> <li>Add extra loop protection to React Server Functions (<a href="https://github.com/sebmarkbage"><code>@sebmarkbage</code></a> <a href="https://redirect.github.com/facebook/react/pull/35351">#35351</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/facebook/react/commit/23f4f9f30da9e9af2108c18bb197bae75ab584ea"><code>23f4f9f</code></a> 19.2.5</li> <li><a href="https://github.com/facebook/react/commit/90ab3f89f4824ac763b6f877c6f711200d1338d2"><code>90ab3f8</code></a> Version 19.2.4</li> <li><a href="https://github.com/facebook/react/commit/612e371fb215498edde4c853bd1e0c8e9203808f"><code>612e371</code></a> Version 19.2.3</li> <li>See full diff in <a href="https://github.com/facebook/react/commits/v19.2.5/packages/react-dom">compare view</a></li> </ul> </details> <br /> Updates `@types/react` from 19.2.7 to 19.2.14 <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
f17e0e354a |
chore: bump diff from 8.0.3 to 8.0.4 in /site (#24875)
Bumps [diff](https://github.com/kpdecker/jsdiff) from 8.0.3 to 8.0.4. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/kpdecker/jsdiff/blob/master/release-notes.md">diff's changelog</a>.</em></p> <blockquote> <h2>8.0.4</h2> <ul> <li><a href="https://redirect.github.com/kpdecker/jsdiff/pull/667">#667</a> - <strong>fix another bug in <code>diffWords</code> when used with an <code>Intl.Segmenter</code></strong>. If the text to be diffed included a combining mark after a whitespace character (i.e. roughly speaking, an accented space), <code>diffWords</code> would previously crash. Now this case is handled correctly.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/kpdecker/jsdiff/commit/dd2f99497703a1540b2ae406b51c49b74b5fc1a1"><code>dd2f994</code></a> 8.0.4 release (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/678">#678</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/3cc438434db53c5d1c40412b727ea7650f6f145a"><code>3cc4384</code></a> Update docs on releasing to reflect migration to yarn berry (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/677">#677</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/6fc2aa6b7672af08774b50aae00d97b99c5b5715"><code>6fc2aa6</code></a> yarn up '*' && yarn up -R '**' (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/676">#676</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/af7393ac3404565dc8da655c2e7aeeed28c01ff7"><code>af7393a</code></a> yarn up '*' && yarn up -R '**' (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/670">#670</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/4b5d1800370bf29b61a3378fb8086aeb231d3ef7"><code>4b5d180</code></a> Fix another bug in diffWords's "intlSegmenter" mode (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/667">#667</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/10da50c466709e7bd4b192dac96af0af46f8b7bd"><code>10da50c</code></a> yarn up '*' && yarn up -R '**' (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/666">#666</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/8dc164b5d133b8114738927aa90ed6dfcf49d497"><code>8dc164b</code></a> Migrate from Yarn Classic to Yarn Berry (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/662">#662</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/750fbd6472fcdda02d90f8c7d04afa7119953447"><code>750fbd6</code></a> yarn upgrade --latest (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/661">#661</a>)</li> <li><a href="https://github.com/kpdecker/jsdiff/commit/abe2bde240f9fb65d29ebf275fb8fec7d39b1d63"><code>abe2bde</code></a> Add release notes for undocumented releases (<a href="https://redirect.github.com/kpdecker/jsdiff/issues/658">#658</a>)</li> <li>See full diff in <a href="https://github.com/kpdecker/jsdiff/compare/v8.0.3...8.0.4">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
241599750f |
chore: bump @rolldown/plugin-babel from 0.2.2 to 0.2.3 in /site (#24878)
Bumps [@rolldown/plugin-babel](https://github.com/rolldown/plugins/tree/HEAD/packages/babel) from 0.2.2 to 0.2.3. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rolldown/plugins/releases"><code>@rolldown/plugin-babel</code>'s releases</a>.</em></p> <blockquote> <h2>plugin-babel@0.2.3</h2> <p>Please refer to <a href="https://github.com/rolldown/plugins/blob/plugin-babel@0.2.3/packages/babel/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/rolldown/plugins/blob/main/packages/babel/CHANGELOG.md"><code>@rolldown/plugin-babel</code>'s changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted --><a href="https://github.com/rolldown/plugins/compare/plugin-babel@0.2.2...plugin-babel@0.2.3">0.2.3</a> (2026-04-13)<!-- raw HTML omitted --></h2> <h3>Bug Fixes</h3> <ul> <li><strong>babel:</strong> exclude rolldown runtime module by default (<a href="https://redirect.github.com/rolldown/plugins/issues/57">#57</a>) (<a href="https://github.com/rolldown/plugins/commit/d42ec45ded69e93870d1dfc2977ae11f5ab01e01">d42ec45</a>)</li> <li><strong>deps:</strong> update all non-major dependencies (<a href="https://redirect.github.com/rolldown/plugins/issues/35">#35</a>) (<a href="https://github.com/rolldown/plugins/commit/f359c3923b3802e4efa68da6c9e85aec1fda96d3">f359c39</a>)</li> <li><strong>deps:</strong> update all non-major dependencies (<a href="https://redirect.github.com/rolldown/plugins/issues/40">#40</a>) (<a href="https://github.com/rolldown/plugins/commit/1963ed13059fb08caf33ca96739c3b90f5b10099">1963ed1</a>)</li> <li><strong>deps:</strong> update all non-major dependencies (<a href="https://redirect.github.com/rolldown/plugins/issues/49">#49</a>) (<a href="https://github.com/rolldown/plugins/commit/8047e05a978ba7e0544111d8c2deb7ca335af076">8047e05</a>)</li> <li><strong>deps:</strong> update rolldown-related dependencies (<a href="https://redirect.github.com/rolldown/plugins/issues/36">#36</a>) (<a href="https://github.com/rolldown/plugins/commit/b2bf24bd65d23bd051aa2f7b3cdee22ca1d58e2f">b2bf24b</a>)</li> <li><strong>deps:</strong> update rolldown-related dependencies (<a href="https://redirect.github.com/rolldown/plugins/issues/46">#46</a>) (<a href="https://github.com/rolldown/plugins/commit/6b7fcfcc8f0107c0c698ead7d29a65d4ea7c46cd">6b7fcfc</a>)</li> <li><strong>deps:</strong> update rolldown-related dependencies (<a href="https://redirect.github.com/rolldown/plugins/issues/50">#50</a>) (<a href="https://github.com/rolldown/plugins/commit/232515f251da54c60e0e139d655677f62c3868e5">232515f</a>)</li> <li><strong>deps:</strong> update rolldown-related dependencies (<a href="https://redirect.github.com/rolldown/plugins/issues/55">#55</a>) (<a href="https://github.com/rolldown/plugins/commit/c43259004d90b7a0e5eb9b8ede94de3e651f25c1">c432590</a>)</li> </ul> <h3>Miscellaneous Chores</h3> <ul> <li><strong>deps:</strong> update dependency <code>@types/node</code> to v24 (<a href="https://redirect.github.com/rolldown/plugins/issues/38">#38</a>) (<a href="https://github.com/rolldown/plugins/commit/d6b8baaf69d80604a9204e018db6cd4a1e4809ba">d6b8baa</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rolldown/plugins/commit/015e64a267e3de500d3141b017bfacd6d287776c"><code>015e64a</code></a> release: plugin-babel@0.2.3</li> <li><a href="https://github.com/rolldown/plugins/commit/d42ec45ded69e93870d1dfc2977ae11f5ab01e01"><code>d42ec45</code></a> fix(babel): exclude rolldown runtime module by default (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/57">#57</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/c43259004d90b7a0e5eb9b8ede94de3e651f25c1"><code>c432590</code></a> fix(deps): update rolldown-related dependencies (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/55">#55</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/232515f251da54c60e0e139d655677f62c3868e5"><code>232515f</code></a> fix(deps): update rolldown-related dependencies (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/50">#50</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/8047e05a978ba7e0544111d8c2deb7ca335af076"><code>8047e05</code></a> fix(deps): update all non-major dependencies (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/49">#49</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/1963ed13059fb08caf33ca96739c3b90f5b10099"><code>1963ed1</code></a> fix(deps): update all non-major dependencies (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/40">#40</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/6b7fcfcc8f0107c0c698ead7d29a65d4ea7c46cd"><code>6b7fcfc</code></a> fix(deps): update rolldown-related dependencies (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/46">#46</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/d6b8baaf69d80604a9204e018db6cd4a1e4809ba"><code>d6b8baa</code></a> chore(deps): update dependency <code>@types/node</code> to v24 (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/38">#38</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/b2bf24bd65d23bd051aa2f7b3cdee22ca1d58e2f"><code>b2bf24b</code></a> fix(deps): update rolldown-related dependencies (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/36">#36</a>)</li> <li><a href="https://github.com/rolldown/plugins/commit/f359c3923b3802e4efa68da6c9e85aec1fda96d3"><code>f359c39</code></a> fix(deps): update all non-major dependencies (<a href="https://github.com/rolldown/plugins/tree/HEAD/packages/babel/issues/35">#35</a>)</li> <li>See full diff in <a href="https://github.com/rolldown/plugins/commits/plugin-babel@0.2.3/packages/babel">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
53e91fe60c |
chore: bump motion from 12.34.1 to 12.38.0 in /site (#24880)
Bumps [motion](https://github.com/motiondivision/motion) from 12.34.1 to 12.38.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/motiondivision/motion/blob/main/CHANGELOG.md">motion's changelog</a>.</em></p> <blockquote> <h2>[12.38.0] 2026-03-16</h2> <h3>Added</h3> <ul> <li>Added <code>layoutAnchor</code> prop to configure custom anchor point for resolving relative projection boxes.</li> </ul> <h3>Fixed</h3> <ul> <li><code>Reorder</code>: Fix axis switching after window resize.</li> <li><code>Reorder</code>: Fix with virtualised lists.</li> <li><code>AnimatePresence</code>: Ensure children are removed when exit animation matches current values.</li> </ul> <h2>[12.37.0] 2026-03-16</h2> <h3>Added</h3> <ul> <li>Support for hardware accelerating <code>"start"</code> and <code>"end"</code> offsets in <code>scroll</code> and <code>useScroll</code>.</li> <li>Support for <code>oklch</code>, <code>oklab</code>, <code>lab</code>, <code>lch</code>, <code>color</code>, <code>color-mix</code>, <code>light-dark</code> color types.</li> </ul> <h3>Fixed</h3> <ul> <li>Fix <code>whileInView</code> with client-side navigation.</li> <li>Fix draggable elements when layout updates due to surrounding element re-renders.</li> <li>Improved memory pressure of layout animations.</li> <li>Ensure motion value returned from <code>useSpring</code> reports correct <code>isAnimating()</code>.</li> </ul> <h2>[12.36.0] 2026-03-09</h2> <h3>Added</h3> <ul> <li>Allow <code>dragSnapToOrigin</code> to accept <code>"x"</code> or <code>"y"</code> for per-axis snapping.</li> <li>Added axis-locked layout animations with <code>layout="x"</code> and <code>layout="y"</code>.</li> <li>Added <code>skipInitialAnimation</code> to <code>useSpring</code>.</li> </ul> <h3>Fixed</h3> <ul> <li>Fixed <code>height</code> and <code>width: auto</code> animations with <code>box-sizing: border-box</code>.</li> <li>Reset component values when exit animation finishes.</li> <li>Ensure <code>anticipate</code> easing returns <code>1</code> at <code>p === 1</code>.</li> <li>Fix <code>@emotion/is-prop-valid</code> resolve error in Storybook.</li> <li>Remove <code>data-pop-layout-id</code> from exiting elements when animation interrupted.</li> <li>Ensure we skip WAAPI for non-animatable keyframes.</li> <li>Ensure we skip WAAPI for SVG transforms.</li> <li>Ensure <code>MotionValue</code> props are not passed to SVG.</li> <li><code>AnimatePresence</code>: Prevent <code>mode="wait"</code> elements from getting stuck when switched rapidly.</li> </ul> <h2>[12.35.2] 2026-03-09</h2> <h3>Fixed</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/motiondivision/motion/commit/0bfc9fe015f7170c538ca70ba4677ec59d83ee76"><code>0bfc9fe</code></a> v12.38.0</li> <li><a href="https://github.com/motiondivision/motion/commit/343cb0c69e10d5c2bcc9837fb6a83d437257f064"><code>343cb0c</code></a> Updating layoutAnchor</li> <li><a href="https://github.com/motiondivision/motion/commit/ee99ad25f734287c2885d53ec0af8a8f1f6ca306"><code>ee99ad2</code></a> Updating changelog</li> <li><a href="https://github.com/motiondivision/motion/commit/062660b3c5c982d7274adbd382c6dfcd5aea77ad"><code>062660b</code></a> Updating changgelog</li> <li><a href="https://github.com/motiondivision/motion/commit/303da7dddfc41f521ec500aef8a72643169582e0"><code>303da7d</code></a> Updating readme</li> <li><a href="https://github.com/motiondivision/motion/commit/b075adc4b1dde8fa1fb1c488b1b4e7e97a07331e"><code>b075adc</code></a> Merge pull request <a href="https://redirect.github.com/motiondivision/motion/issues/3647">#3647</a> from motiondivision/feat/layout-anchor</li> <li><a href="https://github.com/motiondivision/motion/commit/f0991d6728f425eebbb58ce926bd33d05336b724"><code>f0991d6</code></a> Add missing layoutAnchor !== false guard in attemptToResolveRelativeTarget</li> <li><a href="https://github.com/motiondivision/motion/commit/b5798e99e78738a1fa8ec3414bff63796f9eb39b"><code>b5798e9</code></a> Merge pull request <a href="https://redirect.github.com/motiondivision/motion/issues/3642">#3642</a> from motiondivision/worktree-fix-issue-3078</li> <li><a href="https://github.com/motiondivision/motion/commit/7686c193e349f3b3360455615ee6ca45b8532c28"><code>7686c19</code></a> Merge pull request <a href="https://redirect.github.com/motiondivision/motion/issues/3636">#3636</a> from motiondivision/worktree-fix-issue-3061</li> <li><a href="https://github.com/motiondivision/motion/commit/a95c4877c879f0e189295cc9f4f5f1c1e1d7df2a"><code>a95c487</code></a> Fix auto-scroll in reorder-virtualized test page</li> <li>Additional commits viewable in <a href="https://github.com/motiondivision/motion/compare/v12.34.1...v12.38.0">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
a5dc2d1ce1 |
chore: bump @types/node from 20.19.25 to 20.19.39 in /site (#24879)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.19.25 to 20.19.39. <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
d8a030bb35 |
chore: bump autoprefixer from 10.4.22 to 10.5.0 in /site (#24883)
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.22 to 10.5.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/postcss/autoprefixer/releases">autoprefixer's releases</a>.</em></p> <blockquote> <h2>10.5.0 “Each Endeavouring, All Achieving”</h2> <!-- raw HTML omitted --> <ul> <li>Added <code>mask-position-x</code> and <code>mask-position-y</code> support (by <a href="https://github.com/toporek"><code>@toporek</code></a>).</li> </ul> <h2>10.4.27</h2> <ul> <li>Removed development key from <code>package.json</code>.</li> </ul> <h2>10.4.26</h2> <ul> <li>Reduced package size.</li> </ul> <h2>10.4.25</h2> <ul> <li>Fixed broken gradients on CSS Custom Properties (by <a href="https://github.com/serger777"><code>@serger777</code></a>).</li> </ul> <h2>10.4.24</h2> <ul> <li>Made Autoprefixer a little faster (by <a href="https://github.com/Cherry"><code>@Cherry</code></a>).</li> </ul> <h2>10.4.23</h2> <ul> <li>Reduced dependencies (by <a href="https://github.com/hyperz111"><code>@hyperz111</code></a>).</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md">autoprefixer's changelog</a>.</em></p> <blockquote> <h2>10.5.0 “Each Endeavouring, All Achieving”</h2> <ul> <li>Added <code>mask-position-x</code> and <code>mask-position-y</code> support (by <a href="https://github.com/toporek"><code>@toporek</code></a>).</li> </ul> <h2>10.4.27</h2> <ul> <li>Removed development key from <code>package.json</code>.</li> </ul> <h2>10.4.26</h2> <ul> <li>Reduced package size.</li> </ul> <h2>10.4.25</h2> <ul> <li>Fixed broken gradients on CSS Custom Properties (by <a href="https://github.com/serger777"><code>@serger777</code></a>).</li> </ul> <h2>10.4.24</h2> <ul> <li>Made Autoprefixer a little faster (by <a href="https://github.com/Cherry"><code>@Cherry</code></a>).</li> </ul> <h2>10.4.23</h2> <ul> <li>Reduced dependencies (by <a href="https://github.com/hyperz111"><code>@hyperz111</code></a>).</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/postcss/autoprefixer/commit/faf456a4be572dbcb60cbe5d76a8927e23809ef5"><code>faf456a</code></a> Release 10.5 version</li> <li><a href="https://github.com/postcss/autoprefixer/commit/b841fc53575a2e8c3dd8d04b0bc5998ee11e7587"><code>b841fc5</code></a> Update dependencies</li> <li><a href="https://github.com/postcss/autoprefixer/commit/47d6e68b27009f7cb60513172f765783b55bb000"><code>47d6e68</code></a> Update email</li> <li><a href="https://github.com/postcss/autoprefixer/commit/45cfc0827012fda39b809f1654136e1d5ab7ab25"><code>45cfc08</code></a> Replace ESLint and Prettier to oxlint and oxfmt</li> <li><a href="https://github.com/postcss/autoprefixer/commit/7e3ec7db7274289ccc385fb788bc48f14a4e1dd8"><code>7e3ec7d</code></a> Add prefixing support for mask-position-x and mask-position-y (<a href="https://redirect.github.com/postcss/autoprefixer/issues/1548">#1548</a>)</li> <li><a href="https://github.com/postcss/autoprefixer/commit/360f2d9ecbad3315fbabc61fb2131ac939fee211"><code>360f2d9</code></a> Release 10.4.27 version</li> <li><a href="https://github.com/postcss/autoprefixer/commit/ab5260c30de086760abf7f666bb52f9267ff387e"><code>ab5260c</code></a> Update clean-publish</li> <li><a href="https://github.com/postcss/autoprefixer/commit/09e9dd12c023a02a90d05db46c3c75166525674c"><code>09e9dd1</code></a> Release 10.4.26 version</li> <li><a href="https://github.com/postcss/autoprefixer/commit/ec7554060076640e1261e16d3af8f81c3a2b17cf"><code>ec75540</code></a> Ignore local patches</li> <li><a href="https://github.com/postcss/autoprefixer/commit/59601b89582c2ca286a5e2a545ba98fb0004a5aa"><code>59601b8</code></a> Update c8 and clean-publish</li> <li>Additional commits viewable in <a href="https://github.com/postcss/autoprefixer/compare/10.4.22...10.5.0">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
ecc39efbb5 |
chore: bump @pierre/diffs from 1.1.0-beta.19 to 1.1.19 in /site (#24885)
Bumps @pierre/diffs from 1.1.0-beta.19 to 1.1.19. [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
f535c42550 |
chore: bump websocket-ts from 2.2.1 to 2.3.0 in /site (#24884)
Bumps [websocket-ts](https://github.com/jjxxs/websocket-ts) from 2.2.1 to 2.3.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/jjxxs/websocket-ts/releases">websocket-ts's releases</a>.</em></p> <blockquote> <h2>v2.3.0</h2> <h2>websocket-ts v2.3.0</h2> <h3>New Features</h3> <ul> <li><strong>UrlProvider</strong> — <code>Websocket</code> and <code>WebsocketBuilder</code> now accept a <code>UrlProvider</code>: a string or <code>() => string</code> function called on each connection attempt. Enables dynamic URL resolution for load balancing, auth token rotation, and failover. (<a href="https://redirect.github.com/jjxxs/websocket-ts/issues/31">jjxxs/websocket-ts#31</a>)</li> <li><strong>WebsocketEvent as const object</strong> — Replaced the TypeScript <code>enum</code> with a <code>const</code> object and type union, allowing plain string literals like <code>"open"</code> alongside <code>WebsocketEvent.open</code>. Fully backwards compatible. (<a href="https://redirect.github.com/jjxxs/websocket-ts/issues/32">jjxxs/websocket-ts#32</a>)</li> </ul> <h3>Improvements</h3> <ul> <li>npm publish with <code>--provenance</code> for supply chain transparency</li> <li>CI workflows updated to latest action versions with npm caching and <code>npm ci</code></li> <li>Coverage uploads switched from <code>coveralls</code> package to <code>coverallsapp/github-action</code></li> <li>All devDependencies updated to latest semver-compatible versions</li> <li><code>package-lock.json</code> added for reproducible builds</li> <li>README refreshed with new badges and improved documentation</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jjxxs/websocket-ts/commit/2ed2b204011bcabd8f398daa74ef00bd52c663c9"><code>2ed2b20</code></a> Upgrade npm for OIDC trusted publishing support</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/1abf7a013d7e5f7371104525a165c0ed564a4c5a"><code>1abf7a0</code></a> Upgrade npm for OIDC trusted publishing support</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/f667fbb27c64abcad7007d5bb983e875c4128431"><code>f667fbb</code></a> Set registry via npm config instead of setup-node for trusted publishing</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/dd1c7311173058658b3301ca86f6769053b20343"><code>dd1c731</code></a> Restore registry-url for npm trusted publishing</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/8879dc684fb5827b53f3189aa21b4ae3c2334009"><code>8879dc6</code></a> Remove registry-url from setup-node to fix trusted publishing</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/92f01da09ffa6f1a15c466fc16ad205e56f9061f"><code>92f01da</code></a> Use trusted publishing for npm, remove NPM_TOKEN secret</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/dd3dd8cb7cc7ade860ab01a32ea326adce0252d6"><code>dd3dd8c</code></a> Merge pull request <a href="https://redirect.github.com/jjxxs/websocket-ts/issues/40">#40</a> from jjxxs/release/websocket-ts-2-3-0</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/cf13fb0964bc51ff3101f5b8d8746e234867dd45"><code>cf13fb0</code></a> Update devDependencies to latest semver-compatible versions</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/b4a0f39a33d791804efa88888e1cfaba2b7230bd"><code>b4a0f39</code></a> Added documentation for UrlProvider</li> <li><a href="https://github.com/jjxxs/websocket-ts/commit/d04039d57c3119fde1c767e1964d17757dec6a21"><code>d04039d</code></a> Add UrlProvider support to accept string or function for WebSocket URL</li> <li>Additional commits viewable in <a href="https://github.com/jjxxs/websocket-ts/compare/v2.2.1...v2.3.0">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new releaser for websocket-ts since your current version.</p> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
99fdec5aa3 |
chore: bump dayjs from 1.11.19 to 1.11.20 in /site (#24881)
Bumps [dayjs](https://github.com/iamkun/dayjs) from 1.11.19 to 1.11.20. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/iamkun/dayjs/releases">dayjs's releases</a>.</em></p> <blockquote> <h2>v1.11.20</h2> <h2><a href="https://github.com/iamkun/dayjs/compare/v1.11.19...v1.11.20">1.11.20</a> (2026-03-12)</h2> <h3>Bug Fixes</h3> <ul> <li>Update locale km.js to support meridiem (<a href="https://redirect.github.com/iamkun/dayjs/issues/3017">#3017</a>) (<a href="https://github.com/iamkun/dayjs/commit/9d2b6a1ec744ad5db13afd4d701f93349135dfec">9d2b6a1</a>)</li> <li>update updateLocale plugin to merge nested object properties instead of replacing (<a href="https://redirect.github.com/iamkun/dayjs/issues/3012">#3012</a>) (<a href="https://github.com/iamkun/dayjs/commit/99691c5f3bd1371d3b763d5f9dfaed9a1945a477">99691c5</a>), closes <a href="https://redirect.github.com/iamkun/dayjs/issues/1118">#1118</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/iamkun/dayjs/blob/dev/CHANGELOG.md">dayjs's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/iamkun/dayjs/compare/v1.11.19...v1.11.20">1.11.20</a> (2026-03-12)</h2> <h3>Bug Fixes</h3> <ul> <li>Update locale km.js to support meridiem (<a href="https://redirect.github.com/iamkun/dayjs/issues/3017">#3017</a>) (<a href="https://github.com/iamkun/dayjs/commit/9d2b6a1ec744ad5db13afd4d701f93349135dfec">9d2b6a1</a>)</li> <li>update updateLocale plugin to merge nested object properties instead of replacing (<a href="https://redirect.github.com/iamkun/dayjs/issues/3012">#3012</a>) (<a href="https://github.com/iamkun/dayjs/commit/99691c5f3bd1371d3b763d5f9dfaed9a1945a477">99691c5</a>), closes <a href="https://redirect.github.com/iamkun/dayjs/issues/1118">#1118</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/iamkun/dayjs/commit/af6e1f85c10fa8596e79471eadad25ab2da56f0f"><code>af6e1f8</code></a> chore(release): 1.11.20 [skip ci]</li> <li><a href="https://github.com/iamkun/dayjs/commit/82babd6688d7238fe1585895816fb2e8e0817c7d"><code>82babd6</code></a> D2M (<a href="https://redirect.github.com/iamkun/dayjs/issues/3018">#3018</a>)</li> <li><a href="https://github.com/iamkun/dayjs/commit/bbe4ab1bdb1042667817de2433fc85e6b12eadad"><code>bbe4ab1</code></a> chore: fix lint error</li> <li><a href="https://github.com/iamkun/dayjs/commit/99691c5f3bd1371d3b763d5f9dfaed9a1945a477"><code>99691c5</code></a> fix: update updateLocale plugin to merge nested object properties instead of ...</li> <li><a href="https://github.com/iamkun/dayjs/commit/9d2b6a1ec744ad5db13afd4d701f93349135dfec"><code>9d2b6a1</code></a> fix: Update locale km.js to support meridiem (<a href="https://redirect.github.com/iamkun/dayjs/issues/3017">#3017</a>)</li> <li><a href="https://github.com/iamkun/dayjs/commit/acf21cd152fcf0851162cba92b56fb4281673b1a"><code>acf21cd</code></a> chore: update doc</li> <li><a href="https://github.com/iamkun/dayjs/commit/55a64e195a7354b3222241e6a64085c706cc157e"><code>55a64e1</code></a> chore: update doc</li> <li><a href="https://github.com/iamkun/dayjs/commit/807face1fef65eee9955fa587888cf31c5a0d3c0"><code>807face</code></a> chore: update doc</li> <li><a href="https://github.com/iamkun/dayjs/commit/54f447048cee679e51a7053f8042d9b6b7028b89"><code>54f4470</code></a> chore: update doc</li> <li><a href="https://github.com/iamkun/dayjs/commit/9ea23c71a125dbb34025cb9f6114d1083ea62705"><code>9ea23c7</code></a> chore: update doc</li> <li>Additional commits viewable in <a href="https://github.com/iamkun/dayjs/compare/v1.11.19...v1.11.20">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new releaser for dayjs since your current version.</p> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
f7f7e492ed |
chore: bump dpdm from 3.14.0 to 3.15.1 in /site (#24877)
Bumps [dpdm](https://github.com/acrazing/dpdm) from 3.14.0 to 3.15.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/acrazing/dpdm/releases">dpdm's releases</a>.</em></p> <blockquote> <h2>dpdm v3.15.0</h2> <p>TS 5.6</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/acrazing/dpdm/commit/aaea2223cfe61729e1af980f5645c7ad0b91b99f"><code>aaea222</code></a> 3.15.1</li> <li><a href="https://github.com/acrazing/dpdm/commit/77459f2dc284b559f78d0f70111e37775465f40b"><code>77459f2</code></a> feat: update deps</li> <li><a href="https://github.com/acrazing/dpdm/commit/6f8e0de5ad60ac3cc6e44d03ac6dd0e95c51576f"><code>6f8e0de</code></a> feat: upgrade ts to 5.6</li> <li><a href="https://github.com/acrazing/dpdm/commit/78bd674cfccb1d20a23522f33f7760b6aae17dca"><code>78bd674</code></a> Merge pull request <a href="https://redirect.github.com/acrazing/dpdm/issues/58">#58</a> from bigmistqke/master</li> <li><a href="https://github.com/acrazing/dpdm/commit/a446d728e1ff65dc7c5a7a1a329a09b759280b89"><code>a446d72</code></a> update readme</li> <li><a href="https://github.com/acrazing/dpdm/commit/42e9f17f9d108b0422479df80821fc406b6e5a67"><code>42e9f17</code></a> feat: upgrade ts to 5.3.3</li> <li><a href="https://github.com/acrazing/dpdm/commit/1f065e20ad78fa18d3280813ccb0bc6aaae57fa6"><code>1f065e2</code></a> Merge pull request <a href="https://redirect.github.com/acrazing/dpdm/issues/42">#42</a> from soryy708/test-cirdep</li> <li><a href="https://github.com/acrazing/dpdm/commit/4e979f690d7b6c582156cf056ca52a0c287a8181"><code>4e979f6</code></a> test parseCircular in utils</li> <li><a href="https://github.com/acrazing/dpdm/commit/ba515fb7ee427182bcc07456d51ddaece80e2e9f"><code>ba515fb</code></a> test: remove yarn.lock dep</li> <li>See full diff in <a href="https://github.com/acrazing/dpdm/compare/v3.14.0...v3.15.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
bc77532b8f |
chore: bump the vite group across 1 directory with 3 updates (#24866)
Bumps the vite group with 3 updates in the /site directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite), [vite-plugin-checker](https://github.com/fi3ework/vite-plugin-checker) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest). Updates `vite` from 8.0.2 to 8.0.10 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v8.0.10</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.10/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.0.9</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.9/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.0.8</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.8/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.0.7</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.7/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.0.6</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.6/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.0.5</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.5/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.0.4</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.4/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>create-vite@8.0.3</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/create-vite@8.0.3/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v8.0.3</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v8.0.3/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted --><a href="https://github.com/vitejs/vite/compare/v8.0.9...v8.0.10">8.0.10</a> (2026-04-23)<!-- raw HTML omitted --></h2> <h3>Features</h3> <ul> <li>update rolldown to 1.0.0-rc.17 (<a href="https://redirect.github.com/vitejs/vite/issues/22299">#22299</a>) (<a href="https://github.com/vitejs/vite/commit/a4d06d9015167d30fe8ac63d1ce2edc146cdca31">a4d06d9</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><code>hmrClient.logger.debug</code> and <code>hmrClient.logger.error</code> looked different from other HMR logs (<a href="https://redirect.github.com/vitejs/vite/issues/22147">#22147</a>) (<a href="https://github.com/vitejs/vite/commit/a4d828f2d5ed85440bc0774eab342e6f9a5e5f62">a4d828f</a>)</li> <li><strong>css:</strong> show filename in CSS minification warnings for <code>.css?inline</code> (<a href="https://redirect.github.com/vitejs/vite/issues/22292">#22292</a>) (<a href="https://github.com/vitejs/vite/commit/83f0a785a2ae48d6761fb69f4b0523a24ae9342c">83f0a78</a>)</li> <li><strong>optimizer:</strong> allow user transform.target to override default in optimizeDeps (<a href="https://redirect.github.com/vitejs/vite/issues/22273">#22273</a>) (<a href="https://github.com/vitejs/vite/commit/5c7cec69b637544ab16009d8758df7dbbf7f2674">5c7cec6</a>)</li> <li>remove format sniffing module resolution from JS resolver (<a href="https://redirect.github.com/vitejs/vite/issues/22297">#22297</a>) (<a href="https://github.com/vitejs/vite/commit/b8a21cc821c1434ac9d2b85ec53005df9edc306b">b8a21cc</a>)</li> </ul> <h3>Code Refactoring</h3> <ul> <li>enable some typecheck rules (<a href="https://redirect.github.com/vitejs/vite/issues/22278">#22278</a>) (<a href="https://github.com/vitejs/vite/commit/943751801f70057ae94f9092e349c8f3fd9ccdf2">9437518</a>)</li> <li>typecheck client directory (<a href="https://redirect.github.com/vitejs/vite/issues/22284">#22284</a>) (<a href="https://github.com/vitejs/vite/commit/40a0847276502b33a3942b3cfab04b20218f3543">40a0847</a>)</li> </ul> <h2><!-- raw HTML omitted --><a href="https://github.com/vitejs/vite/compare/v8.0.8...v8.0.9">8.0.9</a> (2026-04-20)<!-- raw HTML omitted --></h2> <h3>Features</h3> <ul> <li>update rolldown to 1.0.0-rc.16 (<a href="https://redirect.github.com/vitejs/vite/issues/22248">#22248</a>) (<a href="https://github.com/vitejs/vite/commit/2947edd57ceb64a0b4dc43269743e8e44e68c09b">2947edd</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li>allow binding when strictPort is set but wildcard port is in use (<a href="https://redirect.github.com/vitejs/vite/issues/22150">#22150</a>) (<a href="https://github.com/vitejs/vite/commit/dfc8aa5057dd8ec2b1223980d1e2eeb946ac3384">dfc8aa5</a>)</li> <li><strong>build:</strong> emptyOutDir should happen for watch rebuilds (<a href="https://redirect.github.com/vitejs/vite/issues/22207">#22207</a>) (<a href="https://github.com/vitejs/vite/commit/ee522672bb374c7ff95a347f14732491121b1cd6">ee52267</a>)</li> <li><strong>bundled-dev:</strong> reject requests to HMR patch files in non potentially trustworthy origins (<a href="https://redirect.github.com/vitejs/vite/issues/22269">#22269</a>) (<a href="https://github.com/vitejs/vite/commit/868f1411a6f474baa4417f2d6524692dd452f760">868f141</a>)</li> <li><strong>css:</strong> use unique key for cssEntriesMap to prevent same-basename collision (<a href="https://redirect.github.com/vitejs/vite/issues/22039">#22039</a>) (<a href="https://github.com/vitejs/vite/commit/374bb5d597fcd0485e929565c698d8ed219136f8">374bb5d</a>)</li> <li><strong>deps:</strong> update all non-major dependencies (<a href="https://redirect.github.com/vitejs/vite/issues/22219">#22219</a>) (<a href="https://github.com/vitejs/vite/commit/4cd0d6760edd5fb0841abe86538de3c225e880a1">4cd0d67</a>)</li> <li><strong>deps:</strong> update all non-major dependencies (<a href="https://redirect.github.com/vitejs/vite/issues/22268">#22268</a>) (<a href="https://github.com/vitejs/vite/commit/c28e9c12a849f80e6fdc93f42283ad2863ab9dbc">c28e9c1</a>)</li> <li>detect Deno workspace root (fix <a href="https://redirect.github.com/vitejs/vite/issues/22237">#22237</a>) (<a href="https://redirect.github.com/vitejs/vite/issues/22238">#22238</a>) (<a href="https://github.com/vitejs/vite/commit/1b793c0e1726467fffd06ffad9bc81c61a840188">1b793c0</a>)</li> <li><strong>dev:</strong> handle errors in <code>watchChange</code> hook (<a href="https://redirect.github.com/vitejs/vite/issues/22188">#22188</a>) (<a href="https://github.com/vitejs/vite/commit/fc08bdab9bba871b03689f2f6997c3a4ba4351da">fc08bda</a>)</li> <li><strong>optimizer:</strong> handle more chars that will be sanitized (<a href="https://redirect.github.com/vitejs/vite/issues/22208">#22208</a>) (<a href="https://github.com/vitejs/vite/commit/3f24533ac4845ed22547279d1721bd82a35345e3">3f24533</a>)</li> <li>skip fallback sourcemap generation for <code>?raw</code> imports (<a href="https://redirect.github.com/vitejs/vite/issues/22148">#22148</a>) (<a href="https://github.com/vitejs/vite/commit/3ec9cdaac7936ca32d0956c4cb1eb6e172945996">3ec9cda</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>align the descriptions in READMEs (<a href="https://redirect.github.com/vitejs/vite/issues/22231">#22231</a>) (<a href="https://github.com/vitejs/vite/commit/44c42b97639bb6ad777e66d752b2829cccb9a27a">44c42b9</a>)</li> <li>fix reuses wording in dev environment comment (<a href="https://redirect.github.com/vitejs/vite/issues/22173">#22173</a>) (<a href="https://github.com/vitejs/vite/commit/9163412fdfec7fb1656529713326a5b5c5e986ea">9163412</a>)</li> <li>fix wording in sass error comment (<a href="https://redirect.github.com/vitejs/vite/issues/22214">#22214</a>) (<a href="https://github.com/vitejs/vite/commit/bc5c6a7a498845dff20dc410c395355b79a4b753">bc5c6a7</a>)</li> <li>update build CLI defaults (<a href="https://redirect.github.com/vitejs/vite/issues/22261">#22261</a>) (<a href="https://github.com/vitejs/vite/commit/605bb97994678a1bb70a8de9a85c29d5f5d48c5a">605bb97</a>)</li> </ul> <h3>Miscellaneous Chores</h3> <ul> <li><strong>deps:</strong> update dependency dotenv-expand to v13 (<a href="https://redirect.github.com/vitejs/vite/issues/22271">#22271</a>) (<a href="https://github.com/vitejs/vite/commit/0a3887da18812cacb254c616e4dd35631e776fda">0a3887d</a>)</li> </ul> <h2><!-- raw HTML omitted --><a href="https://github.com/vitejs/vite/compare/v8.0.7...v8.0.8">8.0.8</a> (2026-04-09)<!-- raw HTML omitted --></h2> <h3>Features</h3> <ul> <li>update rolldown to 1.0.0-rc.15 (<a href="https://redirect.github.com/vitejs/vite/issues/22201">#22201</a>) (<a href="https://github.com/vitejs/vite/commit/6baf587255936e91348cbe624caefd10e8c607ab">6baf587</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vitejs/vite/commit/32c29780404c353f5a7c5ba4d06fc5e676741714"><code>32c2978</code></a> release: v8.0.10</li> <li><a href="https://github.com/vitejs/vite/commit/a4d06d9015167d30fe8ac63d1ce2edc146cdca31"><code>a4d06d9</code></a> feat: update rolldown to 1.0.0-rc.17 (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22299">#22299</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/a4d828f2d5ed85440bc0774eab342e6f9a5e5f62"><code>a4d828f</code></a> fix: <code>hmrClient.logger.debug</code> and <code>hmrClient.logger.error</code> looked different f...</li> <li><a href="https://github.com/vitejs/vite/commit/83f0a785a2ae48d6761fb69f4b0523a24ae9342c"><code>83f0a78</code></a> fix(css): show filename in CSS minification warnings for <code>.css?inline</code> (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22292">#22292</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/b8a21cc821c1434ac9d2b85ec53005df9edc306b"><code>b8a21cc</code></a> fix: remove format sniffing module resolution from JS resolver (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22297">#22297</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/40a0847276502b33a3942b3cfab04b20218f3543"><code>40a0847</code></a> refactor: typecheck client directory (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22284">#22284</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/5c7cec69b637544ab16009d8758df7dbbf7f2674"><code>5c7cec6</code></a> fix(optimizer): allow user transform.target to override default in optimizeDe...</li> <li><a href="https://github.com/vitejs/vite/commit/943751801f70057ae94f9092e349c8f3fd9ccdf2"><code>9437518</code></a> refactor: enable some typecheck rules (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22278">#22278</a>)</li> <li><a href="https://github.com/vitejs/vite/commit/ce729f5fa1a5adca373b2adcb0e1b18099164a14"><code>ce729f5</code></a> release: v8.0.9</li> <li><a href="https://github.com/vitejs/vite/commit/605bb97994678a1bb70a8de9a85c29d5f5d48c5a"><code>605bb97</code></a> docs: update build CLI defaults (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22261">#22261</a>)</li> <li>Additional commits viewable in <a href="https://github.com/vitejs/vite/commits/v8.0.10/packages/vite">compare view</a></li> </ul> </details> <br /> Updates `vite-plugin-checker` from 0.12.0 to 0.13.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/fi3ework/vite-plugin-checker/releases">vite-plugin-checker's releases</a>.</em></p> <blockquote> <h2>vite-plugin-checker@0.13.0</h2> <h3> 🚀 Features</h3> <ul> <li><strong>biome</strong>: Add support for biome 2.4 - by <a href="https://github.com/ScotchAndSoda"><code>@ScotchAndSoda</code></a>, <strong>Maksim Kruglov</strong> and <a href="https://github.com/danielroe"><code>@danielroe</code></a> in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/660">fi3ework/vite-plugin-checker#660</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/769696e"><!-- raw HTML omitted -->(76969)<!-- raw HTML omitted --></a></li> <li><strong>eslint</strong>: Support ESLint v10.x - by <a href="https://github.com/Guymestef"><code>@Guymestef</code></a> in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/668">fi3ework/vite-plugin-checker#668</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/ef4841d"><!-- raw HTML omitted -->(ef484)<!-- raw HTML omitted --></a></li> </ul> <h3> 🐞 Bug Fixes</h3> <ul> <li><strong>deps</strong>: <ul> <li>Update dependency vue to ^3.5.27 - in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/641">fi3ework/vite-plugin-checker#641</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/ef599bd"><!-- raw HTML omitted -->(ef599)<!-- raw HTML omitted --></a></li> <li>Update dependency vue to ^3.5.28 - in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/648">fi3ework/vite-plugin-checker#648</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/4787886"><!-- raw HTML omitted -->(47878)<!-- raw HTML omitted --></a></li> <li>Update dependency vue to ^3.5.29 - in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/659">fi3ework/vite-plugin-checker#659</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/1444447"><!-- raw HTML omitted -->(14444)<!-- raw HTML omitted --></a></li> <li>Update dependency picomatch to ^4.0.4 - in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/670">fi3ework/vite-plugin-checker#670</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/399de37"><!-- raw HTML omitted -->(399de)<!-- raw HTML omitted --></a></li> </ul> </li> <li><strong>oxlint</strong>: <ul> <li>Do not watch the root directory - by <a href="https://github.com/bjackson"><code>@bjackson</code></a> in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/671">fi3ework/vite-plugin-checker#671</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/e5b6f0f"><!-- raw HTML omitted -->(e5b6f)<!-- raw HTML omitted --></a></li> </ul> </li> <li><strong>stylelint</strong>: <ul> <li>Allow meow v14 in peer dependencies - by <a href="https://github.com/felixranesberger"><code>@felixranesberger</code></a> in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/646">fi3ework/vite-plugin-checker#646</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/8633ae5"><!-- raw HTML omitted -->(8633a)<!-- raw HTML omitted --></a></li> </ul> </li> <li><strong>vue-tsc</strong>: <ul> <li>Handle concurrency when setting up plugin - by <a href="https://github.com/kitsune7"><code>@kitsune7</code></a> in <a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/643">fi3ework/vite-plugin-checker#643</a> <a href="https://github.com/fi3ework/vite-plugin-checker/commit/23ced95"><!-- raw HTML omitted -->(23ced)<!-- raw HTML omitted --></a></li> </ul> </li> </ul> <h5> <a href="https://github.com/fi3ework/vite-plugin-checker/compare/vite-plugin-checker@0.12.0...vite-plugin-checker@0.13.0">View changes on GitHub</a></h5> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/37e272dd9d0e39e942abb11e52a615bbe04a09b3"><code>37e272d</code></a> v0.13.0</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/c48dd855e82c2108b439280d845283ac6119bb53"><code>c48dd85</code></a> chore(deps): update dependency stylelint to v16.26.1 (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/677">#677</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/ef4841de5f648027313fb29fe318bb96132f1082"><code>ef4841d</code></a> feat(eslint): support ESLint v10.x (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/668">#668</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/c870779623e55ffec667dce9043b141d7735336f"><code>c870779</code></a> chore(deps): replace dependency <code>@tsconfig/node22</code> with <code>@tsconfig/node24</code> (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/627">#627</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/d1fd1af3bdfd02f36f9bf534fca4755ab358a2f6"><code>d1fd1af</code></a> chore(deps): update dependency vite to ^8.0.8 (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/678">#678</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/769696e029d8ee2a791248ead00cdefd16301a8e"><code>769696e</code></a> feat(biome): add support for biome 2.4 (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/660">#660</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/399de3717f17b6d776f0ef74f1a9f1b6a1c353ee"><code>399de37</code></a> fix(deps): update dependency picomatch to ^4.0.4 (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/670">#670</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/431436045111d6941349dc454306755ca09f0c72"><code>4314360</code></a> build(deps): bump vite from 5.4.19 to 7.3.2 (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/674">#674</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/e39c564fc351548ea54036bb82e466a3858fc686"><code>e39c564</code></a> chore(deps): update pnpm/action-setup digest to b906aff (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/666">#666</a>)</li> <li><a href="https://github.com/fi3ework/vite-plugin-checker/commit/8633ae54b4949b90c5a8f805bd2ee0cb6da83715"><code>8633ae5</code></a> fix(stylelint): allow meow v14 in peer dependencies (<a href="https://redirect.github.com/fi3ework/vite-plugin-checker/issues/646">#646</a>)</li> <li>Additional commits viewable in <a href="https://github.com/fi3ework/vite-plugin-checker/compare/vite-plugin-checker@0.12.0...vite-plugin-checker@0.13.0">compare view</a></li> </ul> </details> <br /> Updates `vitest` from 4.1.1 to 4.1.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitest-dev/vitest/releases">vitest's releases</a>.</em></p> <blockquote> <h2>v4.1.5</h2> <h3> 🚀 Experimental Features</h3> <ul> <li><strong>coverage</strong>: Istanbul to support <code>instrumenter</code> option - by <a href="https://github.com/BartWaardenburg"><code>@BartWaardenburg</code></a> and <a href="https://github.com/AriPerkkio"><code>@AriPerkkio</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10119">vitest-dev/vitest#10119</a> <a href="https://github.com/vitest-dev/vitest/commit/0e0ff41c7"><!-- raw HTML omitted -->(0e0ff)<!-- raw HTML omitted --></a></li> </ul> <h3> 🐞 Bug Fixes</h3> <ul> <li>--project negation excludes browser instances - by <a href="https://github.com/felamaslen"><code>@felamaslen</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10131">vitest-dev/vitest#10131</a> <a href="https://github.com/vitest-dev/vitest/commit/9423dc084"><!-- raw HTML omitted -->(9423d)<!-- raw HTML omitted --></a></li> <li>Project color label on html reporter - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10142">vitest-dev/vitest#10142</a> <a href="https://github.com/vitest-dev/vitest/commit/596f73986"><!-- raw HTML omitted -->(596f7)<!-- raw HTML omitted --></a></li> <li>Fix <code>vi.defineHelper</code> called as object method - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10163">vitest-dev/vitest#10163</a> <a href="https://github.com/vitest-dev/vitest/commit/122c25b5b"><!-- raw HTML omitted -->(122c2)<!-- raw HTML omitted --></a></li> <li>Alias <code>agent</code> reporter to <code>minimal</code> - by <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10157">vitest-dev/vitest#10157</a> <a href="https://github.com/vitest-dev/vitest/commit/663b99fe3"><!-- raw HTML omitted -->(663b9)<!-- raw HTML omitted --></a></li> <li>Respect diff config options in soft assertions - by <a href="https://github.com/Copilot"><code>@Copilot</code></a>, <strong>sheremet-va</strong> and <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/8696">vitest-dev/vitest#8696</a> <a href="https://github.com/vitest-dev/vitest/commit/9787dedad"><!-- raw HTML omitted -->(9787d)<!-- raw HTML omitted --></a></li> <li>Respect diff config options in soft assertions " - by <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/8696">vitest-dev/vitest#8696</a> <a href="https://github.com/vitest-dev/vitest/commit/7dc6d54fd"><!-- raw HTML omitted -->(7dc6d)<!-- raw HTML omitted --></a></li> <li><strong>ast-collect</strong>: Recognize _<em>vi_import</em> prefix in static test discovery - by <a href="https://github.com/Yejneshwar"><code>@Yejneshwar</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10129">vitest-dev/vitest#10129</a> <a href="https://github.com/vitest-dev/vitest/commit/325463ab2"><!-- raw HTML omitted -->(32546)<!-- raw HTML omitted --></a></li> <li><strong>coverage</strong>: Descriptive error message when reports directory is removed during test run - by <a href="https://github.com/DaveT1991"><code>@DaveT1991</code></a> and <a href="https://github.com/AriPerkkio"><code>@AriPerkkio</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10117">vitest-dev/vitest#10117</a> <a href="https://github.com/vitest-dev/vitest/commit/1413382e1"><!-- raw HTML omitted -->(14133)<!-- raw HTML omitted --></a></li> <li><strong>snapshot</strong>: Increase default snapshot max output length - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> and <strong>Codex</strong> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10150">vitest-dev/vitest#10150</a> <a href="https://github.com/vitest-dev/vitest/commit/21e66ff63"><!-- raw HTML omitted -->(21e66)<!-- raw HTML omitted --></a></li> <li><strong>ui</strong>: Fix jsx/tsx syntax highlight - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10152">vitest-dev/vitest#10152</a> <a href="https://github.com/vitest-dev/vitest/commit/f1b1f6c7b"><!-- raw HTML omitted -->(f1b1f)<!-- raw HTML omitted --></a></li> <li><strong>web-worker</strong>: Support MessagePort objects referenced inside postMessage data - by <a href="https://github.com/whitphx"><code>@whitphx</code></a> and <strong>Claude Opus 4.6 (1M context)</strong> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/9927">vitest-dev/vitest#9927</a> and <a href="https://redirect.github.com/vitest-dev/vitest/issues/10124">vitest-dev/vitest#10124</a> <a href="https://github.com/vitest-dev/vitest/commit/7ad7d39af"><!-- raw HTML omitted -->(7ad7d)<!-- raw HTML omitted --></a></li> <li><strong>api</strong>: Make test-specification options writable - by <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10154">vitest-dev/vitest#10154</a> <a href="https://github.com/vitest-dev/vitest/commit/6abd557b7"><!-- raw HTML omitted -->(6abd5)<!-- raw HTML omitted --></a></li> </ul> <h5> <a href="https://github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5">View changes on GitHub</a></h5> <h2>v4.1.4</h2> <h3> 🚀 Experimental Features</h3> <ul> <li><strong>coverage</strong>: <ul> <li>Default to text reporter <code>skipFull</code> if agent detected - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10018">vitest-dev/vitest#10018</a> <a href="https://github.com/vitest-dev/vitest/commit/53757804c"><!-- raw HTML omitted -->(53757)<!-- raw HTML omitted --></a></li> </ul> </li> <li><strong>experimental</strong>: <ul> <li>Expose <code>assertion</code> as a public field - by <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10095">vitest-dev/vitest#10095</a> <a href="https://github.com/vitest-dev/vitest/commit/a120e3ab8"><!-- raw HTML omitted -->(a120e)<!-- raw HTML omitted --></a></li> <li>Support aria snapshot - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a>, <strong>Claude Opus 4.6 (1M context)</strong>, <a href="https://github.com/AriPerkkio"><code>@AriPerkkio</code></a>, <strong>Codex</strong> and <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/9668">vitest-dev/vitest#9668</a> <a href="https://github.com/vitest-dev/vitest/commit/d4fbb5cc9"><!-- raw HTML omitted -->(d4fbb)<!-- raw HTML omitted --></a></li> </ul> </li> <li><strong>reporter</strong>: <ul> <li>Add filterMeta option to json reporter - by <a href="https://github.com/nami8824"><code>@nami8824</code></a> and <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10078">vitest-dev/vitest#10078</a> <a href="https://github.com/vitest-dev/vitest/commit/b77de968e"><!-- raw HTML omitted -->(b77de)<!-- raw HTML omitted --></a></li> </ul> </li> </ul> <h3> 🐞 Bug Fixes</h3> <ul> <li>Use "black" foreground for labeled terminal message to ensure contrast - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10076">vitest-dev/vitest#10076</a> <a href="https://github.com/vitest-dev/vitest/commit/203f07af7"><!-- raw HTML omitted -->(203f0)<!-- raw HTML omitted --></a></li> <li>Make <code>expect(..., message)</code> consistent as error message prefix - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> and <strong>Codex</strong> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10068">vitest-dev/vitest#10068</a> <a href="https://github.com/vitest-dev/vitest/commit/a1b5f0f4f"><!-- raw HTML omitted -->(a1b5f)<!-- raw HTML omitted --></a></li> <li>Do not hoist imports whose names match class properties . - by <a href="https://github.com/SunsetFi"><code>@SunsetFi</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10093">vitest-dev/vitest#10093</a> and <a href="https://redirect.github.com/vitest-dev/vitest/issues/10094">vitest-dev/vitest#10094</a> <a href="https://github.com/vitest-dev/vitest/commit/0fc4b47e0"><!-- raw HTML omitted -->(0fc4b)<!-- raw HTML omitted --></a></li> <li><strong>browser</strong>: Spread user server options into browser Vite server in project - by <a href="https://github.com/GoldStrikeArch"><code>@GoldStrikeArch</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10049">vitest-dev/vitest#10049</a> <a href="https://github.com/vitest-dev/vitest/commit/65c9d55eb"><!-- raw HTML omitted -->(65c9d)<!-- raw HTML omitted --></a></li> </ul> <h5> <a href="https://github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4">View changes on GitHub</a></h5> <h2>v4.1.3</h2> <h3> 🚀 Experimental Features</h3> <ul> <li>Add <code>experimental.preParse</code> flag - by <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10070">vitest-dev/vitest#10070</a> <a href="https://github.com/vitest-dev/vitest/commit/7827363bd"><!-- raw HTML omitted -->(78273)<!-- raw HTML omitted --></a></li> <li>Support <code>browser.locators.exact</code> option - by <a href="https://github.com/sheremet-va"><code>@sheremet-va</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/10013">vitest-dev/vitest#10013</a> <a href="https://github.com/vitest-dev/vitest/commit/487990a19"><!-- raw HTML omitted -->(48799)<!-- raw HTML omitted --></a></li> <li>Add <code>TestAttachment.bodyEncoding</code> - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/9969">vitest-dev/vitest#9969</a> <a href="https://github.com/vitest-dev/vitest/commit/89ca0e254"><!-- raw HTML omitted -->(89ca0)<!-- raw HTML omitted --></a></li> <li>Support custom snapshot matcher - by <a href="https://github.com/hi-ogawa"><code>@hi-ogawa</code></a>, <strong>Claude Sonnet 4.6</strong> and <strong>Codex</strong> in <a href="https://redirect.github.com/vitest-dev/vitest/issues/9973">vitest-dev/vitest#9973</a> <a href="https://github.com/vitest-dev/vitest/commit/59b0e6411"><!-- raw HTML omitted -->(59b0e)<!-- raw HTML omitted --></a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/vitest-dev/vitest/commit/e399846850fedf10b8228cbe46a419628998acd9"><code>e399846</code></a> chore: release v4.1.5</li> <li><a href="https://github.com/vitest-dev/vitest/commit/7dc6d54fd9dda0fe6fee2fb6451d0611a9ecb6e7"><code>7dc6d54</code></a> Revert "fix: respect diff config options in soft assertions (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/8696">#8696</a>)"</li> <li><a href="https://github.com/vitest-dev/vitest/commit/9787dedade9896a6d3eeed7739177d6c583a68a7"><code>9787ded</code></a> fix: respect diff config options in soft assertions (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/8696">#8696</a>)</li> <li><a href="https://github.com/vitest-dev/vitest/commit/325463ab292c45c3ef27aa21ec7da380c307052c"><code>325463a</code></a> fix(ast-collect): recognize _<em>vi_import</em> prefix in static test discovery (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10">#10</a>...</li> <li><a href="https://github.com/vitest-dev/vitest/commit/0e0ff41c7e86d6e2bf581f074dc216805d10d371"><code>0e0ff41</code></a> feat(coverage): istanbul to support <code>instrumenter</code> option (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10119">#10119</a>)</li> <li><a href="https://github.com/vitest-dev/vitest/commit/663b99fe3e6a60fc8a7ccd2d9941d1cbe929b606"><code>663b99f</code></a> fix: alias <code>agent</code> reporter to <code>minimal</code> (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10157">#10157</a>)</li> <li><a href="https://github.com/vitest-dev/vitest/commit/122c25b5b157ffd31b376561b16ab983aa23e7bc"><code>122c25b</code></a> fix: fix <code>vi.defineHelper</code> called as object method (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10163">#10163</a>)</li> <li><a href="https://github.com/vitest-dev/vitest/commit/6abd557b7219156893dd13a1dbe86501d5542d2e"><code>6abd557</code></a> feat(api): make test-specification options writable (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10154">#10154</a>)</li> <li><a href="https://github.com/vitest-dev/vitest/commit/596f73986abe2161a9a06f0ca03df68e82690b21"><code>596f739</code></a> fix: project color label on html reporter (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10142">#10142</a>)</li> <li><a href="https://github.com/vitest-dev/vitest/commit/9423dc0841e97b6dcac8a73cdb8e656b3d6ba909"><code>9423dc0</code></a> fix: --project negation excludes browser instances (<a href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/10131">#10131</a>)</li> <li>Additional commits viewable in <a href="https://github.com/vitest-dev/vitest/commits/v4.1.5/packages/vitest">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
0367b1f155 |
chore: bump the xterm group across 1 directory with 4 updates (#24864)
Bumps the xterm group with 4 updates in the /site directory: [@xterm/addon-fit](https://github.com/xtermjs/xterm.js), [@xterm/addon-unicode11](https://github.com/xtermjs/xterm.js), [@xterm/addon-web-links](https://github.com/xtermjs/xterm.js) and [@xterm/addon-webgl](https://github.com/xtermjs/xterm.js). Updates `@xterm/addon-fit` from 0.10.0 to 0.11.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/xtermjs/xterm.js/commit/ce1d788efe88a5e0ee972a0a6d260f9ba9454d3d"><code>ce1d788</code></a> Bumped bower version to 0.11</li> <li><a href="https://github.com/xtermjs/xterm.js/commit/01e48b740673d20c01a50ac60ba59317d8fa17b8"><code>01e48b7</code></a> Revamped the attach addon</li> <li><a href="https://github.com/xtermjs/xterm.js/commit/a1717fdd8d31f15c807309ff510142d7386e7a43"><code>a1717fd</code></a> Update docs index</li> <li><a href="https://github.com/xtermjs/xterm.js/commit/c9f5f235e21caefdb6fadda0fac26a07c5c9341c"><code>c9f5f23</code></a> Started documenting methods</li> <li><a href="https://github.com/xtermjs/xterm.js/commit/21dde3cfa21faec6db52aff671c47a2e818e7a3a"><code>21dde3c</code></a> Updated version, in docs</li> <li><a href="https://github.com/xtermjs/xterm.js/commit/73bf6d1ce8b79204af4d00e595932ca09e1a7978"><code>73bf6d1</code></a> Started documenting events</li> <li>See full diff in <a href="https://github.com/xtermjs/xterm.js/compare/0.10...0.11">compare view</a></li> </ul> </details> <br /> Updates `@xterm/addon-unicode11` from 0.8.0 to 0.9.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/xtermjs/xterm.js/commit/0b603952c3537471e0ad565bae3482c77c2611ff"><code>0b60395</code></a> Removed debugging stuff</li> <li>See full diff in <a href="https://github.com/xtermjs/xterm.js/compare/0.8...0.9">compare view</a></li> </ul> </details> <br /> Updates `@xterm/addon-web-links` from 0.11.0 to 0.12.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/xtermjs/xterm.js/commit/561fc59dbc4f19bd9be0a919c6b1e5e6c0e01fe5"><code>561fc59</code></a> Added screenshot for docs</li> <li>See full diff in <a href="https://github.com/xtermjs/xterm.js/compare/0.11...0.12">compare view</a></li> </ul> </details> <br /> Updates `@xterm/addon-webgl` from 0.18.0 to 0.19.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/xtermjs/xterm.js/commit/670efc44547408074179c1744fc903c23b91adc0"><code>670efc4</code></a> Bump Bower version to 0.19</li> <li><a href="https://github.com/xtermjs/xterm.js/commit/74f9526177f0f6a10feecad8e11e8b517b3b02b4"><code>74f9526</code></a> [addon attach] Implement auto-detaching on socket close/error</li> <li>See full diff in <a href="https://github.com/xtermjs/xterm.js/compare/0.18...0.19">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
6ee5fe983c |
fix(site/src/pages/TemplateVersionEditorPage): make Create Workspace button a link (#24803)
The "Create a workspace" button in the template publish success banner used an `onClick` handler with `navigate()`, rendering a plain `<button>`. Users could not right-click to open in a new tab. Changed the prop from `onCreateWorkspace` callback to `createWorkspaceUrl` string and switched to `<Button asChild>` + `<RouterLink>`, rendering a proper `<a>` element that supports standard link interactions (right-click, middle-click, Ctrl+click). Fixes https://github.com/coder/coder/issues/24802 > _This PR was authored by Coder Agents on behalf of @35C4n0r._ |
||
|
|
90bee3aaef | refactor: reorganize and restyle some oddities (#24855) | ||
|
|
19535d9771 |
refactor: add modern DialogActions component (#24856)
|
||
|
|
386d836366 |
feat(site): remove visible text from copy/download logs buttons (#24852)
The text from the AgentRow copy/download logs buttons were cramping actual log stream tabs. Design would like to hide this text: 1. The "Copy logs" text is now in a tooltip over the button 2. The "Download logs" text is now screen-reader only https://github.com/user-attachments/assets/af883cae-67dc-4198-9fde-0ab5ea415360 |
||
|
|
1b2bd4a0da |
feat(site): show non-assignable roles as disabled (#24846)
Previously, non-assignable roles were filtered out of the role selector entirely. Now all roles are shown, with non-assignable roles rendered as disabled (dimmed, `cursor-not-allowed`, checkbox disabled) so users can see they exist but cannot toggle them. <img width="672" height="392" alt="Screenshot 2026-04-30 at 1 40 44 PM" src="https://github.com/user-attachments/assets/9d17c06a-fcf0-4a49-9557-99cbddb18cba" /> |
||
|
|
201de14a9d |
fix(site): hide hidden apps in Tasks tabs (#24823)
## Summary - Exclude `hidden` workspace apps from the Tasks page app tabs. - Keep terminal link agent selection based on the full app list so hidden apps do not affect terminal routing. - Add a focused unit test covering hidden app filtering in `TaskApps`. ## Test plan - `pnpm --dir site test TaskApps.test.tsx` - `pnpm -C site exec biome check src/pages/TaskPage/TaskApps.tsx src/pages/TaskPage/TaskApps.test.tsx` Made with [Cursor](https://cursor.com) |
||
|
|
8471b19248 |
feat: improve mobile responsiveness (#24821)
Linear: DEVEX-270 The nav links (Workspaces, Templates, Tasks, Agents) were always rendered horizontally, overflowing on small viewports and pushing right-side controls (notifications, user menu, hamburger) off-screen. The Agents page has no Navbar since it sits outside DashboardLayout, leaving mobile users with no way to navigate back. - Hide nav links below `md` breakpoint; they now live in the hamburger menu alongside the existing admin/user settings sections - Add Workspaces, Templates, and Agents entries to the mobile menu dropdown - Show the Agents sidebar logo header on all viewports (was `hidden md:block`), giving mobile users a tap target back to `/workspaces` - Reduce workspace page content padding from `p-8` to `p-4 md:p-8`, with matching negative-margin fix on `ResourceMetadata` ## Demo (390px / iPhone viewport, 1.75x speed)  ## Screenshots (390px / iPhone viewport) ### Navbar | Before | After | |--------|-------| |  |  | Before: nav links (Workspaces, Templates, Tasks, Agents) are always visible, overflowing the mobile header and pushing the hamburger menu off-screen. After: nav links are hidden below `md`; only the logo and right-side controls are shown. ### Mobile menu | Before | After | |--------|-------| |  |  | Before: hamburger menu had no navigation links. After: Workspaces, Templates, and Agents links appear at the top of the dropdown. ### Agents sidebar | Before | After | |--------|-------| |  |  | Before: the Coder logo/back-link in the sidebar header was hidden on mobile (`hidden md:block`). After: always visible, giving mobile users a way to navigate back. ### Workspace page | Before | After | |--------|-------| |  |  | Before: `p-8` (32px) on all sides at every viewport. After: `p-4` (16px) on mobile, `p-8` at `md` and above. --- > Generated by Coder Agent |
||
|
|
e57525002c |
chore: remove agents experiment flag and mark feature as beta (#24432)
Remove the `ExperimentAgents` feature flag so the Agents feature is always available without requiring `--experiments=agents`. The feature is now in beta. Existing deployments that still pass `--experiments=agents` will get a harmless "ignoring unknown experiment" warning on startup. ### Changes **Backend:** - Remove `RequireExperimentWithDevBypass` middleware from chat and MCP server routes - Always include `AgentsAccessRole` in assignable site roles (later refactored to org-scoped on main; rebase keeps that) - Always set `AgentsTabVisible = true`, then drop the entire dead `AgentsTabVisible` metadata pipeline (Go htmlState field, populateHTMLState goroutine, HTML meta tag, useEmbeddedMetadata registration, mock); no production consumer reads it. `AgentsNavItem` already gates on `permissions.createChat`. - Make `blob:` CSP `img-src` addition unconditional - Remove `ExperimentAgents` constant, `DisplayName` case, and `ExperimentsKnown` entry **CLI:** - Graduate the agents TUI from `coder exp agents` to `coder agents` (moved from `AGPLExperimental()` to `CoreSubcommands()`) - Drop the `agent` alias so it does not collide with the hidden workspace-agent command - Rename implementation files `cli/exp_agents_*.go` -> `cli/agents_*.go` and internal identifiers (`expChatsTUIModel` -> `chatsTUIModel`, `newExpChatsTUIModel` -> `newChatsTUIModel`, `setupExpAgentsBackend` -> `setupAgentsBackend`, `startExpAgentsSession` -> `startAgentsSession`, `expAgentsPtr` -> `agentsPtr`, `expAgentsSession` -> `agentsSession`, `TestExpAgents*` -> `TestAgents*`). `expClient` (the `*codersdk.ExperimentalClient` local) is kept; `coderd/exp_chats*.go` and other still-experimental `cli/exp_*.go` commands are intentionally untouched. **Frontend:** - Remove experiment check from `AgentsNavItem` - render when `canCreateChat` is true - Remove `agentsEnabled` experiment check from `WorkspacesPage`, then gate `chatsByWorkspace` on `permissions.createChat` so users without chat access don't trigger the per-page DB query (Copilot review feedback) - Add `FeatureStageBadge` (beta) next to the Coder logo in the Agents sidebar (desktop + mobile) **Docs:** - Remove experiment flag setup instructions from `early-access.md` and `getting-started.md` (and rename `early-access.md`'s "Enable Coder Agents" heading to "Set up Coder Agents", since there is no enablement step left) - Update `chats-api.md` and `getting-started.md`'s Chats API note to say "beta" instead of "experimental" - `docs/manifest.json`: drop "experimental" from the Chats API sidebar description - `make gen` regenerated `docs/reference/cli/agents.md` and the CLI index - `scripts/check_emdash.sh`: exclude `cli/testdata/*.golden` and `enterprise/cli/testdata/*.golden` from the new repo-wide emdash lint, since serpent emits emdash borders in every generated `--help` golden file **Tests:** - Remove `ExperimentAgents` setup from all test files (14 occurrences across 7 files) - Update stale "with the agents experiment" comments in `coderd/x/chatd/integration_test.go` and `coderd/mcp_test.go` <img width="1185" height="900" alt="image" src="https://github.com/user-attachments/assets/b420bc8f-41d6-42c6-abd8-ad572533d651" /> > 🤖 Generated by Coder Agents |
||
|
|
b975262a97 |
fix(site): remove Request Logs from admin menu, redirect /aibridge to sessions (#24840)
*Disclaimer: implemented by a Coder Agent using Claude Opus 4.6* Remove the "AI Bridge Logs" menu item from the Admin settings dropdown, keeping only the "AI Bridge Sessions" link. The `/aibridge` index now redirects to `/aibridge/sessions` instead of `/aibridge/request-logs`. The request-logs route and view remain accessible via direct URL (`/aibridge/request-logs`) for users who still need it. Fixes https://linear.app/codercom/issue/AIGOV-205 <details><summary>Changes</summary> - `DeploymentDropdown.tsx`: Removed "AI Bridge Logs" menu item; the `canViewAIBridge` block now only renders the "AI Bridge Sessions" link - `router.tsx`: Changed `/aibridge` index redirect from `request-logs` to `/aibridge/sessions` - All request-logs page files, route, and components are preserved for direct URL access </details> |