@justmpm/comunicate 0.1.4 → 0.2.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 CHANGED
@@ -1,45 +1,36 @@
1
- # @justmpm/comunicate - Guia Completo
1
+ # @justmpm/comunicate - Guia Completo para Agentes
2
2
 
3
- Sistema de Comunicação Entre Agentes usando arquivos JSON locais (File-Based Architecture) otimizado para Windows.
3
+ Sistema de Comunicação Entre Agentes usando arquivos JSON locais (File-Based Architecture).
4
4
 
5
5
  ---
6
6
 
7
7
  ## 📋 Índice
8
8
 
9
- 1. [Visão Geral](#visão-geral)
9
+ 1. [Conceitos Fundamentais](#conceitos-fundamentais)
10
10
  2. [Arquitetura](#arquitetura)
11
- 3. [Instalação](#instalação)
12
- 4. [Configuração](#configuração)
13
- 5. [Tools MCP](#tools-mcp)
11
+ 3. [Tokens](#tokens)
12
+ 4. [Domínios](#domínios)
13
+ 5. [Claims](#claims)
14
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)
15
+ 7. [Todas as Tools](#todas-as-tools)
16
+ 8. [Exemplos Completos](#exemplos-completos)
17
+ 9. [Troubleshooting](#troubleshooting)
19
18
 
20
19
  ---
21
20
 
22
- ## Visão Geral
21
+ ## Conceitos Fundamentais
23
22
 
24
- O **@justmpm/comunicate** é um servidor MCP (Model Context Protocol) que permite comunicação entre múltiplos agentes através de arquivos JSON locais.
23
+ ### O que é este sistema?
25
24
 
26
- ### Por que File-Based?
25
+ O **@justmpm/comunicate** permite que múltiplos agentes (IAs, scripts, processos) trabalhem juntos no mesmo projeto sem conflitos, através de:
27
26
 
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
27
+ - **Mensagens**: Comunicação assíncrona entre agentes
28
+ - **Domínios**: Separação de responsabilidades por pasta
29
+ - **Claims**: Reserva de arquivos compartilhados
33
30
 
34
- ### Conceitos Fundamentais
31
+ ### Metáfora
35
32
 
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 |
33
+ > Imagine uma sala de equipe onde cada pessoa tem seu próprio quadro de avisos (inbox). Você só escreve no seu quadro, mas pode ler os dos outros. Para escrever no quadro de outra pessoa, você precisa pedir permissão (claim).
43
34
 
44
35
  ---
45
36
 
@@ -48,160 +39,229 @@ O **@justmpm/comunicate** é um servidor MCP (Model Context Protocol) que permit
48
39
  ```
49
40
  .comunicate/
50
41
  ├── registry/
51
- │ ├── agents.json # Registro de agentes (com heartbeat)
52
- │ ├── tasks.json # Tarefas
53
- │ └── claims.json # Arquivos reservados (com sequence)
42
+ │ ├── agents.json # Registro de agentes e tokens
43
+ │ ├── tasks.json # Tarefas do sistema
44
+ │ └── claims.json # Arquivos reservados
54
45
  ├── messages/
55
- │ ├── inbox-*.json # Caixas de entrada
56
- │ └── archive/ # Mensagens arquivadas (gzip)
46
+ │ ├── inbox-*.json # Caixa de entrada de cada agente
47
+ │ └── archive/ # Mensagens antigas (gzip)
57
48
  └── context/
58
49
  ├── api-contracts.json
59
50
  ├── decisions.json
60
51
  └── progress.json
61
52
  ```
62
53
 
63
- ### Metáfora
54
+ ---
55
+
56
+ ## Tokens
57
+
58
+ ### Admin Token
59
+
60
+ - Configurado na variável de ambiente `COMUNICATE_ADMIN_TOKEN` no arquivo de configuração do MCP
61
+ - Usado para validar operações administrativas: `create_agent`, `list_agents`, `get_inactive_agents`, `get_all_claims`
62
+ - **Função de Segurança**: Garante que apenas o administrador do sistema possa gerenciar agentes e ver informações sensíveis
63
+ - Quando uma tool de admin é chamada, o adminToken passado é comparado com o configurado no sistema
64
+ - Se não corresponder, a operação é negada
65
+
66
+ **IMPORTANTE:**
67
+ - Apenas o administrador deve usar tools de admin
68
+ - Agentes normais não devem ter acesso ao adminToken
69
+ - O adminToken protege contra criação não autorizada de agentes
70
+
71
+ ### Agent Token
72
+
73
+ - Gerado pelo `create_agent` quando um admin cria um novo agente
74
+ - **CADA AGENTE TEM SEU PRÓPRIO TOKEN ÚNICO**
75
+ - Usado em TODAS as operações do agente (enviar mensagens, fazer claims, etc.)
76
+ - **GUARDE O TOKEN!** Não será mostrado novamente
77
+
78
+ ### Diferença entre os Tokens
64
79
 
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).
80
+ | Aspecto | Admin Token | Agent Token |
81
+ |---------|-------------|-------------|
82
+ | **Quem tem** | Apenas administrador | Cada agente tem o seu |
83
+ | **Para que serve** | Gerenciar o sistema | Operações do agente |
84
+ | **Onde é configurado** | Variável de ambiente | Gerado pelo create_agent |
85
+ | **Tools que usa** | create_agent, list_agents, etc. | send_agent_message, claim_file, etc. |
66
86
 
67
87
  ---
68
88
 
69
- ## Instalação
89
+ ## Domínios
70
90
 
71
- Escolha uma das três opções:
91
+ ### O que são?
72
92
 
73
- ### Opção 1: npx (Recomendado - Sem Instalar)
93
+ Domínios são pastas onde um agente pode editar arquivos **naturalmente**, sem precisar reservar (fazer claim).
74
94
 
75
- Execute diretamente sem instalar:
95
+ ### Exemplo Prático
76
96
 
77
- ```bash
78
- npx -y @justmpm/comunicate
79
97
  ```
98
+ Agente Frontend criado com:
99
+ domains: ["src/components", "src/pages"]
80
100
 
81
- Para configurar no Claude Desktop:
82
-
83
- ```json
84
- {
85
- "mcpServers": {
86
- "@justmpm/comunicate": {
87
- "command": "npx",
88
- "args": ["-y", "@justmpm/comunicate"],
89
- "env": {
90
- "COMUNICATE_ADMIN_TOKEN": "seu-token-aqui"
91
- }
92
- }
93
- }
94
- }
101
+ Resultado:
102
+ ✅ Pode editar: src/components/Button.tsx
103
+ ✅ Pode editar: src/components/Header/index.tsx
104
+ ✅ Pode editar: src/pages/Home.tsx
105
+ ❌ NÃO pode editar: src/api/users.ts
106
+ ❌ NÃO pode editar: src/types/api.ts
95
107
  ```
96
108
 
97
- ### Opção 2: Instalação Global
109
+ ### Por que usar domínios?
98
110
 
99
- Instale uma vez e use em qualquer projeto:
111
+ 1. **Segurança**: Agentes tocam em arquivos de sua responsabilidade
112
+ 2. **Eficiência**: Sem necessidade de claims para arquivos próprios
113
+ 3. **Organização**: Separação clara de responsabilidades
100
114
 
101
- ```bash
102
- npm install -g @justmpm/comunicate
103
- ```
115
+ ---
104
116
 
105
- Configure no Claude Desktop:
117
+ ## Claims
106
118
 
107
- ```json
108
- {
109
- "mcpServers": {
110
- "@justmpm/comunicate": {
111
- "command": "comunicate",
112
- "env": {
113
- "COMUNICATE_ADMIN_TOKEN": "seu-token-aqui"
114
- }
115
- }
116
- }
117
- }
118
- ```
119
+ ### O que é um Claim?
120
+
121
+ Um **claim** é uma reserva temporária de um arquivo fora do domínio do agente.
119
122
 
120
- > Após instalar globalmente, o comando `comunicate` estará disponível no PATH.
123
+ ### Quando usar?
121
124
 
122
- ### Opção 3: Desenvolvimento (Clone Local)
125
+ - Arquivos compartilhados (ex: `src/types/api.ts`)
126
+ - Configurações globais
127
+ - Arquivos de definição compartilhados
123
128
 
124
- Para desenvolver ou modificar o código:
129
+ ### Ciclo de Vida de um Claim
125
130
 
126
- ```bash
127
- git clone https://github.com/justmpm/comunicate.git
128
- cd comunicate
129
- npm install
130
- npm run build
131
+ ```
132
+ 1. Agente tenta editar arquivo fora do domínio
133
+ 2. can_edit_file retorna erro
134
+ 3. Agente faz claim_file
135
+ 4. Arquivo é reservado por X minutos
136
+ 5. Agente edita o arquivo
137
+ 6. Agente libera com release_file (ou deixa expirar)
131
138
  ```
132
139
 
133
- Configure apontando para o arquivo local:
140
+ ### Regras Importantes
134
141
 
135
- ```json
136
- {
137
- "mcpServers": {
138
- "@justmpm/comunicate": {
139
- "command": "node",
140
- "args": ["C:/caminho/completo/para/comunicate/dist/mcp-server.js"],
141
- "env": {
142
- "COMUNICATE_ADMIN_TOKEN": "seu-token-aqui"
143
- }
144
- }
145
- }
146
- }
147
- ```
142
+ | Regra | Descrição |
143
+ |-------|-----------|
144
+ | Exclusividade | Apenas um claim por arquivo |
145
+ | Expiração | Claims expiram automaticamente |
146
+ | Renovação | Só pode renovar quando faltarem < 5 min |
147
+ | Liberação | Opcional mas recomendada |
148
148
 
149
149
  ---
150
150
 
151
- ## Configuração
151
+ ## Fluxos de Trabalho
152
152
 
153
- ### 1. Gerar Token de Admin
153
+ ### Fluxo 1: Setup Inicial (Admin)
154
154
 
155
- Se não tiver um token, gere um:
155
+ ```
156
+ 1. Gerar token admin (32 caracteres hex)
157
+ 2. Configurar no mcp.json do Claude Desktop
158
+ 3. Criar agentes com create_agent
159
+ 4. Distribuir tokens para cada agente
160
+ ```
156
161
 
157
- ```powershell
158
- # PowerShell (32 caracteres hex)
159
- -join ((48..57) + (97..102) | Get-Random -Count 32 | ForEach-Object { [char]$_ })
162
+ ### Fluxo 2: Comunicação entre Agentes
160
163
 
161
- # Ou via CLI (se instalado globalmente)
162
- comunicate generate-token
163
164
  ```
165
+ Agente A (Backend) Agente B (Frontend)
166
+ │ │
167
+ │ 1. Envia mensagem │
168
+ ├────────────────────────────────────────>│
169
+ │ send_agent_message │
170
+ │ (tokenA → "frontend") │
171
+ │ │
172
+ │ 2. Lê inbox
173
+ │<────────────────────────────────────────┤
174
+ │ │
175
+ │ get_agent_messages
176
+ │ (tokenB)
177
+ ```
178
+
179
+ ### Fluxo 3: Edição de Arquivos
164
180
 
165
- ### 2. Configurar no Claude Desktop
181
+ ```
182
+ Agente precisa editar src/types/api.ts:
166
183
 
167
- Edite `%APPDATA%\Claude\settings.json` com uma das opções acima.
184
+ PASSO 1: Verificar permissão
185
+ can_edit_file(token, "src/types/api.ts")
186
+ → Retorna: ❌ "File not in agent domains"
168
187
 
169
- > ⚠️ **IMPORTANTE**: Use barras normais (`/`) ou duplas barras invertidas (`\\`) nos caminhos Windows.
188
+ PASSO 2: Reservar arquivo
189
+ claim_file(token, "src/types/api.ts", 30, "Adicionando tipos")
190
+ → Retorna: ✅ "Reservado até 2026-02-08T23:30:00Z"
170
191
 
171
- ### 3. Reinicie o Claude Desktop
192
+ PASSO 3: Editar arquivo
193
+ [Edita o arquivo normalmente]
172
194
 
173
- Após configurar, feche e reabra o Claude Desktop.
195
+ PASSO 4: Liberar (opcional mas recomendado)
196
+ release_file(token, "src/types/api.ts")
197
+ → Retorna: ✅ "Arquivo liberado"
198
+ ```
199
+
200
+ ### Fluxo 4: Renovação de Claim
201
+
202
+ ```
203
+ Situação: Edição está demorando mais que o previsto
204
+
205
+ 1. Verificar tempo restante
206
+ get_agent_claims(token)
207
+ → "src/types/api.ts expira em 3 minutos"
208
+
209
+ 2. Renovar (só funciona se < 5 min)
210
+ renew_claim(token, "src/types/api.ts", 15)
211
+ → "Claim renovado até 2026-02-08T23:45:00Z"
212
+ ```
174
213
 
175
214
  ---
176
215
 
177
- ## Tools MCP
216
+ ## Todas as Tools
178
217
 
179
218
  ### Comunicação
180
219
 
181
- #### `send_agent_message`
220
+ #### send_agent_message
182
221
  Envia mensagem para outro agente.
183
222
 
223
+ **QUANDO USAR:**
224
+ - Notificar progresso de tarefa
225
+ - Solicitar ajuda
226
+ - Enviar atualizações
227
+
228
+ **PARÂMETROS:**
229
+ - `token`: Seu token de agente
230
+ - `recipientId`: ID do agente destino
231
+ - `message`: Conteúdo (max 4000 chars)
232
+ - `type`: text | assistance_request | task_update | notification
233
+ - `priority`: low | normal | high | urgent
234
+
235
+ **EXEMPLO:**
184
236
  ```json
185
237
  {
186
- "token": "token-do-agente",
238
+ "token": "a1b2c3d4e5f6789012345678abcdef00",
187
239
  "recipientId": "frontend",
188
- "message": "API pronta!",
240
+ "message": "API /users pronta!",
189
241
  "type": "task_update",
190
242
  "priority": "high"
191
243
  }
192
244
  ```
193
245
 
194
- **Tipos:** `text`, `assistance_request`, `task_update`, `notification`
195
- **Prioridades:** `low`, `normal`, `high`, `urgent`
196
-
197
246
  ---
198
247
 
199
- #### `get_agent_messages`
248
+ #### get_agent_messages
200
249
  Lê mensagens da inbox.
201
250
 
251
+ **QUANDO USAR:**
252
+ - Verificar novas mensagens
253
+ - Processar pendências
254
+
255
+ **PARÂMETROS:**
256
+ - `token`: Seu token
257
+ - `includeRead`: Incluir mensagens lidas (default: false)
258
+ - `markAsRead`: Marcar como lidas ao ler (default: true)
259
+ - `limit`: Máximo de mensagens (1-50, default: 10)
260
+
261
+ **EXEMPLO:**
202
262
  ```json
203
263
  {
204
- "token": "token-do-agente",
264
+ "token": "a1b2c3d4e5f6789012345678abcdef00",
205
265
  "includeRead": false,
206
266
  "markAsRead": true,
207
267
  "limit": 10
@@ -210,283 +270,220 @@ Lê mensagens da inbox.
210
270
 
211
271
  ---
212
272
 
213
- #### `get_unread_count`
214
- Retorna número de mensagens não lidas.
273
+ #### get_unread_count
274
+ Conta mensagens não lidas.
215
275
 
216
- ```json
217
- {
218
- "token": "token-do-agente"
219
- }
220
- ```
276
+ **QUANDO USAR:**
277
+ - Verificação rápida sem carregar conteúdo
278
+ - Polling ou notificações
221
279
 
222
280
  ---
223
281
 
224
- ### Claims (Reserva de Arquivos)
225
-
226
- #### `claim_file`
227
- Reserva arquivo fora do domínio para edição.
282
+ #### delete_message
283
+ Deleta mensagem específica.
228
284
 
229
- ```json
230
- {
231
- "token": "token-do-agente",
232
- "filePath": "src/types/api.ts",
233
- "durationMinutes": 30,
234
- "reason": "Adicionando tipos da API"
235
- }
236
- ```
285
+ **QUANDO USAR:**
286
+ - Remover mensagens irrelevantes
287
+ - Limpar spam
237
288
 
238
- > O claim expira automaticamente após o tempo definido.
289
+ **PARÂMETROS:**
290
+ - `token`: Seu token
291
+ - `messageId`: ID da mensagem (formato: msg_xxxxxxxxxxxxxxxx)
239
292
 
240
293
  ---
241
294
 
242
- #### `renew_claim`
243
- Renova um claim prestes a expirar (só funciona se faltarem < 5 min).
295
+ #### clear_read_messages
296
+ Remove todas as mensagens lidas.
244
297
 
245
- ```json
246
- {
247
- "token": "token-do-agente",
248
- "filePath": "src/types/api.ts",
249
- "additionalMinutes": 15
250
- }
251
- ```
298
+ **QUANDO USAR:**
299
+ - Manutenção periódica da inbox
300
+ - Limpar mensagens antigas
252
301
 
253
302
  ---
254
303
 
255
- #### `release_file`
256
- Libera um arquivo reservado antes do tempo.
257
-
258
- ```json
259
- {
260
- "token": "token-do-agente",
261
- "filePath": "src/types/api.ts"
262
- }
263
- ```
304
+ ### Claims (Reserva de Arquivos)
264
305
 
265
- ---
306
+ #### can_edit_file
307
+ **SEMPRE CHAME ESTA TOOL ANTES DE EDITAR QUALQUER ARQUIVO!**
266
308
 
267
- #### `can_edit_file`
268
- Verifica se pode editar um arquivo (domínio ou claim ativo).
309
+ Verifica se você pode editar um arquivo.
269
310
 
270
- ```json
271
- {
272
- "token": "token-do-agente",
273
- "filePath": "src/components/Button.tsx"
274
- }
275
- ```
311
+ **RESULTADOS:**
312
+ - ✅ "Você pode editar" → Arquivo no domínio ou tem claim ativo
313
+ - ❌ "File not in agent domains" → Use claim_file
314
+ - ❌ "File claimed by X" → Aguarde ou peça para liberar
276
315
 
277
316
  ---
278
317
 
279
- ### Administração (requer token de admin)
280
-
281
- #### `create_agent`
282
- Cria novo agente.
318
+ #### claim_file
319
+ Reserva arquivo fora do domínio.
283
320
 
284
- ```json
285
- {
286
- "adminToken": "token-admin",
287
- "agentId": "backend",
288
- "capabilities": ["api", "database", "auth"],
289
- "domains": ["src/api", "src/models"]
290
- }
291
- ```
321
+ **QUANDO USAR:**
322
+ - can_edit_file retornou erro de domínio
323
+ - Precisa editar arquivo compartilhado
292
324
 
293
- **Regras para agentId:**
294
- - Apenas letras minúsculas, números e hífens
295
- - Exemplos válidos: `backend`, `frontend-v2`, `test-runner`
325
+ **PARÂMETROS:**
326
+ - `token`: Seu token
327
+ - `filePath`: Caminho do arquivo
328
+ - `durationMinutes`: Tempo de reserva (1-60, default: 15)
329
+ - `reason`: Motivo da reserva (opcional)
296
330
 
297
331
  ---
298
332
 
299
- #### `list_agents`
300
- Lista todos os agentes registrados.
333
+ #### renew_claim
334
+ Renova claim prestes a expirar.
301
335
 
302
- ```json
303
- {
304
- "adminToken": "token-admin"
305
- }
306
- ```
336
+ **QUANDO USAR:**
337
+ - Quando faltarem < 5 minutos para expirar
338
+ - Edição está demorando mais que o previsto
339
+
340
+ **RESTRICAO:**
341
+ Só funciona se faltarem menos de 5 minutos!
307
342
 
308
343
  ---
309
344
 
310
- #### `get_inactive_agents`
311
- Lista agentes sem heartbeat (possivelmente "mortos").
345
+ #### release_file
346
+ Libera arquivo reservado antes do tempo.
312
347
 
313
- ```json
314
- {
315
- "adminToken": "token-admin",
316
- "timeoutMinutes": 5
317
- }
318
- ```
348
+ **QUANDO USAR:**
349
+ - Terminou de editar antes da expiração
350
+ - Boas práticas: libere assim que terminar
319
351
 
320
352
  ---
321
353
 
322
- ## Fluxos de Trabalho
354
+ #### get_agent_claims
355
+ Lista seus claims ativos.
323
356
 
324
- ### Fluxo 1: Criar Agente e Enviar Mensagem
357
+ **QUANDO USAR:**
358
+ - Verificar quais arquivos você reservou
359
+ - Ver quando claims expiram
325
360
 
326
- ```
327
- 1. Admin executa: create_agent
328
- → Recebe token único do agente
329
-
330
- 2. Agente salva seu token
331
-
332
- 3. Agente A executa: send_agent_message
333
- → Mensagem vai para inbox-B.json
334
-
335
- 4. Agente B executa: get_agent_messages
336
- → Lê e processa mensagens
337
- ```
338
-
339
- ### Fluxo 2: Coordenação com Claims
340
-
341
- ```
342
- Backend (domínio: src/models):
343
- ✅ Pode editar: src/models/user.ts
344
- ❌ Não pode: src/components/Button.tsx
361
+ ---
345
362
 
346
- Frontend (domínio: src/components):
347
- ✅ Pode editar: src/components/Button.tsx
348
- ❌ Não pode: src/models/user.ts
349
-
350
- Quando Frontend precisa editar src/types/api.ts:
351
- 1. Executa: can_edit_file → false
352
- 2. Executa: claim_file → success
353
- 3. Executa: can_edit_file → true
354
- 4. [edita o arquivo]
355
- 5. Executa: release_file (ou espera expirar)
356
- ```
363
+ ### Administração (requer token de admin)
357
364
 
358
- ### Fluxo 3: Monitoramento de Saúde
365
+ #### create_agent
366
+ Cria novo agente.
359
367
 
360
- ```
361
- Cada agente deve:
362
- - Chamar qualquer tool periodicamente (atualiza lastSeen)
363
- - Ou chamar updateAgentHeartbeat() via código
368
+ **IMPORTANTE:**
369
+ Guarde o token retornado! Não será mostrado novamente.
364
370
 
365
- Admin pode executar:
366
- get_inactive_agents lista agentes "zumbis"
367
- ```
371
+ **PARÂMETROS:**
372
+ - `adminToken`: Token de admin
373
+ - `agentId`: ID único (ex: backend, frontend)
374
+ - `capabilities`: ["api", "auth"]
375
+ - `domains`: ["src/api", "src/models"]
368
376
 
369
377
  ---
370
378
 
371
- ## CLI
379
+ #### list_agents
380
+ Lista todos os agentes.
372
381
 
373
- Se instalou globalmente, use a CLI para administração:
382
+ **QUANDO USAR:**
383
+ - Ver configurações
384
+ - Descobrir agentIds para mensagens
374
385
 
375
- ```bash
376
- # Listar agentes
377
- comunicate list-agents
386
+ ---
378
387
 
379
- # Criar agente
380
- comunicate create-agent backend
388
+ #### get_inactive_agents
389
+ Lista agentes sem heartbeat.
381
390
 
382
- # Listar claims
383
- comunicate list-claims
391
+ **QUANDO USAR:**
392
+ - Monitorar saúde do sistema
393
+ - Detectar agentes travados
384
394
 
385
- # Verificar saúde
386
- comunicate check-health 5
395
+ ---
387
396
 
388
- # Gerar token aleatório
389
- comunicate generate-token
397
+ #### get_all_claims
398
+ Lista todos os claims do sistema.
390
399
 
391
- # Ajuda
392
- comunicate help
393
- ```
400
+ **QUANDO USAR:**
401
+ - Monitorar uso do sistema
402
+ - Identificar gargalos
394
403
 
395
404
  ---
396
405
 
397
- ## Exemplos
406
+ ## Exemplos Completos
398
407
 
399
408
  ### Exemplo 1: Backend notifica Frontend
400
409
 
401
410
  ```typescript
402
411
  // Backend envia atualização
403
- const result = sendMessage(
404
- BACKEND_TOKEN,
405
- 'frontend',
406
- 'API /users pronta! Contrato: { id, name, email }',
407
- { type: 'task_update', priority: 'normal' }
408
- );
412
+ const result = send_agent_message({
413
+ token: BACKEND_TOKEN,
414
+ recipientId: "frontend",
415
+ message: "API /users pronta! Contrato: { id, name, email }",
416
+ type: "task_update",
417
+ priority: "normal"
418
+ });
409
419
  ```
410
420
 
411
- ### Exemplo 2: Frontend reserva arquivo
421
+ ### Exemplo 2: Frontend reserva arquivo compartilhado
412
422
 
413
423
  ```typescript
414
- // Verifica se pode editar
415
- const check = canEditFile('frontend', 'src/types/api.ts');
424
+ // 1. Verifica se pode editar
425
+ const check = can_edit_file({
426
+ token: FRONTEND_TOKEN,
427
+ filePath: "src/types/api.ts"
428
+ });
429
+
416
430
  if (!check.allowed) {
417
- // Reserva arquivo
418
- const claim = claimFile(
419
- 'frontend',
420
- 'src/types/api.ts',
421
- 30,
422
- 'Adicionando tipos'
423
- );
431
+ // 2. Reserva arquivo
432
+ const claim = claim_file({
433
+ token: FRONTEND_TOKEN,
434
+ filePath: "src/types/api.ts",
435
+ durationMinutes: 30,
436
+ reason: "Adicionando tipos da API"
437
+ });
424
438
 
425
439
  if (claim.success) {
426
- // Agora pode editar
427
- editFile('src/types/api.ts', ...);
440
+ // 3. Edita o arquivo
441
+ editFile("src/types/api.ts", ...);
428
442
 
429
- // Libera quando terminar
430
- releaseFile('frontend', 'src/types/api.ts');
443
+ // 4. Libera quando terminar
444
+ release_file({
445
+ token: FRONTEND_TOKEN,
446
+ filePath: "src/types/api.ts"
447
+ });
431
448
  }
432
449
  }
433
450
  ```
434
451
 
435
- ### Exemplo 3: Notificações em tempo real
452
+ ### Exemplo 3: Agente verifica e processa mensagens
436
453
 
437
454
  ```typescript
438
- import { startNotificationListener } from './comunicate/core/notifications';
439
-
440
- const listener = startNotificationListener('frontend', {
441
- onMessage: (msg) => {
442
- console.log(`Nova mensagem de ${msg.senderId}: ${msg.content}`);
455
+ // Verifica se mensagens novas
456
+ const unread = get_unread_count({ token: AGENT_TOKEN });
457
+
458
+ if (unread.count > 0) {
459
+ // e processa mensagens
460
+ const messages = get_agent_messages({
461
+ token: AGENT_TOKEN,
462
+ markAsRead: true,
463
+ limit: 10
464
+ });
465
+
466
+ for (const msg of messages) {
467
+ processMessage(msg);
443
468
  }
444
- });
445
-
446
- // ... quando quiser parar:
447
- listener.stop();
469
+ }
448
470
  ```
449
471
 
450
472
  ---
451
473
 
452
- ## Segurança
453
-
454
- ### Timing-Safe Comparison
455
-
456
- Todos os tokens são comparados usando `crypto.timingSafeEqual()` para prevenir timing attacks.
457
-
458
- ### Token de Admin
459
-
460
- - Armazene em variável de ambiente `COMUNICATE_ADMIN_TOKEN`
461
- - Nunca commite tokens em repositório
462
- - Use tokens longos e aleatórios (32+ caracteres hex)
463
-
464
- ### Claims
465
-
466
- - Claims expiram automaticamente
467
- - Só um agente pode ter claim de um arquivo por vez
468
- - Sequence number previne race conditions
469
-
470
- ### Domínios
471
-
472
- - Defina domínios restritos ao criar agente
473
- - Agente só edita arquivos dentro de seus domínios sem claim
474
-
475
- ---
476
-
477
474
  ## Troubleshooting
478
475
 
479
476
  ### "Token inválido"
480
477
 
481
478
  - Verifique se o token está completo (32 caracteres hex)
482
- - Confirme que o agente está ativo (`list_agents`)
479
+ - Confirme que o agente está ativo (list_agents)
483
480
  - Verifique se há espaços extras
484
481
 
485
482
  ### "File claimed by X"
486
483
 
487
484
  - Outro agente já reservou o arquivo
488
- - Espere expirar ou peça para liberar
489
- - Use `get_all_claims` (admin) para verificar
485
+ - Espere expirar ou peça para liberar via mensagem
486
+ - Use get_all_claims (admin) para verificar
490
487
 
491
488
  ### Mensagens não aparecem
492
489
 
@@ -494,77 +491,88 @@ Todos os tokens são comparados usando `crypto.timingSafeEqual()` para prevenir
494
491
  - Confirme o `recipientId` no envio
495
492
  - Verifique o arquivo inbox-*.json manualmente
496
493
 
497
- ### File watcher não funciona
494
+ ### "File not in agent domains"
498
495
 
499
- - O sistema tem fallback automático para polling
500
- - No Windows, polling é mais confiável que file watcher
501
- - Considere usar `startPolling()` explicitamente
496
+ - Arquivo está fora dos domínios definidos no create_agent
497
+ - Use claim_file para reservar o arquivo
502
498
 
503
499
  ### Permissão negada ao escrever JSON
504
500
 
505
501
  - Verifique permissões da pasta `.comunicate/`
506
- - Execute como administrador se necessário
507
502
  - Verifique se outro processo está usando os arquivos
508
503
 
509
- ### "command not found: comunicate"
504
+ ---
505
+
506
+ ## Segurança e Permissões
507
+
508
+ ### Modelo de Segurança
509
+
510
+ O sistema tem dois níveis de acesso:
510
511
 
511
- Se instalou globalmente mas o comando não é encontrado:
512
+ #### 1. Administrador
513
+ - Tem acesso ao **adminToken** configurado no sistema
514
+ - Pode criar, listar e monitorar agentes
515
+ - Pode ver todos os claims do sistema
516
+ - Não participa diretamente da comunicação entre agentes
512
517
 
513
- ```powershell
514
- # Verifique se o npm global está no PATH
515
- npm bin -g
518
+ #### 2. Agentes
519
+ - Têm apenas seu **próprio token** (recebido no create_agent)
520
+ - Podem se comunicar entre si via mensagens
521
+ - Podem reservar arquivos fora de seus domínios
522
+ - **NÃO** podem usar tools de admin (create_agent, list_agents, etc.)
516
523
 
517
- # No Windows, pode precisar adicionar ao PATH:
518
- # %APPDATA%\npm
524
+ ### Validação de Acesso
525
+
526
+ Toda tool de admin valida o adminToken:
527
+ ```
528
+ Usuário chama: list_agents(adminToken="abc123...")
529
+
530
+ Sistema compara: adminToken == COMUNICATE_ADMIN_TOKEN?
531
+
532
+ Se SIM → executa a operação
533
+ Se NÃO → retorna "Token de admin inválido"
519
534
  ```
520
535
 
536
+ Isso garante que apenas quem tem o token de admin configurado no sistema possa gerenciar agentes.
537
+
538
+ ### Por que isso é importante?
539
+
540
+ Imagine um projeto com múltiplos agentes trabalhando:
541
+ - Se qualquer agente pudesse criar outros, o sistema ficaria caótico
542
+ - O adminToken garante controle centralizado sobre quem pode participar
543
+ - Cada agente opera apenas dentro de suas permissões
544
+
521
545
  ---
522
546
 
523
547
  ## Dicas
524
548
 
525
- 1. **Organize domínios por responsabilidade**
526
- - `backend`: `src/api`, `src/models`
527
- - `frontend`: `src/components`, `src/hooks`
528
- - `shared`: `src/types`, `src/utils` (use claims)
549
+ 1. **SEMPRE use can_edit_file antes de editar**
550
+ - Previne erros de permissão
551
+ - Identifica necessidade de claim
529
552
 
530
553
  2. **Renove claims antes de expirar**
531
- - Se uma tarefa demorar mais que o previsto
532
- - Renove quando faltarem < 5 minutos
554
+ - Se faltarem < 5 minutos
555
+ - Evita interrupção no meio da edição
533
556
 
534
557
  3. **Use prioridades adequadamente**
535
- - `urgent`: Bugs críticos, system down
536
- - `high`: Features importantes, deadlines
558
+ - `urgent`: Bugs críticos
559
+ - `high`: Features importantes
537
560
  - `normal`: Comunicação rotineira
538
- - `low`: Informações, updates
561
+ - `low`: Informações
539
562
 
540
563
  4. **Limpe mensagens lidas periodicamente**
541
- - Use `clear_read_messages` para manter inbox limpa
542
- - Mensagens antigas são arquivadas automaticamente
543
-
544
- ---
545
-
546
- ## Referência Rápida
547
-
548
- ### Criar Agente
549
- ```json
550
- {"adminToken": "...", "agentId": "backend", "capabilities": ["api"], "domains": ["src/api"]}
551
- ```
564
+ - Use clear_read_messages
565
+ - Mantém inbox performática
552
566
 
553
- ### Enviar Mensagem
554
- ```json
555
- {"token": "...", "recipientId": "frontend", "message": "...", "type": "task_update", "priority": "normal"}
556
- ```
567
+ 5. **Libere claims ao terminar**
568
+ - Boas práticas de convivência
569
+ - Permite outros agentes trabalharem
557
570
 
558
- ### Reservar Arquivo
559
- ```json
560
- {"token": "...", "filePath": "src/types/api.ts", "durationMinutes": 30, "reason": "..."}
561
- ```
562
-
563
- ### Ler Mensagens
564
- ```json
565
- {"token": "...", "includeRead": false, "markAsRead": true, "limit": 10}
566
- ```
571
+ 6. **Proteja o adminToken**
572
+ - Apenas o administrador deve usá-lo
573
+ - Não compartilhe com agentes normais
574
+ - Configurado uma única vez no mcp.json
567
575
 
568
576
  ---
569
577
 
570
- **Versão 0.1.0** | Arquitetura File-Based | Otimizado para Windows
578
+ **Versão 0.1.4** | Arquitetura File-Based | Otimizado para Windows