@tjamescouch/agentchat 0.22.0 → 0.23.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 (135) hide show
  1. package/Dockerfile +1 -1
  2. package/dist/bin/agentchat.d.ts +7 -0
  3. package/dist/bin/agentchat.d.ts.map +1 -0
  4. package/dist/bin/agentchat.js +1511 -0
  5. package/dist/bin/agentchat.js.map +1 -0
  6. package/dist/lib/allowlist.d.ts +77 -0
  7. package/dist/lib/allowlist.d.ts.map +1 -0
  8. package/dist/lib/allowlist.js +151 -0
  9. package/dist/lib/allowlist.js.map +1 -0
  10. package/dist/lib/client.d.ts +147 -0
  11. package/dist/lib/client.d.ts.map +1 -0
  12. package/dist/lib/client.js +704 -0
  13. package/dist/lib/client.js.map +1 -0
  14. package/dist/lib/daemon.d.ts +122 -0
  15. package/dist/lib/daemon.d.ts.map +1 -0
  16. package/dist/lib/daemon.js +523 -0
  17. package/dist/lib/daemon.js.map +1 -0
  18. package/dist/lib/deploy/akash.d.ts +271 -0
  19. package/dist/lib/deploy/akash.d.ts.map +1 -0
  20. package/dist/lib/deploy/akash.js +671 -0
  21. package/dist/lib/deploy/akash.js.map +1 -0
  22. package/dist/lib/deploy/config.d.ts +62 -0
  23. package/dist/lib/deploy/config.d.ts.map +1 -0
  24. package/dist/lib/deploy/config.js +116 -0
  25. package/dist/lib/deploy/config.js.map +1 -0
  26. package/dist/lib/deploy/docker.d.ts +37 -0
  27. package/dist/lib/deploy/docker.d.ts.map +1 -0
  28. package/dist/lib/deploy/docker.js +122 -0
  29. package/dist/lib/deploy/docker.js.map +1 -0
  30. package/dist/lib/deploy/index.d.ts +11 -0
  31. package/dist/lib/deploy/index.d.ts.map +1 -0
  32. package/dist/lib/deploy/index.js +11 -0
  33. package/dist/lib/deploy/index.js.map +1 -0
  34. package/dist/lib/escrow-hooks.d.ts +199 -0
  35. package/dist/lib/escrow-hooks.d.ts.map +1 -0
  36. package/dist/lib/escrow-hooks.js +221 -0
  37. package/dist/lib/escrow-hooks.js.map +1 -0
  38. package/dist/lib/identity.d.ts +134 -0
  39. package/dist/lib/identity.d.ts.map +1 -0
  40. package/dist/lib/identity.js +334 -0
  41. package/dist/lib/identity.js.map +1 -0
  42. package/dist/lib/jitter.d.ts +42 -0
  43. package/dist/lib/jitter.d.ts.map +1 -0
  44. package/{lib → dist/lib}/jitter.js +16 -19
  45. package/dist/lib/jitter.js.map +1 -0
  46. package/dist/lib/proposals.d.ts +223 -0
  47. package/dist/lib/proposals.d.ts.map +1 -0
  48. package/dist/lib/proposals.js +379 -0
  49. package/dist/lib/proposals.js.map +1 -0
  50. package/dist/lib/protocol.d.ts +220 -0
  51. package/dist/lib/protocol.d.ts.map +1 -0
  52. package/dist/lib/protocol.js +507 -0
  53. package/dist/lib/protocol.js.map +1 -0
  54. package/dist/lib/receipts.d.ts +134 -0
  55. package/dist/lib/receipts.d.ts.map +1 -0
  56. package/dist/lib/receipts.js +270 -0
  57. package/dist/lib/receipts.js.map +1 -0
  58. package/dist/lib/reputation.d.ts +250 -0
  59. package/dist/lib/reputation.d.ts.map +1 -0
  60. package/dist/lib/reputation.js +586 -0
  61. package/dist/lib/reputation.js.map +1 -0
  62. package/dist/lib/security.d.ts +27 -0
  63. package/dist/lib/security.d.ts.map +1 -0
  64. package/dist/lib/security.js +150 -0
  65. package/dist/lib/security.js.map +1 -0
  66. package/dist/lib/server/handlers/admin.d.ts +26 -0
  67. package/dist/lib/server/handlers/admin.d.ts.map +1 -0
  68. package/dist/lib/server/handlers/admin.js +76 -0
  69. package/dist/lib/server/handlers/admin.js.map +1 -0
  70. package/dist/lib/server/handlers/identity.d.ts +36 -0
  71. package/dist/lib/server/handlers/identity.d.ts.map +1 -0
  72. package/dist/lib/server/handlers/identity.js +330 -0
  73. package/dist/lib/server/handlers/identity.js.map +1 -0
  74. package/dist/lib/server/handlers/index.d.ts +10 -0
  75. package/dist/lib/server/handlers/index.d.ts.map +1 -0
  76. package/dist/lib/server/handlers/index.js +15 -0
  77. package/dist/lib/server/handlers/index.js.map +1 -0
  78. package/dist/lib/server/handlers/message.d.ts +47 -0
  79. package/dist/lib/server/handlers/message.d.ts.map +1 -0
  80. package/dist/lib/server/handlers/message.js +265 -0
  81. package/dist/lib/server/handlers/message.js.map +1 -0
  82. package/dist/lib/server/handlers/presence.d.ts +18 -0
  83. package/dist/lib/server/handlers/presence.d.ts.map +1 -0
  84. package/dist/lib/server/handlers/presence.js +35 -0
  85. package/dist/lib/server/handlers/presence.js.map +1 -0
  86. package/dist/lib/server/handlers/proposal.d.ts +38 -0
  87. package/dist/lib/server/handlers/proposal.d.ts.map +1 -0
  88. package/dist/lib/server/handlers/proposal.js +273 -0
  89. package/dist/lib/server/handlers/proposal.js.map +1 -0
  90. package/dist/lib/server/handlers/skills.d.ts +22 -0
  91. package/dist/lib/server/handlers/skills.d.ts.map +1 -0
  92. package/dist/lib/server/handlers/skills.js +119 -0
  93. package/dist/lib/server/handlers/skills.js.map +1 -0
  94. package/dist/lib/server-directory.d.ts +85 -0
  95. package/dist/lib/server-directory.d.ts.map +1 -0
  96. package/dist/lib/server-directory.js +177 -0
  97. package/dist/lib/server-directory.js.map +1 -0
  98. package/dist/lib/server.d.ts +162 -0
  99. package/dist/lib/server.d.ts.map +1 -0
  100. package/dist/lib/server.js +602 -0
  101. package/dist/lib/server.js.map +1 -0
  102. package/dist/lib/types.d.ts +461 -0
  103. package/dist/lib/types.d.ts.map +1 -0
  104. package/dist/lib/types.js +98 -0
  105. package/dist/lib/types.js.map +1 -0
  106. package/package.json +22 -13
  107. package/bin/agentchat.js +0 -1617
  108. package/lib/chat.py +0 -241
  109. package/lib/client.js +0 -821
  110. package/lib/daemon.js +0 -562
  111. package/lib/deploy/akash.js +0 -811
  112. package/lib/deploy/config.js +0 -128
  113. package/lib/deploy/docker.js +0 -132
  114. package/lib/deploy/index.js +0 -24
  115. package/lib/elo_swarm.py +0 -569
  116. package/lib/escrow-hooks.js +0 -237
  117. package/lib/identity.js +0 -376
  118. package/lib/proposals.js +0 -426
  119. package/lib/protocol.js +0 -484
  120. package/lib/receipts.js +0 -294
  121. package/lib/reputation.js +0 -664
  122. package/lib/security.js +0 -183
  123. package/lib/server/handlers/identity.js +0 -242
  124. package/lib/server/handlers/index.js +0 -42
  125. package/lib/server/handlers/message.js +0 -306
  126. package/lib/server/handlers/presence.js +0 -44
  127. package/lib/server/handlers/proposal.js +0 -358
  128. package/lib/server/handlers/skills.js +0 -141
  129. package/lib/server-directory.js +0 -181
  130. package/lib/server.js +0 -528
  131. package/lib/supervisor/USAGE.md +0 -110
  132. package/lib/supervisor/agent-supervisor.sh +0 -135
  133. package/lib/supervisor/agentctl.sh +0 -250
  134. package/lib/supervisor/killswitch.sh +0 -36
  135. package/lib/supervisor/notify.sh +0 -19
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Proposal Handlers
3
+ * Handles proposal, accept, reject, complete, dispute operations
4
+ */
5
+ import { ServerMessageType, ErrorCode, createMessage, createError, } from '../../protocol.js';
6
+ import { formatProposal, formatProposalResponse } from '../../proposals.js';
7
+ import { EscrowEvent, createEscrowCreatedPayload, createCompletionPayload, createDisputePayload, } from '../../escrow-hooks.js';
8
+ /**
9
+ * Handle PROPOSAL command
10
+ */
11
+ export function handleProposal(server, ws, msg) {
12
+ const agent = server.agents.get(ws);
13
+ if (!agent) {
14
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
15
+ return;
16
+ }
17
+ // Proposals require a persistent identity (signature verification)
18
+ if (!agent.pubkey) {
19
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Proposals require persistent identity'));
20
+ return;
21
+ }
22
+ const targetId = msg.to.slice(1);
23
+ const targetWs = server.agentById.get(targetId);
24
+ if (!targetWs) {
25
+ server._send(ws, createError(ErrorCode.AGENT_NOT_FOUND, `Agent ${msg.to} not found`));
26
+ return;
27
+ }
28
+ // Create proposal in store
29
+ const proposal = server.proposals.create({
30
+ from: `@${agent.id}`,
31
+ to: msg.to,
32
+ task: msg.task,
33
+ amount: msg.amount,
34
+ currency: msg.currency,
35
+ payment_code: msg.payment_code,
36
+ terms: msg.terms,
37
+ expires: msg.expires,
38
+ sig: msg.sig,
39
+ elo_stake: msg.elo_stake || null
40
+ });
41
+ server._log('proposal', { id: proposal.id, from: agent.id, to: targetId });
42
+ // Send to target
43
+ const outMsg = createMessage(ServerMessageType.PROPOSAL, {
44
+ ...formatProposal(proposal)
45
+ });
46
+ server._send(targetWs, outMsg);
47
+ // Echo back to sender with the assigned ID
48
+ server._send(ws, outMsg);
49
+ }
50
+ /**
51
+ * Handle ACCEPT command
52
+ */
53
+ export async function handleAccept(server, ws, msg) {
54
+ const agent = server.agents.get(ws);
55
+ if (!agent) {
56
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
57
+ return;
58
+ }
59
+ if (!agent.pubkey) {
60
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Accepting proposals requires persistent identity'));
61
+ return;
62
+ }
63
+ // Get proposal first to check stakes
64
+ const existingProposal = server.proposals.get(msg.proposal_id);
65
+ if (!existingProposal) {
66
+ server._send(ws, createError(ErrorCode.PROPOSAL_NOT_FOUND, 'Proposal not found'));
67
+ return;
68
+ }
69
+ const proposerStake = existingProposal.proposer_stake || 0;
70
+ const acceptorStake = msg.elo_stake || 0;
71
+ // Validate proposer can stake (if they declared a stake)
72
+ if (proposerStake > 0) {
73
+ const canProposerStake = await server.reputationStore.canStake(existingProposal.from, proposerStake);
74
+ if (!canProposerStake.canStake) {
75
+ server._send(ws, createError(ErrorCode.INSUFFICIENT_REPUTATION, `Proposer: ${canProposerStake.reason}`));
76
+ return;
77
+ }
78
+ }
79
+ // Validate acceptor can stake (if they declared a stake)
80
+ if (acceptorStake > 0) {
81
+ const canAcceptorStake = await server.reputationStore.canStake(`@${agent.id}`, acceptorStake);
82
+ if (!canAcceptorStake.canStake) {
83
+ server._send(ws, createError(ErrorCode.INSUFFICIENT_REPUTATION, canAcceptorStake.reason));
84
+ return;
85
+ }
86
+ }
87
+ const result = server.proposals.accept(msg.proposal_id, `@${agent.id}`, msg.sig, msg.payment_code, acceptorStake);
88
+ if (result.error) {
89
+ server._send(ws, createError(ErrorCode.INVALID_PROPOSAL, result.error));
90
+ return;
91
+ }
92
+ const proposal = result.proposal;
93
+ // Create escrow if either party has a stake
94
+ if (proposerStake > 0 || acceptorStake > 0) {
95
+ const escrowResult = await server.reputationStore.createEscrow(proposal.id, { agent_id: proposal.from, stake: proposerStake }, { agent_id: proposal.to, stake: acceptorStake }, proposal.expires);
96
+ if (escrowResult.success) {
97
+ proposal.stakes_escrowed = true;
98
+ server._log('escrow_created', {
99
+ proposal_id: proposal.id,
100
+ proposer_stake: proposerStake,
101
+ acceptor_stake: acceptorStake
102
+ });
103
+ // Emit escrow:created hook for external integrations
104
+ server.escrowHooks.emit(EscrowEvent.CREATED, createEscrowCreatedPayload(proposal, escrowResult))
105
+ .catch((err) => server._log('escrow_hook_error', { event: 'created', error: err.message }));
106
+ }
107
+ else {
108
+ server._log('escrow_error', { proposal_id: proposal.id, error: escrowResult.error });
109
+ }
110
+ }
111
+ server._log('accept', { id: proposal.id, by: agent.id, proposer_stake: proposerStake, acceptor_stake: acceptorStake });
112
+ // Notify the proposal creator
113
+ const creatorId = proposal.from.slice(1);
114
+ const creatorWs = server.agentById.get(creatorId);
115
+ const outMsg = createMessage(ServerMessageType.ACCEPT, {
116
+ ...formatProposalResponse(proposal, 'accept')
117
+ });
118
+ if (creatorWs) {
119
+ server._send(creatorWs, outMsg);
120
+ }
121
+ // Echo to acceptor
122
+ server._send(ws, outMsg);
123
+ }
124
+ /**
125
+ * Handle REJECT command
126
+ */
127
+ export function handleReject(server, ws, msg) {
128
+ const agent = server.agents.get(ws);
129
+ if (!agent) {
130
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
131
+ return;
132
+ }
133
+ if (!agent.pubkey) {
134
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Rejecting proposals requires persistent identity'));
135
+ return;
136
+ }
137
+ const result = server.proposals.reject(msg.proposal_id, `@${agent.id}`, msg.sig, msg.reason);
138
+ if (result.error) {
139
+ server._send(ws, createError(ErrorCode.INVALID_PROPOSAL, result.error));
140
+ return;
141
+ }
142
+ const proposal = result.proposal;
143
+ server._log('reject', { id: proposal.id, by: agent.id });
144
+ // Notify the proposal creator
145
+ const creatorId = proposal.from.slice(1);
146
+ const creatorWs = server.agentById.get(creatorId);
147
+ const outMsg = createMessage(ServerMessageType.REJECT, {
148
+ ...formatProposalResponse(proposal, 'reject')
149
+ });
150
+ if (creatorWs) {
151
+ server._send(creatorWs, outMsg);
152
+ }
153
+ // Echo to rejector
154
+ server._send(ws, outMsg);
155
+ }
156
+ /**
157
+ * Handle COMPLETE command
158
+ */
159
+ export async function handleComplete(server, ws, msg) {
160
+ const agent = server.agents.get(ws);
161
+ if (!agent) {
162
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
163
+ return;
164
+ }
165
+ if (!agent.pubkey) {
166
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Completing proposals requires persistent identity'));
167
+ return;
168
+ }
169
+ const result = server.proposals.complete(msg.proposal_id, `@${agent.id}`, msg.sig, msg.proof);
170
+ if (result.error) {
171
+ server._send(ws, createError(ErrorCode.INVALID_PROPOSAL, result.error));
172
+ return;
173
+ }
174
+ const proposal = result.proposal;
175
+ server._log('complete', { id: proposal.id, by: agent.id });
176
+ // Update reputation ratings (includes escrow settlement)
177
+ let ratingChanges = null;
178
+ try {
179
+ ratingChanges = await server.reputationStore.processCompletion({
180
+ type: 'COMPLETE',
181
+ proposal_id: proposal.id,
182
+ from: proposal.from,
183
+ to: proposal.to,
184
+ amount: proposal.amount
185
+ });
186
+ server._log('reputation_updated', {
187
+ proposal_id: proposal.id,
188
+ changes: ratingChanges,
189
+ escrow: ratingChanges?._escrow
190
+ });
191
+ // Emit settlement:completion hook for external integrations
192
+ if (ratingChanges?._escrow) {
193
+ server.escrowHooks.emit(EscrowEvent.COMPLETION_SETTLED, createCompletionPayload(proposal, ratingChanges))
194
+ .catch((err) => server._log('escrow_hook_error', { event: 'completion', error: err.message }));
195
+ }
196
+ }
197
+ catch (err) {
198
+ server._log('reputation_error', { error: err.message });
199
+ }
200
+ // Notify both parties
201
+ const outMsg = createMessage(ServerMessageType.COMPLETE, {
202
+ ...formatProposalResponse(proposal, 'complete'),
203
+ rating_changes: ratingChanges
204
+ });
205
+ // Notify the other party
206
+ const otherId = proposal.from === `@${agent.id}` ? proposal.to.slice(1) : proposal.from.slice(1);
207
+ const otherWs = server.agentById.get(otherId);
208
+ if (otherWs) {
209
+ server._send(otherWs, outMsg);
210
+ }
211
+ // Echo to completer
212
+ server._send(ws, outMsg);
213
+ }
214
+ /**
215
+ * Handle DISPUTE command
216
+ */
217
+ export async function handleDispute(server, ws, msg) {
218
+ const agent = server.agents.get(ws);
219
+ if (!agent) {
220
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
221
+ return;
222
+ }
223
+ if (!agent.pubkey) {
224
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Disputing proposals requires persistent identity'));
225
+ return;
226
+ }
227
+ const result = server.proposals.dispute(msg.proposal_id, `@${agent.id}`, msg.sig, msg.reason);
228
+ if (result.error) {
229
+ server._send(ws, createError(ErrorCode.INVALID_PROPOSAL, result.error));
230
+ return;
231
+ }
232
+ const proposal = result.proposal;
233
+ server._log('dispute', { id: proposal.id, by: agent.id, reason: msg.reason });
234
+ // Update reputation ratings (includes escrow settlement)
235
+ let ratingChanges = null;
236
+ try {
237
+ ratingChanges = await server.reputationStore.processDispute({
238
+ type: 'DISPUTE',
239
+ proposal_id: proposal.id,
240
+ from: proposal.from,
241
+ to: proposal.to,
242
+ amount: proposal.amount,
243
+ disputed_by: `@${agent.id}`
244
+ });
245
+ server._log('reputation_updated', {
246
+ proposal_id: proposal.id,
247
+ changes: ratingChanges,
248
+ escrow: ratingChanges?._escrow
249
+ });
250
+ // Emit settlement:dispute hook for external integrations
251
+ if (ratingChanges?._escrow) {
252
+ server.escrowHooks.emit(EscrowEvent.DISPUTE_SETTLED, createDisputePayload(proposal, ratingChanges))
253
+ .catch((err) => server._log('escrow_hook_error', { event: 'dispute', error: err.message }));
254
+ }
255
+ }
256
+ catch (err) {
257
+ server._log('reputation_error', { error: err.message });
258
+ }
259
+ // Notify both parties
260
+ const outMsg = createMessage(ServerMessageType.DISPUTE, {
261
+ ...formatProposalResponse(proposal, 'dispute'),
262
+ rating_changes: ratingChanges
263
+ });
264
+ // Notify the other party
265
+ const otherId = proposal.from === `@${agent.id}` ? proposal.to.slice(1) : proposal.from.slice(1);
266
+ const otherWs = server.agentById.get(otherId);
267
+ if (otherWs) {
268
+ server._send(otherWs, outMsg);
269
+ }
270
+ // Echo to disputer
271
+ server._send(ws, outMsg);
272
+ }
273
+ //# sourceMappingURL=proposal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../../../lib/server/handlers/proposal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Skills Handlers
3
+ * Handles skill registration and search
4
+ */
5
+ import type { WebSocket } from 'ws';
6
+ import type { AgentChatServer } from '../../server.js';
7
+ import type { RegisterSkillsMessage, SearchSkillsMessage } from '../../types.js';
8
+ interface ExtendedWebSocket extends WebSocket {
9
+ _connectedAt?: number;
10
+ _realIp?: string;
11
+ _userAgent?: string;
12
+ }
13
+ /**
14
+ * Handle REGISTER_SKILLS command
15
+ */
16
+ export declare function handleRegisterSkills(server: AgentChatServer, ws: ExtendedWebSocket, msg: RegisterSkillsMessage): void;
17
+ /**
18
+ * Handle SEARCH_SKILLS command
19
+ */
20
+ export declare function handleSearchSkills(server: AgentChatServer, ws: ExtendedWebSocket, msg: SearchSkillsMessage): Promise<void>;
21
+ export {};
22
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../lib/server/handlers/skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAS,MAAM,gBAAgB,CAAC;AASxF,UAAU,iBAAkB,SAAQ,SAAS;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAuCrH;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFhI"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Skills Handlers
3
+ * Handles skill registration and search
4
+ */
5
+ import { ServerMessageType, ErrorCode, createMessage, createError, } from '../../protocol.js';
6
+ /**
7
+ * Handle REGISTER_SKILLS command
8
+ */
9
+ export function handleRegisterSkills(server, ws, msg) {
10
+ const agent = server.agents.get(ws);
11
+ if (!agent) {
12
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
13
+ return;
14
+ }
15
+ if (!agent.pubkey) {
16
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Skill registration requires persistent identity'));
17
+ return;
18
+ }
19
+ // Store skills for this agent
20
+ const registration = {
21
+ agent_id: `@${agent.id}`,
22
+ skills: msg.skills,
23
+ registered_at: Date.now(),
24
+ sig: msg.sig
25
+ };
26
+ server.skillsRegistry.set(agent.id, registration);
27
+ server._log('skills_registered', { agent: agent.id, count: msg.skills.length });
28
+ // Notify the registering agent
29
+ server._send(ws, createMessage(ServerMessageType.SKILLS_REGISTERED, {
30
+ agent_id: `@${agent.id}`,
31
+ skills_count: msg.skills.length,
32
+ registered_at: registration.registered_at
33
+ }));
34
+ // Optionally broadcast to #discovery channel if it exists
35
+ if (server.channels.has('#discovery')) {
36
+ server._broadcast('#discovery', createMessage(ServerMessageType.MSG, {
37
+ from: '@server',
38
+ to: '#discovery',
39
+ content: `Agent @${agent.id} registered ${msg.skills.length} skill(s): ${msg.skills.map(s => s.capability).join(', ')}`
40
+ }));
41
+ }
42
+ }
43
+ /**
44
+ * Handle SEARCH_SKILLS command
45
+ */
46
+ export async function handleSearchSkills(server, ws, msg) {
47
+ const agent = server.agents.get(ws);
48
+ if (!agent) {
49
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
50
+ return;
51
+ }
52
+ const query = msg.query || {};
53
+ const results = [];
54
+ // Search through all registered skills
55
+ for (const [, registration] of server.skillsRegistry) {
56
+ for (const skill of registration.skills) {
57
+ let matches = true;
58
+ // Filter by capability (substring match, case-insensitive)
59
+ if (query.capability) {
60
+ const cap = skill.capability.toLowerCase();
61
+ const search = query.capability.toLowerCase();
62
+ if (!cap.includes(search)) {
63
+ matches = false;
64
+ }
65
+ }
66
+ // Filter by max_rate
67
+ if (query.max_rate !== undefined && skill.rate !== undefined) {
68
+ if (skill.rate > query.max_rate) {
69
+ matches = false;
70
+ }
71
+ }
72
+ // Filter by currency
73
+ if (query.currency && skill.currency) {
74
+ if (skill.currency.toLowerCase() !== query.currency.toLowerCase()) {
75
+ matches = false;
76
+ }
77
+ }
78
+ if (matches) {
79
+ results.push({
80
+ agent_id: registration.agent_id,
81
+ ...skill,
82
+ registered_at: registration.registered_at
83
+ });
84
+ }
85
+ }
86
+ }
87
+ // Enrich results with reputation data
88
+ const uniqueAgentIds = [...new Set(results.map(r => r.agent_id))];
89
+ const ratingCache = new Map();
90
+ for (const agentId of uniqueAgentIds) {
91
+ const ratingInfo = await server.reputationStore.getRating(agentId);
92
+ ratingCache.set(agentId, ratingInfo);
93
+ }
94
+ // Add rating info to each result
95
+ for (const result of results) {
96
+ const ratingInfo = ratingCache.get(result.agent_id);
97
+ if (ratingInfo) {
98
+ result.rating = ratingInfo.rating;
99
+ result.transactions = ratingInfo.transactions;
100
+ }
101
+ }
102
+ // Sort by rating (highest first), then by registration time
103
+ results.sort((a, b) => {
104
+ if ((b.rating || 0) !== (a.rating || 0))
105
+ return (b.rating || 0) - (a.rating || 0);
106
+ return b.registered_at - a.registered_at;
107
+ });
108
+ // Limit results
109
+ const limit = query.limit || 50;
110
+ const limitedResults = results.slice(0, limit);
111
+ server._log('skills_search', { agent: agent.id, query, results_count: limitedResults.length });
112
+ server._send(ws, createMessage(ServerMessageType.SEARCH_RESULTS, {
113
+ query_id: msg.query_id || null,
114
+ query,
115
+ results: limitedResults,
116
+ total: results.length
117
+ }));
118
+ }
119
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../../lib/server/handlers/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Server Directory
3
+ * Registry of known AgentChat servers for discovery
4
+ */
5
+ export interface ServerEntry {
6
+ name: string;
7
+ url: string;
8
+ description?: string;
9
+ region?: string;
10
+ }
11
+ export interface HealthData {
12
+ agents?: {
13
+ connected?: number;
14
+ };
15
+ uptime_seconds?: number;
16
+ [key: string]: unknown;
17
+ }
18
+ export interface ServerWithStatus extends ServerEntry {
19
+ status: 'online' | 'offline' | 'unknown';
20
+ health?: HealthData;
21
+ error?: string;
22
+ checked_at?: string;
23
+ }
24
+ export interface ServerDirectoryFile {
25
+ version: number;
26
+ updated_at: string;
27
+ servers: ServerEntry[];
28
+ }
29
+ export interface ServerDirectoryOptions {
30
+ directoryPath?: string;
31
+ timeout?: number;
32
+ }
33
+ export interface DiscoverOptions {
34
+ onlineOnly?: boolean;
35
+ }
36
+ export declare const DEFAULT_SERVERS: ServerEntry[];
37
+ export declare const DEFAULT_DIRECTORY_PATH: string;
38
+ /**
39
+ * Server Directory for discovering AgentChat servers
40
+ */
41
+ export declare class ServerDirectory {
42
+ private directoryPath;
43
+ private servers;
44
+ private timeout;
45
+ constructor(options?: ServerDirectoryOptions);
46
+ /**
47
+ * Load servers from directory file
48
+ */
49
+ load(): Promise<this>;
50
+ /**
51
+ * Save servers to directory file
52
+ */
53
+ save(): Promise<void>;
54
+ /**
55
+ * Add a server to the directory
56
+ */
57
+ addServer(server: ServerEntry): Promise<void>;
58
+ /**
59
+ * Remove a server from the directory
60
+ */
61
+ removeServer(url: string): Promise<void>;
62
+ /**
63
+ * Check health of a single server
64
+ * @param server - Server object with url
65
+ * @returns Server with health status
66
+ */
67
+ checkHealth(server: ServerEntry): Promise<ServerWithStatus>;
68
+ /**
69
+ * Fetch health endpoint
70
+ */
71
+ private _fetchHealth;
72
+ /**
73
+ * Discover available servers (check health of all known servers)
74
+ * @param options
75
+ * @param options.onlineOnly - Only return online servers
76
+ * @returns List of servers with status
77
+ */
78
+ discover(options?: DiscoverOptions): Promise<ServerWithStatus[]>;
79
+ /**
80
+ * Get list of known servers without health check
81
+ */
82
+ list(): ServerEntry[];
83
+ }
84
+ export default ServerDirectory;
85
+ //# sourceMappingURL=server-directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-directory.d.ts","sourceRoot":"","sources":["../../lib/server-directory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAGD,eAAO,MAAM,eAAe,EAAE,WAAW,EAgBpC,CAAC;AAGN,eAAO,MAAM,sBAAsB,EAAE,MAIpC,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,sBAA2B;IAMhD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0BjE;;OAEG;IACH,OAAO,CAAC,YAAY;IA2BpB;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAY1E;;OAEG;IACH,IAAI,IAAI,WAAW,EAAE;CAGtB;AAED,eAAe,eAAe,CAAC"}