@varun-ai07/covenant-mcp 1.0.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/README.md +1078 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +195 -0
- package/dist/cli.js.map +1 -0
- package/dist/colors.d.ts +14 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +14 -0
- package/dist/colors.js.map +1 -0
- package/dist/config.d.ts +396 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +191 -0
- package/dist/config.js.map +1 -0
- package/dist/handlers/transactions.d.ts +5 -0
- package/dist/handlers/transactions.d.ts.map +1 -0
- package/dist/handlers/transactions.js +82 -0
- package/dist/handlers/transactions.js.map +1 -0
- package/dist/handlers/wallet.d.ts +24 -0
- package/dist/handlers/wallet.d.ts.map +1 -0
- package/dist/handlers/wallet.js +264 -0
- package/dist/handlers/wallet.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +11 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +31 -0
- package/dist/logger.js.map +1 -0
- package/dist/postinstall.d.ts +3 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +38 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/schemas.d.ts +48 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +114 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +23 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +51 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/batches.d.ts +3 -0
- package/dist/tools/batches.d.ts.map +1 -0
- package/dist/tools/batches.js +167 -0
- package/dist/tools/batches.js.map +1 -0
- package/dist/tools/collectives.d.ts +3 -0
- package/dist/tools/collectives.d.ts.map +1 -0
- package/dist/tools/collectives.js +168 -0
- package/dist/tools/collectives.js.map +1 -0
- package/dist/tools/disputes.d.ts +3 -0
- package/dist/tools/disputes.d.ts.map +1 -0
- package/dist/tools/disputes.js +129 -0
- package/dist/tools/disputes.js.map +1 -0
- package/dist/tools/escrow.d.ts +3 -0
- package/dist/tools/escrow.d.ts.map +1 -0
- package/dist/tools/escrow.js +238 -0
- package/dist/tools/escrow.js.map +1 -0
- package/dist/tools/insurance.d.ts +3 -0
- package/dist/tools/insurance.d.ts.map +1 -0
- package/dist/tools/insurance.js +101 -0
- package/dist/tools/insurance.js.map +1 -0
- package/dist/tools/market.d.ts +3 -0
- package/dist/tools/market.d.ts.map +1 -0
- package/dist/tools/market.js +303 -0
- package/dist/tools/market.js.map +1 -0
- package/dist/tools/protocol.d.ts +3 -0
- package/dist/tools/protocol.d.ts.map +1 -0
- package/dist/tools/protocol.js +121 -0
- package/dist/tools/protocol.js.map +1 -0
- package/dist/tools/receipts.d.ts +3 -0
- package/dist/tools/receipts.d.ts.map +1 -0
- package/dist/tools/receipts.js +88 -0
- package/dist/tools/receipts.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +136 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/transports/http.d.ts +3 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +121 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/stdio.d.ts +7 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +9 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentCollective MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* create_collective — Create a new agent collective
|
|
5
|
+
* join_collective — Join an existing collective
|
|
6
|
+
* launch_collective_task — Launch a task from a collective
|
|
7
|
+
* get_collective — Get collective details
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { parseEther, formatEther, isAddress } from "viem";
|
|
11
|
+
import { loadAbi, CONTRACTS, getAccount } from "../config.js";
|
|
12
|
+
import { executeOrPrepare, readContract } from "../handlers/wallet.js";
|
|
13
|
+
import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
|
|
14
|
+
const ABI = loadAbi("AgentCollective");
|
|
15
|
+
// Input validation schemas
|
|
16
|
+
const createCollectiveSchema = z.object({
|
|
17
|
+
minContribution: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount"),
|
|
18
|
+
maxMembers: z.number().int().min(2).max(100),
|
|
19
|
+
});
|
|
20
|
+
const joinCollectiveSchema = z.object({
|
|
21
|
+
collectiveId: z.number().int().positive(),
|
|
22
|
+
contribution: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount"),
|
|
23
|
+
});
|
|
24
|
+
const launchTaskSchema = z.object({
|
|
25
|
+
collectiveId: z.number().int().positive(),
|
|
26
|
+
workerAddress: z.string().refine(isAddress, { message: "Invalid worker address" }),
|
|
27
|
+
payment: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount"),
|
|
28
|
+
deadline: z.number().int().positive(),
|
|
29
|
+
descriptionHash: z.string().min(1).max(100),
|
|
30
|
+
});
|
|
31
|
+
export function registerCollectiveTools(server) {
|
|
32
|
+
// ──────────────────────────────────────────────────────────────
|
|
33
|
+
// create_collective
|
|
34
|
+
// ──────────────────────────────────────────────────────────────
|
|
35
|
+
server.registerTool("create_collective", {
|
|
36
|
+
title: "Create Agent Collective",
|
|
37
|
+
description: "Create a new collective of agents that pool resources. " +
|
|
38
|
+
"Collectives can launch tasks and share proceeds.",
|
|
39
|
+
inputSchema: {
|
|
40
|
+
minContribution: z.string().describe("Minimum contribution in ETH to join"),
|
|
41
|
+
maxMembers: z.number().describe("Maximum number of members (2-100)"),
|
|
42
|
+
},
|
|
43
|
+
}, async ({ minContribution, maxMembers }) => {
|
|
44
|
+
try {
|
|
45
|
+
const validation = createCollectiveSchema.safeParse({ minContribution, maxMembers });
|
|
46
|
+
if (!validation.success) {
|
|
47
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
48
|
+
}
|
|
49
|
+
const account = getAccount();
|
|
50
|
+
if (!account) {
|
|
51
|
+
return formatError(new Error("No private key configured"));
|
|
52
|
+
}
|
|
53
|
+
const minContributionWei = parseEther(minContribution);
|
|
54
|
+
const result = await executeOrPrepare(CONTRACTS.AgentCollective, ABI, "createCollective", [minContributionWei, BigInt(maxMembers)]);
|
|
55
|
+
return formatTxResult(result);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
return formatError(e);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
// ──────────────────────────────────────────────────────────────
|
|
62
|
+
// join_collective
|
|
63
|
+
// ──────────────────────────────────────────────────────────────
|
|
64
|
+
server.registerTool("join_collective", {
|
|
65
|
+
title: "Join Collective",
|
|
66
|
+
description: "Join an existing collective by contributing ETH. " +
|
|
67
|
+
"Contribution must meet the collective's minimum.",
|
|
68
|
+
inputSchema: {
|
|
69
|
+
collectiveId: z.number().describe("Collective ID to join"),
|
|
70
|
+
contribution: z.string().describe("Contribution amount in ETH"),
|
|
71
|
+
},
|
|
72
|
+
}, async ({ collectiveId, contribution }) => {
|
|
73
|
+
try {
|
|
74
|
+
const validation = joinCollectiveSchema.safeParse({ collectiveId, contribution });
|
|
75
|
+
if (!validation.success) {
|
|
76
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
77
|
+
}
|
|
78
|
+
const account = getAccount();
|
|
79
|
+
if (!account) {
|
|
80
|
+
return formatError(new Error("No private key configured"));
|
|
81
|
+
}
|
|
82
|
+
const contributionWei = parseEther(contribution);
|
|
83
|
+
const result = await executeOrPrepare(CONTRACTS.AgentCollective, ABI, "joinCollective", [BigInt(collectiveId)], contributionWei);
|
|
84
|
+
return formatTxResult(result);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
return formatError(e);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
// ──────────────────────────────────────────────────────────────
|
|
91
|
+
// launch_collective_task
|
|
92
|
+
// ──────────────────────────────────────────────────────────────
|
|
93
|
+
server.registerTool("launch_collective_task", {
|
|
94
|
+
title: "Launch Collective Task",
|
|
95
|
+
description: "Launch a task from a collective's pooled funds. " +
|
|
96
|
+
"Only collective members can call this.",
|
|
97
|
+
inputSchema: {
|
|
98
|
+
collectiveId: z.number().describe("Collective ID"),
|
|
99
|
+
workerAddress: z.string().describe("Worker address to assign"),
|
|
100
|
+
payment: z.string().describe("Payment amount in ETH"),
|
|
101
|
+
deadline: z.number().describe("Deadline timestamp (seconds)"),
|
|
102
|
+
descriptionHash: z.string().describe("IPFS CID for task description"),
|
|
103
|
+
},
|
|
104
|
+
}, async ({ collectiveId, workerAddress, payment, deadline, descriptionHash }) => {
|
|
105
|
+
try {
|
|
106
|
+
const validation = launchTaskSchema.safeParse({ collectiveId, workerAddress, payment, deadline, descriptionHash });
|
|
107
|
+
if (!validation.success) {
|
|
108
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
109
|
+
}
|
|
110
|
+
const account = getAccount();
|
|
111
|
+
if (!account) {
|
|
112
|
+
return formatError(new Error("No private key configured"));
|
|
113
|
+
}
|
|
114
|
+
const paymentWei = parseEther(payment);
|
|
115
|
+
const result = await executeOrPrepare(CONTRACTS.AgentCollective, ABI, "launchTask", [
|
|
116
|
+
BigInt(collectiveId),
|
|
117
|
+
workerAddress,
|
|
118
|
+
paymentWei,
|
|
119
|
+
BigInt(deadline),
|
|
120
|
+
descriptionHash,
|
|
121
|
+
]);
|
|
122
|
+
return formatTxResult(result);
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
return formatError(e);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
// ──────────────────────────────────────────────────────────────
|
|
129
|
+
// get_collective
|
|
130
|
+
// ──────────────────────────────────────────────────────────────
|
|
131
|
+
server.registerTool("get_collective", {
|
|
132
|
+
title: "Get Collective Details",
|
|
133
|
+
description: "Retrieve details about a collective including members and treasury.",
|
|
134
|
+
inputSchema: {
|
|
135
|
+
collectiveId: z.number().describe("Collective ID"),
|
|
136
|
+
},
|
|
137
|
+
}, async ({ collectiveId }) => {
|
|
138
|
+
try {
|
|
139
|
+
const data = await readContract(CONTRACTS.AgentCollective, ABI, "getCollective", [BigInt(collectiveId)]);
|
|
140
|
+
const enriched = {
|
|
141
|
+
...data,
|
|
142
|
+
minContributionEth: formatEther(data.minContribution),
|
|
143
|
+
treasuryEth: formatEther(data.treasury),
|
|
144
|
+
};
|
|
145
|
+
return formatReadResult(enriched, `Collective #${collectiveId}`);
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
return formatError(e);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
// ──────────────────────────────────────────────────────────────
|
|
152
|
+
// get_collective_counter
|
|
153
|
+
// ──────────────────────────────────────────────────────────────
|
|
154
|
+
server.registerTool("get_collective_counter", {
|
|
155
|
+
title: "Get Collective Counter",
|
|
156
|
+
description: "Get the total number of collectives created.",
|
|
157
|
+
inputSchema: {},
|
|
158
|
+
}, async () => {
|
|
159
|
+
try {
|
|
160
|
+
const count = await readContract(CONTRACTS.AgentCollective, ABI, "collectiveCounter", []);
|
|
161
|
+
return formatReadResult({ count: Number(count) }, "Collective Counter");
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
return formatError(e);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=collectives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectives.js","sourceRoot":"","sources":["../../src/tools/collectives.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disputes.d.ts","sourceRoot":"","sources":["../../src/tools/disputes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoJ5D"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DisputeArbitration MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* file_dispute — File a dispute on a task
|
|
5
|
+
* cast_vote — Cast a vote on a dispute
|
|
6
|
+
* get_dispute — Get dispute details
|
|
7
|
+
* get_dispute_counter — Get total disputes
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { parseEther, formatEther } from "viem";
|
|
11
|
+
import { loadAbi, CONTRACTS, getAccount } from "../config.js";
|
|
12
|
+
import { executeOrPrepare, readContract } from "../handlers/wallet.js";
|
|
13
|
+
import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
|
|
14
|
+
const ABI = loadAbi("DisputeArbitration");
|
|
15
|
+
// Input validation schemas
|
|
16
|
+
const fileDisputeSchema = z.object({
|
|
17
|
+
taskId: z.number().int().positive(),
|
|
18
|
+
bond: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount")
|
|
19
|
+
.refine(val => parseFloat(val) >= 0.001, { message: "Bond must be at least 0.001 ETH" }),
|
|
20
|
+
});
|
|
21
|
+
const castVoteSchema = z.object({
|
|
22
|
+
disputeId: z.number().int().positive(),
|
|
23
|
+
inFavorOfWorker: z.boolean(),
|
|
24
|
+
});
|
|
25
|
+
export function registerDisputeTools(server) {
|
|
26
|
+
// ──────────────────────────────────────────────────────────────
|
|
27
|
+
// file_dispute
|
|
28
|
+
// ──────────────────────────────────────────────────────────────
|
|
29
|
+
server.registerTool("file_dispute", {
|
|
30
|
+
title: "File Dispute",
|
|
31
|
+
description: "File a formal dispute on a task. Requires a bond in ETH. " +
|
|
32
|
+
"The dispute will be resolved by juror voting.",
|
|
33
|
+
inputSchema: {
|
|
34
|
+
taskId: z.number().describe("Task ID to dispute"),
|
|
35
|
+
bond: z.string().describe("Dispute bond amount in ETH"),
|
|
36
|
+
},
|
|
37
|
+
}, async ({ taskId, bond }) => {
|
|
38
|
+
try {
|
|
39
|
+
const validation = fileDisputeSchema.safeParse({ taskId, bond });
|
|
40
|
+
if (!validation.success) {
|
|
41
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
42
|
+
}
|
|
43
|
+
const account = getAccount();
|
|
44
|
+
if (!account) {
|
|
45
|
+
return formatError(new Error("No private key configured"));
|
|
46
|
+
}
|
|
47
|
+
const bondWei = parseEther(bond);
|
|
48
|
+
const result = await executeOrPrepare(CONTRACTS.DisputeArbitration, ABI, "disputeTask", [BigInt(taskId)], bondWei);
|
|
49
|
+
return formatTxResult(result);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
return formatError(e);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
// ──────────────────────────────────────────────────────────────
|
|
56
|
+
// cast_vote
|
|
57
|
+
// ──────────────────────────────────────────────────────────────
|
|
58
|
+
server.registerTool("cast_vote", {
|
|
59
|
+
title: "Cast Vote",
|
|
60
|
+
description: "Cast your vote on a dispute. True = favor worker, False = favor client. " +
|
|
61
|
+
"Only selected jurors can vote.",
|
|
62
|
+
inputSchema: {
|
|
63
|
+
disputeId: z.number().describe("Dispute ID"),
|
|
64
|
+
inFavorOfWorker: z.boolean().describe("True to vote for worker, false for client"),
|
|
65
|
+
},
|
|
66
|
+
}, async ({ disputeId, inFavorOfWorker }) => {
|
|
67
|
+
try {
|
|
68
|
+
const validation = castVoteSchema.safeParse({ disputeId, inFavorOfWorker });
|
|
69
|
+
if (!validation.success) {
|
|
70
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
71
|
+
}
|
|
72
|
+
const account = getAccount();
|
|
73
|
+
if (!account) {
|
|
74
|
+
return formatError(new Error("No private key configured"));
|
|
75
|
+
}
|
|
76
|
+
const result = await executeOrPrepare(CONTRACTS.DisputeArbitration, ABI, "castVote", [BigInt(disputeId), inFavorOfWorker], undefined, "DisputeArbitration");
|
|
77
|
+
return formatTxResult(result);
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
return formatError(e);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
// ──────────────────────────────────────────────────────────────
|
|
84
|
+
// get_dispute
|
|
85
|
+
// ──────────────────────────────────────────────────────────────
|
|
86
|
+
server.registerTool("get_dispute", {
|
|
87
|
+
title: "Get Dispute Details",
|
|
88
|
+
description: "Retrieve full details of a dispute including votes and resolution status.",
|
|
89
|
+
inputSchema: {
|
|
90
|
+
disputeId: z.number().describe("Dispute ID"),
|
|
91
|
+
},
|
|
92
|
+
}, async ({ disputeId }) => {
|
|
93
|
+
try {
|
|
94
|
+
const data = await readContract(CONTRACTS.DisputeArbitration, ABI, "getDispute", [BigInt(disputeId)]);
|
|
95
|
+
const enriched = {
|
|
96
|
+
taskId: data.taskId,
|
|
97
|
+
client: data.client,
|
|
98
|
+
worker: data.worker,
|
|
99
|
+
disputeBondEth: formatEther(data.disputeBond),
|
|
100
|
+
jurors: data.jurors,
|
|
101
|
+
resolved: data.resolved,
|
|
102
|
+
workerWins: data.workerWins,
|
|
103
|
+
createdAt: data.createdAt,
|
|
104
|
+
votingEndsAt: data.votingEndsAt,
|
|
105
|
+
};
|
|
106
|
+
return formatReadResult(enriched, `Dispute #${disputeId}`);
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
return formatError(e);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
// ──────────────────────────────────────────────────────────────
|
|
113
|
+
// get_dispute_counter
|
|
114
|
+
// ──────────────────────────────────────────────────────────────
|
|
115
|
+
server.registerTool("get_dispute_counter", {
|
|
116
|
+
title: "Get Dispute Counter",
|
|
117
|
+
description: "Get the total number of disputes filed.",
|
|
118
|
+
inputSchema: {},
|
|
119
|
+
}, async () => {
|
|
120
|
+
try {
|
|
121
|
+
const count = await readContract(CONTRACTS.DisputeArbitration, ABI, "disputeCounter", []);
|
|
122
|
+
return formatReadResult({ count: Number(count) }, "Dispute Counter");
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
return formatError(e);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=disputes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disputes.js","sourceRoot":"","sources":["../../src/tools/disputes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow.d.ts","sourceRoot":"","sources":["../../src/tools/escrow.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyCzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6P3D"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskEscrow MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* create_task — Create and fund a task (one-shot)
|
|
5
|
+
* get_task — Read task details by ID
|
|
6
|
+
* submit_work — Submit deliverable hash for a task
|
|
7
|
+
* verify_task — Mark a submitted task as verified / completed
|
|
8
|
+
* dispute_task — Open a dispute on a task
|
|
9
|
+
*/
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { parseEther, formatEther, isAddress } from "viem";
|
|
12
|
+
import { loadAbi, CONTRACTS, getAccount } from "../config.js";
|
|
13
|
+
import { executeOrPrepare, readContract } from "../handlers/wallet.js";
|
|
14
|
+
import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
|
|
15
|
+
import { TASK_STATUS } from "../types.js";
|
|
16
|
+
const ABI = loadAbi("TaskEscrow");
|
|
17
|
+
// Input validation schemas
|
|
18
|
+
const createTaskSchema = z.object({
|
|
19
|
+
worker: z.string().refine(isAddress, { message: "Invalid worker Ethereum address" }),
|
|
20
|
+
payment: z.string().regex(/^\d+\.\d{1,18}$/, "Invalid ETH amount format")
|
|
21
|
+
.refine(val => {
|
|
22
|
+
const paymentAmount = parseFloat(val);
|
|
23
|
+
return paymentAmount >= 0.001 && paymentAmount <= 1000; // Allow up to 1000 ETH for tasks
|
|
24
|
+
}, { message: "Payment must be between 0.001 and 1000 ETH" }),
|
|
25
|
+
deadline: z.number().int().positive()
|
|
26
|
+
.refine(val => {
|
|
27
|
+
const deadlineTimestamp = val * 1000; // Convert to milliseconds
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
const oneYearFromNow = now + (365 * 24 * 60 * 60 * 1000); // 1 year max
|
|
30
|
+
return deadlineTimestamp > now && deadlineTimestamp < oneYearFromNow;
|
|
31
|
+
}, { message: "Deadline must be a future timestamp within 1 year" }),
|
|
32
|
+
descriptionHash: z.string().min(1).max(100), // Basic IPFS CID validation
|
|
33
|
+
priority: z.number().int().min(0).max(3).optional().default(1) // 0-3 for priority levels
|
|
34
|
+
});
|
|
35
|
+
const getTaskSchema = z.object({
|
|
36
|
+
taskId: z.number().int().positive()
|
|
37
|
+
});
|
|
38
|
+
const submitWorkSchema = z.object({
|
|
39
|
+
taskId: z.number().int().positive(),
|
|
40
|
+
deliverableHash: z.string().min(1).max(100) // Basic IPFS CID validation
|
|
41
|
+
});
|
|
42
|
+
const verifyTaskSchema = z.object({
|
|
43
|
+
taskId: z.number().int().positive()
|
|
44
|
+
});
|
|
45
|
+
const disputeTaskSchema = z.object({
|
|
46
|
+
taskId: z.number().int().positive(),
|
|
47
|
+
reason: z.string().max(500).optional() // Limit reason length
|
|
48
|
+
});
|
|
49
|
+
export function registerEscrowTools(server) {
|
|
50
|
+
// ──────────────────────────────────────────────────────────────
|
|
51
|
+
// create_task
|
|
52
|
+
// ──────────────────────────────────────────────────────────────
|
|
53
|
+
server.registerTool("create_task", {
|
|
54
|
+
title: "Create & Fund Task",
|
|
55
|
+
description: "Create a new task on TaskEscrow, assign a worker, fund it with ETH, " +
|
|
56
|
+
"and set a deadline. The payment value is sent as msg.value. " +
|
|
57
|
+
"descriptionHash is typically an IPFS CID pointing to task details.",
|
|
58
|
+
inputSchema: {
|
|
59
|
+
worker: z.string().describe("Worker agent's Ethereum address"),
|
|
60
|
+
payment: z.string().describe("Payment amount in ETH, e.g. '0.01'"),
|
|
61
|
+
deadline: z
|
|
62
|
+
.number()
|
|
63
|
+
.describe("Unix timestamp deadline (seconds since epoch)"),
|
|
64
|
+
descriptionHash: z
|
|
65
|
+
.string()
|
|
66
|
+
.describe("IPFS CID or on-chain hash for task description"),
|
|
67
|
+
priority: z
|
|
68
|
+
.number()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe("Priority level 0-3 (Low/Medium/High/Urgent). Default 1 (Medium)"),
|
|
71
|
+
},
|
|
72
|
+
}, async ({ worker, payment, deadline, descriptionHash, priority }) => {
|
|
73
|
+
try {
|
|
74
|
+
// Validate input
|
|
75
|
+
const validationResult = createTaskSchema.safeParse({ worker, payment, deadline, descriptionHash, priority });
|
|
76
|
+
if (!validationResult.success) {
|
|
77
|
+
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
78
|
+
}
|
|
79
|
+
// Validation successful, use validated values
|
|
80
|
+
const validatedWorker = worker;
|
|
81
|
+
const validatedPayment = payment;
|
|
82
|
+
const validatedDeadline = deadline;
|
|
83
|
+
const validatedDescriptionHash = descriptionHash;
|
|
84
|
+
const validatedPriority = priority;
|
|
85
|
+
const account = getAccount();
|
|
86
|
+
if (!account) {
|
|
87
|
+
return formatError(new Error("No private key configured — cannot send transactions"));
|
|
88
|
+
}
|
|
89
|
+
const paymentWei = parseEther(payment);
|
|
90
|
+
const priorityLevel = priority ?? 1;
|
|
91
|
+
// Use createAndFundTask which is the combined function used by client.ts
|
|
92
|
+
const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "createAndFundTask", [
|
|
93
|
+
validatedWorker,
|
|
94
|
+
paymentWei,
|
|
95
|
+
BigInt(validatedDeadline),
|
|
96
|
+
validatedDescriptionHash,
|
|
97
|
+
], paymentWei // send ETH as msg.value
|
|
98
|
+
);
|
|
99
|
+
return formatTxResult(result);
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
return formatError(e);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// ──────────────────────────────────────────────────────────────
|
|
106
|
+
// get_task
|
|
107
|
+
// ──────────────────────────────────────────────────────────────
|
|
108
|
+
server.registerTool("get_task", {
|
|
109
|
+
title: "Get Task Details",
|
|
110
|
+
description: "Retrieve full on-chain details for a task by its numeric ID. " +
|
|
111
|
+
"Returns client, worker, payment, deadline, status (human-readable), hashes, and timestamps.",
|
|
112
|
+
inputSchema: {
|
|
113
|
+
taskId: z.number().describe("Numeric task ID"),
|
|
114
|
+
},
|
|
115
|
+
}, async ({ taskId }) => {
|
|
116
|
+
try {
|
|
117
|
+
// Validate input
|
|
118
|
+
const taskIdParam = taskId;
|
|
119
|
+
const validationResult = getTaskSchema.safeParse({ taskId: taskIdParam });
|
|
120
|
+
if (!validationResult.success) {
|
|
121
|
+
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
122
|
+
}
|
|
123
|
+
// Use validated taskId
|
|
124
|
+
const validatedTaskId = validationResult.data.taskId;
|
|
125
|
+
const data = await readContract(CONTRACTS.TaskEscrow, ABI, "getTask", [BigInt(validatedTaskId)]);
|
|
126
|
+
// Enrich status and priority with human-readable labels
|
|
127
|
+
const enriched = {
|
|
128
|
+
...data,
|
|
129
|
+
statusLabel: TASK_STATUS[data.status] ?? `Unknown(${data.status})`,
|
|
130
|
+
paymentEth: formatEther(data.payment),
|
|
131
|
+
};
|
|
132
|
+
return formatReadResult(enriched, `Task #${taskId}`);
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
return formatError(e);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// ──────────────────────────────────────────────────────────────
|
|
139
|
+
// submit_work
|
|
140
|
+
// ──────────────────────────────────────────────────────────────
|
|
141
|
+
server.registerTool("submit_work", {
|
|
142
|
+
title: "Submit Work Deliverable",
|
|
143
|
+
description: "Worker submits a deliverable hash (typically IPFS CID) for a task. " +
|
|
144
|
+
"Only the assigned worker can call this. Transitions task status to Submitted.",
|
|
145
|
+
inputSchema: {
|
|
146
|
+
taskId: z.number().describe("Numeric task ID"),
|
|
147
|
+
deliverableHash: z
|
|
148
|
+
.string()
|
|
149
|
+
.describe("IPFS CID or hash of the deliverable"),
|
|
150
|
+
},
|
|
151
|
+
}, async ({ taskId, deliverableHash }) => {
|
|
152
|
+
try {
|
|
153
|
+
// Validate input
|
|
154
|
+
const validationResult = submitWorkSchema.safeParse({ taskId, deliverableHash });
|
|
155
|
+
if (!validationResult.success) {
|
|
156
|
+
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
157
|
+
}
|
|
158
|
+
// Use validated values
|
|
159
|
+
const validatedTaskId = validationResult.data.taskId;
|
|
160
|
+
const validatedDeliverableHash = validationResult.data.deliverableHash;
|
|
161
|
+
const account = getAccount();
|
|
162
|
+
if (!account) {
|
|
163
|
+
return formatError(new Error("No private key configured — cannot send transactions"));
|
|
164
|
+
}
|
|
165
|
+
const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "submitWork", [BigInt(validatedTaskId), validatedDeliverableHash]);
|
|
166
|
+
return formatTxResult(result);
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
return formatError(e);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// ──────────────────────────────────────────────────────────────
|
|
173
|
+
// verify_task
|
|
174
|
+
// ──────────────────────────────────────────────────────────────
|
|
175
|
+
server.registerTool("verify_task", {
|
|
176
|
+
title: "Verify & Approve Task",
|
|
177
|
+
description: "Client verifies a submitted task and releases payment to the worker. " +
|
|
178
|
+
"Only the task client can call this. Transitions status to Completed.",
|
|
179
|
+
inputSchema: {
|
|
180
|
+
taskId: z.number().describe("Numeric task ID"),
|
|
181
|
+
},
|
|
182
|
+
}, async ({ taskId }) => {
|
|
183
|
+
try {
|
|
184
|
+
// Validate input
|
|
185
|
+
const validationResult = verifyTaskSchema.safeParse({ taskId });
|
|
186
|
+
if (!validationResult.success) {
|
|
187
|
+
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
188
|
+
}
|
|
189
|
+
// Use validated taskId
|
|
190
|
+
const validatedTaskId = validationResult.data.taskId;
|
|
191
|
+
const account = getAccount();
|
|
192
|
+
if (!account) {
|
|
193
|
+
return formatError(new Error("No private key configured — cannot send transactions"));
|
|
194
|
+
}
|
|
195
|
+
const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "verifyTask", [BigInt(validatedTaskId)], undefined, "TaskEscrow");
|
|
196
|
+
return formatTxResult(result);
|
|
197
|
+
}
|
|
198
|
+
catch (e) {
|
|
199
|
+
return formatError(e);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
// ──────────────────────────────────────────────────────────────
|
|
203
|
+
// dispute_task
|
|
204
|
+
// ──────────────────────────────────────────────────────────────
|
|
205
|
+
server.registerTool("dispute_task", {
|
|
206
|
+
title: "Dispute a Task",
|
|
207
|
+
description: "Open a dispute on a task. Either the client or worker can dispute. " +
|
|
208
|
+
"Transitions status to Disputed and pauses payment release.",
|
|
209
|
+
inputSchema: {
|
|
210
|
+
taskId: z.number().describe("Numeric task ID"),
|
|
211
|
+
reason: z
|
|
212
|
+
.string()
|
|
213
|
+
.optional()
|
|
214
|
+
.describe("Optional reason for the dispute (stored off-chain / emitted in event)"),
|
|
215
|
+
},
|
|
216
|
+
}, async ({ taskId, reason }) => {
|
|
217
|
+
try {
|
|
218
|
+
// Validate input
|
|
219
|
+
const validationResult = disputeTaskSchema.safeParse({ taskId, reason });
|
|
220
|
+
if (!validationResult.success) {
|
|
221
|
+
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
222
|
+
}
|
|
223
|
+
// Use validated values
|
|
224
|
+
const validatedTaskId = validationResult.data.taskId;
|
|
225
|
+
const validatedReason = validationResult.data.reason;
|
|
226
|
+
const account = getAccount();
|
|
227
|
+
if (!account) {
|
|
228
|
+
return formatError(new Error("No private key configured — cannot send transactions"));
|
|
229
|
+
}
|
|
230
|
+
const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "disputeTask", [BigInt(validatedTaskId)], undefined, "TaskEscrow");
|
|
231
|
+
return formatTxResult(result);
|
|
232
|
+
}
|
|
233
|
+
catch (e) {
|
|
234
|
+
return formatError(e);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"insurance.d.ts","sourceRoot":"","sources":["../../src/tools/insurance.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyH9D"}
|