@xpr-agents/openclaw 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.
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/session.d.ts +24 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +43 -0
- package/dist/session.js.map +1 -0
- package/dist/tools/agent.d.ts +10 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +261 -0
- package/dist/tools/agent.js.map +1 -0
- package/dist/tools/escrow.d.ts +11 -0
- package/dist/tools/escrow.d.ts.map +1 -0
- package/dist/tools/escrow.js +371 -0
- package/dist/tools/escrow.js.map +1 -0
- package/dist/tools/feedback.d.ts +8 -0
- package/dist/tools/feedback.d.ts.map +1 -0
- package/dist/tools/feedback.js +176 -0
- package/dist/tools/feedback.js.map +1 -0
- package/dist/tools/indexer.d.ts +9 -0
- package/dist/tools/indexer.d.ts.map +1 -0
- package/dist/tools/indexer.js +98 -0
- package/dist/tools/indexer.js.map +1 -0
- package/dist/tools/validation.d.ts +10 -0
- package/dist/tools/validation.d.ts.map +1 -0
- package/dist/tools/validation.js +231 -0
- package/dist/tools/validation.js.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/util/confirm.d.ts +23 -0
- package/dist/util/confirm.d.ts.map +1 -0
- package/dist/util/confirm.js +39 -0
- package/dist/util/confirm.js.map +1 -0
- package/dist/util/validate.d.ts +19 -0
- package/dist/util/validate.d.ts.map +1 -0
- package/dist/util/validate.js +96 -0
- package/dist/util/validate.js.map +1 -0
- package/openclaw.plugin.json +47 -0
- package/package.json +55 -0
- package/skills/xpr-agent-operator/SKILL.md +134 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Escrow tools (14 tools)
|
|
4
|
+
* Reads: xpr_get_job, xpr_list_jobs, xpr_get_milestones,
|
|
5
|
+
* xpr_get_job_dispute, xpr_list_arbitrators
|
|
6
|
+
* Writes: xpr_create_job, xpr_fund_job, xpr_accept_job,
|
|
7
|
+
* xpr_deliver_job, xpr_approve_delivery, xpr_raise_dispute,
|
|
8
|
+
* xpr_submit_milestone, xpr_arbitrate, xpr_resolve_timeout
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.registerEscrowTools = registerEscrowTools;
|
|
12
|
+
const sdk_1 = require("@xpr-agents/sdk");
|
|
13
|
+
const validate_1 = require("../util/validate");
|
|
14
|
+
const confirm_1 = require("../util/confirm");
|
|
15
|
+
function registerEscrowTools(api, config) {
|
|
16
|
+
const contracts = config.contracts;
|
|
17
|
+
// ---- READ TOOLS ----
|
|
18
|
+
api.registerTool({
|
|
19
|
+
name: 'xpr_get_job',
|
|
20
|
+
description: 'Get detailed information about an escrow job including state, funding, and deadlines. States: 0=CREATED, 1=FUNDED, 2=ACCEPTED, 3=INPROGRESS, 4=DELIVERED, 5=DISPUTED, 6=COMPLETED, 7=REFUNDED, 8=ARBITRATED.',
|
|
21
|
+
parameters: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
required: ['id'],
|
|
24
|
+
properties: {
|
|
25
|
+
id: { type: 'number', description: 'Job ID' },
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
handler: async ({ id }) => {
|
|
29
|
+
(0, validate_1.validatePositiveInt)(id, 'id');
|
|
30
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, undefined, contracts.agentescrow);
|
|
31
|
+
const job = await registry.getJob(id);
|
|
32
|
+
if (!job) {
|
|
33
|
+
return { error: `Job #${id} not found` };
|
|
34
|
+
}
|
|
35
|
+
return job;
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
api.registerTool({
|
|
39
|
+
name: 'xpr_list_jobs',
|
|
40
|
+
description: 'List escrow jobs with optional filtering by client, agent, or state.',
|
|
41
|
+
parameters: {
|
|
42
|
+
type: 'object',
|
|
43
|
+
properties: {
|
|
44
|
+
client: { type: 'string', description: 'Filter by client account' },
|
|
45
|
+
agent: { type: 'string', description: 'Filter by agent account' },
|
|
46
|
+
state: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
enum: ['created', 'funded', 'accepted', 'inprogress', 'delivered', 'disputed', 'completed', 'refunded', 'arbitrated'],
|
|
49
|
+
description: 'Filter by state',
|
|
50
|
+
},
|
|
51
|
+
limit: { type: 'number', description: 'Max results (default 20, max 100)' },
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
handler: async ({ client, agent, state, limit = 20 }) => {
|
|
55
|
+
if (client)
|
|
56
|
+
(0, validate_1.validateAccountName)(client, 'client');
|
|
57
|
+
if (agent)
|
|
58
|
+
(0, validate_1.validateAccountName)(agent, 'agent');
|
|
59
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, undefined, contracts.agentescrow);
|
|
60
|
+
if (client) {
|
|
61
|
+
return registry.listJobsByClient(client, { limit: Math.min(limit, 100) });
|
|
62
|
+
}
|
|
63
|
+
if (agent) {
|
|
64
|
+
return registry.listJobsByAgent(agent, { limit: Math.min(limit, 100) });
|
|
65
|
+
}
|
|
66
|
+
// For general listing, use client query with the session actor if available
|
|
67
|
+
const account = config.session?.auth.actor;
|
|
68
|
+
if (account) {
|
|
69
|
+
// List jobs where we are either client or agent
|
|
70
|
+
const [asClient, asAgent] = await Promise.all([
|
|
71
|
+
registry.listJobsByClient(account, { limit: Math.min(limit, 100) }),
|
|
72
|
+
registry.listJobsByAgent(account, { limit: Math.min(limit, 100) }),
|
|
73
|
+
]);
|
|
74
|
+
const allJobs = [...asClient.items, ...asAgent.items];
|
|
75
|
+
const unique = allJobs.filter((j, i, arr) => arr.findIndex(x => x.id === j.id) === i);
|
|
76
|
+
const filtered = state !== undefined ? unique.filter(j => j.state === state) : unique;
|
|
77
|
+
return { items: filtered.slice(0, limit), hasMore: filtered.length > limit };
|
|
78
|
+
}
|
|
79
|
+
return { items: [], hasMore: false, message: 'Provide client or agent filter, or set XPR_ACCOUNT env var' };
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
api.registerTool({
|
|
83
|
+
name: 'xpr_get_milestones',
|
|
84
|
+
description: 'Get all milestones for a job.',
|
|
85
|
+
parameters: {
|
|
86
|
+
type: 'object',
|
|
87
|
+
required: ['job_id'],
|
|
88
|
+
properties: {
|
|
89
|
+
job_id: { type: 'number', description: 'Job ID' },
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
handler: async ({ job_id }) => {
|
|
93
|
+
(0, validate_1.validatePositiveInt)(job_id, 'job_id');
|
|
94
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, undefined, contracts.agentescrow);
|
|
95
|
+
const milestones = await registry.getJobMilestones(job_id);
|
|
96
|
+
return { milestones, count: milestones.length };
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
api.registerTool({
|
|
100
|
+
name: 'xpr_get_job_dispute',
|
|
101
|
+
description: 'Get the dispute associated with a job, if any.',
|
|
102
|
+
parameters: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
required: ['job_id'],
|
|
105
|
+
properties: {
|
|
106
|
+
job_id: { type: 'number', description: 'Job ID' },
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
handler: async ({ job_id }) => {
|
|
110
|
+
(0, validate_1.validatePositiveInt)(job_id, 'job_id');
|
|
111
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, undefined, contracts.agentescrow);
|
|
112
|
+
const dispute = await registry.getJobDispute(job_id);
|
|
113
|
+
if (!dispute) {
|
|
114
|
+
return { message: `No dispute found for job #${job_id}` };
|
|
115
|
+
}
|
|
116
|
+
return dispute;
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
api.registerTool({
|
|
120
|
+
name: 'xpr_list_arbitrators',
|
|
121
|
+
description: 'List all registered arbitrators with their stake, fee, and case history.',
|
|
122
|
+
parameters: { type: 'object', properties: {} },
|
|
123
|
+
handler: async () => {
|
|
124
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, undefined, contracts.agentescrow);
|
|
125
|
+
const arbitrators = await registry.listArbitrators();
|
|
126
|
+
return { arbitrators, count: arbitrators.length };
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
// ---- WRITE TOOLS ----
|
|
130
|
+
api.registerTool({
|
|
131
|
+
name: 'xpr_create_job',
|
|
132
|
+
description: 'Create a new escrow job. After creation, fund it with xpr_fund_job.',
|
|
133
|
+
parameters: {
|
|
134
|
+
type: 'object',
|
|
135
|
+
required: ['agent', 'title', 'description', 'deliverables', 'amount'],
|
|
136
|
+
properties: {
|
|
137
|
+
agent: { type: 'string', description: 'Agent account to assign the job to' },
|
|
138
|
+
title: { type: 'string', description: 'Job title' },
|
|
139
|
+
description: { type: 'string', description: 'Detailed job description' },
|
|
140
|
+
deliverables: {
|
|
141
|
+
type: 'array',
|
|
142
|
+
items: { type: 'string' },
|
|
143
|
+
description: 'List of expected deliverables',
|
|
144
|
+
},
|
|
145
|
+
amount: { type: 'number', description: 'Total job amount in XPR (e.g., 5000.0)' },
|
|
146
|
+
deadline: { type: 'number', description: 'Unix timestamp deadline (0 = no deadline)' },
|
|
147
|
+
arbitrator: { type: 'string', description: 'Arbitrator account (empty = contract owner as fallback)' },
|
|
148
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
handler: async (params) => {
|
|
152
|
+
if (!config.session)
|
|
153
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
154
|
+
(0, validate_1.validateAccountName)(params.agent, 'agent');
|
|
155
|
+
(0, validate_1.validateRequired)(params.title, 'title');
|
|
156
|
+
if (params.amount <= 0)
|
|
157
|
+
throw new Error('amount must be positive');
|
|
158
|
+
(0, validate_1.validateAmount)((0, validate_1.xprToSmallestUnits)(params.amount), config.maxTransferAmount);
|
|
159
|
+
if (params.arbitrator)
|
|
160
|
+
(0, validate_1.validateAccountName)(params.arbitrator, 'arbitrator');
|
|
161
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, params.confirmed, 'Create Job', {
|
|
162
|
+
agent: params.agent,
|
|
163
|
+
title: params.title,
|
|
164
|
+
amount: `${params.amount} XPR`,
|
|
165
|
+
arbitrator: params.arbitrator || '(contract owner fallback)',
|
|
166
|
+
}, `Create job "${params.title}" for agent ${params.agent} worth ${params.amount} XPR`);
|
|
167
|
+
if (confirmation)
|
|
168
|
+
return confirmation;
|
|
169
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
170
|
+
return registry.createJob({
|
|
171
|
+
agent: params.agent,
|
|
172
|
+
title: params.title,
|
|
173
|
+
description: params.description,
|
|
174
|
+
deliverables: params.deliverables,
|
|
175
|
+
amount: (0, validate_1.xprToSmallestUnits)(params.amount),
|
|
176
|
+
deadline: params.deadline || 0,
|
|
177
|
+
arbitrator: params.arbitrator || '',
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
api.registerTool({
|
|
182
|
+
name: 'xpr_fund_job',
|
|
183
|
+
description: 'Fund an escrow job by transferring XPR. Job moves from CREATED to FUNDED when fully funded.',
|
|
184
|
+
parameters: {
|
|
185
|
+
type: 'object',
|
|
186
|
+
required: ['job_id', 'amount'],
|
|
187
|
+
properties: {
|
|
188
|
+
job_id: { type: 'number', description: 'Job ID to fund' },
|
|
189
|
+
amount: { type: 'number', description: 'Amount to send in XPR (e.g., 5000.0)' },
|
|
190
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
handler: async ({ job_id, amount, confirmed }) => {
|
|
194
|
+
if (!config.session)
|
|
195
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
196
|
+
(0, validate_1.validatePositiveInt)(job_id, 'job_id');
|
|
197
|
+
if (amount <= 0)
|
|
198
|
+
throw new Error('amount must be positive');
|
|
199
|
+
(0, validate_1.validateAmount)((0, validate_1.xprToSmallestUnits)(amount), config.maxTransferAmount);
|
|
200
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, confirmed, 'Fund Job', { job_id, amount: `${amount} XPR` }, `Send ${amount} XPR to fund job #${job_id}`);
|
|
201
|
+
if (confirmation)
|
|
202
|
+
return confirmation;
|
|
203
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
204
|
+
return registry.fundJob(job_id, `${amount.toFixed(4)} XPR`);
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
api.registerTool({
|
|
208
|
+
name: 'xpr_accept_job',
|
|
209
|
+
description: 'Accept a funded job as the assigned agent.',
|
|
210
|
+
parameters: {
|
|
211
|
+
type: 'object',
|
|
212
|
+
required: ['job_id'],
|
|
213
|
+
properties: {
|
|
214
|
+
job_id: { type: 'number', description: 'Job ID to accept' },
|
|
215
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
handler: async ({ job_id, confirmed }) => {
|
|
219
|
+
if (!config.session)
|
|
220
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
221
|
+
(0, validate_1.validatePositiveInt)(job_id, 'job_id');
|
|
222
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, confirmed, 'Accept Job', { job_id }, `Accept job #${job_id} — you will be responsible for completing the deliverables`);
|
|
223
|
+
if (confirmation)
|
|
224
|
+
return confirmation;
|
|
225
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
226
|
+
return registry.acceptJob(job_id);
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
api.registerTool({
|
|
230
|
+
name: 'xpr_deliver_job',
|
|
231
|
+
description: 'Submit job deliverables for client review. Moves job to DELIVERED state.',
|
|
232
|
+
parameters: {
|
|
233
|
+
type: 'object',
|
|
234
|
+
required: ['job_id', 'evidence_uri'],
|
|
235
|
+
properties: {
|
|
236
|
+
job_id: { type: 'number', description: 'Job ID' },
|
|
237
|
+
evidence_uri: { type: 'string', description: 'URI to deliverables/evidence (IPFS/Arweave)' },
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
handler: async ({ job_id, evidence_uri }) => {
|
|
241
|
+
if (!config.session)
|
|
242
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
243
|
+
(0, validate_1.validatePositiveInt)(job_id, 'job_id');
|
|
244
|
+
(0, validate_1.validateRequired)(evidence_uri, 'evidence_uri');
|
|
245
|
+
(0, validate_1.validateUrl)(evidence_uri, 'evidence_uri');
|
|
246
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
247
|
+
return registry.deliverJob(job_id, evidence_uri);
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
api.registerTool({
|
|
251
|
+
name: 'xpr_approve_delivery',
|
|
252
|
+
description: 'Approve a delivered job and release payment to the agent. Only the client can approve.',
|
|
253
|
+
parameters: {
|
|
254
|
+
type: 'object',
|
|
255
|
+
required: ['job_id'],
|
|
256
|
+
properties: {
|
|
257
|
+
job_id: { type: 'number', description: 'Job ID to approve' },
|
|
258
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
handler: async ({ job_id, confirmed }) => {
|
|
262
|
+
if (!config.session)
|
|
263
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
264
|
+
(0, validate_1.validatePositiveInt)(job_id, 'job_id');
|
|
265
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, confirmed, 'Approve Delivery', { job_id }, `Approve delivery for job #${job_id} and release payment to agent`);
|
|
266
|
+
if (confirmation)
|
|
267
|
+
return confirmation;
|
|
268
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
269
|
+
return registry.approveDelivery(job_id);
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
api.registerTool({
|
|
273
|
+
name: 'xpr_raise_dispute',
|
|
274
|
+
description: 'Raise a dispute on a job. Either client or agent can dispute.',
|
|
275
|
+
parameters: {
|
|
276
|
+
type: 'object',
|
|
277
|
+
required: ['job_id', 'reason'],
|
|
278
|
+
properties: {
|
|
279
|
+
job_id: { type: 'number', description: 'Job ID to dispute' },
|
|
280
|
+
reason: { type: 'string', description: 'Reason for the dispute' },
|
|
281
|
+
evidence_uri: { type: 'string', description: 'URI to supporting evidence' },
|
|
282
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
handler: async ({ job_id, reason, evidence_uri, confirmed }) => {
|
|
286
|
+
if (!config.session)
|
|
287
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
288
|
+
(0, validate_1.validatePositiveInt)(job_id, 'job_id');
|
|
289
|
+
(0, validate_1.validateRequired)(reason, 'reason');
|
|
290
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, confirmed, 'Raise Dispute', { job_id, reason }, `Raise dispute on job #${job_id}: "${reason}"`);
|
|
291
|
+
if (confirmation)
|
|
292
|
+
return confirmation;
|
|
293
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
294
|
+
return registry.raiseDispute(job_id, reason, evidence_uri);
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
api.registerTool({
|
|
298
|
+
name: 'xpr_submit_milestone',
|
|
299
|
+
description: 'Submit evidence for a job milestone.',
|
|
300
|
+
parameters: {
|
|
301
|
+
type: 'object',
|
|
302
|
+
required: ['milestone_id', 'evidence_uri'],
|
|
303
|
+
properties: {
|
|
304
|
+
milestone_id: { type: 'number', description: 'Milestone ID' },
|
|
305
|
+
evidence_uri: { type: 'string', description: 'URI to milestone deliverables' },
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
handler: async ({ milestone_id, evidence_uri }) => {
|
|
309
|
+
if (!config.session)
|
|
310
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
311
|
+
(0, validate_1.validatePositiveInt)(milestone_id, 'milestone_id');
|
|
312
|
+
(0, validate_1.validateRequired)(evidence_uri, 'evidence_uri');
|
|
313
|
+
(0, validate_1.validateUrl)(evidence_uri, 'evidence_uri');
|
|
314
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
315
|
+
return registry.submitMilestone(milestone_id, evidence_uri);
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
api.registerTool({
|
|
319
|
+
name: 'xpr_arbitrate',
|
|
320
|
+
description: 'Resolve a dispute as the assigned arbitrator. Splits funds between client and agent based on client_percent.',
|
|
321
|
+
parameters: {
|
|
322
|
+
type: 'object',
|
|
323
|
+
required: ['dispute_id', 'client_percent', 'resolution_notes'],
|
|
324
|
+
properties: {
|
|
325
|
+
dispute_id: { type: 'number', description: 'Dispute ID to resolve' },
|
|
326
|
+
client_percent: { type: 'number', description: 'Percentage of funds to client (0-100, remainder to agent)' },
|
|
327
|
+
resolution_notes: { type: 'string', description: 'Explanation of the resolution decision' },
|
|
328
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
handler: async ({ dispute_id, client_percent, resolution_notes, confirmed }) => {
|
|
332
|
+
if (!config.session)
|
|
333
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
334
|
+
(0, validate_1.validatePositiveInt)(dispute_id, 'dispute_id');
|
|
335
|
+
(0, validate_1.validateClientPercent)(client_percent);
|
|
336
|
+
(0, validate_1.validateRequired)(resolution_notes, 'resolution_notes');
|
|
337
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, confirmed, 'Arbitrate Dispute', { dispute_id, client_percent, agent_percent: 100 - client_percent }, `Resolve dispute #${dispute_id}: ${client_percent}% to client, ${100 - client_percent}% to agent`);
|
|
338
|
+
if (confirmation)
|
|
339
|
+
return confirmation;
|
|
340
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
341
|
+
return registry.arbitrate(dispute_id, client_percent, resolution_notes);
|
|
342
|
+
},
|
|
343
|
+
});
|
|
344
|
+
api.registerTool({
|
|
345
|
+
name: 'xpr_resolve_timeout',
|
|
346
|
+
description: 'Resolve a dispute after the 14-day timeout period (contract owner only). Splits remaining funds between client and agent with 0% arbitrator fee.',
|
|
347
|
+
parameters: {
|
|
348
|
+
type: 'object',
|
|
349
|
+
required: ['dispute_id', 'client_percent', 'resolution_notes'],
|
|
350
|
+
properties: {
|
|
351
|
+
dispute_id: { type: 'number', description: 'Dispute ID to resolve' },
|
|
352
|
+
client_percent: { type: 'number', description: 'Percentage of funds to client (0-100, remainder to agent)' },
|
|
353
|
+
resolution_notes: { type: 'string', description: 'Explanation of the resolution decision (1-1024 chars)' },
|
|
354
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
355
|
+
},
|
|
356
|
+
},
|
|
357
|
+
handler: async ({ dispute_id, client_percent, resolution_notes, confirmed }) => {
|
|
358
|
+
if (!config.session)
|
|
359
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
360
|
+
(0, validate_1.validatePositiveInt)(dispute_id, 'dispute_id');
|
|
361
|
+
(0, validate_1.validateClientPercent)(client_percent);
|
|
362
|
+
(0, validate_1.validateRequired)(resolution_notes, 'resolution_notes');
|
|
363
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, confirmed, 'Resolve Dispute Timeout', { dispute_id, client_percent, agent_percent: 100 - client_percent }, `Resolve timed-out dispute #${dispute_id}: ${client_percent}% to client, ${100 - client_percent}% to agent`);
|
|
364
|
+
if (confirmation)
|
|
365
|
+
return confirmation;
|
|
366
|
+
const registry = new sdk_1.EscrowRegistry(config.rpc, config.session, contracts.agentescrow);
|
|
367
|
+
return registry.resolveTimeout(dispute_id, client_percent, resolution_notes);
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=escrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/tools/escrow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback tools (7 tools)
|
|
3
|
+
* Reads: xpr_get_feedback, xpr_list_agent_feedback, xpr_get_agent_score, xpr_get_feedback_config
|
|
4
|
+
* Writes: xpr_submit_feedback, xpr_dispute_feedback, xpr_recalculate_score
|
|
5
|
+
*/
|
|
6
|
+
import type { PluginApi, PluginConfig } from '../types';
|
|
7
|
+
export declare function registerFeedbackTools(api: PluginApi, config: PluginConfig): void;
|
|
8
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAkMhF"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Feedback tools (7 tools)
|
|
4
|
+
* Reads: xpr_get_feedback, xpr_list_agent_feedback, xpr_get_agent_score, xpr_get_feedback_config
|
|
5
|
+
* Writes: xpr_submit_feedback, xpr_dispute_feedback, xpr_recalculate_score
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.registerFeedbackTools = registerFeedbackTools;
|
|
9
|
+
const sdk_1 = require("@xpr-agents/sdk");
|
|
10
|
+
const validate_1 = require("../util/validate");
|
|
11
|
+
const confirm_1 = require("../util/confirm");
|
|
12
|
+
function registerFeedbackTools(api, config) {
|
|
13
|
+
const contracts = config.contracts;
|
|
14
|
+
// ---- READ TOOLS ----
|
|
15
|
+
api.registerTool({
|
|
16
|
+
name: 'xpr_get_feedback',
|
|
17
|
+
description: 'Get a specific feedback entry by ID.',
|
|
18
|
+
parameters: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
required: ['id'],
|
|
21
|
+
properties: {
|
|
22
|
+
id: { type: 'number', description: 'Feedback ID' },
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
handler: async ({ id }) => {
|
|
26
|
+
(0, validate_1.validatePositiveInt)(id, 'id');
|
|
27
|
+
const registry = new sdk_1.FeedbackRegistry(config.rpc, undefined, contracts.agentfeed);
|
|
28
|
+
const feedback = await registry.getFeedback(id);
|
|
29
|
+
if (!feedback) {
|
|
30
|
+
return { error: `Feedback #${id} not found` };
|
|
31
|
+
}
|
|
32
|
+
return feedback;
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
api.registerTool({
|
|
36
|
+
name: 'xpr_list_agent_feedback',
|
|
37
|
+
description: 'List feedback for a specific agent, with optional score filtering.',
|
|
38
|
+
parameters: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
required: ['agent'],
|
|
41
|
+
properties: {
|
|
42
|
+
agent: { type: 'string', description: 'Agent account name' },
|
|
43
|
+
limit: { type: 'number', description: 'Max results (default 20, max 100)' },
|
|
44
|
+
min_score: { type: 'number', description: 'Minimum score filter (1-5)' },
|
|
45
|
+
max_score: { type: 'number', description: 'Maximum score filter (1-5)' },
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
handler: async ({ agent, limit = 20, min_score, max_score }) => {
|
|
49
|
+
(0, validate_1.validateAccountName)(agent);
|
|
50
|
+
const registry = new sdk_1.FeedbackRegistry(config.rpc, undefined, contracts.agentfeed);
|
|
51
|
+
const feedback = await registry.listFeedbackForAgent(agent, {
|
|
52
|
+
limit: Math.min(limit, 100),
|
|
53
|
+
min_score,
|
|
54
|
+
max_score,
|
|
55
|
+
});
|
|
56
|
+
return { feedback, count: feedback.length };
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
api.registerTool({
|
|
60
|
+
name: 'xpr_get_agent_score',
|
|
61
|
+
description: 'Get the aggregated reputation score for an agent (total_score, total_weight, feedback_count, avg_score).',
|
|
62
|
+
parameters: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
required: ['agent'],
|
|
65
|
+
properties: {
|
|
66
|
+
agent: { type: 'string', description: 'Agent account name' },
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
handler: async ({ agent }) => {
|
|
70
|
+
(0, validate_1.validateAccountName)(agent);
|
|
71
|
+
const registry = new sdk_1.FeedbackRegistry(config.rpc, undefined, contracts.agentfeed);
|
|
72
|
+
const score = await registry.getAgentScore(agent);
|
|
73
|
+
if (!score) {
|
|
74
|
+
return { agent, total_score: 0, total_weight: 0, feedback_count: 0, avg_score: 0 };
|
|
75
|
+
}
|
|
76
|
+
return score;
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
api.registerTool({
|
|
80
|
+
name: 'xpr_get_feedback_config',
|
|
81
|
+
description: 'Get the agentfeed contract configuration (min/max score, dispute window, fees).',
|
|
82
|
+
parameters: { type: 'object', properties: {} },
|
|
83
|
+
handler: async () => {
|
|
84
|
+
const registry = new sdk_1.FeedbackRegistry(config.rpc, undefined, contracts.agentfeed);
|
|
85
|
+
return registry.getConfig();
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
// ---- WRITE TOOLS ----
|
|
89
|
+
api.registerTool({
|
|
90
|
+
name: 'xpr_submit_feedback',
|
|
91
|
+
description: 'Submit feedback/rating for an agent. Score 1-5, with optional tags, job hash, and evidence.',
|
|
92
|
+
parameters: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
required: ['agent', 'score'],
|
|
95
|
+
properties: {
|
|
96
|
+
agent: { type: 'string', description: 'Agent account being reviewed' },
|
|
97
|
+
score: { type: 'number', description: 'Rating 1-5 (1=poor, 5=excellent)' },
|
|
98
|
+
tags: {
|
|
99
|
+
type: 'array',
|
|
100
|
+
items: { type: 'string' },
|
|
101
|
+
description: 'Tags for categorizing feedback (e.g., ["reliable", "fast"])',
|
|
102
|
+
},
|
|
103
|
+
job_hash: { type: 'string', description: 'Hash of the completed job for verification' },
|
|
104
|
+
evidence_uri: { type: 'string', description: 'IPFS/Arweave URI with evidence' },
|
|
105
|
+
fee_amount: { type: 'number', description: 'Feedback fee in XPR. Check xpr_get_feedback_config for current fee.' },
|
|
106
|
+
confirmed: { type: 'boolean', description: 'Set to true to execute after reviewing the confirmation prompt' },
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
handler: async (params) => {
|
|
110
|
+
if (!config.session)
|
|
111
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
112
|
+
(0, validate_1.validateAccountName)(params.agent, 'agent');
|
|
113
|
+
(0, validate_1.validateScore)(params.score);
|
|
114
|
+
if (params.evidence_uri)
|
|
115
|
+
(0, validate_1.validateUrl)(params.evidence_uri, 'evidence_uri');
|
|
116
|
+
if (params.fee_amount) {
|
|
117
|
+
(0, validate_1.validateAmount)((0, validate_1.xprToSmallestUnits)(params.fee_amount), config.maxTransferAmount);
|
|
118
|
+
}
|
|
119
|
+
const confirmation = (0, confirm_1.needsConfirmation)(config.confirmHighRisk, params.confirmed, 'Submit Feedback', { agent: params.agent, score: params.score, fee: params.fee_amount ? `${params.fee_amount} XPR` : 'none' }, `Submit ${params.score}/5 rating for agent "${params.agent}"` + (params.fee_amount ? ` (fee: ${params.fee_amount} XPR)` : ''));
|
|
120
|
+
if (confirmation)
|
|
121
|
+
return confirmation;
|
|
122
|
+
const registry = new sdk_1.FeedbackRegistry(config.rpc, config.session, contracts.agentfeed);
|
|
123
|
+
const data = {
|
|
124
|
+
agent: params.agent,
|
|
125
|
+
score: params.score,
|
|
126
|
+
tags: params.tags,
|
|
127
|
+
job_hash: params.job_hash,
|
|
128
|
+
evidence_uri: params.evidence_uri,
|
|
129
|
+
};
|
|
130
|
+
if (params.fee_amount) {
|
|
131
|
+
return registry.submitWithFee(data, `${params.fee_amount.toFixed(4)} XPR`);
|
|
132
|
+
}
|
|
133
|
+
return registry.submit(data);
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
api.registerTool({
|
|
137
|
+
name: 'xpr_dispute_feedback',
|
|
138
|
+
description: 'Dispute a feedback entry. The agent who received the feedback or the reviewer can dispute.',
|
|
139
|
+
parameters: {
|
|
140
|
+
type: 'object',
|
|
141
|
+
required: ['feedback_id', 'reason'],
|
|
142
|
+
properties: {
|
|
143
|
+
feedback_id: { type: 'number', description: 'ID of the feedback to dispute' },
|
|
144
|
+
reason: { type: 'string', description: 'Reason for the dispute' },
|
|
145
|
+
evidence_uri: { type: 'string', description: 'URI to supporting evidence' },
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
handler: async ({ feedback_id, reason, evidence_uri }) => {
|
|
149
|
+
if (!config.session)
|
|
150
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
151
|
+
(0, validate_1.validatePositiveInt)(feedback_id, 'feedback_id');
|
|
152
|
+
(0, validate_1.validateRequired)(reason, 'reason');
|
|
153
|
+
const registry = new sdk_1.FeedbackRegistry(config.rpc, config.session, contracts.agentfeed);
|
|
154
|
+
return registry.dispute(feedback_id, reason, evidence_uri);
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
api.registerTool({
|
|
158
|
+
name: 'xpr_recalculate_score',
|
|
159
|
+
description: 'Trigger a recalculation of an agent\'s aggregated reputation score. Permissionless.',
|
|
160
|
+
parameters: {
|
|
161
|
+
type: 'object',
|
|
162
|
+
required: ['agent'],
|
|
163
|
+
properties: {
|
|
164
|
+
agent: { type: 'string', description: 'Agent account to recalculate' },
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
handler: async ({ agent }) => {
|
|
168
|
+
if (!config.session)
|
|
169
|
+
throw new Error('Session required: set XPR_ACCOUNT and XPR_PRIVATE_KEY environment variables');
|
|
170
|
+
(0, validate_1.validateAccountName)(agent);
|
|
171
|
+
const registry = new sdk_1.FeedbackRegistry(config.rpc, config.session, contracts.agentfeed);
|
|
172
|
+
return registry.recalculate(agent);
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexer query tools (4 tools)
|
|
3
|
+
* All read-only. Query the XPR Agents indexer REST API.
|
|
4
|
+
*
|
|
5
|
+
* xpr_search_agents, xpr_get_events, xpr_get_stats, xpr_indexer_health
|
|
6
|
+
*/
|
|
7
|
+
import type { PluginApi, PluginConfig } from '../types';
|
|
8
|
+
export declare function registerIndexerTools(api: PluginApi, config: PluginConfig): void;
|
|
9
|
+
//# sourceMappingURL=indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/tools/indexer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAoBxD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA4E/E"}
|