Commit Graph
2940 Commits
Author SHA1 Message Date
Jaayden HalkoandClaude 3699ff6b48 refactor: migrate TermsOfServiceLink from MUI to shadcn/ui (#20260)
## Summary

Migrate the `TermsOfServiceLink` component from MUI to shadcn/ui

## Changes

- **Replaced** `@mui/material/Link` with the custom `Link` component
from `components/Link/Link` (shadcn/ui)
- **Migrated** Emotion `css` prop to Tailwind utility classes
- **Preserved** external link icon functionality (automatically provided
by shadcn Link component)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-15 12:16:18 +01:00
Marcin Tojek 8ac54534f4 feat: skip deprecated:false in templates search bar (#20274)
Fixes: https://github.com/coder/coder/issues/19746
2025-10-14 20:58:13 +02:00
Bruno Quaresma 3dd3859ebf chore: add task feedback dialog component (#20252)
Related to https://github.com/coder/coder/issues/20214

This PR aims to add only the FE component for capturing user feedback
from tasks. Once the BE work is completed (in a separate PR), this
component will be triggered after a task is deleted.

The goal is to develop this feature in parallel.

**Screenshot:**
<img width="1206" height="727" alt="Screenshot 2025-10-09 at 14 31 53"
src="https://github.com/user-attachments/assets/1f92026c-8f05-4535-bbd6-85c4b107c037"
/>
2025-10-14 13:47:02 -03:00
Mathias Fredriksson 299a54a99b feat(coderd): add tasks rbac object (#20234)
This change adds RBAC for tasks.

Updates coder/internal#948
Supersedes coder/coder#20212
2025-10-13 12:02:22 +03:00
Bruno Quaresma 8f2394c256 chore: replace MUI tables (#20201)
I tried to break this work into smaller pieces, but since there are a
lot of dependent components, I decided to handle it in one larger chunk
and rely on Storybook to catch any bugs.

That said, let me know if you’d prefer a different approach!
2025-10-09 10:09:37 -03:00
Thomas Kosiewski ed90ecf00e feat: add allow_list to resource-scoped API tokens (#19964)
# Add API key allow_list for resource-scoped tokens

This PR adds support for API key allow lists, enabling tokens to be scoped to specific resources. The implementation:

1. Adds a new `allow_list` field to the `CreateTokenRequest` struct, allowing clients to specify resource-specific scopes when creating API tokens
2. Implements `APIAllowListTarget` type to represent resource targets in the format `<type>:<id>` with support for wildcards
3. Adds validation and normalization logic for allow lists to handle wildcards and deduplication
4. Integrates with RBAC by creating an `APIKeyEffectiveScope` that merges API key scopes with allow list restrictions
5. Updates API documentation and TypeScript types to reflect the new functionality

This feature enables creating tokens that are limited to specific resources (like workspaces or templates) by ID, making it possible to create more granular API tokens with limited access.
2025-10-09 14:53:08 +02:00
Rishi Mondal c84ab728a8 chore: add nexus-repository icon (#20227) 2025-10-08 16:24:13 -06:00
Jaayden Halko 9935da86c6 chore: migrate appearanceform to Tailwind and shadcn (#20204) 2025-10-08 21:13:04 +01:00
Bruno Quaresma 4b8d73994f chore: migrate MUI icons to lucide-react (#20193) 2025-10-08 15:01:01 -03:00
DevCats e5d7f43c51 chore: add auto-dev-server-icon and set to monochromatic (#20219) 2025-10-08 12:58:56 -05:00
Bruno Quaresma 55be304e53 chore: replace remaining MUI buttons (#20200) 2025-10-08 13:39:47 -03:00
Michael Smith 156f985fb0 fix(site): update useClipboard to work better with effect logic (#20183)
## Changes made
- Updated `useClipboard` API to require passing the text in via the
`copyToClipboard` function, rather than requiring that the text gets
specified in render logic
- Ensured that the `copyToClipboard` function always stays stable across
all React lifecycles
- Updated all existing uses to use the new function signatures
- Updated all tests and added new cases
2025-10-06 15:41:57 -04:00
Bruno Quaresma 83c4611293 chore: revert "feat: include latest build id in task responses" (#20184)
Reverts coder/coder#20181

I realized we don’t need this in the task response. When loading a task,
we already need much more workspace information, so it makes more sense
to fetch the workspace data separately instead of trying to embed all
its details into the response.

I think we can keep the task response clean and focused on the essential
information needed to list tasks. For more specific details, we can
fetch the related resources as needed. So, I’m reverting this PR.
2025-10-06 14:44:11 -03:00
Bruno Quaresma 23a44d10ac feat: include latest build id in task responses (#20181)
Adding the latest build ID is necessary to locate the logs associated
with the tasks in the UI.
2025-10-06 13:12:56 -03:00
Bruno Quaresma 840afb225b feat: select template version for tasks (#20146)
Allows users with `updateTemplates` permission to select a specific
template version when creating a task.

One of the biggest changes was moving `TaskPrompt` into `modules/task`
and adding a Storybook entry for it. I also moved some stories from
`TasksPage` to simplify its story.

<img width="1208" height="197" alt="Screenshot 2025-10-02 at 12 09 06"
src="https://github.com/user-attachments/assets/b85d2723-bb52-442b-b8eb-36721944a653"
/>

Closes https://github.com/coder/coder/issues/19986
2025-10-06 10:23:53 -03:00
Sas Swart a7c9e623fe chore: fix api param name (#20172)
In https://github.com/coder/coder/pull/20137, we added a new flag to
`coder provisioner jobs list`, namely `--initiator`.

To make some follow-up worth it, I need to rename an API param used in
the process before it becomes part of our released and tagged API.

Instead of only accepting UUIDs, we accept an arbitrary string.
We still validate it as a UUID now, but we will expand its validation to
allow any string and then resolve that string the same way that we
resolve the user parameter elsewhere in the API.
2025-10-06 13:58:37 +02:00
Thomas Kosiewski b60ae0a0c4 refactor: add wildcard scope entries for API key scopes (#20032)
# Add API Key Scope Wildcards

This PR adds wildcard API key scopes (`resource:*`) for all RBAC resources to ensure every resource has a matching wildcard value. It also adds all individual `resource:action`​ scopes to the API documentation and TypeScript definitions.

The changes include:

- Adding a new database migration (000377) that adds wildcard API key scopes
- Updating the API documentation to include all available scopes
- Enhancing the scope generation scripts to include all resource wildcards
- Updating the TypeScript definitions to match the expanded scope list

These changes make creating API keys with comprehensive permissions for specific resource types easier.
2025-10-06 12:08:17 +02:00
Sas Swart d17dd5d787 feat: add filtering by initiator to provisioner job listing in the CLI (#20137)
Relates to https://github.com/coder/internal/issues/934

This PR provides a mechanism to filter provisioner jobs according to who
initiated the job.
This will be used to find pending prebuild jobs when prebuilds have
overwhelmed the provisioner job queue. They can then be canceled.

If prebuilds are overwhelming provisioners, the following steps will be
taken:

```bash
# pause prebuild reconciliation to limit provisioner queue pollution:
coder prebuilds pause 
# cancel pending provisioner jobs to clear the queue
coder provisioner jobs list --initiator="prebuilds" --status="pending" | jq ... | xargs -n1 -I{} coder provisioner jobs cancel {}
# push a fixed template and wait for the import to complete
coder templates push ... # push a fixed template
# resume prebuild reconciliation
coder prebuilds resume
```

This interface differs somewhat from what was specified in the issue,
but still provides a mechanism that addresses the issue. The original
proposal was made by myself and this simpler implementation makes sense.
I might add a `--search` parameter in a follow-up if there is appetite
for it.

Potential follow ups:
* Support for this usage: `coder provisioner jobs list --search
"initiator:prebuilds status:pending"`
* Adding the same parameters to `coder provisioner jobs cancel` as a
convenience feature so that operators don't have to pipe through `jq`
and `xargs`
2025-10-06 08:56:43 +00:00
ケイラ 2ec9be2203 fix: only show error once when failing to update org member roles (#20155) 2025-10-03 14:11:08 -06:00
Bruno Quaresma 6b61c8a32a feat: add workspace status on tasks (#20037)
<img width="1206" height="722" alt="Screenshot 2025-09-30 at 11 29 31"
src="https://github.com/user-attachments/assets/f109552d-af5e-41e1-a0e8-fdfcb3f973b7"
/>


Closes https://github.com/coder/coder/issues/19988
2025-10-01 15:49:52 -03:00
Bruno Quaresma f23a6a1140 feat: add remove task button into the tasks list (#20036)
**Demo:**


https://github.com/user-attachments/assets/eca91a46-41fb-412c-b476-0cf91c0b69b8

Closes https://github.com/coder/coder/issues/19525
2025-10-01 15:37:11 -03:00
Cian Johnston ff930ad4f3 feat(coderd): add ability to search org members by user_id, is_system, github_user_id (#20048)
Adds the ability to search org members by query.
Supported fields: `user_id`, `is_system`, `github_user_id`.
2025-09-30 23:54:21 +01:00
Jaayden Halko 4db5158aed fix: fix flaky test in WorkspacePage.test.tsx (#20033)
re-enabled the skipped test and tested locally. Passed 100 out of 100
times locally.
2025-09-30 23:47:17 +01:00
Bruno Quaresma b8370c25ff fix: add tasks link to sidebar logo (#20038) 2025-09-30 19:09:05 -03:00
Bruno Quaresma f009ebd662 feat: minor prompt redesign (#20045)
When I navigate to tasks, the prompt doesn’t feel prominent enough—even
though it should be the primary element on the screen. To give it more
focus, I made some small design changes. Here are both versions:

**Before:**
<img width="1624" height="970" alt="Screenshot 2025-09-30 at 12 10 58"
src="https://github.com/user-attachments/assets/b5451ad5-4d32-4716-8e0f-e4596e7c92c8"
/>

**After:**
<img width="1624" height="970" alt="Screenshot 2025-09-30 at 12 10 46"
src="https://github.com/user-attachments/assets/f478e327-12c0-4f49-829f-8b094a6b613e"
/>
2025-09-30 18:20:45 -03:00
Susana Ferreira 7bddd80d60 feat(site): add task notifications to user settings (#20006)
## Description

Add UI support for the new `Task Events` notification templates (`Task
Working` and `Task Idle`) added in backend PR
https://github.com/coder/coder/pull/19965. The
`/api/v2/notifications/templates/system` endpoint now returns these
templates, therefore this PR keeps the UI in sync.

## Changes

* Added `Task Working` and `Task Idle` to notification template mocks so
Storybook reflects backend data.
* Deployment Settings already lists all templates from the API, so no
code change was needed (stories updated automatically).
* Updated the User Settings filter to include `Task Events` so they
appear for end users.

<img width="2930" height="1666" alt="Screenshot 2025-09-29 at 17 06 22"
src="https://github.com/user-attachments/assets/045d5dd7-13a4-4378-9bf3-9fd86a86e64b"
/>

Depends on: https://github.com/coder/coder/pull/19965
2025-09-30 18:37:25 +01:00
Bruno Quaresma e96d69ba95 feat: delete task from sidebar (#20023)
This adds a way to delete a task from the sidebar. Once this PR is
merged, I’ll also add the option to the table list.

https://github.com/user-attachments/assets/75d714ef-afe1-4d9c-b907-1eab3a59f26b

Right now, after deleting a task, the data still shows—that’s a separate
issue related to how task data is loaded in the FE. A proper tasks
endpoint is now available, and that should be addressed as part of
[https://github.com/coder/internal/issues/904](https://github.com/coder/internal/issues/904).

Related to https://github.com/coder/coder/issues/19525
2025-09-30 10:02:02 -03:00
Bruno Quaresma f2f4ed12e9 chore: revert redesign tasks page to match AI tools (#20013)
Reverts coder/coder#19962
2025-09-29 11:30:05 -03:00
Thomas Kosiewski 79126ab6c7 feat: implement composite API key scopes for workspaces and templates (#19945)
# Add Composite API Key Scopes

This PR adds high-level composite API key scopes to simplify token creation with common permission sets:

- `coder:workspaces.create` - Create and update workspaces
- `coder:workspaces.operate` - Read and update workspaces
- `coder:workspaces.delete` - Read and delete workspaces
- `coder:workspaces.access` - Read, SSH, and connect to workspace applications
- `coder:templates.build` - Read templates and create/read files
- `coder:templates.author` - Full template management with insights
- `coder:apikeys.manage_self` - Manage your own API keys

These composite scopes are persisted in the database and expanded during authorization, providing a more intuitive way to grant permissions compared to the granular resource:action scopes.
2025-09-29 13:17:08 +02:00
Rowan SmithandClaude aaa50715e1 fix: fix for template dormancy hour/day toggle (#19884)
resolves #15451 

> Solution: Selecting days is always be enabled and rounds (up) the
hours to the nearest day. I.e. 25 hours -> 2 days.

tested with 26hrs saved, then toggled to days. result = value changed to
2 days

If you have used AI to produce some or all of this PR, please ensure you
have read our [AI Contribution
guidelines](https://coder.com/docs/about/contributing/AI_CONTRIBUTING)
before submitting.

blink helped

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-29 09:23:02 +10:00
Bruno Quaresma 54ce03a300 chore: replace MUI buttons (#19968)
Replace MUI buttons with `components/Button`
2025-09-26 21:38:54 -03:00
Andrew Aquinoandケイラ 10d41b3a72 refactor: replace other deprecated Popovers which open on hover (#19753)
closes #19397 
dependency: #19709 

#19635 covered a large chunk of deprecated `Popover`s which open on
hover, specifically the ones which instantiated `HelpTooltip`. This PR
replaces all of the non-`HelpTooltip` hover-triggered popovers, and
removes the deprecated popover component :)

---------

Co-authored-by: ケイラ <mckayla@hey.com>
2025-09-26 15:05:09 -07:00
Bruno Quaresma 403a9e57c9 chore: migrate MUI icons to lucide icons (#19967)
This PR completes the migration from Material UI icons to Lucide icons.
2025-09-26 14:02:34 -03:00
Bruno Quaresma 89339f6e5d feat: redesign tasks page to match AI tools (#19962)
**Demo:**

<img width="3228" height="1940" alt="image"
src="https://github.com/user-attachments/assets/d29555ae-8122-4043-9ee2-2603506e5f3c"
/>
2025-09-26 13:30:44 -03:00
Bruno Quaresma c2d514356f fix: handle chat app not found (#19947)
Sometimes users can misconfigure the app used for chat. When that
happens, we should make it clear to the user.

<img width="1197" height="727" alt="Screenshot 2025-09-24 at 14 15 12"
src="https://github.com/user-attachments/assets/6afe2c22-e7c3-47d4-8446-76000535a492"
/>

- Handle “chat app not found.”
- Simplify stories.
- Have `TaskAppIframe` handle all task iframes so we don’t need a
separate iframe component for chat.
2025-09-26 12:36:45 -03:00
Dean Sheather 43415f0144 chore: add enterprise feature for aibridge (#19976)
Adds enterprise feature "aibridge" and gates the aibridge CRUD and LLM API endpoints behind it.
2025-09-27 01:13:06 +10:00
Paweł BanaszewskiandDean Sheather 0a6ba5d51a feat: add endpoint to list aibridge interceptions (#19929)
Co-authored-by: Dean Sheather <dean@deansheather.com>
2025-09-27 00:20:33 +10:00
d70e26d2e3 chore: remove react-helmet (#19963)
Since React 19 supports head tags natively, we no longer need to use
`react-helmet`.

---------

Co-authored-by: ケイラ <mckayla@hey.com>
Co-authored-by: Andrew Aquino <dawneraq@gmail.com>
2025-09-26 10:52:53 -03:00
Danielle Maywood eb74732839 refactor!: rename prompt field to input for task creation (#19982)
Renames the `prompt` field to `input` for task creation. This matches
the naming used in the CLI and elsewhere.
2025-09-26 12:18:08 +01:00
Thomas Kosiewski d0db9ec88f feat: add multi-scope support to API keys (#19917)
# Canonicalize API Key Scopes

This PR introduces canonical API key scopes with a `coder:` namespace prefix to avoid collisions with low-level resource:action names. It:

1. Renames special API key scopes in the database:
   - `all` → `coder:all`
   - `application_connect` → `coder:application_connect`

2. Adds support for a new `scopes` field in the API key creation request, allowing multiple scopes to be specified while maintaining backward compatibility with the singular `scope` field.

3. Updates the API documentation to reflect these changes, including the new endpoint for listing public API key scopes.

4. Ensures backward compatibility by mapping between legacy and canonical scope names in relevant code paths.
2025-09-26 11:56:34 +02:00
Thomas Kosiewski 4bda39585d feat: add external API key scopes (#19916)
# Add support for low-level API key scopes

This PR adds support for fine-grained API key scopes based on RBAC resource:action pairs. It includes:

1. A new endpoint `/api/v2/auth/scopes` to list all public low-level API key scopes
2. Generated constants in the SDK for all public scopes
3. Tests to verify scope validation during token creation
4. Updated API documentation to reflect the expanded scope options

The implementation allows users to create API keys with specific permissions like `workspace:read` or `template:use` instead of only the legacy `all` or `application_connect` scopes.



Fixes #19847
2025-09-26 11:43:32 +02:00
Cian Johnston eb55f0ab19 fix(coderd)!: only show task status for current build (#19966)
This changes the task get endpoint to omit app statuses for previous
'lifetimes' of a workspace.

It also introduces a [breaking
change](https://github.com/coder/coder/blob/release/2.26/codersdk/aitasks.go#L83)
to bring `TaskStateComplete` in line with
`WorkspaceAppStatusStateComplete`. I can alternatively revert this
change and add a conversion function between the two SDK types.
2025-09-26 10:14:37 +01:00
Mathias Fredriksson 0bac5a4d5c feat(coderd): add experimental tasks logs endpoint (#19958)
Fixes coder/internal#901
2025-09-25 15:12:49 +00:00
Mathias Fredriksson 5317d309d0 feat(coderd): add experimental tasks send endpoint (#19941)
Fixes coder/internal#902
2025-09-25 12:12:00 +00:00
Susana Ferreira da467bad2a feat(site): add custom notification settings (#19938)
## Description

Add Custom Notification settings to `/deployment/notifications` page and
`/settings/notifications` user's page.

<img width="2936" height="3008" alt="Screenshot 2025-09-24 at 12 53 52"
src="https://github.com/user-attachments/assets/c11ccaba-7bdd-4b0d-98b3-faa48a9796ba"
/>

<img width="2920" height="2976" alt="Screenshot 2025-09-24 at 12 54 06"
src="https://github.com/user-attachments/assets/21aa3057-a14e-4ba6-8138-98a4dc3952dc"
/>

Follow-up from: https://github.com/coder/coder/pull/19751
2025-09-25 09:48:13 +01:00
Vijay Bandari b712e975d5 chore: update okta icon (#19951) 2025-09-24 15:49:46 -06:00
Bruno Quaresma 2df9c5b6b5 feat: add sidebar to task page (#19944)
**Demo:**

https://github.com/user-attachments/assets/83363666-ed0e-488a-84b8-bb46517a2bb8

- Integrate sidebar into the task page
- Minor cosmetic changes
- Fix scrolling issues in tasks list
2025-09-24 14:52:59 -03:00
Andrew Aquinoandケイラ 669984c943 refactor: replace deprecated Popovers which open on click (#19709)
for #19397 
dependency: #19635 

This PR specifically covers components which open a popover that's
triggered by a click, rather than a hover.

---------

Co-authored-by: ケイラ <mckayla@hey.com>
2025-09-24 10:00:54 -07:00
Bruno Quaresma 5ff503b8fc fix: force task to be created with latest version (#19923)
Fixes https://github.com/coder/coder/issues/19744
2025-09-24 13:23:31 -03:00
Bruno Quaresma 7baaa16ac1 chore: add tasks sidebar component (#19926)
This PR is part of a series of PRs aimed at completing the tasks
sidebar.

**Demo:**

https://github.com/user-attachments/assets/0d830f22-dc94-45d7-833b-fe706226ad68

Reference:
[https://github.com/coder/coder/issues/19573](https://github.com/coder/coder/issues/19573)
Depends on:
[https://github.com/coder/coder/pull/19920](https://github.com/coder/coder/pull/19920)
Based on:
[https://github.com/coder/coder/pull/19655](https://github.com/coder/coder/pull/19655)
2025-09-24 10:40:01 -03:00