agents.dev 1.0.5 → 1.0.6
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.
- package/README.md +44 -132
- package/definitions/dev.coder.yaml +60 -60
- package/package.json +38 -44
- package/src/index.js +139 -0
- package/src/lib/docs.js +97 -0
- package/src/lib/schema.js +13 -0
- package/src/lib/transformers.js +89 -0
- package/dist/generators/agents.js +0 -196
- package/dist/generators/docs.js +0 -89
- package/dist/index.js +0 -160
- package/dist/parsers/markdown.js +0 -86
- package/dist/transformers/gemini.js +0 -36
- package/dist/transformers/kilo.js +0 -18
- package/dist/transformers/opencode.js +0 -18
- package/dist/transformers/roo.js +0 -20
- package/dist/types.js +0 -13
package/README.md
CHANGED
|
@@ -1,132 +1,44 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
The Wizard will guide you through:
|
|
46
|
-
1. **Select OS**: Windows or Unix.
|
|
47
|
-
2. **Select Targets**: Choose formats to build (Gemini, Roo, etc.).
|
|
48
|
-
3. **Docs Auto-Gen**: It automatically creates `docs/` and a workflow guide.
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## 👥 The Squad (Agent Functions)
|
|
53
|
-
|
|
54
|
-
The system works best when you follow this pipeline. Each agent saves their "Brain" in the `docs/` folder, which serves as context for the next agent.
|
|
55
|
-
|
|
56
|
-
### 🏗️ 1. Project Architect
|
|
57
|
-
**"The Visionary"**
|
|
58
|
-
Transforms your raw idea into a professional specification. It acts as an interviewer to discover hidden requirements.
|
|
59
|
-
- **Trigger:** `/dev.project "I want a Uber clone for dog walking"`
|
|
60
|
-
- **Action:** Asks clarifying questions about features, target audience, and constraints.
|
|
61
|
-
- **Output:** `docs/project.md` (Scope, User Stories, Core Principles).
|
|
62
|
-
|
|
63
|
-
### 🧱 2. Requirements Engineer
|
|
64
|
-
**"The Tech Lead"**
|
|
65
|
-
Decides *how* to build it. Defines the stack, database schema, and technical boundaries based on the Spec.
|
|
66
|
-
- **Trigger:** `/dev.requirements`
|
|
67
|
-
- **Action:** Selects libraries (e.g., "Prisma vs TypeORM"), defines API contracts, and security rules.
|
|
68
|
-
- **Output:** `docs/requirements.md` (The "Technical Contract" that the Coder must obey).
|
|
69
|
-
|
|
70
|
-
### 🗺️ 3. Milestone Manager
|
|
71
|
-
**"The Strategist"**
|
|
72
|
-
Prevents you from trying to build everything at once. Slices the project into logical "MVPs" (Phases).
|
|
73
|
-
- **Trigger:** `/dev.milestone`
|
|
74
|
-
- **Output:** `docs/milestones.md` (e.g., Phase 1: Auth, Phase 2: Payment, Phase 3: GPS).
|
|
75
|
-
|
|
76
|
-
### 📋 4. Task Planner
|
|
77
|
-
**"The Project Manager"**
|
|
78
|
-
Takes **ONE Milestone** and breaks it down into atomic, bite-sized tasks for the AI Coder.
|
|
79
|
-
- **Reasoning:** AI Coders hallucinate less when the context is small.
|
|
80
|
-
- **Trigger:** `/dev.tasks 1` (Plan Milestone 1)
|
|
81
|
-
- **Output:** `docs/task.md` (A checklist of 5-10 specific file operations).
|
|
82
|
-
|
|
83
|
-
### 🕵️ 5. Auditor
|
|
84
|
-
**"The Gatekeeper"**
|
|
85
|
-
A safety check before you start coding. It reads the **Requirements** and the **Task Plan** to ensure nothing was lost in translation.
|
|
86
|
-
- **Trigger:** `/dev.auditor`
|
|
87
|
-
- **Action:** "Hey, you planned the Login UI but forgot the 'Forgot Password' flow mentioned in Requirements."
|
|
88
|
-
- **Output:** `audit_report.md` (Pass/Fail).
|
|
89
|
-
|
|
90
|
-
### 💻 6. Coder
|
|
91
|
-
**"The Senior Developer"**
|
|
92
|
-
The workhorse. It executes ONE task from the checklist at a time.
|
|
93
|
-
- **Features:**
|
|
94
|
-
- **Context Aware:** Reads `project.md` to know "Project Principles" (e.g., "Use Functional Components").
|
|
95
|
-
- **Safety:** Checks `.gitignore` before creating files.
|
|
96
|
-
- **TDD:** Can write tests before code if requested.
|
|
97
|
-
- **Trigger:** `/dev.coder 1.1` (Implement Task 1.1)
|
|
98
|
-
- **Output:** Writes code to `src/` and logs to `work_log.md`.
|
|
99
|
-
|
|
100
|
-
### ⚖️ 7. QA Engineer
|
|
101
|
-
**"The Reviewer"**
|
|
102
|
-
Simulates a Pull Request review. It checks if the code matches the Requirements contracts.
|
|
103
|
-
- **Trigger:** `/dev.review 1.1`
|
|
104
|
-
- **Action:** Reads the code and the `requirements.md`. If variables are named poorly or logic is insecure, it REJECTS the task.
|
|
105
|
-
|
|
106
|
-
### 📦 8. Release Manager
|
|
107
|
-
**"The Historian"**
|
|
108
|
-
Consolidates the messy daily `work_log.md` into a clean `CHANGELOG`.
|
|
109
|
-
- **Trigger:** `/dev.log`
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## 🛠️ On-Demand Toolkit
|
|
114
|
-
|
|
115
|
-
### 🏗️ DevOps Engineer (`/dev.ops`)
|
|
116
|
-
**"The Config Specialist"**
|
|
117
|
-
Don't waste token context on config files during feature dev. Call this agent specifically for:
|
|
118
|
-
- "Create a Dockerfile for this Node structure"
|
|
119
|
-
- "Setup Github Actions for tests"
|
|
120
|
-
- "Configure ESLint and Prettier"
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## 🎯 Supported Targets
|
|
125
|
-
|
|
126
|
-
- **Gemini CLI** (`.gemini/commands/*.toml`)
|
|
127
|
-
- **Roo Code** (`.roo/commands/*.md`)
|
|
128
|
-
- **Kilo Code** (`.kilocode/workflows/*.md`)
|
|
129
|
-
- **OpenCode** (`.opencode/command/*.md`)
|
|
130
|
-
|
|
131
|
-
## 📄 Documentation
|
|
132
|
-
During installation, the CLI automatically generates a `docs/README.md` guide inside your project, explaining exactly how to chain these commands for the perfect workflow.
|
|
1
|
+
# agents-dev (Universal Spec CLI)
|
|
2
|
+
|
|
3
|
+
Ferramenta CLI para configurar automaticamente o ambiente de desenvolvimento e instalar agentes de IA (Auditor, Coder, etc.) para diversas ferramentas como Gemini CLI, Roo Code, Cline e Kilo Code.
|
|
4
|
+
|
|
5
|
+
## Funcionalidades
|
|
6
|
+
|
|
7
|
+
### 1. Instalação de Agentes de IA
|
|
8
|
+
Lê definições agnósticas (YAML) e converte para formatos específicos:
|
|
9
|
+
* **Gemini CLI:** Gera arquivos de configuração `.toml`.
|
|
10
|
+
* **Roo Code / Cline:** Gera modos customizados (`_custom_modes.json`).
|
|
11
|
+
* **Kilo Code:** Gera prompts em Markdown (`.kilo/prompts/*.md`).
|
|
12
|
+
|
|
13
|
+
### 2. Configuração
|
|
14
|
+
Automatiza a criação de arquivos de configuração necessários para integrar agentes de IA ao seu fluxo de trabalho.
|
|
15
|
+
|
|
16
|
+
## Instalação e Uso
|
|
17
|
+
|
|
18
|
+
Você pode executar a ferramenta diretamente via `npx` sem instalação prévia:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx agents-dev
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Ou instalar globalmente:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install -g agents-dev
|
|
28
|
+
agents-dev
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Como funciona
|
|
32
|
+
|
|
33
|
+
1. Execute `npx agents-dev` na raiz do seu projeto.
|
|
34
|
+
2. A interface interativa perguntará quais configurações você deseja aplicar.
|
|
35
|
+
3. Os arquivos de configuração dos agentes serão gerados na pasta do seu projeto.
|
|
36
|
+
|
|
37
|
+
## Estrutura do Projeto
|
|
38
|
+
|
|
39
|
+
* `src/`: Código fonte da CLI.
|
|
40
|
+
* `definitions/`: Definições YAML dos agentes (agnósticas).
|
|
41
|
+
|
|
42
|
+
## Licença
|
|
43
|
+
|
|
44
|
+
MIT
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
name: Coder
|
|
2
|
-
role: Senior Software Engineer (Implementation)
|
|
3
|
-
emoji: 💻
|
|
4
|
-
systemPrompt: |
|
|
5
|
-
# SYSTEM ROLE & IDENTITY
|
|
6
|
-
You are the **Senior Software Engineer**.
|
|
7
|
-
You do not just "write code". You **architect solutions** at the file level.
|
|
8
|
-
You follow **SOLID** principles and **Clean Code** standards.
|
|
9
|
-
Your goal is to implement the task from `task.md` with **Zero Regression**.
|
|
10
|
-
|
|
11
|
-
# INPUT CONTEXT
|
|
12
|
-
1. **Mandatory:** Read `docs/task.md` (The Task).
|
|
13
|
-
2. **Mandatory:** Read `docs/requirements.md` (The Stack & Rules).
|
|
14
|
-
3. **Mandatory:** Read `docs/project.md` (The Principles).
|
|
15
|
-
|
|
16
|
-
# EXECUTION WORKFLOW
|
|
17
|
-
|
|
18
|
-
## PHASE 1: ANALYSIS & SAFETY
|
|
19
|
-
1. **Scope Verification:** asking yourself "What files do I need to touch?".
|
|
20
|
-
- *Constraint:* Do NOT touch unrelated files.
|
|
21
|
-
2. **Environment Check:**
|
|
22
|
-
- Check if `.gitignore` exists. If not, create it.
|
|
23
|
-
- Check if tests exists.
|
|
24
|
-
|
|
25
|
-
## PHASE 2: IMPLEMENTATION
|
|
26
|
-
1. **Code:** Implement the feature following the "Project Principles" from `project.md`.
|
|
27
|
-
2. **Test (Conditional):**
|
|
28
|
-
- **IF** `requirements.md` mandates tests: Create/Update tests to verify your changes.
|
|
29
|
-
- **IF** strict TDD is requested in principles: Write tests *before* code.
|
|
30
|
-
|
|
31
|
-
## PHASE 3: SELF-CORRECTION
|
|
32
|
-
1. **Build/Lint:** Run the compiler/linter.
|
|
33
|
-
- *If Error:* Fix it immediately. Do not ask user.
|
|
34
|
-
2. **Test:** Run the tests.
|
|
35
|
-
- *If Fail:* Fix the code.
|
|
36
|
-
|
|
37
|
-
## PHASE 4: REPORTING
|
|
38
|
-
1. **Update task.md:** Mark the task as `[x]`.
|
|
39
|
-
2. **Log Work:** Append to `work_log.md`.
|
|
40
|
-
|
|
41
|
-
# OUTPUT STRUCTURE (work_log.md - Append)
|
|
42
|
-
---
|
|
43
|
-
**[DATE] Task:** [ID] | **Status:** [Completed]
|
|
44
|
-
**Changes:**
|
|
45
|
-
- Created `src/components/Button.tsx`
|
|
46
|
-
- Updated `src/utils/helpers.ts`
|
|
47
|
-
**Self-Check:**
|
|
48
|
-
- [x] Linter Passed
|
|
49
|
-
- [x] Tests Passed (if applicable)
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
# INSTRUCTION
|
|
53
|
-
Read the context. Execute the task using the Workflow. Report in `work_log.md`.
|
|
54
|
-
rules:
|
|
55
|
-
- "**SINGLE FILE:** Never create files like `report_task_1.md`. Everything goes to `work_log.md`."
|
|
56
|
-
- "**CLEANUP:** Keep `work_log.md` concise."
|
|
57
|
-
- "**ENV SAFETY:** Before writing code in a new folder, check if `.gitignore` exists."
|
|
58
|
-
- "**NO BROKEN WINDOWS:** Leave the code better than you found it. Fix linter errors you caused."
|
|
59
|
-
- "**STRICT SCOPE:** Only edit files related to the specific Task ID."
|
|
60
|
-
- "Language Adaptability: Respond in English by default. If the user speaks in another language, mirror their language."
|
|
1
|
+
name: Coder
|
|
2
|
+
role: Senior Software Engineer (Implementation)
|
|
3
|
+
emoji: 💻
|
|
4
|
+
systemPrompt: |
|
|
5
|
+
# SYSTEM ROLE & IDENTITY
|
|
6
|
+
You are the **Senior Software Engineer**.
|
|
7
|
+
You do not just "write code". You **architect solutions** at the file level.
|
|
8
|
+
You follow **SOLID** principles and **Clean Code** standards.
|
|
9
|
+
Your goal is to implement the task from `task.md` with **Zero Regression**.
|
|
10
|
+
|
|
11
|
+
# INPUT CONTEXT
|
|
12
|
+
1. **Mandatory:** Read `docs/task.md` (The Task).
|
|
13
|
+
2. **Mandatory:** Read `docs/requirements.md` (The Stack & Rules).
|
|
14
|
+
3. **Mandatory:** Read `docs/project.md` (The Principles).
|
|
15
|
+
|
|
16
|
+
# EXECUTION WORKFLOW
|
|
17
|
+
|
|
18
|
+
## PHASE 1: ANALYSIS & SAFETY
|
|
19
|
+
1. **Scope Verification:** asking yourself "What files do I need to touch?".
|
|
20
|
+
- *Constraint:* Do NOT touch unrelated files.
|
|
21
|
+
2. **Environment Check:**
|
|
22
|
+
- Check if `.gitignore` exists. If not, create it.
|
|
23
|
+
- Check if tests exists.
|
|
24
|
+
|
|
25
|
+
## PHASE 2: IMPLEMENTATION
|
|
26
|
+
1. **Code:** Implement the feature following the "Project Principles" from `project.md`.
|
|
27
|
+
2. **Test (Conditional):**
|
|
28
|
+
- **IF** `requirements.md` mandates tests: Create/Update tests to verify your changes.
|
|
29
|
+
- **IF** strict TDD is requested in principles: Write tests *before* code.
|
|
30
|
+
|
|
31
|
+
## PHASE 3: SELF-CORRECTION
|
|
32
|
+
1. **Build/Lint:** Run the compiler/linter.
|
|
33
|
+
- *If Error:* Fix it immediately. Do not ask user.
|
|
34
|
+
2. **Test:** Run the tests.
|
|
35
|
+
- *If Fail:* Fix the code.
|
|
36
|
+
|
|
37
|
+
## PHASE 4: REPORTING
|
|
38
|
+
1. **Update task.md:** Mark the task as `[x]`.
|
|
39
|
+
2. **Log Work:** Append to `work_log.md`.
|
|
40
|
+
|
|
41
|
+
# OUTPUT STRUCTURE (work_log.md - Append)
|
|
42
|
+
---
|
|
43
|
+
**[DATE] Task:** [ID] | **Status:** [Completed]
|
|
44
|
+
**Changes:**
|
|
45
|
+
- Created `src/components/Button.tsx`
|
|
46
|
+
- Updated `src/utils/helpers.ts`
|
|
47
|
+
**Self-Check:**
|
|
48
|
+
- [x] Linter Passed
|
|
49
|
+
- [x] Tests Passed (if applicable)
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
# INSTRUCTION
|
|
53
|
+
Read the context. Execute the task using the Workflow. Report in `work_log.md`.
|
|
54
|
+
rules:
|
|
55
|
+
- "**SINGLE FILE:** Never create files like `report_task_1.md`. Everything goes to `work_log.md`."
|
|
56
|
+
- "**CLEANUP:** Keep `work_log.md` concise."
|
|
57
|
+
- "**ENV SAFETY:** Before writing code in a new folder, check if `.gitignore` exists."
|
|
58
|
+
- "**NO BROKEN WINDOWS:** Leave the code better than you found it. Fix linter errors you caused."
|
|
59
|
+
- "**STRICT SCOPE:** Only edit files related to the specific Task ID."
|
|
60
|
+
- "Language Adaptability: Respond in English by default. If the user speaks in another language, mirror their language."
|
package/package.json
CHANGED
|
@@ -1,46 +1,40 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"devDependencies": {
|
|
41
|
-
"@types/fs-extra": "^11.0.4",
|
|
42
|
-
"@types/node": "^25.0.1",
|
|
43
|
-
"ts-node": "^10.9.2",
|
|
44
|
-
"typescript": "^5.9.3"
|
|
45
|
-
}
|
|
2
|
+
"name": "agents.dev",
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"description": "Instalador automático dos agentes de desenvolvimento",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"agents.dev": "./src/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "node src/index.js",
|
|
11
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@clack/prompts": "^0.7.0",
|
|
15
|
+
"js-yaml": "^4.1.0",
|
|
16
|
+
"picocolors": "^1.0.0",
|
|
17
|
+
"zod": "^4.2.1"
|
|
18
|
+
},
|
|
19
|
+
"author": "",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"files": [
|
|
22
|
+
"src",
|
|
23
|
+
"definitions",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
26
|
+
"keywords": [
|
|
27
|
+
"ai",
|
|
28
|
+
"agents",
|
|
29
|
+
"cli",
|
|
30
|
+
"dev-tools",
|
|
31
|
+
"llm",
|
|
32
|
+
"gemini",
|
|
33
|
+
"roo-code",
|
|
34
|
+
"cline"
|
|
35
|
+
],
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "https://github.com/filipeoliveira93/agents.dev"
|
|
39
|
+
}
|
|
46
40
|
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const yaml = require('js-yaml');
|
|
6
|
+
const { intro, outro, multiselect, select, spinner, note } = require('@clack/prompts');
|
|
7
|
+
const pc = require('picocolors');
|
|
8
|
+
|
|
9
|
+
// Módulos Internos
|
|
10
|
+
const { AgentSchema } = require('./lib/schema');
|
|
11
|
+
const { toGeminiTOML, toRooConfig, toKiloMarkdown } = require('./lib/transformers');
|
|
12
|
+
const { generateWorkflowGuide } = require('./lib/docs');
|
|
13
|
+
|
|
14
|
+
async function main() {
|
|
15
|
+
console.clear();
|
|
16
|
+
intro(pc.bgMagenta(pc.white(' UNIVERSAL SPEC CLI ')));
|
|
17
|
+
|
|
18
|
+
// 1. Seleção de Componentes
|
|
19
|
+
const components = await multiselect({
|
|
20
|
+
message: 'O que você deseja configurar?',
|
|
21
|
+
options: [
|
|
22
|
+
{ value: 'docs', label: 'Gerar Documentação de Workflow (docs/README.md)', hint: 'Essencial' },
|
|
23
|
+
{ value: 'agents', label: 'Instalar Agentes de IA', hint: 'Recomendado' },
|
|
24
|
+
{ value: 'vscode', label: 'Configurar VS Code', hint: '(Simulado)' },
|
|
25
|
+
],
|
|
26
|
+
required: true,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (!components) {
|
|
30
|
+
outro('Operação cancelada.');
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// 2. Instalação de Documentação
|
|
35
|
+
if (components.includes('docs')) {
|
|
36
|
+
const created = generateWorkflowGuide(process.cwd());
|
|
37
|
+
if (created) {
|
|
38
|
+
note('Documentação criada em docs/README.md', 'Docs');
|
|
39
|
+
} else {
|
|
40
|
+
console.log(pc.gray('ℹ️ Pasta docs/ já existe. Ignorando criação.'));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 3. Instalação de Agentes
|
|
45
|
+
if (components.includes('agents')) {
|
|
46
|
+
const tool = await select({
|
|
47
|
+
message: 'Onde você deseja instalar os Agentes?',
|
|
48
|
+
options: [
|
|
49
|
+
{ value: 'gemini', label: 'Gemini CLI', hint: '.gemini/commands/dev' },
|
|
50
|
+
{ value: 'roo', label: 'Roo Code', hint: 'Gera roo_custom_modes.json' },
|
|
51
|
+
{ value: 'cline', label: 'Cline', hint: 'Gera cline_custom_modes.json' },
|
|
52
|
+
{ value: 'kilo', label: 'Kilo Code', hint: '.kilo/prompts/*.md' },
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
if (!tool) process.exit(0);
|
|
57
|
+
|
|
58
|
+
await processAgentsInstallation(tool);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
outro(pc.green('Configuração concluída com sucesso! 🚀'));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function processAgentsInstallation(tool) {
|
|
65
|
+
const s = spinner();
|
|
66
|
+
s.start('Carregando definições...');
|
|
67
|
+
|
|
68
|
+
const definitionsDir = path.join(__dirname, '..', 'definitions');
|
|
69
|
+
if (!fs.existsSync(definitionsDir)) {
|
|
70
|
+
s.stop('Falha');
|
|
71
|
+
note(`Pasta de definições não encontrada: ${definitionsDir}`, 'Erro Fatal');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const files = fs.readdirSync(definitionsDir).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
76
|
+
const validAgents = [];
|
|
77
|
+
|
|
78
|
+
// Validação e Carregamento
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
try {
|
|
81
|
+
const content = fs.readFileSync(path.join(definitionsDir, file), 'utf8');
|
|
82
|
+
const raw = yaml.load(content);
|
|
83
|
+
|
|
84
|
+
// Validação com Zod
|
|
85
|
+
const parsed = AgentSchema.safeParse(raw);
|
|
86
|
+
if (!parsed.success) {
|
|
87
|
+
console.warn(pc.yellow(`⚠️ Ignorando ${file}: Inválido`));
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const agent = parsed.data;
|
|
92
|
+
agent.slug = file.replace(/\.ya?ml$/, '').replace(/\./g, '-'); // dev.coder -> dev-coder
|
|
93
|
+
validAgents.push(agent);
|
|
94
|
+
|
|
95
|
+
} catch (e) {
|
|
96
|
+
console.error(pc.red(`Erro ao ler ${file}: ${e.message}`));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
s.message(`Instalando ${validAgents.length} agentes para ${tool}...`);
|
|
101
|
+
|
|
102
|
+
// Instalação Específica por Ferramenta
|
|
103
|
+
try {
|
|
104
|
+
if (tool === 'gemini') {
|
|
105
|
+
const targetDir = path.join(process.cwd(), '.gemini', 'commands', 'dev');
|
|
106
|
+
if (!fs.existsSync(targetDir)) fs.mkdirSync(targetDir, { recursive: true });
|
|
107
|
+
|
|
108
|
+
for (const agent of validAgents) {
|
|
109
|
+
const toml = toGeminiTOML(agent);
|
|
110
|
+
// Nome original com pontos (dev.coder.toml) é preferível para Gemini CLI
|
|
111
|
+
const fileName = `${agent.slug.replace(/-/g, '.')}.toml`;
|
|
112
|
+
fs.writeFileSync(path.join(targetDir, fileName), toml);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else if (tool === 'roo' || tool === 'cline') {
|
|
116
|
+
const modes = validAgents.map(agent => toRooConfig(agent, agent.slug));
|
|
117
|
+
const jsonContent = JSON.stringify({ customModes: modes }, null, 2);
|
|
118
|
+
const fileName = `${tool}_custom_modes.json`;
|
|
119
|
+
fs.writeFileSync(path.join(process.cwd(), fileName), jsonContent);
|
|
120
|
+
note(`Copie o conteúdo de '${fileName}' para as configurações da extensão.`, 'Ação Manual');
|
|
121
|
+
}
|
|
122
|
+
else if (tool === 'kilo') {
|
|
123
|
+
const targetDir = path.join(process.cwd(), '.kilo', 'prompts');
|
|
124
|
+
if (!fs.existsSync(targetDir)) fs.mkdirSync(targetDir, { recursive: true });
|
|
125
|
+
|
|
126
|
+
for (const agent of validAgents) {
|
|
127
|
+
const md = toKiloMarkdown(agent);
|
|
128
|
+
fs.writeFileSync(path.join(targetDir, `${agent.slug}.md`), md);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
s.stop('Instalação finalizada!');
|
|
132
|
+
|
|
133
|
+
} catch (e) {
|
|
134
|
+
s.stop('Falha');
|
|
135
|
+
console.error(pc.red(e.message));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
main().catch(console.error);
|
package/src/lib/docs.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const pc = require('picocolors');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Gera o guia de workflow do projeto
|
|
7
|
+
*/
|
|
8
|
+
function generateWorkflowGuide(baseDir) {
|
|
9
|
+
const docsDir = path.join(baseDir, 'docs');
|
|
10
|
+
|
|
11
|
+
// Conteúdo baseado no exemplo provided
|
|
12
|
+
const content = `# 🤖 Agent Workflow Guide
|
|
13
|
+
|
|
14
|
+
Este documento descreve o fluxo de desenvolvimento padrão usando os Agentes instalados.
|
|
15
|
+
O sistema segue um processo **Waterfall** para planejamento (precisão) e **Iterativo** para execução.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 1. 🏗️ Project Spec (@Project Architect)
|
|
20
|
+
**Role:** O Visionário.
|
|
21
|
+
**Goal:** Traduzir sua ideia vaga em uma Especificação concreta com "Project Principles" definidos.
|
|
22
|
+
- **Comando:** \
|
|
23
|
+
/dev:project "Eu quero um App de Todo que..."
|
|
24
|
+
- **Saída:**
|
|
25
|
+
`docs/project.md`
|
|
26
|
+
|
|
27
|
+
## 2. 🧱 Requirements Engineering (@Requirements Engineer)
|
|
28
|
+
**Role:** O Tech Lead.
|
|
29
|
+
**Goal:** Fechar decisões técnicas (Stack, Banco de Dados, Libs).
|
|
30
|
+
- **Why?** Evita que o Coder "invente" arquitetura. Cria o "Contrato".
|
|
31
|
+
- **Comando:**
|
|
32
|
+
/dev:requirements
|
|
33
|
+
- **Saída:**
|
|
34
|
+
`docs/requirements.md`
|
|
35
|
+
|
|
36
|
+
## 3. 🗺️ Roadmap Strategy (@Milestone Manager)
|
|
37
|
+
**Role:** O Estrategista.
|
|
38
|
+
**Goal:** Fatiar o projeto em fases de entrega (MVPs).
|
|
39
|
+
- **Comando:**
|
|
40
|
+
/dev:milestone
|
|
41
|
+
- **Saída:**
|
|
42
|
+
`docs/milestones.md`
|
|
43
|
+
|
|
44
|
+
## 4. 📋 Task Planning (@Task Planner)
|
|
45
|
+
**Role:** O Gerente.
|
|
46
|
+
**Goal:** Quebrar um Milestone específico em tarefas atômicas para desenvolvedores.
|
|
47
|
+
- **Why?** IAs falham com contextos gigantes. Tarefas pequenas = Código perfeito.
|
|
48
|
+
- **Comando:**
|
|
49
|
+
/dev:tasks <Milestone_ID>
|
|
50
|
+
- **Saída:**
|
|
51
|
+
`docs/task.md`
|
|
52
|
+
|
|
53
|
+
## 5. 🕵️ Blueprint Audit (@Auditor)
|
|
54
|
+
**Role:** O Guardião.
|
|
55
|
+
**Goal:** Validar consistência entre **Requirements** e **Tasks**.
|
|
56
|
+
- **Comando:**
|
|
57
|
+
/dev:auditor
|
|
58
|
+
- **Saída:**
|
|
59
|
+
`audit_report.md`
|
|
60
|
+
|
|
61
|
+
## 6. 💻 Implementation (@Coder)
|
|
62
|
+
**Role:** O Construtor.
|
|
63
|
+
**Goal:** Executar *uma tarefa por vez* do arquivo
|
|
64
|
+
`task.md`.
|
|
65
|
+
- **Comando:**
|
|
66
|
+
/dev:coder <Task_ID>
|
|
67
|
+
- **Buffer:**
|
|
68
|
+
`work_log.md`
|
|
69
|
+
|
|
70
|
+
## 7. ⚖️ Quality Assurance (@QA Engineer)
|
|
71
|
+
**Role:** O Inspetor.
|
|
72
|
+
**Goal:** Verificar se a implementação bate com os Requisitos.
|
|
73
|
+
- **Comando:**
|
|
74
|
+
/dev:review <Task_ID>
|
|
75
|
+
- **Saída:**
|
|
76
|
+
`docs/logs/review_log.md`
|
|
77
|
+
|
|
78
|
+
## 8. 📦 Release Management (@Release Manager)
|
|
79
|
+
**Role:** O Historiador.
|
|
80
|
+
**Goal:** Consolidar o
|
|
81
|
+
`work_log.md` em um
|
|
82
|
+
`changelog.md` permanente.
|
|
83
|
+
- **Comando:**
|
|
84
|
+
/dev:log
|
|
85
|
+
- **Saída:**
|
|
86
|
+
`changelog.md`
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
if (!fs.existsSync(docsDir)) {
|
|
90
|
+
fs.mkdirSync(docsDir, { recursive: true });
|
|
91
|
+
fs.writeFileSync(path.join(docsDir, 'README.md'), content);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
module.exports = { generateWorkflowGuide };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const { z } = require('zod');
|
|
2
|
+
|
|
3
|
+
const AgentSchema = z.object({
|
|
4
|
+
name: z.string().min(1, "Nome é obrigatório"),
|
|
5
|
+
role: z.string().min(1, "Papel (Role) é obrigatório"),
|
|
6
|
+
emoji: z.string().optional().default('🤖'),
|
|
7
|
+
systemPrompt: z.string().min(10, "System Prompt deve ter pelo menos 10 caracteres"),
|
|
8
|
+
rules: z.array(z.string()).optional().default([]),
|
|
9
|
+
tools: z.array(z.string()).optional().default([]),
|
|
10
|
+
description: z.string().optional()
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
module.exports = { AgentSchema };
|