@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.
Files changed (54) hide show
  1. package/AGENTS.md +518 -0
  2. package/CLAUDE.md +518 -0
  3. package/LICENSE +21 -0
  4. package/README.md +159 -0
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +117 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/comunicate/core/auth.d.ts +60 -0
  10. package/dist/comunicate/core/auth.d.ts.map +1 -0
  11. package/dist/comunicate/core/auth.js +150 -0
  12. package/dist/comunicate/core/auth.js.map +1 -0
  13. package/dist/comunicate/core/domains.d.ts +55 -0
  14. package/dist/comunicate/core/domains.d.ts.map +1 -0
  15. package/dist/comunicate/core/domains.js +157 -0
  16. package/dist/comunicate/core/domains.js.map +1 -0
  17. package/dist/comunicate/core/index.d.ts +9 -0
  18. package/dist/comunicate/core/index.d.ts.map +1 -0
  19. package/dist/comunicate/core/index.js +9 -0
  20. package/dist/comunicate/core/index.js.map +1 -0
  21. package/dist/comunicate/core/messaging.d.ts +50 -0
  22. package/dist/comunicate/core/messaging.d.ts.map +1 -0
  23. package/dist/comunicate/core/messaging.js +224 -0
  24. package/dist/comunicate/core/messaging.js.map +1 -0
  25. package/dist/comunicate/core/notifications.d.ts +26 -0
  26. package/dist/comunicate/core/notifications.d.ts.map +1 -0
  27. package/dist/comunicate/core/notifications.js +107 -0
  28. package/dist/comunicate/core/notifications.js.map +1 -0
  29. package/dist/comunicate/core/persistence.d.ts +28 -0
  30. package/dist/comunicate/core/persistence.d.ts.map +1 -0
  31. package/dist/comunicate/core/persistence.js +113 -0
  32. package/dist/comunicate/core/persistence.js.map +1 -0
  33. package/dist/comunicate/index.d.ts +11 -0
  34. package/dist/comunicate/index.d.ts.map +1 -0
  35. package/dist/comunicate/index.js +27 -0
  36. package/dist/comunicate/index.js.map +1 -0
  37. package/dist/comunicate/types/index.d.ts +5 -0
  38. package/dist/comunicate/types/index.d.ts.map +1 -0
  39. package/dist/comunicate/types/index.js +5 -0
  40. package/dist/comunicate/types/index.js.map +1 -0
  41. package/dist/comunicate/types/message.d.ts +21 -0
  42. package/dist/comunicate/types/message.d.ts.map +1 -0
  43. package/dist/comunicate/types/message.js +5 -0
  44. package/dist/comunicate/types/message.js.map +1 -0
  45. package/dist/mcp-server.d.ts +7 -0
  46. package/dist/mcp-server.d.ts.map +1 -0
  47. package/dist/mcp-server.js +314 -0
  48. package/dist/mcp-server.js.map +1 -0
  49. package/dist/mcp-tools/agent-communication.d.ts +342 -0
  50. package/dist/mcp-tools/agent-communication.d.ts.map +1 -0
  51. package/dist/mcp-tools/agent-communication.js +378 -0
  52. package/dist/mcp-tools/agent-communication.js.map +1 -0
  53. package/mcp-config.json +15 -0
  54. package/package.json +44 -0
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Sistema de mensagens entre agentes
3
+ */
4
+ import { resolve } from 'path';
5
+ import { randomBytes } from 'crypto';
6
+ import { createGzip } from 'zlib';
7
+ import { pipeline } from 'stream/promises';
8
+ import { createReadStream, createWriteStream } from 'fs';
9
+ import { getAgentId, updateAgentHeartbeat, readRegistry } from './auth.js';
10
+ import { writeJSON, readJSON, ensureDir } from './persistence.js';
11
+ import { Readable } from 'stream';
12
+ const MESSAGES_DIR = resolve(process.cwd(), '.comunicate', 'messages');
13
+ const ARCHIVE_DIR = resolve(MESSAGES_DIR, 'archive');
14
+ const MAX_MESSAGES = 100; // Limite antes de arquivar
15
+ /**
16
+ * Gera ID único de mensagem
17
+ */
18
+ function generateMessageId() {
19
+ return `msg_${randomBytes(8).toString('hex')}`;
20
+ }
21
+ /**
22
+ * Arquiva mensagens antigas para arquivo compactado
23
+ */
24
+ async function archiveOldMessages(agentId, messages) {
25
+ if (messages.length < MAX_MESSAGES)
26
+ return;
27
+ ensureDir(ARCHIVE_DIR);
28
+ const messagesToArchive = messages.slice(MAX_MESSAGES);
29
+ const archiveDate = new Date().toISOString().split('T')[0];
30
+ const archivePath = resolve(ARCHIVE_DIR, `inbox-${agentId}-${archiveDate}.json.gz`);
31
+ // Lê arquivo existente se houver
32
+ let existingArchived = [];
33
+ try {
34
+ const gunzip = await import('zlib').then(z => z.createGunzip());
35
+ const data = await new Promise((resolve, reject) => {
36
+ const chunks = [];
37
+ createReadStream(archivePath)
38
+ .pipe(gunzip)
39
+ .on('data', (chunk) => chunks.push(chunk))
40
+ .on('end', () => resolve(Buffer.concat(chunks)))
41
+ .on('error', reject);
42
+ });
43
+ existingArchived = JSON.parse(data.toString());
44
+ }
45
+ catch {
46
+ // Arquivo não existe ainda
47
+ }
48
+ // Combina e salva
49
+ const allArchived = [...existingArchived, ...messagesToArchive];
50
+ const gzip = createGzip();
51
+ const source = Buffer.from(JSON.stringify(allArchived, null, 2));
52
+ const destination = createWriteStream(archivePath);
53
+ await pipeline(Readable.from(source), gzip, destination);
54
+ }
55
+ /**
56
+ * Envia mensagem para outro agente
57
+ */
58
+ export function sendMessage(senderToken, recipientId, content, options = {}) {
59
+ const senderId = getAgentId(senderToken);
60
+ if (!senderId) {
61
+ return { success: false, error: 'Invalid sender token' };
62
+ }
63
+ // Atualiza heartbeat do sender
64
+ updateAgentHeartbeat(senderId);
65
+ // Verifica auto-comunicação
66
+ if (senderId === recipientId) {
67
+ return { success: false, error: 'Self-communication not allowed' };
68
+ }
69
+ // Verifica se destinatário existe
70
+ const registry = readRegistry();
71
+ const recipient = registry.agents.find((a) => a.id === recipientId);
72
+ if (!recipient) {
73
+ return { success: false, error: `Agent ${recipientId} not found` };
74
+ }
75
+ if (recipient.status !== 'active') {
76
+ return { success: false, error: `Agent ${recipientId} is not active` };
77
+ }
78
+ // Cria mensagem
79
+ const message = {
80
+ id: generateMessageId(),
81
+ senderId,
82
+ content,
83
+ type: options.type || 'text',
84
+ priority: options.priority || 'normal',
85
+ timestamp: new Date().toISOString(),
86
+ read: false,
87
+ delivered: false
88
+ };
89
+ // Escreve na inbox do destinatário
90
+ const inboxPath = resolve(MESSAGES_DIR, `inbox-${recipientId}.json`);
91
+ try {
92
+ const inbox = readJSON(inboxPath, {
93
+ agentId: recipientId,
94
+ updatedAt: new Date().toISOString(),
95
+ messages: []
96
+ });
97
+ inbox.messages.unshift(message); // Adiciona no início (mais recente)
98
+ inbox.updatedAt = new Date().toISOString();
99
+ // Arquiva mensagens antigas se necessário
100
+ if (inbox.messages.length > MAX_MESSAGES) {
101
+ archiveOldMessages(recipientId, inbox.messages).catch(console.error);
102
+ inbox.messages = inbox.messages.slice(0, MAX_MESSAGES);
103
+ }
104
+ writeJSON(inboxPath, inbox);
105
+ return { success: true };
106
+ }
107
+ catch (error) {
108
+ return { success: false, error: `Failed to write message: ${error}` };
109
+ }
110
+ }
111
+ /**
112
+ * Lê mensagens da inbox do agente
113
+ */
114
+ export function getMessages(token, options = {}) {
115
+ const agentId = getAgentId(token);
116
+ if (!agentId) {
117
+ return { success: false, error: 'Invalid token' };
118
+ }
119
+ // Atualiza heartbeat
120
+ updateAgentHeartbeat(agentId);
121
+ const inboxPath = resolve(MESSAGES_DIR, `inbox-${agentId}.json`);
122
+ try {
123
+ const inbox = readJSON(inboxPath, {
124
+ agentId,
125
+ updatedAt: new Date().toISOString(),
126
+ messages: []
127
+ });
128
+ let messages = inbox.messages;
129
+ // Filtra não lidas se solicitado
130
+ if (!options.includeRead) {
131
+ messages = messages.filter(m => !m.read);
132
+ }
133
+ // Aplica limite
134
+ const limit = options.limit || 20;
135
+ messages = messages.slice(0, limit);
136
+ // Marca como lidas se solicitado
137
+ if (options.markAsRead && messages.length > 0) {
138
+ const readIds = new Set(messages.map(m => m.id));
139
+ inbox.messages = inbox.messages.map(m => readIds.has(m.id) ? { ...m, read: true } : m);
140
+ writeJSON(inboxPath, inbox);
141
+ }
142
+ return { success: true, messages };
143
+ }
144
+ catch (error) {
145
+ return { success: false, error: `Failed to read messages: ${error}` };
146
+ }
147
+ }
148
+ /**
149
+ * Obtém número de mensagens não lidas
150
+ */
151
+ export function getUnreadCount(token) {
152
+ const agentId = getAgentId(token);
153
+ if (!agentId) {
154
+ return { success: false, error: 'Invalid token' };
155
+ }
156
+ const inboxPath = resolve(MESSAGES_DIR, `inbox-${agentId}.json`);
157
+ try {
158
+ const inbox = readJSON(inboxPath, {
159
+ agentId,
160
+ updatedAt: new Date().toISOString(),
161
+ messages: []
162
+ });
163
+ const count = inbox.messages.filter(m => !m.read).length;
164
+ return { success: true, count };
165
+ }
166
+ catch (error) {
167
+ return { success: false, error: `Failed to read messages: ${error}` };
168
+ }
169
+ }
170
+ /**
171
+ * Deleta mensagem específica
172
+ */
173
+ export function deleteMessage(token, messageId) {
174
+ const agentId = getAgentId(token);
175
+ if (!agentId) {
176
+ return { success: false, error: 'Invalid token' };
177
+ }
178
+ const inboxPath = resolve(MESSAGES_DIR, `inbox-${agentId}.json`);
179
+ try {
180
+ const inbox = readJSON(inboxPath, {
181
+ agentId,
182
+ updatedAt: new Date().toISOString(),
183
+ messages: []
184
+ });
185
+ const originalLength = inbox.messages.length;
186
+ inbox.messages = inbox.messages.filter(m => m.id !== messageId);
187
+ if (inbox.messages.length === originalLength) {
188
+ return { success: false, error: 'Message not found' };
189
+ }
190
+ inbox.updatedAt = new Date().toISOString();
191
+ writeJSON(inboxPath, inbox);
192
+ return { success: true };
193
+ }
194
+ catch (error) {
195
+ return { success: false, error: `Failed to delete message: ${error}` };
196
+ }
197
+ }
198
+ /**
199
+ * Limpa todas as mensagens lidas
200
+ */
201
+ export function clearReadMessages(token) {
202
+ const agentId = getAgentId(token);
203
+ if (!agentId) {
204
+ return { success: false, error: 'Invalid token' };
205
+ }
206
+ const inboxPath = resolve(MESSAGES_DIR, `inbox-${agentId}.json`);
207
+ try {
208
+ const inbox = readJSON(inboxPath, {
209
+ agentId,
210
+ updatedAt: new Date().toISOString(),
211
+ messages: []
212
+ });
213
+ const originalLength = inbox.messages.length;
214
+ inbox.messages = inbox.messages.filter(m => !m.read);
215
+ const deletedCount = originalLength - inbox.messages.length;
216
+ inbox.updatedAt = new Date().toISOString();
217
+ writeJSON(inboxPath, inbox);
218
+ return { success: true, deletedCount };
219
+ }
220
+ catch (error) {
221
+ return { success: false, error: `Failed to clear messages: ${error}` };
222
+ }
223
+ }
224
+ //# sourceMappingURL=messaging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/comunicate/core/messaging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Sistema de notificações via file watcher
3
+ * Otimizado para Windows
4
+ */
5
+ import type { Message } from '../types/message.js';
6
+ export interface NotificationHandler {
7
+ onMessage: (message: Message) => void;
8
+ onError?: (error: Error) => void;
9
+ }
10
+ export interface NotificationListener {
11
+ stop: () => void;
12
+ }
13
+ /**
14
+ * Inicia listener de notificações para um agente
15
+ * Otimizado para Windows (usando polling interno se necessário)
16
+ */
17
+ export declare function startNotificationListener(agentId: string, handler: NotificationHandler): NotificationListener;
18
+ /**
19
+ * Inicia polling simples de mensagens
20
+ * Alternativa quando file watcher não é necessário
21
+ */
22
+ export declare function startPolling(agentId: string, onMessage: (message: Message) => void, options?: {
23
+ intervalMs?: number;
24
+ onlyUnread?: boolean;
25
+ }): NotificationListener;
26
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../src/comunicate/core/notifications.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAS,MAAM,qBAAqB,CAAC;AAI1D,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC3B,oBAAoB,CAkEtB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EACrC,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL,oBAAoB,CA+BtB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Sistema de notificações via file watcher
3
+ * Otimizado para Windows
4
+ */
5
+ import { watch, readFileSync, existsSync } from 'fs';
6
+ import { resolve } from 'path';
7
+ const MESSAGES_DIR = resolve(process.cwd(), '.comunicate', 'messages');
8
+ /**
9
+ * Inicia listener de notificações para um agente
10
+ * Otimizado para Windows (usando polling interno se necessário)
11
+ */
12
+ export function startNotificationListener(agentId, handler) {
13
+ const inboxPath = resolve(MESSAGES_DIR, `inbox-${agentId}.json`);
14
+ let lastModified = 0;
15
+ const processedIds = new Set();
16
+ let fallbackInterval = null;
17
+ let watcher = null;
18
+ // Lê estado inicial
19
+ try {
20
+ if (existsSync(inboxPath)) {
21
+ const inbox = JSON.parse(readFileSync(inboxPath, 'utf-8'));
22
+ inbox.messages.forEach(m => processedIds.add(m.id));
23
+ lastModified = new Date(inbox.updatedAt).getTime();
24
+ }
25
+ }
26
+ catch {
27
+ // Inbox ainda não existe
28
+ }
29
+ // Função para processar novas mensagens
30
+ const processMessages = () => {
31
+ try {
32
+ if (!existsSync(inboxPath))
33
+ return;
34
+ const inbox = JSON.parse(readFileSync(inboxPath, 'utf-8'));
35
+ const newModified = new Date(inbox.updatedAt).getTime();
36
+ // Ignora se não mudou desde última leitura
37
+ if (newModified <= lastModified)
38
+ return;
39
+ lastModified = newModified;
40
+ // Processa mensagens novas
41
+ for (const message of inbox.messages) {
42
+ if (!processedIds.has(message.id)) {
43
+ processedIds.add(message.id);
44
+ handler.onMessage(message);
45
+ }
46
+ }
47
+ }
48
+ catch (error) {
49
+ handler.onError?.(error);
50
+ }
51
+ };
52
+ // Configura watcher (Windows pode precisar de fallback)
53
+ try {
54
+ watcher = watch(inboxPath, { persistent: false }, (eventType) => {
55
+ if (eventType === 'change') {
56
+ processMessages();
57
+ }
58
+ });
59
+ // Fallback: se watcher falhar silenciosamente, usa polling
60
+ fallbackInterval = setInterval(processMessages, 2000);
61
+ }
62
+ catch {
63
+ // Se não conseguir criar watcher, usa só polling
64
+ fallbackInterval = setInterval(processMessages, 1000);
65
+ }
66
+ return {
67
+ stop: () => {
68
+ watcher?.close();
69
+ if (fallbackInterval)
70
+ clearInterval(fallbackInterval);
71
+ }
72
+ };
73
+ }
74
+ /**
75
+ * Inicia polling simples de mensagens
76
+ * Alternativa quando file watcher não é necessário
77
+ */
78
+ export function startPolling(agentId, onMessage, options = {}) {
79
+ const intervalMs = options.intervalMs || 5000;
80
+ const processedIds = new Set();
81
+ const checkMessages = () => {
82
+ try {
83
+ const inboxPath = resolve(MESSAGES_DIR, `inbox-${agentId}.json`);
84
+ if (!existsSync(inboxPath))
85
+ return;
86
+ const inbox = JSON.parse(readFileSync(inboxPath, 'utf-8'));
87
+ for (const message of inbox.messages) {
88
+ if (options.onlyUnread && message.read)
89
+ continue;
90
+ if (processedIds.has(message.id))
91
+ continue;
92
+ processedIds.add(message.id);
93
+ onMessage(message);
94
+ }
95
+ }
96
+ catch {
97
+ // Ignora erros de leitura
98
+ }
99
+ };
100
+ const interval = setInterval(checkMessages, intervalMs);
101
+ // Checa imediatamente na primeira vez
102
+ checkMessages();
103
+ return {
104
+ stop: () => clearInterval(interval)
105
+ };
106
+ }
107
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../../src/comunicate/core/notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Utilitários de persistência JSON com retry e backup
3
+ */
4
+ /**
5
+ * Garante que diretório existe
6
+ */
7
+ export declare function ensureDir(dirPath: string): void;
8
+ /**
9
+ * Lê JSON com tratamento de erro
10
+ */
11
+ export declare function readJSON<T>(path: string, defaultValue: T): T;
12
+ /**
13
+ * Escreve JSON atomicamente (evita corrupção) com retry
14
+ */
15
+ export declare function writeJSON<T>(path: string, data: T, attempt?: number): void;
16
+ /**
17
+ * Atualiza JSON parcialmente
18
+ */
19
+ export declare function updateJSON<T extends Record<string, any>>(path: string, updater: (data: T) => T, defaultValue: T): T;
20
+ /**
21
+ * Backup de arquivo antes de modificação
22
+ */
23
+ export declare function backupFile(path: string): string | null;
24
+ /**
25
+ * Restaura arquivo do backup
26
+ */
27
+ export declare function restoreFromBackup(backupPath: string, originalPath: string): boolean;
28
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/comunicate/core/persistence.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6BH;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAO5D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,MAAU,GAAG,IAAI,CA8B7E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,EACvB,YAAY,EAAE,CAAC,GACd,CAAC,CAKH;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAWnF"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Utilitários de persistência JSON com retry e backup
3
+ */
4
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, renameSync, unlinkSync } from 'fs';
5
+ import { dirname } from 'path';
6
+ import { randomBytes } from 'crypto';
7
+ /**
8
+ * Configuração de retry
9
+ */
10
+ const RETRY_CONFIG = {
11
+ maxRetries: 3,
12
+ delayMs: 100,
13
+ backoffMultiplier: 2
14
+ };
15
+ /**
16
+ * Delay assíncrono
17
+ */
18
+ function delay(ms) {
19
+ return new Promise(resolve => setTimeout(resolve, ms));
20
+ }
21
+ /**
22
+ * Garante que diretório existe
23
+ */
24
+ export function ensureDir(dirPath) {
25
+ if (!existsSync(dirPath)) {
26
+ mkdirSync(dirPath, { recursive: true });
27
+ }
28
+ }
29
+ /**
30
+ * Lê JSON com tratamento de erro
31
+ */
32
+ export function readJSON(path, defaultValue) {
33
+ try {
34
+ const data = readFileSync(path, 'utf-8');
35
+ return JSON.parse(data);
36
+ }
37
+ catch {
38
+ return defaultValue;
39
+ }
40
+ }
41
+ /**
42
+ * Escreve JSON atomicamente (evita corrupção) com retry
43
+ */
44
+ export function writeJSON(path, data, attempt = 1) {
45
+ ensureDir(dirname(path));
46
+ const tempPath = `${path}.tmp-${randomBytes(4).toString('hex')}`;
47
+ const json = JSON.stringify(data, null, 2);
48
+ try {
49
+ writeFileSync(tempPath, json, 'utf-8');
50
+ renameSync(tempPath, path);
51
+ }
52
+ catch (error) {
53
+ // Limpa arquivo temporário se existir
54
+ try {
55
+ if (existsSync(tempPath)) {
56
+ unlinkSync(tempPath);
57
+ }
58
+ }
59
+ catch {
60
+ // Ignora erro de cleanup
61
+ }
62
+ // Retry com backoff
63
+ if (attempt < RETRY_CONFIG.maxRetries) {
64
+ const retryDelay = RETRY_CONFIG.delayMs * Math.pow(RETRY_CONFIG.backoffMultiplier, attempt - 1);
65
+ delay(retryDelay).then(() => {
66
+ writeJSON(path, data, attempt + 1);
67
+ });
68
+ return;
69
+ }
70
+ throw error;
71
+ }
72
+ }
73
+ /**
74
+ * Atualiza JSON parcialmente
75
+ */
76
+ export function updateJSON(path, updater, defaultValue) {
77
+ const data = readJSON(path, defaultValue);
78
+ const updated = updater(data);
79
+ writeJSON(path, updated);
80
+ return updated;
81
+ }
82
+ /**
83
+ * Backup de arquivo antes de modificação
84
+ */
85
+ export function backupFile(path) {
86
+ try {
87
+ if (!existsSync(path))
88
+ return null;
89
+ const backupPath = `${path}.backup-${Date.now()}`;
90
+ const data = readFileSync(path, 'utf-8');
91
+ writeFileSync(backupPath, data, 'utf-8');
92
+ return backupPath;
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ }
98
+ /**
99
+ * Restaura arquivo do backup
100
+ */
101
+ export function restoreFromBackup(backupPath, originalPath) {
102
+ try {
103
+ if (!existsSync(backupPath))
104
+ return false;
105
+ const data = readFileSync(backupPath, 'utf-8');
106
+ writeFileSync(originalPath, data, 'utf-8');
107
+ return true;
108
+ }
109
+ catch {
110
+ return false;
111
+ }
112
+ }
113
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/comunicate/core/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sistema de Comunicação Entre Agentes - @justmpm/comunicate
3
+ * Arquitetura File-Based para Windows
4
+ */
5
+ /**
6
+ * Versão do pacote (lida do package.json)
7
+ */
8
+ export declare const VERSION: string;
9
+ export * from './types/index.js';
10
+ export * from './core/index.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/comunicate/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH;;GAEG;AACH,eAAO,MAAM,OAAO,QAAe,CAAC;AAEpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Sistema de Comunicação Entre Agentes - @justmpm/comunicate
3
+ * Arquitetura File-Based para Windows
4
+ */
5
+ import { readFileSync } from 'fs';
6
+ import { resolve } from 'path';
7
+ /**
8
+ * Lê a versão do package.json
9
+ */
10
+ function getVersion() {
11
+ try {
12
+ const packagePath = resolve(process.cwd(), 'package.json');
13
+ const packageContent = readFileSync(packagePath, 'utf-8');
14
+ const packageJson = JSON.parse(packageContent);
15
+ return packageJson.version || '0.0.0';
16
+ }
17
+ catch {
18
+ return '0.0.0';
19
+ }
20
+ }
21
+ /**
22
+ * Versão do pacote (lida do package.json)
23
+ */
24
+ export const VERSION = getVersion();
25
+ export * from './types/index.js';
26
+ export * from './core/index.js';
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/comunicate/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/C,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAEpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Exporta todos os tipos do sistema
3
+ */
4
+ export * from './message.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/comunicate/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Exporta todos os tipos do sistema
3
+ */
4
+ export * from './message.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/comunicate/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Tipos de mensagens do sistema de comunicação entre agentes
3
+ */
4
+ export type MessageType = 'text' | 'assistance_request' | 'task_update' | 'notification' | 'stop_command';
5
+ export type MessagePriority = 'low' | 'normal' | 'high' | 'urgent';
6
+ export interface Message {
7
+ id: string;
8
+ senderId: string;
9
+ content: string;
10
+ type: MessageType;
11
+ priority: MessagePriority;
12
+ timestamp: string;
13
+ read: boolean;
14
+ delivered: boolean;
15
+ }
16
+ export interface Inbox {
17
+ agentId: string;
18
+ updatedAt: string;
19
+ messages: Message[];
20
+ }
21
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/comunicate/types/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,oBAAoB,GACpB,aAAa,GACb,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tipos de mensagens do sistema de comunicação entre agentes
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/comunicate/types/message.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * MCP Server - @justmpm/comunicate
4
+ * Model Context Protocol Server para comunicação entre agentes
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;GAGG"}