@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.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",