@cortex-context/cli 0.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/LICENSE +21 -0
- package/README.md +98 -0
- package/dist/index.js +28124 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/local/cortex.config.template.yaml +50 -0
- package/dist/templates/local/docker-compose.local.yml +57 -0
- package/dist/templates/rules/copilot-instructions-cortex.md +22 -0
- package/dist/templates/skills/cortex-dimensions/SKILL.md +150 -0
- package/dist/templates/skills/cortex-generate-spec/SKILL.md +265 -0
- package/dist/templates/skills/cortex-ingest/SKILL.md +178 -0
- package/dist/templates/skills/cortex-research/SKILL.md +168 -0
- package/package.json +60 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cortex-ingest
|
|
3
|
+
description: >
|
|
4
|
+
Skill de operações de manutenção do Cortex: health check, contagem de nós,
|
|
5
|
+
re-ingestão de dados e diagnóstico do grafo. Use quando o usuário quiser
|
|
6
|
+
verificar se o Cortex está saudável, forçar re-ingestão, ver quantos nós
|
|
7
|
+
existem, ou diagnosticar ingestão desatualizada.
|
|
8
|
+
Triggers: "re-ingerir cortex", "atualizar grafo cortex", "cortex health",
|
|
9
|
+
"quantos nós no cortex", "ingestão desatualizada", "forçar ingest",
|
|
10
|
+
"cortex está atualizado", "cortex out of date", "re-ingest cortex",
|
|
11
|
+
"refresh cortex", "rebuild cortex graph".
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Skill: Cortex Ingest — Operações e Manutenção
|
|
15
|
+
|
|
16
|
+
## Propósito
|
|
17
|
+
|
|
18
|
+
Verificar a saúde do Cortex, auditar contagens de nós, e forçar re-ingestão
|
|
19
|
+
quando o grafo estiver desatualizado (após adicionar/remover specs, services,
|
|
20
|
+
ou workflows do codebase).
|
|
21
|
+
|
|
22
|
+
> **Configuração**: `CORTEX_URL` e `CORTEX_API_TOKEN` são definidos em
|
|
23
|
+
> `.env` no diretório `mcp-servers/cortex/` do seu workspace.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Quando Usar
|
|
28
|
+
|
|
29
|
+
| Situação | Ação |
|
|
30
|
+
|----------|------|
|
|
31
|
+
| Verificar se Cortex está online | Health check |
|
|
32
|
+
| Auditar contagem de nós por dimensão | `list_dimensions()` |
|
|
33
|
+
| Grafo desatualizado após commits | Trigger re-ingest via curl |
|
|
34
|
+
| Specs novas não aparecem no grafo | Re-ingest `spec` + verificar |
|
|
35
|
+
| Novo Temporal Workflow não está no grafo | Re-ingest `temporal_workflow` |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 1. Health Check
|
|
40
|
+
|
|
41
|
+
Verifica se o Cortex está acessível e com Neo4j conectado.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
curl -s "${CORTEX_URL}/health" \
|
|
45
|
+
-H "Authorization: Bearer $CORTEX_API_TOKEN"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Resposta esperada:
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"status": "healthy",
|
|
52
|
+
"neo4j": "connected",
|
|
53
|
+
"version": "1.1.0"
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Se `status != "healthy"` ou `neo4j != "connected"`, verificar os containers:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Ver status dos containers
|
|
61
|
+
docker compose -f /opt/cortex/docker-compose.yml ps
|
|
62
|
+
|
|
63
|
+
# Ver logs do Cortex
|
|
64
|
+
docker compose -f /opt/cortex/docker-compose.yml logs --tail=50 cortex
|
|
65
|
+
|
|
66
|
+
# Reiniciar se parado
|
|
67
|
+
docker compose -f /opt/cortex/docker-compose.yml up -d
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> **Nota**: Se o Cortex está rodando em um host remoto, conecte via SSH antes de
|
|
71
|
+
> executar os comandos acima. Consulte a documentação de deploy do seu ambiente.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 2. Auditar Contagens via MCP
|
|
76
|
+
|
|
77
|
+
Use `list_dimensions()` para ver o estado atual do grafo:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Tool: list_dimensions()
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Resposta exemplo:
|
|
84
|
+
```
|
|
85
|
+
| dim_key | node_label | nós |
|
|
86
|
+
|-------------------|------------------|-----|
|
|
87
|
+
| spec | Spec | 45 |
|
|
88
|
+
| service | Service | 5 |
|
|
89
|
+
| temporal_workflow | TemporalWorkflow | 8 |
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Se as contagens estiverem muito abaixo do esperado → grafo desatualizado → re-ingest.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 3. Re-ingestão Manual
|
|
97
|
+
|
|
98
|
+
### Via GitHub Actions (preferido)
|
|
99
|
+
|
|
100
|
+
O workflow `.github/workflows/cortex-ingest.yml` é acionado automaticamente em:
|
|
101
|
+
- Push para `develop`, `staging`, `main` nos repos com specs/services/workflows
|
|
102
|
+
|
|
103
|
+
Para acionar manualmente:
|
|
104
|
+
```bash
|
|
105
|
+
gh workflow run cortex-ingest.yml \
|
|
106
|
+
--repo <seu-workspace-repo> \
|
|
107
|
+
--field dim_key=spec
|
|
108
|
+
|
|
109
|
+
gh workflow run cortex-ingest.yml \
|
|
110
|
+
--repo <seu-workspace-repo> \
|
|
111
|
+
--field dim_key=service
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Via curl direto (quando GH Actions não é viável)
|
|
115
|
+
|
|
116
|
+
O endpoint `POST /api/v1/ingest/{dim_key}` aciona a re-ingestão buscando os dados
|
|
117
|
+
automaticamente das fontes configuradas (GitHub API, filesystem):
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Re-ingerir specs
|
|
121
|
+
curl -X POST "${CORTEX_URL}/api/v1/ingest/spec" \
|
|
122
|
+
-H "Authorization: Bearer $CORTEX_API_TOKEN"
|
|
123
|
+
|
|
124
|
+
# Re-ingerir services
|
|
125
|
+
curl -X POST "${CORTEX_URL}/api/v1/ingest/service" \
|
|
126
|
+
-H "Authorization: Bearer $CORTEX_API_TOKEN"
|
|
127
|
+
|
|
128
|
+
# Re-ingerir temporal workflows (se configurado)
|
|
129
|
+
curl -X POST "${CORTEX_URL}/api/v1/ingest/temporal_workflow" \
|
|
130
|
+
-H "Authorization: Bearer $CORTEX_API_TOKEN"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
> **Nota**: O body do POST é opcional — o servidor busca os dados automaticamente
|
|
134
|
+
> conforme configurado em `cortex.config.yaml`.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 4. Diagnóstico de Ingestão
|
|
139
|
+
|
|
140
|
+
### Sintoma: spec nova não aparece na busca
|
|
141
|
+
|
|
142
|
+
1. Verifique se o push foi para `develop`, `staging` ou `main` (outros branches não acionam)
|
|
143
|
+
2. Verifique o status do workflow: `gh run list --workflow=cortex-ingest.yml`
|
|
144
|
+
3. Se o workflow falhou, veja o log: `gh run view <run-id> --log`
|
|
145
|
+
4. Se o workflow não foi acionado: acione manualmente (comando acima)
|
|
146
|
+
|
|
147
|
+
### Sintoma: `list_dimensions` retorna dimensão com 0 nós
|
|
148
|
+
|
|
149
|
+
1. Verifique se a dimensão está configurada em `cortex.config.yaml`
|
|
150
|
+
2. Force re-ingestão via curl (seção 3)
|
|
151
|
+
3. Verifique os logs do Cortex para erros de parsing/ingestão
|
|
152
|
+
|
|
153
|
+
### Sintoma: Cortex retorna 503 ou 502
|
|
154
|
+
|
|
155
|
+
1. Verifique se os containers estão rodando: `docker compose ps`
|
|
156
|
+
2. Verifique Neo4j: `docker compose logs neo4j --tail=50`
|
|
157
|
+
3. Verifique memória disponível: `docker stats`
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 5. Verificar API Token
|
|
162
|
+
|
|
163
|
+
Se as chamadas retornam 401:
|
|
164
|
+
1. Verifique `CORTEX_API_TOKEN` no `.env` do workspace: `cat mcp-servers/cortex/.env`
|
|
165
|
+
2. Verifique se o token está correto no servidor: consulte sua configuração de deploy
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Referência Rápida
|
|
170
|
+
|
|
171
|
+
| Ação | Comando |
|
|
172
|
+
|------|---------|
|
|
173
|
+
| Health check | `curl -s "${CORTEX_URL}/health"` |
|
|
174
|
+
| Contar nós | MCP `list_dimensions()` |
|
|
175
|
+
| Re-ingest specs | `gh workflow run cortex-ingest.yml --field dim_key=spec` |
|
|
176
|
+
| Re-ingest services | `gh workflow run cortex-ingest.yml --field dim_key=service` |
|
|
177
|
+
| Status Docker | `docker compose -f /opt/cortex/docker-compose.yml ps` |
|
|
178
|
+
| Logs Docker | `docker compose -f /opt/cortex/docker-compose.yml logs --tail=100 cortex` |
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cortex-research
|
|
3
|
+
description: >
|
|
4
|
+
Skill de pesquisa no grafo de produto (Cortex). Use quando o usuário perguntar
|
|
5
|
+
sobre features existentes, specs, o que está implementado, o que afeta um serviço,
|
|
6
|
+
contexto de produto, histórico de decisões, ou antes de implementar qualquer
|
|
7
|
+
funcionalidade nova. Triggers: "quais features", "o que é a spec-NNN",
|
|
8
|
+
"pesquisar produto", "contexto do produto", "o que afeta o serviço", "specs existentes",
|
|
9
|
+
"quais repos são afetados", "features relacionadas a X", "já existe algo para Y".
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Skill: Cortex Research — Pesquisa de Produto
|
|
13
|
+
|
|
14
|
+
## Propósito
|
|
15
|
+
|
|
16
|
+
Consultar o **Cortex Product Knowledge Graph** para entender o produto antes de implementar
|
|
17
|
+
features, planejar mudanças, ou responder perguntas sobre o que existe no sistema.
|
|
18
|
+
|
|
19
|
+
**Regra obrigatória (Copilot Instructions, Regra 7)**: antes de planejar ou implementar
|
|
20
|
+
qualquer feature, use esta skill para verificar specs existentes relacionadas.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Quando Usar
|
|
25
|
+
|
|
26
|
+
| Situação | Tool a chamar |
|
|
27
|
+
|----------|---------------|
|
|
28
|
+
| "O que existe para pagamentos?" | `query_product_context(keywords=["pagamento"])` |
|
|
29
|
+
| "Quais features estão em andamento?" | `list_features(status="in-progress")` |
|
|
30
|
+
| "Me fale sobre a spec-070" | `get_spec_context(spec_id="spec-070")` |
|
|
31
|
+
| "Quais features afetam o BFF?" | `get_service_context(service_id="service-bff")` |
|
|
32
|
+
| "Preciso implementar X, já existe?" | `query_product_context(keywords=["X"])` |
|
|
33
|
+
| Visão geral do backlog | `list_features()` |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Tools MCP Disponíveis
|
|
38
|
+
|
|
39
|
+
### 1. `query_product_context` — Busca semântica por keywords
|
|
40
|
+
|
|
41
|
+
Use para busca aberta quando não sabe o ID exato da spec.
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Parâmetros:
|
|
45
|
+
keywords: list[str] # ex: ["rateio", "pagamento", "pix"]
|
|
46
|
+
limit: int # padrão 8, máximo 15
|
|
47
|
+
|
|
48
|
+
Retorna: subgrafo ~500 tokens com specs relevantes + relações + repos afetados
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Quando usar**: primeiro passo em qualquer pesquisa de produto. Ideal para entender
|
|
52
|
+
o contexto antes de planejar uma feature.
|
|
53
|
+
|
|
54
|
+
**Exemplos de chamadas:**
|
|
55
|
+
- `query_product_context(keywords=["auth", "google", "oauth"])` — specs de autenticação
|
|
56
|
+
- `query_product_context(keywords=["notificacao", "push", "whatsapp"])` — specs de notificações
|
|
57
|
+
- `query_product_context(keywords=["temporal", "workflow", "job"])` — specs de orquestração
|
|
58
|
+
- `query_product_context(keywords=["rateio", "divisao", "financeiro"])` — specs financeiras
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
### 2. `list_features` — Lista specs por status
|
|
63
|
+
|
|
64
|
+
Use para visão geral do produto ou backlog.
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
Parâmetros:
|
|
68
|
+
status?: "completed" | "in-progress" | "planned" | "todo"
|
|
69
|
+
|
|
70
|
+
Retorna: lista agrupada por status com ID, título, repos
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Quando usar**: visão geral antes de propor uma nova feature, verificar se algo está
|
|
74
|
+
em andamento antes de começar.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### 3. `get_spec_context` — Detalhe de uma spec específica
|
|
79
|
+
|
|
80
|
+
Use quando souber o ID da spec (spec-NNN).
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Parâmetros:
|
|
84
|
+
spec_id: str # ex: "spec-070", "070" (normalizado automaticamente)
|
|
85
|
+
|
|
86
|
+
Retorna: título, status, repos afetados, labels, summary, specs relacionadas (1-hop)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Quando usar**: entender os detalhes e dependências de uma feature específica.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### 4. `get_service_context` — Specs que afetam um serviço
|
|
94
|
+
|
|
95
|
+
Use para entender o impacto de features em um serviço específico.
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
Parâmetros:
|
|
99
|
+
service_id: str # ex: "service-bff", "bff" (normalizado automaticamente)
|
|
100
|
+
|
|
101
|
+
IDs disponíveis:
|
|
102
|
+
service-backend, service-bff, service-webview, service-admin,
|
|
103
|
+
service-android, service-ios, service-lambda, service-landing, service-cortex
|
|
104
|
+
|
|
105
|
+
Retorna: stack, capabilities, porta/URL + todas as specs AFFECTS agrupadas por status
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Quando usar**: antes de implementar algo em um serviço, verificar quais features
|
|
109
|
+
já tocam aquele serviço e podem criar conflito ou dependência.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Fluxo Recomendado: Pesquisa Antes de Implementar
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
1. query_product_context(keywords=[tema, subtema])
|
|
117
|
+
→ Entende o panorama das specs relacionadas
|
|
118
|
+
|
|
119
|
+
2. get_service_context(service_id="service-X") # se mudar um serviço específico
|
|
120
|
+
→ Vê todas as specs que já afetam o serviço
|
|
121
|
+
|
|
122
|
+
3. get_spec_context(spec_id="spec-NNN") # para specs relevantes encontradas
|
|
123
|
+
→ Lê os detalhes e dependências da spec
|
|
124
|
+
|
|
125
|
+
4. list_features(status="in-progress") # se quiser ver o que está ativo
|
|
126
|
+
→ Evita criar conflito com trabalho em andamento
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Encadeamento de Chamadas
|
|
132
|
+
|
|
133
|
+
**Cenário: "Quero implementar autenticação com Apple Sign-In"**
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
1. query_product_context(keywords=["auth", "apple", "ios"])
|
|
137
|
+
→ Encontra spec-058 (Apple Auth iOS), spec-068 (Social Auth Unification)
|
|
138
|
+
|
|
139
|
+
2. get_spec_context(spec_id="spec-058")
|
|
140
|
+
→ Vê que afeta service-ios, service-backend, service-webview
|
|
141
|
+
|
|
142
|
+
3. get_service_context(service_id="service-backend")
|
|
143
|
+
→ Confirma que spec-058 já existe e está "completed"
|
|
144
|
+
→ Vê outras specs relacionadas ao backend
|
|
145
|
+
|
|
146
|
+
→ Conclusão: Apple Auth já existe, implementar apenas se for extensão
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Cenário: "Qual o status do rateio por itens?"**
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
1. query_product_context(keywords=["rateio", "itens", "divisao"])
|
|
153
|
+
→ Encontra spec-035, spec-040, spec-050
|
|
154
|
+
|
|
155
|
+
2. get_spec_context(spec_id="spec-035")
|
|
156
|
+
→ Status: completed, repos: [backend, bff, webview]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Output Format
|
|
162
|
+
|
|
163
|
+
Quando apresentar resultados ao usuário:
|
|
164
|
+
- Destaque o **ID + título** de cada spec encontrada
|
|
165
|
+
- Mostre o **status** com ícones (✅ completed, 🚧 in-progress, 📋 planned, ⬜ todo)
|
|
166
|
+
- Liste os **repos afetados** para o usuário saber onde implementar
|
|
167
|
+
- Se encontrar specs relacionadas, **explique as dependências**
|
|
168
|
+
- Termine com uma **recomendação** (implementar / estender / já existe)
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cortex-context/cli",
|
|
3
|
+
"version": "0.0.5",
|
|
4
|
+
"description": "CLI to initialize and manage Cortex Context (Knowledge Graph) in any VS Code workspace",
|
|
5
|
+
"bin": {
|
|
6
|
+
"cortex-context": "./dist/index.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsup",
|
|
14
|
+
"dev": "tsup --watch",
|
|
15
|
+
"start": "node dist/index.js",
|
|
16
|
+
"lint": "eslint src --ext .ts",
|
|
17
|
+
"type-check": "tsc --noEmit",
|
|
18
|
+
"test": "vitest run --passWithNoTests",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
24
|
+
"commander": "^12.1.0",
|
|
25
|
+
"prompts": "^2.4.2",
|
|
26
|
+
"chalk": "^5.3.0",
|
|
27
|
+
"ora": "^8.1.1",
|
|
28
|
+
"fs-extra": "^11.2.0",
|
|
29
|
+
"semver": "^7.6.3"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^22.0.0",
|
|
33
|
+
"@types/prompts": "^2.4.9",
|
|
34
|
+
"@types/fs-extra": "^11.0.4",
|
|
35
|
+
"@types/semver": "^7.5.8",
|
|
36
|
+
"typescript": "^5.5.0",
|
|
37
|
+
"tsup": "^8.3.0",
|
|
38
|
+
"vitest": "^2.1.0"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18.0.0"
|
|
42
|
+
},
|
|
43
|
+
"keywords": [
|
|
44
|
+
"cortex",
|
|
45
|
+
"context",
|
|
46
|
+
"knowledge-graph",
|
|
47
|
+
"mcp",
|
|
48
|
+
"copilot",
|
|
49
|
+
"cli"
|
|
50
|
+
],
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"repository": {
|
|
53
|
+
"type": "git",
|
|
54
|
+
"url": "https://github.com/rodrigoroldan/cli-cortex-context.git"
|
|
55
|
+
},
|
|
56
|
+
"publishConfig": {
|
|
57
|
+
"access": "public",
|
|
58
|
+
"registry": "https://registry.npmjs.org"
|
|
59
|
+
}
|
|
60
|
+
}
|