{"version":3,"sources":["../../../src/agents/requirement/runner.ts"],"names":["TEMP_MESSAGE_KEY","RequirementAgentRunner","state","reasoner","iterationErrorCounter","globalErrorCounter","llm","runConfig","tools","requirements","expectedOutput","toolCallCycleChecker","ctx","forceFinalAnswerAsTool","templates","answer","result","memory","UnconstrainedMemory","steps","iteration","usage","totalTokens","promptTokens","completionTokens","reasoningTokens","cachedPromptTokens","undefined","finalAnswer","FinalAnswerTool","RequirementsReasoner","maxRetriesPerIteration","maxRetriesPerStep","RetryCounter","AgentError","maxRetries","Math","max","totalMaxRetries","incrementIteration","maxIterations","runLLM","request","streamMiddleware","createFinalAnswerStream","input","prepareLLMRequest","response","create","middleware","catch","err","ChatModelToolCallError","canStop","generatedContent","errorResponse","data","ChatModelOutput","AssistantMessage","finishReason","mergeTokenUsage","unbind","messages","createSystemMessage","system","allowedTools","toolChoice","streamPartialToolCalls","createFinalAnswerToolCall","fullText","parsed","parseBrokenJson","pair","customSchema","type","toolCallId","uuidv4","substring","toolName","name","inputSchema","parse","createRequest","extraRules","invokeToolCalls","toolCalls","toolResults","results","Promise","all","map","msg","runTool","toolCall","push","id","output","tool","error","toolError","render","reason","explain","isEmpty","getTextContent","toolNoResult","ToolMessage","value","use","addMessages","addMany","run","update","emitter","emit","runIteration","getToolCalls","length","textMessages","getTextMessages","text","m","join","finalAnswerToolCall","stream","add","updatedRequest","target","allowed","hidden","forced","preventStop","toolCallMsg","register","cycleFound","reset","tempMessages","filter","meta","deleteMany","StreamToolCallMiddleware","forceStreaming","key","matchNested","on","_","delta","outputStructured"],"mappings":"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","file":"runner.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport { AgentError } from \"@/agents/base.js\";\nimport { ChatModel, ChatModelInput, ChatModelOutput } from \"@/backend/chat.js\";\nimport { AssistantMessage, Message, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { RetryCounter } from \"@/internals/helpers/counter.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n  RequirementAgentExecutionConfig,\n  RequirementAgentRequest,\n  RequirementAgentRunState,\n  RequirementAgentTemplates,\n} from \"./types.js\";\nimport { Requirement, Rule } from \"./requirements/requirement.js\";\nimport { RequirementsReasoner, createSystemMessage } from \"./utils/llm.js\";\nimport { FinalAnswerTool, runTool } from \"./utils/tool.js\";\nimport { ToolCallChecker } from \"./utils/toolCallChecker.js\";\nimport { z } from \"zod\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { RequirementAgent } from \"@/agents/requirement/agent.js\";\nimport { mergeTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\nimport { StreamToolCallMiddleware } from \"@/middleware/streamToolCall.js\";\nimport { ChatModelToolCallError } from \"@/backend/errors.js\";\n\nconst TEMP_MESSAGE_KEY = \"tempMessage\";\n\n/**\n * Runner for RequirementAgent execution\n */\nexport class RequirementAgentRunner {\n  protected readonly state: RequirementAgentRunState;\n  protected readonly reasoner: RequirementsReasoner;\n  protected readonly iterationErrorCounter: RetryCounter;\n  protected readonly globalErrorCounter: RetryCounter;\n\n  constructor(\n    protected readonly llm: ChatModel,\n    protected readonly runConfig: RequirementAgentExecutionConfig,\n    tools: AnyTool[],\n    protected readonly requirements: Requirement[],\n    expectedOutput: string | z.ZodSchema | null,\n    protected readonly toolCallCycleChecker: ToolCallChecker,\n    protected readonly ctx: RunContext<RequirementAgent>,\n    protected forceFinalAnswerAsTool: boolean,\n    protected readonly templates: RequirementAgentTemplates,\n  ) {\n    this.state = {\n      answer: null,\n      result: null,\n      memory: new UnconstrainedMemory(),\n      steps: [],\n      iteration: 0,\n      usage: {\n        totalTokens: 0,\n        promptTokens: 0,\n        completionTokens: 0,\n        reasoningTokens: 0,\n        cachedPromptTokens: undefined,\n      },\n    };\n\n    this.requirements = requirements;\n    const finalAnswer = new FinalAnswerTool(expectedOutput, this.state);\n    this.reasoner = new RequirementsReasoner(tools, finalAnswer, ctx);\n\n    const maxRetriesPerIteration = runConfig.maxRetriesPerStep ?? 0;\n    this.iterationErrorCounter = new RetryCounter(maxRetriesPerIteration, AgentError);\n\n    const maxRetries = Math.max(maxRetriesPerIteration, runConfig.totalMaxRetries ?? 0);\n    this.globalErrorCounter = new RetryCounter(maxRetries, AgentError);\n  }\n\n  protected incrementIteration(): void {\n    this.state.iteration++;\n\n    if (this.runConfig.maxIterations && this.state.iteration > this.runConfig.maxIterations) {\n      throw new AgentError(\n        `Agent was not able to resolve the task in ${this.state.iteration} iterations.`,\n      );\n    }\n  }\n\n  protected async runLLM(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n    const streamMiddleware = this.createFinalAnswerStream(request.finalAnswer);\n    try {\n      const input = await this.prepareLLMRequest(request);\n      const response = await this.llm\n        .create(input)\n        .middleware(streamMiddleware)\n        .catch((err) => {\n          if (err instanceof ChatModelToolCallError && request.canStop) {\n            const { generatedContent, response: errorResponse } = err.data;\n            if (generatedContent) {\n              return new ChatModelOutput(\n                [new AssistantMessage(generatedContent)],\n                errorResponse?.usage,\n                errorResponse?.finishReason,\n              );\n            }\n          }\n          throw err;\n        });\n\n      if (response.usage) {\n        mergeTokenUsage(this.state.usage, response.usage);\n      }\n\n      return response;\n    } finally {\n      streamMiddleware.unbind();\n    }\n  }\n\n  protected async prepareLLMRequest(request: RequirementAgentRequest): Promise<ChatModelInput> {\n    const messages: Message[] = [\n      await createSystemMessage(this.templates.system, request),\n      ...this.state.memory.messages,\n    ];\n\n    return {\n      messages,\n      tools: request.allowedTools,\n      toolChoice: request.toolChoice,\n      streamPartialToolCalls: true,\n      maxRetries: this.runConfig.maxRetriesPerStep ?? 0,\n    };\n  }\n\n  protected async createFinalAnswerToolCall(fullText: string): Promise<AssistantMessage | null> {\n    // Try to extract JSON from text\n    const parsed = parseBrokenJson(fullText, { pair: [\"{\", \"}\"] });\n    if (!parsed) {\n      // If no JSON and no custom schema, wrap in default schema\n      if (!this.reasoner.finalAnswer.customSchema) {\n        return new AssistantMessage([\n          {\n            type: \"tool-call\",\n            toolCallId: `call_${uuidv4().substring(0, 8)}`,\n            toolName: this.reasoner.finalAnswer.name,\n            input: this.reasoner.finalAnswer.inputSchema().parse({ response: fullText }),\n          },\n        ]);\n      }\n      return null;\n    }\n\n    return new AssistantMessage([\n      {\n        type: \"tool-call\",\n        toolCallId: `call_${uuidv4().substring(0, 8)}`,\n        toolName: this.reasoner.finalAnswer.name,\n        input: parsed,\n      },\n    ]);\n  }\n\n  protected async createRequest(extraRules: Rule[] = []): Promise<RequirementAgentRequest> {\n    return await this.reasoner.createRequest(this.state, this.forceFinalAnswerAsTool, extraRules);\n  }\n\n  protected async invokeToolCalls(\n    tools: AnyTool[],\n    toolCalls: ToolCallPart[],\n  ): Promise<ToolMessage[]> {\n    const toolResults: ToolMessage[] = [];\n\n    const results = await Promise.all(\n      toolCalls.map((msg) => runTool(tools, msg, { state: this.state })),\n    );\n\n    for (const toolCall of results) {\n      this.state.steps.push({\n        id: uuidv4(),\n        iteration: this.state.iteration,\n        input: toolCall.input,\n        output: toolCall.output,\n        tool: toolCall.tool,\n        error: toolCall.error,\n      });\n\n      let result: string;\n      if (toolCall.error) {\n        result = this.templates.toolError.render({\n          reason: toolCall.error.explain(),\n        });\n      } else {\n        result = !toolCall.output.isEmpty()\n          ? toolCall.output.getTextContent()\n          : this.templates.toolNoResult.render({\n              toolCall: { tool: toolCall.tool, input: toolCall.input },\n            });\n      }\n      toolResults.push(\n        new ToolMessage({\n          type: \"tool-result\",\n          toolName: toolCall.tool?.name || toolCall.msg.toolName,\n          toolCallId: toolCall.msg.toolCallId,\n          output: { type: \"text\", value: result },\n        }),\n      );\n\n      if (toolCall.error) {\n        this.iterationErrorCounter.use(toolCall.error);\n        this.globalErrorCounter.use(toolCall.error);\n      }\n    }\n\n    return toolResults;\n  }\n\n  async addMessages(messages: Message[]): Promise<void> {\n    await this.state.memory.addMany(messages);\n  }\n\n  async run(): Promise<RequirementAgentRunState> {\n    if (this.state.answer) {\n      return this.state;\n    }\n\n    // Initialize requirements\n    await this.reasoner.update(this.requirements);\n\n    while (!this.state.answer) {\n      this.incrementIteration();\n\n      const request = await this.createRequest();\n      await this.ctx.emitter.emit(\"start\", { state: this.state, request });\n      const response = await this.runIteration(request);\n      await this.ctx.emitter.emit(\"success\", { state: this.state, response });\n    }\n\n    return this.state;\n  }\n\n  protected async runIteration(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n    const response = await this.runLLM(request);\n\n    // Try to cast text message to final answer tool call if allowed\n    if (response.getToolCalls().length === 0) {\n      const textMessages = response.getTextMessages();\n      const text = textMessages.map((m) => m.text).join(\"\\n\");\n\n      const finalAnswerToolCall =\n        text && request.canStop ? await this.createFinalAnswerToolCall(text) : null;\n      if (finalAnswerToolCall) {\n        const stream = this.createFinalAnswerStream(request.finalAnswer);\n        await stream.add(new ChatModelOutput([finalAnswerToolCall]));\n      } else {\n        const err = new AgentError(\"Model produced an invalid final answer tool call.\");\n        this.iterationErrorCounter.use(err);\n        this.globalErrorCounter.use(err);\n\n        if (!request.canStop) {\n          return await this.runIteration(request);\n        }\n\n        await this.reasoner.update([]);\n        const updatedRequest = await this.createRequest([\n          {\n            target: this.reasoner.finalAnswer.name,\n            allowed: true,\n            hidden: false,\n            forced: false,\n            preventStop: false,\n          },\n        ]);\n        this.forceFinalAnswerAsTool = true;\n        return await this.runIteration(updatedRequest);\n      }\n\n      response.messages.length = 0;\n      response.messages.push(finalAnswerToolCall);\n    }\n\n    // Check for cycles\n    const toolCalls = response.getToolCalls();\n    for (const toolCallMsg of toolCalls) {\n      this.toolCallCycleChecker.register(toolCallMsg);\n      if (this.toolCallCycleChecker.cycleFound) {\n        this.toolCallCycleChecker.reset();\n        const updatedRequest = await this.createRequest([\n          {\n            target: toolCallMsg.toolName,\n            allowed: false,\n            hidden: false,\n            forced: true,\n            preventStop: false,\n          },\n        ]);\n        return await this.runIteration(updatedRequest);\n      }\n    }\n\n    const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);\n    await this.state.memory.addMany([...response.messages, ...toolResults]);\n\n    // Delete temporary messages\n    const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);\n    await this.state.memory.deleteMany(tempMessages);\n\n    return response;\n  }\n\n  private createFinalAnswerStream(finalAnswer: FinalAnswerTool) {\n    const middleware = new StreamToolCallMiddleware({\n      target: finalAnswer,\n      forceStreaming: false,\n      key: \"response\",\n      matchNested: false,\n    });\n    middleware.emitter.on(\"update\", async (data, _) => {\n      await this.ctx.emitter.emit(\"finalAnswer\", {\n        state: this.state,\n        output: data.output,\n        delta: data.delta,\n        outputStructured: undefined,\n      });\n    });\n    return middleware;\n  }\n}\n"]}