You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

4.8 KiB

Plan 34-02 Execution Summary

Phase: 34 - Context-Aware Agentic Workflow Editing Plan: 02 - Enhanced Chat API Route with Tool Calling Status: Complete Date: 2026-01-30

Objective

Enhance the /api/chat route to use AI SDK tool calling for intent-based routing between help, create, and edit modes. The chat API becomes context-aware by accepting workflow state from the client, building a context-enriched system prompt, and using tool calling to let the LLM choose the right action.

Tasks Completed

Task 1: Rewrite /api/chat route with tool calling

Commit: 7602dac - feat(34-02): enhance chat API route with tool-based intent routing

Implementation:

  • Rewrote src/app/api/chat/route.ts with tool-based intent routing
  • Added imports: stepCountIs from 'ai', createChatTools, buildEditSystemPrompt from tools, buildWorkflowContext from contextBuilder, WorkflowNode, WorkflowEdge types
  • Request body now accepts { messages: UIMessage[], workflowState?: { nodes: WorkflowNode[], edges: WorkflowEdge[] } }
  • Build workflow context: buildWorkflowContext(workflowState?.nodes || [], workflowState?.edges || [])
  • Generate context-aware system prompt: buildEditSystemPrompt(context)
  • Extract node IDs for tool validation: nodeIds = workflowState?.nodes.map(n => n.id)
  • Create tools: createChatTools(nodeIds) returns answerQuestion, createWorkflow, editWorkflow
  • Configure streamText with:
    • model: google('gemini-2.5-flash')
    • system: systemPrompt (context-enriched)
    • messages: modelMessages
    • tools: tools
    • toolChoice: 'auto' (LLM decides)
    • stopWhen: stepCountIs(3) (multi-step reasoning)
  • Return result.toUIMessageStreamResponse() for useChat hook compatibility
  • Removed old static SYSTEM_PROMPT constant (replaced by dynamic prompt from tools.ts)

Verification:

  • npx tsc --noEmit passes for chat route (no errors in src/app/api/chat/route.ts)
  • Route compiles correctly with all new imports and tool configuration
  • All type errors are pre-existing in test files, unrelated to this change

Deviations from Plan

Deviation 1: Changed maxSteps to stopWhen: stepCountIs(3) (Rule 1 - Auto-fix bug)

  • Issue: Plan specified maxSteps: 3, but AI SDK v6 doesn't support that parameter
  • Resolution: Used stopWhen: stepCountIs(3) instead, which is the correct API for controlling multi-step tool execution in AI SDK v6
  • Impact: Same behavior (allow up to 3 steps), correct API usage
  • Type: Auto-fix bug (incorrect API parameter name)

Key Technical Decisions

  1. Tool pattern: Used "generate" pattern (no execute function) - LLM generates structured output matching zod schema, results stream back to client for application
  2. Context injection: Workflow state is optional for backward compatibility when no workflow is loaded
  3. System prompt: Dynamic prompt built per request with current workflow context (replaces static prompt)
  4. Multi-step reasoning: Allow up to 3 steps via stopWhen: stepCountIs(3) for handling complex edit requests
  5. Streaming: Results stream via toUIMessageStreamResponse() for seamless useChat hook integration

Verification

  • npx tsc --noEmit passes for chat route
  • Route accepts workflowState in request body
  • System prompt includes current workflow context
  • Tools are properly passed to streamText
  • Response streams correctly via toUIMessageStreamResponse

Success Criteria Met

  • /api/chat route uses tool calling with answerQuestion, createWorkflow, editWorkflow
  • Workflow state is accepted from client and injected into system prompt
  • LLM chooses appropriate tool based on user message intent
  • Streaming response compatible with useChat hook on client

Files Modified

  • src/app/api/chat/route.ts - Enhanced with tool calling and workflow context awareness

Dependencies

  • Imports from: src/lib/chat/tools.ts (createChatTools, buildEditSystemPrompt)
  • Imports from: src/lib/chat/contextBuilder.ts (buildWorkflowContext)
  • Uses: AI SDK v6 tool calling with streamText
  • Blocks: Plan 34-03 (ChatPanel client integration) - needs this API to be ready

Next Steps

Plan 34-03 will enhance the ChatPanel component to:

  • Send workflow state to /api/chat
  • Read tool call results from streaming messages
  • Apply edit operations returned by editWorkflow tool
  • Invoke quickstart API for createWorkflow tool
  • Display answers from answerQuestion tool

Notes

  • All test file errors are pre-existing and unrelated to this change
  • The route maintains backward compatibility (workflowState is optional)
  • Tool results are streamed to client without server-side execution (client applies changes)
  • Context-aware prompt gives LLM full visibility into current workflow for intelligent routing