@tjamescouch/agentchat 0.22.1 → 0.23.1
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/Dockerfile +1 -1
- package/dist/bin/agentchat.d.ts +7 -0
- package/dist/bin/agentchat.d.ts.map +1 -0
- package/dist/bin/agentchat.js +1511 -0
- package/dist/bin/agentchat.js.map +1 -0
- package/dist/lib/allowlist.d.ts +77 -0
- package/dist/lib/allowlist.d.ts.map +1 -0
- package/dist/lib/allowlist.js +151 -0
- package/dist/lib/allowlist.js.map +1 -0
- package/dist/lib/client.d.ts +147 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +704 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/daemon.d.ts +122 -0
- package/dist/lib/daemon.d.ts.map +1 -0
- package/dist/lib/daemon.js +523 -0
- package/dist/lib/daemon.js.map +1 -0
- package/dist/lib/deploy/akash.d.ts +271 -0
- package/dist/lib/deploy/akash.d.ts.map +1 -0
- package/dist/lib/deploy/akash.js +671 -0
- package/dist/lib/deploy/akash.js.map +1 -0
- package/dist/lib/deploy/config.d.ts +62 -0
- package/dist/lib/deploy/config.d.ts.map +1 -0
- package/dist/lib/deploy/config.js +116 -0
- package/dist/lib/deploy/config.js.map +1 -0
- package/dist/lib/deploy/docker.d.ts +37 -0
- package/dist/lib/deploy/docker.d.ts.map +1 -0
- package/dist/lib/deploy/docker.js +122 -0
- package/dist/lib/deploy/docker.js.map +1 -0
- package/dist/lib/deploy/index.d.ts +11 -0
- package/dist/lib/deploy/index.d.ts.map +1 -0
- package/dist/lib/deploy/index.js +11 -0
- package/dist/lib/deploy/index.js.map +1 -0
- package/dist/lib/escrow-hooks.d.ts +199 -0
- package/dist/lib/escrow-hooks.d.ts.map +1 -0
- package/dist/lib/escrow-hooks.js +221 -0
- package/dist/lib/escrow-hooks.js.map +1 -0
- package/dist/lib/identity.d.ts +134 -0
- package/dist/lib/identity.d.ts.map +1 -0
- package/dist/lib/identity.js +334 -0
- package/dist/lib/identity.js.map +1 -0
- package/dist/lib/jitter.d.ts +42 -0
- package/dist/lib/jitter.d.ts.map +1 -0
- package/{lib/jitter.ts → dist/lib/jitter.js} +10 -18
- package/dist/lib/jitter.js.map +1 -0
- package/dist/lib/proposals.d.ts +223 -0
- package/dist/lib/proposals.d.ts.map +1 -0
- package/dist/lib/proposals.js +379 -0
- package/dist/lib/proposals.js.map +1 -0
- package/dist/lib/protocol.d.ts +220 -0
- package/dist/lib/protocol.d.ts.map +1 -0
- package/dist/lib/protocol.js +507 -0
- package/dist/lib/protocol.js.map +1 -0
- package/dist/lib/receipts.d.ts +134 -0
- package/dist/lib/receipts.d.ts.map +1 -0
- package/dist/lib/receipts.js +270 -0
- package/dist/lib/receipts.js.map +1 -0
- package/dist/lib/reputation.d.ts +250 -0
- package/dist/lib/reputation.d.ts.map +1 -0
- package/dist/lib/reputation.js +586 -0
- package/dist/lib/reputation.js.map +1 -0
- package/dist/lib/security.d.ts +27 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +150 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/server/handlers/admin.d.ts +26 -0
- package/dist/lib/server/handlers/admin.d.ts.map +1 -0
- package/dist/lib/server/handlers/admin.js +76 -0
- package/dist/lib/server/handlers/admin.js.map +1 -0
- package/dist/lib/server/handlers/identity.d.ts +36 -0
- package/dist/lib/server/handlers/identity.d.ts.map +1 -0
- package/dist/lib/server/handlers/identity.js +330 -0
- package/dist/lib/server/handlers/identity.js.map +1 -0
- package/dist/lib/server/handlers/index.d.ts +10 -0
- package/dist/lib/server/handlers/index.d.ts.map +1 -0
- package/dist/lib/server/handlers/index.js +15 -0
- package/dist/lib/server/handlers/index.js.map +1 -0
- package/dist/lib/server/handlers/message.d.ts +47 -0
- package/dist/lib/server/handlers/message.d.ts.map +1 -0
- package/dist/lib/server/handlers/message.js +265 -0
- package/dist/lib/server/handlers/message.js.map +1 -0
- package/dist/lib/server/handlers/presence.d.ts +18 -0
- package/dist/lib/server/handlers/presence.d.ts.map +1 -0
- package/dist/lib/server/handlers/presence.js +35 -0
- package/dist/lib/server/handlers/presence.js.map +1 -0
- package/dist/lib/server/handlers/proposal.d.ts +38 -0
- package/dist/lib/server/handlers/proposal.d.ts.map +1 -0
- package/dist/lib/server/handlers/proposal.js +273 -0
- package/dist/lib/server/handlers/proposal.js.map +1 -0
- package/dist/lib/server/handlers/skills.d.ts +22 -0
- package/dist/lib/server/handlers/skills.d.ts.map +1 -0
- package/dist/lib/server/handlers/skills.js +119 -0
- package/dist/lib/server/handlers/skills.js.map +1 -0
- package/dist/lib/server-directory.d.ts +85 -0
- package/dist/lib/server-directory.d.ts.map +1 -0
- package/dist/lib/server-directory.js +177 -0
- package/dist/lib/server-directory.js.map +1 -0
- package/dist/lib/server.d.ts +162 -0
- package/dist/lib/server.d.ts.map +1 -0
- package/dist/lib/server.js +602 -0
- package/dist/lib/server.js.map +1 -0
- package/dist/lib/types.d.ts +461 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +98 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +22 -13
- package/bin/agentchat.js +0 -1617
- package/bin/agentchat.ts +0 -1812
- package/lib/allowlist.js +0 -162
- package/lib/chat.py +0 -241
- package/lib/client.js +0 -821
- package/lib/client.ts +0 -877
- package/lib/daemon.js +0 -562
- package/lib/daemon.ts +0 -662
- package/lib/deploy/akash.js +0 -811
- package/lib/deploy/config.js +0 -128
- package/lib/deploy/docker.js +0 -132
- package/lib/deploy/index.js +0 -24
- package/lib/elo_swarm.py +0 -569
- package/lib/escrow-hooks.js +0 -237
- package/lib/escrow-hooks.ts +0 -391
- package/lib/identity.js +0 -376
- package/lib/identity.ts +0 -412
- package/lib/jitter.js +0 -54
- package/lib/proposals.js +0 -426
- package/lib/proposals.ts +0 -612
- package/lib/protocol.js +0 -516
- package/lib/receipts.js +0 -294
- package/lib/receipts.ts +0 -359
- package/lib/reputation.js +0 -664
- package/lib/reputation.ts +0 -790
- package/lib/security.js +0 -183
- package/lib/server/handlers/admin.js +0 -94
- package/lib/server/handlers/identity.js +0 -258
- package/lib/server/handlers/index.js +0 -42
- package/lib/server/handlers/message.js +0 -319
- package/lib/server/handlers/presence.js +0 -45
- package/lib/server/handlers/proposal.js +0 -358
- package/lib/server/handlers/skills.js +0 -141
- package/lib/server-directory.js +0 -190
- package/lib/server-directory.ts +0 -232
- package/lib/server.js +0 -633
- package/lib/server.ts +0 -698
- package/lib/supervisor/USAGE.md +0 -110
- package/lib/supervisor/agent-health.sh +0 -107
- package/lib/supervisor/agent-monitor.sh +0 -123
- package/lib/supervisor/agent-supervisor.sh +0 -135
- package/lib/supervisor/agentctl.sh +0 -266
- package/lib/supervisor/god-backup.sh +0 -126
- package/lib/supervisor/god-watchdog.sh +0 -107
- package/lib/supervisor/killswitch.sh +0 -43
- package/lib/supervisor/notify.sh +0 -19
- package/lib/types.ts +0 -433
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentChat Protocol
|
|
3
|
+
* Message types and validation for agent-to-agent communication
|
|
4
|
+
*/
|
|
5
|
+
import crypto from 'crypto';
|
|
6
|
+
// Re-export enums as const objects for backwards compatibility
|
|
7
|
+
export const ClientMessageType = {
|
|
8
|
+
IDENTIFY: 'IDENTIFY',
|
|
9
|
+
JOIN: 'JOIN',
|
|
10
|
+
LEAVE: 'LEAVE',
|
|
11
|
+
MSG: 'MSG',
|
|
12
|
+
LIST_CHANNELS: 'LIST_CHANNELS',
|
|
13
|
+
LIST_AGENTS: 'LIST_AGENTS',
|
|
14
|
+
CREATE_CHANNEL: 'CREATE_CHANNEL',
|
|
15
|
+
INVITE: 'INVITE',
|
|
16
|
+
PING: 'PING',
|
|
17
|
+
// Proposal/negotiation message types
|
|
18
|
+
PROPOSAL: 'PROPOSAL',
|
|
19
|
+
ACCEPT: 'ACCEPT',
|
|
20
|
+
REJECT: 'REJECT',
|
|
21
|
+
COMPLETE: 'COMPLETE',
|
|
22
|
+
DISPUTE: 'DISPUTE',
|
|
23
|
+
// Skill discovery message types
|
|
24
|
+
REGISTER_SKILLS: 'REGISTER_SKILLS',
|
|
25
|
+
SEARCH_SKILLS: 'SEARCH_SKILLS',
|
|
26
|
+
// Presence message types
|
|
27
|
+
SET_PRESENCE: 'SET_PRESENCE',
|
|
28
|
+
// Identity verification message types
|
|
29
|
+
VERIFY_REQUEST: 'VERIFY_REQUEST',
|
|
30
|
+
VERIFY_RESPONSE: 'VERIFY_RESPONSE',
|
|
31
|
+
// Admin message types
|
|
32
|
+
ADMIN_APPROVE: 'ADMIN_APPROVE',
|
|
33
|
+
ADMIN_REVOKE: 'ADMIN_REVOKE',
|
|
34
|
+
ADMIN_LIST: 'ADMIN_LIST',
|
|
35
|
+
// Challenge-response auth
|
|
36
|
+
VERIFY_IDENTITY: 'VERIFY_IDENTITY',
|
|
37
|
+
};
|
|
38
|
+
export const ServerMessageType = {
|
|
39
|
+
WELCOME: 'WELCOME',
|
|
40
|
+
MSG: 'MSG',
|
|
41
|
+
JOINED: 'JOINED',
|
|
42
|
+
LEFT: 'LEFT',
|
|
43
|
+
AGENT_JOINED: 'AGENT_JOINED',
|
|
44
|
+
AGENT_LEFT: 'AGENT_LEFT',
|
|
45
|
+
CHANNELS: 'CHANNELS',
|
|
46
|
+
AGENTS: 'AGENTS',
|
|
47
|
+
ERROR: 'ERROR',
|
|
48
|
+
PONG: 'PONG',
|
|
49
|
+
// Proposal/negotiation message types
|
|
50
|
+
PROPOSAL: 'PROPOSAL',
|
|
51
|
+
ACCEPT: 'ACCEPT',
|
|
52
|
+
REJECT: 'REJECT',
|
|
53
|
+
COMPLETE: 'COMPLETE',
|
|
54
|
+
DISPUTE: 'DISPUTE',
|
|
55
|
+
// Skill discovery message types
|
|
56
|
+
SKILLS_REGISTERED: 'SKILLS_REGISTERED',
|
|
57
|
+
SEARCH_RESULTS: 'SEARCH_RESULTS',
|
|
58
|
+
// Presence message types
|
|
59
|
+
PRESENCE_CHANGED: 'PRESENCE_CHANGED',
|
|
60
|
+
// Identity verification message types
|
|
61
|
+
VERIFY_REQUEST: 'VERIFY_REQUEST',
|
|
62
|
+
VERIFY_RESPONSE: 'VERIFY_RESPONSE',
|
|
63
|
+
VERIFY_SUCCESS: 'VERIFY_SUCCESS',
|
|
64
|
+
VERIFY_FAILED: 'VERIFY_FAILED',
|
|
65
|
+
// Admin response
|
|
66
|
+
ADMIN_RESULT: 'ADMIN_RESULT',
|
|
67
|
+
// Challenge-response auth
|
|
68
|
+
CHALLENGE: 'CHALLENGE',
|
|
69
|
+
};
|
|
70
|
+
export const ErrorCode = {
|
|
71
|
+
AUTH_REQUIRED: 'AUTH_REQUIRED',
|
|
72
|
+
CHANNEL_NOT_FOUND: 'CHANNEL_NOT_FOUND',
|
|
73
|
+
NOT_INVITED: 'NOT_INVITED',
|
|
74
|
+
INVALID_MSG: 'INVALID_MSG',
|
|
75
|
+
RATE_LIMITED: 'RATE_LIMITED',
|
|
76
|
+
AGENT_NOT_FOUND: 'AGENT_NOT_FOUND',
|
|
77
|
+
CHANNEL_EXISTS: 'CHANNEL_EXISTS',
|
|
78
|
+
INVALID_NAME: 'INVALID_NAME',
|
|
79
|
+
// Proposal errors
|
|
80
|
+
PROPOSAL_NOT_FOUND: 'PROPOSAL_NOT_FOUND',
|
|
81
|
+
PROPOSAL_EXPIRED: 'PROPOSAL_EXPIRED',
|
|
82
|
+
INVALID_PROPOSAL: 'INVALID_PROPOSAL',
|
|
83
|
+
SIGNATURE_REQUIRED: 'SIGNATURE_REQUIRED',
|
|
84
|
+
NOT_PROPOSAL_PARTY: 'NOT_PROPOSAL_PARTY',
|
|
85
|
+
// Staking errors
|
|
86
|
+
INSUFFICIENT_REPUTATION: 'INSUFFICIENT_REPUTATION',
|
|
87
|
+
INVALID_STAKE: 'INVALID_STAKE',
|
|
88
|
+
// Verification errors
|
|
89
|
+
VERIFICATION_FAILED: 'VERIFICATION_FAILED',
|
|
90
|
+
VERIFICATION_EXPIRED: 'VERIFICATION_EXPIRED',
|
|
91
|
+
NO_PUBKEY: 'NO_PUBKEY',
|
|
92
|
+
// Allowlist errors
|
|
93
|
+
NOT_ALLOWED: 'NOT_ALLOWED',
|
|
94
|
+
};
|
|
95
|
+
export const PresenceStatus = {
|
|
96
|
+
ONLINE: 'online',
|
|
97
|
+
AWAY: 'away',
|
|
98
|
+
BUSY: 'busy',
|
|
99
|
+
OFFLINE: 'offline',
|
|
100
|
+
LISTENING: 'listening'
|
|
101
|
+
};
|
|
102
|
+
export const ProposalStatus = {
|
|
103
|
+
PENDING: 'pending',
|
|
104
|
+
ACCEPTED: 'accepted',
|
|
105
|
+
REJECTED: 'rejected',
|
|
106
|
+
COMPLETED: 'completed',
|
|
107
|
+
DISPUTED: 'disputed',
|
|
108
|
+
EXPIRED: 'expired'
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Check if a target is a channel (#name) or agent (@name)
|
|
112
|
+
*/
|
|
113
|
+
export function isChannel(target) {
|
|
114
|
+
return Boolean(target && target.startsWith('#'));
|
|
115
|
+
}
|
|
116
|
+
export function isAgent(target) {
|
|
117
|
+
return Boolean(target && target.startsWith('@'));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Validate agent name
|
|
121
|
+
* - 1-32 characters
|
|
122
|
+
* - alphanumeric, dash, underscore
|
|
123
|
+
* - no spaces
|
|
124
|
+
*/
|
|
125
|
+
export function isValidName(name) {
|
|
126
|
+
if (!name || typeof name !== 'string')
|
|
127
|
+
return false;
|
|
128
|
+
if (name.length < 1 || name.length > 32)
|
|
129
|
+
return false;
|
|
130
|
+
return /^[a-zA-Z0-9_-]+$/.test(name);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validate channel name
|
|
134
|
+
* - starts with #
|
|
135
|
+
* - 2-32 characters total
|
|
136
|
+
* - alphanumeric, dash, underscore after #
|
|
137
|
+
*/
|
|
138
|
+
export function isValidChannel(channel) {
|
|
139
|
+
if (!channel || typeof channel !== 'string')
|
|
140
|
+
return false;
|
|
141
|
+
if (!channel.startsWith('#'))
|
|
142
|
+
return false;
|
|
143
|
+
const name = channel.slice(1);
|
|
144
|
+
if (name.length < 1 || name.length > 31)
|
|
145
|
+
return false;
|
|
146
|
+
return /^[a-zA-Z0-9_-]+$/.test(name);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Validate Ed25519 public key in PEM format
|
|
150
|
+
*/
|
|
151
|
+
export function isValidPubkey(pubkey) {
|
|
152
|
+
if (!pubkey || typeof pubkey !== 'string')
|
|
153
|
+
return false;
|
|
154
|
+
try {
|
|
155
|
+
const keyObj = crypto.createPublicKey(pubkey);
|
|
156
|
+
return keyObj.asymmetricKeyType === 'ed25519';
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Generate stable agent ID from pubkey
|
|
164
|
+
* Returns first 8 chars of SHA256 hash (hex)
|
|
165
|
+
*/
|
|
166
|
+
export function pubkeyToAgentId(pubkey) {
|
|
167
|
+
const hash = crypto.createHash('sha256').update(pubkey).digest('hex');
|
|
168
|
+
return hash.substring(0, 8);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Create a message object with timestamp
|
|
172
|
+
*/
|
|
173
|
+
export function createMessage(type, data = {}) {
|
|
174
|
+
return {
|
|
175
|
+
type,
|
|
176
|
+
ts: Date.now(),
|
|
177
|
+
...data
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Create an error message
|
|
182
|
+
*/
|
|
183
|
+
export function createError(code, message) {
|
|
184
|
+
return createMessage(ServerMessageType.ERROR, { code, message });
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Validate incoming client message
|
|
188
|
+
* Returns { valid: true, msg } or { valid: false, error }
|
|
189
|
+
*/
|
|
190
|
+
export function validateClientMessage(raw) {
|
|
191
|
+
let msg;
|
|
192
|
+
// Parse JSON
|
|
193
|
+
try {
|
|
194
|
+
msg = typeof raw === 'string' ? JSON.parse(raw) : raw;
|
|
195
|
+
}
|
|
196
|
+
catch (e) {
|
|
197
|
+
return { valid: false, error: 'Invalid JSON' };
|
|
198
|
+
}
|
|
199
|
+
// Must have type
|
|
200
|
+
if (!msg.type) {
|
|
201
|
+
return { valid: false, error: 'Missing message type' };
|
|
202
|
+
}
|
|
203
|
+
// Validate by type
|
|
204
|
+
switch (msg.type) {
|
|
205
|
+
case ClientMessageType.IDENTIFY:
|
|
206
|
+
if (!isValidName(msg.name)) {
|
|
207
|
+
return { valid: false, error: 'Invalid agent name' };
|
|
208
|
+
}
|
|
209
|
+
// Validate pubkey if provided
|
|
210
|
+
if (msg.pubkey !== undefined && msg.pubkey !== null) {
|
|
211
|
+
if (!isValidPubkey(msg.pubkey)) {
|
|
212
|
+
return { valid: false, error: 'Invalid public key format (must be Ed25519 PEM)' };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
case ClientMessageType.JOIN:
|
|
217
|
+
case ClientMessageType.LEAVE:
|
|
218
|
+
case ClientMessageType.LIST_AGENTS:
|
|
219
|
+
if (!isValidChannel(msg.channel)) {
|
|
220
|
+
return { valid: false, error: 'Invalid channel name' };
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
case ClientMessageType.MSG:
|
|
224
|
+
if (!msg.to) {
|
|
225
|
+
return { valid: false, error: 'Missing target' };
|
|
226
|
+
}
|
|
227
|
+
if (!isChannel(msg.to) && !isAgent(msg.to)) {
|
|
228
|
+
return { valid: false, error: 'Invalid target (must start with # or @)' };
|
|
229
|
+
}
|
|
230
|
+
if (typeof msg.content !== 'string') {
|
|
231
|
+
return { valid: false, error: 'Missing or invalid content' };
|
|
232
|
+
}
|
|
233
|
+
if (msg.content.length > 4096) {
|
|
234
|
+
return { valid: false, error: 'Content too long (max 4096 chars)' };
|
|
235
|
+
}
|
|
236
|
+
// Validate signature format if present
|
|
237
|
+
if (msg.sig !== undefined && typeof msg.sig !== 'string') {
|
|
238
|
+
return { valid: false, error: 'Invalid signature format' };
|
|
239
|
+
}
|
|
240
|
+
break;
|
|
241
|
+
case ClientMessageType.CREATE_CHANNEL:
|
|
242
|
+
if (!isValidChannel(msg.channel)) {
|
|
243
|
+
return { valid: false, error: 'Invalid channel name' };
|
|
244
|
+
}
|
|
245
|
+
break;
|
|
246
|
+
case ClientMessageType.INVITE:
|
|
247
|
+
if (!isValidChannel(msg.channel)) {
|
|
248
|
+
return { valid: false, error: 'Invalid channel name' };
|
|
249
|
+
}
|
|
250
|
+
if (!msg.agent || !isAgent(msg.agent)) {
|
|
251
|
+
return { valid: false, error: 'Invalid agent target' };
|
|
252
|
+
}
|
|
253
|
+
break;
|
|
254
|
+
case ClientMessageType.LIST_CHANNELS:
|
|
255
|
+
case ClientMessageType.PING:
|
|
256
|
+
// No additional validation needed
|
|
257
|
+
break;
|
|
258
|
+
case ClientMessageType.PROPOSAL:
|
|
259
|
+
// Proposals require: to, task, and signature
|
|
260
|
+
if (!msg.to) {
|
|
261
|
+
return { valid: false, error: 'Missing target (to)' };
|
|
262
|
+
}
|
|
263
|
+
if (!isAgent(msg.to)) {
|
|
264
|
+
return { valid: false, error: 'Proposals must be sent to an agent (@id)' };
|
|
265
|
+
}
|
|
266
|
+
if (!msg.task || typeof msg.task !== 'string') {
|
|
267
|
+
return { valid: false, error: 'Missing or invalid task description' };
|
|
268
|
+
}
|
|
269
|
+
if (!msg.sig) {
|
|
270
|
+
return { valid: false, error: 'Proposals must be signed' };
|
|
271
|
+
}
|
|
272
|
+
// Optional fields: amount, currency, payment_code, expires, terms, elo_stake
|
|
273
|
+
if (msg.expires !== undefined && typeof msg.expires !== 'number') {
|
|
274
|
+
return { valid: false, error: 'expires must be a number (seconds)' };
|
|
275
|
+
}
|
|
276
|
+
if (msg.elo_stake !== undefined && msg.elo_stake !== null) {
|
|
277
|
+
if (typeof msg.elo_stake !== 'number' || msg.elo_stake < 0 || !Number.isInteger(msg.elo_stake)) {
|
|
278
|
+
return { valid: false, error: 'elo_stake must be a non-negative integer' };
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
break;
|
|
282
|
+
case ClientMessageType.ACCEPT:
|
|
283
|
+
// Accept requires: proposal_id and signature
|
|
284
|
+
if (!msg.proposal_id) {
|
|
285
|
+
return { valid: false, error: 'Missing proposal_id' };
|
|
286
|
+
}
|
|
287
|
+
if (!msg.sig) {
|
|
288
|
+
return { valid: false, error: 'Accept must be signed' };
|
|
289
|
+
}
|
|
290
|
+
// Optional: elo_stake for acceptor's stake
|
|
291
|
+
if (msg.elo_stake !== undefined && msg.elo_stake !== null) {
|
|
292
|
+
if (typeof msg.elo_stake !== 'number' || msg.elo_stake < 0 || !Number.isInteger(msg.elo_stake)) {
|
|
293
|
+
return { valid: false, error: 'elo_stake must be a non-negative integer' };
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
break;
|
|
297
|
+
case ClientMessageType.REJECT:
|
|
298
|
+
// Reject requires: proposal_id and signature
|
|
299
|
+
if (!msg.proposal_id) {
|
|
300
|
+
return { valid: false, error: 'Missing proposal_id' };
|
|
301
|
+
}
|
|
302
|
+
if (!msg.sig) {
|
|
303
|
+
return { valid: false, error: 'Reject must be signed' };
|
|
304
|
+
}
|
|
305
|
+
break;
|
|
306
|
+
case ClientMessageType.COMPLETE:
|
|
307
|
+
// Complete requires: proposal_id, signature, and optionally proof
|
|
308
|
+
if (!msg.proposal_id) {
|
|
309
|
+
return { valid: false, error: 'Missing proposal_id' };
|
|
310
|
+
}
|
|
311
|
+
if (!msg.sig) {
|
|
312
|
+
return { valid: false, error: 'Complete must be signed' };
|
|
313
|
+
}
|
|
314
|
+
break;
|
|
315
|
+
case ClientMessageType.DISPUTE:
|
|
316
|
+
// Dispute requires: proposal_id, reason, and signature
|
|
317
|
+
if (!msg.proposal_id) {
|
|
318
|
+
return { valid: false, error: 'Missing proposal_id' };
|
|
319
|
+
}
|
|
320
|
+
if (!msg.reason || typeof msg.reason !== 'string') {
|
|
321
|
+
return { valid: false, error: 'Missing or invalid dispute reason' };
|
|
322
|
+
}
|
|
323
|
+
if (!msg.sig) {
|
|
324
|
+
return { valid: false, error: 'Dispute must be signed' };
|
|
325
|
+
}
|
|
326
|
+
break;
|
|
327
|
+
case ClientMessageType.REGISTER_SKILLS:
|
|
328
|
+
// Register skills requires: skills array and signature
|
|
329
|
+
if (!msg.skills || !Array.isArray(msg.skills)) {
|
|
330
|
+
return { valid: false, error: 'Missing or invalid skills array' };
|
|
331
|
+
}
|
|
332
|
+
if (msg.skills.length === 0) {
|
|
333
|
+
return { valid: false, error: 'Skills array cannot be empty' };
|
|
334
|
+
}
|
|
335
|
+
// Validate each skill has at least a capability
|
|
336
|
+
for (const skill of msg.skills) {
|
|
337
|
+
if (!skill.capability || typeof skill.capability !== 'string') {
|
|
338
|
+
return { valid: false, error: 'Each skill must have a capability string' };
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
if (!msg.sig) {
|
|
342
|
+
return { valid: false, error: 'Skill registration must be signed' };
|
|
343
|
+
}
|
|
344
|
+
break;
|
|
345
|
+
case ClientMessageType.SEARCH_SKILLS:
|
|
346
|
+
// Search skills requires: query object
|
|
347
|
+
if (!msg.query || typeof msg.query !== 'object') {
|
|
348
|
+
return { valid: false, error: 'Missing or invalid query object' };
|
|
349
|
+
}
|
|
350
|
+
// query_id is optional but useful for tracking responses
|
|
351
|
+
break;
|
|
352
|
+
case ClientMessageType.SET_PRESENCE:
|
|
353
|
+
// Set presence requires: status (online, away, busy, offline)
|
|
354
|
+
const validStatuses = ['online', 'away', 'busy', 'offline', 'listening'];
|
|
355
|
+
if (!msg.status || !validStatuses.includes(msg.status)) {
|
|
356
|
+
return { valid: false, error: `Invalid presence status. Must be one of: ${validStatuses.join(', ')}` };
|
|
357
|
+
}
|
|
358
|
+
// Optional: status_text for custom message
|
|
359
|
+
if (msg.status_text !== undefined && typeof msg.status_text !== 'string') {
|
|
360
|
+
return { valid: false, error: 'status_text must be a string' };
|
|
361
|
+
}
|
|
362
|
+
if (msg.status_text && msg.status_text.length > 100) {
|
|
363
|
+
return { valid: false, error: 'status_text too long (max 100 chars)' };
|
|
364
|
+
}
|
|
365
|
+
break;
|
|
366
|
+
case ClientMessageType.VERIFY_REQUEST:
|
|
367
|
+
// Verify request requires: target agent and nonce
|
|
368
|
+
if (!msg.target) {
|
|
369
|
+
return { valid: false, error: 'Missing target agent' };
|
|
370
|
+
}
|
|
371
|
+
if (!isAgent(msg.target)) {
|
|
372
|
+
return { valid: false, error: 'Target must be an agent (@id)' };
|
|
373
|
+
}
|
|
374
|
+
if (!msg.nonce || typeof msg.nonce !== 'string') {
|
|
375
|
+
return { valid: false, error: 'Missing or invalid nonce' };
|
|
376
|
+
}
|
|
377
|
+
if (msg.nonce.length < 16 || msg.nonce.length > 128) {
|
|
378
|
+
return { valid: false, error: 'Nonce must be 16-128 characters' };
|
|
379
|
+
}
|
|
380
|
+
break;
|
|
381
|
+
case ClientMessageType.VERIFY_RESPONSE:
|
|
382
|
+
// Verify response requires: request_id, nonce, and signature
|
|
383
|
+
if (!msg.request_id) {
|
|
384
|
+
return { valid: false, error: 'Missing request_id' };
|
|
385
|
+
}
|
|
386
|
+
if (!msg.nonce || typeof msg.nonce !== 'string') {
|
|
387
|
+
return { valid: false, error: 'Missing or invalid nonce' };
|
|
388
|
+
}
|
|
389
|
+
if (!msg.sig || typeof msg.sig !== 'string') {
|
|
390
|
+
return { valid: false, error: 'Missing or invalid signature' };
|
|
391
|
+
}
|
|
392
|
+
break;
|
|
393
|
+
case ClientMessageType.ADMIN_APPROVE:
|
|
394
|
+
if (!msg.pubkey || typeof msg.pubkey !== 'string') {
|
|
395
|
+
return { valid: false, error: 'Missing or invalid pubkey' };
|
|
396
|
+
}
|
|
397
|
+
if (!msg.admin_key || typeof msg.admin_key !== 'string') {
|
|
398
|
+
return { valid: false, error: 'Missing admin_key' };
|
|
399
|
+
}
|
|
400
|
+
break;
|
|
401
|
+
case ClientMessageType.ADMIN_REVOKE:
|
|
402
|
+
if (!msg.pubkey && !msg.agent_id) {
|
|
403
|
+
return { valid: false, error: 'Missing pubkey or agent_id' };
|
|
404
|
+
}
|
|
405
|
+
if (!msg.admin_key || typeof msg.admin_key !== 'string') {
|
|
406
|
+
return { valid: false, error: 'Missing admin_key' };
|
|
407
|
+
}
|
|
408
|
+
break;
|
|
409
|
+
case ClientMessageType.ADMIN_LIST:
|
|
410
|
+
if (!msg.admin_key || typeof msg.admin_key !== 'string') {
|
|
411
|
+
return { valid: false, error: 'Missing admin_key' };
|
|
412
|
+
}
|
|
413
|
+
break;
|
|
414
|
+
case ClientMessageType.VERIFY_IDENTITY:
|
|
415
|
+
if (!msg.challenge_id || typeof msg.challenge_id !== 'string') {
|
|
416
|
+
return { valid: false, error: 'Missing or invalid challenge_id' };
|
|
417
|
+
}
|
|
418
|
+
if (!msg.signature || typeof msg.signature !== 'string') {
|
|
419
|
+
return { valid: false, error: 'Missing or invalid signature' };
|
|
420
|
+
}
|
|
421
|
+
if (!msg.timestamp || typeof msg.timestamp !== 'number') {
|
|
422
|
+
return { valid: false, error: 'Missing or invalid timestamp' };
|
|
423
|
+
}
|
|
424
|
+
break;
|
|
425
|
+
default:
|
|
426
|
+
return { valid: false, error: `Unknown message type: ${msg.type}` };
|
|
427
|
+
}
|
|
428
|
+
return { valid: true, msg: msg };
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Generate a unique agent ID
|
|
432
|
+
*/
|
|
433
|
+
export function generateAgentId() {
|
|
434
|
+
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
435
|
+
let id = '';
|
|
436
|
+
for (let i = 0; i < 8; i++) {
|
|
437
|
+
id += chars[Math.floor(Math.random() * chars.length)];
|
|
438
|
+
}
|
|
439
|
+
return id;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Serialize message for sending over WebSocket
|
|
443
|
+
*/
|
|
444
|
+
export function serialize(msg) {
|
|
445
|
+
return JSON.stringify(msg);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Parse message from WebSocket
|
|
449
|
+
*/
|
|
450
|
+
export function parse(data) {
|
|
451
|
+
return JSON.parse(data);
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Generate a unique proposal ID
|
|
455
|
+
* Format: prop_<timestamp>_<random>
|
|
456
|
+
*/
|
|
457
|
+
export function generateProposalId() {
|
|
458
|
+
const timestamp = Date.now().toString(36);
|
|
459
|
+
const random = crypto.randomBytes(4).toString('hex');
|
|
460
|
+
return `prop_${timestamp}_${random}`;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Check if a message type is a proposal-related type
|
|
464
|
+
*/
|
|
465
|
+
export function isProposalMessage(type) {
|
|
466
|
+
const proposalTypes = [
|
|
467
|
+
ClientMessageType.PROPOSAL,
|
|
468
|
+
ClientMessageType.ACCEPT,
|
|
469
|
+
ClientMessageType.REJECT,
|
|
470
|
+
ClientMessageType.COMPLETE,
|
|
471
|
+
ClientMessageType.DISPUTE
|
|
472
|
+
];
|
|
473
|
+
return proposalTypes.includes(type);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Generate a unique verification request ID
|
|
477
|
+
* Format: verify_<timestamp>_<random>
|
|
478
|
+
*/
|
|
479
|
+
export function generateVerifyId() {
|
|
480
|
+
const timestamp = Date.now().toString(36);
|
|
481
|
+
const random = crypto.randomBytes(4).toString('hex');
|
|
482
|
+
return `verify_${timestamp}_${random}`;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Generate a random nonce for identity verification
|
|
486
|
+
* Returns a 32-character hex string
|
|
487
|
+
*/
|
|
488
|
+
export function generateNonce() {
|
|
489
|
+
return crypto.randomBytes(16).toString('hex');
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Generate a unique challenge ID
|
|
493
|
+
* Format: chal_<timestamp36>_<random>
|
|
494
|
+
*/
|
|
495
|
+
export function generateChallengeId() {
|
|
496
|
+
const timestamp = Date.now().toString(36);
|
|
497
|
+
const random = crypto.randomBytes(4).toString('hex');
|
|
498
|
+
return `chal_${timestamp}_${random}`;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Generate the canonical signing content for challenge-response auth.
|
|
502
|
+
* Client signs this to prove private key ownership.
|
|
503
|
+
*/
|
|
504
|
+
export function generateAuthSigningContent(nonce, challengeId, timestamp) {
|
|
505
|
+
return `AGENTCHAT_AUTH|${nonce}|${challengeId}|${timestamp}`;
|
|
506
|
+
}
|
|
507
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../lib/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentChat Receipts Module
|
|
3
|
+
* Stores and manages COMPLETE receipts for portable reputation
|
|
4
|
+
*
|
|
5
|
+
* Receipts are proof of completed work between agents.
|
|
6
|
+
* They can be exported for reputation aggregation.
|
|
7
|
+
*/
|
|
8
|
+
import type { RatingChanges } from './reputation.js';
|
|
9
|
+
export interface ProposalInfo {
|
|
10
|
+
from?: string;
|
|
11
|
+
to?: string;
|
|
12
|
+
task?: string;
|
|
13
|
+
amount?: number;
|
|
14
|
+
currency?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface Receipt {
|
|
17
|
+
type?: string;
|
|
18
|
+
status?: string;
|
|
19
|
+
proposal_id?: string;
|
|
20
|
+
proposal?: ProposalInfo;
|
|
21
|
+
from?: string;
|
|
22
|
+
to?: string;
|
|
23
|
+
amount?: number;
|
|
24
|
+
currency?: string;
|
|
25
|
+
completed_by?: string;
|
|
26
|
+
completed_at?: number;
|
|
27
|
+
disputed_at?: number;
|
|
28
|
+
stored_at?: number;
|
|
29
|
+
ts?: number;
|
|
30
|
+
proof?: string;
|
|
31
|
+
_ratingChanges?: RatingChanges;
|
|
32
|
+
}
|
|
33
|
+
export interface StoredReceipt extends Receipt {
|
|
34
|
+
stored_at: number;
|
|
35
|
+
}
|
|
36
|
+
export interface AppendReceiptOptions {
|
|
37
|
+
updateRatings?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface ReceiptStats {
|
|
40
|
+
count: number;
|
|
41
|
+
counterparties: string[];
|
|
42
|
+
dateRange: {
|
|
43
|
+
oldest: string;
|
|
44
|
+
newest: string;
|
|
45
|
+
} | null;
|
|
46
|
+
currencies: Record<string, CurrencyStats>;
|
|
47
|
+
}
|
|
48
|
+
export interface CurrencyStats {
|
|
49
|
+
count: number;
|
|
50
|
+
totalAmount: number;
|
|
51
|
+
}
|
|
52
|
+
export declare const DEFAULT_RECEIPTS_PATH: string;
|
|
53
|
+
/**
|
|
54
|
+
* Append a receipt to the receipts file
|
|
55
|
+
* @param receipt - The COMPLETE message/receipt to store
|
|
56
|
+
* @param receiptsPath - Path to receipts file
|
|
57
|
+
* @param options - Options
|
|
58
|
+
* @param options.updateRatings - Whether to update ELO ratings (default: true)
|
|
59
|
+
*/
|
|
60
|
+
export declare function appendReceipt(receipt: Receipt, receiptsPath?: string, options?: AppendReceiptOptions): Promise<StoredReceipt>;
|
|
61
|
+
/**
|
|
62
|
+
* Read all receipts from the receipts file
|
|
63
|
+
* @param receiptsPath - Path to receipts file
|
|
64
|
+
* @returns Array of receipt objects
|
|
65
|
+
*/
|
|
66
|
+
export declare function readReceipts(receiptsPath?: string): Promise<Receipt[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Filter receipts by agent ID (where agent is a party)
|
|
69
|
+
* @param receipts - Array of receipts
|
|
70
|
+
* @param agentId - Agent ID to filter by
|
|
71
|
+
* @returns Filtered receipts
|
|
72
|
+
*/
|
|
73
|
+
export declare function filterByAgent(receipts: Receipt[], agentId: string): Receipt[];
|
|
74
|
+
/**
|
|
75
|
+
* Get unique counterparties from receipts
|
|
76
|
+
* @param receipts - Array of receipts
|
|
77
|
+
* @param agentId - Our agent ID
|
|
78
|
+
* @returns Array of unique counterparty IDs
|
|
79
|
+
*/
|
|
80
|
+
export declare function getCounterparties(receipts: Receipt[], agentId: string): string[];
|
|
81
|
+
/**
|
|
82
|
+
* Get receipt statistics
|
|
83
|
+
* @param receipts - Array of receipts
|
|
84
|
+
* @param agentId - Optional agent ID for filtering
|
|
85
|
+
* @returns Statistics object
|
|
86
|
+
*/
|
|
87
|
+
export declare function getStats(receipts: Receipt[], agentId?: string | null): ReceiptStats;
|
|
88
|
+
/**
|
|
89
|
+
* Export receipts in specified format
|
|
90
|
+
* @param receipts - Array of receipts
|
|
91
|
+
* @param format - 'json' or 'yaml'
|
|
92
|
+
* @returns Formatted output
|
|
93
|
+
*/
|
|
94
|
+
export declare function exportReceipts(receipts: Receipt[], format?: 'json' | 'yaml'): string;
|
|
95
|
+
/**
|
|
96
|
+
* Check if a receipt should be stored (we are a party to it)
|
|
97
|
+
* @param completeMsg - The COMPLETE message
|
|
98
|
+
* @param ourAgentId - Our agent ID
|
|
99
|
+
* @returns boolean
|
|
100
|
+
*/
|
|
101
|
+
export declare function shouldStoreReceipt(completeMsg: Receipt, ourAgentId: string): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* ReceiptStore class for managing receipts
|
|
104
|
+
*/
|
|
105
|
+
export declare class ReceiptStore {
|
|
106
|
+
private receiptsPath;
|
|
107
|
+
private _receipts;
|
|
108
|
+
constructor(receiptsPath?: string);
|
|
109
|
+
/**
|
|
110
|
+
* Load receipts from file
|
|
111
|
+
*/
|
|
112
|
+
load(): Promise<Receipt[]>;
|
|
113
|
+
/**
|
|
114
|
+
* Get all receipts (loads if needed)
|
|
115
|
+
*/
|
|
116
|
+
getAll(): Promise<Receipt[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Add a receipt
|
|
119
|
+
*/
|
|
120
|
+
add(receipt: Receipt): Promise<StoredReceipt>;
|
|
121
|
+
/**
|
|
122
|
+
* Get receipts for an agent
|
|
123
|
+
*/
|
|
124
|
+
getForAgent(agentId: string): Promise<Receipt[]>;
|
|
125
|
+
/**
|
|
126
|
+
* Get statistics
|
|
127
|
+
*/
|
|
128
|
+
getStats(agentId?: string | null): Promise<ReceiptStats>;
|
|
129
|
+
/**
|
|
130
|
+
* Export receipts
|
|
131
|
+
*/
|
|
132
|
+
export(format?: 'json' | 'yaml', agentId?: string | null): Promise<string>;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=receipts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipts.d.ts","sourceRoot":"","sources":["../../lib/receipts.ts"],"names":[],"mappings":"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"}
|