@@ -15,10 +15,11 @@ import { additionalSystemPrompts } from './system-prompt/prompts'
1515import { getAgentTemplate } from './templates/agent-registry'
1616import { getAgentPrompt } from './templates/strings'
1717import { processStreamWithTools } from './tools/stream-parser'
18+ import { getAgentOutput } from './util/agent-output'
1819import {
1920 asSystemInstruction ,
2021 asSystemMessage ,
21- asUserMessage ,
22+ buildUserMessageContent ,
2223 messagesWithSystem ,
2324 expireMessages ,
2425} from './util/messages'
@@ -52,29 +53,7 @@ import type {
5253import type { ProjectFileContext } from '@codebuff/common/util/file'
5354import type { WebSocket } from 'ws'
5455
55- /**
56- * Combines prompt, params, and content into a unified message content structure
57- */
58- function buildUserMessageContent (
59- prompt : string | undefined ,
60- params : Record < string , any > | undefined ,
61- content ?: Array < TextPart | ImagePart > ,
62- ) : string | Array < TextPart | ImagePart > {
63- // If we have content, return it as-is (client should have already combined prompt + content)
64- if ( content && content . length > 0 ) {
65- if ( content . length === 1 && content [ 0 ] . type === 'text' ) {
66- return asUserMessage ( content [ 0 ] . text )
67- }
68- return content
69- }
7056
71- // Only prompt/params, combine and return as simple text
72- const textParts = buildArray ( [
73- prompt ,
74- params && JSON . stringify ( params , null , 2 ) ,
75- ] )
76- return asUserMessage ( textParts . join ( '\n\n' ) )
77- }
7857
7958export const runAgentStep = async (
8059 params : {
@@ -789,42 +768,4 @@ export const loopAgentSteps = async (
789768 }
790769}
791770
792- function getAgentOutput (
793- agentState : AgentState ,
794- agentTemplate : AgentTemplate ,
795- ) : AgentOutput {
796- if ( agentTemplate . outputMode === 'structured_output' ) {
797- return {
798- type : 'structuredOutput' ,
799- value : agentState . output ?? null ,
800- }
801- }
802- if ( agentTemplate . outputMode === 'last_message' ) {
803- const assistantMessages = agentState . messageHistory . filter (
804- ( message ) : message is AssistantMessage => message . role === 'assistant' ,
805- )
806- const lastAssistantMessage = assistantMessages [ assistantMessages . length - 1 ]
807- if ( ! lastAssistantMessage ) {
808- return {
809- type : 'error' ,
810- message : 'No response from agent' ,
811- }
812- }
813- return {
814- type : 'lastMessage' ,
815- value : lastAssistantMessage . content ,
816- }
817- }
818- if ( agentTemplate . outputMode === 'all_messages' ) {
819- // Remove the first message, which includes the previous conversation history.
820- const agentMessages = agentState . messageHistory . slice ( 1 )
821- return {
822- type : 'allMessages' ,
823- value : agentMessages ,
824- }
825- }
826- agentTemplate . outputMode satisfies never
827- throw new Error (
828- `Unknown output mode: ${ 'outputMode' in agentTemplate ? agentTemplate . outputMode : 'undefined' } ` ,
829- )
830- }
771+
0 commit comments