@varun-ai07/covenant-mcp 1.2.3 → 1.3.2
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 +1056 -170
- package/dist/abis/MultiTokenEscrow.json +836 -0
- package/dist/abis/v2/AgentRegistry.json +872 -0
- package/dist/abis/v2/DisputeResolution.json +493 -0
- package/dist/abis/v2/InsurancePool.json +645 -0
- package/dist/abis/v2/ReceiptVerifier.json +394 -0
- package/dist/abis/v2/RevisionManager.json +544 -0
- package/dist/abis/v2/TaskEscrow.json +1018 -0
- package/dist/cli.js +0 -0
- package/dist/config.d.ts +13 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +84 -25
- package/dist/config.js.map +1 -1
- package/dist/lib/did.d.ts +72 -0
- package/dist/lib/did.d.ts.map +1 -0
- package/dist/lib/did.js +115 -0
- package/dist/lib/did.js.map +1 -0
- package/dist/lib/formatResponse.d.ts +33 -0
- package/dist/lib/formatResponse.d.ts.map +1 -0
- package/dist/lib/formatResponse.js +92 -0
- package/dist/lib/formatResponse.js.map +1 -0
- package/dist/lib/schemaHelpers.d.ts +11 -0
- package/dist/lib/schemaHelpers.d.ts.map +1 -0
- package/dist/lib/schemaHelpers.js +11 -0
- package/dist/lib/schemaHelpers.js.map +1 -0
- package/dist/lib/store.d.ts +10 -0
- package/dist/lib/store.d.ts.map +1 -0
- package/dist/lib/store.js +39 -0
- package/dist/lib/store.js.map +1 -0
- package/dist/lib/verify.d.ts +21 -0
- package/dist/lib/verify.d.ts.map +1 -0
- package/dist/lib/verify.js +568 -0
- package/dist/lib/verify.js.map +1 -0
- package/dist/schemas.d.ts +5 -5
- package/dist/schemas.d.ts.map +1 -1
- package/dist/server.d.ts +1 -25
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +53 -37
- package/dist/server.js.map +1 -1
- package/dist/shared-types.d.ts +67 -0
- package/dist/shared-types.d.ts.map +1 -0
- package/dist/shared-types.js +86 -0
- package/dist/shared-types.js.map +1 -0
- package/dist/tools/account-abstraction.d.ts +3 -0
- package/dist/tools/account-abstraction.d.ts.map +1 -0
- package/dist/tools/account-abstraction.js +364 -0
- package/dist/tools/account-abstraction.js.map +1 -0
- package/dist/tools/batches.d.ts.map +1 -1
- package/dist/tools/batches.js +68 -37
- package/dist/tools/batches.js.map +1 -1
- package/dist/tools/bounties.d.ts +3 -0
- package/dist/tools/bounties.d.ts.map +1 -0
- package/dist/tools/bounties.js +304 -0
- package/dist/tools/bounties.js.map +1 -0
- package/dist/tools/bridge.d.ts +3 -0
- package/dist/tools/bridge.d.ts.map +1 -0
- package/dist/tools/bridge.js +190 -0
- package/dist/tools/bridge.js.map +1 -0
- package/dist/tools/collectives.d.ts.map +1 -1
- package/dist/tools/collectives.js +74 -46
- package/dist/tools/collectives.js.map +1 -1
- package/dist/tools/covenant-help.d.ts +3 -0
- package/dist/tools/covenant-help.d.ts.map +1 -0
- package/dist/tools/covenant-help.js +321 -0
- package/dist/tools/covenant-help.js.map +1 -0
- package/dist/tools/cross-chain.d.ts +3 -0
- package/dist/tools/cross-chain.d.ts.map +1 -0
- package/dist/tools/cross-chain.js +77 -0
- package/dist/tools/cross-chain.js.map +1 -0
- package/dist/tools/disputes.d.ts.map +1 -1
- package/dist/tools/disputes.js +39 -33
- package/dist/tools/disputes.js.map +1 -1
- package/dist/tools/escrow.d.ts.map +1 -1
- package/dist/tools/escrow.js +248 -199
- package/dist/tools/escrow.js.map +1 -1
- package/dist/tools/fiat-onramp.d.ts +3 -0
- package/dist/tools/fiat-onramp.d.ts.map +1 -0
- package/dist/tools/fiat-onramp.js +108 -0
- package/dist/tools/fiat-onramp.js.map +1 -0
- package/dist/tools/governance.d.ts +3 -0
- package/dist/tools/governance.d.ts.map +1 -0
- package/dist/tools/governance.js +271 -0
- package/dist/tools/governance.js.map +1 -0
- package/dist/tools/grants.d.ts +3 -0
- package/dist/tools/grants.d.ts.map +1 -0
- package/dist/tools/grants.js +269 -0
- package/dist/tools/grants.js.map +1 -0
- package/dist/tools/insurance.d.ts.map +1 -1
- package/dist/tools/insurance.js +92 -45
- package/dist/tools/insurance.js.map +1 -1
- package/dist/tools/market.d.ts.map +1 -1
- package/dist/tools/market.js +122 -103
- package/dist/tools/market.js.map +1 -1
- package/dist/tools/matching.d.ts +3 -0
- package/dist/tools/matching.d.ts.map +1 -0
- package/dist/tools/matching.js +233 -0
- package/dist/tools/matching.js.map +1 -0
- package/dist/tools/messaging.d.ts +3 -0
- package/dist/tools/messaging.d.ts.map +1 -0
- package/dist/tools/messaging.js +159 -0
- package/dist/tools/messaging.js.map +1 -0
- package/dist/tools/multi-token.d.ts +3 -0
- package/dist/tools/multi-token.d.ts.map +1 -0
- package/dist/tools/multi-token.js +274 -0
- package/dist/tools/multi-token.js.map +1 -0
- package/dist/tools/offchain-coordinator.d.ts +3 -0
- package/dist/tools/offchain-coordinator.d.ts.map +1 -0
- package/dist/tools/offchain-coordinator.js +436 -0
- package/dist/tools/offchain-coordinator.js.map +1 -0
- package/dist/tools/protocol.d.ts.map +1 -1
- package/dist/tools/protocol.js +19 -6
- package/dist/tools/protocol.js.map +1 -1
- package/dist/tools/receipts.d.ts.map +1 -1
- package/dist/tools/receipts.js +39 -39
- package/dist/tools/receipts.js.map +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +90 -43
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/reputation-vc.d.ts +3 -0
- package/dist/tools/reputation-vc.d.ts.map +1 -0
- package/dist/tools/reputation-vc.js +438 -0
- package/dist/tools/reputation-vc.js.map +1 -0
- package/dist/tools/revisions.d.ts +3 -0
- package/dist/tools/revisions.d.ts.map +1 -0
- package/dist/tools/revisions.js +108 -0
- package/dist/tools/revisions.js.map +1 -0
- package/dist/tools/router.d.ts +3 -0
- package/dist/tools/router.d.ts.map +1 -0
- package/dist/tools/router.js +104 -0
- package/dist/tools/router.js.map +1 -0
- package/dist/tools/streaming.d.ts +3 -0
- package/dist/tools/streaming.d.ts.map +1 -0
- package/dist/tools/streaming.js +350 -0
- package/dist/tools/streaming.js.map +1 -0
- package/dist/tools/templates.d.ts +3 -0
- package/dist/tools/templates.d.ts.map +1 -0
- package/dist/tools/templates.js +392 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/training.d.ts +3 -0
- package/dist/tools/training.d.ts.map +1 -0
- package/dist/tools/training.js +304 -0
- package/dist/tools/training.js.map +1 -0
- package/dist/tools/v2-settlement.d.ts +3 -0
- package/dist/tools/v2-settlement.d.ts.map +1 -0
- package/dist/tools/v2-settlement.js +226 -0
- package/dist/tools/v2-settlement.js.map +1 -0
- package/dist/tools/verification.d.ts +3 -0
- package/dist/tools/verification.d.ts.map +1 -0
- package/dist/tools/verification.js +215 -0
- package/dist/tools/verification.js.map +1 -0
- package/dist/tools/verify-deep.d.ts +3 -0
- package/dist/tools/verify-deep.d.ts.map +1 -0
- package/dist/tools/verify-deep.js +125 -0
- package/dist/tools/verify-deep.js.map +1 -0
- package/dist/types.d.ts +16 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -23
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
package/dist/tools/receipts.js
CHANGED
|
@@ -10,9 +10,13 @@ import { isAddress } from "viem";
|
|
|
10
10
|
import { loadAbi, CONTRACTS, getAccount } from "../config.js";
|
|
11
11
|
import { executeOrPrepare, readContract } from "../handlers/wallet.js";
|
|
12
12
|
import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
|
|
13
|
+
import { parseContractError, formatStructuredError } from "../lib/formatResponse.js";
|
|
14
|
+
import { ethAddress } from "../lib/schemaHelpers.js";
|
|
13
15
|
import { RECEIPT_TYPE } from "../types.js";
|
|
14
16
|
import { stringToBytes32, isBytes32 } from "../utils.js";
|
|
15
|
-
|
|
17
|
+
// V2 ReceiptVerifier doesn't have getReceiptsByAgent - use V1 ABI for that function
|
|
18
|
+
const V1_ABI = loadAbi("ReceiptVerifier");
|
|
19
|
+
const V2_ABI = loadAbi("ReceiptVerifier");
|
|
16
20
|
// Input validation schemas
|
|
17
21
|
const getAddressSchema = z.object({
|
|
18
22
|
address: z.string().refine(isAddress, { message: "Invalid Ethereum address" })
|
|
@@ -32,10 +36,15 @@ export function registerReceiptTools(server) {
|
|
|
32
36
|
// ──────────────────────────────────────────────────────────────
|
|
33
37
|
server.registerTool("corven_get_receipts", {
|
|
34
38
|
title: "Get All Receipts for Address",
|
|
35
|
-
description: "Fetch all ERC-8004 attestation receipts for an address. " +
|
|
36
|
-
"
|
|
39
|
+
description: "Fetch all ERC-8004 attestation receipts for an address. Returns receipt details including issuer, counterparty, type, and validity.\n" +
|
|
40
|
+
"USE WHEN: You want to see all attestation receipts issued for a specific agent or address.\n" +
|
|
41
|
+
"REQUIRES: The address must exist on-chain (may have zero receipts).\n" +
|
|
42
|
+
"RETURNS: Array of receipt objects with issuer, counterparty, interaction type, data hash, and validity status.\n" +
|
|
43
|
+
"COMES AFTER: corven_create_receipt issued receipts for this address.\n" +
|
|
44
|
+
"COMES BEFORE: corven_get_receipt (inspect a specific receipt by ID).\n" +
|
|
45
|
+
"NOTE: Returns all receipts where the address is either issuer or counterparty.",
|
|
37
46
|
inputSchema: {
|
|
38
|
-
address:
|
|
47
|
+
address: ethAddress,
|
|
39
48
|
},
|
|
40
49
|
}, async ({ address }) => {
|
|
41
50
|
try {
|
|
@@ -43,43 +52,27 @@ export function registerReceiptTools(server) {
|
|
|
43
52
|
if (!validationResult.success) {
|
|
44
53
|
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
45
54
|
}
|
|
46
|
-
const data = await readContract(CONTRACTS.ReceiptVerifier,
|
|
55
|
+
const data = await readContract(CONTRACTS.ReceiptVerifier, V1_ABI, "getReceiptsByAgent", [validationResult.data.address]);
|
|
47
56
|
return formatReadResult({ address, receipts: data }, `Receipts for ${address}`);
|
|
48
57
|
}
|
|
49
58
|
catch (e) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
});
|
|
53
|
-
// ──────────────────────────────────────────────────────────────
|
|
54
|
-
// get_receipt_count
|
|
55
|
-
// ──────────────────────────────────────────────────────────────
|
|
56
|
-
server.registerTool("corven_get_receipt_count", {
|
|
57
|
-
title: "Get Receipt Count for Address",
|
|
58
|
-
description: "Get the total number of ERC-8004 receipts issued for an agent address. " +
|
|
59
|
-
"Use this to check receipt volume before querying individual receipts.",
|
|
60
|
-
inputSchema: {
|
|
61
|
-
address: z.string().describe("Agent's Ethereum address"),
|
|
62
|
-
},
|
|
63
|
-
}, async ({ address }) => {
|
|
64
|
-
try {
|
|
65
|
-
const validationResult = getAddressSchema.safeParse({ address });
|
|
66
|
-
if (!validationResult.success) {
|
|
67
|
-
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
68
|
-
}
|
|
69
|
-
const count = await readContract(CONTRACTS.ReceiptVerifier, ABI, "getAgentReceiptCount", [validationResult.data.address]);
|
|
70
|
-
return formatReadResult({ address, receiptCount: Number(count) }, `Receipt count for ${address}`);
|
|
71
|
-
}
|
|
72
|
-
catch (e) {
|
|
73
|
-
return formatError(e);
|
|
59
|
+
const parsed = parseContractError(e);
|
|
60
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
74
61
|
}
|
|
75
62
|
});
|
|
63
|
+
// get_receipt_count is merged into get_receipts (returns count alongside receipts)
|
|
76
64
|
// ──────────────────────────────────────────────────────────────
|
|
77
65
|
// get_receipt (was verify_receipt)
|
|
78
66
|
// ──────────────────────────────────────────────────────────────
|
|
79
67
|
server.registerTool("corven_get_receipt", {
|
|
80
68
|
title: "Get Receipt by ID",
|
|
81
|
-
description: "Retrieve a specific ERC-8004 receipt by its bytes32 ID. " +
|
|
82
|
-
"
|
|
69
|
+
description: "Retrieve a specific ERC-8004 receipt by its bytes32 ID. Returns the receipt details including issuer, counterparty, type, and validity.\n" +
|
|
70
|
+
"USE WHEN: You know a receipt ID and want to inspect its full details and on-chain validity.\n" +
|
|
71
|
+
"REQUIRES: The receipt ID must be a valid bytes32 hex string.\n" +
|
|
72
|
+
"RETURNS: Receipt details including issuer, counterparty, interaction type, data hash, validity, and human-readable type label.\n" +
|
|
73
|
+
"COMES AFTER: corven_create_receipt or corven_get_receipts provided the receipt ID.\n" +
|
|
74
|
+
"COMES BEFORE: Use the receipt data to verify agent credentials or audit history.\n" +
|
|
75
|
+
"NOTE: Accepts both raw bytes32 hex IDs and string-to-bytes32 converted IDs.",
|
|
83
76
|
inputSchema: {
|
|
84
77
|
receiptId: z.string().describe("Receipt ID as bytes32 hex string (0x...64 hex chars)"),
|
|
85
78
|
},
|
|
@@ -99,7 +92,7 @@ export function registerReceiptTools(server) {
|
|
|
99
92
|
// Try to convert string to bytes32
|
|
100
93
|
receiptIdBytes32 = stringToBytes32(receiptId);
|
|
101
94
|
}
|
|
102
|
-
const data = await readContract(CONTRACTS.ReceiptVerifier,
|
|
95
|
+
const data = await readContract(CONTRACTS.ReceiptVerifier, V2_ABI, "getReceipt", [receiptIdBytes32]);
|
|
103
96
|
const enriched = {
|
|
104
97
|
...data,
|
|
105
98
|
typeLabel: RECEIPT_TYPE[data.interactionType] ??
|
|
@@ -108,7 +101,8 @@ export function registerReceiptTools(server) {
|
|
|
108
101
|
return formatReadResult(enriched, `Receipt ${receiptId}`);
|
|
109
102
|
}
|
|
110
103
|
catch (e) {
|
|
111
|
-
|
|
104
|
+
const parsed = parseContractError(e);
|
|
105
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
112
106
|
}
|
|
113
107
|
});
|
|
114
108
|
// ──────────────────────────────────────────────────────────────
|
|
@@ -116,11 +110,16 @@ export function registerReceiptTools(server) {
|
|
|
116
110
|
// ──────────────────────────────────────────────────────────────
|
|
117
111
|
server.registerTool("corven_create_receipt", {
|
|
118
112
|
title: "Create Receipt",
|
|
119
|
-
description: "Issue an ERC-8004 attestation receipt for a completed interaction. " +
|
|
120
|
-
"
|
|
113
|
+
description: "Issue an ERC-8004 attestation receipt for a completed interaction. Only authorized issuers can create receipts.\n" +
|
|
114
|
+
"USE WHEN: You want to create a portable on-chain attestation that proves a specific interaction occurred.\n" +
|
|
115
|
+
"REQUIRES: You must be an authorized issuer. Both issuer and counterparty addresses must be valid.\n" +
|
|
116
|
+
"RETURNS: Transaction hash. The receipt ID (bytes32) is emitted in the event logs.\n" +
|
|
117
|
+
"COMES AFTER: A verifiable interaction occurred (task completion, agent verification, capability proof, etc.).\n" +
|
|
118
|
+
"COMES BEFORE: corven_get_receipt or corven_get_receipts to retrieve the receipt.\n" +
|
|
119
|
+
"NOTE: interactionType values: 0=TaskCompleted, 1=AgentVerified, 2=CapabilityProven, 3=ReputationVerified, 4=DisputeResolved, 5=InsuranceClaimed.",
|
|
121
120
|
inputSchema: {
|
|
122
|
-
issuer:
|
|
123
|
-
counterparty:
|
|
121
|
+
issuer: ethAddress,
|
|
122
|
+
counterparty: ethAddress,
|
|
124
123
|
interactionType: z.union([z.number(), z.string()]).describe("Receipt type (0=TaskCompleted, 1=AgentVerified, etc.)"),
|
|
125
124
|
dataHash: z.string().describe("Hash of the receipt data (will be converted to bytes32)"),
|
|
126
125
|
},
|
|
@@ -136,11 +135,12 @@ export function registerReceiptTools(server) {
|
|
|
136
135
|
}
|
|
137
136
|
// Convert dataHash to bytes32
|
|
138
137
|
const dataHashBytes32 = stringToBytes32(dataHash);
|
|
139
|
-
const result = await executeOrPrepare(CONTRACTS.ReceiptVerifier,
|
|
138
|
+
const result = await executeOrPrepare(CONTRACTS.ReceiptVerifier, V2_ABI, "createReceipt", [issuer, counterparty, String(interactionType), dataHashBytes32]);
|
|
140
139
|
return formatTxResult(result);
|
|
141
140
|
}
|
|
142
141
|
catch (e) {
|
|
143
|
-
|
|
142
|
+
const parsed = parseContractError(e);
|
|
143
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
144
144
|
}
|
|
145
145
|
});
|
|
146
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../src/tools/receipts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,SAAS,EAAY,MAAM,MAAM,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGzD,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../src/tools/receipts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2V1D"}
|
package/dist/tools/registry.js
CHANGED
|
@@ -4,12 +4,17 @@
|
|
|
4
4
|
* register_agent — Register a new agent on-chain
|
|
5
5
|
* get_agent — Look up an agent's profile by address
|
|
6
6
|
* find_workers — Find agents by capability string
|
|
7
|
+
* add_stake — Increase agent stake
|
|
8
|
+
* deactivate_agent — Deactivate and withdraw stake
|
|
9
|
+
* get_all_agents — List all registered agents
|
|
7
10
|
*/
|
|
8
11
|
import { z } from "zod";
|
|
9
12
|
import { parseEther, isAddress } from "viem";
|
|
10
13
|
import { loadAbi, CONTRACTS, getAccount } from "../config.js";
|
|
11
14
|
import { executeOrPrepare, readContract } from "../handlers/wallet.js";
|
|
12
|
-
import { formatTxResult, formatReadResult
|
|
15
|
+
import { formatTxResult, formatReadResult } from "../handlers/transactions.js";
|
|
16
|
+
import { formatSuccess, formatStructuredError, parseContractError } from "../lib/formatResponse.js";
|
|
17
|
+
import { ethAddress, ethAmount, ethStake, agentName, capabilities } from "../lib/schemaHelpers.js";
|
|
13
18
|
const ABI = loadAbi("AgentRegistry");
|
|
14
19
|
// Input validation schemas
|
|
15
20
|
const registerAgentSchema = z.object({
|
|
@@ -33,39 +38,52 @@ export function registerAgentTools(server) {
|
|
|
33
38
|
// ──────────────────────────────────────────────────────────────
|
|
34
39
|
server.registerTool("corven_register_agent", {
|
|
35
40
|
title: "Register Agent",
|
|
36
|
-
description: "
|
|
37
|
-
"
|
|
41
|
+
description: "Creates a permanent on-chain identity for an AI agent on COVENANT.\n" +
|
|
42
|
+
"USE WHEN: First-time setup for any wallet that wants to post tasks, receive tasks, or earn ETH. Call exactly once per wallet address.\n" +
|
|
43
|
+
"REQUIRES: Wallet with at least 0.001 ETH for stake deposit plus ~0.0002 ETH gas.\n" +
|
|
44
|
+
"RETURNS: Agent DID, reputation score (starts at 500/1000), txHash, Basescan URL, and next steps.\n" +
|
|
45
|
+
"COMES BEFORE: All other tools. Nothing works without this.\n" +
|
|
46
|
+
"NOTE: Already registered? Use corven_get_agent instead. Registration is permanent.",
|
|
38
47
|
inputSchema: {
|
|
39
|
-
name:
|
|
40
|
-
capabilities:
|
|
41
|
-
|
|
42
|
-
.describe('Capability tags, e.g. ["data-analysis", "code-review"]'),
|
|
43
|
-
stake: z
|
|
44
|
-
.string()
|
|
45
|
-
.optional()
|
|
46
|
-
.describe("Stake amount in ETH (default 0.001)"),
|
|
48
|
+
name: agentName,
|
|
49
|
+
capabilities: capabilities,
|
|
50
|
+
stake: ethStake,
|
|
47
51
|
},
|
|
48
52
|
}, async ({ name, capabilities, stake }) => {
|
|
49
53
|
try {
|
|
50
54
|
// Validate input
|
|
51
55
|
const validationResult = registerAgentSchema.safeParse({ name, capabilities, stake });
|
|
52
56
|
if (!validationResult.success) {
|
|
53
|
-
return
|
|
57
|
+
return formatStructuredError("Invalid input parameters.", validationResult.error.issues.map((e) => e.message).join(", "), "Check name format (alphanumeric, hyphens, underscores), capabilities (1-10 items), and stake (0.001-100 ETH decimal string).", true);
|
|
54
58
|
}
|
|
55
|
-
// Use validated values
|
|
56
59
|
const validatedName = validationResult.data.name;
|
|
57
60
|
const validatedCapabilities = validationResult.data.capabilities;
|
|
58
61
|
const validatedStake = validationResult.data.stake;
|
|
59
62
|
const account = getAccount();
|
|
60
63
|
if (!account) {
|
|
61
|
-
return
|
|
64
|
+
return formatStructuredError("No private key configured.", "PRIVATE_KEY environment variable is not set.", "Set PRIVATE_KEY in your .env file to a valid Ethereum private key with ETH on Base Sepolia.", false);
|
|
62
65
|
}
|
|
63
66
|
const stakeAmount = parseEther(validatedStake);
|
|
64
67
|
const result = await executeOrPrepare(CONTRACTS.AgentRegistry, ABI, "register", [validatedName, validatedCapabilities], stakeAmount);
|
|
68
|
+
if (result.status === "success") {
|
|
69
|
+
return formatSuccess(`Agent '${validatedName}' registered on COVENANT with reputation 500/1000 and ${validatedCapabilities.length} capabilities.`, {
|
|
70
|
+
agentName: validatedName,
|
|
71
|
+
walletAddress: account,
|
|
72
|
+
reputation: 500,
|
|
73
|
+
capabilities: validatedCapabilities,
|
|
74
|
+
stakeDeposited: `${validatedStake} ETH`,
|
|
75
|
+
isActive: true,
|
|
76
|
+
}, result.txHash, [
|
|
77
|
+
"Registration complete. To find tasks as a worker: corven_get_worker_tasks.",
|
|
78
|
+
"To post a task as a client: corven_create_task or corven_post_open_task.",
|
|
79
|
+
"To see your full profile: corven_get_agent with your wallet address.",
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
65
82
|
return formatTxResult(result);
|
|
66
83
|
}
|
|
67
84
|
catch (e) {
|
|
68
|
-
|
|
85
|
+
const parsed = parseContractError(e);
|
|
86
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
69
87
|
}
|
|
70
88
|
});
|
|
71
89
|
// ──────────────────────────────────────────────────────────────
|
|
@@ -73,25 +91,27 @@ export function registerAgentTools(server) {
|
|
|
73
91
|
// ──────────────────────────────────────────────────────────────
|
|
74
92
|
server.registerTool("corven_get_agent", {
|
|
75
93
|
title: "Get Agent Profile",
|
|
76
|
-
description: "
|
|
77
|
-
"
|
|
94
|
+
description: "Fetches the complete on-chain profile for any registered agent.\n" +
|
|
95
|
+
"USE WHEN: Checking if an agent is registered before hiring them. Verifying your own reputation. Researching a potential worker.\n" +
|
|
96
|
+
"REQUIRES: Nothing. Free read-only call. No gas cost.\n" +
|
|
97
|
+
"RETURNS: Name, DID, reputation (0-1000), capabilities, stake amount, tasks completed, tasks failed, active status.\n" +
|
|
98
|
+
"COMES AFTER: corven_find_workers when you want full details on a candidate.",
|
|
78
99
|
inputSchema: {
|
|
79
|
-
address:
|
|
100
|
+
address: ethAddress,
|
|
80
101
|
},
|
|
81
102
|
}, async ({ address }) => {
|
|
82
103
|
try {
|
|
83
|
-
// Validate input
|
|
84
104
|
const validationResult = getAgentSchema.safeParse({ address });
|
|
85
105
|
if (!validationResult.success) {
|
|
86
|
-
return
|
|
106
|
+
return formatStructuredError("Invalid Ethereum address.", `Received '${address}' — must be a full 42-character 0x address.`, "Pass the full address starting with 0x. Example: 0x715f3b64189EcA51a57567962Cd2278dc7a5e92C", false);
|
|
87
107
|
}
|
|
88
|
-
// Use validated address
|
|
89
108
|
const validatedAddress = validationResult.data.address;
|
|
90
109
|
const data = await readContract(CONTRACTS.AgentRegistry, ABI, "getAgent", [validatedAddress]);
|
|
91
110
|
return formatReadResult(data, `Agent profile for ${address}`);
|
|
92
111
|
}
|
|
93
112
|
catch (e) {
|
|
94
|
-
|
|
113
|
+
const parsed = parseContractError(e);
|
|
114
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
95
115
|
}
|
|
96
116
|
});
|
|
97
117
|
// ──────────────────────────────────────────────────────────────
|
|
@@ -99,37 +119,43 @@ export function registerAgentTools(server) {
|
|
|
99
119
|
// ──────────────────────────────────────────────────────────────
|
|
100
120
|
server.registerTool("corven_find_workers", {
|
|
101
121
|
title: "Find Workers by Capability",
|
|
102
|
-
description: "
|
|
103
|
-
"
|
|
122
|
+
description: "Searches the registry for active agents with a specific capability. Returns them sorted by reputation highest first.\n" +
|
|
123
|
+
"USE WHEN: Before creating any task. This is how you discover who can do the work.\n" +
|
|
124
|
+
"REQUIRES: Nothing. Free read-only call. No gas cost.\n" +
|
|
125
|
+
"RETURNS: Array of agent profiles with address, name, reputation score, success rate, active task count.\n" +
|
|
126
|
+
"COMES BEFORE: corven_create_task or corven_post_open_task. Use the returned address as the worker parameter.\n" +
|
|
127
|
+
"NOTE: The first result has the highest reputation. For high-value tasks, always use a high-reputation worker.",
|
|
104
128
|
inputSchema: {
|
|
105
129
|
capability: z
|
|
106
130
|
.string()
|
|
107
|
-
.describe('
|
|
131
|
+
.describe('The capability tag to search for. ' +
|
|
132
|
+
'Valid values: "data-analysis", "code-review", "content-writing", ' +
|
|
133
|
+
'"financial-analysis", "research", "translation", "testing", ' +
|
|
134
|
+
'"security-audit", "documentation", "smart-contract", "python", ' +
|
|
135
|
+
'"visualization", "api-integration", "ml-training", "design". ' +
|
|
136
|
+
'Returns all active agents with this capability sorted by reputation.'),
|
|
108
137
|
},
|
|
109
138
|
}, async ({ capability }) => {
|
|
110
139
|
try {
|
|
111
|
-
// Validate input
|
|
112
140
|
const validationResult = findWorkersSchema.safeParse({ capability });
|
|
113
141
|
if (!validationResult.success) {
|
|
114
|
-
return
|
|
142
|
+
return formatStructuredError("Invalid capability string.", `Received '${capability}' — must be 1-50 characters.`, "Pass a valid capability tag like 'data-analysis', 'code-review', or 'research'.", true);
|
|
115
143
|
}
|
|
116
|
-
// Use validated capability
|
|
117
144
|
const validatedCapability = validationResult.data.capability;
|
|
118
145
|
const addresses = (await readContract(CONTRACTS.AgentRegistry, ABI, "getAgentsByCapability", [capability]));
|
|
119
146
|
if (addresses.length === 0) {
|
|
120
147
|
return formatReadResult({ capability, count: 0, workers: [] }, `No workers found for "${capability}"`);
|
|
121
148
|
}
|
|
122
|
-
// Fetch full profiles
|
|
123
149
|
const workers = await Promise.all(addresses.map(async (addr) => {
|
|
124
150
|
const profile = await readContract(CONTRACTS.AgentRegistry, ABI, "getAgent", [addr]);
|
|
125
151
|
return { address: addr, ...profile };
|
|
126
152
|
}));
|
|
127
|
-
// Sort by reputation descending
|
|
128
153
|
workers.sort((a, b) => Number(b.reputation ?? 0) - Number(a.reputation ?? 0));
|
|
129
154
|
return formatReadResult({ capability, count: workers.length, workers }, `Workers with capability "${capability}"`);
|
|
130
155
|
}
|
|
131
156
|
catch (e) {
|
|
132
|
-
|
|
157
|
+
const parsed = parseContractError(e);
|
|
158
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
133
159
|
}
|
|
134
160
|
});
|
|
135
161
|
// ──────────────────────────────────────────────────────────────
|
|
@@ -137,23 +163,32 @@ export function registerAgentTools(server) {
|
|
|
137
163
|
// ──────────────────────────────────────────────────────────────
|
|
138
164
|
server.registerTool("corven_add_stake", {
|
|
139
165
|
title: "Add Stake",
|
|
140
|
-
description: "
|
|
141
|
-
"
|
|
166
|
+
description: "Adds additional ETH stake to your existing agent registration. Higher stake increases trust and priority.\n" +
|
|
167
|
+
"USE WHEN: Boosting your agent's reputation weight. Preparing for high-value tasks that favor staked agents.\n" +
|
|
168
|
+
"REQUIRES: You must be a registered agent. Wallet needs the stake amount plus ~0.0002 ETH gas.\n" +
|
|
169
|
+
"RETURNS: Amount added, total stake, txHash, Basescan link.\n" +
|
|
170
|
+
"COMES AFTER: corven_register_agent (must be registered first).\n" +
|
|
171
|
+
"COMES BEFORE: Higher stake improves ranking in corven_find_workers results.\n" +
|
|
172
|
+
"NOTE: Stake is withdrawable via corven_deactivate_agent when you leave the protocol.",
|
|
142
173
|
inputSchema: {
|
|
143
|
-
amount:
|
|
174
|
+
amount: ethAmount,
|
|
144
175
|
},
|
|
145
176
|
}, async ({ amount }) => {
|
|
146
177
|
try {
|
|
147
178
|
const account = getAccount();
|
|
148
179
|
if (!account) {
|
|
149
|
-
return
|
|
180
|
+
return formatStructuredError("No private key configured.", "PRIVATE_KEY environment variable is not set.", "Set PRIVATE_KEY in your .env file.", false);
|
|
150
181
|
}
|
|
151
182
|
const stakeAmount = parseEther(amount);
|
|
152
183
|
const result = await executeOrPrepare(CONTRACTS.AgentRegistry, ABI, "addStake", [], stakeAmount);
|
|
184
|
+
if (result.status === "success") {
|
|
185
|
+
return formatSuccess(`Added ${amount} ETH to stake.`, { amount: `${amount} ETH`, txHash: result.txHash }, result.txHash, ["Your increased stake will be reflected in your agent profile on the next query."]);
|
|
186
|
+
}
|
|
153
187
|
return formatTxResult(result);
|
|
154
188
|
}
|
|
155
189
|
catch (e) {
|
|
156
|
-
|
|
190
|
+
const parsed = parseContractError(e);
|
|
191
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
157
192
|
}
|
|
158
193
|
});
|
|
159
194
|
// ──────────────────────────────────────────────────────────────
|
|
@@ -161,20 +196,28 @@ export function registerAgentTools(server) {
|
|
|
161
196
|
// ──────────────────────────────────────────────────────────────
|
|
162
197
|
server.registerTool("corven_deactivate_agent", {
|
|
163
198
|
title: "Deactivate Agent",
|
|
164
|
-
description: "
|
|
165
|
-
"
|
|
199
|
+
description: "Deactivates your agent registration and withdraws all staked ETH to your wallet.\n" +
|
|
200
|
+
"USE WHEN: Permanently leaving the protocol. Withdrawing your security deposit.\n" +
|
|
201
|
+
"REQUIRES: You must be a registered and active agent. No active (InProgress) tasks.\n" +
|
|
202
|
+
"RETURNS: Deactivation confirmation, wallet address that received stake, txHash.\n" +
|
|
203
|
+
"COMES AFTER: All tasks are completed or cancelled.\n" +
|
|
204
|
+
"NOTE: IRREVERSIBLE. Your agent is permanently removed from the registry. To return, use a different wallet address with corven_register_agent.",
|
|
166
205
|
inputSchema: {},
|
|
167
206
|
}, async () => {
|
|
168
207
|
try {
|
|
169
208
|
const account = getAccount();
|
|
170
209
|
if (!account) {
|
|
171
|
-
return
|
|
210
|
+
return formatStructuredError("No private key configured.", "PRIVATE_KEY environment variable is not set.", "Set PRIVATE_KEY in your .env file.", false);
|
|
172
211
|
}
|
|
173
212
|
const result = await executeOrPrepare(CONTRACTS.AgentRegistry, ABI, "deactivate", []);
|
|
213
|
+
if (result.status === "success") {
|
|
214
|
+
return formatSuccess("Agent deactivated. Staked ETH will be returned to your wallet.", { deactivated: true, wallet: account }, result.txHash, ["Registration is permanent. To re-activate, use a different wallet address."]);
|
|
215
|
+
}
|
|
174
216
|
return formatTxResult(result);
|
|
175
217
|
}
|
|
176
218
|
catch (e) {
|
|
177
|
-
|
|
219
|
+
const parsed = parseContractError(e);
|
|
220
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
178
221
|
}
|
|
179
222
|
});
|
|
180
223
|
// ──────────────────────────────────────────────────────────────
|
|
@@ -182,8 +225,11 @@ export function registerAgentTools(server) {
|
|
|
182
225
|
// ──────────────────────────────────────────────────────────────
|
|
183
226
|
server.registerTool("corven_get_all_agents", {
|
|
184
227
|
title: "Get All Agents",
|
|
185
|
-
description: "
|
|
186
|
-
"
|
|
228
|
+
description: "Returns the addresses of every registered agent on the protocol.\n" +
|
|
229
|
+
"USE WHEN: Building a directory. Discovering all participants. Checking protocol adoption.\n" +
|
|
230
|
+
"REQUIRES: Nothing. Free read-only call.\n" +
|
|
231
|
+
"RETURNS: Count and array of Ethereum addresses. Each needs corven_get_agent for full profile.\n" +
|
|
232
|
+
"COMES BEFORE: Call corven_get_agent on each address to get name, reputation, capabilities, and stake.",
|
|
187
233
|
inputSchema: {},
|
|
188
234
|
}, async () => {
|
|
189
235
|
try {
|
|
@@ -191,7 +237,8 @@ export function registerAgentTools(server) {
|
|
|
191
237
|
return formatReadResult({ count: addresses.length, agents: addresses }, "All Registered Agents");
|
|
192
238
|
}
|
|
193
239
|
catch (e) {
|
|
194
|
-
|
|
240
|
+
const parsed = parseContractError(e);
|
|
241
|
+
return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
|
|
195
242
|
}
|
|
196
243
|
});
|
|
197
244
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation-vc.d.ts","sourceRoot":"","sources":["../../src/tools/reputation-vc.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6LzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkYjE"}
|