Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

chore: remove deprecated AITaskPromptParameterName constant#21023

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
mafredri wants to merge1 commit intomain
base:main
Choose a base branch
Loading
fromfix-deprecated-parameter-removal
Open
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 0 additions & 22 deletionscoderd/aitasks.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ import (
"github.com/coder/coder/v2/coderd/rbac/policy"
"github.com/coder/coder/v2/coderd/searchquery"
"github.com/coder/coder/v2/coderd/util/ptr"
"github.com/coder/coder/v2/coderd/util/slice"
"github.com/coder/coder/v2/codersdk"
)

Expand DownExpand Up@@ -129,31 +128,10 @@ func (api *API) tasksCreate(rw http.ResponseWriter, r *http.Request) {
}
}

// Check if the template defines the AI Prompt parameter.
templateParams, err := api.Database.GetTemplateVersionParameters(ctx, req.TemplateVersionID)
if err != nil {
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
Message: "Internal error fetching template parameters.",
Detail: err.Error(),
})
return
}

var richParams []codersdk.WorkspaceBuildParameter
if _, hasAIPromptParam := slice.Find(templateParams, func(param database.TemplateVersionParameter) bool {
return param.Name == codersdk.AITaskPromptParameterName
}); hasAIPromptParam {
// Only add the AI Prompt parameter if the template defines it.
richParams = []codersdk.WorkspaceBuildParameter{
{Name: codersdk.AITaskPromptParameterName, Value: req.Input},
}
}

createReq := codersdk.CreateWorkspaceRequest{
Name: taskName,
TemplateVersionID: req.TemplateVersionID,
TemplateVersionPresetID: req.TemplateVersionPresetID,
RichParameterValues: richParams,
}

var owner workspaceOwner
Expand Down
58 changes: 4 additions & 54 deletionscoderd/aitasks_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -57,7 +57,7 @@ func TestTasks(t *testing.T) {
o(&opt)
}

// Create a template version that supports AI tasks with the AI Prompt parameter.
// Create a template version that supports AI tasks.
taskAppID := uuid.New()
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
Parse: echo.ParseComplete,
Expand DownExpand Up@@ -145,7 +145,7 @@ func TestTasks(t *testing.T) {

got, ok := slice.Find(tasks, func(t codersdk.Task) bool { return t.ID == task.ID })
require.True(t, ok, "task should be found in the list")
assert.Equal(t, wantPrompt, got.InitialPrompt, "task prompt should match theAI Prompt parameter")
assert.Equal(t, wantPrompt, got.InitialPrompt, "task prompt should match theinput")
assert.Equal(t, task.WorkspaceID.UUID, got.WorkspaceID.UUID, "workspace id should match")
assert.Equal(t, task.WorkspaceName, got.WorkspaceName, "workspace name should match")
// Status should be populated via the tasks_with_status view.
Expand DownExpand Up@@ -204,7 +204,7 @@ func TestTasks(t *testing.T) {

assert.Equal(t, task.ID, updated.ID, "task ID should match")
assert.Equal(t, task.Name, updated.Name, "task name should match")
assert.Equal(t, wantPrompt, updated.InitialPrompt, "task prompt should match theAI Prompt parameter")
assert.Equal(t, wantPrompt, updated.InitialPrompt, "task prompt should match theinput")
assert.Equal(t, task.WorkspaceID.UUID, updated.WorkspaceID.UUID, "workspace id should match")
assert.Equal(t, task.WorkspaceName, updated.WorkspaceName, "workspace name should match")
assert.Equal(t, ws.LatestBuild.BuildNumber, updated.WorkspaceBuildNumber, "workspace build number should match")
Expand DownExpand Up@@ -973,56 +973,6 @@ func TestTasksCreate(t *testing.T) {
require.Len(t, parameters, 0)
})

t.Run("OK AIPromptBackCompat", func(t *testing.T) {
t.Parallel()

var (
ctx = testutil.Context(t, testutil.WaitShort)

taskPrompt = "Some task prompt"
)

client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
user := coderdtest.CreateFirstUser(t, client)

// Given: A template with an "AI Prompt" parameter
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
Parse: echo.ParseComplete,
ProvisionApply: echo.ApplyComplete,
ProvisionPlan: []*proto.Response{
{Type: &proto.Response_Plan{Plan: &proto.PlanComplete{
Parameters: []*proto.RichParameter{{Name: codersdk.AITaskPromptParameterName, Type: "string"}},
HasAiTasks: true,
}}},
},
})
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)

// When: We attempt to create a Task.
task, err := client.CreateTask(ctx, "me", codersdk.CreateTaskRequest{
TemplateVersionID: template.ActiveVersionID,
Input: taskPrompt,
})
require.NoError(t, err)
require.True(t, task.WorkspaceID.Valid)

ws, err := client.Workspace(ctx, task.WorkspaceID.UUID)
require.NoError(t, err)
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)

// Then: We expect a workspace to have been created.
assert.NotEmpty(t, task.Name)
assert.Equal(t, template.ID, task.TemplateID)

// And: We expect it to have the "AI Prompt" parameter correctly set.
parameters, err := client.WorkspaceBuildParameters(ctx, ws.LatestBuild.ID)
require.NoError(t, err)
require.Len(t, parameters, 1)
assert.Equal(t, codersdk.AITaskPromptParameterName, parameters[0].Name)
assert.Equal(t, taskPrompt, parameters[0].Value)
})

t.Run("CustomNames", func(t *testing.T) {
t.Parallel()

Expand DownExpand Up@@ -1149,7 +1099,7 @@ func TestTasksCreate(t *testing.T) {
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
user := coderdtest.CreateFirstUser(t, client)

// Given: A template withoutan "AIPrompt" parameter
// Given: A template without AItask support (no coder_ai_task resource)
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
Expand Down
6 changes: 1 addition & 5 deletionscoderd/database/dbfake/dbfake.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,6 @@ import (
"github.com/coder/coder/v2/coderd/rbac"
"github.com/coder/coder/v2/coderd/telemetry"
"github.com/coder/coder/v2/coderd/wspubsub"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/provisionersdk"
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
)
Expand DownExpand Up@@ -130,10 +129,7 @@ func (b WorkspaceBuildBuilder) WithTask(taskSeed database.TaskTable, appSeed *sd
b.taskAppID, err = uuid.Parse(takeFirst(appSeed.Id, uuid.NewString()))
require.NoError(b.t, err)

return b.Params(database.WorkspaceBuildParameter{
Name: codersdk.AITaskPromptParameterName,
Value: b.taskSeed.Prompt,
}).WithAgent(func(a []*sdkproto.Agent) []*sdkproto.Agent {
return b.WithAgent(func(a []*sdkproto.Agent) []*sdkproto.Agent {
a[0].Apps = []*sdkproto.App{
{
Id: b.taskAppID.String(),
Expand Down
15 changes: 0 additions & 15 deletionscodersdk/aitasks.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,23 +10,8 @@ import (

"github.com/google/uuid"
"golang.org/x/xerrors"

"github.com/coder/terraform-provider-coder/v2/provider"
)

// AITaskPromptParameterName is the name of the parameter used to pass prompts
// to AI tasks.
//
// Deprecated: This constant is deprecated and maintained only for backwards
// compatibility with older templates. Task prompts are now stored directly
// in the tasks.prompt database column. New code should access prompts via
// the Task.InitialPrompt field returned from task endpoints.
//
// This constant will be removed in a future major version. Templates should
// not rely on this parameter name, as the backend will continue to create it
// automatically for compatibility but reads from tasks.prompt.
constAITaskPromptParameterName=provider.TaskPromptParameterName

// CreateTaskRequest represents the request to create a new task.
typeCreateTaskRequeststruct {
TemplateVersionID uuid.UUID`json:"template_version_id" format:"uuid"`
Expand Down
1 change: 0 additions & 1 deletioncodersdk/toolsdk/toolsdk_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1017,7 +1017,6 @@ func TestTools(t *testing.T) {
ProvisionApply:echo.ApplyComplete,
ProvisionPlan: []*proto.Response{
{Type:&proto.Response_Plan{Plan:&proto.PlanComplete{
Parameters: []*proto.RichParameter{{Name:"AI Prompt",Type:"string"}},
HasAiTasks:true,
}}},
},
Expand Down
7 changes: 4 additions & 3 deletionsdocs/ai-coder/ai-bridge/client-config.md
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -58,6 +58,8 @@ data "coder_workspace_owner" "me" {}

data "coder_workspace" "me" {}

data "coder_task" "me" {}

resource "coder_agent" "dev" {
arch = "amd64"
os = "linux"
Expand All@@ -71,13 +73,12 @@ resource "coder_agent" "dev" {

# See https://registry.coder.com/modules/coder/claude-code for more information
module "claude-code" {
count = local.has_ai_prompt ? data.coder_workspace.me.start_count : 0
source = "dev.registry.coder.com/coder/claude-code/coder"
version = ">=3.4.0"
version = ">=4.0.0"
agent_id = coder_agent.dev.id
workdir = "/home/coder/project"
claude_api_key = data.coder_workspace_owner.me.session_token # Use the Coder session token to authenticate with AI Bridge
ai_prompt = data.coder_parameter.ai_prompt.value
ai_prompt = data.coder_task.me.prompt
... # other claude-code configuration
}
```
Expand Down
5 changes: 3 additions & 2 deletionsdocs/ai-coder/tasks-migration.md
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,8 @@ Prior to Coder version 2.28.0, the definition of a Coder task was different to t

Note that 2 and 3 were generally handled by the `coder/agentapi` Terraform module.

The pre-2.28.0 definition will be supported until the release of 2.29.0. You will need to update your Tasks-enabled templates to continue using Tasks after this release.
> [!IMPORTANT]
> The pre-2.28.0 definition is no longer supported as of Coder 2.30.0. You must update your Tasks-enabled templates to use the new format described below.

You can view an [example migration here](https://github.com/coder/coder/pull/20420). Alternatively, follow the steps below:

Expand DownExpand Up@@ -114,7 +115,7 @@ resource "coder_ai_task" "task" {

In v2.28 and above, the following changes were made:

- The explicitly named "AI Prompt" parameter isdeprecated. The task prompt is now available in the `coder_ai_task` resource (provider version 2.12 and above) and `coder_task` data source (provider version 2.13 and above).
- The explicitly named "AI Prompt" parameter isno longer supported. The task prompt is now available in the `coder_ai_task` resource (provider version 2.12 and above) and `coder_task` data source (provider version 2.13 and above).
- Modules no longer define the `coder_ai_task` resource. These must be defined explicitly in the template.
- The `sidebar_app` field of the `coder_ai_task` resource is now deprecated. In its place, use `app_id`.

Expand Down
21 changes: 4 additions & 17 deletionsprovisioner/terraform/provision_test.go
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,8 +19,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/coder/terraform-provider-coder/v2/provider"

"cdr.dev/slog"
"cdr.dev/slog/sloggers/slogtest"

Expand DownExpand Up@@ -885,18 +883,15 @@ func TestProvision(t *testing.T) {
{
Name: "ai-task-multiple-allowed-in-plan",
Files: map[string]string{
"main.tf":fmt.Sprintf(`terraform {
"main.tf": `terraform {
required_providers {
coder = {
source = "coder/coder"
version = ">= 2.7.0"
version = ">= 2.13.0"
}
}
}
data "coder_parameter" "prompt" {
name = "%s"
type = "string"
}
data "coder_task" "me" {}
resource "coder_ai_task" "a" {
sidebar_app {
id = "7128be08-8722-44cb-bbe1-b5a391c4d94b" # fake ID, irrelevant here anyway but needed for validation
Expand All@@ -907,7 +902,7 @@ func TestProvision(t *testing.T) {
id = "7128be08-8722-44cb-bbe1-b5a391c4d94b" # fake ID, irrelevant here anyway but needed for validation
}
}
`, provider.TaskPromptParameterName),
`,
},
Request: &proto.PlanRequest{},
Response: &proto.PlanComplete{
Expand All@@ -921,14 +916,6 @@ func TestProvision(t *testing.T) {
Type: "coder_ai_task",
},
},
Parameters: []*proto.RichParameter{
{
Name: provider.TaskPromptParameterName,
Type: "string",
Required: true,
FormType: proto.ParameterFormType_INPUT,
},
},
AiTasks: []*proto.AITask{
{
Id: "a",
Expand Down
16 changes: 0 additions & 16 deletionssite/src/api/typesGenerated.ts
View file
Open in desktop

Some generated files are not rendered by default. Learn more abouthow customized files appear on GitHub.

8 changes: 3 additions & 5 deletionssite/src/modules/tasks/TaskPrompt/TaskPrompt.stories.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import {
MockAIPromptPresets,
MockPresets,
MockTask,
MockTaskPresets,
MockTasks,
MockTemplate,
MockTemplateVersion,
Expand DownExpand Up@@ -72,11 +72,9 @@ export const WithPresets: Story = {
},
};

export constReadOnlyPresetPrompt: Story = {
export constWithAIPresets: Story = {
beforeEach: () => {
spyOn(API, "getTemplateVersionPresets").mockResolvedValue(
MockAIPromptPresets,
);
spyOn(API, "getTemplateVersionPresets").mockResolvedValue(MockTaskPresets);
},
};

Expand Down
26 changes: 2 additions & 24 deletionssite/src/modules/tasks/TaskPrompt/TaskPrompt.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,6 @@ import type {
Template,
TemplateVersionExternalAuth,
} from "api/typesGenerated";
import { AITaskPromptParameterName } from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { Button } from "components/Button/Button";
import { ExternalImage } from "components/ExternalImage/ExternalImage";
Expand DownExpand Up@@ -162,19 +161,6 @@ const CreateTaskForm: FC<CreateTaskFormProps> = ({ templates, onSuccess }) => {
const defaultPreset = presets?.find((p) => p.Default);
setSelectedPresetId(defaultPreset?.ID ?? presets?.[0]?.ID);
}, [presets]);
const selectedPreset = presets?.find((p) => p.ID === selectedPresetId);

// Read-only prompt if defined in preset
const presetPrompt = selectedPreset?.Parameters?.find(
(param) => param.Name === AITaskPromptParameterName,
)?.Value;
const isPromptReadOnly = !!presetPrompt;
useEffect(() => {
if (presetPrompt) {
setPrompt(presetPrompt);
}
}, [presetPrompt]);

// External Auth
const {
externalAuth,
Expand DownExpand Up@@ -243,21 +229,13 @@ const CreateTaskForm: FC<CreateTaskFormProps> = ({ templates, onSuccess }) => {
className="border border-border border-solid rounded-3xl p-3 bg-surface-secondary"
disabled={createTaskMutation.isPending}
>
<label
htmlFor="prompt"
className={
isPromptReadOnly
? "text-xs font-medium text-content-primary block px-3 pt-2"
: "sr-only"
}
>
{isPromptReadOnly ? "Prompt defined by preset" : "Prompt"}
<label htmlFor="prompt" className="sr-only">
Prompt
</label>
<PromptTextarea
required
value={prompt}
onChange={(e) => setPrompt(e.target.value)}
readOnly={isPromptReadOnly}
isSubmitting={createTaskMutation.isPending}
/>
<div className="flex items-center justify-between pt-2">
Expand Down
3 changes: 1 addition & 2 deletionssite/src/testHelpers/entities.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -4970,14 +4970,13 @@ export const MockPresets: TypesGen.Preset[] = [
},
];

export constMockAIPromptPresets: TypesGen.Preset[] = [
export constMockTaskPresets: TypesGen.Preset[] = [
{
ID: "ai-preset-1",
Name: "Code Review",
Description: "",
Icon: "",
Parameters: [
{ Name: "AI Prompt", Value: "Review the code for best practices" },
{ Name: "cpu", Value: "4" },
{ Name: "memory", Value: "8GB" },
],
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp