chore: add AI-tasks-specific fields to codersdk.WorkspaceBuild (#18436)

This will be needed by the frontend on the `/task/$id` page to display
the app in the sidebar.

Related to https://github.com/coder/coder/issues/18158
This commit is contained in:
Hugo Dutka
2025-06-20 10:59:34 +02:00
committed by GitHub
parent d788ab9e55
commit 32239b29cb
8 changed files with 60 additions and 0 deletions

7
coderd/apidoc/docs.go generated
View File

@ -18091,6 +18091,10 @@ const docTemplate = `{
"codersdk.WorkspaceBuild": { "codersdk.WorkspaceBuild": {
"type": "object", "type": "object",
"properties": { "properties": {
"ai_task_sidebar_app_id": {
"type": "string",
"format": "uuid"
},
"build_number": { "build_number": {
"type": "integer" "type": "integer"
}, },
@ -18105,6 +18109,9 @@ const docTemplate = `{
"type": "string", "type": "string",
"format": "date-time" "format": "date-time"
}, },
"has_ai_task": {
"type": "boolean"
},
"id": { "id": {
"type": "string", "type": "string",
"format": "uuid" "format": "uuid"

View File

@ -16530,6 +16530,10 @@
"codersdk.WorkspaceBuild": { "codersdk.WorkspaceBuild": {
"type": "object", "type": "object",
"properties": { "properties": {
"ai_task_sidebar_app_id": {
"type": "string",
"format": "uuid"
},
"build_number": { "build_number": {
"type": "integer" "type": "integer"
}, },
@ -16544,6 +16548,9 @@
"type": "string", "type": "string",
"format": "date-time" "format": "date-time"
}, },
"has_ai_task": {
"type": "boolean"
},
"id": { "id": {
"type": "string", "type": "string",
"format": "uuid" "format": "uuid"

View File

@ -1078,6 +1078,14 @@ func (api *API) convertWorkspaceBuild(
if build.TemplateVersionPresetID.Valid { if build.TemplateVersionPresetID.Valid {
presetID = &build.TemplateVersionPresetID.UUID presetID = &build.TemplateVersionPresetID.UUID
} }
var hasAITask *bool
if build.HasAITask.Valid {
hasAITask = &build.HasAITask.Bool
}
var aiTasksSidebarAppID *uuid.UUID
if build.AITasksSidebarAppID.Valid {
aiTasksSidebarAppID = &build.AITasksSidebarAppID.UUID
}
apiJob := convertProvisionerJob(job) apiJob := convertProvisionerJob(job)
transition := codersdk.WorkspaceTransition(build.Transition) transition := codersdk.WorkspaceTransition(build.Transition)
@ -1105,6 +1113,8 @@ func (api *API) convertWorkspaceBuild(
DailyCost: build.DailyCost, DailyCost: build.DailyCost,
MatchedProvisioners: &matchedProvisioners, MatchedProvisioners: &matchedProvisioners,
TemplateVersionPresetID: presetID, TemplateVersionPresetID: presetID,
HasAITask: hasAITask,
AITaskSidebarAppID: aiTasksSidebarAppID,
}, nil }, nil
} }

View File

@ -75,6 +75,8 @@ type WorkspaceBuild struct {
DailyCost int32 `json:"daily_cost"` DailyCost int32 `json:"daily_cost"`
MatchedProvisioners *MatchedProvisioners `json:"matched_provisioners,omitempty"` MatchedProvisioners *MatchedProvisioners `json:"matched_provisioners,omitempty"`
TemplateVersionPresetID *uuid.UUID `json:"template_version_preset_id" format:"uuid"` TemplateVersionPresetID *uuid.UUID `json:"template_version_preset_id" format:"uuid"`
HasAITask *bool `json:"has_ai_task,omitempty"`
AITaskSidebarAppID *uuid.UUID `json:"ai_task_sidebar_app_id,omitempty" format:"uuid"`
} }
// WorkspaceResource describes resources used to create a workspace, for instance: // WorkspaceResource describes resources used to create a workspace, for instance:

View File

@ -27,10 +27,12 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
```json ```json
{ {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -262,10 +264,12 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild} \
```json ```json
{ {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -977,10 +981,12 @@ curl -X GET http://coder-server:8080/api/v2/workspacebuilds/{workspacebuild}/sta
```json ```json
{ {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -1285,10 +1291,12 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
```json ```json
[ [
{ {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -1501,10 +1509,12 @@ Status Code **200**
| Name | Type | Required | Restrictions | Description | | Name | Type | Required | Restrictions | Description |
|----------------------------------|--------------------------------------------------------------------------------------------------------|----------|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |----------------------------------|--------------------------------------------------------------------------------------------------------|----------|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `[array item]` | array | false | | | | `[array item]` | array | false | | |
| `» ai_task_sidebar_app_id` | string(uuid) | false | | |
| `» build_number` | integer | false | | | | `» build_number` | integer | false | | |
| `» created_at` | string(date-time) | false | | | | `» created_at` | string(date-time) | false | | |
| `» daily_cost` | integer | false | | | | `» daily_cost` | integer | false | | |
| `» deadline` | string(date-time) | false | | | | `» deadline` | string(date-time) | false | | |
| `» has_ai_task` | boolean | false | | |
| `» id` | string(uuid) | false | | | | `» id` | string(uuid) | false | | |
| `» initiator_id` | string(uuid) | false | | | | `» initiator_id` | string(uuid) | false | | |
| `» initiator_name` | string | false | | | | `» initiator_name` | string | false | | |
@ -1771,10 +1781,12 @@ curl -X POST http://coder-server:8080/api/v2/workspaces/{workspace}/builds \
```json ```json
{ {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",

View File

@ -8588,10 +8588,12 @@ If the schedule is empty, the user will be updated to use the default schedule.|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -9690,10 +9692,12 @@ If the schedule is empty, the user will be updated to use the default schedule.|
```json ```json
{ {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -9896,10 +9900,12 @@ If the schedule is empty, the user will be updated to use the default schedule.|
| Name | Type | Required | Restrictions | Description | | Name | Type | Required | Restrictions | Description |
|------------------------------|-------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------| |------------------------------|-------------------------------------------------------------------|----------|--------------|---------------------------------------------------------------------|
| `ai_task_sidebar_app_id` | string | false | | |
| `build_number` | integer | false | | | | `build_number` | integer | false | | |
| `created_at` | string | false | | | | `created_at` | string | false | | |
| `daily_cost` | integer | false | | | | `daily_cost` | integer | false | | |
| `deadline` | string | false | | | | `deadline` | string | false | | |
| `has_ai_task` | boolean | false | | |
| `id` | string | false | | | | `id` | string | false | | |
| `initiator_id` | string | false | | | | `initiator_id` | string | false | | |
| `initiator_name` | string | false | | | | `initiator_name` | string | false | | |
@ -10416,10 +10422,12 @@ If the schedule is empty, the user will be updated to use the default schedule.|
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",

View File

@ -82,10 +82,12 @@ of the template will be used.
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -366,10 +368,12 @@ curl -X GET http://coder-server:8080/api/v2/users/{user}/workspace/{workspacenam
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -676,10 +680,12 @@ of the template will be used.
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -963,10 +969,12 @@ curl -X GET http://coder-server:8080/api/v2/workspaces \
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -1231,10 +1239,12 @@ curl -X GET http://coder-server:8080/api/v2/workspaces/{workspace} \
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",
@ -1631,10 +1641,12 @@ curl -X PUT http://coder-server:8080/api/v2/workspaces/{workspace}/dormant \
"workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9" "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"
}, },
"latest_build": { "latest_build": {
"ai_task_sidebar_app_id": "852ddafb-2cb9-4cbf-8a8c-075389fb3d3d",
"build_number": 0, "build_number": 0,
"created_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z",
"daily_cost": 0, "daily_cost": 0,
"deadline": "2019-08-24T14:15:22Z", "deadline": "2019-08-24T14:15:22Z",
"has_ai_task": true,
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3", "initiator_id": "06588898-9a84-4b35-ba8f-f9cbd64946f3",
"initiator_name": "string", "initiator_name": "string",

View File

@ -3653,6 +3653,8 @@ export interface WorkspaceBuild {
readonly daily_cost: number; readonly daily_cost: number;
readonly matched_provisioners?: MatchedProvisioners; readonly matched_provisioners?: MatchedProvisioners;
readonly template_version_preset_id: string | null; readonly template_version_preset_id: string | null;
readonly has_ai_task?: boolean;
readonly ai_task_sidebar_app_id?: string;
} }
// From codersdk/workspacebuilds.go // From codersdk/workspacebuilds.go