#
# This workflow demonstrates using HttpRequestAction to call a REST API directly
# from the workflow without going through an AI agent first.
#
# HttpRequestAction allows workflows to:
# - Fetch data from external HTTP endpoints
# - Store the parsed response in workflow variables for later use
# - Add the response body to the conversation so a downstream agent can
#   answer questions based on it
#
# This sample fetches public metadata for the dotnet/runtime repository from
# the GitHub REST API (no authentication required) and uses an agent to
# answer follow-up questions about it.
#
# Example input:
# How many subscribers does the repository have?
#
kind: Workflow
trigger:

  kind: OnConversationStart
  id: workflow_invoke_http_request_demo
  actions:

    # Capture the original user message for input to the follow-up agent.
    - kind: SetVariable
      id: set_user_message
      variable: Local.InputMessage
      value: =System.LastMessage

    # Set the repository org/name used to form the request URL.
    - kind: SetVariable
      id: set_repo_name
      variable: Local.RepoName
      value: microsoft/agent-framework

    # Invoke the GitHub repo API. The response body is parsed into Local.RepoInfo
    # and also added to the conversation (via conversationId) so the agent below
    # can answer questions based on it.
    - kind: HttpRequestAction
      id: fetch_repo_info
      conversationId: =System.ConversationId
      method: GET
      url: =Concatenate("https://api.github.com/repos/", Local.RepoName)
      headers:
        Accept: application/vnd.github+json
        User-Agent: agent-framework-sample
      response: Local.RepoInfo

    # Display a confirmation message showing key fields from the parsed response.
    - kind: SendMessage
      id: show_repo_summary
      message: "Fetched repo: visibility={Local.RepoInfo.visibility}, description={Local.RepoInfo.description}"

    # Use the agent to summarize the repo using the conversation context.
    - kind: InvokeAzureAgent
      id: summarize_repo
      conversationId: =System.ConversationId
      agent:
        name: GitHubRepoInfoAgent
      input:
        messages: =UserMessage("Please provide a brief summary of this GitHub repository based on the data already in the conversation.")
      output:
        autoSend: true
        messages: Local.AgentResponse

    # Allow the user to ask follow-up questions about the repo in a loop.
    - kind: InvokeAzureAgent
      id: invoke_followup
      conversationId: =System.ConversationId
      agent:
        name: GitHubRepoInfoAgent
      input:
        messages: =Local.InputMessage
        externalLoop:
          when: =Upper(System.LastMessage.Text) <> "EXIT"
