mirror of
https://github.com/coder/coder.git
synced 2026-09-21 20:51:01 +08:00
ac8cda66f7e076ca707efc4eec18f606b7d12401
15145
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ac8cda66f7 |
feat: make Coder Agents right sidebar app and port tabs generally available (#26906)
The workspace-app and port preview tabs in the Coder Agents right panel were gated behind the `agent-app-tabs` deployment experiment. This removes the experiment entirely and renders the app and port tabs unconditionally, so the add-panel dropdown, workspace-app tabs, and port preview tabs are always available alongside terminals. ## Changes - Remove the `ExperimentAgentAppTabs` constant, its `DisplayName()` case, and its `ExperimentsKnown` registration in `codersdk/deployment.go`, then regenerate `site/src/api/typesGenerated.ts`, `coderd/apidoc/docs.go`, `coderd/apidoc/swagger.json`, and `docs/reference/api/schemas.md`. - Drop the frontend experiment gate in `AgentChatPageView.tsx` (including the now-unused `useDashboard`/`experiments` usage) so persisted app and port tabs are no longer filtered out. - Remove the `appExperimentEnabled` prop from `RightPanelAddTabControl` and render the add-panel dropdown unconditionally; update the stories accordingly. This reverses the gating introduced in #26395. note: the diff is tiny if you hide whitespace changes |
||
|
|
cb1a87b9c0 |
fix(site): stop click propagation so popover opens inside clickable rows (#26875)
> 🤖 This PR was written by Coder Agents on behalf of Jake Howell. <img width="628" height="353" alt="image" src="https://github.com/user-attachments/assets/16fbf58f-282a-4629-b0de-45160117adb6" /> Linear: [DES-22051](https://linear.app/codercom/issue/DES-22051/adjust-workspace-list-icon-and-agent-link-affordance) ## Problem [#23374](https://github.com/coder/coder/pull/23374) swapped the underlying `Tooltip` for a `Popover` under the `HelpTooltip` → `HelpPopover` rename, turning the trigger from a hover surface into a click surface. On the workspaces list, `WorkspaceOutdatedTooltip` is rendered inside a `<TableRow>` wired up by `useClickableTableRow`, whose `onClick` navigates to the workspace page. Other interactive children in the same row already stop propagation (checkbox, actions cell, agent badge). The outdated tooltip didn't, so clicking the info icon bubbled up to the row's `onClick` and navigated away before the popover could open. ## Fix Stop click and keydown propagation on both trigger variants (`HelpPopoverTrigger asChild` span and `HelpPopoverIconTrigger`) in `WorkspaceOutdatedTooltip`. The popover still opens because Radix composes its own click handler on top of the user-provided one via `composeEventHandlers`; `stopPropagation()` does not set `defaultPrevented`, so Radix's toggle still runs. ## Regression coverage Added an `InsideClickableRow` story that mounts the tooltip inside a `useClickableTableRow` row with a tracked `onRowClick`, clicks the trigger, asserts the popover dialog opens, and asserts `onRowClick` was not called. Verified locally that the new story fails on `main` (1 call to `onRowClick`) and passes with this fix. <details> <summary>Decision log</summary> - Fix lives on the component (rather than at the `WorkspacesTable.tsx` call site) so every consumer is safe by default. The popover is interactive in a way the parent shouldn't have to know about, and the existing call site in `TaskPage.tsx` is unaffected because its parent has no click handler. - `onKeyDown` propagation is also stopped so the trigger keeps working when activated via keyboard, and to satisfy `lint/a11y/useKeyWithClickEvents` on the `<span>` trigger variant. - Considered pushing the guard down into the `HelpPopoverIconTrigger` / `HelpPopover` primitives so every consumer is covered — left as a separate follow-up since today only `WorkspaceOutdatedTooltip` is embedded in a `useClickableTableRow` row, and a blanket change would need a broader audit. </details> |
||
|
|
b341ce63fb |
fix(site/e2e): close mock external-auth servers in teardown (#26575)
> 🤖 This PR was written by Coder Agents on behalf of Jake Howell. Stack: 1. #26575 `fix(site/e2e): close mock external-auth servers in teardown` ← this PR 2. #26793 `fix(site/e2e): accept 404 from external auth reset hook` 3. #26795 `fix(site/src): refresh provider state after device-flow exchange` 4. #26798 `fix(site/e2e): reset both providers in external auth hook` 5. #26648 `chore(site/e2e): re-enable externalAuth suite` The externalAuth e2e suite has been skipped since #17235 because `createServer` in `site/e2e/helpers.ts` started an express server but never gave callers a way to close it. On retries or repeated runs, the listener from the previous invocation was still bound to the hardcoded port and the next `beforeAll` failed with `EADDRINUSE`, eventually timing out in `waitForPort`. `createServer` now returns a `{ app, close }` pair. The web flow closes in `afterAll`; the device flow uses `try/finally`. `closeAllConnections()` is called before `close()` so teardown stays bounded if keep-alive connections linger. The suite remains `test.describe.skip` here; #26648 flips the skip off once the rest of the stack is in. Refs https://linear.app/codercom/issue/DEVEX-413 Refs https://github.com/coder/internal/issues/356 <details> <summary>Decision log</summary> Discussed the full options list with @jakehwll before drafting. Picked option A (minimal teardown) because: - Two prior PRs (#15537, #16528) attacked symptoms (port probing, longer timeout) without addressing the leaked listener. - Kayla's diagnosis on coder/internal#356 pointed at exactly this case: nothing else in CI is grabbing the port, the listener from the previous run is still bound. - A is mechanical and orthogonal: it adds a real teardown without changing port allocation, fixture wiring, or what gets mocked. If the flake persists after A, we know to escalate to a worker-scoped fixture or dynamically allocated ports. Returning `close` rather than the raw `http.Server` encapsulates the `closeAllConnections` + `close` choreography so callers don't repeat it. `closeAllConnections` is optional-chained because it landed in Node 18.2; coder/coder runs newer, but the chain costs nothing. The device test uses `try/finally` rather than a shared `afterEach` to keep per-test state local. The web flow's `afterAll` mirrors its `beforeAll`. </details> |
||
|
|
a73e677639 |
fix: several UI fixes for Template Builder (#26903)
- Module selection summary now has `rounded-sm` corners to fit the icon - Modules without configuration now say so with a check mark - Correct "Additional settings" label |
||
|
|
c56a8f1d99 |
feat(site/src/pages/TemplateBuilder): add scroll overflow and sticky sidebar to wizard steps (#26881)
Add vertical overflow scrolling to the TemplateBuilder wizard step
content areas and make the selection sidebar sticky.
## Changes
- **Scroll on inner content**: Each step's inner content area (below the
heading and any tabs/search) gets `max-h-[calc(100vh-Npx)]
overflow-y-auto`, keeping headings and tab bars visible while the
content scrolls.
- Base template select and module select grids: 420px offset (accounts
for navbar, page header, card padding, tab bar, and nav controls)
- Base template parameters and module settings: 340px offset
- Customizations step: no scroll, flows naturally
- **Sticky sidebar**: The selection summary sidebar uses `sticky top-0
self-start` to stay visible while scrolling.
- **Scroll reset on navigation**: `window.scrollTo(0, 0)` in
Back/Continue handlers so users start at the top of each step.
> 🤖 Generated by Coder Agents
<details><summary>Implementation plan</summary>
The approach uses `max-h` with `overflow-y-auto` on the inner content
divs of each step component, placed below the step heading and any
tabs/search controls. This keeps the heading fixed while the content
scrolls. The offset values account for the vertical space consumed by
the navbar, page header, card border/padding, and navigation controls.
The `DashboardFullPage` flex-fill approach was explored but abandoned
because the viewport-constrained card was too short to show content on
smaller screens. The standard `Margins` + `pb-12` layout with per-step
`max-h` provides a better balance.
</details>
|
||
|
|
3d966d48b5 |
fix(coderd/templatebuilder): fix archive bundling for nested static files and counted agents (#26901)
Fixes two template builder bugs that caused AWS EC2 (Linux) template imports to fail: 1. **Missing directory entries in tar archive**: `BundleTar` wrote static files with nested paths (e.g. `cloud-init/cloud-config.yaml.tftpl`) without emitting `TypeDir` entries for parent directories. The provisioner's archive extractor requires explicit directory entries and failed with "no such file or directory". 2. **Incorrect agent reference for counted resources**: `ExtractAgentResourceName` returned `dev` for the AWS Linux base template, but the agent uses `count = data.coder_workspace.me.start_count`, so module templates need `coder_agent.dev[0].id`. The function now detects `count`/`for_each` and appends `[0]`. > [!NOTE] > Generated by Coder Agents (on behalf of @jeremyruppel) |
||
|
|
15d4eb9db8 |
feat(site): use template/module config variable's default value as its field placeholder if present (#26880)
closes DEVEX-543
Previously, templates'/modules' config variables' input fields would
just display Required/Optional as placeholder text. Now we show the
field's default value as a placeholder if defined
([example](https://github.com/coder/coder/blob/496c0576ca6bfbf3ba4b8d470cd320549f7fc6d1/coderd/templatebuilder/modules/aider/module.json#L30)),
falling back to Required/Optional if there's no default defined.
|
||
|
|
a48ace5017 |
fix(coderd/templatebuilder): include Terraform diagnostics in import errors (#26677)
`ClassifyProvisionerError` previously returned only the raw job error string (e.g. "terraform plan: exit status 1") for unrecognized failures, discarding the provisioner log lines it already had. This made template import errors in the builder unactionable. Now the function extracts Terraform diagnostic blocks (Error:/Warning: lines and their context) from the provisioner logs and appends them to the error detail. This surfaces the actual failure cause (missing credentials, invalid references, unsupported blocks) in the ErrorAlert banner. Changes: - `extractDiagnostics` parses Terraform diagnostic blocks from log output, capped at 20 lines with a truncation marker - Auth error classification for AWS, GCP, Azure credential failures with a targeted user-facing message - Case-insensitive pattern matching via `strings.ToLower` on the combined text - Auth branch guarded against empty diagnostics (no trailing `\n\n`) > [!NOTE] > This PR was authored by Coder Agents on behalf of @jeremyruppel. |
||
|
|
c40b3b9bcb |
feat: add base templates for all major cloud providers (#26634)
Add 6 new base templates to the template builder, covering all major cloud providers and platforms: - **scratch**: Minimal starter template with only `coder_agent` and metadata - **aws-windows**: AWS EC2 Windows instances with PowerShell user_data - **azure-linux**: Azure VMs with cloud-init and managed disk persistence - **gcp-linux**: Google Compute Engine Linux instances with persistent disk - **gcp-windows**: Google Compute Engine Windows instances - **digitalocean-linux**: DigitalOcean Linux droplets with persistent volumes Each base includes `base.json`, `main.tf.tmpl`, `README.md` (with prerequisite markers), and any static files (cloud-init configs). Tests verify all 9 bases load, render without error, and produce valid single-agent declarations. `azure-windows` is deferred; it needs to be registered in the `examples` package first. Depends on #26633 > [!NOTE] > This PR was authored by Coder Agents on behalf of @jeremyruppel. --- NB: This is very much an agent-generated PR and draws completely from base templates that exist in `examples/templates/`. The base.json files are new, so review those, but don't spend any brain tokens on the correctness of the terraform and supporting files: any issues there are issues with the upstream example template |
||
|
|
6f0b81cfbc |
feat(coderd/templatebuilder): validation extraction, static file bundling, Windows OS (#26633)
Extract validation helpers to a dedicated file, add static file bundling for base templates, and add Windows OS support. **Commit 1: Extract validation to `validate.go`** Move `validateVariableValue`, `validateStringValue`, `validateNumberValue`, `validateBoolValue`, `toHCLLiteral`, `hclQuote`, and `isSimpleJSONValue` from `compose.go` into `validate.go`. Corresponding tests move to `validate_internal_test.go`. This keeps `compose.go` focused on the compose pipeline. **Commit 2: Static file bundling** Add `StaticFiles` field to `ComposeResult` and a `collectStaticFiles` helper that walks the base template FS to collect non-template files (e.g. cloud-init `.tftpl` inputs). `BundleTar` now writes these files into the output archive in sorted order for deterministic output. This fixes `aws-linux`, whose cloud-init files were embedded but never included in the tar. **Commit 3: Windows OS support** Add `BaseOSWindows` constant and register `"windows"` in `validBaseOS` so that base templates with `os="windows"` can be loaded and used for module compatibility filtering. > [!NOTE] > This PR was authored by Coder Agents on behalf of @jeremyruppel. |
||
|
|
2ea0d5f8ef |
docs: add a Customize your template series under Get started (#26712)
## What Adds a **Customize your template** series under the top-level **Get started** section, at `docs/get-started/customize-your-template/`. These guides extend the single-page Quickstart (added in #26821) with hands-on template customization: - **Add a programming language** — expose a language through a parameter, install it at startup, and offer it as a preset. - **Install your own command-line tools** — install personal tools with Homebrew and mise, and make them persist. - **Clone private repositories** — authenticate workspaces to GitHub with an external-auth data source. ## Changes from the earlier draft This branch was rebased onto the consolidated `/docs/get-started` structure: - Re-homed the series from `tutorials/quickstart/` to `get-started/customize-your-template/`, nested under the new Get started section. - Dropped the Part 1 launch page and the old landing page; the merged Quickstart (`get-started/index.md`, #26821) already covers them. - Archived the dotfiles guide out of the series (tracked as a follow-up to document the dotfiles module as a standalone tutorial) and removed its inbound links. - Renamed the section to **Customize your template**. - Added a Ruby **preset** alongside the Ruby parameter so the parameter and preset choices stay in sync. - Fixed the parameter-change steps to route through **Workspace settings > Parameters**. - Gave each page a **What's next?** step so the series reads as a sequence. ## Still open / follow-ups - Screenshots for the UI steps (handled separately). - The launch step will be revised after the template-builder change ships in the next mainline release. <details> <summary>Decision log</summary> - **Why re-home, not keep `tutorials/quickstart/`:** the Quickstart now lives at `/docs/get-started`, so the series belongs under the same top-level section for a single, coherent entry point. - **Why drop Part 1 here:** the launch content already merged as `get-started/index.md` in #26821; keeping a second copy would duplicate and drift. - **Why archive dotfiles:** it works better as a standalone module tutorial than as a Quickstart step; removed from the series for now and tracked for later. - **Final code fixtures** stay scoped per guide (base template plus that page's edit), so only the language guide's fixture gains the Ruby option and preset. </details> --- Generated by Coder Agents on behalf of @nickvigilante. |
||
|
|
6b8c38b5a4 | fix: gate chat advisor and virtual desktop behind experiments, delete experiments page (#26809) | ||
|
|
dcb120d6ab |
feat: add --no-wildcard flag to coder config-ssh (#26753)
Add `--no-wildcard` (`CODER_CONFIGSSH_NO_WILDCARD`) to `coder config-ssh` that generates an individual `Host` entry per workspace instead of a single wildcard block (`Host *.coder`). The wildcard approach cannot be enumerated by third-party SSH clients, the VS Code Remote-SSH sidebar, or scripts that parse `~/.ssh/config` to discover hosts. With `--no-wildcard`, each workspace gets its own entry so those tools work without Coder-specific extensions. The flag is persisted in the config section header so re-running without it prompts the user about the option change. Workspaces are fetched with pagination before writing so the diff shows actual hostnames. ## Manual testing **Unit tests (no server needed):** ```sh go test ./cli/ -run TestSSHConfigOptions_writeToBuffer -v go test ./cli/ -run TestConfigSSH_NoWildcard -v ``` **End-to-end with a dev server:** 1. Build: `go build -o ./coder .` 2. Start dev server in a separate terminal: `./scripts/develop.sh` 3. Log in: `./coder login http://localhost:3000` 4. Create two workspaces 5. Run both variants into temp files: ```sh ./coder config-ssh --no-wildcard --hostname-suffix coder --ssh-config-file /tmp/test-ssh-config --yes ./coder config-ssh --hostname-suffix coder --ssh-config-file /tmp/test-ssh-config-wildcard --yes diff /tmp/test-ssh-config-wildcard /tmp/test-ssh-config ``` <details> <summary>Output: <code>--no-wildcard</code></summary> ``` # ------------START-CODER----------- # This section is managed by coder. DO NOT EDIT. # # You should not hand-edit this section unless you are removing it, all # changes will be lost when running "coder config-ssh". # # Last config-ssh options: # :hostname-suffix=coder # :no-wildcard=true # Host coder.myworkspace ConnectTimeout=0 StrictHostKeyChecking=no UserKnownHostsFile=/dev/null LogLevel ERROR ProxyCommand <coder> --global-config <config> ssh --stdio --ssh-host-prefix coder. %h Host coder.myworkspace2 ConnectTimeout=0 StrictHostKeyChecking=no UserKnownHostsFile=/dev/null LogLevel ERROR ProxyCommand <coder> --global-config <config> ssh --stdio --ssh-host-prefix coder. %h Host myworkspace.coder ConnectTimeout=0 StrictHostKeyChecking=no UserKnownHostsFile=/dev/null LogLevel ERROR Match host myworkspace.coder !exec "<coder> connect exists %h" ProxyCommand <coder> --global-config <config> ssh --stdio --hostname-suffix coder %h Host myworkspace2.coder ConnectTimeout=0 StrictHostKeyChecking=no UserKnownHostsFile=/dev/null LogLevel ERROR Match host myworkspace2.coder !exec "<coder> connect exists %h" ProxyCommand <coder> --global-config <config> ssh --stdio --hostname-suffix coder %h # ------------END-CODER------------ ``` </details> <details> <summary>Output: wildcard (default)</summary> ``` # ------------START-CODER----------- # This section is managed by coder. DO NOT EDIT. # # You should not hand-edit this section unless you are removing it, all # changes will be lost when running "coder config-ssh". # # Last config-ssh options: # :hostname-suffix=coder # Host coder.* ConnectTimeout=0 StrictHostKeyChecking=no UserKnownHostsFile=/dev/null LogLevel ERROR ProxyCommand <coder> --global-config <config> ssh --stdio --ssh-host-prefix coder. %h Host *.coder ConnectTimeout=0 StrictHostKeyChecking=no UserKnownHostsFile=/dev/null LogLevel ERROR Match host *.coder !exec "<coder> connect exists %h" ProxyCommand <coder> --global-config <config> ssh --stdio --hostname-suffix coder %h # ------------END-CODER------------ ``` </details> <details> <summary>diff wildcard → --no-wildcard</summary> ```diff 8a9 > # :no-wildcard=true 10c11 < Host coder.* --- > Host coder.myworkspace 17c18 < Host *.coder --- > Host coder.myworkspace2 21a23 > ProxyCommand <coder> ssh --stdio --ssh-host-prefix coder. %h 23c25,31 < Match host *.coder !exec "<coder> connect exists %h" --- > Host myworkspace.coder > ConnectTimeout=0 > StrictHostKeyChecking=no > UserKnownHostsFile=/dev/null > LogLevel ERROR > > Match host myworkspace.coder !exec "<coder> connect exists %h" ``` </details> Closes https://github.com/coder/coder/issues/17153 (Phase 1: CLI flag) |
||
|
|
7baf0d4a9a |
fix(site): restore missing avatar padding from TemplateBuilderAvatarData (#26884)
fixes DEVEX-568 The `Avatar` variant I actually wanted for `TemplateBuilderAvatarData` during #26776 was the compound one with both `size="lg" variant="icon"`, which includes padding: https://github.com/coder/coder/blob/2be540e469677e716d48612a5f5d078a8eb35bce/site/src/components/Avatar/Avatar.tsx#L35-L40 Using `Avatar` for `TemplateCard`/`ModuleCard` also ensures that those components display a theme-appropriate icon image, i.e., light on dark / dark on light. |
||
|
|
3c889fb384 |
fix(site/src/pages/AgentsPage): normalize chat menus to a kebab icon and matching items (#26588)
The chat title menu used a horizontal ellipsis (meatball) and a different set of items than the sidebar chat-row menu. Designers asked to normalize both menus on the sidebar shape since the sidebar is the more recent design. The chat top bar now uses the same `EllipsisVerticalIcon` (kebab) as the sidebar row and exposes the same items in the same order: Pin/Unpin agent, Rename chat, Archive agent, and Archive & delete workspace. Labels are sentence case throughout. The standalone "Generate new title" item is removed because the rename dialog's Generate button covers the same workflow, which is what the sidebar already exposes. The kebab now sits inline with the title rather than off to the right, so it reads as a title menu instead of a global action. Both menus render from a single `ChatActionsMenuItems` component so they cannot drift in the future. The shared component is polymorphic over `Item` and `Separator`, which lets the sidebar drive both its kebab (`DropdownMenu`) and its right-click context menu (`ContextMenu`) from the same JSX. <details> <summary>Implementation notes</summary> - `ChatActionsMenuItems.tsx`: new shared component. Renders the Pin/Unpin, Rename, Archive, Archive & delete workspace, and Unarchive items off a flat set of flags (`isArchived`, `isPinned`, `isChildChat`, `hasWorkspace`, `isArchiving`) and zero-arg handlers, plus polymorphic `Item`/`Separator` components. - `ChatTopBar.tsx`: replace the inline `EllipsisIcon` + duplicated dropdown body with the kebab trigger and a `<ChatActionsMenuItems>` call. Move the dropdown trigger into the title area so it sits next to the title text; switch `DropdownMenuContent` to `align="start"` so the menu opens flush with the trigger's left edge. Replace the old `onRegenerateTitle`/`isRegenerateTitleDisabled` props with `onPinAgent`, `onUnpinAgent`, `onOpenRenameDialog`, `isPinned`, and `isChildChat`. - `ChatTreeNode.tsx`: delete the inline `renderMenuItems` helper and call `<ChatActionsMenuItems>` from both the `DropdownMenuContent` and the `ContextMenuContent`. Pin handlers are pre-bound to `chat.id`; `onOpenRenameDialog` is pre-bound to the chat object. - `AgentsPageView.tsx`: lift the rename-chat dialog state up here and expose it through `AgentsOutletContext.onOpenRenameDialog`, so the sidebar row menu and the chat top bar open the same dialog instance. - `ChatsSidebar.tsx`: accept optional controlled `chatPendingRename`/`onChatPendingRenameChange` props with internal-state fallback (controlled-or-uncontrolled pattern). Existing stories and tests are untouched. - `AgentChatPage.tsx`: consume `requestPinAgent`, `requestUnpinAgent`, and `onOpenRenameDialog` from the outlet context, and pass new `handlePinAgentAction`, `handleUnpinAgentAction`, `handleOpenRenameDialog`, `isPinned`, and `isChildChat` props through `AgentChatPageView` to the top bar. - Stories: `ChatTopBar.stories.tsx` replaces the `GenerateTitle` story with `RenameChatItem`, `PinAgentItem`, `UnpinAgentItem`, and `ChildChatHidesPinAction`. Updated label expectations to sentence case across stories. `AgentChatPage.stories.tsx` updated for the new "Archive agent" label. </details> <details> <summary>Decision log</summary> - **Source of truth.** Per the designer, the sidebar menu is the canonical list; the chat title menu is what should change. - **One menu body.** A shared `ChatActionsMenuItems` component drives both menus so they cannot drift. Reviewers only need to read the menu items once. - **Icon parity.** Both menus now use `EllipsisVerticalIcon` (kebab). The old meatball was the only `EllipsisIcon` use in this surface. - **Kebab position.** Moved next to the title so the kebab reads as a per-chat action against the title, not a global top-bar action. Share and Toggle-panel stay on the right of the bar. - **"Generate new title" removed, not preserved as extra.** Keeping it would have re-introduced the inconsistency the designer is asking to remove. The rename dialog's Generate button already runs the propose flow and lets the user accept or edit the suggestion. The auto-regenerate code path (`requestRegenerateTitle`, `regeneratingTitleChatIds`, the title spinner) is left in place because removing it expands the diff and the regenerate plumbing may be re-used; only the menu trigger is gone. - **Single dialog instance.** Two separate `RenameChatDialog` instances would have worked, but lifting the state to `AgentsPageView` keeps a single source of truth and lets the top bar open the dialog the user already knows. `ChatsSidebar` keeps internal-state fallback so existing stories and tests do not need to thread state. - **`isChildChat`.** Pin/Unpin is hidden for child chats to match `ChatTreeNode`, which only renders the Pin item when `!isChildNode`. </details> <sub>Opened by Coder Agents on behalf of @tracyjohnsonux.</sub> |
||
|
|
2be540e469 |
feat(site/src/pages/AISettingsPage/ModelsPage): add search and provider filter to models list (#26683)
Adds a search input and provider filter dropdown above the Models table on `/ai/settings/models`, and moves the `Default` badge to sit beside the model name. ## Changes - **Search**: text input matches against model display name, model identifier, and provider label (case-insensitive). - **Provider filter**: select dropdown listing every configured provider, plus an `All providers` default. - Filters apply before pagination and reset to page one when changed. - New empty state when filters return no matches. - Pagination footer now shows the filtered total, with `(filtered from N)` when filters are active. - `Default` badge moved from the Status column to inline next to the model name. - Stories cover the new search, provider filter, and no-match empty state. ## Screenshots Please see the Storybook stories under `pages/AISettingsPage/ModelsPage/ModelsPageView` for `Default`, `SearchByName`, `FilterByProvider`, and `NoMatchingModels`. ## Verification - `pnpm --dir site exec biome check src/pages/AISettingsPage/ModelsPage/` - `pnpm --dir site exec tsc -p . --noEmit` - `pnpm --dir site test:storybook -- --project=chromium src/pages/AISettingsPage/ModelsPage/` (8/8 ModelsPageView stories pass; the unrelated `MCP Tool Completed` failure under `AgentsPage/components/ChatElements` reproduces on `main`) --- > [!NOTE] > Opened by Coder Agents on behalf of @tracyjohnsonux. |
||
|
|
377c1309b7 |
chore: hide AI Gateway key management UI/CLI/API (#26879)
Hides UI, CLI and API related to AI Gateway key management + `/api/v2/ai-gateway/serve` endpoint. API endpoints and CLI commands are still working they are just not visible. |
||
|
|
22d9eaa4e4 |
fix(cli): increase agent log backups (#26863)
The agent log rotation kept only about 55 MiB on disk, which could fall short of the 24h support bundle lookback during high-volume debug logging. Increase the retained `coder-agent.log` rotations from 10 to 19 so the active log plus rotations align with the existing 100 MiB debug logs response cap. Closes #26737 |
||
|
|
6b297912a5 |
feat(site): add AI spend to user dropdown (#26698)
Adds the current user's AI spend progress to the top navbar avatar dropdown when /api/v2/users/me/ai/spend reports a configured spend limit. The shared dropdown content accepts an optional profileExtra slot so the Agents sidebar can opt in later without changing the default sidebar UI. Introduces a temporary site API type and a React Query helper for AIGOV-473 that refetches each time the dropdown opens, plus shared budget progress helpers used by both the new dropdown bar and the existing Agents usage indicator. The shared AIBudgetUsage component moves to site/src/components so the dropdown and group budget UI format spend identically, including the unlimited case. The avatar border polls the spend endpoint and is colored by severity while the dropdown is closed. Closes AIGOV-473 |
||
|
|
496c0576ca | fix(site): rename model action to Set as Coder Agents default model (#26872) | ||
|
|
7234b5667b | fix(site): autosave personal model overrides toggle (#26871) | ||
|
|
a153b77fa5 |
feat(site/src/pages/TemplateBuilder): add alternatives box to base template step (#26878)
Adds an "Alternatives to create a template" section below the navigation controls on the base infrastructure selection step of the Template Builder wizard. The box is only shown on the first step and contains four outline buttons linking to other template creation paths: - **Start from scratch** -> Coder docs tutorial (external) - **Upload an existing template** -> `/starter-templates` (internal) - **Browse community templates** -> Registry templates (external) - **Use template agent skill** -> Registry skills (external) External links open in a new tab with an external-link icon. Closes [DEVEX-564](https://linear.app/codercom/issue/DEVEX-564) > [!NOTE] > This PR was authored by Coder Agents on behalf of @jeremyruppel. <details> <summary>Implementation plan</summary> ### 1. `TemplateAlternatives.tsx` (new) - Presentational component rendering a bordered container with label and four `Button` components (variant `outline`, size `sm`) - External links use `ExternalLinkIcon` from lucide-react and open in `_blank` - Internal link uses React Router `Link` ### 2. `TemplateBuilderPageView.tsx` (modified) - Import and render `<TemplateAlternatives />` below navigation controls, conditionally when `currentStep.id === "base-infra"` ### 3. `TemplateAlternatives.stories.tsx` (new) - Default Storybook story for the component </details> |
||
|
|
2fd5ae4323 |
fix: stop Agents dead-ending on unsupported providers (#26841)
Configuring only a GitHub Copilot provider left the Agents page stuck on "set up a provider then add a model", even with a provider and models configured. The catalog dropped any provider type that NormalizeProvider did not recognize, so a Copilot-only deployment looked identical to an empty one and never unlocked the page. The Agents harness cannot use Copilot: it needs a per-request token only an official Copilot client can mint, and the harness is not one. Instead of dropping such providers, the catalog now reports them as unsupported so the UI can explain the dead end and point elsewhere, rather than ask for setup that already happened. The providers stay usable through the AI Gateway proxy. Support is derived from the provider type, not stored, so there is no migration. codersdk.IsAgentsUnsupportedProviderType is the single source of truth, consulted by the chatd catalog and, through the generated AgentsUnsupportedProviderTypes list, the frontend. The diff also carries unrelated modernization of nearby db2sdk and chatprovider helpers (slices.SortFunc, strings.Cut, range-over-int). Closes CODAGT-627 Refs CODAGT-256 Refs CODAGT-682 |
||
|
|
a79fcd34af |
feat: implement <WorkspaceDeletedBanner /> on <WorkspaceBuildPage /> (#25664)
Closes #24731 This pull-request attempts to pull the workspace when it has been deleted, as to not show a generic error on the `<WorkspaceBuildPage />`. This secondary query for the workspace is only initiated if we get an error from the build itself, this is to ascertain if there actually was a workspace here previously or if we are actually 404ing. Future improvements might be to `410 Gone` these workspaces/builds. |
||
|
|
608bc6e837 |
fix(scripts/oauth2): fix test-mcp-oauth2.sh for macOS and OAuth 2.1 compliance (#26825)
The `test-mcp-oauth2.sh` script had three bugs that caused tests 2, 3, and 4 to fail when run on macOS. `grep -oP` uses PCRE lookbehind (`\K`), which is not supported by BSD grep on macOS. Replaced with `grep -oE … | sed 's/code=//'` which works on both platforms. The token exchange requests in tests 2, 3, and 4 omitted `redirect_uri`, which is required by RFC 6749 §4.1.3 whenever `redirect_uri` was included in the authorization request. The server correctly rejects these with `invalid_grant`, masking the actual PKCE validation. Test 4's resource parameter flow was missing PKCE parameters entirely. The server enforces PKCE on all authorization code flows per OAuth 2.1, so the authorization request returned 400 and the script exited silently due to `set -euo pipefail`. |
||
|
|
d219f96ba5 |
fix(cli): join MCP reporter and watcher goroutines before exit (#26847)
## Problem `TestExpMcpReporter/Reconnect` flakes under the race detector with a data race on the shared `*serpent.Invocation`'s `inv.Stderr` field. The MCP server's reporter and watcher goroutines write status warnings via `cliui.Warnf(inv.Stderr, ...)`, but they were launched fire-and-forget with nothing tying their lifetime to the command handler. On shutdown, `startServer`'s deferred restore of `inv.Stdin/Stdout/Stderr` could run concurrently with a still-running goroutine reading `inv.Stderr`, which the race detector flags. The reporter's error suppression only swallows `context.Canceled`, so a shutdown error from an in-flight `UpdateAppStatus` RPC (a drpc "closed" error, not `context.Canceled`) reaches the `Warnf` call and races the restore. ## Fix Track the reporter and watcher goroutines on a `sync.WaitGroup`. After `startServer` returns, cancel the context, close the queue and socket client, then `wg.Wait()` for the goroutines to exit before returning. All three unblocks are needed: cancel stops the watcher retry loop and a reporter blocked on `Pop`, `queue.Close` also unblocks `Pop`, and `socketClient.Close` unblocks a reporter parked in an in-flight RPC. This also removes the stdin/stdout/stderr save/restore in `startServer`, which only ever wrote back identical values and was the racing write. This mirrors the existing precedent in `cli/ssh.go`, where a `sync.WaitGroup` guards against "logging while closing the log file in a defer." Verified with `go test ./cli -run 'TestExpMcpReporter/Reconnect' -race -count=50` (the reproducer from the issue) plus a 240-execution parallel stress run of the full `TestExpMcp` suite under `-race`, all green. Closes CODAGT-710 Closes https://github.com/coder/internal/issues/1610 |
||
|
|
d179266cc7 |
feat: capture, persist, and strip Agent Firewall correlation headers in AI Bridge (#26529)
Wire the Agent Firewall correlation headers (`X-Coder-Agent-Firewall-Session-Id` and `X-Coder-Agent-Firewall-Sequence-Number`) through the AI Bridge interception processor so that each interception is linked to its originating firewall session. Closes https://linear.app/codercom/issue/AIGOV-259 > Generated by Coder Agents on behalf of @SasSwart **Data flow:** `request header` → `bridge.go` reads + strips → `InterceptionRecord` → `translator.go` → proto `RecordInterceptionRequest` → `aibridgedserver.go` → DB |
||
|
|
681d77154b |
chore: bump github.com/valyala/fasthttp from 1.71.0 to 1.72.0 (#26859)
Bumps [github.com/valyala/fasthttp](https://github.com/valyala/fasthttp) from 1.71.0 to 1.72.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/valyala/fasthttp/releases">github.com/valyala/fasthttp's releases</a>.</em></p> <blockquote> <h2>v1.72.0</h2> <h2>What's Changed</h2> <ul> <li>Update to go1.25 as minimal version by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2205">valyala/fasthttp#2205</a></li> <li>client: add aggregate connection count metrics by <a href="https://github.com/z9z"><code>@z9z</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2201">valyala/fasthttp#2201</a></li> <li>fix(server): return ErrMissingFile when MultipartForm.File is nil by <a href="https://github.com/u5surf"><code>@u5surf</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2260">valyala/fasthttp#2260</a></li> <li>bug: FS cache cleaner goroutine leaks when CleanStop is nil (default) (<a href="https://redirect.github.com/valyala/fasthttp/issues/2218">#2218</a>), <a href="https://redirect.github.com/valyala/fasthttp/issues/2247">#2247</a> by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2271">valyala/fasthttp#2271</a></li> <li>bug: data race on pipeline client c.chR during worker drain (<a href="https://redirect.github.com/valyala/fasthttp/issues/2220">#2220</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2272">valyala/fasthttp#2272</a></li> <li>bug: TCPDialer.tcpAddrsClean() goroutine leaks — no shutdown mechanism (<a href="https://redirect.github.com/valyala/fasthttp/issues/2222">#2222</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2273">valyala/fasthttp#2273</a></li> <li>bug: double concurrency counter increment in ServeConn causes counter leak (<a href="https://redirect.github.com/valyala/fasthttp/issues/2238">#2238</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2275">valyala/fasthttp#2275</a></li> <li>bug: body stream leak in compression methods when response is discarded (<a href="https://redirect.github.com/valyala/fasthttp/issues/2244">#2244</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2276">valyala/fasthttp#2276</a></li> <li>bug: InMemoryListener deadlock under high concurrency (<a href="https://redirect.github.com/valyala/fasthttp/issues/2245">#2245</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2277">valyala/fasthttp#2277</a></li> <li>bug: fasthttpadaptor writer leak, data race, and crash on handler panic (<a href="https://redirect.github.com/valyala/fasthttp/issues/2246">#2246</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2278">valyala/fasthttp#2278</a></li> <li>bug: fasthttpproxy dialers return nil DialFunc on error, causing panic (<a href="https://redirect.github.com/valyala/fasthttp/issues/2248">#2248</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2279">valyala/fasthttp#2279</a></li> <li>bug: closeIdleConns TOCTOU race with serveConn idle timestamp (<a href="https://redirect.github.com/valyala/fasthttp/issues/2250">#2250</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2280">valyala/fasthttp#2280</a></li> <li>bug: AppendCert/AppendCertEmbed not thread-safe (<a href="https://redirect.github.com/valyala/fasthttp/issues/2251">#2251</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2281">valyala/fasthttp#2281</a></li> <li>bug: SetBodySizePoolLimit data race — plain int written without synchronization (<a href="https://redirect.github.com/valyala/fasthttp/issues/2252">#2252</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2282">valyala/fasthttp#2282</a></li> <li>bug: file descriptor leak in prefork parent process (<a href="https://redirect.github.com/valyala/fasthttp/issues/2253">#2253</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2283">valyala/fasthttp#2283</a></li> <li>security: SO_REUSEADDR on Windows enables port hijacking (<a href="https://redirect.github.com/valyala/fasthttp/issues/2254">#2254</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2284">valyala/fasthttp#2284</a></li> <li>bug: file descriptor leak on z/OS s390x when FcntlInt fails (<a href="https://redirect.github.com/valyala/fasthttp/issues/2255">#2255</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2285">valyala/fasthttp#2285</a></li> <li>bug: filesLockMap grows unboundedly, leaking memory (<a href="https://redirect.github.com/valyala/fasthttp/issues/2256">#2256</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2286">valyala/fasthttp#2286</a></li> <li>security: TLS verification silently disabled for malformed addresses (<a href="https://redirect.github.com/valyala/fasthttp/issues/2236">#2236</a>) by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2274">valyala/fasthttp#2274</a></li> <li>fix(fs): remove temporary file when compression fails by <a href="https://github.com/u5surf"><code>@u5surf</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2264">valyala/fasthttp#2264</a></li> <li>fix double release of streamed client response body by <a href="https://github.com/Mereng"><code>@Mereng</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2211">valyala/fasthttp#2211</a></li> <li>fix(client): switch to GET on 303 redirect per RFC 9110 by <a href="https://github.com/u5surf"><code>@u5surf</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2265">valyala/fasthttp#2265</a></li> <li>ci: re-enable gocritic deferInLoop check for non-test code by <a href="https://github.com/u5surf"><code>@u5surf</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2288">valyala/fasthttp#2288</a></li> <li>Fix flaky race tests by <a href="https://github.com/erikdubbelboer"><code>@erikdubbelboer</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2292">valyala/fasthttp#2292</a></li> <li>fix(lbclient): prevent deadlock when all clients are removed by <a href="https://github.com/u5surf"><code>@u5surf</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2287">valyala/fasthttp#2287</a></li> <li>reject duplicate Content-Length in response header parser by <a href="https://github.com/alhudz"><code>@alhudz</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2294">valyala/fasthttp#2294</a></li> <li>strip cr/lf from header keys in normalizeHeaderKey by <a href="https://github.com/alhudz"><code>@alhudz</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2295">valyala/fasthttp#2295</a></li> <li>fix(client): guard nil waiter in decConnsCount by <a href="https://github.com/SAY-5"><code>@SAY-5</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2266">valyala/fasthttp#2266</a></li> <li>strip semicolons from cookie setters to block attribute injection by <a href="https://github.com/alhudz"><code>@alhudz</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2298">valyala/fasthttp#2298</a></li> <li>feat(prefork): graceful shutdown, leak fixes, hook robustness (re-open of <a href="https://redirect.github.com/valyala/fasthttp/issues/2180">#2180</a> follow-up) by <a href="https://github.com/ReneWerner87"><code>@ReneWerner87</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2199">valyala/fasthttp#2199</a></li> <li>fix: prevent data race on FSCompressedFileSuffixes map by <a href="https://github.com/xbrxr03"><code>@xbrxr03</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2300">valyala/fasthttp#2300</a></li> <li>reject duplicate Transfer-Encoding in request header parser by <a href="https://github.com/alhudz"><code>@alhudz</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2303">valyala/fasthttp#2303</a></li> <li>preserve duplicate request headers in ConvertRequest by <a href="https://github.com/alhudz"><code>@alhudz</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2305">valyala/fasthttp#2305</a></li> <li>fix(server): close listener on serve error in ListenAndServe helpers by <a href="https://github.com/fereidani"><code>@fereidani</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2304">valyala/fasthttp#2304</a></li> <li>validate trailer values in parseTrailer by <a href="https://github.com/alhudz"><code>@alhudz</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2301">valyala/fasthttp#2301</a></li> <li>Avoid default content type for empty requests by <a href="https://github.com/nkgotcode"><code>@nkgotcode</code></a> in <a href="https://redirect.github.com/valyala/fasthttp/pull/2296">valyala/fasthttp#2296</a></li> <li>chore(deps): bump golangci/golangci-lint-action from 9.2.0 to 9.2.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2210">valyala/fasthttp#2210</a></li> <li>chore(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2209">valyala/fasthttp#2209</a></li> <li>chore(deps): bump golang.org/x/sys from 0.44.0 to 0.45.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2208">valyala/fasthttp#2208</a></li> <li>chore(deps): bump golang.org/x/net from 0.54.0 to 0.55.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2207">valyala/fasthttp#2207</a></li> <li>chore(deps): bump securego/gosec from 2.26.1 to 2.27.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2261">valyala/fasthttp#2261</a></li> <li>chore(deps): bump securego/gosec from 2.27.0 to 2.27.1 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2267">valyala/fasthttp#2267</a></li> <li>chore(deps): bump golang.org/x/sys from 0.45.0 to 0.46.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2289">valyala/fasthttp#2289</a></li> <li>chore(deps): bump golang.org/x/crypto from 0.52.0 to 0.53.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2290">valyala/fasthttp#2290</a></li> <li>chore(deps): bump golang.org/x/net from 0.55.0 to 0.56.0 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2291">valyala/fasthttp#2291</a></li> <li>chore(deps): bump actions/checkout from 6 to 7 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/valyala/fasthttp/pull/2297">valyala/fasthttp#2297</a></li> </ul> <h2>New Contributors</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/valyala/fasthttp/commit/37a31d78c5d221b24b9cb6652481b5acd4dd674f"><code>37a31d7</code></a> Avoid default content type for empty requests (<a href="https://redirect.github.com/valyala/fasthttp/issues/2296">#2296</a>)</li> <li><a href="https://github.com/valyala/fasthttp/commit/d93cb94af2c31641d00025140785609ddd746eb3"><code>d93cb94</code></a> validate trailer values in parseTrailer (<a href="https://redirect.github.com/valyala/fasthttp/issues/2301">#2301</a>)</li> <li><a href="https://github.com/valyala/fasthttp/commit/9d21d3546ab1d8422b0b5b2801e46aef568619ce"><code>9d21d35</code></a> Remove unused uint322ip, inline ip2uint32</li> <li><a href="https://github.com/valyala/fasthttp/commit/eb82c9a13addbe488f69cbf530444bb2561fd083"><code>eb82c9a</code></a> Reject invalid cookie values during parsing</li> <li><a href="https://github.com/valyala/fasthttp/commit/598e2e06218dbcaf4da6b3723477effd9d7b6233"><code>598e2e0</code></a> fix(server): close listener on serve error in ListenAndServe helpers (<a href="https://redirect.github.com/valyala/fasthttp/issues/2304">#2304</a>)</li> <li><a href="https://github.com/valyala/fasthttp/commit/134a8fedab6eb02fda4b8d96c48d2a72082d2e0c"><code>134a8fe</code></a> preserve duplicate request headers in ConvertRequest (<a href="https://redirect.github.com/valyala/fasthttp/issues/2305">#2305</a>)</li> <li><a href="https://github.com/valyala/fasthttp/commit/7bca504536636cf77726f3018365626a8b975b5f"><code>7bca504</code></a> reject duplicate Transfer-Encoding in request header parser (<a href="https://redirect.github.com/valyala/fasthttp/issues/2303">#2303</a>)</li> <li><a href="https://github.com/valyala/fasthttp/commit/9ee3c15997f8ab21519c2728017e9fbff03fe142"><code>9ee3c15</code></a> docs: document FSCompressedFileSuffixes is not safe for concurrent modificati...</li> <li><a href="https://github.com/valyala/fasthttp/commit/2c1590038fa5d0e04896c8b0aafc138ce286bfa7"><code>2c15900</code></a> feat(prefork): graceful shutdown, leak fixes, hook robustness (re-open of <a href="https://redirect.github.com/valyala/fasthttp/issues/21">#21</a>...</li> <li><a href="https://github.com/valyala/fasthttp/commit/ec58c6e67ee8f608a673cc01f07f045d04fa17b5"><code>ec58c6e</code></a> strip semicolons from cookie setters to block attribute injection (<a href="https://redirect.github.com/valyala/fasthttp/issues/2298">#2298</a>)</li> <li>Additional commits viewable in <a href="https://github.com/valyala/fasthttp/compare/v1.71.0...v1.72.0">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> |
||
|
|
e5b7e74847 |
test: migrate chatd tests to AI Gateway routing (#26658)
Refs CODAGT-681 Migrates all chatd tests from `AIGatewayRoutingEnabled = false` (direct routing) to AI Gateway routing using the test helpers extracted in #26639. - `coderd/x/chatd/chatd_test.go` — 6 full-server tests migrated to `NewWithAPI` + daemon, `directChatRoutingDeploymentValues` helper deleted, 3 bare-chatd tests renamed - `coderd/x/chatd/context_integration_test.go` — 2 tests migrated - `coderd/exp_chats_test.go` — `chatDeploymentValues` helper deleted, all 5 helper functions now use `NewWithAPI` + daemon internally (no call site changes) - `coderd/exp_chats_acl_test.go` — stale `chatDeploymentValues` reference replaced - `enterprise/coderd/exp_chats_test.go` — 9 sites across 5 `TestChatStreamRelay` subtests migrated - `cli/exp_scaletest_chat_test.go` — 1 test migrated - `coderd/x/chatd/model_routing_internal_test.go` — 1 direct-only test removed - `coderd/x/chatd/chatd_internal_test.go` — 1 direct-only test removed > 🤖 |
||
|
|
33780758c1 |
chore: bump github.com/open-policy-agent/opa from 1.17.0 to 1.18.1 (#26858)
Bumps [github.com/open-policy-agent/opa](https://github.com/open-policy-agent/opa) from 1.17.0 to 1.18.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/open-policy-agent/opa/releases">github.com/open-policy-agent/opa's releases</a>.</em></p> <blockquote> <h2>v1.18.1</h2> <p>This release fixes a memory leak introduced in OPA v1.17.0. It is advised to update if you notice excess memory usage when running OPA server.</p> <h3>Fixes</h3> <ul> <li>ast: fix AnnotationSet memory leak via runtime.AddCleanup cycle (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8817">#8817</a>) authored by <a href="https://github.com/srenatus"><code>@srenatus</code></a> reported by <a href="https://github.com/keydon"><code>@keydon</code></a> and <a href="https://github.com/gorsr01"><code>@gorsr01</code></a></li> </ul> <h2>v1.18.0</h2> <p>This release contains a mix of bugfixes and small features. Notably:</p> <ul> <li>A breaking fix to the outbound <code>User-Agent</code> header so it conforms to RFC 9110 (see below)</li> <li>Container-aware resource limits: automatic <code>GOMAXPROCS</code> is restored and automatic <code>GOMEMLIMIT</code> is now supported</li> <li>Several <code>opa fmt</code> correctness fixes</li> <li>Improvements to <code>opa test --coverage</code> (ranges in report, inline rule head tracking, conjunction-expression coverage)</li> </ul> <h3>Breaking: Fix User-Agent according to RFC9110 (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8792">#8792</a>)</h3> <p>OPA's outbound HTTP requests (bundle, discovery, decision log, status, <code>http.send</code>, AWS KMS/ECR) previously sent <code>User-Agent: Open Policy Agent/<version> (<os>, <arch>)</code>, which is not a valid RFC 9110 <code>User-Agent</code> value because the <code>product</code> token cannot contain spaces. The header is now <code>Open-Policy-Agent/<version> (<os>, <arch>)</code>. Server-side log filters or WAF rules that exact-match the old string will need to be updated.</p> <p>Authored by <a href="https://github.com/sspaink"><code>@sspaink</code></a>, reported by <a href="https://github.com/SpecLad"><code>@SpecLad</code></a></p> <h3>Runtime, SDK, Tooling</h3> <ul> <li>bundle: fix per-module rego version lookup (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8797">#8797</a>) authored by <a href="https://github.com/sspaink"><code>@sspaink</code></a>, reported by <a href="https://github.com/xubinzheng"><code>@xubinzheng</code></a></li> <li>bundle: improve determinism of <code>file_rego_versions</code> patterns with overlap (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8733">#8733</a>) authored by <a href="https://github.com/philipaconrad"><code>@philipaconrad</code></a></li> <li>cover: Track inline rule head in post trace walk (<a href="https://redirect.github.com/open-policy-agent/opa/issues/6531">#6531</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a>, reported by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>cover: Update report to include ranges (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8748">#8748</a>) reported and authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> <li>cover: Add support for coverage of conjunction exprs (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8809">#8809</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> <li>download/oci: Set Accept headers (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8720">#8720</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> <li>fmt: preserve the multiline but single entry iterables (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8557">#8557</a>) authored by <a href="https://github.com/unichronic"><code>@unichronic</code></a>, reported by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>format: Fix dropped with-clause after comment in object value (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8765">#8765</a>) authored by <a href="https://github.com/sspaink"><code>@sspaink</code></a>, reported by <a href="https://github.com/srabraham"><code>@srabraham</code></a></li> <li>format: keep lone <code>with</code> on the closing-bracket line of multi-line expressions (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8804">#8804</a>) authored by <a href="https://github.com/anneheartrecord"><code>@anneheartrecord</code></a>, reported by <a href="https://github.com/burnster"><code>@burnster</code></a></li> <li>oracle: Fix find-definition on expressions inside <code>ast.Not</code> nodes (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8731">#8731</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a></li> <li>runtime: Restore goautomaxprocs, add automemlimit (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8784">#8784</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> </ul> <h3>Compiler, Topdown and Rego</h3> <ul> <li>ast: Apply location to inner <code>ast.Not</code> expressions (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8717">#8717</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a>, reported by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>ast: Clean up code for value comparisons (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8737">#8737</a>) authored by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>ast: Fix PE regression for <code>future.keywords.not</code> negation inside <code>every</code> (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8781">#8781</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a></li> <li>internal/edittree: Add recursive tree node recycling (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8693">#8693</a>) authored by <a href="https://github.com/philipaconrad"><code>@philipaconrad</code></a></li> <li>internal: compile,planner: improve determinism of <code>plan</code>/<code>wasm</code> bundle builds (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8732">#8732</a>) authored by <a href="https://github.com/philipaconrad"><code>@philipaconrad</code></a></li> <li>perf: avoid allocations in <code>object.get</code> (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8729">#8729</a>) authored by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>topdown: Fix PE not namespacing vars in comprehensions nested inside <code>every</code> (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8816">#8816</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a></li> <li>topdown: remove <code>dst.Compare(src)</code> shortcut (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8739">#8739</a>) authored by <a href="https://github.com/srenatus"><code>@srenatus</code></a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-policy-agent/opa/blob/main/CHANGELOG.md">github.com/open-policy-agent/opa's changelog</a>.</em></p> <blockquote> <h1>Change Log</h1> <p>All notable changes to this project will be documented in this file. This project adheres to <a href="http://semver.org/">Semantic Versioning</a>.</p> <h2>Unreleased</h2> <h2>1.18.0</h2> <p>This release contains a mix of bugfixes and small features. Notably:</p> <ul> <li>A breaking fix to the outbound <code>User-Agent</code> header so it conforms to RFC 9110 (see below)</li> <li>Container-aware resource limits: automatic <code>GOMAXPROCS</code> is restored and automatic <code>GOMEMLIMIT</code> is now supported</li> <li>Several <code>opa fmt</code> correctness fixes</li> <li>Improvements to <code>opa test --coverage</code> (ranges in report, inline rule head tracking, conjunction-expression coverage)</li> </ul> <h3>Breaking: Fix User-Agent according to RFC9110 (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8792">#8792</a>)</h3> <p>OPA's outbound HTTP requests (bundle, discovery, decision log, status, <code>http.send</code>, AWS KMS/ECR) previously sent <code>User-Agent: Open Policy Agent/<version> (<os>, <arch>)</code>, which is not a valid RFC 9110 <code>User-Agent</code> value because the <code>product</code> token cannot contain spaces. The header is now <code>Open-Policy-Agent/<version> (<os>, <arch>)</code>. Server-side log filters or WAF rules that exact-match the old string will need to be updated.</p> <p>Authored by <a href="https://github.com/sspaink"><code>@sspaink</code></a>, reported by <a href="https://github.com/SpecLad"><code>@SpecLad</code></a></p> <h3>Runtime, SDK, Tooling</h3> <ul> <li>bundle: fix per-module rego version lookup (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8797">#8797</a>) authored by <a href="https://github.com/sspaink"><code>@sspaink</code></a>, reported by <a href="https://github.com/xubinzheng"><code>@xubinzheng</code></a></li> <li>bundle: improve determinism of <code>file_rego_versions</code> patterns with overlap (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8733">#8733</a>) authored by <a href="https://github.com/philipaconrad"><code>@philipaconrad</code></a></li> <li>cover: Track inline rule head in post trace walk (<a href="https://redirect.github.com/open-policy-agent/opa/issues/6531">#6531</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a>, reported by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>cover: Update report to include ranges (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8748">#8748</a>) reported and authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> <li>cover: Add support for coverage of conjunction exprs (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8809">#8809</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> <li>download/oci: Set Accept headers (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8720">#8720</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> <li>fmt: preserve the multiline but single entry iterables (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8557">#8557</a>) authored by <a href="https://github.com/unichronic"><code>@unichronic</code></a>, reported by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>format: Fix dropped with-clause after comment in object value (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8765">#8765</a>) authored by <a href="https://github.com/sspaink"><code>@sspaink</code></a>, reported by <a href="https://github.com/srabraham"><code>@srabraham</code></a></li> <li>format: keep lone <code>with</code> on the closing-bracket line of multi-line expressions (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8804">#8804</a>) authored by <a href="https://github.com/anneheartrecord"><code>@anneheartrecord</code></a>, reported by <a href="https://github.com/burnster"><code>@burnster</code></a></li> <li>oracle: Fix find-definition on expressions inside <code>ast.Not</code> nodes (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8731">#8731</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a></li> <li>runtime: Restore goautomaxprocs, add automemlimit (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8784">#8784</a>) authored by <a href="https://github.com/charlieegan3"><code>@charlieegan3</code></a></li> </ul> <h3>Compiler, Topdown and Rego</h3> <ul> <li>ast: Apply location to inner <code>ast.Not</code> expressions (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8717">#8717</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a>, reported by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>ast: Clean up code for value comparisons (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8737">#8737</a>) authored by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>ast: Fix PE regression for <code>future.keywords.not</code> negation inside <code>every</code> (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8781">#8781</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a></li> <li>internal/edittree: Add recursive tree node recycling (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8693">#8693</a>) authored by <a href="https://github.com/philipaconrad"><code>@philipaconrad</code></a></li> <li>internal: compile,planner: improve determinism of <code>plan</code>/<code>wasm</code> bundle builds (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8732">#8732</a>) authored by <a href="https://github.com/philipaconrad"><code>@philipaconrad</code></a></li> <li>perf: avoid allocations in <code>object.get</code> (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8729">#8729</a>) authored by <a href="https://github.com/anderseknert"><code>@anderseknert</code></a></li> <li>topdown: Fix PE not namespacing vars in comprehensions nested inside <code>every</code> (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8816">#8816</a>) authored by <a href="https://github.com/johanfylling"><code>@johanfylling</code></a></li> <li>topdown: remove <code>dst.Compare(src)</code> shortcut (<a href="https://redirect.github.com/open-policy-agent/opa/pull/8739">#8739</a>) authored by <a href="https://github.com/srenatus"><code>@srenatus</code></a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-policy-agent/opa/commit/acc8bf9f88bbef57c500dbdd7231509e48ade525"><code>acc8bf9</code></a> Release v1.18.1</li> <li><a href="https://github.com/open-policy-agent/opa/commit/713dc6a42757e4b175ec8f74d58e341f89004467"><code>713dc6a</code></a> ast: fix AnnotationSet memory leak via runtime.AddCleanup cycle</li> <li><a href="https://github.com/open-policy-agent/opa/commit/cc2c5c60a4c486f15a5e8de457e96ed0fefaf5fe"><code>cc2c5c6</code></a> Prepare v1.18 release (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8820">#8820</a>)</li> <li><a href="https://github.com/open-policy-agent/opa/commit/e72a98fb10b43cfc4067568de8909c669e8a1b79"><code>e72a98f</code></a> format: keep lone <code>with</code> on the closing-bracket line of multi-line expression...</li> <li><a href="https://github.com/open-policy-agent/opa/commit/03646dde18924c2c74a13526e4cea408dcbb4481"><code>03646dd</code></a> topdown: Fix PE not namespacing vars in comprehensions nested inside <code>every</code> ...</li> <li><a href="https://github.com/open-policy-agent/opa/commit/bf2bb5261cf84958c295dd74e763837e2c021fd8"><code>bf2bb52</code></a> benchmarks: split off script, emit markdown table</li> <li><a href="https://github.com/open-policy-agent/opa/commit/02ce276093b85d101172045f0307d53f5f9cc89d"><code>02ce276</code></a> version: fix ill-formed User-Agent header (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8796">#8796</a>)</li> <li><a href="https://github.com/open-policy-agent/opa/commit/1fdbb77dd6b7aaf65dffd8c23563df72a59639a3"><code>1fdbb77</code></a> build(deps): bump the dependencies group across 2 directories with 6 updates</li> <li><a href="https://github.com/open-policy-agent/opa/commit/954196aaa43841958547b1a0ba564e591d342a67"><code>954196a</code></a> cover: Add support for coverage of conjunction exprs (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8809">#8809</a>)</li> <li><a href="https://github.com/open-policy-agent/opa/commit/dec8333b32aed9189721220f3e8101460ebb170f"><code>dec8333</code></a> deduplicate change-detection output in pr CI checks (<a href="https://redirect.github.com/open-policy-agent/opa/issues/8808">#8808</a>)</li> <li>Additional commits viewable in <a href="https://github.com/open-policy-agent/opa/compare/v1.17.0...v1.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) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
d440e71109 |
chore: bump golang.org/x/tools from 0.46.0 to 0.47.0 in the x group (#26857)
Bumps the x group with 1 update: [golang.org/x/tools](https://github.com/golang/tools). Updates `golang.org/x/tools` from 0.46.0 to 0.47.0 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/golang/tools/commit/fbf9f2e2c8124fbe1877f5ed2857111038d9fe12"><code>fbf9f2e</code></a> gopls/internal/cmd: add tests of 'gopls help'</li> <li><a href="https://github.com/golang/tools/commit/e891f79e03c0d60a806f959113eb8a748a3dd3fe"><code>e891f79</code></a> go.mod: update golang.org/x dependencies</li> <li><a href="https://github.com/golang/tools/commit/0602b30930e307645a5b43697b316a5599dea9a1"><code>0602b30</code></a> gopls: revert CLI usability revamp to stabilize release</li> <li><a href="https://github.com/golang/tools/commit/60c2434eca161a47c4697fdf65718dc259c1cf5b"><code>60c2434</code></a> gopls/internal/cmd: fix regression in initialization</li> <li><a href="https://github.com/golang/tools/commit/29e158310c709074e3cc2f7f1cd5ab9af11eb13b"><code>29e1583</code></a> gopls/internal/mcp: go_diagnostics: use idiomatic iterators</li> <li><a href="https://github.com/golang/tools/commit/0772d6a918b878bf9983d765a65af011d84483b4"><code>0772d6a</code></a> go/ssa: add test for fix of <a href="https://redirect.github.com/golang/go/issues/73871">golang/go#73871</a> in go/types@go1.25</li> <li><a href="https://github.com/golang/tools/commit/0fdde844aba91691351f38a7f1da04354170017e"><code>0fdde84</code></a> gopls/internal/tool: rename Application to Command and embed in SubCommand</li> <li><a href="https://github.com/golang/tools/commit/bd9e76d9f0ec7faf1dc77d440463c182ac9c348c"><code>bd9e76d</code></a> go/callgraph/vta: document ssa.InstantiateGenerics requirement</li> <li><a href="https://github.com/golang/tools/commit/d711ac7849d4f5456228745090323144c4c2d190"><code>d711ac7</code></a> go/ssa: remove incorrect hasTypeParams check</li> <li><a href="https://github.com/golang/tools/commit/439decda73f3e6449050bcb3a0241ed96d5e74e1"><code>439decd</code></a> gopls/internal/cache/xrefs: avoid materializing Inspector</li> <li>Additional commits viewable in <a href="https://github.com/golang/tools/compare/v0.46.0...v0.47.0">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 <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> |
||
|
|
cb6a75717c |
fix(coderd/x/chatd): bind goInflight contexts to server lifetime (#26811)
fix(coderd/x/chatd): bind goInflight contexts to server lifetime
- Add Server.inflightContext: WithoutCancel(reqCtx) bound to p.ctx via
context.AfterFunc, so Close cancels in-flight work instead of blocking
on the caller's timeout while a provider is unreachable.
- Apply at GenerateChatTitleAsync, finalizeSuccessfulTurnStatusLabelWithAfterFunc,
setLastTurnSummaryAsync, clearLastTurnSummaryAsync, and scheduleDebugCleanup.
- Honor cleanupCtx in the debug retry-delay timer so cancellation lands
promptly between attempts.
> 🤖
|
||
|
|
7179be24fa | feat: skip autostop reminder for active workspaces (#26772) | ||
|
|
64eb60d464 |
chore: bump the coder-modules group across 2 directories with 1 update (#26845)
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> |
||
|
|
2f14d41fa8 |
chore: bump coder-labs/codex/coder from 5.2.0 to 5.3.0 in /dogfood/coder (#26846)
[](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> |
||
|
|
538eddb731 | feat: add dashboard fields for configuring autostop reminder (#26762) | ||
|
|
1a07bd65d4 |
feat(site): wire template builder entrypoint from templates list page (#26756)
The templates list page "New template" button and the empty-state "View all starter templates" button now link to `/templates/new/builder` when the template builder is enabled in the deployment config, falling back to `/starter-templates` when disabled. The `TemplateBuilderPage` now checks `createTemplates` permission and redirects to `/templates` if the user lacks access. The `templateBuilderBases` query is also gated on `enabled` to avoid a 404 when the feature is disabled. <details> <summary>Implementation details</summary> - `TemplatesPage` fetches `deploymentConfig()` (only when user has `createTemplates` permission) and computes `templateBuilderEnabled` using `=== false` to default safely while loading. - `templateBuilderEnabled` is threaded through `TemplatesPageView` and `EmptyTemplates` to conditionally set link targets. - `TemplateBuilderPage` uses `useAuthenticated()` to check `permissions.createTemplates` before rendering. - Added Storybook story variants for the builder-enabled state. </details> > Generated by Coder Agents on behalf of @jeremyruppel |
||
|
|
a073273a3f | feat(site/src/pages/TemplateBuilder): add loading animation for template creation (#26830) | ||
|
|
431219a5e7 |
feat(site): add official badge to TemplateCard and ModuleCard (#26806)
Adds an `official` prop to both `TemplateCard` and `ModuleCard` in the
TemplateBuilder. When true (the default), a `BadgeCheckIcon` from
lucide-react is rendered inline next to the card name.
- `official` defaults to `true` since all current templates/modules are
official
- Pass `official={false}` for community entries to hide the badge
- Added `Community` and `CommunitySelected` stories for both components
> Generated by Coder Agents on behalf of @jeremyruppel
<img width="678" height="262" alt="Screenshot 2026-06-29 at 9 38 44 AM"
src="https://github.com/user-attachments/assets/51d1ddad-2bae-4ec3-a1bb-e518c86fa50c"
/>
|
||
|
|
7daf3123cb | feat: import new modules and refactor codegen script (#26838) | ||
|
|
e58806cb75 |
docs: add GitLab read_api scope change to ESR upgrade guide (#26829)
## Problem The 2.34.0 release changed the default GitLab external auth scopes from `write_repository` to `write_repository` plus `read_api`. This was not mentioned in the upgrade guide or the release notes, which caused breakage for users upgrading from 2.29 to 2.34. ## Fix - Add the GitLab scope change to the "Changes to be Aware of" table, placed next to the related PKCE default change. - Update the "Validate external authentication" bullet in the upgrade checklist to explicitly call out adding `read_api` to GitLab OAuth applications. Closes DOCS-498 > 🤖 This PR was created with the help of Coder Agents, and needs a human review. 🧑💻 |
||
|
|
9f7caa04f9 |
feat(site/src/pages/TemplateBuilder): prioritize template builder module display order (#26835)
Adds a curated priority ordering for modules in the template builder module picker. Modules in the priority list appear first in the specified order; unlisted modules appear after in their original order. ## Changes - Added `MODULE_PRIORITY` constant in `ModuleSelectStep.tsx` with the preferred display order - Added `sortByPriority()` helper to sort modules against the priority list - Not-yet-imported module IDs (`codex`, `antigravity`, `kasmvnc`) are included but commented out - Both the module grid and category tabs respect the new ordering - Search results still use fuzzy relevance ordering > Generated by Coder Agents on behalf of @jeremyruppel |
||
|
|
48e8f70e09 |
fix: remove Goose module from catalog (#26833)
Removes the Goose AI agent module from the template builder backend catalog. ## Changes - Deleted `coderd/templatebuilder/modules/goose/` (Terraform template and module metadata) - Removed the `"goose"` entry from `scripts/templatebuildermodulegen/main.go` Frontend assets (`goose.svg`, `icons.json`) are intentionally left in place as other parts of the app still reference them. > Generated by Coder Agents on behalf of @jeremyruppel |
||
|
|
89b0a66079 |
docs: add top-level Get started section and move the Quickstart (#26821)
Add a top-level "Get started" docs section to the nav and move the Quickstart to /docs/get-started, with inbound link updates and the install page TIP pointing to the Quickstart. Filed via Coder Agents on Nick's behalf. |
||
|
|
c35f3d51eb |
fix: regenerate listenerset golden files (#26831)
The golden files from #24993 were generated against a stale fork that predated the `CODER_CLUSTER_HOST` env var addition. This regenerates them against current main. All 4 files just need the missing env var block: ```yaml - name: CODER_CLUSTER_HOST valueFrom: fieldRef: fieldPath: status.podIP ``` Fixes the `gen` / `TestRenderChart` failures tracked in https://github.com/coder/internal/issues/1611#issuecomment-4835998513. --- *PR created by [Coder Agents](https://coder.com/docs/ai-coder) on behalf of @bpmct* |
||
|
|
1c09c3fca6 |
fix(site): reduce prerequisites markdown font size (#26776)
closes DEVEX-517 alternative to #26759 This PR is mainly about the type style overrides I added to `MemoizedMarkdown` in BaseTemplateParametersStep.tsx. I did also shoehorn some other misc styling updates into this PR, but they're only scoped to template builder so I'll keep it as 1 PR instead of making a Graphite stack: - |
||
|
|
d0f68cb9b0 |
feat: add listenerset (#24993)
Adds support for [Gateway API ListenerSet](https://gateway-api.sigs.k8s.io/reference/spec/#listenerset). This PR was validated using `kgateway-v2.3.0-main` using the following values: ```yaml coder: image: tag: v2.31.11 listenerset: enable: true annotations: cert-manager.io/cluster-issuer: my-cluster-issuer cert-manager.io/private-key-algorithm: ECDSA cert-manager.io/private-key-size: "384" parentRef: name: shared-internal-gateway namespace: kgateway-system listeners: - name: http hostname: "chart-example.local" port: 80 protocol: HTTP - name: http-wildcard hostname: "*.chart-example.local" port: 80 protocol: HTTP - name: https hostname: "*.chart-example.local" port: 443 protocol: HTTPS tls: mode: Terminate certificateRefs: - name: chart-example-tls - name: https-wildcard hostname: "chart-example.local" port: 443 protocol: HTTPS tls: mode: Terminate certificateRefs: - name: chart-example-tls httproute: enable: true parentRefs: - kind: ListenerSet name: coder port: 443 host: "chart-example.local" wildcardHost: "*.chart-example.local" httpsRedirect: enable: true parentRefs: - kind: ListenerSet name: coder port: 80 ``` Validate: ```bash $ GW_ADDR=$(kubectl get svc -n kgateway-system shared-internal-gateway -o=jsonpath="{.status.loadBalancer.ingress[0]['hostname','ip']}") $ curl -so /dev/null -w "%{http_code}" --resolve chart-example.local:80:${GW_ADDR} http://chart-example.local 308 $ curl -L --resolve chart-example.local:80:${GW_ADDR} http://chart-example.local/api/v2/buildinfo {"external_url":"https://github.com/coder/coder/commit/49be5f31d35ff8beac0c0f489bdcf7a2e4d24872","version":"v2.31.11+49be5f3","dashboard_url":"http://coder.dev-ome.svc.cluster.local","telemetry":true,"workspace_proxy":false,"agent_api_version":"1.0","provisioner_api_version":"1.15","upgrade_message":"","deployment_id":"8e5917d5-7fea-4658-b7d9-0f3b3e99b861"} $ curl --resolve chart-example.local:443:${GW_ADDR} https://chart-example.local/api/v2/buildinfo {"external_url":"https://github.com/coder/coder/commit/49be5f31d35ff8beac0c0f489bdcf7a2e4d24872","version":"v2.31.11+49be5f3","dashboard_url":"http://coder.dev-ome.svc.cluster.local","telemetry":true,"workspace_proxy":false,"agent_api_version":"1.0","provisioner_api_version":"1.15","upgrade_message":"","deployment_id":"8e5917d5-7fea-4658-b7d9-0f3b3e99b861"} ``` --------- Co-authored-by: Ben Potter <me@bpmct.net> Co-authored-by: Rowan Smith <rowan@coder.com> |
||
|
|
14a61041d9 |
docs: fix broken links in weekly-docs link check (#26813)
Fix four broken links that caused the weekly-docs link-check CI job to fail. **Changes:** - `docs/install/rancher.md`: Remove `#readme` anchor from `../../helm#readme` — linkspector splits on `#`, finds a directory, and errors with EISDIR. - `docs/install/kubernetes.md`: Same fix for `../../helm/coder#readme`. - `docs/install/cloud/compute-engine.md`: Point both `gcp-linux` links to `README.md` explicitly (`../../../examples/templates/gcp-linux/README.md` and `../../../examples/templates/gcp-linux/README.md#authentication`) so linkspector can resolve the file and anchor. - `.github/.linkspector.yml`: Add `merriam-webster.com` to `ignorePatterns` (returns 403 from GitHub runner IPs). <details> <summary>Linear issue and CI context</summary> **Linear issue:** https://linear.app/codercom/issue/DOCS-494/fix-broken-links-in-weekly-docs-link-check **Failing CI run:** https://github.com/coder/coder/actions/runs/28366176335/job/84032582533 The workflow is `.github/workflows/weekly-docs.yaml`, job `check-docs`, step `Check Markdown links` (umbrelladocs/action-linkspector). Root causes confirmed per investigation: - `#readme` anchors on directory paths trigger EISDIR in linkspector's local resolver. - The `gcp-linux` directory links needed explicit `README.md` targets; linkspector cannot resolve bare directory references. - `merriam-webster.com` blocks GitHub runner IPs with 403. `ignorePatterns` is reserved for external links only, not internal or GitHub file links. </details> --- *Generated by Coder Agents on behalf of @nickvigilante* |
||
|
|
84f995e019 |
fix(examples): remove vscode-desktop module from quickstart to avoid duplicate VS Code Desktop (#26789)
The Quickstart template offered a "VS Code Desktop" editor option backed by the `vscode-desktop` module, which produced two "VS Code Desktop" buttons in the workspace view. Coder already enables the VS Code Desktop display app for every workspace by default via [`DefaultDisplayApps()` in `provisionersdk/agent.go`](https://github.com/coder/coder/blob/c782cbce77b08c0d031a7131a05f5babd762519f/provisionersdk/agent.go#L58-L65) (`Vscode: true`), so the module was redundant and is the source of the duplicate. This removes the `vscode-desktop` module and its editor option, and updates the README to note that VS Code Desktop is available by default. The browser-based `code-server`, Cursor, JetBrains, Zed, and Windsurf options are unchanged. `examples.gen.json` is regenerated. Closes #26788 --- *Generated by Coder Agents on behalf of @bpmct.* |
||
|
|
a78982c238 | test: convert chromatic sentinels to pixel equivalents (#26778) |