@tjamescouch/agentchat 0.23.6 → 0.24.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 (58) hide show
  1. package/README.md +6 -0
  2. package/dist/lib/client.d.ts +4 -0
  3. package/dist/lib/client.d.ts.map +1 -1
  4. package/dist/lib/client.js +15 -0
  5. package/dist/lib/client.js.map +1 -1
  6. package/dist/lib/disputes.d.ts +201 -0
  7. package/dist/lib/disputes.d.ts.map +1 -0
  8. package/dist/lib/disputes.js +504 -0
  9. package/dist/lib/disputes.js.map +1 -0
  10. package/dist/lib/escrow-hooks.d.ts +1 -0
  11. package/dist/lib/escrow-hooks.d.ts.map +1 -1
  12. package/dist/lib/escrow-hooks.js +2 -1
  13. package/dist/lib/escrow-hooks.js.map +1 -1
  14. package/dist/lib/protocol.d.ts +39 -0
  15. package/dist/lib/protocol.d.ts.map +1 -1
  16. package/dist/lib/protocol.js +134 -0
  17. package/dist/lib/protocol.js.map +1 -1
  18. package/dist/lib/redactor.d.ts +38 -0
  19. package/dist/lib/redactor.d.ts.map +1 -0
  20. package/dist/lib/redactor.js +103 -0
  21. package/dist/lib/redactor.js.map +1 -0
  22. package/dist/lib/reputation.d.ts +7 -0
  23. package/dist/lib/reputation.d.ts.map +1 -1
  24. package/dist/lib/reputation.js +10 -0
  25. package/dist/lib/reputation.js.map +1 -1
  26. package/dist/lib/server/handlers/disputes.d.ts +38 -0
  27. package/dist/lib/server/handlers/disputes.d.ts.map +1 -0
  28. package/dist/lib/server/handlers/disputes.js +591 -0
  29. package/dist/lib/server/handlers/disputes.js.map +1 -0
  30. package/dist/lib/server/handlers/identity.d.ts.map +1 -1
  31. package/dist/lib/server/handlers/identity.js +8 -3
  32. package/dist/lib/server/handlers/identity.js.map +1 -1
  33. package/dist/lib/server/handlers/index.d.ts +1 -0
  34. package/dist/lib/server/handlers/index.d.ts.map +1 -1
  35. package/dist/lib/server/handlers/index.js +2 -0
  36. package/dist/lib/server/handlers/index.js.map +1 -1
  37. package/dist/lib/server/handlers/message.d.ts.map +1 -1
  38. package/dist/lib/server/handlers/message.js +18 -4
  39. package/dist/lib/server/handlers/message.js.map +1 -1
  40. package/dist/lib/server/handlers/nick.d.ts +19 -0
  41. package/dist/lib/server/handlers/nick.d.ts.map +1 -0
  42. package/dist/lib/server/handlers/nick.js +52 -0
  43. package/dist/lib/server/handlers/nick.js.map +1 -0
  44. package/dist/lib/server/handlers/proposal.d.ts.map +1 -1
  45. package/dist/lib/server/handlers/proposal.js +40 -2
  46. package/dist/lib/server/handlers/proposal.js.map +1 -1
  47. package/dist/lib/server/handlers/skills.d.ts.map +1 -1
  48. package/dist/lib/server/handlers/skills.js +19 -0
  49. package/dist/lib/server/handlers/skills.js.map +1 -1
  50. package/dist/lib/server.d.ts +9 -0
  51. package/dist/lib/server.d.ts.map +1 -1
  52. package/dist/lib/server.js +83 -2
  53. package/dist/lib/server.js.map +1 -1
  54. package/dist/lib/types.d.ts +99 -5
  55. package/dist/lib/types.d.ts.map +1 -1
  56. package/dist/lib/types.js +22 -0
  57. package/dist/lib/types.js.map +1 -1
  58. package/package.json +2 -2
@@ -0,0 +1,591 @@
1
+ /**
2
+ * Agentcourt Dispute Handlers
3
+ * Server-side handlers for the panel-based dispute resolution system
4
+ */
5
+ import { ServerMessageType, ErrorCode, createMessage, createError, } from '../../protocol.js';
6
+ import { DISPUTE_CONSTANTS, calculateDisputeSettlement, getDisputeIntentSigningContent, getDisputeRevealSigningContent, getEvidenceSigningContent, getArbiterAcceptSigningContent, getArbiterDeclineSigningContent, getVoteSigningContent, } from '../../disputes.js';
7
+ import { Identity } from '../../identity.js';
8
+ import { EscrowEvent } from '../../escrow-hooks.js';
9
+ /**
10
+ * Build the eligible arbiter pool based on Agentcourt spec criteria.
11
+ * Checks: not-a-party, persistent identity, presence, rating, transactions,
12
+ * independence (no recent transactions with parties), panel concurrency, stake availability.
13
+ */
14
+ async function buildArbiterPool(server, disputantId, respondentId) {
15
+ const pool = [];
16
+ for (const [, agent] of server.agents) {
17
+ const agentId = `@${agent.id}`;
18
+ // Must not be a party
19
+ if (agentId === disputantId || agentId === respondentId)
20
+ continue;
21
+ // Must have persistent identity
22
+ if (!agent.pubkey)
23
+ continue;
24
+ // Must not be away or offline
25
+ if (agent.presence === 'away' || agent.presence === 'offline')
26
+ continue;
27
+ // Check reputation rating >= 1200 and >= 10 transactions
28
+ const rating = await server.reputationStore.getRating(agentId);
29
+ if (!rating || rating.rating < DISPUTE_CONSTANTS.ARBITER_MIN_RATING)
30
+ continue;
31
+ if (!rating || rating.transactions < DISPUTE_CONSTANTS.ARBITER_MIN_TRANSACTIONS)
32
+ continue;
33
+ // Must have sufficient rating for stake (rating - stake > 100 floor)
34
+ if (rating.rating - DISPUTE_CONSTANTS.ARBITER_STAKE < 100)
35
+ continue;
36
+ // Panel concurrency: no more than 3 active panels
37
+ const activePanels = countActivePanels(server, agentId);
38
+ if (activePanels >= 3)
39
+ continue;
40
+ pool.push(agentId);
41
+ }
42
+ return pool;
43
+ }
44
+ /**
45
+ * Count how many active dispute panels an agent is currently serving on
46
+ */
47
+ function countActivePanels(server, agentId) {
48
+ const disputes = server.disputes.listByAgent(agentId);
49
+ let count = 0;
50
+ for (const d of disputes) {
51
+ if (d.phase === 'arbiter_response' || d.phase === 'evidence' || d.phase === 'deliberation') {
52
+ const isArbiter = d.arbiters?.some((a) => a.agent_id === agentId && (a.status === 'pending' || a.status === 'accepted'));
53
+ if (isArbiter)
54
+ count++;
55
+ }
56
+ }
57
+ return count;
58
+ }
59
+ /**
60
+ * Send a message to a specific agent by ID
61
+ */
62
+ function sendToAgent(server, agentId, msg) {
63
+ const id = agentId.startsWith('@') ? agentId.slice(1) : agentId;
64
+ const ws = server.agentById.get(id);
65
+ if (ws) {
66
+ server._send(ws, msg);
67
+ }
68
+ }
69
+ /**
70
+ * Handle DISPUTE_INTENT — phase 1 of commit-reveal filing
71
+ */
72
+ export function handleDisputeIntent(server, ws, msg) {
73
+ const agent = server.agents.get(ws);
74
+ if (!agent) {
75
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
76
+ return;
77
+ }
78
+ if (!agent.pubkey) {
79
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Filing disputes requires persistent identity'));
80
+ return;
81
+ }
82
+ // Verify signature
83
+ const sigContent = getDisputeIntentSigningContent(msg.proposal_id, msg.reason, msg.commitment);
84
+ if (!Identity.verify(sigContent, msg.sig, agent.pubkey)) {
85
+ server._log('sig_verification_failed', { agent: agent.id, msg_type: 'DISPUTE_INTENT' });
86
+ server._send(ws, createError(ErrorCode.VERIFICATION_FAILED, 'Invalid signature'));
87
+ return;
88
+ }
89
+ // Get the proposal
90
+ const proposal = server.proposals.get(msg.proposal_id);
91
+ if (!proposal) {
92
+ server._send(ws, createError(ErrorCode.PROPOSAL_NOT_FOUND, 'Proposal not found'));
93
+ return;
94
+ }
95
+ // Must be accepted to dispute
96
+ if (proposal.status !== 'accepted' && proposal.status !== 'disputed') {
97
+ server._send(ws, createError(ErrorCode.INVALID_PROPOSAL, 'Can only dispute accepted proposals'));
98
+ return;
99
+ }
100
+ // Must be a party
101
+ const disputantId = `@${agent.id}`;
102
+ if (proposal.from !== disputantId && proposal.to !== disputantId) {
103
+ server._send(ws, createError(ErrorCode.NOT_PROPOSAL_PARTY, 'Not a party to this proposal'));
104
+ return;
105
+ }
106
+ // Check no existing agentcourt dispute for this proposal
107
+ if (server.disputes.getByProposal(msg.proposal_id)) {
108
+ server._send(ws, createError(ErrorCode.DISPUTE_ALREADY_EXISTS, 'Agentcourt dispute already filed for this proposal'));
109
+ return;
110
+ }
111
+ const respondentId = proposal.from === disputantId ? proposal.to : proposal.from;
112
+ const dispute = server.disputes.fileIntent(msg.proposal_id, disputantId, respondentId, server.redactor.clean(msg.reason), msg.commitment);
113
+ server._log('dispute_intent', { dispute_id: dispute.id, proposal_id: msg.proposal_id, disputant: agent.id });
114
+ // Set reveal timeout
115
+ server.disputes.setTimeout(dispute.id, DISPUTE_CONSTANTS.REVEAL_TIMEOUT_MS, () => {
116
+ const d = server.disputes.get(dispute.id);
117
+ if (d && d.phase === 'reveal_pending') {
118
+ d.phase = 'fallback';
119
+ d.updated_at = Date.now();
120
+ server._log('dispute_reveal_timeout', { dispute_id: dispute.id });
121
+ sendToAgent(server, disputantId, createMessage(ServerMessageType.DISPUTE_FALLBACK, {
122
+ dispute_id: dispute.id,
123
+ reason: 'Reveal timeout expired',
124
+ }));
125
+ }
126
+ });
127
+ // ACK to disputant
128
+ server._send(ws, createMessage(ServerMessageType.DISPUTE_INTENT_ACK, {
129
+ dispute_id: dispute.id,
130
+ proposal_id: msg.proposal_id,
131
+ server_nonce: dispute.server_nonce,
132
+ }));
133
+ // Notify respondent
134
+ sendToAgent(server, respondentId, createMessage(ServerMessageType.MSG, {
135
+ from: '@server',
136
+ from_name: 'Server',
137
+ to: respondentId,
138
+ content: `Dispute filed against proposal ${msg.proposal_id} by ${disputantId}. Agentcourt panel arbitration in progress.`,
139
+ }));
140
+ }
141
+ /**
142
+ * Handle DISPUTE_REVEAL — phase 2 of commit-reveal filing
143
+ */
144
+ export async function handleDisputeReveal(server, ws, msg) {
145
+ const agent = server.agents.get(ws);
146
+ if (!agent) {
147
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
148
+ return;
149
+ }
150
+ // Find the dispute by proposal
151
+ const dispute = server.disputes.getByProposal(msg.proposal_id);
152
+ if (!dispute) {
153
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_FOUND, 'No pending dispute for this proposal'));
154
+ return;
155
+ }
156
+ // Must be the disputant
157
+ if (dispute.disputant !== `@${agent.id}`) {
158
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_PARTY, 'Only the disputant can reveal'));
159
+ return;
160
+ }
161
+ // Verify signature (disputant proved persistent identity in DISPUTE_INTENT)
162
+ if (!agent.pubkey) {
163
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Dispute reveal requires persistent identity'));
164
+ return;
165
+ }
166
+ const sigContent = getDisputeRevealSigningContent(msg.proposal_id, msg.nonce);
167
+ if (!Identity.verify(sigContent, msg.sig, agent.pubkey)) {
168
+ server._log('sig_verification_failed', { agent: agent.id, msg_type: 'DISPUTE_REVEAL' });
169
+ server._send(ws, createError(ErrorCode.VERIFICATION_FAILED, 'Invalid signature'));
170
+ return;
171
+ }
172
+ // Acquire per-dispute lock to serialize reveal→buildPool→selectPanel sequence.
173
+ // Without this, concurrent reveals could interleave across the await boundary.
174
+ await server.disputes.withLock(dispute.id, async () => {
175
+ // Attempt reveal (synchronous — phase check + transition is atomic in single-threaded Node.js)
176
+ const revealed = server.disputes.reveal(dispute.id, msg.nonce);
177
+ if (!revealed) {
178
+ server._send(ws, createError(ErrorCode.DISPUTE_COMMITMENT_MISMATCH, 'Nonce does not match commitment'));
179
+ return;
180
+ }
181
+ server.disputes.clearTimeout(dispute.id);
182
+ server._log('dispute_revealed', { dispute_id: dispute.id });
183
+ // Build arbiter pool and select panel
184
+ const pool = await buildArbiterPool(server, dispute.disputant, dispute.respondent);
185
+ const selected = server.disputes.selectPanel(dispute.id, pool);
186
+ if (!selected) {
187
+ // Fallback to legacy
188
+ server._log('dispute_fallback', { dispute_id: dispute.id, pool_size: pool.length });
189
+ const fallbackMsg = createMessage(ServerMessageType.DISPUTE_FALLBACK, {
190
+ dispute_id: dispute.id,
191
+ proposal_id: msg.proposal_id,
192
+ reason: `Insufficient eligible arbiters (${pool.length} available, ${DISPUTE_CONSTANTS.PANEL_SIZE} required)`,
193
+ });
194
+ sendToAgent(server, dispute.disputant, fallbackMsg);
195
+ sendToAgent(server, dispute.respondent, fallbackMsg);
196
+ return;
197
+ }
198
+ // Send PANEL_FORMED to both parties and arbiters
199
+ const d = server.disputes.get(dispute.id);
200
+ const panelMsg = createMessage(ServerMessageType.PANEL_FORMED, {
201
+ dispute_id: dispute.id,
202
+ proposal_id: msg.proposal_id,
203
+ arbiters: selected,
204
+ disputant: dispute.disputant,
205
+ respondent: dispute.respondent,
206
+ evidence_deadline: null, // set after all arbiters accept
207
+ vote_deadline: null,
208
+ seed: d.seed,
209
+ server_nonce: d.server_nonce,
210
+ });
211
+ sendToAgent(server, dispute.disputant, panelMsg);
212
+ sendToAgent(server, dispute.respondent, panelMsg);
213
+ // Send individual assignment to each arbiter
214
+ for (const arbiterId of selected) {
215
+ sendToAgent(server, arbiterId, createMessage(ServerMessageType.ARBITER_ASSIGNED, {
216
+ dispute_id: dispute.id,
217
+ proposal_id: msg.proposal_id,
218
+ disputant: dispute.disputant,
219
+ respondent: dispute.respondent,
220
+ reason: dispute.reason,
221
+ response_deadline: Date.now() + DISPUTE_CONSTANTS.ARBITER_RESPONSE_TIMEOUT_MS,
222
+ }));
223
+ }
224
+ // Set arbiter response timeout
225
+ server.disputes.setTimeout(dispute.id, DISPUTE_CONSTANTS.ARBITER_RESPONSE_TIMEOUT_MS, () => {
226
+ const d = server.disputes.get(dispute.id);
227
+ if (d && d.phase === 'arbiter_response') {
228
+ // Forfeit non-responding arbiters
229
+ for (const slot of d.arbiters) {
230
+ if (slot.status === 'pending') {
231
+ slot.status = 'forfeited';
232
+ }
233
+ }
234
+ // Check if enough accepted
235
+ const accepted = d.arbiters.filter(a => a.status === 'accepted');
236
+ if (accepted.length >= DISPUTE_CONSTANTS.PANEL_SIZE) {
237
+ d.phase = 'evidence';
238
+ d.evidence_deadline = Date.now() + DISPUTE_CONSTANTS.EVIDENCE_PERIOD_MS;
239
+ d.updated_at = Date.now();
240
+ }
241
+ else {
242
+ d.phase = 'fallback';
243
+ d.updated_at = Date.now();
244
+ const msg = createMessage(ServerMessageType.DISPUTE_FALLBACK, {
245
+ dispute_id: d.id,
246
+ reason: 'Insufficient arbiters accepted',
247
+ });
248
+ sendToAgent(server, d.disputant, msg);
249
+ sendToAgent(server, d.respondent, msg);
250
+ }
251
+ }
252
+ });
253
+ server._send(ws, createMessage(ServerMessageType.DISPUTE_REVEALED, {
254
+ dispute_id: dispute.id,
255
+ panel_size: selected.length,
256
+ seed: d.seed,
257
+ }));
258
+ });
259
+ }
260
+ /**
261
+ * Handle EVIDENCE submission
262
+ */
263
+ export function handleEvidence(server, ws, msg) {
264
+ const agent = server.agents.get(ws);
265
+ if (!agent) {
266
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
267
+ return;
268
+ }
269
+ const dispute = server.disputes.get(msg.dispute_id);
270
+ if (!dispute) {
271
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_FOUND, 'Dispute not found'));
272
+ return;
273
+ }
274
+ const agentId = `@${agent.id}`;
275
+ if (agentId !== dispute.disputant && agentId !== dispute.respondent) {
276
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_PARTY, 'Not a party to this dispute'));
277
+ return;
278
+ }
279
+ // Verify signature (both proposal parties have persistent identity)
280
+ if (!agent.pubkey) {
281
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Evidence submission requires persistent identity'));
282
+ return;
283
+ }
284
+ const itemsJson = JSON.stringify(msg.items);
285
+ const sigContent = getEvidenceSigningContent(msg.dispute_id, itemsJson);
286
+ if (!Identity.verify(sigContent, msg.sig, agent.pubkey)) {
287
+ server._log('sig_verification_failed', { agent: agent.id, msg_type: 'EVIDENCE' });
288
+ server._send(ws, createError(ErrorCode.VERIFICATION_FAILED, 'Invalid signature'));
289
+ return;
290
+ }
291
+ const success = server.disputes.submitEvidence(msg.dispute_id, agentId, msg.items, server.redactor.clean(msg.statement), msg.sig);
292
+ if (!success) {
293
+ server._send(ws, createError(ErrorCode.DISPUTE_DEADLINE_PASSED, 'Evidence submission failed (deadline passed or limit exceeded)'));
294
+ return;
295
+ }
296
+ server._log('evidence_submitted', { dispute_id: msg.dispute_id, agent: agent.id, items: msg.items.length });
297
+ // Notify all parties and arbiters
298
+ const ackMsg = createMessage(ServerMessageType.EVIDENCE_RECEIVED, {
299
+ dispute_id: msg.dispute_id,
300
+ from: agentId,
301
+ items_count: msg.items.length,
302
+ });
303
+ sendToAgent(server, dispute.disputant, ackMsg);
304
+ sendToAgent(server, dispute.respondent, ackMsg);
305
+ for (const slot of dispute.arbiters) {
306
+ if (slot.status === 'accepted' || slot.status === 'voted') {
307
+ sendToAgent(server, slot.agent_id, ackMsg);
308
+ }
309
+ }
310
+ }
311
+ /**
312
+ * Handle ARBITER_ACCEPT
313
+ */
314
+ export function handleArbiterAccept(server, ws, msg) {
315
+ const agent = server.agents.get(ws);
316
+ if (!agent) {
317
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
318
+ return;
319
+ }
320
+ const dispute = server.disputes.get(msg.dispute_id);
321
+ if (!dispute) {
322
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_FOUND, 'Dispute not found'));
323
+ return;
324
+ }
325
+ // Verify signature (arbiters must have persistent identity per buildArbiterPool)
326
+ if (!agent.pubkey) {
327
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Arbiter operations require persistent identity'));
328
+ return;
329
+ }
330
+ const sigContent = getArbiterAcceptSigningContent(msg.dispute_id);
331
+ if (!Identity.verify(sigContent, msg.sig, agent.pubkey)) {
332
+ server._log('sig_verification_failed', { agent: agent.id, msg_type: 'ARBITER_ACCEPT' });
333
+ server._send(ws, createError(ErrorCode.VERIFICATION_FAILED, 'Invalid signature'));
334
+ return;
335
+ }
336
+ const agentId = `@${agent.id}`;
337
+ const success = server.disputes.arbiterAccept(msg.dispute_id, agentId);
338
+ if (!success) {
339
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_ARBITER, 'Not a pending arbiter for this dispute'));
340
+ return;
341
+ }
342
+ server._log('arbiter_accepted', { dispute_id: msg.dispute_id, arbiter: agent.id });
343
+ // Check if we transitioned to evidence phase
344
+ const d = server.disputes.get(msg.dispute_id);
345
+ if (d.phase === 'evidence') {
346
+ server.disputes.clearTimeout(msg.dispute_id);
347
+ // Send evidence period notification to all parties
348
+ const evidenceMsg = createMessage(ServerMessageType.MSG, {
349
+ from: '@server',
350
+ from_name: 'Server',
351
+ to: dispute.disputant,
352
+ content: `All arbiters accepted. Evidence period open until ${new Date(d.evidence_deadline).toISOString()}. Submit your evidence now.`,
353
+ });
354
+ sendToAgent(server, d.disputant, evidenceMsg);
355
+ sendToAgent(server, d.respondent, { ...evidenceMsg, to: d.respondent });
356
+ // Set evidence deadline timeout
357
+ server.disputes.setTimeout(msg.dispute_id, DISPUTE_CONSTANTS.EVIDENCE_PERIOD_MS, () => {
358
+ const dispute = server.disputes.get(msg.dispute_id);
359
+ if (dispute && dispute.phase === 'evidence') {
360
+ server.disputes.closeEvidence(msg.dispute_id);
361
+ _sendCaseReady(server, msg.dispute_id);
362
+ }
363
+ });
364
+ }
365
+ }
366
+ /**
367
+ * Handle ARBITER_DECLINE
368
+ */
369
+ export async function handleArbiterDecline(server, ws, msg) {
370
+ const agent = server.agents.get(ws);
371
+ if (!agent) {
372
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
373
+ return;
374
+ }
375
+ const dispute = server.disputes.get(msg.dispute_id);
376
+ if (!dispute) {
377
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_FOUND, 'Dispute not found'));
378
+ return;
379
+ }
380
+ // Verify signature (arbiters must have persistent identity per buildArbiterPool)
381
+ if (!agent.pubkey) {
382
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Arbiter operations require persistent identity'));
383
+ return;
384
+ }
385
+ if (msg.sig) {
386
+ const sigContent = getArbiterDeclineSigningContent(msg.dispute_id, msg.reason || '');
387
+ if (!Identity.verify(sigContent, msg.sig, agent.pubkey)) {
388
+ server._log('sig_verification_failed', { agent: agent.id, msg_type: 'ARBITER_DECLINE' });
389
+ server._send(ws, createError(ErrorCode.VERIFICATION_FAILED, 'Invalid signature'));
390
+ return;
391
+ }
392
+ }
393
+ const agentId = `@${agent.id}`;
394
+ // Acquire per-dispute lock to serialize decline→buildPool→replace sequence.
395
+ // Without this, concurrent declines could pick the same replacement or
396
+ // double-increment replacement_rounds across the await boundary.
397
+ await server.disputes.withLock(msg.dispute_id, async () => {
398
+ const pool = await buildArbiterPool(server, dispute.disputant, dispute.respondent);
399
+ const replacement = server.disputes.arbiterDecline(msg.dispute_id, agentId, pool);
400
+ server._log('arbiter_declined', { dispute_id: msg.dispute_id, arbiter: agent.id, replacement });
401
+ if (replacement) {
402
+ // Notify the replacement
403
+ sendToAgent(server, replacement, createMessage(ServerMessageType.ARBITER_ASSIGNED, {
404
+ dispute_id: msg.dispute_id,
405
+ proposal_id: dispute.proposal_id,
406
+ disputant: dispute.disputant,
407
+ respondent: dispute.respondent,
408
+ reason: dispute.reason,
409
+ response_deadline: Date.now() + DISPUTE_CONSTANTS.ARBITER_RESPONSE_TIMEOUT_MS,
410
+ is_replacement: true,
411
+ }));
412
+ }
413
+ // Check for fallback
414
+ const d = server.disputes.get(msg.dispute_id);
415
+ if (d.phase === 'fallback') {
416
+ const fallbackMsg = createMessage(ServerMessageType.DISPUTE_FALLBACK, {
417
+ dispute_id: msg.dispute_id,
418
+ reason: 'Unable to form arbiter panel after replacements',
419
+ });
420
+ sendToAgent(server, d.disputant, fallbackMsg);
421
+ sendToAgent(server, d.respondent, fallbackMsg);
422
+ }
423
+ });
424
+ }
425
+ /**
426
+ * Handle ARBITER_VOTE
427
+ */
428
+ export async function handleArbiterVote(server, ws, msg) {
429
+ const agent = server.agents.get(ws);
430
+ if (!agent) {
431
+ server._send(ws, createError(ErrorCode.AUTH_REQUIRED, 'Must IDENTIFY first'));
432
+ return;
433
+ }
434
+ const dispute = server.disputes.get(msg.dispute_id);
435
+ if (!dispute) {
436
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_FOUND, 'Dispute not found'));
437
+ return;
438
+ }
439
+ // Verify signature (arbiters must have persistent identity per buildArbiterPool)
440
+ if (!agent.pubkey) {
441
+ server._send(ws, createError(ErrorCode.SIGNATURE_REQUIRED, 'Arbiter operations require persistent identity'));
442
+ return;
443
+ }
444
+ const sigContent = getVoteSigningContent(msg.dispute_id, msg.verdict);
445
+ if (!Identity.verify(sigContent, msg.sig, agent.pubkey)) {
446
+ server._log('sig_verification_failed', { agent: agent.id, msg_type: 'ARBITER_VOTE' });
447
+ server._send(ws, createError(ErrorCode.VERIFICATION_FAILED, 'Invalid signature'));
448
+ return;
449
+ }
450
+ const agentId = `@${agent.id}`;
451
+ const success = server.disputes.castVote(msg.dispute_id, agentId, msg.verdict, msg.reasoning, msg.sig);
452
+ if (!success) {
453
+ server._send(ws, createError(ErrorCode.DISPUTE_NOT_ARBITER, 'Cannot vote: not an accepted arbiter, wrong phase, or deadline passed'));
454
+ return;
455
+ }
456
+ server._log('arbiter_voted', { dispute_id: msg.dispute_id, arbiter: agent.id, verdict: msg.verdict });
457
+ // Check if dispute is now resolved
458
+ const d = server.disputes.get(msg.dispute_id);
459
+ if (d.phase === 'resolved') {
460
+ server.disputes.clearTimeout(msg.dispute_id);
461
+ await _sendVerdict(server, msg.dispute_id);
462
+ }
463
+ }
464
+ // ============ Internal helpers ============
465
+ /**
466
+ * Send CASE_READY to all arbiters after evidence period closes
467
+ */
468
+ function _sendCaseReady(server, disputeId) {
469
+ const dispute = server.disputes.get(disputeId);
470
+ if (!dispute)
471
+ return;
472
+ const proposal = server.proposals.get(dispute.proposal_id);
473
+ const caseMsg = createMessage(ServerMessageType.CASE_READY, {
474
+ dispute_id: disputeId,
475
+ proposal: proposal ? {
476
+ id: proposal.id,
477
+ from: proposal.from,
478
+ to: proposal.to,
479
+ task: proposal.task,
480
+ amount: proposal.amount,
481
+ currency: proposal.currency,
482
+ } : null,
483
+ disputant: dispute.disputant,
484
+ disputant_evidence: dispute.disputant_evidence || null,
485
+ respondent: dispute.respondent,
486
+ respondent_evidence: dispute.respondent_evidence || null,
487
+ vote_deadline: dispute.vote_deadline,
488
+ });
489
+ for (const slot of dispute.arbiters) {
490
+ if (slot.status === 'accepted') {
491
+ sendToAgent(server, slot.agent_id, caseMsg);
492
+ }
493
+ }
494
+ server._log('case_ready', { dispute_id: disputeId });
495
+ // Set vote deadline timeout
496
+ server.disputes.setTimeout(disputeId, DISPUTE_CONSTANTS.VOTE_PERIOD_MS, async () => {
497
+ const d = server.disputes.get(disputeId);
498
+ if (d && d.phase === 'deliberation') {
499
+ server.disputes.forceResolve(disputeId);
500
+ await _sendVerdict(server, disputeId);
501
+ }
502
+ });
503
+ }
504
+ /**
505
+ * Send VERDICT to all parties and arbiters, then apply settlement
506
+ */
507
+ async function _sendVerdict(server, disputeId) {
508
+ const dispute = server.disputes.get(disputeId);
509
+ if (!dispute || !dispute.verdict)
510
+ return;
511
+ // Compute arbiter rewards
512
+ const arbiterResults = dispute.arbiters
513
+ .filter(a => a.status === 'voted' || a.status === 'forfeited')
514
+ .map(slot => {
515
+ if (slot.status === 'forfeited') {
516
+ return {
517
+ arbiter: slot.agent_id,
518
+ verdict: null,
519
+ reasoning: null,
520
+ reward: -DISPUTE_CONSTANTS.ARBITER_STAKE,
521
+ };
522
+ }
523
+ const votedWithMajority = slot.vote?.verdict === dispute.verdict;
524
+ return {
525
+ arbiter: slot.agent_id,
526
+ verdict: slot.vote?.verdict,
527
+ reasoning: slot.vote?.reasoning,
528
+ reward: votedWithMajority ? DISPUTE_CONSTANTS.ARBITER_REWARD : 0,
529
+ };
530
+ });
531
+ const verdictMsg = createMessage(ServerMessageType.VERDICT, {
532
+ dispute_id: disputeId,
533
+ proposal_id: dispute.proposal_id,
534
+ verdict: dispute.verdict,
535
+ votes: dispute.votes.map(v => ({
536
+ arbiter: v.arbiter,
537
+ verdict: v.verdict,
538
+ reasoning: v.reasoning,
539
+ })),
540
+ arbiter_results: arbiterResults,
541
+ resolved_at: dispute.resolved_at,
542
+ });
543
+ // Send to all involved parties
544
+ sendToAgent(server, dispute.disputant, verdictMsg);
545
+ sendToAgent(server, dispute.respondent, verdictMsg);
546
+ for (const slot of dispute.arbiters) {
547
+ sendToAgent(server, slot.agent_id, verdictMsg);
548
+ }
549
+ server._log('verdict', {
550
+ dispute_id: disputeId,
551
+ verdict: dispute.verdict,
552
+ votes: dispute.votes.length,
553
+ });
554
+ // Apply settlement: calculate and persist ELO rating changes
555
+ try {
556
+ const allParties = [dispute.disputant, dispute.respondent, ...dispute.arbiters.map(a => a.agent_id)];
557
+ const ratings = {};
558
+ for (const party of allParties) {
559
+ const r = await server.reputationStore.getRating(party);
560
+ ratings[party] = { rating: r.rating, transactions: r.transactions };
561
+ }
562
+ const settlement = calculateDisputeSettlement(dispute, ratings);
563
+ await server.reputationStore.applyVerdictSettlement(settlement);
564
+ // Broadcast SETTLEMENT_COMPLETE to all parties
565
+ const settlementMsg = createMessage(ServerMessageType.SETTLEMENT_COMPLETE, {
566
+ dispute_id: disputeId,
567
+ proposal_id: dispute.proposal_id,
568
+ verdict: dispute.verdict,
569
+ rating_changes: settlement,
570
+ });
571
+ sendToAgent(server, dispute.disputant, settlementMsg);
572
+ sendToAgent(server, dispute.respondent, settlementMsg);
573
+ for (const slot of dispute.arbiters) {
574
+ sendToAgent(server, slot.agent_id, settlementMsg);
575
+ }
576
+ server.escrowHooks.emit(EscrowEvent.VERDICT_SETTLED, {
577
+ dispute_id: disputeId,
578
+ proposal_id: dispute.proposal_id,
579
+ verdict: dispute.verdict,
580
+ rating_changes: settlement,
581
+ });
582
+ server._log('settlement_complete', {
583
+ dispute_id: disputeId,
584
+ parties: Object.keys(settlement).length,
585
+ });
586
+ }
587
+ catch (err) {
588
+ server._log('settlement_error', { dispute_id: disputeId, error: err.message });
589
+ }
590
+ }
591
+ //# sourceMappingURL=disputes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disputes.js","sourceRoot":"","sources":["../../../../lib/server/handlers/disputes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../lib/server/handlers/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAgBxB,UAAU,iBAAkB,SAAQ,SAAS;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,CAqGzG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAiGrH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAsEnH;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CA6ErH"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../../lib/server/handlers/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAgBxB,UAAU,iBAAkB,SAAQ,SAAS;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,CAsGzG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAqGrH;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAsEnH;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CA6ErH"}