@varun-ai07/covenant-mcp 2.5.2 → 3.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 +24 -40
- package/dist/lib/verify.d.ts +12 -0
- package/dist/lib/verify.d.ts.map +1 -1
- package/dist/lib/verify.js +115 -13
- package/dist/lib/verify.js.map +1 -1
- package/dist/sdk.d.ts +1 -0
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +9 -0
- package/dist/sdk.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/corven-agent.d.ts.map +1 -1
- package/dist/tools/corven-agent.js +82 -10
- package/dist/tools/corven-agent.js.map +1 -1
- package/dist/tools/corven-batch.d.ts.map +1 -1
- package/dist/tools/corven-batch.js +82 -2
- package/dist/tools/corven-batch.js.map +1 -1
- package/dist/tools/corven-encrypt.d.ts +3 -0
- package/dist/tools/corven-encrypt.d.ts.map +1 -0
- package/dist/tools/corven-encrypt.js +107 -0
- package/dist/tools/corven-encrypt.js.map +1 -0
- package/dist/tools/corven-ipfs.d.ts.map +1 -1
- package/dist/tools/corven-ipfs.js +85 -12
- package/dist/tools/corven-ipfs.js.map +1 -1
- package/dist/tools/corven-message.d.ts +1 -0
- package/dist/tools/corven-message.d.ts.map +1 -1
- package/dist/tools/corven-message.js +100 -12
- package/dist/tools/corven-message.js.map +1 -1
- package/dist/tools/corven-reputation.d.ts.map +1 -1
- package/dist/tools/corven-reputation.js +82 -5
- package/dist/tools/corven-reputation.js.map +1 -1
- package/dist/tools/corven-stats.d.ts.map +1 -1
- package/dist/tools/corven-stats.js +72 -10
- package/dist/tools/corven-stats.js.map +1 -1
- package/dist/tools/corven-task.d.ts.map +1 -1
- package/dist/tools/corven-task.js +188 -8
- package/dist/tools/corven-task.js.map +1 -1
- package/dist/tools/corven-version.d.ts +3 -0
- package/dist/tools/corven-version.d.ts.map +1 -0
- package/dist/tools/corven-version.js +129 -0
- package/dist/tools/corven-version.js.map +1 -0
- package/dist/tools/disputes.d.ts.map +1 -1
- package/dist/tools/disputes.js +82 -0
- package/dist/tools/disputes.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-ipfs.js","sourceRoot":"","sources":["../../src/tools/corven-ipfs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG5E,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"corven-ipfs.js","sourceRoot":"","sources":["../../src/tools/corven-ipfs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG5E,MAAM,aAAa,GAAG;IACpB,mCAAmC;IACnC,sBAAsB;IACtB,kCAAkC;CACnC,CAAC;AAEF,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxD,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,SAAS,GAAG,KAAK;IACzD,IAAI,SAAS,GAAiB,IAAI,CAAC;IACnC,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,SAAS,EAAE,EAAE,CAAC,CAAC;gBACxD,SAAS;YACX,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;YACnF,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;YAC9E,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAClD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;QAC/F,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,SAAS,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IACD,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,qFAAqF,CAAC;IACpJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;IACjH,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAClG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC/D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,4EAA4E;YAC5E,YAAY;YACZ,8DAA8D;YAC9D,4DAA4D;YAC5D,uHAAuH;YACvH,uFAAuF;YACvF,yEAAyE;YACzE,+FAA+F;YAC/F,sHAAsH;YACtH,+FAA+F;YAC/F,iBAAiB;YACjB,mEAAmE;YACnE,gFAAgF;YAChF,kDAAkD;YAClD,2DAA2D;QAC7D,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK;oBAAE,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAE7E,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG;oBAAE,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC,CAAC;gBAEhF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAE9F,OAAO,gBAAgB,CAAC;oBACtB,GAAG;oBACH,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;oBACvC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;oBAC1G,OAAO,EAAE,MAAM,CAAC,YAAY;oBAC5B,SAAS,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI;iBAC9B,EAAE,cAAc,GAAG,EAAE,CAAC,CAAC;YAC1B,CAAC;YAED,gBAAgB;YAChB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAChD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAEtD,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE,CAAC;gBACtC,OAAO,WAAW,CAAC,IAAI,KAAK,CAC1B,yEAAyE,CAC1E,CAAC,CAAC;YACL,CAAC;YAED,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACzD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,qBAAqB,CAAC,CAAC;YAElE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC3C,SAAS,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;aACrE,CAAC,CAAC;YACH,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gDAAgD,EAAE;gBAC7E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,YAAY;oBAC5B,qBAAqB,EAAE,eAAe;iBACvC;gBACD,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAErC,OAAO,gBAAgB,CAAC;gBACtB,GAAG,EAAE,MAAM,CAAC,UAAU;gBACtB,IAAI,EAAE,MAAM,CAAC,OAAO;gBACpB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,GAAG,EAAE,UAAU,MAAM,CAAC,UAAU,EAAE;gBAClC,OAAO,EAAE,qCAAqC,MAAM,CAAC,UAAU,EAAE;gBACjE,IAAI,EAAE,oDAAoD;aAC3D,EAAE,aAAa,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
export declare function notifyAgent(address: string, type: string, message: string, taskId: number): void;
|
|
2
3
|
export declare function registerMessageTools(server: McpServer): void;
|
|
3
4
|
//# sourceMappingURL=corven-message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-message.d.ts","sourceRoot":"","sources":["../../src/tools/corven-message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"corven-message.d.ts","sourceRoot":"","sources":["../../src/tools/corven-message.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAchG;AA8CD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoI5D"}
|
|
@@ -2,26 +2,67 @@ import { z } from "zod";
|
|
|
2
2
|
import { getAccount } from "../config.js";
|
|
3
3
|
import { formatReadResult } from "../handlers/transactions.js";
|
|
4
4
|
import { formatStructuredError, parseContractError } from "../lib/formatResponse.js";
|
|
5
|
-
|
|
5
|
+
import { loadStore, saveStore } from "../lib/store.js";
|
|
6
|
+
let notifCounter = loadStore("notifCounter", 0);
|
|
7
|
+
export function notifyAgent(address, type, message, taskId) {
|
|
8
|
+
const store = loadStore("notifications", {});
|
|
9
|
+
const addr = address.toLowerCase();
|
|
10
|
+
if (!store[addr])
|
|
11
|
+
store[addr] = [];
|
|
12
|
+
store[addr].push({
|
|
13
|
+
id: `notif_${++notifCounter}_${Date.now()}`,
|
|
14
|
+
type,
|
|
15
|
+
message,
|
|
16
|
+
taskId,
|
|
17
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
18
|
+
read: false,
|
|
19
|
+
});
|
|
20
|
+
saveStore("notifications", store);
|
|
21
|
+
saveStore("notifCounter", notifCounter);
|
|
22
|
+
}
|
|
23
|
+
function getNotifications(address) {
|
|
24
|
+
const store = loadStore("notifications", {});
|
|
25
|
+
return store[address.toLowerCase()] || [];
|
|
26
|
+
}
|
|
27
|
+
function markNotificationRead(address, notifId) {
|
|
28
|
+
const store = loadStore("notifications", {});
|
|
29
|
+
const notifs = store[address.toLowerCase()];
|
|
30
|
+
if (!notifs)
|
|
31
|
+
return false;
|
|
32
|
+
const notif = notifs.find(n => n.id === notifId);
|
|
33
|
+
if (!notif)
|
|
34
|
+
return false;
|
|
35
|
+
notif.read = true;
|
|
36
|
+
saveStore("notifications", store);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
const actionSchema = z.enum(["send", "list", "unread", "mark_read", "count", "notifications", "mark_notif_read"]);
|
|
6
40
|
const schema = z.object({
|
|
7
41
|
action: actionSchema,
|
|
8
42
|
to: z.string().optional(),
|
|
9
43
|
content: z.string().optional(),
|
|
10
44
|
taskId: z.number().optional(),
|
|
11
45
|
limit: z.number().optional(),
|
|
46
|
+
offset: z.number().optional(),
|
|
47
|
+
messageId: z.string().optional(),
|
|
48
|
+
notifId: z.string().optional(),
|
|
49
|
+
type: z.string().optional(),
|
|
12
50
|
});
|
|
13
|
-
|
|
14
|
-
let messageCounter = 0;
|
|
51
|
+
let messages = loadStore('messages', []);
|
|
52
|
+
let messageCounter = loadStore('messageCounter', 0);
|
|
15
53
|
export function registerMessageTools(server) {
|
|
16
54
|
server.registerTool("corven_message", {
|
|
17
|
-
title: "Agent Messaging",
|
|
18
|
-
description: "Agent-to-agent messaging on COVENANT — send messages and
|
|
55
|
+
title: "Agent Messaging & Notifications",
|
|
56
|
+
description: "Agent-to-agent messaging and notifications on COVENANT — send messages, check inbox, and manage notifications.\n\n" +
|
|
19
57
|
"ACTIONS:\n" +
|
|
20
58
|
" send — Send a message (requires to, content, taskId)\n" +
|
|
21
|
-
" list — List messages for a task (requires taskId)\n" +
|
|
22
|
-
" unread — Get unread message count\n
|
|
23
|
-
"
|
|
24
|
-
"
|
|
59
|
+
" list — List messages for a task (requires taskId, supports offset/limit)\n" +
|
|
60
|
+
" unread — Get unread message count\n" +
|
|
61
|
+
" mark_read — Mark a message as read (requires messageId)\n" +
|
|
62
|
+
" count — Get total and unread message counts\n" +
|
|
63
|
+
" notifications — List notifications for current agent\n" +
|
|
64
|
+
" mark_notif_read — Mark a notification as read (requires notifId)\n\n" +
|
|
65
|
+
"WORKFLOW: send → list → read → respond\n\n" +
|
|
25
66
|
"WHEN TO USE: When agents need to coordinate, negotiate, or share information about tasks.\n\n" +
|
|
26
67
|
"NEXT STEP: Check unread messages with corven_message({ action: 'unread' })\n\n" +
|
|
27
68
|
"OUTPUT RULES:\n" +
|
|
@@ -49,6 +90,8 @@ export function registerMessageTools(server) {
|
|
|
49
90
|
read: false,
|
|
50
91
|
};
|
|
51
92
|
messages.push(msg);
|
|
93
|
+
saveStore('messages', messages);
|
|
94
|
+
saveStore('messageCounter', messageCounter);
|
|
52
95
|
return formatReadResult({
|
|
53
96
|
messageId: msg.id,
|
|
54
97
|
taskId: msg.taskId,
|
|
@@ -59,11 +102,17 @@ export function registerMessageTools(server) {
|
|
|
59
102
|
}, "Message Sent");
|
|
60
103
|
}
|
|
61
104
|
if (action === "list") {
|
|
62
|
-
const taskMessages = messages.filter(m => m.taskId === args.taskId)
|
|
105
|
+
const taskMessages = messages.filter(m => m.taskId === args.taskId);
|
|
106
|
+
const offset = args.offset || 0;
|
|
107
|
+
const limit = args.limit || 50;
|
|
108
|
+
const paginated = taskMessages.slice(offset, offset + limit);
|
|
63
109
|
return formatReadResult({
|
|
64
110
|
taskId: args.taskId,
|
|
65
|
-
|
|
66
|
-
|
|
111
|
+
total: taskMessages.length,
|
|
112
|
+
offset,
|
|
113
|
+
limit,
|
|
114
|
+
messageCount: paginated.length,
|
|
115
|
+
messages: paginated.map(m => ({
|
|
67
116
|
id: m.id,
|
|
68
117
|
from: m.from,
|
|
69
118
|
to: m.to,
|
|
@@ -78,6 +127,45 @@ export function registerMessageTools(server) {
|
|
|
78
127
|
const unreadCount = messages.filter(m => m.to === viewer && !m.read).length;
|
|
79
128
|
return formatReadResult({ unreadCount }, "Unread Messages");
|
|
80
129
|
}
|
|
130
|
+
if (action === "mark_read") {
|
|
131
|
+
const msgId = args.messageId;
|
|
132
|
+
if (!msgId)
|
|
133
|
+
return formatReadResult({ error: "messageId is required" }, "Error");
|
|
134
|
+
const msg = messages.find(m => m.id === msgId);
|
|
135
|
+
if (!msg)
|
|
136
|
+
return formatReadResult({ error: `Message ${msgId} not found` }, "Error");
|
|
137
|
+
if (msg.to !== sender.toLowerCase()) {
|
|
138
|
+
return formatReadResult({ error: "You can only mark your own messages as read" }, "Error");
|
|
139
|
+
}
|
|
140
|
+
msg.read = true;
|
|
141
|
+
saveStore('messages', messages);
|
|
142
|
+
return formatReadResult({ messageId: msgId, read: true }, "Message Marked Read");
|
|
143
|
+
}
|
|
144
|
+
if (action === "count") {
|
|
145
|
+
const viewer = sender.toLowerCase();
|
|
146
|
+
const total = messages.length;
|
|
147
|
+
const unread = messages.filter(m => m.to === viewer && !m.read).length;
|
|
148
|
+
return formatReadResult({ total, unread }, "Message Counts");
|
|
149
|
+
}
|
|
150
|
+
if (action === "notifications") {
|
|
151
|
+
const notifs = getNotifications(sender);
|
|
152
|
+
const unreadCount = notifs.filter(n => !n.read).length;
|
|
153
|
+
return formatReadResult({
|
|
154
|
+
address: sender,
|
|
155
|
+
total: notifs.length,
|
|
156
|
+
unread: unreadCount,
|
|
157
|
+
notifications: notifs,
|
|
158
|
+
}, "Notifications");
|
|
159
|
+
}
|
|
160
|
+
if (action === "mark_notif_read") {
|
|
161
|
+
const notifId = args.notifId;
|
|
162
|
+
if (!notifId)
|
|
163
|
+
return formatReadResult({ error: "notifId is required" }, "Error");
|
|
164
|
+
const success = markNotificationRead(sender, notifId);
|
|
165
|
+
if (!success)
|
|
166
|
+
return formatReadResult({ error: `Notification ${notifId} not found` }, "Error");
|
|
167
|
+
return formatReadResult({ notifId, read: true }, "Notification Marked Read");
|
|
168
|
+
}
|
|
81
169
|
return formatReadResult({ error: "Unknown action" }, "Error");
|
|
82
170
|
}
|
|
83
171
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-message.js","sourceRoot":"","sources":["../../src/tools/corven-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"corven-message.js","sourceRoot":"","sources":["../../src/tools/corven-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgBvD,IAAI,YAAY,GAAG,SAAS,CAAS,cAAc,EAAE,CAAC,CAAC,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,IAAY,EAAE,OAAe,EAAE,MAAc;IACxF,MAAM,KAAK,GAAG,SAAS,CAAoB,eAAe,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACf,EAAE,EAAE,SAAS,EAAE,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QAC3C,IAAI;QACJ,OAAO;QACP,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACxC,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IACH,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAClC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,SAAS,CAAoB,eAAe,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,OAAe;IAC5D,MAAM,KAAK,GAAG,SAAS,CAAoB,eAAe,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAElH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY;IACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAaH,IAAI,QAAQ,GAAG,SAAS,CAAY,UAAU,EAAE,EAAE,CAAC,CAAC;AACpD,IAAI,cAAc,GAAG,SAAS,CAAS,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAE5D,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,oHAAoH;YACpH,YAAY;YACZ,0DAA0D;YAC1D,8EAA8E;YAC9E,uCAAuC;YACvC,6DAA6D;YAC7D,iDAAiD;YACjD,0DAA0D;YAC1D,wEAAwE;YACxE,4CAA4C;YAC5C,+FAA+F;YAC/F,gFAAgF;YAChF,iBAAiB;YACjB,mEAAmE;YACnE,gFAAgF;YAChF,kDAAkD;YAClD,2DAA2D;QAC7D,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACxB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,qBAAqB,CAAC,4BAA4B,EAAE,wBAAwB,EAAE,8CAA8C,EAAE,KAAK,CAAC,CAAC;YAC9I,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YAEvE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAY;oBACnB,EAAE,EAAE,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;oBAC3C,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE;oBAC1B,EAAE,EAAE,IAAI,CAAC,EAAG,CAAC,WAAW,EAAE;oBAC1B,OAAO,EAAE,IAAI,CAAC,OAAQ;oBACtB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;oBACxB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;oBACxC,IAAI,EAAE,KAAK;iBACZ,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAChC,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;gBAE5C,OAAO,gBAAgB,CAAC;oBACtB,SAAS,EAAE,GAAG,CAAC,EAAE;oBACjB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO;iBAC3F,EAAE,cAAc,CAAC,CAAC;YACrB,CAAC;YAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;gBAC7D,OAAO,gBAAgB,CAAC;oBACtB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,YAAY,CAAC,MAAM;oBAC1B,MAAM;oBACN,KAAK;oBACL,YAAY,EAAE,SAAS,CAAC,MAAM;oBAC9B,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC5B,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,IAAI,EAAE,CAAC,CAAC,IAAI;qBACb,CAAC,CAAC;iBACJ,EAAE,sBAAsB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBAC5E,OAAO,gBAAgB,CAAC,EAAE,WAAW,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAC9D,CAAC;YAED,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,IAAI,CAAC,KAAK;oBAAE,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,OAAO,CAAC,CAAC;gBACjF,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG;oBAAE,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,KAAK,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;gBACpF,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;oBACpC,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC7F,CAAC;gBACD,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAChC,OAAO,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACnF,CAAC;YAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBACvE,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;gBACvD,OAAO,gBAAgB,CAAC;oBACtB,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,MAAM,EAAE,WAAW;oBACnB,aAAa,EAAE,MAAM;iBACtB,EAAE,eAAe,CAAC,CAAC;YACtB,CAAC;YAED,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC7B,IAAI,CAAC,OAAO;oBAAE,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,OAAO,CAAC,CAAC;gBACjF,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACtD,IAAI,CAAC,OAAO;oBAAE,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,gBAAgB,OAAO,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC/F,OAAO,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC;YAC/E,CAAC;YAED,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-reputation.d.ts","sourceRoot":"","sources":["../../src/tools/corven-reputation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"corven-reputation.d.ts","sourceRoot":"","sources":["../../src/tools/corven-reputation.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqDzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0L/D"}
|
|
@@ -4,9 +4,37 @@ import { readContract } from "../handlers/wallet.js";
|
|
|
4
4
|
import { formatReadResult } from "../handlers/transactions.js";
|
|
5
5
|
import { formatStructuredError, parseContractError } from "../lib/formatResponse.js";
|
|
6
6
|
import { addressToDid, didToAddress } from "../lib/did.js";
|
|
7
|
+
import { loadStore, saveStore } from "../lib/store.js";
|
|
7
8
|
const REGISTRY_ABI = loadAbi("AgentRegistry");
|
|
8
9
|
const VERIFIER_ABI = loadAbi("ReceiptVerifier");
|
|
9
|
-
|
|
10
|
+
function addHistory(address, score, change, reason) {
|
|
11
|
+
const store = loadStore("reputation_history", {});
|
|
12
|
+
if (!store[address])
|
|
13
|
+
store[address] = [];
|
|
14
|
+
store[address].push({ score, change, reason, timestamp: Date.now() });
|
|
15
|
+
saveStore("reputation_history", store);
|
|
16
|
+
}
|
|
17
|
+
function getHistory(address) {
|
|
18
|
+
const store = loadStore("reputation_history", {});
|
|
19
|
+
return store[address] || [];
|
|
20
|
+
}
|
|
21
|
+
function getStats(address) {
|
|
22
|
+
const history = getHistory(address);
|
|
23
|
+
if (history.length === 0) {
|
|
24
|
+
return { totalChanges: 0, avgChange: 0, bestPeriod: null, worstPeriod: null };
|
|
25
|
+
}
|
|
26
|
+
const changes = history.map(h => h.change);
|
|
27
|
+
const avgChange = Math.round((changes.reduce((a, b) => a + b, 0) / changes.length) * 100) / 100;
|
|
28
|
+
const bestIdx = changes.indexOf(Math.max(...changes));
|
|
29
|
+
const worstIdx = changes.indexOf(Math.min(...changes));
|
|
30
|
+
return {
|
|
31
|
+
totalChanges: history.length,
|
|
32
|
+
avgChange,
|
|
33
|
+
bestPeriod: history[bestIdx],
|
|
34
|
+
worstPeriod: history[worstIdx],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const actionSchema = z.enum(["export", "import", "did", "history", "stats"]);
|
|
10
38
|
const schema = z.object({
|
|
11
39
|
action: actionSchema,
|
|
12
40
|
address: z.string().optional(),
|
|
@@ -19,7 +47,9 @@ export function registerReputationTools(server) {
|
|
|
19
47
|
"ACTIONS:\n" +
|
|
20
48
|
" export — Export reputation as W3C VC JWT (requires address)\n" +
|
|
21
49
|
" import — Verify and parse a reputation VC (requires jwt)\n" +
|
|
22
|
-
" did — Get DID document for an agent (requires address)\n
|
|
50
|
+
" did — Get DID document for an agent (requires address)\n" +
|
|
51
|
+
" history — Get reputation change history for an agent (requires address)\n" +
|
|
52
|
+
" stats — Get aggregate reputation stats (requires address)\n\n" +
|
|
23
53
|
"WORKFLOW: export → share JWT → import (cross-platform trust)\n" +
|
|
24
54
|
"DID FORMAT: did:covenant:<address>\n" +
|
|
25
55
|
"VC TYPE: CovenantReputation signed with ES256K\n\n" +
|
|
@@ -50,6 +80,8 @@ export function registerReputationTools(server) {
|
|
|
50
80
|
attestationCount = Array.isArray(receipts) ? receipts.length : 0;
|
|
51
81
|
}
|
|
52
82
|
catch { /* not fatal */ }
|
|
83
|
+
const history = getHistory(addr.toLowerCase());
|
|
84
|
+
addHistory(addr.toLowerCase(), Number(agent.reputation), 0, "export");
|
|
53
85
|
return formatReadResult({
|
|
54
86
|
did: addressToDid(addr),
|
|
55
87
|
address: addr,
|
|
@@ -67,6 +99,8 @@ export function registerReputationTools(server) {
|
|
|
67
99
|
: Number(agent.tasksCompleted) >= 50 ? "Top 10%"
|
|
68
100
|
: Number(agent.tasksCompleted) >= 10 ? "Established"
|
|
69
101
|
: "Newcomer",
|
|
102
|
+
historyCount: history.length,
|
|
103
|
+
recentChanges: history.slice(-5),
|
|
70
104
|
note: "Full JWT export requires wallet signing. Use corven_export_reputation_vc for signed JWT.",
|
|
71
105
|
}, "Reputation Export");
|
|
72
106
|
}
|
|
@@ -78,19 +112,39 @@ export function registerReputationTools(server) {
|
|
|
78
112
|
if (parts.length !== 3) {
|
|
79
113
|
return formatStructuredError("Invalid JWT format.", "Expected 3 parts.", "Use a valid VC JWT from corven_export_reputation_vc.", false);
|
|
80
114
|
}
|
|
81
|
-
|
|
82
|
-
|
|
115
|
+
let payload;
|
|
116
|
+
try {
|
|
117
|
+
payload = JSON.parse(Buffer.from(parts[1], "base64").toString());
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return formatStructuredError("Invalid JWT payload.", "Cannot decode JWT body.", "Ensure the JWT is properly formatted.", false);
|
|
121
|
+
}
|
|
122
|
+
if (!payload.iss) {
|
|
123
|
+
return formatStructuredError("Invalid VC structure.", "Missing 'iss' field.", "Use a valid W3C Verifiable Credential.", false);
|
|
124
|
+
}
|
|
125
|
+
let issuerAddress;
|
|
126
|
+
try {
|
|
127
|
+
issuerAddress = didToAddress(payload.iss);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return formatStructuredError("Invalid issuer DID.", "Cannot extract address from DID.", "Ensure iss is a valid did:covenant: address.", false);
|
|
131
|
+
}
|
|
83
132
|
let issuerRegistered = false;
|
|
84
133
|
try {
|
|
85
134
|
await readContract(CONTRACTS.AgentRegistry, REGISTRY_ABI, "getAgent", [issuerAddress]);
|
|
86
135
|
issuerRegistered = true;
|
|
87
136
|
}
|
|
88
137
|
catch { /* not registered */ }
|
|
138
|
+
const credential = payload.vc?.credentialSubject || payload;
|
|
139
|
+
const requiredFields = ["reputation", "tasksCompleted"];
|
|
140
|
+
const missingFields = requiredFields.filter(f => !(f in credential));
|
|
89
141
|
return formatReadResult({
|
|
90
142
|
verified: true,
|
|
143
|
+
validStructure: missingFields.length === 0,
|
|
144
|
+
missingFields,
|
|
91
145
|
issuerRegistered,
|
|
92
146
|
issuer: { did: payload.iss, address: issuerAddress },
|
|
93
|
-
credential
|
|
147
|
+
credential,
|
|
94
148
|
}, "VC Verified and Imported");
|
|
95
149
|
}
|
|
96
150
|
if (action === "did") {
|
|
@@ -122,6 +176,29 @@ export function registerReputationTools(server) {
|
|
|
122
176
|
agentData,
|
|
123
177
|
}, "Agent DID Document");
|
|
124
178
|
}
|
|
179
|
+
if (action === "history") {
|
|
180
|
+
const addr = args.address || getAccount()?.address;
|
|
181
|
+
if (!addr) {
|
|
182
|
+
return formatStructuredError("No address provided.", "Address is required.", "Provide an Ethereum address.", false);
|
|
183
|
+
}
|
|
184
|
+
const history = getHistory(addr.toLowerCase());
|
|
185
|
+
return formatReadResult({
|
|
186
|
+
address: addr,
|
|
187
|
+
totalEntries: history.length,
|
|
188
|
+
history,
|
|
189
|
+
}, "Reputation History");
|
|
190
|
+
}
|
|
191
|
+
if (action === "stats") {
|
|
192
|
+
const addr = args.address || getAccount()?.address;
|
|
193
|
+
if (!addr) {
|
|
194
|
+
return formatStructuredError("No address provided.", "Address is required.", "Provide an Ethereum address.", false);
|
|
195
|
+
}
|
|
196
|
+
const stats = getStats(addr.toLowerCase());
|
|
197
|
+
return formatReadResult({
|
|
198
|
+
address: addr,
|
|
199
|
+
...stats,
|
|
200
|
+
}, "Reputation Stats");
|
|
201
|
+
}
|
|
125
202
|
return formatReadResult({ error: "Unknown action" }, "Error");
|
|
126
203
|
}
|
|
127
204
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-reputation.js","sourceRoot":"","sources":["../../src/tools/corven-reputation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"corven-reputation.js","sourceRoot":"","sources":["../../src/tools/corven-reputation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGvD,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAahD,SAAS,UAAU,CAAC,OAAe,EAAE,KAAa,EAAE,MAAc,EAAE,MAAc;IAChF,MAAM,KAAK,GAAG,SAAS,CAAyB,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtE,SAAS,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,KAAK,GAAG,SAAS,CAAyB,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe;IAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAChG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACvD,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,SAAS;QACT,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC;QAC5B,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,+FAA+F;YAC/F,YAAY;YACZ,iEAAiE;YACjE,8DAA8D;YAC9D,4DAA4D;YAC5D,6EAA6E;YAC7E,iEAAiE;YACjE,gEAAgE;YAChE,sCAAsC;YACtC,oDAAoD;YACpD,kFAAkF;YAClF,mFAAmF;YACnF,iBAAiB;YACjB,mEAAmE;YACnE,gFAAgF;YAChF,kDAAkD;YAClD,2DAA2D;QAC7D,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAExB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,OAAO,CAAC;gBACnD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,qBAAqB,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACtH,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,IAAe,CAAC,CAAC,CAAC;gBAC3G,MAAM,KAAK,GAAG,SAAgB,CAAC;gBAE/B,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC;gBAC5D,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvG,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;gBAE7E,IAAI,gBAAgB,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,IAAe,CAAC,CAAC,CAAC;oBACtH,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC;gBAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;gBAE3B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAEtE,OAAO,gBAAgB,CAAC;oBACtB,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC;oBACvB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;oBACpC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;oBAC5C,WAAW;oBACX,aAAa;oBACb,eAAe,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;oBACtD,gBAAgB;oBAChB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;wBACzC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACzE,CAAC,CAAC,SAAS;oBACb,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ;wBAClD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ;4BAChD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;gCAChD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa;oCACpD,CAAC,CAAC,UAAU;oBACd,YAAY,EAAE,OAAO,CAAC,MAAM;oBAC5B,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,EAAE,0FAA0F;iBACjG,EAAE,mBAAmB,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBAC1G,CAAC;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,qBAAqB,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,sDAAsD,EAAE,KAAK,CAAC,CAAC;gBAC1I,CAAC;gBAED,IAAI,OAAY,CAAC;gBACjB,IAAI,CAAC;oBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnE,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,qBAAqB,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,uCAAuC,EAAE,KAAK,CAAC,CAAC;gBAClI,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACjB,OAAO,qBAAqB,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,wCAAwC,EAAE,KAAK,CAAC,CAAC;gBACjI,CAAC;gBAED,IAAI,aAAqB,CAAC;gBAC1B,IAAI,CAAC;oBACH,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,qBAAqB,CAAC,qBAAqB,EAAE,kCAAkC,EAAE,8CAA8C,EAAE,KAAK,CAAC,CAAC;gBACjJ,CAAC;gBAED,IAAI,gBAAgB,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,aAAwB,CAAC,CAAC,CAAC;oBAClG,gBAAgB,GAAG,IAAI,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;gBAEhC,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,EAAE,iBAAiB,IAAI,OAAO,CAAC;gBAC5D,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;gBACxD,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;gBAErE,OAAO,gBAAgB,CAAC;oBACtB,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;oBAC1C,aAAa;oBACb,gBAAgB;oBAChB,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE;oBACpD,UAAU;iBACX,EAAE,0BAA0B,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,OAAO,CAAC;gBACnD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,qBAAqB,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACtH,CAAC;gBAED,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,SAAS,GAAQ,SAAS,CAAC;gBAE/B,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,IAAe,CAAC,CAAC,CAAC;oBACrG,SAAS,GAAG;wBACV,YAAY,EAAG,GAAW,CAAC,YAAY;wBACvC,UAAU,EAAE,MAAM,CAAE,GAAW,CAAC,UAAU,CAAC;wBAC3C,cAAc,EAAE,MAAM,CAAE,GAAW,CAAC,cAAc,CAAC;qBACpD,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;gBAEhC,OAAO,gBAAgB,CAAC;oBACtB,GAAG;oBACH,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE;wBACR,UAAU,EAAE,CAAC,yBAAyB,CAAC;wBACvC,EAAE,EAAE,GAAG;wBACP,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;wBACxG,cAAc,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC;qBACjC;oBACD,UAAU,EAAE,CAAC,CAAC,SAAS;oBACvB,SAAS;iBACV,EAAE,oBAAoB,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,OAAO,CAAC;gBACnD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,qBAAqB,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACtH,CAAC;gBACD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/C,OAAO,gBAAgB,CAAC;oBACtB,OAAO,EAAE,IAAI;oBACb,YAAY,EAAE,OAAO,CAAC,MAAM;oBAC5B,OAAO;iBACR,EAAE,oBAAoB,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,EAAE,EAAE,OAAO,CAAC;gBACnD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,qBAAqB,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACtH,CAAC;gBACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3C,OAAO,gBAAgB,CAAC;oBACtB,OAAO,EAAE,IAAI;oBACb,GAAG,KAAK;iBACT,EAAE,kBAAkB,CAAC,CAAC;YACzB,CAAC;YAED,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-stats.d.ts","sourceRoot":"","sources":["../../src/tools/corven-stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"corven-stats.d.ts","sourceRoot":"","sources":["../../src/tools/corven-stats.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkL1D"}
|
|
@@ -8,6 +8,8 @@ import { loadAbi, CONTRACTS } from "../config.js";
|
|
|
8
8
|
import { readContract } from "../handlers/wallet.js";
|
|
9
9
|
import { formatReadResult } from "../handlers/transactions.js";
|
|
10
10
|
import { parseContractError, formatStructuredError } from "../lib/formatResponse.js";
|
|
11
|
+
import { loadStore, saveStore } from "../lib/store.js";
|
|
12
|
+
import { eventIndexer } from "../lib/events.js";
|
|
11
13
|
const identityAbi = loadAbi("CovenantIdentity");
|
|
12
14
|
const escrowAbi = loadAbi("CovenantEscrow");
|
|
13
15
|
// ─── Input Schemas ───────────────────────────────────────────
|
|
@@ -18,25 +20,32 @@ const leaderboardSchema = z.object({
|
|
|
18
20
|
// ─── Tool Registration ───────────────────────────────────────
|
|
19
21
|
export function registerStatsTools(server) {
|
|
20
22
|
// ──────────────────────────────────────────────────────────
|
|
21
|
-
// corven_stats — action: stats
|
|
23
|
+
// corven_stats — action: stats, leaderboard, subscribe,
|
|
24
|
+
// unsubscribe, list_hooks, recent_events
|
|
22
25
|
// ──────────────────────────────────────────────────────────
|
|
23
26
|
server.registerTool("corven_stats", {
|
|
24
|
-
title: "Protocol Statistics",
|
|
25
|
-
description: "Get aggregate COVENANT protocol health metrics
|
|
27
|
+
title: "Protocol Statistics & Webhooks",
|
|
28
|
+
description: "Get aggregate COVENANT protocol health metrics or manage event webhooks.\n" +
|
|
26
29
|
"ACTIONS:\n" +
|
|
27
|
-
" stats
|
|
28
|
-
" leaderboard
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
30
|
+
" stats — Total agents, tasks created, total volume (ETH), and fees collected.\n" +
|
|
31
|
+
" leaderboard — Top N agents ranked by reputation (address, name, tasks completed, stake).\n" +
|
|
32
|
+
" subscribe — Register a webhook URL for specific event types.\n" +
|
|
33
|
+
" unsubscribe — Remove a webhook by ID.\n" +
|
|
34
|
+
" list_hooks — List active webhook subscriptions.\n" +
|
|
35
|
+
" recent_events — Return recent events from the on-chain event indexer.\n" +
|
|
36
|
+
"WORKFLOW: corven_stats stats → corven_stats leaderboard (for top performers).\n" +
|
|
37
|
+
"WHEN TO USE: To assess protocol activity, growth, discover top agents, or get notified of events.\n\n" +
|
|
32
38
|
"OUTPUT RULES:\n" +
|
|
33
39
|
"- Present results as clean, readable text. Never show raw JSON.\n" +
|
|
34
40
|
"- On error: Explain in plain language what went wrong and suggest next step.\n" +
|
|
35
41
|
"- Always recommend a logical follow-up action.\n" +
|
|
36
42
|
"- Never show stack traces, technical errors, or raw data.",
|
|
37
43
|
inputSchema: {
|
|
38
|
-
action: z.enum(["stats", "leaderboard"]).describe("Stats action"),
|
|
44
|
+
action: z.enum(["stats", "leaderboard", "subscribe", "unsubscribe", "list_hooks", "recent_events"]).describe("Stats or webhook action"),
|
|
39
45
|
limit: z.number().optional().describe("Leaderboard size (1-50, default 10)"),
|
|
46
|
+
url: z.string().optional().describe("Webhook URL (for subscribe)"),
|
|
47
|
+
events: z.array(z.string()).optional().describe("Event types to subscribe to (for subscribe)"),
|
|
48
|
+
hookId: z.string().optional().describe("Webhook ID (for unsubscribe)"),
|
|
40
49
|
},
|
|
41
50
|
}, async (params) => {
|
|
42
51
|
try {
|
|
@@ -70,8 +79,61 @@ export function registerStatsTools(server) {
|
|
|
70
79
|
note: "Agent iteration not available in V5. Use corven_agent get with a specific address.",
|
|
71
80
|
}, "COVENANT Agent Leaderboard");
|
|
72
81
|
}
|
|
82
|
+
case "subscribe": {
|
|
83
|
+
const { url, events } = params;
|
|
84
|
+
if (!url || !events || events.length === 0) {
|
|
85
|
+
return formatStructuredError("Missing required fields.", "subscribe requires url and events array.", "Provide url and at least one event type.", false);
|
|
86
|
+
}
|
|
87
|
+
const webhookStore = loadStore("webhooks", {});
|
|
88
|
+
const id = `wh_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
89
|
+
webhookStore[id] = { id, url, events, active: true, createdAt: Date.now() };
|
|
90
|
+
saveStore("webhooks", webhookStore);
|
|
91
|
+
return formatReadResult({ id, url, events, active: true }, "Webhook Registered");
|
|
92
|
+
}
|
|
93
|
+
case "unsubscribe": {
|
|
94
|
+
const { hookId } = params;
|
|
95
|
+
if (!hookId) {
|
|
96
|
+
return formatStructuredError("Missing required field.", "unsubscribe requires hookId.", "Provide the webhook ID from list_hooks.", false);
|
|
97
|
+
}
|
|
98
|
+
const webhookStore = loadStore("webhooks", {});
|
|
99
|
+
if (!webhookStore[hookId]) {
|
|
100
|
+
return formatStructuredError("Webhook not found.", `No webhook with ID ${hookId}.`, "Use list_hooks to see active hooks.", false);
|
|
101
|
+
}
|
|
102
|
+
delete webhookStore[hookId];
|
|
103
|
+
saveStore("webhooks", webhookStore);
|
|
104
|
+
return formatReadResult({ hookId, removed: true }, "Webhook Removed");
|
|
105
|
+
}
|
|
106
|
+
case "list_hooks": {
|
|
107
|
+
const webhookStore = loadStore("webhooks", {});
|
|
108
|
+
const hooks = Object.values(webhookStore);
|
|
109
|
+
return formatReadResult({
|
|
110
|
+
totalHooks: hooks.length,
|
|
111
|
+
active: hooks.filter(h => h.active).length,
|
|
112
|
+
hooks: hooks.map(h => ({
|
|
113
|
+
id: h.id,
|
|
114
|
+
url: h.url,
|
|
115
|
+
events: h.events,
|
|
116
|
+
active: h.active,
|
|
117
|
+
createdAt: new Date(h.createdAt).toISOString(),
|
|
118
|
+
})),
|
|
119
|
+
}, "Registered Webhooks");
|
|
120
|
+
}
|
|
121
|
+
case "recent_events": {
|
|
122
|
+
const recentEvents = eventIndexer.query({});
|
|
123
|
+
const last50 = recentEvents.slice(-50);
|
|
124
|
+
return formatReadResult({
|
|
125
|
+
totalIndexed: recentEvents.length,
|
|
126
|
+
showing: last50.length,
|
|
127
|
+
events: last50.map(e => ({
|
|
128
|
+
eventName: e.eventName,
|
|
129
|
+
blockNumber: Number(e.blockNumber),
|
|
130
|
+
transactionHash: e.transactionHash,
|
|
131
|
+
address: e.address,
|
|
132
|
+
})),
|
|
133
|
+
}, "Recent On-Chain Events");
|
|
134
|
+
}
|
|
73
135
|
default:
|
|
74
|
-
return formatStructuredError(`Unknown action: ${action}`, "Valid actions: stats, leaderboard", "Pass
|
|
136
|
+
return formatStructuredError(`Unknown action: ${action}`, "Valid actions: stats, leaderboard, subscribe, unsubscribe, list_hooks, recent_events", "Pass a valid action string.", true);
|
|
75
137
|
}
|
|
76
138
|
}
|
|
77
139
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-stats.js","sourceRoot":"","sources":["../../src/tools/corven-stats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAc,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAoB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAkB,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"corven-stats.js","sourceRoot":"","sources":["../../src/tools/corven-stats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAc,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAoB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAkB,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAWhD,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAChD,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE5C,gEAAgE;AAEhE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACjC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CACtG,CAAC,CAAC;AAEH,gEAAgE;AAEhE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,6DAA6D;IAC7D,wDAAwD;IACxD,0DAA0D;IAC1D,6DAA6D;IAC7D,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,4EAA4E;YAC5E,YAAY;YACZ,2FAA2F;YAC3F,iGAAiG;YACjG,uEAAuE;YACvE,8CAA8C;YAC9C,yDAAyD;YACzD,4EAA4E;YAC5E,iFAAiF;YACjF,uGAAuG;YACvG,iBAAiB;YACjB,mEAAmE;YACnE,gFAAgF;YAChF,kDAAkD;YAClD,2DAA2D;QAC7D,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACvI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAC5E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAClE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAC9F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SACvE;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAA4B,CAAC;YAEhD,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;wBAClD,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,CAAC;wBACrE,YAAY,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC;qBAC/D,CAAC,CAAC;oBAEH,OAAO,gBAAgB,CACrB;wBACE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;wBAChC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;wBAC9B,YAAY,EAAE,GAAG;qBAClB,EACD,8BAA8B,CAC/B,CAAC;gBACJ,CAAC;gBAED,KAAK,aAAa,CAAC,CAAC,CAAC;oBACnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBACpE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,OAAO,qBAAqB,CAC1B,gBAAgB,EAChB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EACpD,wBAAwB,EACxB,IAAI,CACL,CAAC;oBACJ,CAAC;oBACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;oBAEpC,MAAM,WAAW,GAAG,MAAM,CACxB,MAAM,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,CAAC,CAC5E,CAAC;oBAEF,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;wBACtB,OAAO,gBAAgB,CACrB,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,EAC9B,0BAA0B,CAC3B,CAAC;oBACJ,CAAC;oBAED,OAAO,gBAAgB,CACrB;wBACE,WAAW;wBACX,OAAO,EAAE,CAAC;wBACV,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,oFAAoF;qBAC3F,EACD,4BAA4B,CAC7B,CAAC;gBACJ,CAAC;gBAED,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAA6C,CAAC;oBACtE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC3C,OAAO,qBAAqB,CAC1B,0BAA0B,EAC1B,0CAA0C,EAC1C,0CAA0C,EAC1C,KAAK,CACN,CAAC;oBACJ,CAAC;oBACD,MAAM,YAAY,GAAG,SAAS,CAAgC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC9E,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACxE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC5E,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;oBACpC,OAAO,gBAAgB,CACrB,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EACjC,oBAAoB,CACrB,CAAC;gBACJ,CAAC;gBAED,KAAK,aAAa,CAAC,CAAC,CAAC;oBACnB,MAAM,EAAE,MAAM,EAAE,GAAG,MAA6B,CAAC;oBACjD,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO,qBAAqB,CAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,yCAAyC,EACzC,KAAK,CACN,CAAC;oBACJ,CAAC;oBACD,MAAM,YAAY,GAAG,SAAS,CAAgC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC9E,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC1B,OAAO,qBAAqB,CAAC,oBAAoB,EAAE,sBAAsB,MAAM,GAAG,EAAE,qCAAqC,EAAE,KAAK,CAAC,CAAC;oBACpI,CAAC;oBACD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;oBAC5B,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;oBACpC,OAAO,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,iBAAiB,CAAC,CAAC;gBACxE,CAAC;gBAED,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,YAAY,GAAG,SAAS,CAAgC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC9E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAC1C,OAAO,gBAAgB,CACrB;wBACE,UAAU,EAAE,KAAK,CAAC,MAAM;wBACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;wBAC1C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACrB,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,MAAM,EAAE,CAAC,CAAC,MAAM;4BAChB,MAAM,EAAE,CAAC,CAAC,MAAM;4BAChB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;yBAC/C,CAAC,CAAC;qBACJ,EACD,qBAAqB,CACtB,CAAC;gBACJ,CAAC;gBAED,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvC,OAAO,gBAAgB,CACrB;wBACE,YAAY,EAAE,YAAY,CAAC,MAAM;wBACjC,OAAO,EAAE,MAAM,CAAC,MAAM;wBACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACvB,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;4BAClC,eAAe,EAAE,CAAC,CAAC,eAAe;4BAClC,OAAO,EAAE,CAAC,CAAC,OAAO;yBACnB,CAAC,CAAC;qBACJ,EACD,wBAAwB,CACzB,CAAC;gBACJ,CAAC;gBAED;oBACE,OAAO,qBAAqB,CAC1B,mBAAmB,MAAM,EAAE,EAC3B,sFAAsF,EACtF,6BAA6B,EAC7B,IAAI,CACL,CAAC;YACN,CAAC;QACH,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corven-task.d.ts","sourceRoot":"","sources":["../../src/tools/corven-task.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"corven-task.d.ts","sourceRoot":"","sources":["../../src/tools/corven-task.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2EzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiQzD"}
|