custom-agents-boilerplate 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- custom_agents_boilerplate-0.1.0/LICENSE +21 -0
- custom_agents_boilerplate-0.1.0/MANIFEST.in +4 -0
- custom_agents_boilerplate-0.1.0/PKG-INFO +207 -0
- custom_agents_boilerplate-0.1.0/README.md +190 -0
- custom_agents_boilerplate-0.1.0/pyproject.toml +35 -0
- custom_agents_boilerplate-0.1.0/setup.cfg +4 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/__init__.py +3 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/cli.py +212 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/generator.py +127 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/_base/base-prompt.md +30 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/_base/rules.md +39 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/dev/prompt.md +38 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/dev/tasks.md +7 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/estudante/prompt.md +39 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/estudante/tasks.md +7 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/po/prompt.md +50 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/po/tasks.md +7 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/qa/prompt.md +45 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/agents/qa/tasks.md +7 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/config/levels.json +70 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/config/roles.json +60 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/levels/avancado.md +29 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/levels/iniciante.md +30 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates/levels/intermediario.md +25 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate/templates_loader.py +18 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate.egg-info/PKG-INFO +207 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate.egg-info/SOURCES.txt +28 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate.egg-info/dependency_links.txt +1 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate.egg-info/entry_points.txt +2 -0
- custom_agents_boilerplate-0.1.0/src/custom_agents_boilerplate.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Custom Agents Boilerplate Authors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: custom-agents-boilerplate
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: CLI para gerar Custom Agents (VS Code + GitHub Copilot Chat) em qualquer projeto.
|
|
5
|
+
Author: Agent Boilerplate
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/EngelRyan/agent-boilerplate
|
|
8
|
+
Project-URL: Repository, https://github.com/EngelRyan/agent-boilerplate
|
|
9
|
+
Project-URL: Issues, https://github.com/EngelRyan/agent-boilerplate/issues
|
|
10
|
+
Keywords: vscode,copilot,agents,prompt,cli
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Requires-Python: >=3.9
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Dynamic: license-file
|
|
17
|
+
|
|
18
|
+
# Agent Boilerplate 🤖
|
|
19
|
+
|
|
20
|
+
Ambiente de **Custom Agents** para o **VS Code + GitHub Copilot Chat**, com variações por:
|
|
21
|
+
|
|
22
|
+
- **Role (papel)**: Dev 🧑💻 | QA 🧪 | PO 📋 | Estudante 🎓
|
|
23
|
+
- **Nível (mentoria)**: Iniciante 🌱 | Intermediário 🚀 | Avançado ⚡
|
|
24
|
+
|
|
25
|
+
Objetivo: para a mesma tarefa, obter respostas **coerentes e visivelmente diferentes** dependendo do papel e do nível.
|
|
26
|
+
|
|
27
|
+
## Uso profissional (sem clonar repo)
|
|
28
|
+
|
|
29
|
+
Você pode instalar um CLI e gerar os agentes **dentro de qualquer projeto**.
|
|
30
|
+
|
|
31
|
+
### Instalar
|
|
32
|
+
|
|
33
|
+
Recomendado (instala o comando globalmente, sem sujar o Python do sistema):
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pipx install custom-agents-boilerplate
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Alternativa (instala no ambiente atual):
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install custom-agents-boilerplate
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Gerar no seu projeto
|
|
46
|
+
|
|
47
|
+
Dentro da pasta do seu projeto, rode o wizard:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
custom-agents
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Ele cria `.github/agents/` (e opcionalmente `chatmodes/`). Depois abra o projeto no VS Code → Copilot Chat → dropdown de Agents.
|
|
54
|
+
|
|
55
|
+
### Usar sem menu (CI / comando direto)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
custom-agents generate --roles dev,qa --levels iniciante,avancado --output .
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Listar opções:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
custom-agents list
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Publicar no PyPI
|
|
68
|
+
|
|
69
|
+
Guia completo (manual + GitHub Actions com Trusted Publishing): veja `PUBLISHING.md`.
|
|
70
|
+
|
|
71
|
+
## O que você ganha com cada role
|
|
72
|
+
|
|
73
|
+
- **Dev**: implementação, arquitetura, debugging, qualidade de código.
|
|
74
|
+
- **QA**: plano de testes, casos de teste, estratégia de automação, risco e severidade.
|
|
75
|
+
- **PO**: user stories, critérios de aceite, métricas de sucesso, priorização.
|
|
76
|
+
- **Estudante**: explicação didática, exemplos progressivos, exercícios.
|
|
77
|
+
|
|
78
|
+
## O que muda em cada nível
|
|
79
|
+
|
|
80
|
+
- **Iniciante**: define termos, passo a passo curto, exemplo completo.
|
|
81
|
+
- **Intermediário**: trade-offs, perguntas de contexto, snippets relevantes.
|
|
82
|
+
- **Avançado**: direto, crítico, edge cases, implicações de longo prazo.
|
|
83
|
+
|
|
84
|
+
## Onde ficam os agentes (importante)
|
|
85
|
+
|
|
86
|
+
O formato atual do VS Code chama isso de **Custom Agents** e o VS Code detecta automaticamente os arquivos em:
|
|
87
|
+
|
|
88
|
+
- `.github/agents/*.agent.md`
|
|
89
|
+
|
|
90
|
+
Este repo também mantém uma pasta `chatmodes/` com arquivos `*.chatmode.md` por compatibilidade/legado.
|
|
91
|
+
|
|
92
|
+
> Nota: neste projeto, os arquivos em `.github/agents/` e `chatmodes/` são **gerados**.
|
|
93
|
+
> Quem clonar o repo deve gerar pela primeira vez (passo abaixo).
|
|
94
|
+
|
|
95
|
+
## Como usar no VS Code (passo a passo)
|
|
96
|
+
|
|
97
|
+
1. Abra a pasta `agent-boilerplate/` no VS Code.
|
|
98
|
+
2. Abra o Copilot Chat.
|
|
99
|
+
3. No dropdown de **Agents**, selecione um agente (por exemplo `dev-iniciante`).
|
|
100
|
+
4. Faça sua solicitação normalmente.
|
|
101
|
+
|
|
102
|
+
Se você não enxergar os agentes:
|
|
103
|
+
|
|
104
|
+
- Garanta que o workspace está **Trusted**.
|
|
105
|
+
- Abra a tela de customizações do chat (ícone de engrenagem) e confira a lista de agentes carregados.
|
|
106
|
+
|
|
107
|
+
## Agentes disponíveis (12 combinações)
|
|
108
|
+
|
|
109
|
+
- `dev-iniciante`, `dev-intermediario`, `dev-avancado`
|
|
110
|
+
- `qa-iniciante`, `qa-intermediario`, `qa-avancado`
|
|
111
|
+
- `po-iniciante`, `po-intermediario`, `po-avancado`
|
|
112
|
+
- `estudante-iniciante`, `estudante-intermediario`, `estudante-avancado`
|
|
113
|
+
|
|
114
|
+
## Estrutura do projeto
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
agent-boilerplate/
|
|
118
|
+
├── .github/
|
|
119
|
+
│ └── agents/ # 12 custom agents (formato atual)
|
|
120
|
+
├── src/custom_agents_boilerplate/templates/
|
|
121
|
+
│ ├── config/ # Fonte da verdade de roles e níveis
|
|
122
|
+
│ ├── agents/ # Prompts por role (+ base)
|
|
123
|
+
│ └── levels/ # Ajuste de comportamento por nível
|
|
124
|
+
├── chatmodes/ # Arquivos legacy (*.chatmode.md)
|
|
125
|
+
├── examples/ # Exemplos para demo (entrada/saída)
|
|
126
|
+
└── scripts/ # validate + list + regenerate
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Validar a instalação
|
|
130
|
+
|
|
131
|
+
Primeiro clone/primeira vez:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
bash scripts/generate-agents.sh
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Depois valide:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
bash scripts/validate.sh
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Se você quiser validar apenas as “fontes” (sem exigir arquivos gerados), use:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
bash scripts/validate.sh --source-only
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Regenerar os agentes após mudanças
|
|
150
|
+
|
|
151
|
+
Quando você editar qualquer arquivo em `src/custom_agents_boilerplate/templates/agents/` ou `src/custom_agents_boilerplate/templates/levels/`, regenere:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
bash scripts/generate-agents.sh
|
|
155
|
+
bash scripts/validate.sh
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Gerar um pacote custom (baixar só o que escolher)
|
|
159
|
+
|
|
160
|
+
Se você quer distribuir/usar **apenas algumas combinações** (por exemplo, só `dev-iniciante` e `qa-avancado`), use o empacotador:
|
|
161
|
+
|
|
162
|
+
### Opção 1 (recomendado): menu guiado
|
|
163
|
+
|
|
164
|
+
Rode e siga o passo a passo:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
python scripts/package_agents.py
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Ele vai perguntar quais **roles**, quais **níveis**, a **pasta de saída**, se é para **recriar** ou **adicionar mais**, e se gera `.zip`.
|
|
171
|
+
|
|
172
|
+
### Opção 2: comando direto (sem menu)
|
|
173
|
+
|
|
174
|
+
1) (Opcional) veja as opções disponíveis:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
python scripts/package_agents.py --list
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
2) Gere uma pasta (e opcionalmente um `.zip`) com **apenas os agentes escolhidos**:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
python scripts/package_agents.py --roles dev,qa --levels iniciante,avancado --zip
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Isso cria `dist/agent-boilerplate-package/` contendo somente:
|
|
187
|
+
|
|
188
|
+
- `.github/agents/*.agent.md` (os selecionados)
|
|
189
|
+
- `README.md` (instruções rápidas)
|
|
190
|
+
|
|
191
|
+
3) Para “baixar mais” depois (adicionar mais agentes no mesmo pacote), rode novamente com `--add` apontando para a mesma saída:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
python scripts/package_agents.py --output dist/agent-boilerplate-package --add --roles po --levels intermediario --zip
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Observação: para o VS Code detectar, basta abrir a pasta do pacote no VS Code; ele carrega o que estiver em `.github/agents/`.
|
|
198
|
+
|
|
199
|
+
## Como customizar / evoluir
|
|
200
|
+
|
|
201
|
+
- Regras universais: `src/custom_agents_boilerplate/templates/agents/_base/base-prompt.md` e `src/custom_agents_boilerplate/templates/agents/_base/rules.md`
|
|
202
|
+
- Especialização por role: `src/custom_agents_boilerplate/templates/agents/<role>/prompt.md` e `src/custom_agents_boilerplate/templates/agents/<role>/tasks.md`
|
|
203
|
+
- Ajuste por nível: `src/custom_agents_boilerplate/templates/levels/<nivel>.md`
|
|
204
|
+
|
|
205
|
+
## Créditos
|
|
206
|
+
|
|
207
|
+
Projeto acadêmico para a disciplina de Inteligência Artificial.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Agent Boilerplate 🤖
|
|
2
|
+
|
|
3
|
+
Ambiente de **Custom Agents** para o **VS Code + GitHub Copilot Chat**, com variações por:
|
|
4
|
+
|
|
5
|
+
- **Role (papel)**: Dev 🧑💻 | QA 🧪 | PO 📋 | Estudante 🎓
|
|
6
|
+
- **Nível (mentoria)**: Iniciante 🌱 | Intermediário 🚀 | Avançado ⚡
|
|
7
|
+
|
|
8
|
+
Objetivo: para a mesma tarefa, obter respostas **coerentes e visivelmente diferentes** dependendo do papel e do nível.
|
|
9
|
+
|
|
10
|
+
## Uso profissional (sem clonar repo)
|
|
11
|
+
|
|
12
|
+
Você pode instalar um CLI e gerar os agentes **dentro de qualquer projeto**.
|
|
13
|
+
|
|
14
|
+
### Instalar
|
|
15
|
+
|
|
16
|
+
Recomendado (instala o comando globalmente, sem sujar o Python do sistema):
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pipx install custom-agents-boilerplate
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Alternativa (instala no ambiente atual):
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pip install custom-agents-boilerplate
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Gerar no seu projeto
|
|
29
|
+
|
|
30
|
+
Dentro da pasta do seu projeto, rode o wizard:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
custom-agents
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Ele cria `.github/agents/` (e opcionalmente `chatmodes/`). Depois abra o projeto no VS Code → Copilot Chat → dropdown de Agents.
|
|
37
|
+
|
|
38
|
+
### Usar sem menu (CI / comando direto)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
custom-agents generate --roles dev,qa --levels iniciante,avancado --output .
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Listar opções:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
custom-agents list
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Publicar no PyPI
|
|
51
|
+
|
|
52
|
+
Guia completo (manual + GitHub Actions com Trusted Publishing): veja `PUBLISHING.md`.
|
|
53
|
+
|
|
54
|
+
## O que você ganha com cada role
|
|
55
|
+
|
|
56
|
+
- **Dev**: implementação, arquitetura, debugging, qualidade de código.
|
|
57
|
+
- **QA**: plano de testes, casos de teste, estratégia de automação, risco e severidade.
|
|
58
|
+
- **PO**: user stories, critérios de aceite, métricas de sucesso, priorização.
|
|
59
|
+
- **Estudante**: explicação didática, exemplos progressivos, exercícios.
|
|
60
|
+
|
|
61
|
+
## O que muda em cada nível
|
|
62
|
+
|
|
63
|
+
- **Iniciante**: define termos, passo a passo curto, exemplo completo.
|
|
64
|
+
- **Intermediário**: trade-offs, perguntas de contexto, snippets relevantes.
|
|
65
|
+
- **Avançado**: direto, crítico, edge cases, implicações de longo prazo.
|
|
66
|
+
|
|
67
|
+
## Onde ficam os agentes (importante)
|
|
68
|
+
|
|
69
|
+
O formato atual do VS Code chama isso de **Custom Agents** e o VS Code detecta automaticamente os arquivos em:
|
|
70
|
+
|
|
71
|
+
- `.github/agents/*.agent.md`
|
|
72
|
+
|
|
73
|
+
Este repo também mantém uma pasta `chatmodes/` com arquivos `*.chatmode.md` por compatibilidade/legado.
|
|
74
|
+
|
|
75
|
+
> Nota: neste projeto, os arquivos em `.github/agents/` e `chatmodes/` são **gerados**.
|
|
76
|
+
> Quem clonar o repo deve gerar pela primeira vez (passo abaixo).
|
|
77
|
+
|
|
78
|
+
## Como usar no VS Code (passo a passo)
|
|
79
|
+
|
|
80
|
+
1. Abra a pasta `agent-boilerplate/` no VS Code.
|
|
81
|
+
2. Abra o Copilot Chat.
|
|
82
|
+
3. No dropdown de **Agents**, selecione um agente (por exemplo `dev-iniciante`).
|
|
83
|
+
4. Faça sua solicitação normalmente.
|
|
84
|
+
|
|
85
|
+
Se você não enxergar os agentes:
|
|
86
|
+
|
|
87
|
+
- Garanta que o workspace está **Trusted**.
|
|
88
|
+
- Abra a tela de customizações do chat (ícone de engrenagem) e confira a lista de agentes carregados.
|
|
89
|
+
|
|
90
|
+
## Agentes disponíveis (12 combinações)
|
|
91
|
+
|
|
92
|
+
- `dev-iniciante`, `dev-intermediario`, `dev-avancado`
|
|
93
|
+
- `qa-iniciante`, `qa-intermediario`, `qa-avancado`
|
|
94
|
+
- `po-iniciante`, `po-intermediario`, `po-avancado`
|
|
95
|
+
- `estudante-iniciante`, `estudante-intermediario`, `estudante-avancado`
|
|
96
|
+
|
|
97
|
+
## Estrutura do projeto
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
agent-boilerplate/
|
|
101
|
+
├── .github/
|
|
102
|
+
│ └── agents/ # 12 custom agents (formato atual)
|
|
103
|
+
├── src/custom_agents_boilerplate/templates/
|
|
104
|
+
│ ├── config/ # Fonte da verdade de roles e níveis
|
|
105
|
+
│ ├── agents/ # Prompts por role (+ base)
|
|
106
|
+
│ └── levels/ # Ajuste de comportamento por nível
|
|
107
|
+
├── chatmodes/ # Arquivos legacy (*.chatmode.md)
|
|
108
|
+
├── examples/ # Exemplos para demo (entrada/saída)
|
|
109
|
+
└── scripts/ # validate + list + regenerate
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Validar a instalação
|
|
113
|
+
|
|
114
|
+
Primeiro clone/primeira vez:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
bash scripts/generate-agents.sh
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Depois valide:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
bash scripts/validate.sh
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Se você quiser validar apenas as “fontes” (sem exigir arquivos gerados), use:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
bash scripts/validate.sh --source-only
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Regenerar os agentes após mudanças
|
|
133
|
+
|
|
134
|
+
Quando você editar qualquer arquivo em `src/custom_agents_boilerplate/templates/agents/` ou `src/custom_agents_boilerplate/templates/levels/`, regenere:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
bash scripts/generate-agents.sh
|
|
138
|
+
bash scripts/validate.sh
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Gerar um pacote custom (baixar só o que escolher)
|
|
142
|
+
|
|
143
|
+
Se você quer distribuir/usar **apenas algumas combinações** (por exemplo, só `dev-iniciante` e `qa-avancado`), use o empacotador:
|
|
144
|
+
|
|
145
|
+
### Opção 1 (recomendado): menu guiado
|
|
146
|
+
|
|
147
|
+
Rode e siga o passo a passo:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
python scripts/package_agents.py
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Ele vai perguntar quais **roles**, quais **níveis**, a **pasta de saída**, se é para **recriar** ou **adicionar mais**, e se gera `.zip`.
|
|
154
|
+
|
|
155
|
+
### Opção 2: comando direto (sem menu)
|
|
156
|
+
|
|
157
|
+
1) (Opcional) veja as opções disponíveis:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
python scripts/package_agents.py --list
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
2) Gere uma pasta (e opcionalmente um `.zip`) com **apenas os agentes escolhidos**:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
python scripts/package_agents.py --roles dev,qa --levels iniciante,avancado --zip
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Isso cria `dist/agent-boilerplate-package/` contendo somente:
|
|
170
|
+
|
|
171
|
+
- `.github/agents/*.agent.md` (os selecionados)
|
|
172
|
+
- `README.md` (instruções rápidas)
|
|
173
|
+
|
|
174
|
+
3) Para “baixar mais” depois (adicionar mais agentes no mesmo pacote), rode novamente com `--add` apontando para a mesma saída:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
python scripts/package_agents.py --output dist/agent-boilerplate-package --add --roles po --levels intermediario --zip
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Observação: para o VS Code detectar, basta abrir a pasta do pacote no VS Code; ele carrega o que estiver em `.github/agents/`.
|
|
181
|
+
|
|
182
|
+
## Como customizar / evoluir
|
|
183
|
+
|
|
184
|
+
- Regras universais: `src/custom_agents_boilerplate/templates/agents/_base/base-prompt.md` e `src/custom_agents_boilerplate/templates/agents/_base/rules.md`
|
|
185
|
+
- Especialização por role: `src/custom_agents_boilerplate/templates/agents/<role>/prompt.md` e `src/custom_agents_boilerplate/templates/agents/<role>/tasks.md`
|
|
186
|
+
- Ajuste por nível: `src/custom_agents_boilerplate/templates/levels/<nivel>.md`
|
|
187
|
+
|
|
188
|
+
## Créditos
|
|
189
|
+
|
|
190
|
+
Projeto acadêmico para a disciplina de Inteligência Artificial.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "custom-agents-boilerplate"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "CLI para gerar Custom Agents (VS Code + GitHub Copilot Chat) em qualquer projeto."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [{name = "Agent Boilerplate"}]
|
|
14
|
+
keywords = ["vscode", "copilot", "agents", "prompt", "cli"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[project.urls]
|
|
21
|
+
Homepage = "https://github.com/EngelRyan/agent-boilerplate"
|
|
22
|
+
Repository = "https://github.com/EngelRyan/agent-boilerplate"
|
|
23
|
+
Issues = "https://github.com/EngelRyan/agent-boilerplate/issues"
|
|
24
|
+
|
|
25
|
+
[project.scripts]
|
|
26
|
+
custom-agents = "custom_agents_boilerplate.cli:main"
|
|
27
|
+
|
|
28
|
+
[tool.setuptools]
|
|
29
|
+
package-dir = {"" = "src"}
|
|
30
|
+
|
|
31
|
+
[tool.setuptools.packages.find]
|
|
32
|
+
where = ["src"]
|
|
33
|
+
|
|
34
|
+
[tool.setuptools.package-data]
|
|
35
|
+
custom_agents_boilerplate = ["templates/**/*"]
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from .generator import generate_agents, load_catalog_from_templates
|
|
8
|
+
from .templates_loader import templates_root
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _prompt_yes_no(question: str, *, default: bool) -> bool:
|
|
12
|
+
hint = "Y/n" if default else "y/N"
|
|
13
|
+
while True:
|
|
14
|
+
raw = input(f"{question} [{hint}]: ").strip().lower()
|
|
15
|
+
if not raw:
|
|
16
|
+
return default
|
|
17
|
+
if raw in {"y", "yes", "s", "sim"}:
|
|
18
|
+
return True
|
|
19
|
+
if raw in {"n", "no", "nao", "não"}:
|
|
20
|
+
return False
|
|
21
|
+
print("Entrada inválida. Responda com 'y' ou 'n'.")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _choose_multi(kind: str, options: list[str]) -> list[str]:
|
|
25
|
+
print(f"\nSelecione {kind}:")
|
|
26
|
+
for idx, opt in enumerate(options, start=1):
|
|
27
|
+
print(f" {idx}) {opt}")
|
|
28
|
+
print(" all) todos")
|
|
29
|
+
print(" (Enter) todos")
|
|
30
|
+
|
|
31
|
+
while True:
|
|
32
|
+
raw = input("Digite números separados por vírgula (ex: 1,3) ou 'all':\n> ").strip().lower()
|
|
33
|
+
if not raw or raw in {"all", "*"}:
|
|
34
|
+
return list(options)
|
|
35
|
+
|
|
36
|
+
parts = [p.strip() for p in raw.split(",") if p.strip()]
|
|
37
|
+
try:
|
|
38
|
+
indexes = [int(p) for p in parts]
|
|
39
|
+
except ValueError:
|
|
40
|
+
print("Entrada inválida. Use números separados por vírgula, ou 'all'.")
|
|
41
|
+
continue
|
|
42
|
+
|
|
43
|
+
if any(i < 1 or i > len(options) for i in indexes):
|
|
44
|
+
print("Algum número está fora da lista. Tente novamente.")
|
|
45
|
+
continue
|
|
46
|
+
|
|
47
|
+
chosen = [options[i - 1] for i in indexes]
|
|
48
|
+
# keep deterministic order
|
|
49
|
+
return [o for o in options if o in set(chosen)]
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _wizard_generate(template_root: Path) -> dict:
|
|
53
|
+
catalog = load_catalog_from_templates(template_root)
|
|
54
|
+
role_keys = sorted(catalog.roles.keys())
|
|
55
|
+
level_keys = sorted(catalog.levels.keys())
|
|
56
|
+
|
|
57
|
+
print("\n=== custom-agents — Gerar agentes do Copilot Chat ===")
|
|
58
|
+
print("Saída: vai criar .github/agents/ dentro do seu projeto.")
|
|
59
|
+
|
|
60
|
+
roles = _choose_multi("roles", role_keys)
|
|
61
|
+
levels = _choose_multi("níveis", level_keys)
|
|
62
|
+
|
|
63
|
+
default_output = str(Path.cwd())
|
|
64
|
+
output_raw = input(f"\nPasta do projeto (output) [{default_output}]: ").strip()
|
|
65
|
+
output = Path(output_raw or default_output).expanduser().resolve()
|
|
66
|
+
|
|
67
|
+
include_chatmodes = _prompt_yes_no("Gerar também chatmodes/ (legado)?", default=False)
|
|
68
|
+
|
|
69
|
+
agents_dir = output / ".github" / "agents"
|
|
70
|
+
chatmodes_dir = output / "chatmodes"
|
|
71
|
+
|
|
72
|
+
force = False
|
|
73
|
+
if agents_dir.exists() or (include_chatmodes and chatmodes_dir.exists()):
|
|
74
|
+
print("\nDetectei saída existente:")
|
|
75
|
+
if agents_dir.exists():
|
|
76
|
+
print(f"- {agents_dir}")
|
|
77
|
+
if include_chatmodes and chatmodes_dir.exists():
|
|
78
|
+
print(f"- {chatmodes_dir}")
|
|
79
|
+
force = _prompt_yes_no("Apagar e recriar esses diretórios?", default=False)
|
|
80
|
+
if not force:
|
|
81
|
+
print("Cancelado.")
|
|
82
|
+
raise SystemExit(1)
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
"roles": roles,
|
|
86
|
+
"levels": levels,
|
|
87
|
+
"output": output,
|
|
88
|
+
"include_chatmodes": include_chatmodes,
|
|
89
|
+
"force": force,
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _cmd_list(template_root: Path) -> int:
|
|
94
|
+
catalog = load_catalog_from_templates(template_root)
|
|
95
|
+
|
|
96
|
+
print("Roles disponíveis:")
|
|
97
|
+
for key in sorted(catalog.roles.keys()):
|
|
98
|
+
role = catalog.roles[key]
|
|
99
|
+
label = f"{role.emoji} {role.label}".strip()
|
|
100
|
+
print(f"- {key} ({label})")
|
|
101
|
+
|
|
102
|
+
print("\nNíveis disponíveis:")
|
|
103
|
+
for key in sorted(catalog.levels.keys()):
|
|
104
|
+
level = catalog.levels[key]
|
|
105
|
+
label = f"{level.emoji} {level.label}".strip()
|
|
106
|
+
print(f"- {key} ({label})")
|
|
107
|
+
|
|
108
|
+
return 0
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _csv(value: str | None) -> list[str] | None:
|
|
112
|
+
if value is None:
|
|
113
|
+
return None
|
|
114
|
+
value = value.strip()
|
|
115
|
+
if not value:
|
|
116
|
+
return None
|
|
117
|
+
if value.lower() in {"all", "*"}:
|
|
118
|
+
return ["*"]
|
|
119
|
+
return [p.strip() for p in value.split(",") if p.strip()]
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _normalize(selected: list[str] | None, options: list[str]) -> list[str]:
|
|
123
|
+
if not selected or selected == ["*"]:
|
|
124
|
+
return options
|
|
125
|
+
invalid = [x for x in selected if x not in options]
|
|
126
|
+
if invalid:
|
|
127
|
+
raise SystemExit(f"ERRO: inválido(s): {', '.join(invalid)}")
|
|
128
|
+
return selected
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _cmd_generate(template_root: Path, args: argparse.Namespace) -> int:
|
|
132
|
+
catalog = load_catalog_from_templates(template_root)
|
|
133
|
+
role_keys = sorted(catalog.roles.keys())
|
|
134
|
+
level_keys = sorted(catalog.levels.keys())
|
|
135
|
+
|
|
136
|
+
roles = _normalize(_csv(args.roles), role_keys)
|
|
137
|
+
levels = _normalize(_csv(args.levels), level_keys)
|
|
138
|
+
|
|
139
|
+
output = Path(args.output).expanduser().resolve()
|
|
140
|
+
|
|
141
|
+
generate_agents(
|
|
142
|
+
template_root=template_root,
|
|
143
|
+
output_root=output,
|
|
144
|
+
roles=roles,
|
|
145
|
+
levels=levels,
|
|
146
|
+
include_chatmodes=bool(args.chatmodes),
|
|
147
|
+
force=bool(args.force),
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
print(f"OK: gerado em {output / '.github' / 'agents'}")
|
|
151
|
+
if args.chatmodes:
|
|
152
|
+
print(f"OK: gerado em {output / 'chatmodes'}")
|
|
153
|
+
|
|
154
|
+
return 0
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def main(argv: list[str] | None = None) -> int:
|
|
158
|
+
argv = list(sys.argv[1:] if argv is None else argv)
|
|
159
|
+
|
|
160
|
+
parser = argparse.ArgumentParser(prog="custom-agents")
|
|
161
|
+
sub = parser.add_subparsers(dest="cmd")
|
|
162
|
+
|
|
163
|
+
sub.add_parser("list", help="Lista roles e níveis disponíveis")
|
|
164
|
+
|
|
165
|
+
p_gen = sub.add_parser("generate", help="Gera .github/agents (e opcionalmente chatmodes)")
|
|
166
|
+
p_gen.add_argument("--roles", help="CSV (ex: dev,qa) ou all", default=None)
|
|
167
|
+
p_gen.add_argument("--levels", help="CSV (ex: iniciante,avancado) ou all", default=None)
|
|
168
|
+
p_gen.add_argument("--output", help="Pasta do projeto (default: .)", default=str(Path.cwd()))
|
|
169
|
+
p_gen.add_argument("--chatmodes", action="store_true", help="Também gera chatmodes/ (legado)")
|
|
170
|
+
p_gen.add_argument("--force", action="store_true", help="Apaga e recria diretórios de saída")
|
|
171
|
+
|
|
172
|
+
# default: wizard generate
|
|
173
|
+
args = parser.parse_args(argv)
|
|
174
|
+
|
|
175
|
+
with templates_root() as template_root:
|
|
176
|
+
if args.cmd == "list":
|
|
177
|
+
return _cmd_list(template_root)
|
|
178
|
+
|
|
179
|
+
if args.cmd == "generate":
|
|
180
|
+
return _cmd_generate(template_root, args)
|
|
181
|
+
|
|
182
|
+
# no subcommand -> wizard
|
|
183
|
+
if not sys.stdin.isatty():
|
|
184
|
+
# non-interactive default
|
|
185
|
+
return _cmd_generate(
|
|
186
|
+
template_root,
|
|
187
|
+
argparse.Namespace(
|
|
188
|
+
roles="all",
|
|
189
|
+
levels="all",
|
|
190
|
+
output=str(Path.cwd()),
|
|
191
|
+
chatmodes=False,
|
|
192
|
+
force=False,
|
|
193
|
+
),
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
wiz = _wizard_generate(template_root)
|
|
197
|
+
generate_agents(
|
|
198
|
+
template_root=template_root,
|
|
199
|
+
output_root=wiz["output"],
|
|
200
|
+
roles=wiz["roles"],
|
|
201
|
+
levels=wiz["levels"],
|
|
202
|
+
include_chatmodes=wiz["include_chatmodes"],
|
|
203
|
+
force=wiz["force"],
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
print("\nOK: agentes gerados com sucesso.")
|
|
207
|
+
print("Abra o projeto no VS Code → Copilot Chat → Agents.")
|
|
208
|
+
return 0
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
if __name__ == "__main__":
|
|
212
|
+
raise SystemExit(main())
|