Pular para o conteúdo principal

Criar Toolkits para Issues no GitHub

Você pode conectar o GitHub ao StackSpot AI utilizando Toolkits. Siga estas instruções passo a passo para realizar a integração manual:

Passo 1. Acesse o Portal da StackSpot AI;

Passo 2. Navegue até a seção ‘Toolkits’;

Passo 3. Clique no botão ‘Criar Toolkit’ e preencha as seguintes informações:

  • Nome: Toolkit GitHub Issues
  • Descrição: Toolkit para integração com as APIs do GitHub para uso relacionado a issues.

Adicionar Ferramentas do GitHub

info

Você deve registrar uma secret para que as requisições à API do GitHub sejam autenticadas corretamente.

Criar uma issue

Clique no botão ‘Adicionar Tool’ e, em seguida, selecione a opção ‘Manual’ e preencha as seguintes informações:

  • Nome: criar uma issue
  • Método: selecione 'POST'
  • Descrição da Ferramenta: cria uma nova issue no repositório especificado.
  • Invoke URL: https://api.github.com/repos/{owner}/{repo}/issues
  • Parâmetros:
Lista de parametros para esta requisição
[
{
"description": "The name of the repository owner (user or organization).",
"required": true,
"deprecated": false,
"explode": false,
"param_schema": {
"type": "string",
"example": "octocat"
},
"name": "owner",
"param_in": "path",
"allowEmptyValue": false,
"allowReserved": false
},
{
"description": "Repository name.",
"required": true,
"deprecated": false,
"explode": false,
"param_schema": {
"type": "string",
"example": "Hello-World"
},
"name": "repo",
"param_in": "path",
"allowEmptyValue": false,
"allowReserved": false
}
]
  • Corpo da requisição:
Corpo da Requisição para este exemplo
{
"description": "The request body containing the details of the issue to be created.",
"content": {
"application/json": {
"media_type_schema": {
"properties": {
"title": {
"type": "string",
"description": "The title of the issue.",
"example": "Bug: Login button does not work on mobile"
},
"body": {
"type": "string",
"description": "The detailed body of the issue. Supports Markdown formatting.",
"example": "The login button does not respond to touch on devices with a resolution lower than 480px."
},
"labels": {
"items": {
"type": "string"
},
"type": "array",
"description": "A list of label names to be applied to the issue.",
"example": [
"bug",
"mobile",
"urgent"
]
},
"assignees": {
"items": {
"type": "string"
},
"type": "array",
"description": "A list of user logins to be assigned to the issue.",
"example": [
"fulano-dev"
]
},
"milestone": {
"type": "integer",
"description": "The milestone ID number to be associated.",
"example": 1
}
},
"type": "object",
"required": [
"title"
]
}
}
},
"required": true
}
  • Response Transformation (Transformação da resposta):(Opcional)
Jinja para retornar apenas o número e o link da issue criada
{% if response.status_code == 201 %}
{
"issue_number": {{ response.json.number }},
"url": "{{ response.json.html_url }}"
}
{% else %}
{
"error": "{{ response.raw_data }}"
}
{% endif %}

Obter uma issue

Clique no botão ‘Adicionar Tool’ e, em seguida, selecione a opção ‘Manual’ e preencha as seguintes informações:

  • Nome: obter uma issue
  • Método: selecione 'GET'
  • Descrição da Ferramenta: obtém os detalhes de uma issue específica pelo seu número.
  • Invoke URL: https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}.
  • Parâmetros:
Lista de parâmetros para esta requisição
[
{
"description": "The repository owner.",
"required": true,
"deprecated": false,
"explode": false,
"param_schema": {
"type": "string"
},
"name": "owner",
"param_in": "path",
"allowEmptyValue": false,
"allowReserved": false
},
{
"description": "The repository name.",
"required": true,
"deprecated": false,
"explode": false,
"param_schema": {
"type": "string"
},
"name": "repo",
"param_in": "path",
"allowEmptyValue": false,
"allowReserved": false
},
{
"description": "The issue number.",
"required": true,
"deprecated": false,
"explode": false,
"param_schema": {
"type": "integer"
},
"name": "issue_number",
"param_in": "path",
"allowEmptyValue": false,
"allowReserved": false
}
]

Listar issues de um repositório

Clique no botão ‘Adicionar Tool’ e, em seguida, selecione a opção ‘Manual’ e preencha as seguintes informações:

  • Nome: listar todas as issues do repositório
  • Método: selecione 'GET'
  • Descrição da Ferramenta: esta ferramenta obtém uma lista de todas as issues de um repositório específico e permite filtrar por status, tags, responsável, etc.
  • Invoke URL: https://api.github.com/repos/{owner}/{repo}/issues.
  • Parâmetros:
Lista de parâmetros para esta requisição
[
{
"description":"The repository owner.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"owner",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"The repository name.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"repo",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"Filter by issue state.",
"required":false,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string",
"enum":[
"open",
"closed",
"all"
],
"default":"open"
},
"name":"state",
"param_in":"query",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"Comma-separated list of labels. E.g.: 'bug,docs'.",
"required":false,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"labels",
"param_in":"query",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"Sorting criterion.",
"required":false,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string",
"enum":[
"created",
"updated",
"comments"
],
"default":"created"
},
"name":"sort",
"param_in":"query",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"Sorting direction.",
"required":false,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string",
"enum":[
"asc",
"desc"
],
"default":"desc"
},
"name":"direction",
"param_in":"query",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"Results per page.",
"required":false,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"integer",
"default":30
},
"name":"per_page",
"param_in":"query",
"allowEmptyValue":false,
"allowReserved":false
}
]

Atualizar uma issue

Clique no botão ‘Adicionar Tool’ e, em seguida, selecione a opção ‘Manual’ e preencha as seguintes informações:

  • Nome: atualizar uma issue
  • Método: selecione 'PATCH'
  • Descrição da Ferramenta: atualiza o título, descrição, status, responsável ou outros atributos de uma issue existente.
  • Invoke URL: https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}.
  • Parâmetros:
Lista de parâmetros para esta requisição
[
{
"description":"The repository owner.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"owner",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"The repository name.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"repo",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"The issue number.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"integer"
},
"name":"issue_number",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
}
]
  • Corpo da requisição:
Corpo da requisição deste exemplo
{
"description":"Data to update an issue. All fields are optional.",
"content":{
"application/json":{
"media_type_schema":{
"properties":{
"title":{
"type":"string"
},
"body":{
"type":"string"
},
"state":{
"type":"string",
"enum":[
"open",
"closed"
]
},
"labels":{
"items":{
"type":"string"
},
"type":"array"
},
"assignees":{
"items":{
"type":"string"
},
"type":"array"
}
},
"type":"object"
}
}
},
"required":false
}

Bloquear uma issue

Clique no botão ‘Adicionar Tool’ e, em seguida, selecione a opção ‘Manual’ e preencha as seguintes informações:

  • Nome: bloquear uma issue
  • Método: selecione 'PUT'
  • Descrição da Ferramenta: impede que novos comentários sejam adicionados a uma issue.
  • Invoke URL: https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}/lock.
  • Parâmetros:
Lista de parâmetros para esta requisição
[
{
"description":"The repository owner.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"owner",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"The repository name.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"repo",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"The issue number.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"integer"
},
"name":"issue_number",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
}
]
  • Corpo da requisição:
Corpo da requisição deste exemplo
{
"content":{
"application/json":{
"media_type_schema":{
"properties":{
"lock_reason":{
"type":"string",
"enum":[
"off-topic",
"too heated",
"resolved",
"spam"
]
}
},
"type":"object"
}
}
},
"required":false
}

Desbloquear uma issue

Clique no botão ‘Adicionar Tool’ e, em seguida, selecione a opção ‘Manual’ e preencha as seguintes informações:

  • Nome: desbloquear uma issue
  • Método: selecione 'DELETE'
  • Descrição da Ferramenta: Permite que novos comentários sejam adicionados a uma issue.
  • Invoke URL: https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}/lock.
  • Parâmetros:
Lista de parâmetros para esta requisição
[
{
"description":"The repository owner.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"owner",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"The repository name.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"string"
},
"name":"repo",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
},
{
"description":"The issue number.",
"required":true,
"deprecated":false,
"explode":false,
"param_schema":{
"type":"integer"
},
"name":"issue_number",
"param_in":"path",
"allowEmptyValue":false,
"allowReserved":false
}
]

Testar seu Toolkit

Passo 1. Crie um Agente. Acesse a seção ‘Agentes’ e clique no botão ‘Criar Agente’. Preencha os seguintes campos:

  • Nome do Agente: GitHub Open Source Issues
  • System Prompt:
"Você é um agente que compreende todo o contexto da conversa e abre uma issue descrevendo o problema e possíveis soluções. Você sempre pergunta qual ação relacionada à issue o usuário deseja realizar: Criar ou Abrir uma Issue, Obter uma Issue, Listar todas as issues de um repositório, Atualizar uma Issue, Bloquear uma Issue, Desbloquear uma Issue.
Você também solicita o repositório onde a issue deve ser aberta e o proprietário do repositório.
Você não deve abrir uma issue sem obter essas informações primeiro."
  • LLM: selecione Azure GPT-4.1
  • Tools: adicione todas as Tools que você criou anteriormente:
    • Desbloquear uma issue: permite que novos comentários sejam adicionados a uma issue.
    • Bloquear uma issue: impede que novos comentários sejam adicionados a uma issue.
    • Atualizar uma issue: atualiza o título, descrição, status, responsável ou outros atributos de uma issue existente.
    • Obter uma issue: recupera os detalhes de uma issue específica pelo número.
    • Criar uma issue: cria uma nova issue no repositório especificado.
    • Listar issues de um Repositório: obtém uma lista de todas as issues de um repositório específico e permite filtrar por status, tags, responsável, etc.

Passo 2. Teste seu Agente com o Toolkit.