context-first-cli 1.4.0 → 1.5.2
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 +60 -96
- package/dist/commands/create-orchestrator.d.ts.map +1 -1
- package/dist/commands/create-orchestrator.js +12 -5
- package/dist/commands/create-orchestrator.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +15 -5
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/feature.d.ts +4 -0
- package/dist/commands/feature.d.ts.map +1 -1
- package/dist/commands/feature.js +174 -59
- package/dist/commands/feature.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/templates/commands/products/check.md +18 -4
- package/dist/templates/commands/products/collect.md +25 -9
- package/dist/templates/commands/products/refine.md +25 -5
- package/dist/templates/commands/products/spec.md +14 -5
- package/dist/utils/ai-properties.d.ts +29 -0
- package/dist/utils/ai-properties.d.ts.map +1 -0
- package/dist/utils/ai-properties.js +72 -0
- package/dist/utils/ai-properties.js.map +1 -0
- package/dist/utils/config.d.ts +0 -4
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +0 -7
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/products/check.md +18 -4
- package/templates/commands/products/collect.md +25 -9
- package/templates/commands/products/refine.md +25 -5
- package/templates/commands/products/spec.md +14 -5
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadAiProperties = loadAiProperties;
|
|
7
|
+
exports.getBasePath = getBasePath;
|
|
8
|
+
exports.isAutoCloneEnabled = isAutoCloneEnabled;
|
|
9
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
/**
|
|
12
|
+
* Parse ai.properties.md file into a key-value object
|
|
13
|
+
*/
|
|
14
|
+
async function loadAiProperties(orchestratorPath) {
|
|
15
|
+
try {
|
|
16
|
+
const propertiesPath = path_1.default.join(orchestratorPath, 'ai.properties.md');
|
|
17
|
+
const content = await promises_1.default.readFile(propertiesPath, 'utf-8');
|
|
18
|
+
const properties = {};
|
|
19
|
+
// Parse simple key=value lines
|
|
20
|
+
const lines = content.split('\n');
|
|
21
|
+
for (const line of lines) {
|
|
22
|
+
const trimmed = line.trim();
|
|
23
|
+
// Skip empty lines, comments, and markdown headers
|
|
24
|
+
if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('//')) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
// Parse key=value
|
|
28
|
+
const match = trimmed.match(/^([a-zA-Z_][a-zA-Z0-9_.]*)=(.*)$/);
|
|
29
|
+
if (match) {
|
|
30
|
+
const [, key, value] = match;
|
|
31
|
+
// Convert string booleans to actual booleans
|
|
32
|
+
if (value.toLowerCase() === 'true') {
|
|
33
|
+
properties[key] = true;
|
|
34
|
+
}
|
|
35
|
+
else if (value.toLowerCase() === 'false') {
|
|
36
|
+
properties[key] = false;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
properties[key] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return properties;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the base path where repositories should be located
|
|
51
|
+
*/
|
|
52
|
+
function getBasePath(properties) {
|
|
53
|
+
if (!properties || !properties.base_path) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
// Expand ~ to home directory
|
|
57
|
+
let basePath = properties.base_path;
|
|
58
|
+
if (basePath.startsWith('~')) {
|
|
59
|
+
basePath = basePath.replace('~', process.env.HOME || '~');
|
|
60
|
+
}
|
|
61
|
+
return basePath;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if auto_clone is enabled
|
|
65
|
+
*/
|
|
66
|
+
function isAutoCloneEnabled(properties) {
|
|
67
|
+
if (!properties) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return properties.auto_clone === true;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ai-properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-properties.js","sourceRoot":"","sources":["../../src/utils/ai-properties.ts"],"names":[],"mappings":";;;;;AAuBA,4CAqCC;AAKD,kCAYC;AAKD,gDAMC;AAxFD,2DAA6B;AAC7B,gDAAwB;AAmBxB;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,gBAAwB;IAC7D,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAE3D,MAAM,UAAU,GAAiB,EAAE,CAAC;QAEpC,+BAA+B;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,mDAAmD;YACnD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpE,SAAS;YACX,CAAC;YAED,kBAAkB;YAClB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;gBAE7B,6CAA6C;gBAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;oBACnC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACzB,CAAC;qBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;oBAC3C,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,UAA+B;IACzD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,IAAI,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;IACpC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,UAA+B;IAChE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC;AACxC,CAAC"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -48,10 +48,6 @@ export declare function loadWorkspaceMetadata(workspacePath: string): Promise<Wo
|
|
|
48
48
|
* Save workspace metadata
|
|
49
49
|
*/
|
|
50
50
|
export declare function saveWorkspaceMetadata(workspacePath: string, metadata: WorkspaceMetadata): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* Get the workspaces directory path
|
|
53
|
-
*/
|
|
54
|
-
export declare function getWorkspacesDir(): string;
|
|
55
51
|
/**
|
|
56
52
|
* Ensure a directory exists
|
|
57
53
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQ3F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgB/H;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQ5F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQpG;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQ3F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgB/H;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQ5F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQpG;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGpD"}
|
package/dist/utils/config.js
CHANGED
|
@@ -8,7 +8,6 @@ exports.findConfig = findConfig;
|
|
|
8
8
|
exports.loadManifest = loadManifest;
|
|
9
9
|
exports.loadWorkspaceMetadata = loadWorkspaceMetadata;
|
|
10
10
|
exports.saveWorkspaceMetadata = saveWorkspaceMetadata;
|
|
11
|
-
exports.getWorkspacesDir = getWorkspacesDir;
|
|
12
11
|
exports.ensureDir = ensureDir;
|
|
13
12
|
exports.pathExists = pathExists;
|
|
14
13
|
exports.exitWithError = exitWithError;
|
|
@@ -79,12 +78,6 @@ async function saveWorkspaceMetadata(workspacePath, metadata) {
|
|
|
79
78
|
const metadataPath = path_1.default.join(workspacePath, '.workspace.json');
|
|
80
79
|
await promises_1.default.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');
|
|
81
80
|
}
|
|
82
|
-
/**
|
|
83
|
-
* Get the workspaces directory path
|
|
84
|
-
*/
|
|
85
|
-
function getWorkspacesDir() {
|
|
86
|
-
return path_1.default.join(process.env.HOME || process.env.USERPROFILE || '/tmp', '.context-workspaces');
|
|
87
|
-
}
|
|
88
81
|
/**
|
|
89
82
|
* Ensure a directory exists
|
|
90
83
|
*/
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;AAsCA,gCAQC;AAKD,gCAgBC;AAKD,oCAQC;AAKD,sDAQC;AAKD,sDAGC;AAKD,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -140,9 +140,20 @@ Se houver desvios justificados:
|
|
|
140
140
|
- **Documentação**: [Onde foi documentado]
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
## 📄 Relatório de Validação
|
|
143
|
+
## 📄 Salvamento do Relatório de Validação
|
|
144
144
|
|
|
145
|
-
|
|
145
|
+
**PRIORIDADE 1: Usar MCP (Model Context Protocol)**
|
|
146
|
+
|
|
147
|
+
- Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
|
|
148
|
+
- Use o MCP apropriado para adicionar o relatório à issue:
|
|
149
|
+
- Adicione como comentário na issue
|
|
150
|
+
- Atualize labels/tags conforme resultado (ex: "validated", "needs-adjustment", "blocked")
|
|
151
|
+
- Se houver conflitos críticos, atualize status da issue
|
|
152
|
+
- Informe ao usuário: "✅ Relatório de validação adicionado à issue [ID]"
|
|
153
|
+
|
|
154
|
+
**FALLBACK: Criar arquivo .md apenas se MCP falhar**
|
|
155
|
+
|
|
156
|
+
Se o MCP não estiver disponível ou falhar, crie `./.sessions/<ISSUE-ID>/check-report.md`:
|
|
146
157
|
|
|
147
158
|
```markdown
|
|
148
159
|
# Relatório de Validação - [ISSUE-ID]
|
|
@@ -174,14 +185,17 @@ Crie `./.sessions/<ISSUE-ID>/check-report.md`:
|
|
|
174
185
|
- [ ] Bloqueado
|
|
175
186
|
```
|
|
176
187
|
|
|
188
|
+
Informe ao usuário: "⚠️ Relatório salvo localmente em .sessions/ (task manager não disponível)"
|
|
189
|
+
|
|
177
190
|
## 🚨 Ação em Caso de Conflitos
|
|
178
191
|
|
|
179
192
|
Se conflitos críticos forem encontrados:
|
|
180
193
|
1. 🛑 **PARE** o processo atual
|
|
181
194
|
2. 📝 **DOCUMENTE** todos os conflitos
|
|
182
195
|
3. 💬 **ALERTE** o usuário e stakeholders
|
|
183
|
-
4.
|
|
184
|
-
5.
|
|
196
|
+
4. **Via MCP**: Atualize status da issue para "Bloqueado" ou "Requer Ajustes"
|
|
197
|
+
5. 🔄 **AJUSTE** o plano/implementação conforme necessário
|
|
198
|
+
6. ✅ **REVALIDE** após ajustes
|
|
185
199
|
|
|
186
200
|
---
|
|
187
201
|
|
|
@@ -6,7 +6,7 @@ Você é um especialista em produto responsável por coletar e documentar novas
|
|
|
6
6
|
|
|
7
7
|
**Este comando é APENAS para planejamento e documentação:**
|
|
8
8
|
- ✅ Coletar e entender requisitos
|
|
9
|
-
- ✅ Criar issue no task manager
|
|
9
|
+
- ✅ Criar issue no task manager via MCP
|
|
10
10
|
- ✅ Fazer perguntas de esclarecimento
|
|
11
11
|
- ❌ **NÃO implementar código**
|
|
12
12
|
- ❌ **NÃO fazer edits em arquivos de código**
|
|
@@ -24,7 +24,7 @@ Antes de iniciar, carregue o contexto consultando:
|
|
|
24
24
|
|
|
25
25
|
## Seu Objetivo
|
|
26
26
|
|
|
27
|
-
Entender a solicitação do usuário e capturá-la como issue
|
|
27
|
+
Entender a solicitação do usuário e capturá-la como issue no task manager (via MCP).
|
|
28
28
|
|
|
29
29
|
**Nesta fase, você NÃO precisa:**
|
|
30
30
|
- ❌ Escrever especificação completa
|
|
@@ -80,13 +80,29 @@ Apenas certifique-se de que a ideia esteja **adequadamente compreendida**.
|
|
|
80
80
|
- Faça ajustes conforme feedback
|
|
81
81
|
- Obtenha aprovação final
|
|
82
82
|
|
|
83
|
-
4. **Salvamento**
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
4. **Salvamento da Issue**
|
|
84
|
+
|
|
85
|
+
**PRIORIDADE 1: Usar MCP (Model Context Protocol)**
|
|
86
|
+
|
|
87
|
+
Verifique se há MCP configurado para task manager:
|
|
88
|
+
- Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
|
|
89
|
+
- Se `task_management_system=jira`: Use MCP do Jira para criar a issue
|
|
90
|
+
- Se `task_management_system=linear`: Use MCP do Linear para criar a issue
|
|
91
|
+
- Se `task_management_system=github`: Use MCP do GitHub para criar a issue
|
|
92
|
+
|
|
93
|
+
**Ao usar MCP:**
|
|
94
|
+
- Crie a issue diretamente no task manager
|
|
95
|
+
- Obtenha o ID da issue criada (ex: FIN-123, LIN-456)
|
|
96
|
+
- Informe ao usuário: "✅ Issue [ID] criada no [task manager]"
|
|
97
|
+
- **NÃO crie arquivo .md**
|
|
98
|
+
|
|
99
|
+
**FALLBACK: Criar arquivo .md apenas se MCP falhar**
|
|
100
|
+
|
|
101
|
+
Se o MCP não estiver disponível ou falhar:
|
|
102
|
+
- Crie arquivo em `./.sessions/<ISSUE-ID>/collect.md`
|
|
103
|
+
- Use formato de ID manual: `LOCAL-001`, `LOCAL-002`, etc.
|
|
104
|
+
- Inclua data, tipo e conteúdo completo
|
|
105
|
+
- Informe ao usuário: "⚠️ Issue salva localmente em .sessions/ (task manager não disponível)"
|
|
90
106
|
|
|
91
107
|
## Perguntas de Esclarecimento
|
|
92
108
|
|
|
@@ -28,11 +28,19 @@ Refinar a issue coletada, esclarecendo:
|
|
|
28
28
|
|
|
29
29
|
### 1. Carregar Issue
|
|
30
30
|
|
|
31
|
-
**
|
|
32
|
-
|
|
31
|
+
**PRIORIDADE 1: Usar MCP (Model Context Protocol)**
|
|
32
|
+
|
|
33
|
+
- Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
|
|
34
|
+
- Use o MCP apropriado para buscar a issue:
|
|
35
|
+
- `task_management_system=jira`: Use MCP do Jira
|
|
36
|
+
- `task_management_system=linear`: Use MCP do Linear
|
|
37
|
+
- `task_management_system=github`: Use MCP do GitHub
|
|
38
|
+
- Carregue todos os dados da issue (título, descrição, labels, etc.)
|
|
39
|
+
|
|
40
|
+
**FALLBACK: Se MCP não estiver disponível ou falhar**
|
|
33
41
|
|
|
34
|
-
**Senão**:
|
|
35
42
|
- Leia `./.sessions/<ISSUE-ID>/collect.md`
|
|
43
|
+
- Se o arquivo não existir, informe o erro ao usuário
|
|
36
44
|
|
|
37
45
|
### 2. Análise de Escopo
|
|
38
46
|
|
|
@@ -110,9 +118,19 @@ Forneça estimativa de esforço:
|
|
|
110
118
|
|
|
111
119
|
Liste perguntas que ainda precisam ser respondidas antes de iniciar a implementação.
|
|
112
120
|
|
|
113
|
-
## 📄
|
|
121
|
+
## 📄 Salvamento do Refinamento
|
|
122
|
+
|
|
123
|
+
**PRIORIDADE 1: Atualizar via MCP**
|
|
114
124
|
|
|
115
|
-
|
|
125
|
+
- Use o MCP do task manager para atualizar a issue
|
|
126
|
+
- Adicione os critérios de aceitação como comentário ou campo customizado
|
|
127
|
+
- Atualize labels/tags se necessário (ex: "refined", "ready-for-spec")
|
|
128
|
+
- Adicione estimativa se o task manager suportar
|
|
129
|
+
- Informe ao usuário: "✅ Issue [ID] atualizada com refinamento"
|
|
130
|
+
|
|
131
|
+
**FALLBACK: Criar arquivo .md apenas se MCP falhar**
|
|
132
|
+
|
|
133
|
+
Se o MCP não estiver disponível ou falhar, crie/atualize `./.sessions/<ISSUE-ID>/refine.md`:
|
|
116
134
|
|
|
117
135
|
```markdown
|
|
118
136
|
# [Título da Issue] - Refinamento
|
|
@@ -153,6 +171,8 @@ Crie/atualize `./.sessions/<ISSUE-ID>/refine.md`:
|
|
|
153
171
|
- [Risco 2 e mitigação]
|
|
154
172
|
```
|
|
155
173
|
|
|
174
|
+
Informe ao usuário: "⚠️ Refinamento salvo localmente em .sessions/ (task manager não disponível)"
|
|
175
|
+
|
|
156
176
|
## 🔍 Validação
|
|
157
177
|
|
|
158
178
|
Valide o refinamento contra:
|
|
@@ -203,12 +203,20 @@ Justificativa: [Por que ficam para depois]
|
|
|
203
203
|
|
|
204
204
|
## 📄 Salvamento do PRD
|
|
205
205
|
|
|
206
|
-
**
|
|
207
|
-
- Adicione o PRD como comentário na issue
|
|
208
|
-
- Ou anexe como arquivo
|
|
206
|
+
**PRIORIDADE 1: Usar MCP (Model Context Protocol)**
|
|
209
207
|
|
|
210
|
-
|
|
208
|
+
- Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
|
|
209
|
+
- Use o MCP apropriado para atualizar a issue com o PRD:
|
|
210
|
+
- Adicione o PRD completo como comentário na issue
|
|
211
|
+
- Ou anexe como arquivo (se o task manager suportar)
|
|
212
|
+
- Atualize status/labels (ex: "spec-ready", "ready-for-dev")
|
|
213
|
+
- Informe ao usuário: "✅ PRD adicionado à issue [ID]"
|
|
214
|
+
|
|
215
|
+
**FALLBACK: Criar arquivo .md apenas se MCP falhar**
|
|
216
|
+
|
|
217
|
+
Se o MCP não estiver disponível ou falhar:
|
|
211
218
|
- Salve em `./.sessions/<ISSUE-ID>/prd.md`
|
|
219
|
+
- Informe ao usuário: "⚠️ PRD salvo localmente em .sessions/ (task manager não disponível)"
|
|
212
220
|
|
|
213
221
|
## 🔍 Revisão e Aprovação
|
|
214
222
|
|
|
@@ -216,7 +224,8 @@ Antes de finalizar:
|
|
|
216
224
|
1. Revise o PRD com stakeholders
|
|
217
225
|
2. Valide contra metaspecs (se disponíveis)
|
|
218
226
|
3. Obtenha aprovação para iniciar implementação
|
|
219
|
-
4. Atualize a issue no task manager com status "Pronto para Desenvolvimento"
|
|
227
|
+
4. **Via MCP**: Atualize a issue no task manager com status "Pronto para Desenvolvimento"
|
|
228
|
+
5. **Fallback**: Documente aprovação em `./.sessions/<ISSUE-ID>/prd.md`
|
|
220
229
|
|
|
221
230
|
---
|
|
222
231
|
|