@gabrihhh/jarvis 2.0.0 → 2.0.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.
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory-index
|
|
3
|
+
description: Indexar repositório atual no grafo de memória semantica (Neo4j)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Memory Index — Indexar Repositório no Grafo de Memória
|
|
7
|
+
|
|
8
|
+
Você vai analisar o repositório atual de forma exaustiva e indexar seu entendimento no Neo4j. **Não grave nada sem aprovação explícita do usuário.**
|
|
9
|
+
|
|
10
|
+
## REGRA GLOBAL
|
|
11
|
+
- Se travar em qualquer ponto — dúvida técnica, conceitual, arquivo ilegível, ambiguidade de qualquer natureza — **pare e pergunte ao usuário** antes de continuar
|
|
12
|
+
- Não há limite de perguntas. Prefira perguntar a gravar algo errado
|
|
13
|
+
- Só chame a MCP tool `save-project` após o usuário dizer explicitamente "pode salvar" ou equivalente
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Passo 0 — Seleção de Branch
|
|
18
|
+
|
|
19
|
+
Pergunte ao usuário: **"Deseja indexar o branch `main` ou `qa`?"**
|
|
20
|
+
|
|
21
|
+
Após a resposta, execute:
|
|
22
|
+
```bash
|
|
23
|
+
git checkout <branch-escolhido>
|
|
24
|
+
git pull origin <branch-escolhido>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Se algum comando falhar (branch inexistente, conflitos, sem remote), pergunte ao usuário o que fazer antes de continuar.
|
|
28
|
+
|
|
29
|
+
Confirme com:
|
|
30
|
+
```bash
|
|
31
|
+
git branch --show-current
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
O output deve mostrar o branch escolhido. Se não, pergunte ao usuário.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Passo 1 — Descoberta Inicial
|
|
39
|
+
|
|
40
|
+
Execute para entender a estrutura geral:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Manifesto principal do projeto
|
|
44
|
+
cat package.json 2>/dev/null || cat composer.json 2>/dev/null || cat pyproject.toml 2>/dev/null || cat go.mod 2>/dev/null || echo "Nenhum manifesto padrão encontrado"
|
|
45
|
+
|
|
46
|
+
# Estrutura de diretórios (sem node_modules, .git, dist, build)
|
|
47
|
+
find . -maxdepth 3 -type d \
|
|
48
|
+
! -path "*/node_modules/*" ! -path "*/.git/*" \
|
|
49
|
+
! -path "*/dist/*" ! -path "*/build/*" ! -path "*/.next/*"
|
|
50
|
+
|
|
51
|
+
# Arquivos de configuração relevantes
|
|
52
|
+
find . -maxdepth 2 -type f \( -name "*.json" -o -name "*.toml" -o -name "*.yaml" -o -name "*.yml" -o -name "*.env.example" \) \
|
|
53
|
+
! -path "*/node_modules/*" ! -path "*/.git/*"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Com base no output, identifique:
|
|
57
|
+
- Linguagem principal e framework
|
|
58
|
+
- Diretórios de primeiro e segundo nível como candidatos a módulos
|
|
59
|
+
- Dependências listadas no manifesto
|
|
60
|
+
|
|
61
|
+
Se qualquer coisa não for óbvia, pergunte ao usuário antes de prosseguir.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Passo 2 — Análise Profunda
|
|
66
|
+
|
|
67
|
+
Para cada diretório candidato a módulo identificado:
|
|
68
|
+
|
|
69
|
+
**1. Liste os arquivos:**
|
|
70
|
+
```bash
|
|
71
|
+
find <diretório> -type f \
|
|
72
|
+
! -path "*/node_modules/*" ! -path "*/.git/*" \
|
|
73
|
+
! -name "*.lock" ! -name "package-lock.json"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**2. Leia os arquivos mais relevantes** (entry points, services, controllers, models, routers, handlers):
|
|
77
|
+
- Priorize: `.js`, `.ts`, `.py`, `.php`, `.go`, `.java`, `.rb`
|
|
78
|
+
- Ignore: binários, lock files, arquivos gerados, arquivos minificados
|
|
79
|
+
|
|
80
|
+
**3. Para cada arquivo lido, determine com certeza:**
|
|
81
|
+
- **Responsabilidade:** o que este arquivo faz?
|
|
82
|
+
- **Imports/Exports:** quais módulos ele usa ou expõe?
|
|
83
|
+
- **Padrões:** Repository, Service Layer, MVC, Factory, Middleware, etc.?
|
|
84
|
+
- **Domínio de negócio:** a qual área pertence (autenticação, pedidos, faturamento, etc.)?
|
|
85
|
+
|
|
86
|
+
**A qualquer momento que não tiver 100% de certeza → pergunte ao usuário.**
|
|
87
|
+
|
|
88
|
+
Exemplos de perguntas válidas:
|
|
89
|
+
- "A pasta `src/oms/` é o módulo de gestão de pedidos?"
|
|
90
|
+
- "O arquivo `auth.service.js` usa JWT ou sessões?"
|
|
91
|
+
- "Qual é o domínio de negócio de `src/billing/`?"
|
|
92
|
+
- "Este diretório `src/shared/` contém utilitários compartilhados?"
|
|
93
|
+
- "Esse padrão aqui é Repository ou Service Layer?"
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Passo 3 — Montagem do Mapa
|
|
98
|
+
|
|
99
|
+
Ao concluir a análise, consolide mentalmente (sem gravar ainda) o mapa completo:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
Projeto: <nome> [<branch>]
|
|
103
|
+
Linguagem: <linguagem>
|
|
104
|
+
Descrição: <descrição curta do que o projeto faz>
|
|
105
|
+
|
|
106
|
+
Módulos:
|
|
107
|
+
- <nome> | Domínio: <domínio> | Path: <path>
|
|
108
|
+
Arquivos: [lista com propósito de cada um]
|
|
109
|
+
Padrões: [padrões de código identificados]
|
|
110
|
+
Conceitos: [conceitos de negócio]
|
|
111
|
+
Depende de: [outros módulos do projeto]
|
|
112
|
+
|
|
113
|
+
Padrões globais do projeto: [lista]
|
|
114
|
+
Dependências externas relevantes: [nome, versão, tipo]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Passo 4 — Apresentação para Aprovação
|
|
120
|
+
|
|
121
|
+
Apresente o mapa completo ao usuário de forma clara e legível.
|
|
122
|
+
|
|
123
|
+
Diga ao final: **"Este é meu entendimento completo do projeto. Revise, corrija o que estiver errado, e quando estiver tudo certo me diga 'pode salvar'."**
|
|
124
|
+
|
|
125
|
+
Aguarde a resposta. Se o usuário corrigir algo:
|
|
126
|
+
- Atualize o mapa
|
|
127
|
+
- Confirme as correções: "Entendido. Corrigi X para Y. Mais alguma correção?"
|
|
128
|
+
- Repita até aprovação explícita
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Passo 5 — Gravação
|
|
133
|
+
|
|
134
|
+
Após aprovação explícita do usuário, chame a MCP tool `save-project` com o objeto completo:
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"project": {
|
|
139
|
+
"name": "<nome do projeto>",
|
|
140
|
+
"path": "<path absoluto do repositório>",
|
|
141
|
+
"description": "<descrição>",
|
|
142
|
+
"language": "<linguagem principal>",
|
|
143
|
+
"branch": "<branch escolhido>"
|
|
144
|
+
},
|
|
145
|
+
"modules": [
|
|
146
|
+
{
|
|
147
|
+
"name": "<nome do módulo>",
|
|
148
|
+
"path": "<path relativo>",
|
|
149
|
+
"domain": "<domínio de negócio>",
|
|
150
|
+
"files": [
|
|
151
|
+
{ "path": "<path do arquivo>", "purpose": "<responsabilidade>" }
|
|
152
|
+
],
|
|
153
|
+
"patterns": ["<padrão identificado>"],
|
|
154
|
+
"concepts": ["<conceito de negócio>"],
|
|
155
|
+
"dependsOn": ["<nome de outro módulo do projeto>"]
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"dependencies": [
|
|
159
|
+
{ "name": "<nome>", "version": "<versão>", "type": "external" }
|
|
160
|
+
],
|
|
161
|
+
"patterns": [
|
|
162
|
+
{ "name": "<nome>", "description": "<descrição do padrão>" }
|
|
163
|
+
]
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Após a tool retornar sucesso, informe ao usuário:
|
|
168
|
+
**"Projeto `<nome>` [<branch>] indexado com sucesso no grafo de memória."**
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: setup-memory
|
|
3
|
+
description: Configurar ambiente Neo4j + MCP Server para memória semântica do Claude Code
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Setup Memory — Preparar ambiente Neo4j e MCP Server
|
|
7
|
+
|
|
8
|
+
Você vai configurar o ambiente de memória semântica para o Claude Code. Siga este fluxo exato, passo a passo.
|
|
9
|
+
|
|
10
|
+
## REGRA GLOBAL
|
|
11
|
+
Se travar em qualquer etapa — erro inesperado, permissão negada, output estranho — **pare e pergunte ao usuário o que deve ser feito** antes de continuar.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Passo 1 — Verificar Docker
|
|
16
|
+
|
|
17
|
+
Execute:
|
|
18
|
+
```bash
|
|
19
|
+
docker --version
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Se não instalado:**
|
|
23
|
+
- Pergunte: "Docker não encontrado. Posso tentar instalar agora? (requer sudo)"
|
|
24
|
+
- Se aprovado, detecte o OS (`cat /etc/os-release` ou `uname -a`) e instale:
|
|
25
|
+
- Ubuntu/Debian: `sudo apt-get update && sudo apt-get install -y docker.io`
|
|
26
|
+
- Fedora/RHEL: `sudo dnf install -y docker`
|
|
27
|
+
- macOS: instrua a instalar Docker Desktop manualmente e aguarde confirmação do usuário
|
|
28
|
+
- Se a instalação falhar por qualquer motivo: informe o erro, forneça o link https://docs.docker.com/get-docker/ e aguarde o usuário confirmar que instalou antes de continuar
|
|
29
|
+
|
|
30
|
+
Execute:
|
|
31
|
+
```bash
|
|
32
|
+
docker info
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Se daemon não rodando:**
|
|
36
|
+
- Pergunte: "Docker está instalado mas não está rodando. Posso iniciar? (requer sudo)"
|
|
37
|
+
- Se aprovado:
|
|
38
|
+
- Linux: `sudo systemctl start docker`
|
|
39
|
+
- macOS: instrua a abrir o Docker Desktop
|
|
40
|
+
- Se falhar: pergunte ao usuário o que fazer
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Passo 2 — Verificar container Neo4j
|
|
45
|
+
|
|
46
|
+
Execute:
|
|
47
|
+
```bash
|
|
48
|
+
docker ps -a --filter name=claude-memory --format "{{.Status}}"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- Se retornar linha começando com `Up`: container já está rodando → **pule para o Passo 4**
|
|
52
|
+
- Se retornar linha começando com `Exited`: execute `docker start claude-memory` e aguarde 10s antes de continuar
|
|
53
|
+
- Se não retornar nada: siga para o Passo 3
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Passo 3 — Subir Neo4j (primeira vez)
|
|
58
|
+
|
|
59
|
+
Execute:
|
|
60
|
+
```bash
|
|
61
|
+
docker run -d \
|
|
62
|
+
--name claude-memory \
|
|
63
|
+
-p 7474:7474 -p 7687:7687 \
|
|
64
|
+
-e NEO4J_AUTH=neo4j/claudememory \
|
|
65
|
+
--restart unless-stopped \
|
|
66
|
+
neo4j:latest
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Aguarde Neo4j estar pronto com polling (até 60 segundos):
|
|
70
|
+
```bash
|
|
71
|
+
for i in $(seq 1 12); do
|
|
72
|
+
docker exec claude-memory cypher-shell -u neo4j -p claudememory "RETURN 1" 2>/dev/null && echo "Neo4j pronto!" && break
|
|
73
|
+
echo "Aguardando Neo4j iniciar... ($i/12)"
|
|
74
|
+
sleep 5
|
|
75
|
+
done
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Se não ficar pronto após 60 segundos: pergunte ao usuário o que fazer.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Passo 4 — Registrar MCP Server
|
|
83
|
+
|
|
84
|
+
Descubra o caminho absoluto do bin `jarvis-memory`:
|
|
85
|
+
```bash
|
|
86
|
+
which jarvis-memory 2>/dev/null || realpath bin/jarvis-memory.js
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Leia o arquivo `~/.claude/settings.json`. Se não existir, trate como `{}`.
|
|
90
|
+
|
|
91
|
+
Adicione ou atualize a chave `mcpServers.claude-memory` preservando todas as outras chaves existentes:
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"mcpServers": {
|
|
95
|
+
"jarvis-memory": {
|
|
96
|
+
"command": "node",
|
|
97
|
+
"args": ["<CAMINHO_ABSOLUTO_DO_BIN>"]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Salve o arquivo `~/.claude/settings.json`.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Passo 5 — Confirmação Final
|
|
108
|
+
|
|
109
|
+
Informe ao usuário:
|
|
110
|
+
- "Neo4j rodando em http://localhost:7474 (interface web) e bolt://localhost:7687"
|
|
111
|
+
- "MCP server `jarvis-memory` registrado em ~/.claude/settings.json"
|
|
112
|
+
- "**Reinicie o Claude Code** para que o MCP server seja ativado"
|
|
113
|
+
- "Após reiniciar, use `/memory-index` para indexar seu primeiro repositório"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(head -50 ~/.claude/telemetry/*.json)",
|
|
5
|
+
"Bash(grep -l \"usage\\\\|tokens\\\\|cost\\\\|model\" ~/.claude/projects/*/*.jsonl)",
|
|
6
|
+
"Bash(xargs -I {} sh -c 'echo \"=== {} ===\" && cat {}')",
|
|
7
|
+
"Bash(chmod +x /tmp/analyze_claude_data.sh)",
|
|
8
|
+
"Bash(/tmp/analyze_claude_data.sh)",
|
|
9
|
+
"Read(//tmp/**)",
|
|
10
|
+
"Bash(chmod +x:*)",
|
|
11
|
+
"Bash(npm install:*)",
|
|
12
|
+
"Bash(node:*)",
|
|
13
|
+
"Bash(claude-usage:*)",
|
|
14
|
+
"Bash(COLUMNS=60 node -e \"process.stdout.columns=60; import\\('./bin/claude-usage.js'\\)\")",
|
|
15
|
+
"Bash(npm set:*)",
|
|
16
|
+
"Bash(git init:*)",
|
|
17
|
+
"Bash(git add:*)",
|
|
18
|
+
"Bash(git commit -m ':*)",
|
|
19
|
+
"Bash(npm publish:*)",
|
|
20
|
+
"Bash(git commit:*)",
|
|
21
|
+
"Bash(git push:*)",
|
|
22
|
+
"Read(//home/patara/.nvm/versions/node/v18.20.8/lib/node_modules/@gabrihhh/jarvis/**)"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gabrihhh/jarvis",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Claude Code terminal dashboard + semantic memory graph via Neo4j",
|
|
5
5
|
"bin": {
|
|
6
6
|
"jarvis": "bin/jarvis.js",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
14
|
"bin/",
|
|
15
|
-
"src/"
|
|
15
|
+
"src/",
|
|
16
|
+
".claude/"
|
|
16
17
|
],
|
|
17
18
|
"keywords": [
|
|
18
19
|
"claude",
|