@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
package/dist/cli.js ADDED
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI para Administração do @justmpm/comunicate
4
+ */
5
+ import { readRegistry, registerAgent, generateToken, getInactiveAgents } from './comunicate/core/auth.js';
6
+ import { getAllClaims } from './comunicate/core/domains.js';
7
+ const command = process.argv[2];
8
+ function showHelp() {
9
+ console.log(`
10
+ @justmpm/comunicate CLI - Administração
11
+
12
+ Uso: node cli.js <comando> [args]
13
+
14
+ Comandos:
15
+ list-agents Lista todos os agentes
16
+ create-agent <id> Cria novo agente
17
+ list-claims Lista todos os claims
18
+ check-health Verifica agentes inativos
19
+ generate-token Gera token aleatório
20
+ help Mostra esta ajuda
21
+
22
+ Exemplos:
23
+ node cli.js list-agents
24
+ node cli.js create-agent backend
25
+ node cli.js check-health
26
+ `);
27
+ }
28
+ async function main() {
29
+ switch (command) {
30
+ case 'list-agents': {
31
+ const registry = readRegistry();
32
+ console.log(`\n👥 Agentes registrados (${registry.agents.length}):\n`);
33
+ for (const agent of registry.agents) {
34
+ const statusIcon = agent.status === 'active' ? '🟢' : '🔴';
35
+ console.log(`${statusIcon} ${agent.id}`);
36
+ console.log(` Status: ${agent.status}`);
37
+ console.log(` Capabilities: ${agent.capabilities.join(', ')}`);
38
+ console.log(` Domains: ${agent.domains.join(', ')}`);
39
+ console.log(` Last Seen: ${agent.lastSeen}`);
40
+ console.log(` Color: ${agent.color}`);
41
+ console.log('');
42
+ }
43
+ break;
44
+ }
45
+ case 'create-agent': {
46
+ const agentId = process.argv[3];
47
+ if (!agentId) {
48
+ console.error('❌ Erro: Especifique o ID do agente');
49
+ console.log('Uso: node cli.js create-agent <id>');
50
+ process.exit(1);
51
+ }
52
+ // Valida formato do ID
53
+ if (!/^[a-z0-9-]+$/.test(agentId)) {
54
+ console.error('❌ Erro: ID deve conter apenas letras minúsculas, números e hífens');
55
+ process.exit(1);
56
+ }
57
+ // Solicita capabilities e domains interativamente
58
+ console.log(`Criando agente: ${agentId}`);
59
+ console.log('Digite as capabilities (separadas por vírgula, ex: api,database,auth):');
60
+ // Para simplificar, usa defaults
61
+ const capabilities = ['general'];
62
+ const domains = ['src'];
63
+ try {
64
+ const token = registerAgent(agentId, capabilities, domains);
65
+ console.log(`\n✅ Agente ${agentId} criado com sucesso!`);
66
+ console.log(`\n🔑 Token: ${token}`);
67
+ console.log('\n⚠️ GUARDE ESTE TOKEN! Ele não será mostrado novamente.\n');
68
+ }
69
+ catch (error) {
70
+ console.error(`❌ Erro: ${error}`);
71
+ process.exit(1);
72
+ }
73
+ break;
74
+ }
75
+ case 'list-claims': {
76
+ const claims = getAllClaims();
77
+ console.log(`\n🔐 Claims ativos (${claims.length}):\n`);
78
+ for (const claim of claims) {
79
+ console.log(`📄 ${claim.file}`);
80
+ console.log(` Agente: ${claim.claimedBy}`);
81
+ console.log(` Expira: ${claim.expiresAt}`);
82
+ if (claim.reason)
83
+ console.log(` Motivo: ${claim.reason}`);
84
+ console.log('');
85
+ }
86
+ break;
87
+ }
88
+ case 'check-health': {
89
+ const timeout = parseInt(process.argv[3]) || 5;
90
+ const inactive = getInactiveAgents(timeout);
91
+ console.log(`\n🏥 Health Check (timeout: ${timeout} min):\n`);
92
+ if (inactive.length === 0) {
93
+ console.log('✅ Todos os agentes estão ativos!\n');
94
+ }
95
+ else {
96
+ console.log(`⚠️ Agentes inativos (${inactive.length}):\n`);
97
+ for (const agent of inactive) {
98
+ console.log(`🔴 ${agent.id}`);
99
+ console.log(` Último heartbeat: ${agent.lastSeen}`);
100
+ console.log('');
101
+ }
102
+ }
103
+ break;
104
+ }
105
+ case 'generate-token': {
106
+ const token = generateToken();
107
+ console.log(`\n🔑 Token gerado: ${token}\n`);
108
+ break;
109
+ }
110
+ case 'help':
111
+ default:
112
+ showHelp();
113
+ break;
114
+ }
115
+ }
116
+ main().catch(console.error);
117
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Sistema de autenticação e gerenciamento de agentes
3
+ */
4
+ /**
5
+ * Gera token seguro de 32 caracteres hexadecimais
6
+ */
7
+ export declare function generateToken(): string;
8
+ /**
9
+ * Tipos TypeScript
10
+ */
11
+ export type AgentStatus = 'created' | 'active' | 'terminated';
12
+ export interface Agent {
13
+ id: string;
14
+ token: string;
15
+ capabilities: string[];
16
+ domains: string[];
17
+ status: AgentStatus;
18
+ createdAt: string;
19
+ lastSeen: string;
20
+ currentTask: string | null;
21
+ color: string;
22
+ }
23
+ export interface AgentRegistry {
24
+ version: string;
25
+ updatedAt: string;
26
+ agents: Agent[];
27
+ }
28
+ /**
29
+ * Lê registry de agentes
30
+ */
31
+ export declare function readRegistry(): AgentRegistry;
32
+ /**
33
+ * Escreve registry atomicamente
34
+ */
35
+ export declare function writeRegistry(registry: AgentRegistry): void;
36
+ /**
37
+ * Verifica se token é válido (comparação timing-safe)
38
+ */
39
+ export declare function verifyToken(token: string | undefined): token is string;
40
+ /**
41
+ * Verifica se é token de admin (comparação timing-safe)
42
+ */
43
+ export declare function verifyAdminToken(token: string | undefined): boolean;
44
+ /**
45
+ * Obtém ID do agente a partir do token
46
+ */
47
+ export declare function getAgentId(token: string | undefined): string | null;
48
+ /**
49
+ * Atualiza timestamp lastSeen do agente
50
+ */
51
+ export declare function updateAgentHeartbeat(agentId: string): void;
52
+ /**
53
+ * Obtém agentes inativos (sem heartbeat por X minutos)
54
+ */
55
+ export declare function getInactiveAgents(timeoutMinutes?: number): Agent[];
56
+ /**
57
+ * Registra novo agente
58
+ */
59
+ export declare function registerAgent(id: string, capabilities: string[], domains: string[]): string;
60
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/comunicate/core/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE9D,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAM5C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAM3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,MAAM,CAkBtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CASnE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAcnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,GAAE,MAAU,GAAG,KAAK,EAAE,CASrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CA6BR"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Sistema de autenticação e gerenciamento de agentes
3
+ */
4
+ import { randomBytes, timingSafeEqual } from 'crypto';
5
+ import { resolve } from 'path';
6
+ import { writeJSON, readJSON } from './persistence.js';
7
+ const REGISTRY_PATH = resolve(process.cwd(), '.comunicate', 'registry', 'agents.json');
8
+ // Token de admin fixo (em produção, usar variável de ambiente)
9
+ const ADMIN_TOKEN = process.env.COMUNICATE_ADMIN_TOKEN || '';
10
+ /**
11
+ * Gera token seguro de 32 caracteres hexadecimais
12
+ */
13
+ export function generateToken() {
14
+ return randomBytes(16).toString('hex');
15
+ }
16
+ /**
17
+ * Lê registry de agentes
18
+ */
19
+ export function readRegistry() {
20
+ return readJSON(REGISTRY_PATH, {
21
+ version: '1.0.0',
22
+ updatedAt: new Date().toISOString(),
23
+ agents: []
24
+ });
25
+ }
26
+ /**
27
+ * Escreve registry atomicamente
28
+ */
29
+ export function writeRegistry(registry) {
30
+ const updated = {
31
+ ...registry,
32
+ updatedAt: new Date().toISOString()
33
+ };
34
+ writeJSON(REGISTRY_PATH, updated);
35
+ }
36
+ /**
37
+ * Verifica se token é válido (comparação timing-safe)
38
+ */
39
+ export function verifyToken(token) {
40
+ if (!token)
41
+ return false;
42
+ const registry = readRegistry();
43
+ for (const agent of registry.agents) {
44
+ if (agent.status !== 'active')
45
+ continue;
46
+ // Timing-safe comparison para evitar timing attacks
47
+ const tokenBuffer = Buffer.from(token, 'utf-8');
48
+ const agentTokenBuffer = Buffer.from(agent.token, 'utf-8');
49
+ if (tokenBuffer.length !== agentTokenBuffer.length)
50
+ continue;
51
+ if (timingSafeEqual(tokenBuffer, agentTokenBuffer)) {
52
+ return true;
53
+ }
54
+ }
55
+ return false;
56
+ }
57
+ /**
58
+ * Verifica se é token de admin (comparação timing-safe)
59
+ */
60
+ export function verifyAdminToken(token) {
61
+ if (!token || !ADMIN_TOKEN)
62
+ return false;
63
+ const tokenBuffer = Buffer.from(token, 'utf-8');
64
+ const adminBuffer = Buffer.from(ADMIN_TOKEN, 'utf-8');
65
+ if (tokenBuffer.length !== adminBuffer.length)
66
+ return false;
67
+ return timingSafeEqual(tokenBuffer, adminBuffer);
68
+ }
69
+ /**
70
+ * Obtém ID do agente a partir do token
71
+ */
72
+ export function getAgentId(token) {
73
+ if (!token)
74
+ return null;
75
+ const registry = readRegistry();
76
+ for (const agent of registry.agents) {
77
+ const tokenBuffer = Buffer.from(token, 'utf-8');
78
+ const agentTokenBuffer = Buffer.from(agent.token, 'utf-8');
79
+ if (tokenBuffer.length === agentTokenBuffer.length &&
80
+ timingSafeEqual(tokenBuffer, agentTokenBuffer)) {
81
+ return agent.id;
82
+ }
83
+ }
84
+ return null;
85
+ }
86
+ /**
87
+ * Atualiza timestamp lastSeen do agente
88
+ */
89
+ export function updateAgentHeartbeat(agentId) {
90
+ const registry = readRegistry();
91
+ const agent = registry.agents.find(a => a.id === agentId);
92
+ if (agent) {
93
+ agent.lastSeen = new Date().toISOString();
94
+ writeRegistry(registry);
95
+ }
96
+ }
97
+ /**
98
+ * Obtém agentes inativos (sem heartbeat por X minutos)
99
+ */
100
+ export function getInactiveAgents(timeoutMinutes = 5) {
101
+ const registry = readRegistry();
102
+ const now = new Date();
103
+ const timeout = timeoutMinutes * 60 * 1000;
104
+ return registry.agents.filter(agent => {
105
+ const lastSeen = new Date(agent.lastSeen);
106
+ return now.getTime() - lastSeen.getTime() > timeout;
107
+ });
108
+ }
109
+ /**
110
+ * Registra novo agente
111
+ */
112
+ export function registerAgent(id, capabilities, domains) {
113
+ const registry = readRegistry();
114
+ // Verifica se já existe
115
+ if (registry.agents.some(a => a.id === id)) {
116
+ throw new Error(`Agent ${id} already exists`);
117
+ }
118
+ const token = generateToken();
119
+ const now = new Date().toISOString();
120
+ const agent = {
121
+ id,
122
+ token,
123
+ capabilities,
124
+ domains,
125
+ status: 'active',
126
+ createdAt: now,
127
+ lastSeen: now,
128
+ currentTask: null,
129
+ color: generateAgentColor(registry.agents.length)
130
+ };
131
+ registry.agents.push(agent);
132
+ writeRegistry(registry);
133
+ // Cria inbox do agente
134
+ createInbox(id);
135
+ return token;
136
+ }
137
+ function generateAgentColor(index) {
138
+ const colors = ['#4ecdc4', '#667eea', '#f093fb', '#f5576c', '#4facfe', '#43e97b'];
139
+ return colors[index % colors.length];
140
+ }
141
+ function createInbox(agentId) {
142
+ const inboxPath = resolve(process.cwd(), '.comunicate', 'messages', `inbox-${agentId}.json`);
143
+ const inbox = {
144
+ agentId,
145
+ updatedAt: new Date().toISOString(),
146
+ messages: []
147
+ };
148
+ writeJSON(inboxPath, inbox);
149
+ }
150
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/comunicate/core/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Sistema de domínios e claims (reserva de arquivos)
3
+ */
4
+ export interface DomainCheck {
5
+ allowed: boolean;
6
+ owner?: string;
7
+ reason?: string;
8
+ }
9
+ export interface Claim {
10
+ file: string;
11
+ claimedBy: string;
12
+ claimedAt: string;
13
+ expiresAt: string;
14
+ reason?: string;
15
+ sequence: number;
16
+ }
17
+ export interface ClaimsRegistry {
18
+ version: string;
19
+ updatedAt: string;
20
+ sequence: number;
21
+ claims: Claim[];
22
+ }
23
+ /**
24
+ * Verifica se agente pode editar um arquivo
25
+ */
26
+ export declare function canEditFile(agentId: string, filePath: string): DomainCheck;
27
+ /**
28
+ * Reserva arquivo para edição (com proteção contra race conditions)
29
+ */
30
+ export declare function claimFile(agentId: string, filePath: string, durationMinutes?: number, reason?: string): {
31
+ success: boolean;
32
+ claim?: Claim;
33
+ error?: string;
34
+ };
35
+ /**
36
+ * Libera arquivo
37
+ */
38
+ export declare function releaseFile(agentId: string, filePath: string): boolean;
39
+ /**
40
+ * Renova claim existente
41
+ */
42
+ export declare function renewClaim(agentId: string, filePath: string, additionalMinutes?: number): {
43
+ success: boolean;
44
+ claim?: Claim;
45
+ error?: string;
46
+ };
47
+ /**
48
+ * Lista todos os claims ativos de um agente
49
+ */
50
+ export declare function getAgentClaims(agentId: string): Claim[];
51
+ /**
52
+ * Lista todos os claims ativos no sistema
53
+ */
54
+ export declare function getAllClaims(): Claim[];
55
+ //# sourceMappingURL=domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../../src/comunicate/core/domains.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AA4BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CA8C1E;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,MAAW,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsCrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkBtE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,iBAAiB,GAAE,MAAW,GAC7B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAGvD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,KAAK,EAAE,CAEtC"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Sistema de domínios e claims (reserva de arquivos)
3
+ */
4
+ import { resolve } from 'path';
5
+ import { readJSON, writeJSON } from './persistence.js';
6
+ const REGISTRY_PATH = resolve(process.cwd(), '.comunicate', 'registry', 'agents.json');
7
+ const CLAIMS_PATH = resolve(process.cwd(), '.comunicate', 'registry', 'claims.json');
8
+ /**
9
+ * Lê claims e remove expirados automaticamente
10
+ */
11
+ function readClaimsClean() {
12
+ const claims = readJSON(CLAIMS_PATH, {
13
+ version: '1.0.0',
14
+ updatedAt: new Date().toISOString(),
15
+ sequence: 0,
16
+ claims: []
17
+ });
18
+ const now = new Date().toISOString();
19
+ const originalCount = claims.claims.length;
20
+ // Remove claims expirados
21
+ claims.claims = claims.claims.filter(c => c.expiresAt > now);
22
+ // Se removeu algum, salva
23
+ if (claims.claims.length !== originalCount) {
24
+ claims.updatedAt = now;
25
+ writeJSON(CLAIMS_PATH, claims);
26
+ }
27
+ return claims;
28
+ }
29
+ /**
30
+ * Verifica se agente pode editar um arquivo
31
+ */
32
+ export function canEditFile(agentId, filePath) {
33
+ // 1. Verifica se está no domínio do agente
34
+ const registry = readJSON(REGISTRY_PATH, { agents: [] });
35
+ const agent = registry.agents.find((a) => a.id === agentId);
36
+ if (!agent) {
37
+ return { allowed: false, reason: 'Agent not found' };
38
+ }
39
+ const normalizedPath = filePath.replace(/^\.\//, '').replace(/^src\//, '');
40
+ // Verifica domínios
41
+ for (const domain of agent.domains) {
42
+ const normalizedDomain = domain.replace(/^\.\//, '').replace(/^src\//, '');
43
+ if (normalizedPath.startsWith(normalizedDomain)) {
44
+ return { allowed: true };
45
+ }
46
+ }
47
+ // 2. Verifica se tem claim ativo
48
+ const claims = readClaimsClean();
49
+ const activeClaim = claims.claims.find((c) => c.file === filePath &&
50
+ c.claimedBy === agentId);
51
+ if (activeClaim) {
52
+ return { allowed: true };
53
+ }
54
+ // Verifica se outro agente tem claim
55
+ const otherClaim = claims.claims.find((c) => c.file === filePath);
56
+ if (otherClaim) {
57
+ return {
58
+ allowed: false,
59
+ owner: otherClaim.claimedBy,
60
+ reason: `File claimed by ${otherClaim.claimedBy} until ${otherClaim.expiresAt}`
61
+ };
62
+ }
63
+ return {
64
+ allowed: false,
65
+ reason: `File not in agent domains: ${agent.domains.join(', ')}`
66
+ };
67
+ }
68
+ /**
69
+ * Reserva arquivo para edição (com proteção contra race conditions)
70
+ */
71
+ export function claimFile(agentId, filePath, durationMinutes = 15, reason) {
72
+ // Verifica se já pode editar (domínio próprio)
73
+ const check = canEditFile(agentId, filePath);
74
+ if (check.allowed) {
75
+ return { success: true, error: 'File already in your domain' };
76
+ }
77
+ // Verifica se outro tem claim
78
+ if (check.owner) {
79
+ return { success: false, error: `File claimed by ${check.owner}` };
80
+ }
81
+ try {
82
+ // Re-lê claims (limpa expirados e pega sequence atual)
83
+ const claims = readClaimsClean();
84
+ const now = new Date();
85
+ const claim = {
86
+ file: filePath,
87
+ claimedBy: agentId,
88
+ claimedAt: now.toISOString(),
89
+ expiresAt: new Date(now.getTime() + durationMinutes * 60000).toISOString(),
90
+ reason,
91
+ sequence: claims.sequence + 1
92
+ };
93
+ // Remove claim existente do mesmo arquivo (se houver - expirado já foi removido)
94
+ claims.claims = claims.claims.filter((c) => c.file !== filePath);
95
+ claims.claims.push(claim);
96
+ claims.sequence = claim.sequence;
97
+ claims.updatedAt = now.toISOString();
98
+ writeJSON(CLAIMS_PATH, claims);
99
+ return { success: true, claim };
100
+ }
101
+ catch (error) {
102
+ return { success: false, error: String(error) };
103
+ }
104
+ }
105
+ /**
106
+ * Libera arquivo
107
+ */
108
+ export function releaseFile(agentId, filePath) {
109
+ try {
110
+ const claims = readClaimsClean();
111
+ const beforeCount = claims.claims.length;
112
+ claims.claims = claims.claims.filter((c) => !(c.file === filePath && c.claimedBy === agentId));
113
+ if (claims.claims.length !== beforeCount) {
114
+ claims.updatedAt = new Date().toISOString();
115
+ writeJSON(CLAIMS_PATH, claims);
116
+ }
117
+ return true;
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ }
123
+ /**
124
+ * Renova claim existente
125
+ */
126
+ export function renewClaim(agentId, filePath, additionalMinutes = 15) {
127
+ const claims = readClaimsClean();
128
+ const claim = claims.claims.find((c) => c.file === filePath && c.claimedBy === agentId);
129
+ if (!claim) {
130
+ return { success: false, error: 'No active claim found for this file' };
131
+ }
132
+ const now = new Date();
133
+ const currentExpiry = new Date(claim.expiresAt);
134
+ // Só renova se estiver prestes a expirar (menos de 5 min) ou já expirado
135
+ const fiveMinutes = 5 * 60 * 1000;
136
+ if (currentExpiry.getTime() - now.getTime() > fiveMinutes) {
137
+ return { success: true, claim, error: 'Claim still valid for more than 5 minutes' };
138
+ }
139
+ claim.expiresAt = new Date(now.getTime() + additionalMinutes * 60000).toISOString();
140
+ claims.updatedAt = now.toISOString();
141
+ writeJSON(CLAIMS_PATH, claims);
142
+ return { success: true, claim };
143
+ }
144
+ /**
145
+ * Lista todos os claims ativos de um agente
146
+ */
147
+ export function getAgentClaims(agentId) {
148
+ const claims = readClaimsClean();
149
+ return claims.claims.filter(c => c.claimedBy === agentId);
150
+ }
151
+ /**
152
+ * Lista todos os claims ativos no sistema
153
+ */
154
+ export function getAllClaims() {
155
+ return readClaimsClean().claims;
156
+ }
157
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../../src/comunicate/core/domains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Exporta todos os módulos core do sistema
3
+ */
4
+ export * from './auth.js';
5
+ export * from './messaging.js';
6
+ export * from './domains.js';
7
+ export * from './notifications.js';
8
+ export * from './persistence.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/comunicate/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Exporta todos os módulos core do sistema
3
+ */
4
+ export * from './auth.js';
5
+ export * from './messaging.js';
6
+ export * from './domains.js';
7
+ export * from './notifications.js';
8
+ export * from './persistence.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/comunicate/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Sistema de mensagens entre agentes
3
+ */
4
+ import type { Message, MessageType, MessagePriority } from '../types/message.js';
5
+ /**
6
+ * Envia mensagem para outro agente
7
+ */
8
+ export declare function sendMessage(senderToken: string, recipientId: string, content: string, options?: {
9
+ type?: MessageType;
10
+ priority?: MessagePriority;
11
+ }): {
12
+ success: boolean;
13
+ error?: string;
14
+ };
15
+ /**
16
+ * Lê mensagens da inbox do agente
17
+ */
18
+ export declare function getMessages(token: string, options?: {
19
+ includeRead?: boolean;
20
+ markAsRead?: boolean;
21
+ limit?: number;
22
+ }): {
23
+ success: boolean;
24
+ messages?: Message[];
25
+ error?: string;
26
+ };
27
+ /**
28
+ * Obtém número de mensagens não lidas
29
+ */
30
+ export declare function getUnreadCount(token: string): {
31
+ success: boolean;
32
+ count?: number;
33
+ error?: string;
34
+ };
35
+ /**
36
+ * Deleta mensagem específica
37
+ */
38
+ export declare function deleteMessage(token: string, messageId: string): {
39
+ success: boolean;
40
+ error?: string;
41
+ };
42
+ /**
43
+ * Limpa todas as mensagens lidas
44
+ */
45
+ export declare function clearReadMessages(token: string): {
46
+ success: boolean;
47
+ deletedCount?: number;
48
+ error?: string;
49
+ };
50
+ //# sourceMappingURL=messaging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/comunicate/core/messaging.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAS,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA2DxF;;GAEG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,eAAe,CAAC;CACvB,GACL;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgEtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACX,GACL;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA2C5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAqBlG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA8BtC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA2B5G"}