@justmpm/memory 0.1.0 → 0.1.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/AGENTS.md +694 -0
- package/CLAUDE.md +575 -0
- package/README.md +27 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +45 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,575 @@
|
|
|
1
|
+
# @justmpm/memory - Documentação para IA (CLAUDE.md)
|
|
2
|
+
|
|
3
|
+
## O que é o @justmpm/memory?
|
|
4
|
+
|
|
5
|
+
**@justmpm/memory** é um servidor MCP (Model Context Protocol) que permite que você, como agent, salve e recupere aprendizados entre diferentes sessões de trabalho.
|
|
6
|
+
|
|
7
|
+
**Propósito principal:** Manter persistência de conhecimento específico do projeto entre sessões, para que você não precise reaprender as mesmas coisas sempre que iniciar uma nova conversa.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Como Funciona
|
|
12
|
+
|
|
13
|
+
### Estrutura de Arquivos
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
.claude/
|
|
17
|
+
└── agent-memory/
|
|
18
|
+
├── nexus/
|
|
19
|
+
│ └── MEMORY.md ← Seu arquivo de memória
|
|
20
|
+
├── sentinel/
|
|
21
|
+
│ └── MEMORY.md ← Memória do Sentinel
|
|
22
|
+
├── qa-tester/
|
|
23
|
+
│ └── MEMORY.md ← Memória do QA-Tester
|
|
24
|
+
└── ...
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Importante:**
|
|
28
|
+
- Cada agent tem sua própria memória isolada
|
|
29
|
+
- O nome do arquivo é sempre `MEMORY.md`
|
|
30
|
+
- O nome da pasta é o nome do agent normalizado (lowercase, hífens)
|
|
31
|
+
|
|
32
|
+
### Limite de Tamanho
|
|
33
|
+
|
|
34
|
+
- **Máximo:** 200 linhas
|
|
35
|
+
- **Quando excedido:** Mantém as últimas 160 linhas + cabeçalho de alerta
|
|
36
|
+
- **Auto-limpeza:** Removerá as entradas mais antigas automaticamente
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Tool Memory: Comandos Disponíveis
|
|
41
|
+
|
|
42
|
+
### 1. READ - Carregar memória anterior
|
|
43
|
+
|
|
44
|
+
**Quando usar:**
|
|
45
|
+
- Ao INICIAR uma nova sessão
|
|
46
|
+
- Antes de tomar decisões baseadas em aprendizados anteriores
|
|
47
|
+
- Quando precisar entender o contexto do projeto
|
|
48
|
+
|
|
49
|
+
**Sintaxe:**
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"command": "read",
|
|
53
|
+
"agent": "nexus" // ← Seu nome de agent
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**O que retorna:**
|
|
58
|
+
- Conteúdo completo do MEMORY.md
|
|
59
|
+
- Contagem de linhas
|
|
60
|
+
- Se não existir: mensagem de memória vazia com sugestão
|
|
61
|
+
|
|
62
|
+
**Workflow recomendado:**
|
|
63
|
+
```
|
|
64
|
+
1. Primeira coisa ao iniciar sessão: READ
|
|
65
|
+
2. Analise o conteúdo retornado
|
|
66
|
+
3. Use as informações salvas para informar suas decisões
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### 2. APPEND - Salvar aprendizado novo
|
|
72
|
+
|
|
73
|
+
**Quando usar:**
|
|
74
|
+
- Ao APRENDER algo importante sobre o projeto
|
|
75
|
+
- Ao descobrir PADRÕES de código
|
|
76
|
+
- Ao encontrar BUGS recorrentes
|
|
77
|
+
- Ao tomar DECISÕES arquiteturais
|
|
78
|
+
- Ao aprender PREFERÊNCIAS do usuário
|
|
79
|
+
|
|
80
|
+
**Sintaxe:**
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"command": "append",
|
|
84
|
+
"agent": "nexus",
|
|
85
|
+
"entry": "Padrão descoberto: Sempre use Zod para validar inputs do usuário em todos os componentes de formulário"
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**O que acontece:**
|
|
90
|
+
- Adiciona automaticamente um timestamp: `## [2026-02-09 12:34:56]`
|
|
91
|
+
- Insere sua entrada abaixo do timestamp
|
|
92
|
+
- Mantém todas as entradas anteriores
|
|
93
|
+
- Aplica limite de 200 linhas automaticamente
|
|
94
|
+
|
|
95
|
+
**Dicas para bons entries:**
|
|
96
|
+
- Seja ESPECÍFICO: "Use 2 espaços" > "Formate bem"
|
|
97
|
+
- Adicione CONTEXTO: "No projeto X, use Y..."
|
|
98
|
+
- Use markdown estruturado quando apropriado
|
|
99
|
+
- Explique O PORQUÊ, não só o que
|
|
100
|
+
|
|
101
|
+
**Exemplos de bons entries:**
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
// Padrão de código
|
|
105
|
+
{
|
|
106
|
+
"command": "append",
|
|
107
|
+
"agent": "nexus",
|
|
108
|
+
"entry": "Padrão: Este projeto usa App Router com estrutura /features/[domain]/. Sempre que criar um novo domínio, coloque em /features/[domain]/components, /features/[domain]/hooks, etc."
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Decisão arquitetural
|
|
112
|
+
{
|
|
113
|
+
"command": "append",
|
|
114
|
+
"agent": "nexus",
|
|
115
|
+
"entry": "Decisão: Escolhemos Zustand em vez de Redux para estado global. Motivo: mais leve, TypeScript-friendly, e este projeto tem até 5 stores independentes"
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Bug recorrente
|
|
119
|
+
{
|
|
120
|
+
"command": "append",
|
|
121
|
+
"agent": "nexus",
|
|
122
|
+
"entry": "Bug: Firestore update com array de strings falha silenciosamente quando array está vazio. Workaround: sempre verificar if (array.length > 0) antes de update"
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Preferência do usuário
|
|
126
|
+
{
|
|
127
|
+
"command": "append",
|
|
128
|
+
"agent": "nexus",
|
|
129
|
+
"entry": "Preferência: Matheus prefere componentes funcionais simples com styled-components em vez de criar arquivos separados CSS"
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
### 3. WRITE - Reorganizar memória
|
|
136
|
+
|
|
137
|
+
**Quando usar:**
|
|
138
|
+
- Quando memória estiver MUITO GRANDE (perto de 200 linhas)
|
|
139
|
+
- Para REORGANIZAR estruturas e seções
|
|
140
|
+
- Para REMOVER entradas obsoletas
|
|
141
|
+
- Para RECONSTRUIR memória do zero
|
|
142
|
+
|
|
143
|
+
**Sintaxe:**
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"command": "write",
|
|
147
|
+
"agent": "nexus",
|
|
148
|
+
"content": "# Memória do Nexus\n\n## Padrões\n- Sempre use TypeScript estrito\n\n## Decisões\n- Zustand em vez de Redux\n\n## Bugs\n- Bug XYZ ocorre quando..."
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**O que acontece:**
|
|
153
|
+
- SUBSTITUI TODO o conteúdo existente
|
|
154
|
+
- Aplica limite de 200 linhas
|
|
155
|
+
- Cria estrutura nova do zero
|
|
156
|
+
|
|
157
|
+
**CUIDADO:** `write` APAGA tudo o que estava antes! Use com cautela.
|
|
158
|
+
|
|
159
|
+
**Quando usar write vs append:**
|
|
160
|
+
|
|
161
|
+
| Situação | Use |
|
|
162
|
+
|----------|-----|
|
|
163
|
+
| Aprender algo novo | `append` |
|
|
164
|
+
| Salvar decisão incremental | `append` |
|
|
165
|
+
| Memória grande demais | `write` |
|
|
166
|
+
| Remover entradas obsoletas | `write` |
|
|
167
|
+
| Reorganizar seções | `write` |
|
|
168
|
+
|
|
169
|
+
**Exemplo de reorganização:**
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"command": "write",
|
|
174
|
+
"agent": "nexus",
|
|
175
|
+
"content": "# Memória do Nexus\n\n## Padrões de Código\n- Sempre use TypeScript estrito (noImplicitAny: true)\n- Use 2 espaços de indentação em TSX\n- Nomeie componentes com PascalCase\n\n## Arquitetura\n- App Router com estrutura /features/[domain]/\n- Cada domínio tem components/, hooks/, services/\n\n## Decisões\n- Zustand para estado global (mais leve que Redux)\n- Firestore para banco de dados (escalabilidade)\n- MUI v7 para componentes UI\n\n## Bugs Conhecidos\n- Bug XYZ: ocorre quando... (workaround: ...)\n- Bug ABC: acontece se... (solução: ...)\n\n## Preferências do Matheus\n- Prefere componentes funcionais\n- Gosta de código conciso (1-3 linhas quando possível)\n- Valoriza explicações simples"
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### 4. SEARCH - Buscar informação específica
|
|
182
|
+
|
|
183
|
+
**Quando usar:**
|
|
184
|
+
- Para encontrar informações rápidas sem ler tudo
|
|
185
|
+
- Para verificar se algo já foi documentado
|
|
186
|
+
- Para buscar padrões específicos
|
|
187
|
+
|
|
188
|
+
**Sintaxe:**
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"command": "search",
|
|
192
|
+
"agent": "nexus",
|
|
193
|
+
"query": "Zod"
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**O que retorna:**
|
|
198
|
+
- Até 20 ocorrências com número da linha
|
|
199
|
+
- Case-insensitive (busca "zod" e "Zod" da mesma forma)
|
|
200
|
+
- Se não encontrado: mensagem clara
|
|
201
|
+
|
|
202
|
+
**Exemplos de buscas úteis:**
|
|
203
|
+
|
|
204
|
+
```json
|
|
205
|
+
// Buscar padrão específico
|
|
206
|
+
{ "command": "search", "agent": "nexus", "query": "padrão" }
|
|
207
|
+
|
|
208
|
+
// Buscar bug específico
|
|
209
|
+
{ "command": "search", "agent": "nexus", "query": "bug" }
|
|
210
|
+
|
|
211
|
+
// Buscar tecnologia
|
|
212
|
+
{ "command": "search", "agent": "nexus", "query": "TypeScript" }
|
|
213
|
+
|
|
214
|
+
// Buscar preferência
|
|
215
|
+
{ "command": "search", "agent": "nexus", "query": "Matheus" }
|
|
216
|
+
|
|
217
|
+
// Buscar erro específico
|
|
218
|
+
{ "command": "search", "agent": "nexus", "query": "Firebase" }
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
### 5. LIST - Descobrir agents existentes
|
|
224
|
+
|
|
225
|
+
**Quando usar:**
|
|
226
|
+
- Para descobrir quais agents já usaram memória no projeto
|
|
227
|
+
- Ao iniciar trabalho em projeto desconhecido
|
|
228
|
+
|
|
229
|
+
**Sintaxe:**
|
|
230
|
+
```json
|
|
231
|
+
{
|
|
232
|
+
"command": "list"
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**O que retorna:**
|
|
237
|
+
- Lista de todos os agents com memória
|
|
238
|
+
- Contagem de linhas de cada um
|
|
239
|
+
- Se nenhum: mensagem de "nenhum agent com memória"
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Workflow Recomendado para Você (IA)
|
|
244
|
+
|
|
245
|
+
### Ao Iniciar uma Sessão
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
1. { "command": "read", "agent": "nexus" }
|
|
249
|
+
↓
|
|
250
|
+
2. Analise as entradas retornadas
|
|
251
|
+
↓
|
|
252
|
+
3. Use o conhecimento salvo para informar suas respostas
|
|
253
|
+
↓
|
|
254
|
+
4. Se a memória estiver muito grande, considere reorganizar com WRITE
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Durante a Sessão
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
Ao aprender algo importante → APPEND
|
|
261
|
+
Ao tomar uma decisão → APPEND
|
|
262
|
+
Ao descobrir um bug → APPEND
|
|
263
|
+
Ao identificar um padrão → APPEND
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Ao Final da Sessão
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
1. Revise as entradas adicionadas
|
|
270
|
+
↓
|
|
271
|
+
2. Se memória estiver grande (~150+ linhas), considere WRITE para limpar
|
|
272
|
+
↓
|
|
273
|
+
3. Organize as entradas em seções (Padrões, Decisões, Bugs, etc.)
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## O Que Salvar vs Não Salvar
|
|
279
|
+
|
|
280
|
+
### ✅ SEMPRE salve
|
|
281
|
+
|
|
282
|
+
**Padrões de código:**
|
|
283
|
+
- Convenções de nomenclatura
|
|
284
|
+
- Estrutura de arquivos do projeto
|
|
285
|
+
- Padrões de importação
|
|
286
|
+
- Formatação específica
|
|
287
|
+
|
|
288
|
+
**Decisões arquiteturais:**
|
|
289
|
+
- Escolha de tecnologias e PORQUÊ
|
|
290
|
+
- Trade-offs considerados
|
|
291
|
+
- Razões para não usar X
|
|
292
|
+
|
|
293
|
+
**Bugs recorrentes:**
|
|
294
|
+
- Bugs que aparecem com frequência
|
|
295
|
+
- Workarounds conhecidos
|
|
296
|
+
- Soluções temporárias
|
|
297
|
+
|
|
298
|
+
**Soluções específicas:**
|
|
299
|
+
- Como resolver problemas específicos do projeto
|
|
300
|
+
- Configurações que funcionaram
|
|
301
|
+
- Comandos úteis
|
|
302
|
+
|
|
303
|
+
**Configurações importantes:**
|
|
304
|
+
- Setup de Firebase, Stripe, etc.
|
|
305
|
+
- Variáveis de ambiente importantes
|
|
306
|
+
- Chaves de configuração
|
|
307
|
+
|
|
308
|
+
**Preferências do usuário:**
|
|
309
|
+
- Estilo de código preferido
|
|
310
|
+
- Nível de detalhe esperado em explicações
|
|
311
|
+
- Comunicação preferida
|
|
312
|
+
|
|
313
|
+
### ❌ NÃO salve
|
|
314
|
+
|
|
315
|
+
**Coisas triviais:**
|
|
316
|
+
- "Hoje está chovendo"
|
|
317
|
+
- "Tudo funcionou bem"
|
|
318
|
+
|
|
319
|
+
**Informações que mudam frequentemente:**
|
|
320
|
+
- "Tem 3 arquivos na pasta"
|
|
321
|
+
- "O build levou 5 segundos"
|
|
322
|
+
|
|
323
|
+
**Coisas óbvias:**
|
|
324
|
+
- "O código precisa compilar"
|
|
325
|
+
- "Use TypeScript para tipagem"
|
|
326
|
+
|
|
327
|
+
**Informações duplicadas:**
|
|
328
|
+
- Se um padrão já está salvo, não salve novamente
|
|
329
|
+
- Use SEARCH antes de salvar para verificar
|
|
330
|
+
|
|
331
|
+
**Logs de conversação:**
|
|
332
|
+
- Não salve cada mensagem da conversa
|
|
333
|
+
- Salve apenas o APRENDIZADO, não a conversa inteira
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Formato Recomendado
|
|
338
|
+
|
|
339
|
+
Use seções markdown bem organizadas:
|
|
340
|
+
|
|
341
|
+
```markdown
|
|
342
|
+
# Memória do Nexus
|
|
343
|
+
|
|
344
|
+
## Padrões de Código
|
|
345
|
+
- Sempre use TypeScript estrito
|
|
346
|
+
- Use 2 espaços de indentação em TSX
|
|
347
|
+
- Nomeie componentes com PascalCase
|
|
348
|
+
- Coloque componentes em /components/, hooks em /hooks/
|
|
349
|
+
|
|
350
|
+
## Arquitetura
|
|
351
|
+
- App Router com estrutura /features/[domain]/
|
|
352
|
+
- Cada domínio tem components/, hooks/, services/
|
|
353
|
+
- Firebase para backend (Firestore, Auth, Functions)
|
|
354
|
+
- Zustand para estado global
|
|
355
|
+
|
|
356
|
+
## Decisões
|
|
357
|
+
- Zustand em vez de Redux: mais leve, TypeScript-friendly
|
|
358
|
+
- Firestore em vez de PostgreSQL: melhor escalabilidade e real-time
|
|
359
|
+
- MUI v7: componentes prontos e consistência visual
|
|
360
|
+
|
|
361
|
+
## Bugs Conhecidos
|
|
362
|
+
- Bug XYZ: ocorre quando array vazio é passado para Firestore update
|
|
363
|
+
Workaround: verificar if (array.length > 0) antes
|
|
364
|
+
- Bug ABC: acontece se não usar loader ao navegar
|
|
365
|
+
Solução: adicionar Suspense ou loading state
|
|
366
|
+
|
|
367
|
+
## Configurações
|
|
368
|
+
- Firebase Auth: Google Sign-In habilitado
|
|
369
|
+
- Stripe: Webhook endpoint configurado em /api/stripe/webhook
|
|
370
|
+
- App Router: usa i18n com next-intl
|
|
371
|
+
|
|
372
|
+
## Preferências do Matheus
|
|
373
|
+
- Prefere componentes funcionais simples
|
|
374
|
+
- Gosta de código conciso (1-3 linhas quando possível)
|
|
375
|
+
- Valoriza explicações simples sem jargões
|
|
376
|
+
- Prefere resposta direta sem enrolação
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## Dicas Importantes
|
|
382
|
+
|
|
383
|
+
### 1. Verifique antes de salvar
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
1. { "command": "search", "agent": "nexus", "query": "termo" }
|
|
387
|
+
↓
|
|
388
|
+
2. Se já existe, não salve duplicata
|
|
389
|
+
↓
|
|
390
|
+
3. Se não existe, faça APPEND
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### 2. Seja específico e contextual
|
|
394
|
+
|
|
395
|
+
**Ruim:**
|
|
396
|
+
```json
|
|
397
|
+
{ "entry": "Use TypeScript" }
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**Bom:**
|
|
401
|
+
```json
|
|
402
|
+
{ "entry": "Neste projeto, sempre use TypeScript strict mode (noImplicitAny: true) em todos os arquivos .ts e .tsx" }
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### 3. Explique o PORQUÊ
|
|
406
|
+
|
|
407
|
+
**Ruim:**
|
|
408
|
+
```json
|
|
409
|
+
{ "entry": "Use Zustand" }
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
**Bom:**
|
|
413
|
+
```json
|
|
414
|
+
{ "entry": "Decisão: Usamos Zustand em vez de Redux porque é mais leve (1KB vs 10KB), tem melhor suporte TypeScript, e o projeto tem apenas 5 stores independentes" }
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### 4. Use APPEND para cronologia
|
|
418
|
+
|
|
419
|
+
`APPEND` mantém o histórico cronológico, o que ajuda a entender:
|
|
420
|
+
- Quando aprendizados foram feitos
|
|
421
|
+
- A evolução das decisões
|
|
422
|
+
- Progresso do projeto
|
|
423
|
+
|
|
424
|
+
### 5. Use WRITE para limpeza
|
|
425
|
+
|
|
426
|
+
Quando a memória estiver grande (~150+ linhas):
|
|
427
|
+
1. Leia tudo com `READ`
|
|
428
|
+
2. Reorganize em seções bem definidas
|
|
429
|
+
3. Remova entradas obsoletas
|
|
430
|
+
4. Use `WRITE` com o conteúdo reorganizado
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Exemplos Práticos de Uso
|
|
435
|
+
|
|
436
|
+
### Exemplo 1: Iniciar sessão e carregar memória
|
|
437
|
+
|
|
438
|
+
```
|
|
439
|
+
IA: { "command": "read", "agent": "nexus" }
|
|
440
|
+
|
|
441
|
+
Resultado: 📝 Memória de "nexus" (45 linhas):
|
|
442
|
+
─────────────────────────────────────────────────────────────────
|
|
443
|
+
|
|
444
|
+
# Memória do Nexus
|
|
445
|
+
|
|
446
|
+
## Padrões
|
|
447
|
+
- Sempre use TypeScript estrito
|
|
448
|
+
- Nomeie componentes com PascalCase
|
|
449
|
+
|
|
450
|
+
## Decisões
|
|
451
|
+
- Usamos Zustand para estado global
|
|
452
|
+
...
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Exemplo 2: Aprender novo padrão
|
|
456
|
+
|
|
457
|
+
```
|
|
458
|
+
Usuário: "Adicione um novo componente de botão"
|
|
459
|
+
IA: [Implementa o botão]
|
|
460
|
+
|
|
461
|
+
IA: { "command": "append", "agent": "nexus",
|
|
462
|
+
"entry": "Padrão descoberto: Este projeto usa MUI Button com variantes customizadas. Para consistência, use: <Button variant='contained' color='primary' size='small'> para botões de ação" }
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Exemplo 3: Salvar decisão arquitetural
|
|
466
|
+
|
|
467
|
+
```
|
|
468
|
+
Usuário: "Vamos usar PostgreSQL ou Firestore?"
|
|
469
|
+
IA: [Analisa e recomenda Firestore]
|
|
470
|
+
|
|
471
|
+
IA: { "command": "append", "agent": "nexus",
|
|
472
|
+
"entry": "Decisão: Escolhemos Firestore em vez de PostgreSQL. Motivos: (1) Real-time nativo, (2) Escalabilidade automática, (3) Integração com Firebase Auth, (4) Menor overhead de ops" }
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### Exemplo 4: Documentar bug
|
|
476
|
+
|
|
477
|
+
```
|
|
478
|
+
Usuário: "O formulário não está salvando"
|
|
479
|
+
IA: [Investiga e descobre o bug]
|
|
480
|
+
|
|
481
|
+
IA: { "command": "append", "agent": "nexus",
|
|
482
|
+
"entry": "Bug: Formulário não salva quando usuário não seleciona foto. Causa: validação em FormData falha quando file input está vazio. Workaround: sempre inicializar FormData com file mesmo que vazio" }
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Exemplo 5: Reorganizar memória grande
|
|
486
|
+
|
|
487
|
+
```
|
|
488
|
+
IA: { "command": "read", "agent": "nexus" }
|
|
489
|
+
Resultado: Memória com 195 linhas
|
|
490
|
+
|
|
491
|
+
IA: { "command": "write", "agent": "nexus",
|
|
492
|
+
"content": "# Memória do Nexus\n\n## Padrões (reorganizado e limpo)\n\n..." }
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## Verificação Final
|
|
498
|
+
|
|
499
|
+
Antes de fazer `WRITE`, SEMPRE:
|
|
500
|
+
1. ✅ Leia tudo com `READ` primeiro
|
|
501
|
+
2. ✅ Entenda o que está lá
|
|
502
|
+
3. ✅ Reorganize em seções lógicas
|
|
503
|
+
4. ✅ Remova duplicatas e obsoleto
|
|
504
|
+
5. ✅ Preserve o conhecimento importante
|
|
505
|
+
|
|
506
|
+
Antes de fazer `APPEND`, SEMPRE:
|
|
507
|
+
1. ✅ Use `SEARCH` para verificar se já existe
|
|
508
|
+
2. ✅ Seja específico e contextual
|
|
509
|
+
3. ✅ Explique o PORQUÊ quando relevante
|
|
510
|
+
4. ✅ Use formato markdown apropriado
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Erros Comuns e Como Evitar
|
|
515
|
+
|
|
516
|
+
### Erro 1: Salvar coisas óbvias
|
|
517
|
+
|
|
518
|
+
**Ruim:**
|
|
519
|
+
```json
|
|
520
|
+
{ "entry": "Use TypeScript para tipos" }
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
**Bom:**
|
|
524
|
+
```json
|
|
525
|
+
{ "entry": "Neste projeto, use TypeScript strict mode e defina tipos explicitamente. Evite any: sempre use interfaces ou tipos específicos" }
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
### Erro 2: Duplicar informações
|
|
529
|
+
|
|
530
|
+
**Antes de salvar:**
|
|
531
|
+
```json
|
|
532
|
+
{ "command": "search", "agent": "nexus", "query": "Zustand" }
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
### Erro 3: Não explicar contexto
|
|
536
|
+
|
|
537
|
+
**Ruim:**
|
|
538
|
+
```json
|
|
539
|
+
{ "entry": "Use 2 espaços" }
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
**Bom:**
|
|
543
|
+
```json
|
|
544
|
+
{ "entry": "Neste projeto, use 2 espaços de indentação em arquivos TSX (não 4, não tabs). Isso é consistente com o linter configurado" }
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
### Erro 4: WRITE sem ler antes
|
|
548
|
+
|
|
549
|
+
**Errado:**
|
|
550
|
+
```
|
|
551
|
+
IA: { "command": "write", "agent": "nexus", "content": "..." }
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
**Certo:**
|
|
555
|
+
```
|
|
556
|
+
IA: { "command": "read", "agent": "nexus" }
|
|
557
|
+
[Analisa o conteúdo]
|
|
558
|
+
IA: { "command": "write", "agent": "nexus", "content": "..." }
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
## Resumo
|
|
564
|
+
|
|
565
|
+
| Comando | Quando usar | Cuidado |
|
|
566
|
+
|---------|------------|---------|
|
|
567
|
+
| `read` | Iniciar sessão | Nenhum |
|
|
568
|
+
| `append` | Aprender algo novo | Use SEARCH antes |
|
|
569
|
+
| `write` | Reorganizar memória | Leia ANTES |
|
|
570
|
+
| `search` | Encontrar info rápida | Nenhum |
|
|
571
|
+
| `list` | Descobrir agents | Nenhum |
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
**Lembre-se:** O objetivo da memória é preservar conhecimento importante entre sessões, não registrar toda a conversa. Seja seletivo, específico e organizado!
|
package/README.md
CHANGED
|
@@ -249,6 +249,33 @@ npm start
|
|
|
249
249
|
|
|
250
250
|
Para alterar a versão do servidor MCP, basta modificar o campo `version` no arquivo `package.json`. O `index.ts` lê automaticamente a versão do package.json em tempo de execução.
|
|
251
251
|
|
|
252
|
+
## Documentação Adicional
|
|
253
|
+
|
|
254
|
+
### CLAUDE.md
|
|
255
|
+
|
|
256
|
+
Documentação completa para IAs sobre como usar corretamente o sistema de memória. Inclui:
|
|
257
|
+
|
|
258
|
+
- Workflow recomendado por sessão
|
|
259
|
+
- Guia de quando usar cada comando
|
|
260
|
+
- O que salvar vs não salvar
|
|
261
|
+
- Formato recomendado
|
|
262
|
+
- Dicas práticas e exemplos
|
|
263
|
+
- Erros comuns e como evitar
|
|
264
|
+
|
|
265
|
+
**Para IAs:** Leia CLAUDE.md para entender como usar este sistema eficientemente.
|
|
266
|
+
|
|
267
|
+
### AGENTS.md
|
|
268
|
+
|
|
269
|
+
Guia específico para cada tipo de subagent sobre como usar a memória de forma alinhada com sua especialização. Inclui:
|
|
270
|
+
|
|
271
|
+
- O que cada tipo de agent deve salvar
|
|
272
|
+
- Formato de memória recomendado por agent
|
|
273
|
+
- Exemplos práticos por tipo
|
|
274
|
+
- Compartilhamento de informações entre agents
|
|
275
|
+
- Boas práticas específicas
|
|
276
|
+
|
|
277
|
+
**Para Subagents:** Consulte a seção relevante em AGENTS.md para orientações específicas do seu tipo.
|
|
278
|
+
|
|
252
279
|
## Licença
|
|
253
280
|
|
|
254
281
|
MIT © Koda AI Studio
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
/**
|
|
2
3
|
* Memory MCP Server - Sistema de memória persistente para subagents
|
|
3
4
|
*
|
|
@@ -571,6 +572,46 @@ Exemplos de busca úteis: "padrão", "bug", "TypeScript", "Firebase", "erro"
|
|
|
571
572
|
// INICIALIZAÇÃO
|
|
572
573
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
573
574
|
async function main() {
|
|
575
|
+
// Verifica argumentos de linha de comando
|
|
576
|
+
const args = process.argv.slice(2);
|
|
577
|
+
// --version
|
|
578
|
+
if (args.includes("--version") || args.includes("-v")) {
|
|
579
|
+
console.log(`@justmpm/memory v${PACKAGE_VERSION}`);
|
|
580
|
+
process.exit(0);
|
|
581
|
+
}
|
|
582
|
+
// --help
|
|
583
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
584
|
+
console.log(`
|
|
585
|
+
@justmpm/memory - MCP Server para gerenciar memória persistente de subagents
|
|
586
|
+
|
|
587
|
+
Versão: ${PACKAGE_VERSION}
|
|
588
|
+
|
|
589
|
+
USO:
|
|
590
|
+
memory Inicia o servidor MCP (comunicação via stdio)
|
|
591
|
+
memory --version Mostra a versão do pacote
|
|
592
|
+
memory --help Mostra esta mensagem de ajuda
|
|
593
|
+
|
|
594
|
+
COMANDOS MCP:
|
|
595
|
+
- read Lê a memória de um agent
|
|
596
|
+
- write Substitui toda a memória
|
|
597
|
+
- append Adiciona uma entrada ao final
|
|
598
|
+
- search Busca texto na memória
|
|
599
|
+
- list Lista todos os agents com memória
|
|
600
|
+
|
|
601
|
+
DOCUMENTAÇÃO:
|
|
602
|
+
Para mais detalhes, consulte:
|
|
603
|
+
- CLAUDE.md (Documentação para IAs)
|
|
604
|
+
- AGENTS.md (Guia para subagents)
|
|
605
|
+
- README.md (Documentação principal)
|
|
606
|
+
|
|
607
|
+
REPOSITÓRIO:
|
|
608
|
+
https://github.com/justmpm/memory-mcp
|
|
609
|
+
|
|
610
|
+
LICENÇA:
|
|
611
|
+
MIT © Koda AI Studio
|
|
612
|
+
`);
|
|
613
|
+
process.exit(0);
|
|
614
|
+
}
|
|
574
615
|
const transport = new StdioServerTransport();
|
|
575
616
|
await server.connect(transport);
|
|
576
617
|
// Não faz log aqui pois o servidor se comunica via stdio
|