mirror of
https://github.com/crewAIInc/crewAI.git
synced 2025-12-16 04:18:35 +00:00
449 lines
17 KiB
Plaintext
449 lines
17 KiB
Plaintext
---
|
||
title: Integração com o Linear
|
||
description: "Acompanhamento de projetos de software e rastreamento de bugs com a integração Linear para CrewAI."
|
||
icon: "list-check"
|
||
mode: "wide"
|
||
---
|
||
|
||
## Visão Geral
|
||
|
||
Permita que seus agentes gerenciem issues, projetos e fluxos de trabalho de desenvolvimento através do Linear. Crie e atualize issues, gerencie cronogramas de projetos, organize equipes e otimize seu processo de desenvolvimento de software com automação impulsionada por IA.
|
||
|
||
## Pré-requisitos
|
||
|
||
Antes de utilizar a integração com o Linear, certifique-se de que você possui:
|
||
|
||
- Uma conta [CrewAI AMP](https://app.crewai.com) com uma assinatura ativa
|
||
- Uma conta Linear com permissões apropriadas no workspace
|
||
- Conectou sua conta Linear através da [página de Integrações](https://app.crewai.com/crewai_plus/connectors)
|
||
|
||
## Configurando a Integração com o Linear
|
||
|
||
### 1. Conecte sua Conta Linear
|
||
|
||
1. Navegue até [Integrações CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
|
||
2. Encontre **Linear** na seção Integrações de Autenticação
|
||
3. Clique em **Conectar** e complete o fluxo OAuth
|
||
4. Conceda as permissões necessárias para gerenciamento de issues e projetos
|
||
5. Copie seu Token Empresarial em [Configurações de Integração](https://app.crewai.com/crewai_plus/settings/integrations)
|
||
|
||
### 2. Instale o Pacote Necessário
|
||
|
||
```bash
|
||
uv add crewai-tools
|
||
```
|
||
|
||
### 3. Configuração de variável de ambiente
|
||
|
||
<Note>
|
||
Para usar integrações com `Agent(apps=[])`, você deve definir a variável de ambiente `CREWAI_PLATFORM_INTEGRATION_TOKEN` com seu Enterprise Token.
|
||
</Note>
|
||
|
||
```bash
|
||
export CREWAI_PLATFORM_INTEGRATION_TOKEN="seu_enterprise_token"
|
||
```
|
||
|
||
Ou adicione ao seu arquivo `.env`:
|
||
|
||
```
|
||
CREWAI_PLATFORM_INTEGRATION_TOKEN=seu_enterprise_token
|
||
```
|
||
|
||
## Ações Disponíveis
|
||
|
||
<AccordionGroup>
|
||
<Accordion title="linear/create_issue">
|
||
**Descrição:** Crie uma nova issue no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `teamId` (string, obrigatório): ID da Equipe - Especifique o ID da equipe responsável para esta nova issue. Use as Configurações de Fluxo do Connect Portal para permitir que usuários escolham um ID de Equipe. (exemplo: "a70bdf0f-530a-4887-857d-46151b52b47c").
|
||
- `title` (string, obrigatório): Título - Especifique um título para esta issue.
|
||
- `description` (string, opcional): Descrição - Especifique uma descrição para esta issue.
|
||
- `statusId` (string, opcional): Status - Especifique o status desta issue.
|
||
- `priority` (string, opcional): Prioridade - Especifique a prioridade desta issue como um inteiro.
|
||
- `dueDate` (string, opcional): Data de Vencimento - Especifique a data de vencimento desta issue no formato ISO 8601.
|
||
- `cycleId` (string, opcional): ID do Ciclo - Especifique o ciclo associado a esta issue.
|
||
- `additionalFields` (object, opcional): Campos Adicionais.
|
||
```json
|
||
{
|
||
"assigneeId": "a70bdf0f-530a-4887-857d-46151b52b47c",
|
||
"labelIds": ["a70bdf0f-530a-4887-857d-46151b52b47c"]
|
||
}
|
||
```
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/update_issue">
|
||
**Descrição:** Atualize uma issue no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `issueId` (string, obrigatório): ID da Issue - Especifique o ID da issue a ser atualizada. (exemplo: "90fbc706-18cd-42c9-ae66-6bd344cc8977").
|
||
- `title` (string, opcional): Título - Especifique um título para esta issue.
|
||
- `description` (string, opcional): Descrição - Especifique uma descrição para esta issue.
|
||
- `statusId` (string, opcional): Status - Especifique o status desta issue.
|
||
- `priority` (string, opcional): Prioridade - Especifique a prioridade desta issue como um inteiro.
|
||
- `dueDate` (string, opcional): Data de Vencimento - Especifique a data de vencimento desta issue no formato ISO 8601.
|
||
- `cycleId` (string, opcional): ID do Ciclo - Especifique o ciclo associado a esta issue.
|
||
- `additionalFields` (object, opcional): Campos Adicionais.
|
||
```json
|
||
{
|
||
"assigneeId": "a70bdf0f-530a-4887-857d-46151b52b47c",
|
||
"labelIds": ["a70bdf0f-530a-4887-857d-46151b52b47c"]
|
||
}
|
||
```
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/get_issue_by_id">
|
||
**Descrição:** Obtenha uma issue pelo ID no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `issueId` (string, obrigatório): ID da Issue - Especifique o ID do registro da issue a ser buscada. (exemplo: "90fbc706-18cd-42c9-ae66-6bd344cc8977").
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/get_issue_by_issue_identifier">
|
||
**Descrição:** Obtenha uma issue através do identificador da issue no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `externalId` (string, obrigatório): ID Externo - Especifique o identificador legível da issue a ser buscada. (exemplo: "ABC-1").
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/search_issue">
|
||
**Descrição:** Pesquise issues no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `queryTerm` (string, obrigatório): Termo de Pesquisa - O termo a ser localizado na busca.
|
||
- `issueFilterFormula` (object, opcional): Um filtro na forma normal disjuntiva – OU de grupos E de condições únicas.
|
||
```json
|
||
{
|
||
"operator": "OR",
|
||
"conditions": [
|
||
{
|
||
"operator": "AND",
|
||
"conditions": [
|
||
{
|
||
"field": "title",
|
||
"operator": "$stringContains",
|
||
"value": "bug"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Campos disponíveis: `title`, `number`, `project`, `createdAt`
|
||
Operadores disponíveis: `$stringExactlyMatches`, `$stringDoesNotExactlyMatch`, `$stringIsIn`, `$stringIsNotIn`, `$stringStartsWith`, `$stringDoesNotStartWith`, `$stringEndsWith`, `$stringDoesNotEndWith`, `$stringContains`, `$stringDoesNotContain`, `$stringGreaterThan`, `$stringLessThan`, `$numberGreaterThanOrEqualTo`, `$numberLessThanOrEqualTo`, `$numberGreaterThan`, `$numberLessThan`, `$dateTimeAfter`, `$dateTimeBefore`
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/delete_issue">
|
||
**Descrição:** Exclua uma issue no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `issueId` (string, obrigatório): ID da Issue - Especifique o ID do registro da issue a ser excluída. (exemplo: "90fbc706-18cd-42c9-ae66-6bd344cc8977").
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/archive_issue">
|
||
**Descrição:** Arquive uma issue no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `issueId` (string, obrigatório): ID da Issue - Especifique o ID do registro da issue a ser arquivada. (exemplo: "90fbc706-18cd-42c9-ae66-6bd344cc8977").
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/create_sub_issue">
|
||
**Descrição:** Crie uma sub-issue no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `parentId` (string, obrigatório): ID do Pai - Especifique o ID da issue pai desta nova issue.
|
||
- `teamId` (string, obrigatório): ID da Equipe - Especifique o ID da equipe responsável pela nova sub-issue. Use as Configurações de Fluxo do Connect Portal para permitir que usuários escolham um ID de Equipe. (exemplo: "a70bdf0f-530a-4887-857d-46151b52b47c").
|
||
- `title` (string, obrigatório): Título - Especifique um título para esta issue.
|
||
- `description` (string, opcional): Descrição - Especifique uma descrição para esta issue.
|
||
- `additionalFields` (object, opcional): Campos Adicionais.
|
||
```json
|
||
{
|
||
"lead": "linear_user_id"
|
||
}
|
||
```
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/create_project">
|
||
**Descrição:** Crie um novo projeto no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `teamIds` (object, obrigatório): ID da Equipe - Especifique o(s) ID(s) da equipe associada a este projeto como string ou array JSON. Use as Configurações de Usuário do Connect Portal para que seu usuário selecione um ID de Equipe.
|
||
```json
|
||
[
|
||
"a70bdf0f-530a-4887-857d-46151b52b47c",
|
||
"4ac7..."
|
||
]
|
||
```
|
||
- `projectName` (string, obrigatório): Nome do Projeto - Especifique o nome do projeto. (exemplo: "Meu Projeto Linear").
|
||
- `description` (string, opcional): Descrição do Projeto - Especifique uma descrição para este projeto.
|
||
- `additionalFields` (object, opcional): Campos Adicionais.
|
||
```json
|
||
{
|
||
"state": "planned",
|
||
"description": ""
|
||
}
|
||
```
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/update_project">
|
||
**Descrição:** Atualize um projeto no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `projectId` (string, obrigatório): ID do Projeto - Especifique o ID do projeto a ser atualizado. (exemplo: "a6634484-6061-4ac7-9739-7dc5e52c796b").
|
||
- `projectName` (string, opcional): Nome do Projeto - Especifique o nome do projeto a ser atualizado. (exemplo: "Meu Projeto Linear").
|
||
- `description` (string, opcional): Descrição do Projeto - Especifique uma descrição para este projeto.
|
||
- `additionalFields` (object, opcional): Campos Adicionais.
|
||
```json
|
||
{
|
||
"state": "planned",
|
||
"description": ""
|
||
}
|
||
```
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/get_project_by_id">
|
||
**Descrição:** Obtenha um projeto pelo ID no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `projectId` (string, obrigatório): ID do Projeto - Especifique o ID do projeto a ser buscado. (exemplo: "a6634484-6061-4ac7-9739-7dc5e52c796b").
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/delete_project">
|
||
**Descrição:** Exclua um projeto no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `projectId` (string, obrigatório): ID do Projeto - Especifique o ID do projeto a ser excluído. (exemplo: "a6634484-6061-4ac7-9739-7dc5e52c796b").
|
||
</Accordion>
|
||
|
||
<Accordion title="linear/search_teams">
|
||
**Descrição:** Pesquise equipes no Linear.
|
||
|
||
**Parâmetros:**
|
||
- `teamFilterFormula` (object, opcional): Um filtro na forma normal disjuntiva – OU de grupos E de condições únicas.
|
||
```json
|
||
{
|
||
"operator": "OR",
|
||
"conditions": [
|
||
{
|
||
"operator": "AND",
|
||
"conditions": [
|
||
{
|
||
"field": "name",
|
||
"operator": "$stringContains",
|
||
"value": "Engineering"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
Campos disponíveis: `id`, `name`
|
||
</Accordion>
|
||
</AccordionGroup>
|
||
|
||
## Exemplos de Uso
|
||
|
||
### Configuração Básica do Agente Linear
|
||
|
||
```python
|
||
from crewai import Agent, Task, Crew
|
||
|
||
# Obtenha ferramentas empresariais (ferramentas do Linear serão incluídas)
|
||
|
||
# Crie um agente com funcionalidades do Linear
|
||
linear_agent = Agent(
|
||
role="Development Manager",
|
||
goal="Gerenciar issues do Linear e acompanhar o progresso do desenvolvimento de forma eficiente",
|
||
backstory="Um assistente de IA especializado em gerenciamento de projetos de desenvolvimento de software.",
|
||
apps=['linear']
|
||
)
|
||
|
||
# Tarefa para criar um relatório de bug
|
||
create_bug_task = Task(
|
||
description="Crie um relatório de bug de alta prioridade para o sistema de autenticação e atribua à equipe de backend",
|
||
agent=linear_agent,
|
||
expected_output="Bug report criado com sucesso com ID da issue"
|
||
)
|
||
|
||
# Execute a tarefa
|
||
crew = Crew(
|
||
agents=[linear_agent],
|
||
tasks=[create_bug_task]
|
||
)
|
||
|
||
crew.kickoff()
|
||
```
|
||
|
||
### Filtrando Ferramentas Lineares Específicas
|
||
|
||
```python
|
||
|
||
# Obtenha apenas ferramentas lineares específicas
|
||
actions_list=["linear/create_issue", "linear/update_issue", "linear/search_issue"]
|
||
)
|
||
|
||
issue_manager = Agent(
|
||
role="Issue Manager",
|
||
goal="Criar e gerenciar issues no Linear de forma eficiente",
|
||
backstory="Um assistente de IA focado na criação e no gerenciamento do ciclo de vida de issues.",
|
||
apps=['linear']
|
||
)
|
||
|
||
# Tarefa para gerenciar fluxo de issues
|
||
issue_workflow = Task(
|
||
description="Crie uma issue de solicitação de recurso e atualize os status das issues relacionadas para refletir o progresso atual",
|
||
agent=issue_manager,
|
||
expected_output="Solicitação de recurso criada e issues relacionadas atualizadas"
|
||
)
|
||
|
||
crew = Crew(
|
||
agents=[issue_manager],
|
||
tasks=[issue_workflow]
|
||
)
|
||
|
||
crew.kickoff()
|
||
```
|
||
|
||
### Gerenciamento de Projetos e Equipes
|
||
|
||
```python
|
||
from crewai import Agent, Task, Crew
|
||
|
||
project_coordinator = Agent(
|
||
role="Project Coordinator",
|
||
goal="Coordenar projetos e equipes no Linear de forma eficiente",
|
||
backstory="Um coordenador de projetos experiente que gerencia ciclos de desenvolvimento e fluxos de trabalho de equipe.",
|
||
apps=['linear']
|
||
)
|
||
|
||
# Tarefa para coordenar a configuração de projeto
|
||
project_coordination = Task(
|
||
description="""
|
||
1. Pesquise por equipes de engenharia no Linear
|
||
2. Crie um novo projeto para o desenvolvimento de recursos do Q2
|
||
3. Associe o projeto às equipes relevantes
|
||
4. Crie marcos iniciais do projeto como issues
|
||
""",
|
||
agent=project_coordinator,
|
||
expected_output="Projeto Q2 criado com equipes atribuídas e marcos iniciais estabelecidos"
|
||
)
|
||
|
||
crew = Crew(
|
||
agents=[project_coordinator],
|
||
tasks=[project_coordination]
|
||
)
|
||
|
||
crew.kickoff()
|
||
```
|
||
|
||
### Hierarquia de Issues e Gerenciamento de Sub-tarefas
|
||
|
||
```python
|
||
from crewai import Agent, Task, Crew
|
||
|
||
task_organizer = Agent(
|
||
role="Task Organizer",
|
||
goal="Organizar issues complexas em sub-tarefas gerenciáveis",
|
||
backstory="Um assistente de IA que divide trabalhos de desenvolvimento complexos em sub-tarefas organizadas.",
|
||
apps=['linear']
|
||
)
|
||
|
||
# Tarefa para criar hierarquia de issues
|
||
hierarchy_task = Task(
|
||
description="""
|
||
1. Pesquise por issues de recursos grandes que precisam ser divididos
|
||
2. Para cada issue complexa, crie sub-issues para diferentes componentes
|
||
3. Atualize as issues principais com descrições adequadas e links para sub-issues
|
||
4. Atribua sub-issues aos membros apropriados da equipe com base na especialidade
|
||
""",
|
||
agent=task_organizer,
|
||
expected_output="Issues complexas divididas em sub-tarefas gerenciáveis com atribuições corretas"
|
||
)
|
||
|
||
crew = Crew(
|
||
agents=[task_organizer],
|
||
tasks=[hierarchy_task]
|
||
)
|
||
|
||
crew.kickoff()
|
||
```
|
||
|
||
### Fluxo de Trabalho de Desenvolvimento Automatizado
|
||
|
||
```python
|
||
from crewai import Agent, Task, Crew
|
||
|
||
workflow_automator = Agent(
|
||
role="Workflow Automator",
|
||
goal="Automatizar processos de fluxo de trabalho de desenvolvimento no Linear",
|
||
backstory="Um assistente de IA que automatiza tarefas repetitivas de fluxo de trabalho de desenvolvimento.",
|
||
apps=['linear']
|
||
)
|
||
|
||
# Tarefa de automação de workflow complexa
|
||
automation_task = Task(
|
||
description="""
|
||
1. Pesquise por issues que estejam em progresso há mais de 7 dias
|
||
2. Atualize suas prioridades com base nas datas de vencimento e importância do projeto
|
||
3. Crie issues semanais de planejamento de sprint para cada equipe
|
||
4. Arquive issues concluídas do ciclo anterior
|
||
5. Gere relatórios de status do projeto como novas issues
|
||
""",
|
||
agent=workflow_automator,
|
||
expected_output="Fluxo de desenvolvimento automatizado com prioridades atualizadas, planejamento de sprint e relatórios de status"
|
||
)
|
||
|
||
crew = Crew(
|
||
agents=[workflow_automator],
|
||
tasks=[automation_task]
|
||
)
|
||
|
||
crew.kickoff()
|
||
```
|
||
|
||
## Solução de Problemas
|
||
|
||
### Problemas Comuns
|
||
|
||
**Erros de Permissão**
|
||
- Certifique-se de que sua conta Linear possui as permissões necessárias no workspace de destino
|
||
- Verifique se a conexão OAuth inclui os escopos requeridos pela API do Linear
|
||
- Confirme se você tem permissões para criar/editar issues e projetos no workspace
|
||
|
||
**IDs e Referências Inválidas**
|
||
- Verifique os IDs de equipes, IDs de issues e IDs de projetos para garantir o formato UUID correto
|
||
- Assegure que as entidades referenciadas (equipes, projetos, ciclos) existem e estão acessíveis
|
||
- Verifique se os identificadores de issues seguem o formato correto (ex: "ABC-1")
|
||
|
||
**Problemas de Associação entre Equipe e Projeto**
|
||
- Use LINEAR_SEARCH_TEAMS para obter IDs de equipe válidos antes de criar issues ou projetos
|
||
- Certifique-se de que as equipes existem e estão ativas no seu workspace
|
||
- Verifique se os IDs das equipes estão devidamente formatados como UUIDs
|
||
|
||
**Problemas com Status e Prioridade das Issues**
|
||
- Verifique se os IDs de status referenciam estados de workflow válidos para a equipe
|
||
- Certifique-se de que os valores de prioridade estão dentro do intervalo válido para sua configuração do Linear
|
||
- Confirme que campos personalizados e labels existem antes de referenciá-los
|
||
|
||
**Problemas com Formato de Data e Hora**
|
||
- Use o formato ISO 8601 para datas de vencimento e timestamps
|
||
- Certifique-se de que os fusos horários estão corretos para cálculos de datas de vencimento
|
||
- Verifique se os valores de data são válidos e posteriores à data atual para datas de vencimento
|
||
|
||
**Problemas de Pesquisa e Filtros**
|
||
- Garanta que as consultas de busca estejam formatadas corretamente e não estejam vazias
|
||
- Utilize nomes de campos válidos nas fórmulas de filtro: `title`, `number`, `project`, `createdAt`
|
||
- Teste filtros simples antes de montar consultas complexas com múltiplas condições
|
||
- Verifique se os tipos de operadores correspondem aos tipos de dados dos campos filtrados
|
||
|
||
**Problemas na Criação de Sub-issues**
|
||
- Certifique-se de que os IDs das issues pai são válidos e acessíveis
|
||
- Verifique se o ID da equipe para as sub-issues corresponde ou é compatível com o da issue pai
|
||
- Assegure-se de que as issues pai não estejam arquivadas ou excluídas
|
||
|
||
### Obtendo Ajuda
|
||
|
||
<Card title="Precisa de Ajuda?" icon="headset" href="mailto:support@crewai.com">
|
||
Entre em contato com nossa equipe de suporte para assistência na configuração ou solução de problemas da integração com o Linear.
|
||
</Card>
|