@@ -116,7 +116,8 @@ SELECT
116
116
latest_build .canceled_at as latest_build_canceled_at,
117
117
latest_build .error as latest_build_error,
118
118
latest_build .transition as latest_build_transition,
119
- latest_build .job_status as latest_build_status
119
+ latest_build .job_status as latest_build_status,
120
+ latest_build .has_ai_task as latest_build_has_ai_task
120
121
FROM
121
122
workspaces_expanded as workspaces
122
123
JOIN
@@ -128,6 +129,7 @@ LEFT JOIN LATERAL (
128
129
workspace_builds .id ,
129
130
workspace_builds .transition ,
130
131
workspace_builds .template_version_id ,
132
+ workspace_builds .has_ai_task ,
131
133
template_versions .name AS template_version_name,
132
134
provisioner_jobs .id AS provisioner_job_id,
133
135
provisioner_jobs .started_at ,
@@ -345,6 +347,27 @@ WHERE
345
347
(latest_build .template_version_id = template .active_version_id ) = sqlc .narg (' using_active' ) :: boolean
346
348
ELSE true
347
349
END
350
+ -- Filter by has_ai_task in latest build
351
+ AND CASE
352
+ WHEN sqlc .narg (' has_ai_task' ) :: boolean IS NOT NULL THEN
353
+ (COALESCE(latest_build .has_ai_task , false) OR (
354
+ -- If the build has no AI task, it means that the provisioner job is in progress
355
+ -- and we don't know if it has an AI task yet. In this case, we optimistically
356
+ -- assume that it has an AI task if the AI Prompt parameter is not empty. This
357
+ -- lets the AI Task frontend spawn a task and see it immediately after instead of
358
+ -- having to wait for the build to complete.
359
+ latest_build .has_ai_task IS NULL AND
360
+ latest_build .completed_at IS NULL AND
361
+ EXISTS (
362
+ SELECT 1
363
+ FROM workspace_build_parameters
364
+ WHERE workspace_build_parameters .workspace_build_id = latest_build .id
365
+ AND workspace_build_parameters .name = ' AI Prompt'
366
+ AND workspace_build_parameters .value != ' '
367
+ )
368
+ )) = (sqlc .narg (' has_ai_task' ) :: boolean )
369
+ ELSE true
370
+ END
348
371
-- Authorize Filter clause will be injected below in GetAuthorizedWorkspaces
349
372
-- @authorize_filter
350
373
), filtered_workspaces_order AS (
@@ -411,7 +434,8 @@ WHERE
411
434
' 0001-01-01 00:00:00+00' ::timestamptz , -- latest_build_canceled_at,
412
435
' ' , -- latest_build_error
413
436
' start' ::workspace_transition, -- latest_build_transition
414
- ' unknown' ::provisioner_job_status -- latest_build_status
437
+ ' unknown' ::provisioner_job_status, -- latest_build_status
438
+ false -- latest_build_has_ai_task
415
439
WHERE
416
440
@with_summary :: boolean = true
417
441
), total_count AS (
0 commit comments