@justmpm/comunicate 0.1.0
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 +518 -0
- package/CLAUDE.md +518 -0
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +117 -0
- package/dist/cli.js.map +1 -0
- package/dist/comunicate/core/auth.d.ts +60 -0
- package/dist/comunicate/core/auth.d.ts.map +1 -0
- package/dist/comunicate/core/auth.js +150 -0
- package/dist/comunicate/core/auth.js.map +1 -0
- package/dist/comunicate/core/domains.d.ts +55 -0
- package/dist/comunicate/core/domains.d.ts.map +1 -0
- package/dist/comunicate/core/domains.js +157 -0
- package/dist/comunicate/core/domains.js.map +1 -0
- package/dist/comunicate/core/index.d.ts +9 -0
- package/dist/comunicate/core/index.d.ts.map +1 -0
- package/dist/comunicate/core/index.js +9 -0
- package/dist/comunicate/core/index.js.map +1 -0
- package/dist/comunicate/core/messaging.d.ts +50 -0
- package/dist/comunicate/core/messaging.d.ts.map +1 -0
- package/dist/comunicate/core/messaging.js +224 -0
- package/dist/comunicate/core/messaging.js.map +1 -0
- package/dist/comunicate/core/notifications.d.ts +26 -0
- package/dist/comunicate/core/notifications.d.ts.map +1 -0
- package/dist/comunicate/core/notifications.js +107 -0
- package/dist/comunicate/core/notifications.js.map +1 -0
- package/dist/comunicate/core/persistence.d.ts +28 -0
- package/dist/comunicate/core/persistence.d.ts.map +1 -0
- package/dist/comunicate/core/persistence.js +113 -0
- package/dist/comunicate/core/persistence.js.map +1 -0
- package/dist/comunicate/index.d.ts +11 -0
- package/dist/comunicate/index.d.ts.map +1 -0
- package/dist/comunicate/index.js +27 -0
- package/dist/comunicate/index.js.map +1 -0
- package/dist/comunicate/types/index.d.ts +5 -0
- package/dist/comunicate/types/index.d.ts.map +1 -0
- package/dist/comunicate/types/index.js +5 -0
- package/dist/comunicate/types/index.js.map +1 -0
- package/dist/comunicate/types/message.d.ts +21 -0
- package/dist/comunicate/types/message.d.ts.map +1 -0
- package/dist/comunicate/types/message.js +5 -0
- package/dist/comunicate/types/message.js.map +1 -0
- package/dist/mcp-server.d.ts +7 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +314 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-tools/agent-communication.d.ts +342 -0
- package/dist/mcp-tools/agent-communication.d.ts.map +1 -0
- package/dist/mcp-tools/agent-communication.js +378 -0
- package/dist/mcp-tools/agent-communication.js.map +1 -0
- package/mcp-config.json +15 -0
- package/package.json +44 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
# @justmpm/comunicate - Guia Completo
|
|
2
|
+
|
|
3
|
+
Sistema de Comunicação Entre Agentes usando arquivos JSON locais (File-Based Architecture) otimizado para Windows.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📋 Índice
|
|
8
|
+
|
|
9
|
+
1. [Visão Geral](#visão-geral)
|
|
10
|
+
2. [Arquitetura](#arquitetura)
|
|
11
|
+
3. [Instalação](#instalação)
|
|
12
|
+
4. [Configuração](#configuração)
|
|
13
|
+
5. [Tools MCP](#tools-mcp)
|
|
14
|
+
6. [Fluxos de Trabalho](#fluxos-de-trabalho)
|
|
15
|
+
7. [CLI](#cli)
|
|
16
|
+
8. [Exemplos](#exemplos)
|
|
17
|
+
9. [Segurança](#segurança)
|
|
18
|
+
10. [Troubleshooting](#troubleshooting)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Visão Geral
|
|
23
|
+
|
|
24
|
+
O **@justmpm/comunicate** é um servidor MCP (Model Context Protocol) que permite comunicação entre múltiplos agentes através de arquivos JSON locais.
|
|
25
|
+
|
|
26
|
+
### Por que File-Based?
|
|
27
|
+
|
|
28
|
+
- ✅ **Zero dependências** - Sem banco de dados ou servidor externo
|
|
29
|
+
- ✅ **Portátil** - Viaja com o projeto (controle de versão)
|
|
30
|
+
- ✅ **Debug fácil** - Arquivos JSON human-readable
|
|
31
|
+
- ✅ **No-lock** - Cada agente escreve apenas no seu próprio arquivo
|
|
32
|
+
- ✅ **Otimizado Windows** - File system nativo
|
|
33
|
+
|
|
34
|
+
### Conceitos Fundamentais
|
|
35
|
+
|
|
36
|
+
| Conceito | Descrição |
|
|
37
|
+
|----------|-----------|
|
|
38
|
+
| **Agente** | Entidade que pode enviar/receber mensagens |
|
|
39
|
+
| **Inbox** | Caixa de entrada exclusiva de cada agente |
|
|
40
|
+
| **Domínio** | Diretórios que um agente pode editar naturalmente |
|
|
41
|
+
| **Claim** | Reserva temporária de arquivo fora do domínio |
|
|
42
|
+
| **Heartbeat** | Sinal de vida do agente |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Arquitetura
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
.comunicate/
|
|
50
|
+
├── registry/
|
|
51
|
+
│ ├── agents.json # Registro de agentes (com heartbeat)
|
|
52
|
+
│ ├── tasks.json # Tarefas
|
|
53
|
+
│ └── claims.json # Arquivos reservados (com sequence)
|
|
54
|
+
├── messages/
|
|
55
|
+
│ ├── inbox-*.json # Caixas de entrada
|
|
56
|
+
│ └── archive/ # Mensagens arquivadas (gzip)
|
|
57
|
+
└── context/
|
|
58
|
+
├── api-contracts.json
|
|
59
|
+
├── decisions.json
|
|
60
|
+
└── progress.json
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Metáfora
|
|
64
|
+
|
|
65
|
+
> É como uma sala de equipe onde cada pessoa tem seu próprio quadro de avisos. Você só escreve no seu quadro, mas pode ler os dos outros. Se precisar escrever no quadro de outra pessoa, você precisa pedir permissão (claim).
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Instalação
|
|
70
|
+
|
|
71
|
+
### Pré-requisitos
|
|
72
|
+
|
|
73
|
+
- Node.js 18+
|
|
74
|
+
- Windows (otimizado para este SO)
|
|
75
|
+
|
|
76
|
+
### Passo a Passo
|
|
77
|
+
|
|
78
|
+
```powershell
|
|
79
|
+
# 1. Clone ou copie o projeto
|
|
80
|
+
cd comunicate-ai
|
|
81
|
+
|
|
82
|
+
# 2. Instale dependências
|
|
83
|
+
npm install
|
|
84
|
+
|
|
85
|
+
# 3. Compile TypeScript
|
|
86
|
+
npm run build
|
|
87
|
+
|
|
88
|
+
# 4. Execute setup automatizado
|
|
89
|
+
powershell -ExecutionPolicy Bypass -File setup.ps1
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
O script `setup.ps1` irá:
|
|
93
|
+
- Criar estrutura de pastas
|
|
94
|
+
- Gerar arquivos JSON iniciais
|
|
95
|
+
- Criar token de admin
|
|
96
|
+
- Mostrar configuração para Claude
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Configuração
|
|
101
|
+
|
|
102
|
+
### 1. Configurar Token de Admin
|
|
103
|
+
|
|
104
|
+
```powershell
|
|
105
|
+
# Temporário (sessão atual)
|
|
106
|
+
$env:COMUNICATE_ADMIN_TOKEN="seu-token-aqui"
|
|
107
|
+
|
|
108
|
+
# Permanente (Windows)
|
|
109
|
+
[Environment]::SetEnvironmentVariable("COMUNICATE_ADMIN_TOKEN", "seu-token-aqui", "User")
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 2. Configurar Claude Desktop
|
|
113
|
+
|
|
114
|
+
Edite `%APPDATA%\Claude\settings.json`:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"mcpServers": {
|
|
119
|
+
"@justmpm/comunicate": {
|
|
120
|
+
"command": "node",
|
|
121
|
+
"args": [
|
|
122
|
+
"C:/caminho/completo/para/dist/mcp-server.js"
|
|
123
|
+
],
|
|
124
|
+
"env": {
|
|
125
|
+
"COMUNICATE_ADMIN_TOKEN": "seu-token-aqui"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
> ⚠️ **IMPORTANTE**: Use barras normais (`/`) ou duplas barras invertidas (`\\`) nos caminhos Windows.
|
|
133
|
+
|
|
134
|
+
### 3. Reinicie o Claude Desktop
|
|
135
|
+
|
|
136
|
+
Após configurar, feche e reabra o Claude Desktop.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Tools MCP
|
|
141
|
+
|
|
142
|
+
### Comunicação
|
|
143
|
+
|
|
144
|
+
#### `send_agent_message`
|
|
145
|
+
Envia mensagem para outro agente.
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"token": "token-do-agente",
|
|
150
|
+
"recipientId": "frontend",
|
|
151
|
+
"message": "API pronta!",
|
|
152
|
+
"type": "task_update",
|
|
153
|
+
"priority": "high"
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Tipos:** `text`, `assistance_request`, `task_update`, `notification`
|
|
158
|
+
**Prioridades:** `low`, `normal`, `high`, `urgent`
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
#### `get_agent_messages`
|
|
163
|
+
Lê mensagens da inbox.
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"token": "token-do-agente",
|
|
168
|
+
"includeRead": false,
|
|
169
|
+
"markAsRead": true,
|
|
170
|
+
"limit": 10
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
#### `get_unread_count`
|
|
177
|
+
Retorna número de mensagens não lidas.
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"token": "token-do-agente"
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### Claims (Reserva de Arquivos)
|
|
188
|
+
|
|
189
|
+
#### `claim_file`
|
|
190
|
+
Reserva arquivo fora do domínio para edição.
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"token": "token-do-agente",
|
|
195
|
+
"filePath": "src/types/api.ts",
|
|
196
|
+
"durationMinutes": 30,
|
|
197
|
+
"reason": "Adicionando tipos da API"
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
> O claim expira automaticamente após o tempo definido.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
#### `renew_claim`
|
|
206
|
+
Renova um claim prestes a expirar (só funciona se faltarem < 5 min).
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"token": "token-do-agente",
|
|
211
|
+
"filePath": "src/types/api.ts",
|
|
212
|
+
"additionalMinutes": 15
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
#### `release_file`
|
|
219
|
+
Libera um arquivo reservado antes do tempo.
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"token": "token-do-agente",
|
|
224
|
+
"filePath": "src/types/api.ts"
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
#### `can_edit_file`
|
|
231
|
+
Verifica se pode editar um arquivo (domínio ou claim ativo).
|
|
232
|
+
|
|
233
|
+
```json
|
|
234
|
+
{
|
|
235
|
+
"token": "token-do-agente",
|
|
236
|
+
"filePath": "src/components/Button.tsx"
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
### Administração (requer token de admin)
|
|
243
|
+
|
|
244
|
+
#### `create_agent`
|
|
245
|
+
Cria novo agente.
|
|
246
|
+
|
|
247
|
+
```json
|
|
248
|
+
{
|
|
249
|
+
"adminToken": "token-admin",
|
|
250
|
+
"agentId": "backend",
|
|
251
|
+
"capabilities": ["api", "database", "auth"],
|
|
252
|
+
"domains": ["src/api", "src/models"]
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Regras para agentId:**
|
|
257
|
+
- Apenas letras minúsculas, números e hífens
|
|
258
|
+
- Exemplos válidos: `backend`, `frontend-v2`, `test-runner`
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
#### `list_agents`
|
|
263
|
+
Lista todos os agentes registrados.
|
|
264
|
+
|
|
265
|
+
```json
|
|
266
|
+
{
|
|
267
|
+
"adminToken": "token-admin"
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
#### `get_inactive_agents`
|
|
274
|
+
Lista agentes sem heartbeat (possivelmente "mortos").
|
|
275
|
+
|
|
276
|
+
```json
|
|
277
|
+
{
|
|
278
|
+
"adminToken": "token-admin",
|
|
279
|
+
"timeoutMinutes": 5
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Fluxos de Trabalho
|
|
286
|
+
|
|
287
|
+
### Fluxo 1: Criar Agente e Enviar Mensagem
|
|
288
|
+
|
|
289
|
+
```
|
|
290
|
+
1. Admin executa: create_agent
|
|
291
|
+
→ Recebe token único do agente
|
|
292
|
+
|
|
293
|
+
2. Agente salva seu token
|
|
294
|
+
|
|
295
|
+
3. Agente A executa: send_agent_message
|
|
296
|
+
→ Mensagem vai para inbox-B.json
|
|
297
|
+
|
|
298
|
+
4. Agente B executa: get_agent_messages
|
|
299
|
+
→ Lê e processa mensagens
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Fluxo 2: Coordenação com Claims
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
Backend (domínio: src/models):
|
|
306
|
+
✅ Pode editar: src/models/user.ts
|
|
307
|
+
❌ Não pode: src/components/Button.tsx
|
|
308
|
+
|
|
309
|
+
Frontend (domínio: src/components):
|
|
310
|
+
✅ Pode editar: src/components/Button.tsx
|
|
311
|
+
❌ Não pode: src/models/user.ts
|
|
312
|
+
|
|
313
|
+
Quando Frontend precisa editar src/types/api.ts:
|
|
314
|
+
1. Executa: can_edit_file → false
|
|
315
|
+
2. Executa: claim_file → success
|
|
316
|
+
3. Executa: can_edit_file → true
|
|
317
|
+
4. [edita o arquivo]
|
|
318
|
+
5. Executa: release_file (ou espera expirar)
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Fluxo 3: Monitoramento de Saúde
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
Cada agente deve:
|
|
325
|
+
- Chamar qualquer tool periodicamente (atualiza lastSeen)
|
|
326
|
+
- Ou chamar updateAgentHeartbeat() via código
|
|
327
|
+
|
|
328
|
+
Admin pode executar:
|
|
329
|
+
get_inactive_agents → lista agentes "zumbis"
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## CLI
|
|
335
|
+
|
|
336
|
+
Além das tools MCP, existe uma CLI para administração:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# Listar agentes
|
|
340
|
+
npm run cli -- list-agents
|
|
341
|
+
|
|
342
|
+
# Criar agente
|
|
343
|
+
npm run cli -- create-agent backend
|
|
344
|
+
|
|
345
|
+
# Listar claims
|
|
346
|
+
npm run cli -- list-claims
|
|
347
|
+
|
|
348
|
+
# Verificar saúde
|
|
349
|
+
npm run cli -- check-health 5
|
|
350
|
+
|
|
351
|
+
# Gerar token aleatório
|
|
352
|
+
npm run cli -- generate-token
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## Exemplos
|
|
358
|
+
|
|
359
|
+
### Exemplo 1: Backend notifica Frontend
|
|
360
|
+
|
|
361
|
+
```typescript
|
|
362
|
+
// Backend envia atualização
|
|
363
|
+
const result = sendMessage(
|
|
364
|
+
BACKEND_TOKEN,
|
|
365
|
+
'frontend',
|
|
366
|
+
'API /users pronta! Contrato: { id, name, email }',
|
|
367
|
+
{ type: 'task_update', priority: 'normal' }
|
|
368
|
+
);
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Exemplo 2: Frontend reserva arquivo
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
// Verifica se pode editar
|
|
375
|
+
const check = canEditFile('frontend', 'src/types/api.ts');
|
|
376
|
+
if (!check.allowed) {
|
|
377
|
+
// Reserva arquivo
|
|
378
|
+
const claim = claimFile(
|
|
379
|
+
'frontend',
|
|
380
|
+
'src/types/api.ts',
|
|
381
|
+
30,
|
|
382
|
+
'Adicionando tipos'
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
if (claim.success) {
|
|
386
|
+
// Agora pode editar
|
|
387
|
+
editFile('src/types/api.ts', ...);
|
|
388
|
+
|
|
389
|
+
// Libera quando terminar
|
|
390
|
+
releaseFile('frontend', 'src/types/api.ts');
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### Exemplo 3: Notificações em tempo real
|
|
396
|
+
|
|
397
|
+
```typescript
|
|
398
|
+
import { startNotificationListener } from './comunicate/core/notifications';
|
|
399
|
+
|
|
400
|
+
const listener = startNotificationListener('frontend', {
|
|
401
|
+
onMessage: (msg) => {
|
|
402
|
+
console.log(`Nova mensagem de ${msg.senderId}: ${msg.content}`);
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
// ... quando quiser parar:
|
|
407
|
+
listener.stop();
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
## Segurança
|
|
413
|
+
|
|
414
|
+
### Timing-Safe Comparison
|
|
415
|
+
|
|
416
|
+
Todos os tokens são comparados usando `crypto.timingSafeEqual()` para prevenir timing attacks.
|
|
417
|
+
|
|
418
|
+
### Token de Admin
|
|
419
|
+
|
|
420
|
+
- Armazene em variável de ambiente `COMUNICATE_ADMIN_TOKEN`
|
|
421
|
+
- Nunca commite tokens em repositório
|
|
422
|
+
- Use tokens longos e aleatórios (32+ caracteres hex)
|
|
423
|
+
|
|
424
|
+
### Claims
|
|
425
|
+
|
|
426
|
+
- Claims expiram automaticamente
|
|
427
|
+
- Só um agente pode ter claim de um arquivo por vez
|
|
428
|
+
- Sequence number previne race conditions
|
|
429
|
+
|
|
430
|
+
### Domínios
|
|
431
|
+
|
|
432
|
+
- Defina domínios restritos ao criar agente
|
|
433
|
+
- Agente só edita arquivos dentro de seus domínios sem claim
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Troubleshooting
|
|
438
|
+
|
|
439
|
+
### "Token inválido"
|
|
440
|
+
|
|
441
|
+
- Verifique se o token está completo (32 caracteres hex)
|
|
442
|
+
- Confirme que o agente está ativo (`list_agents`)
|
|
443
|
+
- Verifique se há espaços extras
|
|
444
|
+
|
|
445
|
+
### "File claimed by X"
|
|
446
|
+
|
|
447
|
+
- Outro agente já reservou o arquivo
|
|
448
|
+
- Espere expirar ou peça para liberar
|
|
449
|
+
- Use `get_all_claims` (admin) para verificar
|
|
450
|
+
|
|
451
|
+
### Mensagens não aparecem
|
|
452
|
+
|
|
453
|
+
- Verifique se está usando `includeRead: true`
|
|
454
|
+
- Confirme o `recipientId` no envio
|
|
455
|
+
- Verifique o arquivo inbox-*.json manualmente
|
|
456
|
+
|
|
457
|
+
### File watcher não funciona
|
|
458
|
+
|
|
459
|
+
- O sistema tem fallback automático para polling
|
|
460
|
+
- No Windows, polling é mais confiável que file watcher
|
|
461
|
+
- Considere usar `startPolling()` explicitamente
|
|
462
|
+
|
|
463
|
+
### Permissão negada ao escrever JSON
|
|
464
|
+
|
|
465
|
+
- Verifique permissões da pasta `.comunicate/`
|
|
466
|
+
- Execute como administrador se necessário
|
|
467
|
+
- Verifique se outro processo está usando os arquivos
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
## Dicas
|
|
472
|
+
|
|
473
|
+
1. **Organize domínios por responsabilidade**
|
|
474
|
+
- `backend`: `src/api`, `src/models`
|
|
475
|
+
- `frontend`: `src/components`, `src/hooks`
|
|
476
|
+
- `shared`: `src/types`, `src/utils` (use claims)
|
|
477
|
+
|
|
478
|
+
2. **Renove claims antes de expirar**
|
|
479
|
+
- Se uma tarefa demorar mais que o previsto
|
|
480
|
+
- Renove quando faltarem < 5 minutos
|
|
481
|
+
|
|
482
|
+
3. **Use prioridades adequadamente**
|
|
483
|
+
- `urgent`: Bugs críticos, system down
|
|
484
|
+
- `high`: Features importantes, deadlines
|
|
485
|
+
- `normal`: Comunicação rotineira
|
|
486
|
+
- `low`: Informações, updates
|
|
487
|
+
|
|
488
|
+
4. **Limpe mensagens lidas periodicamente**
|
|
489
|
+
- Use `clear_read_messages` para manter inbox limpa
|
|
490
|
+
- Mensagens antigas são arquivadas automaticamente
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## Referência Rápida
|
|
495
|
+
|
|
496
|
+
### Criar Agente
|
|
497
|
+
```json
|
|
498
|
+
{"adminToken": "...", "agentId": "backend", "capabilities": ["api"], "domains": ["src/api"]}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Enviar Mensagem
|
|
502
|
+
```json
|
|
503
|
+
{"token": "...", "recipientId": "frontend", "message": "...", "type": "task_update", "priority": "normal"}
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### Reservar Arquivo
|
|
507
|
+
```json
|
|
508
|
+
{"token": "...", "filePath": "src/types/api.ts", "durationMinutes": 30, "reason": "..."}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
### Ler Mensagens
|
|
512
|
+
```json
|
|
513
|
+
{"token": "...", "includeRead": false, "markAsRead": true, "limit": 10}
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
---
|
|
517
|
+
|
|
518
|
+
**Versão 0.1.0** | Arquitetura File-Based | Otimizado para Windows
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 @justmpm/comunicate Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# @justmpm/comunicate
|
|
2
|
+
|
|
3
|
+
Sistema de Comunicação Entre Agentes usando arquivos JSON locais (File-Based Architecture).
|
|
4
|
+
|
|
5
|
+
## 🎯 Visão Geral
|
|
6
|
+
|
|
7
|
+
O **@justmpm/comunicate** é um servidor MCP (Model Context Protocol) que permite comunicação entre múltiplos agentes através de arquivos JSON locais, eliminando a necessidade de banco de dados ou servidor dedicado.
|
|
8
|
+
|
|
9
|
+
**Conceitos Fundamentais:**
|
|
10
|
+
- **Pasta Local**: Tudo acontece dentro de `./.comunicate/` no projeto
|
|
11
|
+
- **JSON-First**: Dados persistidos em arquivos JSON human-readable
|
|
12
|
+
- **No-Lock**: Cada agente escreve apenas no seu próprio inbox
|
|
13
|
+
- **Domínios Separados**: Cada agente edita arquivos em diretórios diferentes
|
|
14
|
+
- **Claims**: Sistema de reserva para arquivos compartilhados
|
|
15
|
+
|
|
16
|
+
## 📁 Estrutura
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
.comunicate/
|
|
20
|
+
├── registry/
|
|
21
|
+
│ ├── agents.json # Registro de agentes
|
|
22
|
+
│ ├── tasks.json # Tarefas
|
|
23
|
+
│ └── claims.json # Arquivos reservados
|
|
24
|
+
├── messages/
|
|
25
|
+
│ ├── inbox-*.json # Caixas de entrada
|
|
26
|
+
│ └── archive/ # Mensagens arquivadas (gzip)
|
|
27
|
+
└── context/
|
|
28
|
+
├── api-contracts.json
|
|
29
|
+
├── decisions.json
|
|
30
|
+
└── progress.json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 🚀 Instalação
|
|
34
|
+
|
|
35
|
+
### 1. Instalar dependências
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm install
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. Compilar TypeScript
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm run build
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 3. Configurar variável de ambiente
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Windows PowerShell
|
|
51
|
+
$env:COMUNICATE_ADMIN_TOKEN="seu-token-admin-seguro-aqui"
|
|
52
|
+
|
|
53
|
+
# Windows CMD
|
|
54
|
+
set COMUNICATE_ADMIN_TOKEN=seu-token-admin-seguro-aqui
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 4. Configurar no Claude Desktop (Claude Settings)
|
|
58
|
+
|
|
59
|
+
Edite `%APPDATA%\Claude\settings.json`:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"mcpServers": {
|
|
64
|
+
"@justmpm/comunicate": {
|
|
65
|
+
"command": "node",
|
|
66
|
+
"args": [
|
|
67
|
+
"C:/caminho/completo/para/dist/mcp-server.js"
|
|
68
|
+
],
|
|
69
|
+
"env": {
|
|
70
|
+
"COMUNICATE_ADMIN_TOKEN": "seu-token-admin-seguro-aqui"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 🛠️ Tools Disponíveis
|
|
78
|
+
|
|
79
|
+
### Comunicação
|
|
80
|
+
|
|
81
|
+
| Tool | Descrição |
|
|
82
|
+
|------|-----------|
|
|
83
|
+
| `send_agent_message` | Envia mensagem para outro agente |
|
|
84
|
+
| `get_agent_messages` | Lê mensagens da inbox |
|
|
85
|
+
| `get_unread_count` | Conta mensagens não lidas |
|
|
86
|
+
| `delete_message` | Deleta mensagem específica |
|
|
87
|
+
| `clear_read_messages` | Limpa mensagens lidas |
|
|
88
|
+
|
|
89
|
+
### Claims (Reserva de Arquivos)
|
|
90
|
+
|
|
91
|
+
| Tool | Descrição |
|
|
92
|
+
|------|-----------|
|
|
93
|
+
| `claim_file` | Reserva arquivo para edição |
|
|
94
|
+
| `renew_claim` | Renova claim prestes a expirar |
|
|
95
|
+
| `release_file` | Libera arquivo reservado |
|
|
96
|
+
| `can_edit_file` | Verifica permissão de edição |
|
|
97
|
+
| `get_agent_claims` | Lista seus claims ativos |
|
|
98
|
+
| `get_all_claims` | Lista todos claims (admin) |
|
|
99
|
+
|
|
100
|
+
### Administração
|
|
101
|
+
|
|
102
|
+
| Tool | Descrição |
|
|
103
|
+
|------|-----------|
|
|
104
|
+
| `create_agent` | Cria novo agente |
|
|
105
|
+
| `list_agents` | Lista agentes registrados |
|
|
106
|
+
| `get_inactive_agents` | Lista agentes inativos |
|
|
107
|
+
|
|
108
|
+
## 📖 Exemplos de Uso
|
|
109
|
+
|
|
110
|
+
### Criar um agente (admin)
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"adminToken": "seu-token-admin",
|
|
115
|
+
"agentId": "backend",
|
|
116
|
+
"capabilities": ["api", "database", "auth"],
|
|
117
|
+
"domains": ["src/api", "src/models"]
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Enviar mensagem
|
|
122
|
+
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"token": "token-do-agente",
|
|
126
|
+
"recipientId": "frontend",
|
|
127
|
+
"message": "API pronta!",
|
|
128
|
+
"type": "task_update",
|
|
129
|
+
"priority": "high"
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Reservar arquivo
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"token": "token-do-agente",
|
|
138
|
+
"filePath": "src/types/api.ts",
|
|
139
|
+
"durationMinutes": 30,
|
|
140
|
+
"reason": "Adicionando tipos"
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## 🔒 Segurança
|
|
145
|
+
|
|
146
|
+
- **Timing-Safe Token Comparison**: Proteção contra timing attacks
|
|
147
|
+
- **Retry com Backoff**: Escrita atômica com retry automático
|
|
148
|
+
- **Claims Auto-Limpo**: Expirados são removidos automaticamente
|
|
149
|
+
- **Sequence em Claims**: Prevenção de race conditions
|
|
150
|
+
|
|
151
|
+
## 🖥️ Otimizado para Windows
|
|
152
|
+
|
|
153
|
+
- File watcher com fallback para polling
|
|
154
|
+
- Caminhos normalizados para Windows
|
|
155
|
+
- Suporte nativo ao filesystem Windows
|
|
156
|
+
|
|
157
|
+
## 📝 Licença
|
|
158
|
+
|
|
159
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG"}
|