mirror of
https://github.com/coder/coder.git
synced 2026-06-03 04:58:23 +00:00
3011207519
## Problem Tasks currently only expose a machine-friendly name field (e.g. `task-python-debug-a1b2`), but this value is primarily an identifier rather than a clean, descriptive label. We need a separate display-friendly name for use in the UI. This PR introduces a new `display_name` field and updates the task-name generation flow. The Claude system prompt was updated to return valid JSON with both `name` and `display_name`. The name generation logic follows a fallback chain (Anthropic > prompt sanitization > random fallback). To make task names more closely resemble their display names, the legacy `task-` prefix has been removed. For context, PR https://github.com/coder/coder/pull/20834 introduced a small Task icon to the workspace list to help identify workspaces associated to tasks. ## Changes - Database migration: Added `display_name` column to tasks table - Updated system prompt to generate both task name and display name as valid JSON - Task name generation now follows a fallback chain: Anthropic > prompt sanitization > random fallback - Removed `task-` prefix from task names to allow more descriptive names - Note: PR https://github.com/coder/coder/pull/20834 adds a Task icon to workspaces in the workspace list to distinguish task-created workspaces **Note:** UI changes will be addressed in a follow-up PR Related to: https://github.com/coder/coder/issues/20801
78 lines
1.9 KiB
SQL
78 lines
1.9 KiB
SQL
-- name: InsertTask :one
|
|
INSERT INTO tasks
|
|
(id, organization_id, owner_id, name, display_name, workspace_id, template_version_id, template_parameters, prompt, created_at)
|
|
VALUES
|
|
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
|
RETURNING *;
|
|
|
|
-- name: UpdateTaskWorkspaceID :one
|
|
UPDATE
|
|
tasks
|
|
SET
|
|
workspace_id = $2
|
|
FROM
|
|
workspaces w
|
|
JOIN
|
|
template_versions tv
|
|
ON
|
|
tv.template_id = w.template_id
|
|
WHERE
|
|
tasks.id = $1
|
|
AND tasks.workspace_id IS NULL
|
|
AND w.id = $2
|
|
AND tv.id = tasks.template_version_id
|
|
RETURNING
|
|
tasks.*;
|
|
|
|
-- name: UpsertTaskWorkspaceApp :one
|
|
INSERT INTO task_workspace_apps
|
|
(task_id, workspace_build_number, workspace_agent_id, workspace_app_id)
|
|
VALUES
|
|
($1, $2, $3, $4)
|
|
ON CONFLICT (task_id, workspace_build_number)
|
|
DO UPDATE SET
|
|
workspace_agent_id = EXCLUDED.workspace_agent_id,
|
|
workspace_app_id = EXCLUDED.workspace_app_id
|
|
RETURNING *;
|
|
|
|
-- name: GetTaskByID :one
|
|
SELECT * FROM tasks_with_status WHERE id = @id::uuid;
|
|
|
|
-- name: GetTaskByWorkspaceID :one
|
|
SELECT * FROM tasks_with_status WHERE workspace_id = @workspace_id::uuid;
|
|
|
|
-- name: GetTaskByOwnerIDAndName :one
|
|
SELECT * FROM tasks_with_status
|
|
WHERE
|
|
owner_id = @owner_id::uuid
|
|
AND deleted_at IS NULL
|
|
AND LOWER(name) = LOWER(@name::text);
|
|
|
|
-- name: ListTasks :many
|
|
SELECT * FROM tasks_with_status tws
|
|
WHERE tws.deleted_at IS NULL
|
|
AND CASE WHEN @owner_id::UUID != '00000000-0000-0000-0000-000000000000' THEN tws.owner_id = @owner_id::UUID ELSE TRUE END
|
|
AND CASE WHEN @organization_id::UUID != '00000000-0000-0000-0000-000000000000' THEN tws.organization_id = @organization_id::UUID ELSE TRUE END
|
|
AND CASE WHEN @status::text != '' THEN tws.status = @status::task_status ELSE TRUE END
|
|
ORDER BY tws.created_at DESC;
|
|
|
|
-- name: DeleteTask :one
|
|
UPDATE tasks
|
|
SET
|
|
deleted_at = @deleted_at::timestamptz
|
|
WHERE
|
|
id = @id::uuid
|
|
AND deleted_at IS NULL
|
|
RETURNING *;
|
|
|
|
|
|
-- name: UpdateTaskPrompt :one
|
|
UPDATE
|
|
tasks
|
|
SET
|
|
prompt = @prompt::text
|
|
WHERE
|
|
id = @id::uuid
|
|
AND deleted_at IS NULL
|
|
RETURNING *;
|