@creative-ia/cortex 1.0.5
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 +41 -0
- package/dist/config/cloud-proxy.d.ts +15 -0
- package/dist/config/cloud-proxy.js +63 -0
- package/dist/config/cloudwatch-store.d.ts +13 -0
- package/dist/config/cloudwatch-store.js +66 -0
- package/dist/config/license.d.ts +29 -0
- package/dist/config/license.js +165 -0
- package/dist/config/ssm-store.d.ts +2 -0
- package/dist/config/ssm-store.js +38 -0
- package/dist/config/telemetry.d.ts +17 -0
- package/dist/config/telemetry.js +93 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +460 -0
- package/dist/knowledge/dynamo-store.d.ts +17 -0
- package/dist/knowledge/dynamo-store.js +85 -0
- package/dist/knowledge/embeddings.d.ts +2 -0
- package/dist/knowledge/embeddings.js +36 -0
- package/dist/knowledge/loader.d.ts +8 -0
- package/dist/knowledge/loader.js +57 -0
- package/dist/lambda-package.zip +0 -0
- package/dist/lambda.d.ts +22 -0
- package/dist/lambda.js +496 -0
- package/dist/package.json +1 -0
- package/dist/tools/advance-process.d.ts +7 -0
- package/dist/tools/advance-process.js +128 -0
- package/dist/tools/analyze-code.d.ts +7 -0
- package/dist/tools/analyze-code.js +131 -0
- package/dist/tools/analyze-docs.d.ts +8 -0
- package/dist/tools/analyze-docs.js +147 -0
- package/dist/tools/config-registry.d.ts +3 -0
- package/dist/tools/config-registry.js +20 -0
- package/dist/tools/create-process.d.ts +6 -0
- package/dist/tools/create-process.js +257 -0
- package/dist/tools/decompose-epic.d.ts +7 -0
- package/dist/tools/decompose-epic.js +603 -0
- package/dist/tools/diagrams.d.ts +51 -0
- package/dist/tools/diagrams.js +304 -0
- package/dist/tools/generate-report.d.ts +9 -0
- package/dist/tools/generate-report.js +891 -0
- package/dist/tools/generate-wiki.d.ts +10 -0
- package/dist/tools/generate-wiki.js +700 -0
- package/dist/tools/get-architecture.d.ts +6 -0
- package/dist/tools/get-architecture.js +78 -0
- package/dist/tools/get-code-standards.d.ts +7 -0
- package/dist/tools/get-code-standards.js +52 -0
- package/dist/tools/init-process.d.ts +7 -0
- package/dist/tools/init-process.js +82 -0
- package/dist/tools/knowledge-crud.d.ts +26 -0
- package/dist/tools/knowledge-crud.js +142 -0
- package/dist/tools/logo-base64.d.ts +1 -0
- package/dist/tools/logo-base64.js +1 -0
- package/dist/tools/logs-query.d.ts +15 -0
- package/dist/tools/logs-query.js +46 -0
- package/dist/tools/reverse-engineer.d.ts +13 -0
- package/dist/tools/reverse-engineer.js +956 -0
- package/dist/tools/semantic-search.d.ts +7 -0
- package/dist/tools/semantic-search.js +68 -0
- package/dist/tools/update-process.d.ts +17 -0
- package/dist/tools/update-process.js +195 -0
- package/dist/tools/validate-idea.d.ts +7 -0
- package/dist/tools/validate-idea.js +339 -0
- package/dist/tools/validate-process.d.ts +6 -0
- package/dist/tools/validate-process.js +102 -0
- package/package.json +31 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: create_process
|
|
3
|
+
* Cria esqueleto de processo a partir de linguagem natural.
|
|
4
|
+
*
|
|
5
|
+
* Recebe uma frase como "Criar processo de arquitetura de software para jornada PIX"
|
|
6
|
+
* e executa:
|
|
7
|
+
* 1. Extrai título, stakeholder, descrição
|
|
8
|
+
* 2. Inicializa processo (DynamoDB + template local)
|
|
9
|
+
* 3. Retorna esqueleto com conteúdo dos arquivos locais para criação pelo MCP client
|
|
10
|
+
*
|
|
11
|
+
* O parecer de viabilidade (02-parecer) é gerado APÓS o stakeholder estar completo,
|
|
12
|
+
* via fluxo interativo no client-side (Koa).
|
|
13
|
+
*/
|
|
14
|
+
import { initProcess } from "./init-process.js";
|
|
15
|
+
function slugify(text) {
|
|
16
|
+
return text
|
|
17
|
+
.toLowerCase()
|
|
18
|
+
.normalize("NFD")
|
|
19
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
20
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
21
|
+
.replace(/^-|-$/g, "");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extrai título, descrição e contexto de uma frase em linguagem natural.
|
|
25
|
+
*/
|
|
26
|
+
function parsePrompt(prompt) {
|
|
27
|
+
const lower = prompt.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
28
|
+
let cleaned = prompt
|
|
29
|
+
.replace(/^(criar|iniciar|gerar|montar|preparar)\s+(um\s+)?(novo\s+)?(processo\s+)?(de\s+)?/i, "")
|
|
30
|
+
.replace(/^(create|start|generate)\s+(a\s+)?(new\s+)?(process\s+)?(for\s+)?/i, "")
|
|
31
|
+
.trim();
|
|
32
|
+
if (cleaned.length > 0) {
|
|
33
|
+
cleaned = cleaned.charAt(0).toUpperCase() + cleaned.slice(1);
|
|
34
|
+
}
|
|
35
|
+
let title = cleaned;
|
|
36
|
+
let description = cleaned;
|
|
37
|
+
const paraIdx = lower.indexOf(" para ");
|
|
38
|
+
if (paraIdx > 10) {
|
|
39
|
+
title = cleaned.slice(0, paraIdx).trim();
|
|
40
|
+
description = cleaned;
|
|
41
|
+
}
|
|
42
|
+
if (title.length > 80) {
|
|
43
|
+
title = title.slice(0, 77) + "...";
|
|
44
|
+
}
|
|
45
|
+
return { title, description, ideaText: prompt };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Gera conteúdo dos arquivos locais do processo.
|
|
49
|
+
* Retorna blocos marcados com <!-- CREATE_FILE: path --> para o MCP client criar.
|
|
50
|
+
*/
|
|
51
|
+
function generateLocalFiles(uuid, title, description, stakeholder, slug) {
|
|
52
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
53
|
+
const basePath = `orquestrador/creative-main/process/${uuid}`;
|
|
54
|
+
const readmeContent = `# Processo ${uuid} — ${title}
|
|
55
|
+
|
|
56
|
+
- **UUID:** ${uuid}
|
|
57
|
+
- **Data:** ${date}
|
|
58
|
+
- **Status:** Stakeholder [pending] → Intake [pending] → Épicos [pending] → Estratégia [pending] → Execução [pending]
|
|
59
|
+
- **Stakeholder:** ${stakeholder}
|
|
60
|
+
- **Versão:** v1.0.0
|
|
61
|
+
|
|
62
|
+
## Descrição
|
|
63
|
+
|
|
64
|
+
${description}
|
|
65
|
+
|
|
66
|
+
## Documentos
|
|
67
|
+
|
|
68
|
+
| # | Arquivo | Fase | Status |
|
|
69
|
+
|---|---------|------|--------|
|
|
70
|
+
| 1 | [01-stakeholder-${slug}.md](./01-stakeholder-${slug}.md) | Stakeholder — Formulário de Intake | pending |
|
|
71
|
+
|
|
72
|
+
## Workflow (obrigatório, sequencial)
|
|
73
|
+
|
|
74
|
+
\`\`\`
|
|
75
|
+
Stakeholder (01) → Intake (02) → Épicos (03) → Estratégia (04/05) → Execução
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
> Nenhuma fase pode ser pulada. Artefatos de fases posteriores são INVÁLIDOS se fases anteriores estiverem incompletas.`;
|
|
79
|
+
const stakeholderContent = `# Formulário de Intake — Stakeholder
|
|
80
|
+
|
|
81
|
+
> Processo: ${uuid}
|
|
82
|
+
> Solicitante: ${stakeholder}
|
|
83
|
+
> Data: ${date}
|
|
84
|
+
> Status: draft
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 1. Visão Geral
|
|
89
|
+
|
|
90
|
+
### 1.1 Qual o problema ou oportunidade?
|
|
91
|
+
|
|
92
|
+
${description}
|
|
93
|
+
|
|
94
|
+
### 1.2 Qual o contexto atual?
|
|
95
|
+
|
|
96
|
+
<!-- Descrever: sistemas existentes, integrações atuais, plataformas envolvidas, dependências -->
|
|
97
|
+
|
|
98
|
+
### 1.3 Quem são os usuários finais?
|
|
99
|
+
|
|
100
|
+
<!-- Descrever: perfil dos usuários, segmentos, volume estimado -->
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 2. Fluxo Principal (Happy Path)
|
|
105
|
+
|
|
106
|
+
<!-- Descrever o fluxo principal da jornada do usuário, passo a passo -->
|
|
107
|
+
|
|
108
|
+
### Jornadas secundárias
|
|
109
|
+
|
|
110
|
+
<!-- Listar jornadas alternativas ou complementares -->
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 3. Integrações
|
|
115
|
+
|
|
116
|
+
| Sistema | Tipo | Status | Observação |
|
|
117
|
+
|---------|------|--------|------------|
|
|
118
|
+
| <!-- Sistema --> | Interno/Externo | Existente/A definir | <!-- Obs --> |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 4. Restrições e Compliance
|
|
123
|
+
|
|
124
|
+
| Tipo | Descrição |
|
|
125
|
+
|------|-----------|
|
|
126
|
+
| Regulatório | A definir |
|
|
127
|
+
| Compliance | A definir |
|
|
128
|
+
| Segurança | A definir |
|
|
129
|
+
| Prazo | A definir |
|
|
130
|
+
| Técnica | A definir |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 5. Plataformas
|
|
135
|
+
|
|
136
|
+
- [ ] Mobile (iOS + Android)
|
|
137
|
+
- [ ] Web
|
|
138
|
+
- [ ] Ambas (Omnichannel)
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 6. KPIs e Resultados Esperados
|
|
143
|
+
|
|
144
|
+
| KPI | Meta | Observação |
|
|
145
|
+
|-----|------|------------|
|
|
146
|
+
| <!-- KPI --> | <!-- Meta --> | <!-- Obs --> |
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 7. Referências de Benchmark
|
|
151
|
+
|
|
152
|
+
<!-- Produtos similares no mercado, concorrentes, referências -->
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 8. Prioridade Percebida
|
|
157
|
+
|
|
158
|
+
> A definir pelo stakeholder
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 9. Tech Stack
|
|
163
|
+
|
|
164
|
+
> Definido na fase de coleta técnica. Preencher após validação do contexto de negócio.
|
|
165
|
+
|
|
166
|
+
| Camada | Tecnologia | Justificativa |
|
|
167
|
+
|--------|-----------|---------------|
|
|
168
|
+
| <!-- Camada --> | <!-- Tech --> | <!-- Justificativa --> |`;
|
|
169
|
+
const knowledgeContent = JSON.stringify({
|
|
170
|
+
process_id: uuid,
|
|
171
|
+
version: "1.0.0",
|
|
172
|
+
title: `Knowledge Base — ${title}`,
|
|
173
|
+
created_at: date,
|
|
174
|
+
updated_at: date,
|
|
175
|
+
status: "iniciado",
|
|
176
|
+
meetings: [],
|
|
177
|
+
decisions: [],
|
|
178
|
+
questions: [],
|
|
179
|
+
context: [],
|
|
180
|
+
learnings: [],
|
|
181
|
+
}, null, 2);
|
|
182
|
+
const orchestrationContent = JSON.stringify({
|
|
183
|
+
process_id: uuid,
|
|
184
|
+
version: "1.0.0",
|
|
185
|
+
created_at: date,
|
|
186
|
+
phases: {
|
|
187
|
+
stakeholder: { status: "pending", started_at: null, completed_at: null },
|
|
188
|
+
intake: { status: "pending", started_at: null, completed_at: null },
|
|
189
|
+
epics: { status: "pending", started_at: null, completed_at: null },
|
|
190
|
+
strategy: { status: "pending", started_at: null, completed_at: null },
|
|
191
|
+
execution: { status: "pending", started_at: null, completed_at: null },
|
|
192
|
+
},
|
|
193
|
+
repos: [],
|
|
194
|
+
sessions: [],
|
|
195
|
+
}, null, 2);
|
|
196
|
+
const files = [
|
|
197
|
+
{ path: `${basePath}/README.md`, content: readmeContent },
|
|
198
|
+
{ path: `${basePath}/01-stakeholder-${slug}.md`, content: stakeholderContent },
|
|
199
|
+
{ path: `${basePath}/knowledge.json`, content: knowledgeContent },
|
|
200
|
+
{ path: `${basePath}/orchestration.json`, content: orchestrationContent },
|
|
201
|
+
];
|
|
202
|
+
const blocks = [
|
|
203
|
+
"",
|
|
204
|
+
"---",
|
|
205
|
+
"",
|
|
206
|
+
"## 📁 Arquivos Locais (criar automaticamente)",
|
|
207
|
+
"",
|
|
208
|
+
`> Diretório base: \`${basePath}/\``,
|
|
209
|
+
"",
|
|
210
|
+
];
|
|
211
|
+
for (const f of files) {
|
|
212
|
+
const ext = f.path.endsWith(".json") ? "json" : "markdown";
|
|
213
|
+
blocks.push(`<!-- CREATE_FILE: ${f.path} -->`);
|
|
214
|
+
blocks.push("```" + ext);
|
|
215
|
+
blocks.push(f.content);
|
|
216
|
+
blocks.push("```");
|
|
217
|
+
blocks.push("");
|
|
218
|
+
}
|
|
219
|
+
return blocks.join("\n");
|
|
220
|
+
}
|
|
221
|
+
export async function createProcess(params) {
|
|
222
|
+
const { prompt, stakeholder } = params;
|
|
223
|
+
const parsed = parsePrompt(prompt);
|
|
224
|
+
const slug = slugify(parsed.title);
|
|
225
|
+
const out = [];
|
|
226
|
+
const errors = [];
|
|
227
|
+
// --- Step 1: Init Process (DynamoDB) ---
|
|
228
|
+
let processResult;
|
|
229
|
+
let uuid = "";
|
|
230
|
+
try {
|
|
231
|
+
processResult = await initProcess({
|
|
232
|
+
title: parsed.title,
|
|
233
|
+
stakeholder: stakeholder || "A definir",
|
|
234
|
+
description: parsed.description,
|
|
235
|
+
});
|
|
236
|
+
// Extrai UUID do output do initProcess
|
|
237
|
+
const uuidMatch = processResult.match(/Initialized:\s*([a-f0-9]{8})/);
|
|
238
|
+
uuid = uuidMatch ? uuidMatch[1] : crypto.randomUUID().slice(0, 8);
|
|
239
|
+
out.push(processResult);
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
errors.push(`[init_process] ${String(err)}`);
|
|
243
|
+
processResult = "";
|
|
244
|
+
uuid = crypto.randomUUID().slice(0, 8);
|
|
245
|
+
}
|
|
246
|
+
out.push("\n---\n");
|
|
247
|
+
// --- Step 2: Gera conteúdo dos arquivos locais (esqueleto) ---
|
|
248
|
+
const localFiles = generateLocalFiles(uuid, parsed.title, parsed.description, stakeholder || "A definir", slug);
|
|
249
|
+
out.push(localFiles);
|
|
250
|
+
// --- Errors summary ---
|
|
251
|
+
if (errors.length > 0) {
|
|
252
|
+
out.push("\n### ⚠️ Erros no pipeline:");
|
|
253
|
+
for (const e of errors)
|
|
254
|
+
out.push(`- ${e}`);
|
|
255
|
+
}
|
|
256
|
+
return out.join("\n");
|
|
257
|
+
}
|