Skip to content

Commit 859e94d

Browse files
authored
fix: deprecate codersdk.AITaskPromptParameterName and reduce usage (coder#20501)
Depends on coder/sqlc#1 Fixes coder/internal#979 Updates coder/internal#973
1 parent 50749d1 commit 859e94d

File tree

13 files changed

+164
-448
lines changed

13 files changed

+164
-448
lines changed

cli/exp_task_list_test.go

Lines changed: 10 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package cli_test
22

33
import (
44
"bytes"
5-
"context"
65
"database/sql"
76
"encoding/json"
87
"io"
@@ -19,10 +18,7 @@ import (
1918
"github.com/coder/coder/v2/cli/clitest"
2019
"github.com/coder/coder/v2/coderd/coderdtest"
2120
"github.com/coder/coder/v2/coderd/database"
22-
"github.com/coder/coder/v2/coderd/database/dbauthz"
2321
"github.com/coder/coder/v2/coderd/database/dbfake"
24-
"github.com/coder/coder/v2/coderd/database/dbgen"
25-
"github.com/coder/coder/v2/coderd/database/dbtime"
2622
"github.com/coder/coder/v2/coderd/util/slice"
2723
"github.com/coder/coder/v2/codersdk"
2824
"github.com/coder/coder/v2/pty/ptytest"
@@ -43,76 +39,22 @@ func makeAITask(t *testing.T, db database.Store, orgID, adminID, ownerID uuid.UU
4339
},
4440
}).Do()
4541

46-
ws := database.WorkspaceTable{
42+
build := dbfake.WorkspaceBuild(t, db, database.WorkspaceTable{
4743
OrganizationID: orgID,
4844
OwnerID: ownerID,
4945
TemplateID: tv.Template.ID,
50-
}
51-
build := dbfake.WorkspaceBuild(t, db, ws).
46+
}).
5247
Seed(database.WorkspaceBuild{
5348
TemplateVersionID: tv.TemplateVersion.ID,
5449
Transition: transition,
55-
}).WithAgent().Do()
56-
dbgen.WorkspaceBuildParameters(t, db, []database.WorkspaceBuildParameter{
57-
{
58-
WorkspaceBuildID: build.Build.ID,
59-
Name: codersdk.AITaskPromptParameterName,
60-
Value: prompt,
61-
},
62-
})
63-
agents, err := db.GetWorkspaceAgentsByWorkspaceAndBuildNumber(
64-
dbauthz.AsSystemRestricted(context.Background()),
65-
database.GetWorkspaceAgentsByWorkspaceAndBuildNumberParams{
66-
WorkspaceID: build.Workspace.ID,
67-
BuildNumber: build.Build.BuildNumber,
68-
},
69-
)
70-
require.NoError(t, err)
71-
require.NotEmpty(t, agents)
72-
agentID := agents[0].ID
73-
74-
// Create a workspace app and set it as the sidebar app.
75-
app := dbgen.WorkspaceApp(t, db, database.WorkspaceApp{
76-
AgentID: agentID,
77-
Slug: "task-sidebar",
78-
DisplayName: "Task Sidebar",
79-
External: false,
80-
})
81-
82-
// Update build flags to reference the sidebar app and HasAITask=true.
83-
err = db.UpdateWorkspaceBuildFlagsByID(
84-
dbauthz.AsSystemRestricted(context.Background()),
85-
database.UpdateWorkspaceBuildFlagsByIDParams{
86-
ID: build.Build.ID,
87-
HasAITask: sql.NullBool{Bool: true, Valid: true},
88-
HasExternalAgent: sql.NullBool{Bool: false, Valid: false},
89-
SidebarAppID: uuid.NullUUID{UUID: app.ID, Valid: true},
90-
UpdatedAt: build.Build.UpdatedAt,
91-
},
92-
)
93-
require.NoError(t, err)
94-
95-
// Create a task record in the tasks table for the new data model.
96-
task := dbgen.Task(t, db, database.TaskTable{
97-
OrganizationID: orgID,
98-
OwnerID: ownerID,
99-
Name: build.Workspace.Name,
100-
WorkspaceID: uuid.NullUUID{UUID: build.Workspace.ID, Valid: true},
101-
TemplateVersionID: tv.TemplateVersion.ID,
102-
TemplateParameters: []byte("{}"),
103-
Prompt: prompt,
104-
CreatedAt: dbtime.Now(),
105-
})
106-
107-
// Link the task to the workspace app.
108-
dbgen.TaskWorkspaceApp(t, db, database.TaskWorkspaceApp{
109-
TaskID: task.ID,
110-
WorkspaceBuildNumber: build.Build.BuildNumber,
111-
WorkspaceAgentID: uuid.NullUUID{UUID: agentID, Valid: true},
112-
WorkspaceAppID: uuid.NullUUID{UUID: app.ID, Valid: true},
113-
})
114-
115-
return task
50+
}).
51+
WithAgent().
52+
WithTask(database.TaskTable{
53+
Prompt: prompt,
54+
}, nil).
55+
Do()
56+
57+
return build.Task
11658
}
11759

11860
func TestExpTaskList(t *testing.T) {

cli/exp_task_test.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,6 @@ func createAITaskTemplate(t *testing.T, client *codersdk.Client, orgID uuid.UUID
293293
{
294294
Type: &proto.Response_Plan{
295295
Plan: &proto.PlanComplete{
296-
Parameters: []*proto.RichParameter{{Name: codersdk.AITaskPromptParameterName, Type: "string"}},
297296
HasAiTasks: true,
298297
},
299298
},
@@ -328,9 +327,7 @@ func createAITaskTemplate(t *testing.T, client *codersdk.Client, orgID uuid.UUID
328327
},
329328
AiTasks: []*proto.AITask{
330329
{
331-
SidebarApp: &proto.AITaskSidebarApp{
332-
Id: taskAppID.String(),
333-
},
330+
AppId: taskAppID.String(),
334331
},
335332
},
336333
},

coderd/aitasks.go

Lines changed: 22 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"net/http"
88
"net/url"
99
"slices"
10-
"strings"
1110
"time"
1211

1312
"github.com/google/uuid"
@@ -24,62 +23,12 @@ import (
2423
"github.com/coder/coder/v2/coderd/rbac/policy"
2524
"github.com/coder/coder/v2/coderd/searchquery"
2625
"github.com/coder/coder/v2/coderd/taskname"
26+
"github.com/coder/coder/v2/coderd/util/slice"
2727
"github.com/coder/coder/v2/codersdk"
2828

2929
aiagentapi "github.com/coder/agentapi-sdk-go"
3030
)
3131

32-
// This endpoint is experimental and not guaranteed to be stable, so we're not
33-
// generating public-facing documentation for it.
34-
func (api *API) aiTasksPrompts(rw http.ResponseWriter, r *http.Request) {
35-
ctx := r.Context()
36-
37-
buildIDsParam := r.URL.Query().Get("build_ids")
38-
if buildIDsParam == "" {
39-
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
40-
Message: "build_ids query parameter is required",
41-
})
42-
return
43-
}
44-
45-
// Parse build IDs
46-
buildIDStrings := strings.Split(buildIDsParam, ",")
47-
buildIDs := make([]uuid.UUID, 0, len(buildIDStrings))
48-
for _, idStr := range buildIDStrings {
49-
id, err := uuid.Parse(strings.TrimSpace(idStr))
50-
if err != nil {
51-
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
52-
Message: fmt.Sprintf("Invalid build ID format: %s", idStr),
53-
Detail: err.Error(),
54-
})
55-
return
56-
}
57-
buildIDs = append(buildIDs, id)
58-
}
59-
60-
parameters, err := api.Database.GetWorkspaceBuildParametersByBuildIDs(ctx, buildIDs)
61-
if err != nil {
62-
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
63-
Message: "Internal error fetching workspace build parameters.",
64-
Detail: err.Error(),
65-
})
66-
return
67-
}
68-
69-
promptsByBuildID := make(map[string]string, len(parameters))
70-
for _, param := range parameters {
71-
if param.Name != codersdk.AITaskPromptParameterName {
72-
continue
73-
}
74-
buildID := param.WorkspaceBuildID.String()
75-
promptsByBuildID[buildID] = param.Value
76-
}
77-
78-
httpapi.Write(ctx, rw, http.StatusOK, codersdk.AITasksPromptsResponse{
79-
Prompts: promptsByBuildID,
80-
})
81-
}
82-
8332
// @Summary Create a new AI task
8433
// @Description: EXPERIMENTAL: this endpoint is experimental and not guaranteed to be stable.
8534
// @ID create-task
@@ -174,13 +123,31 @@ func (api *API) tasksCreate(rw http.ResponseWriter, r *http.Request) {
174123
}
175124
}
176125

126+
// Check if the template defines the AI Prompt parameter.
127+
templateParams, err := api.Database.GetTemplateVersionParameters(ctx, req.TemplateVersionID)
128+
if err != nil {
129+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
130+
Message: "Internal error fetching template parameters.",
131+
Detail: err.Error(),
132+
})
133+
return
134+
}
135+
136+
var richParams []codersdk.WorkspaceBuildParameter
137+
if _, hasAIPromptParam := slice.Find(templateParams, func(param database.TemplateVersionParameter) bool {
138+
return param.Name == codersdk.AITaskPromptParameterName
139+
}); hasAIPromptParam {
140+
// Only add the AI Prompt parameter if the template defines it.
141+
richParams = []codersdk.WorkspaceBuildParameter{
142+
{Name: codersdk.AITaskPromptParameterName, Value: req.Input},
143+
}
144+
}
145+
177146
createReq := codersdk.CreateWorkspaceRequest{
178147
Name: taskName,
179148
TemplateVersionID: req.TemplateVersionID,
180149
TemplateVersionPresetID: req.TemplateVersionPresetID,
181-
RichParameterValues: []codersdk.WorkspaceBuildParameter{
182-
{Name: codersdk.AITaskPromptParameterName, Value: req.Input},
183-
},
150+
RichParameterValues: richParams,
184151
}
185152

186153
var owner workspaceOwner

0 commit comments

Comments
 (0)