Skip to content

Commit 77d0642

Browse files
committed
handleStep => handleSteps
1 parent dc184ba commit 77d0642

File tree

7 files changed

+46
-43
lines changed

7 files changed

+46
-43
lines changed

backend/src/__tests__/run-programmatic-step.test.ts

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ describe('runProgrammaticStep', () => {
8787
systemPrompt: 'Test system prompt',
8888
userInputPrompt: 'Test user prompt',
8989
agentStepPrompt: 'Test agent step prompt',
90-
handleStep: undefined, // Will be set in individual tests
90+
handleSteps: undefined, // Will be set in individual tests
9191
} as AgentTemplate
9292

9393
// Create mock agent state
@@ -132,7 +132,7 @@ describe('runProgrammaticStep', () => {
132132
yield { toolName: 'end_turn', args: {} }
133133
})() as StepGenerator
134134

135-
mockTemplate.handleStep = () => mockGenerator
135+
mockTemplate.handleSteps = () => mockGenerator
136136

137137
const result = await runProgrammaticStep(mockAgentState, mockParams)
138138

@@ -149,7 +149,7 @@ describe('runProgrammaticStep', () => {
149149
})() as StepGenerator
150150
}
151151

152-
mockTemplate.handleStep = createGenerator
152+
mockTemplate.handleSteps = createGenerator
153153
// First call
154154
await runProgrammaticStep(mockAgentState, mockParams)
155155
expect(callCount).toBe(1)
@@ -166,7 +166,7 @@ describe('runProgrammaticStep', () => {
166166
yield 'STEP_ALL'
167167
})() as StepGenerator
168168

169-
mockTemplate.handleStep = () => mockGenerator
169+
mockTemplate.handleSteps = () => mockGenerator
170170

171171
// First call to set STEP_ALL state
172172
const result1 = await runProgrammaticStep(mockAgentState, mockParams)
@@ -179,7 +179,7 @@ describe('runProgrammaticStep', () => {
179179
})
180180

181181
it('should throw error when template has no handleStep', async () => {
182-
mockTemplate.handleStep = undefined
182+
mockTemplate.handleSteps = undefined
183183

184184
await expect(
185185
runProgrammaticStep(mockAgentState, mockParams)
@@ -194,7 +194,7 @@ describe('runProgrammaticStep', () => {
194194
yield { toolName: 'end_turn', args: {} }
195195
})() as StepGenerator
196196

197-
mockTemplate.handleStep = () => mockGenerator
197+
mockTemplate.handleSteps = () => mockGenerator
198198

199199
const result = await runProgrammaticStep(mockAgentState, mockParams)
200200

@@ -220,7 +220,7 @@ describe('runProgrammaticStep', () => {
220220
yield { toolName: 'end_turn', args: {} }
221221
})() as StepGenerator
222222

223-
mockTemplate.handleStep = () => mockGenerator
223+
mockTemplate.handleSteps = () => mockGenerator
224224

225225
const result = await runProgrammaticStep(mockAgentState, mockParams)
226226

@@ -241,7 +241,7 @@ describe('runProgrammaticStep', () => {
241241
yield { toolName: 'end_turn', args: {} }
242242
})() as StepGenerator
243243

244-
mockTemplate.handleStep = () => mockGenerator
244+
mockTemplate.handleSteps = () => mockGenerator
245245

246246
// Mock executeToolCall to add tool results
247247
executeToolCallSpy.mockImplementation(async (options: any) => {
@@ -275,7 +275,7 @@ describe('runProgrammaticStep', () => {
275275
}
276276
})() as StepGenerator
277277

278-
mockTemplate.handleStep = () => mockGenerator
278+
mockTemplate.handleSteps = () => mockGenerator
279279

280280
const result = await runProgrammaticStep(mockAgentState, mockParams)
281281

@@ -289,7 +289,7 @@ describe('runProgrammaticStep', () => {
289289
return // Generator completes
290290
})() as StepGenerator
291291

292-
mockTemplate.handleStep = () => mockGenerator
292+
mockTemplate.handleSteps = () => mockGenerator
293293

294294
const result = await runProgrammaticStep(mockAgentState, mockParams)
295295

@@ -306,7 +306,7 @@ describe('runProgrammaticStep', () => {
306306
} // Should not execute
307307
})() as StepGenerator
308308

309-
mockTemplate.handleStep = () => mockGenerator
309+
mockTemplate.handleSteps = () => mockGenerator
310310

311311
const result = await runProgrammaticStep(mockAgentState, mockParams)
312312

@@ -325,7 +325,7 @@ describe('runProgrammaticStep', () => {
325325
yield { toolName: 'end_turn', args: {} }
326326
})() as StepGenerator
327327

328-
mockTemplate.handleStep = () => mockGenerator
328+
mockTemplate.handleSteps = () => mockGenerator
329329
mockTemplate.toolNames.push('update_report')
330330

331331
// Mock executeToolCall to update state
@@ -349,7 +349,7 @@ describe('runProgrammaticStep', () => {
349349
yield { toolName: 'end_turn', args: {} }
350350
})() as StepGenerator
351351

352-
mockTemplate.handleStep = () => mockGenerator
352+
mockTemplate.handleSteps = () => mockGenerator
353353
mockTemplate.toolNames.push('update_report')
354354

355355
// Don't mock executeToolCall - let it use the real implementation
@@ -368,7 +368,7 @@ describe('runProgrammaticStep', () => {
368368
yield { toolName: 'end_turn', args: {} }
369369
})() as StepGenerator
370370

371-
mockTemplate.handleStep = () => mockGenerator
371+
mockTemplate.handleSteps = () => mockGenerator
372372

373373
const result = await runProgrammaticStep(mockAgentState, mockParams)
374374

@@ -384,7 +384,7 @@ describe('runProgrammaticStep', () => {
384384
throw new Error('Generator error')
385385
})() as StepGenerator
386386

387-
mockTemplate.handleStep = () => mockGenerator
387+
mockTemplate.handleSteps = () => mockGenerator
388388

389389
const responseChunks: string[] = []
390390
mockParams.onResponseChunk = (chunk: string) => responseChunks.push(chunk)
@@ -404,7 +404,7 @@ describe('runProgrammaticStep', () => {
404404
yield { toolName: 'end_turn', args: {} }
405405
})() as StepGenerator
406406

407-
mockTemplate.handleStep = () => mockGenerator
407+
mockTemplate.handleSteps = () => mockGenerator
408408
executeToolCallSpy.mockRejectedValue(new Error('Tool execution failed'))
409409

410410
const responseChunks: string[] = []
@@ -421,7 +421,7 @@ describe('runProgrammaticStep', () => {
421421
throw 'String error'
422422
})() as StepGenerator
423423

424-
mockTemplate.handleStep = () => mockGenerator
424+
mockTemplate.handleSteps = () => mockGenerator
425425

426426
const result = await runProgrammaticStep(mockAgentState, mockParams)
427427

@@ -436,7 +436,7 @@ describe('runProgrammaticStep', () => {
436436
yield { toolName: 'end_turn', args: {} }
437437
})() as StepGenerator
438438

439-
mockTemplate.handleStep = () => mockGenerator
439+
mockTemplate.handleSteps = () => mockGenerator
440440

441441
await runProgrammaticStep(mockAgentState, mockParams)
442442

@@ -449,7 +449,7 @@ describe('runProgrammaticStep', () => {
449449
yield { toolName: 'end_turn', args: {} }
450450
})() as StepGenerator
451451

452-
mockTemplate.handleStep = () => mockGenerator
452+
mockTemplate.handleSteps = () => mockGenerator
453453

454454
await runProgrammaticStep(mockAgentState, mockParams)
455455

@@ -462,7 +462,7 @@ describe('runProgrammaticStep', () => {
462462
yield { toolName: 'end_turn', args: {} }
463463
})() as StepGenerator
464464

465-
mockTemplate.handleStep = () => mockGenerator
465+
mockTemplate.handleSteps = () => mockGenerator
466466

467467
await runProgrammaticStep(mockAgentState, mockParams)
468468

backend/src/__tests__/sandbox-generator.test.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { describe, test, expect, beforeEach, afterEach } from 'bun:test'
1+
import { AgentState } from '@codebuff/common/types/session-state'
2+
import { afterEach, beforeEach, describe, expect, test } from 'bun:test'
3+
import { WebSocket } from 'ws'
24
import {
3-
runProgrammaticStep,
45
clearAgentGeneratorCache,
6+
runProgrammaticStep,
57
} from '../run-programmatic-step'
6-
import { AgentState } from '@codebuff/common/types/session-state'
78
import { AgentTemplate } from '../templates/types'
8-
import { WebSocket } from 'ws'
99
import { mockFileContext, MockWebSocket } from './test-utils'
1010

1111
describe('QuickJS Sandbox Generator', () => {
@@ -45,7 +45,7 @@ describe('QuickJS Sandbox Generator', () => {
4545
initialAssistantPrefix: '',
4646
stepAssistantMessage: '',
4747
stepAssistantPrefix: '',
48-
handleStep: '', // Will be set per test
48+
handleSteps: '', // Will be set per test
4949
}
5050

5151
// Common params structure
@@ -72,7 +72,7 @@ describe('QuickJS Sandbox Generator', () => {
7272

7373
test('should execute string-based generator in QuickJS sandbox', async () => {
7474
// Customize template for this test
75-
mockTemplate.handleStep = `
75+
mockTemplate.handleSteps = `
7676
function* ({ agentState, prompt, params }) {
7777
yield {
7878
toolName: 'update_report',
@@ -104,7 +104,7 @@ describe('QuickJS Sandbox Generator', () => {
104104
mockTemplate.name = 'Test VM Agent Error'
105105
mockTemplate.purpose = 'Test QuickJS error handling'
106106
mockTemplate.toolNames = []
107-
mockTemplate.handleStep = `
107+
mockTemplate.handleSteps = `
108108
function* ({ agentState, prompt, params }) {
109109
throw new Error('QuickJS error test')
110110
}

backend/src/run-agent-step.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,16 @@ export const runAgentStep = async (
101101
)
102102
}
103103

104-
const { handleStep } = agentTemplate
105-
if (handleStep) {
106-
const { agentState: newAgentState, endTurn } = await runProgrammaticStep(agentState, {
107-
...options,
108-
ws,
109-
template: agentTemplate,
110-
})
104+
const { handleSteps } = agentTemplate
105+
if (handleSteps) {
106+
const { agentState: newAgentState, endTurn } = await runProgrammaticStep(
107+
agentState,
108+
{
109+
...options,
110+
ws,
111+
template: agentTemplate,
112+
}
113+
)
111114
agentState = newAgentState
112115
if (endTurn) {
113116
return {

backend/src/run-programmatic-step.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import { AgentTemplate, StepGenerator } from './templates/types'
99
import { CodebuffToolCall } from './tools/constants'
1010
import { executeToolCall } from './tools/tool-executor'
1111
import { logger } from './util/logger'
12-
import { getRequestContext } from './websockets/request-context'
1312
import { SandboxManager } from './util/quickjs-sandbox'
13+
import { getRequestContext } from './websockets/request-context'
1414

1515
// Global sandbox manager for QuickJS contexts
1616
const sandboxManager = new SandboxManager()
@@ -59,7 +59,7 @@ export async function runProgrammaticStep(
5959
fingerprintId,
6060
fileContext,
6161
} = params
62-
if (!template.handleStep) {
62+
if (!template.handleSteps) {
6363
throw new Error('No step handler found for agent template ' + template.id)
6464
}
6565

@@ -79,11 +79,11 @@ export async function runProgrammaticStep(
7979

8080
// Check if we need to initialize a generator (either native or QuickJS-based)
8181
if (!generator && !sandbox) {
82-
if (typeof template.handleStep === 'string') {
82+
if (typeof template.handleSteps === 'string') {
8383
// Initialize QuickJS sandbox for string-based generator
8484
sandbox = await sandboxManager.getOrCreateSandbox(
8585
agentState.agentId,
86-
template.handleStep,
86+
template.handleSteps,
8787
{
8888
agentState,
8989
prompt: params.prompt,
@@ -92,7 +92,7 @@ export async function runProgrammaticStep(
9292
)
9393
} else {
9494
// Initialize native generator
95-
generator = template.handleStep({
95+
generator = template.handleSteps({
9696
agentState,
9797
prompt: params.prompt,
9898
params: params.params,

backend/src/templates/agents/file-explorer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export const fileExplorer = {
3535
stepAssistantMessage: '',
3636
stepAssistantPrefix: '',
3737

38-
handleStep: function* ({ prompt, params }) {
38+
handleSteps: function* ({ prompt, params }) {
3939
const filePickerPrompts = params.prompts.map(
4040
(focusPrompt) =>
4141
`Based on the overall goal "${prompt}", find files related to this specific area: ${focusPrompt}`

backend/src/templates/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export type AgentTemplate<
3838
userInputPrompt: string
3939
agentStepPrompt: string
4040

41-
handleStep?: StepHandler<P, T> | string // Function or string of the generator code for running in a sandbox
41+
handleSteps?: StepHandler<P, T> | string // Function or string of the generator code for running in a sandbox
4242
}
4343

4444
export type StepGenerator = Generator<

backend/src/util/quickjs-sandbox.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ export class QuickJSSandbox {
8686
};
8787
8888
// Agent function
89-
const handleStep = ${generatorCode};
89+
const handleSteps = ${generatorCode};
9090
9191
// Create generator instance
92-
let generator = handleStep(${JSON.stringify(initialInput)});
92+
let generator = handleSteps(${JSON.stringify(initialInput)});
9393
9494
// Generator management
9595
globalThis._generator = generator;

0 commit comments

Comments
 (0)