Skip to content

Commit a122ca1

Browse files
committed
fix(coderd/x/chatd): clarify computer-use tool gate
1 parent 00f975f commit a122ca1

3 files changed

Lines changed: 28 additions & 27 deletions

File tree

coderd/x/chatd/chatd.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6739,14 +6739,13 @@ func (p *Server) runChat(
67396739
providerTools, err = appendComputerUseProviderTool(
67406740
providerTools,
67416741
computerUseProviderToolOptions{
6742-
provider: computerUseProvider,
6743-
isPlanModeTurn: isPlanModeTurn,
6744-
isExploreSubagent: isExploreSubagent,
6745-
isComputerUse: isComputerUse,
6746-
getWorkspaceConn: workspaceCtx.getWorkspaceConn,
6747-
storeFile: storeChatAttachment,
6748-
clock: p.clock,
6749-
logger: p.logger.Named("computer_use"),
6742+
provider: computerUseProvider,
6743+
isPlanModeTurn: isPlanModeTurn,
6744+
isComputerUse: isComputerUse,
6745+
getWorkspaceConn: workspaceCtx.getWorkspaceConn,
6746+
storeFile: storeChatAttachment,
6747+
clock: p.clock,
6748+
logger: p.logger.Named("computer_use"),
67506749
},
67516750
)
67526751
if err != nil {

coderd/x/chatd/chatd_internal_test.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -200,14 +200,14 @@ func TestAppendComputerUseProviderTool_Gates(t *testing.T) {
200200
}}
201201

202202
tests := []struct {
203-
name string
204-
isPlanModeTurn bool
205-
isExploreSubagent bool
206-
isComputerUse bool
203+
name string
204+
isPlanModeTurn bool
205+
isComputerUse bool
207206
}{
208207
{name: "PlanMode", isPlanModeTurn: true, isComputerUse: true},
209-
{name: "ExploreSubagent", isExploreSubagent: true, isComputerUse: true},
210-
{name: "NotComputerUse"},
208+
// Non-computer-use includes regular, master, general, and explore chats.
209+
// Mode cannot be both ChatModeComputerUse and another chat mode.
210+
{name: "NonComputerUseModes"},
211211
}
212212

213213
for _, tt := range tests {
@@ -217,10 +217,9 @@ func TestAppendComputerUseProviderTool_Gates(t *testing.T) {
217217
providerTools, err := appendComputerUseProviderTool(
218218
baseTools,
219219
computerUseProviderToolOptions{
220-
provider: chattool.ComputerUseProviderOpenAI,
221-
isPlanModeTurn: tt.isPlanModeTurn,
222-
isExploreSubagent: tt.isExploreSubagent,
223-
isComputerUse: tt.isComputerUse,
220+
provider: chattool.ComputerUseProviderOpenAI,
221+
isPlanModeTurn: tt.isPlanModeTurn,
222+
isComputerUse: tt.isComputerUse,
224223
},
225224
)
226225
require.NoError(t, err)

coderd/x/chatd/computer_use.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,21 +106,24 @@ func (p *Server) resolveComputerUseModel(
106106
}
107107

108108
type computerUseProviderToolOptions struct {
109-
provider string
110-
isPlanModeTurn bool
111-
isExploreSubagent bool
112-
isComputerUse bool
113-
getWorkspaceConn func(context.Context) (workspacesdk.AgentConn, error)
114-
storeFile chattool.StoreFileFunc
115-
clock quartz.Clock
116-
logger slog.Logger
109+
provider string
110+
isPlanModeTurn bool
111+
isComputerUse bool
112+
getWorkspaceConn func(context.Context) (workspacesdk.AgentConn, error)
113+
storeFile chattool.StoreFileFunc
114+
clock quartz.Clock
115+
logger slog.Logger
117116
}
118117

119118
func appendComputerUseProviderTool(
120119
providerTools []chatloop.ProviderTool,
121120
opts computerUseProviderToolOptions,
122121
) ([]chatloop.ProviderTool, error) {
123-
if opts.isPlanModeTurn || opts.isExploreSubagent || !opts.isComputerUse {
122+
// This helper is called for every chat turn. Only chats created by the
123+
// computer_use subagent definition have ChatModeComputerUse, which filters
124+
// out root, general, and explore chats. Plan mode is separate from Mode, so
125+
// planning turns stay gated even for computer-use chats.
126+
if opts.isPlanModeTurn || !opts.isComputerUse {
124127
return providerTools, nil
125128
}
126129

0 commit comments

Comments
 (0)