kompass-sdk 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bridge.d.ts +4 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +55 -1
- package/dist/bridge.js.map +1 -1
- package/dist/cli.js +65 -1
- package/dist/cli.js.map +1 -1
- package/dist/ens.d.ts +26 -0
- package/dist/ens.d.ts.map +1 -0
- package/dist/ens.js +85 -0
- package/dist/ens.js.map +1 -0
- package/dist/reputation-writer.d.ts +34 -0
- package/dist/reputation-writer.d.ts.map +1 -0
- package/dist/reputation-writer.js +84 -0
- package/dist/reputation-writer.js.map +1 -0
- package/dist/router.d.ts +3 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +20 -1
- package/dist/router.js.map +1 -1
- package/dist/sources/kompass-registry.js +1 -0
- package/dist/sources/kompass-registry.js.map +1 -1
- package/dist/sources/types.d.ts +2 -0
- package/dist/sources/types.d.ts.map +1 -1
- package/dist/unified.d.ts +4 -0
- package/dist/unified.d.ts.map +1 -1
- package/dist/unified.js +5 -3
- package/dist/unified.js.map +1 -1
- package/package.json +1 -1
- package/src/bridge.ts +66 -2
- package/src/cli.ts +68 -2
- package/src/ens.ts +104 -0
- package/src/reputation-writer.ts +115 -0
- package/src/router.ts +20 -1
- package/src/sources/kompass-registry.ts +1 -0
- package/src/sources/types.ts +2 -0
- package/src/unified.ts +9 -3
package/dist/router.js
CHANGED
|
@@ -11,12 +11,17 @@
|
|
|
11
11
|
* 5. Return result
|
|
12
12
|
*/
|
|
13
13
|
import { rankAgents } from "./matching.js";
|
|
14
|
+
import { ReputationWriter } from "./reputation-writer.js";
|
|
14
15
|
export class CapabilityRouter {
|
|
15
16
|
aggregator;
|
|
16
17
|
bridge;
|
|
17
|
-
|
|
18
|
+
reputationWriter;
|
|
19
|
+
constructor(aggregator, bridge, reputationConfig) {
|
|
18
20
|
this.aggregator = aggregator;
|
|
19
21
|
this.bridge = bridge;
|
|
22
|
+
if (reputationConfig) {
|
|
23
|
+
this.reputationWriter = new ReputationWriter(reputationConfig);
|
|
24
|
+
}
|
|
20
25
|
}
|
|
21
26
|
async do(options) {
|
|
22
27
|
const { task, dryRun = false } = options;
|
|
@@ -77,6 +82,20 @@ export class CapabilityRouter {
|
|
|
77
82
|
timeout: options.timeout,
|
|
78
83
|
payload: options.payload,
|
|
79
84
|
});
|
|
85
|
+
// 8. Write ERC-8004 reputation feedback on-chain
|
|
86
|
+
if (this.reputationWriter && selected.agent.reputation?.source === "erc8004") {
|
|
87
|
+
const agentId = BigInt(selected.agent.nativeId || "0");
|
|
88
|
+
if (agentId > 0n) {
|
|
89
|
+
const category = selected.agent.categories[0] ?? "general";
|
|
90
|
+
const endpoint = selected.agent.endpoints.x402 ?? selected.agent.endpoints.http ?? "";
|
|
91
|
+
if (execution?.success) {
|
|
92
|
+
await this.reputationWriter.writePositiveFeedback(agentId, category, endpoint);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
await this.reputationWriter.writeNegativeFeedback(agentId, category, endpoint);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
80
99
|
}
|
|
81
100
|
const reasoning = this.explainChoice(selected, reranked, options);
|
|
82
101
|
return {
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,UAAU,EAAiC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,7 @@ function mapKompassAgent(agent) {
|
|
|
35
35
|
id: `kompass-registry:${agent.id}`,
|
|
36
36
|
nativeId: agent.id,
|
|
37
37
|
name: agent.ensName || agent.id,
|
|
38
|
+
ensName: agent.ensName || undefined,
|
|
38
39
|
description: agent.description ?? "",
|
|
39
40
|
categories: agent.categories ? agent.categories.split(",").map((c) => c.trim()) : [],
|
|
40
41
|
capabilities: [agent.description, agent.categories].filter(Boolean),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kompass-registry.js","sourceRoot":"","sources":["../../src/sources/kompass-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,MAAM,UAAU,4BAA4B,CAAC,MAAqB;IAChE,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2BAA2B;QAExC,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAA6B;YACvD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE;oBACpC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK;oBACpC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;iBAC5B,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI;YACR,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB;IAC1C,OAAO;QACL,EAAE,EAAE,oBAAoB,KAAK,CAAC,EAAE,EAAE;QAClC,QAAQ,EAAE,KAAK,CAAC,EAAE;QAClB,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE;QAC/B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QACpC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5F,YAAY,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa;QAC/E,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACxG,SAAS,EAAE;YACT,GAAG,EAAE,KAAK,CAAC,WAAW,IAAI,SAAS;YACnC,GAAG,EAAE,KAAK,CAAC,WAAW,IAAI,SAAS;YACnC,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,SAAS;SACtC;QACD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC5B,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,iBAAiB;SAC1B,CAAC,CAAC,CAAC,SAAS;QACb,OAAO,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxG,MAAM,EAAE,KAAK,CAAC,WAAW,IAAI,SAAS;YACtC,QAAQ,EAAE,KAAK,CAAC,YAAY,IAAI,MAAM;SACvC;QACD,QAAQ,EAAE,KAAK,CAAC,gBAAgB;QAChC,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"kompass-registry.js","sourceRoot":"","sources":["../../src/sources/kompass-registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,MAAM,UAAU,4BAA4B,CAAC,MAAqB;IAChE,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2BAA2B;QAExC,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAA6B;YACvD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE;oBACpC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK;oBACpC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;iBAC5B,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI;YACR,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB;IAC1C,OAAO;QACL,EAAE,EAAE,oBAAoB,KAAK,CAAC,EAAE,EAAE;QAClC,QAAQ,EAAE,KAAK,CAAC,EAAE;QAClB,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;QACnC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;QACpC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5F,YAAY,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa;QAC/E,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACxG,SAAS,EAAE;YACT,GAAG,EAAE,KAAK,CAAC,WAAW,IAAI,SAAS;YACnC,GAAG,EAAE,KAAK,CAAC,WAAW,IAAI,SAAS;YACnC,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,SAAS;SACtC;QACD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;YAC5B,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,iBAAiB;SAC1B,CAAC,CAAC,CAAC,SAAS;QACb,OAAO,EAAE;YACP,KAAK,EAAE,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxG,MAAM,EAAE,KAAK,CAAC,WAAW,IAAI,SAAS;YACtC,QAAQ,EAAE,KAAK,CAAC,YAAY,IAAI,MAAM;SACvC;QACD,QAAQ,EAAE,KAAK,CAAC,gBAAgB;QAChC,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC"}
|
package/dist/sources/types.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface UnifiedAgent {
|
|
|
13
13
|
nativeId: string;
|
|
14
14
|
/** Agent name */
|
|
15
15
|
name: string;
|
|
16
|
+
/** ENS / Basename if available (e.g., "yieldsage.base.eth") */
|
|
17
|
+
ensName?: string;
|
|
16
18
|
/** Description of what this agent does */
|
|
17
19
|
description: string;
|
|
18
20
|
/** Capability categories (e.g., ["defi", "yield", "analytics"]) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,KAAK,GACL,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,KAAK,GACL,eAAe,GACf,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2CAA2C;IAC3C,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,SAAS,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACzD,CAAC;IACF,+BAA+B;IAC/B,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mBAAmB;IACnB,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;QACnE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9E,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,KAAK,GACL,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,KAAK,GACL,eAAe,GACf,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2CAA2C;IAC3C,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,SAAS,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACzD,CAAC;IACF,+BAA+B;IAC/B,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mBAAmB;IACnB,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;QACnE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9E,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B"}
|
package/dist/unified.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { type AggregatorResult } from "./aggregator.js";
|
|
|
14
14
|
import { type MatchResult } from "./matching.js";
|
|
15
15
|
import { type BridgeHireOptions, type BridgeHireResult } from "./bridge.js";
|
|
16
16
|
import { type DoOptions, type DoResult } from "./router.js";
|
|
17
|
+
import type { ReputationWriterConfig } from "./reputation-writer.js";
|
|
17
18
|
export interface UnifiedConfig {
|
|
18
19
|
/** Network for on-chain sources */
|
|
19
20
|
network?: "base" | "base-sepolia";
|
|
@@ -23,6 +24,8 @@ export interface UnifiedConfig {
|
|
|
23
24
|
acpBackend?: any;
|
|
24
25
|
/** Kompass SDK config (for kompass-registry source) */
|
|
25
26
|
kompassConfig?: any;
|
|
27
|
+
/** ERC-8004 reputation writer config (writes feedback after executions) */
|
|
28
|
+
reputationWriter?: ReputationWriterConfig;
|
|
26
29
|
}
|
|
27
30
|
export interface FindOptions {
|
|
28
31
|
/** Max results */
|
|
@@ -43,6 +46,7 @@ export declare class KompassUnified {
|
|
|
43
46
|
private bridge;
|
|
44
47
|
private router;
|
|
45
48
|
private adapters;
|
|
49
|
+
private config?;
|
|
46
50
|
private constructor();
|
|
47
51
|
static create(config?: UnifiedConfig): Promise<KompassUnified>;
|
|
48
52
|
/**
|
package/dist/unified.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified.d.ts","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"unified.d.ts","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAClC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gDAAgD;IAChD,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,uDAAuD;IACvD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IAC1B,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,+CAA+C;IAC/C,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,MAAM,CAAC,CAAgB;IAE/B,OAAO;WAQM,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAcpE;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBrE;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9G;;;OAGG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,GACjD,OAAO,CAAC;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAa7D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAInF;;;;;;;;;OASG;IACG,EAAE,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI/C;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
|
package/dist/unified.js
CHANGED
|
@@ -19,11 +19,13 @@ export class KompassUnified {
|
|
|
19
19
|
bridge;
|
|
20
20
|
router;
|
|
21
21
|
adapters;
|
|
22
|
-
|
|
22
|
+
config;
|
|
23
|
+
constructor(adapters, bridge, config) {
|
|
23
24
|
this.adapters = adapters;
|
|
25
|
+
this.config = config;
|
|
24
26
|
this.aggregator = new Aggregator(adapters);
|
|
25
27
|
this.bridge = bridge;
|
|
26
|
-
this.router = new CapabilityRouter(this.aggregator, this.bridge);
|
|
28
|
+
this.router = new CapabilityRouter(this.aggregator, this.bridge, config?.reputationWriter);
|
|
27
29
|
}
|
|
28
30
|
static async create(config) {
|
|
29
31
|
const adapters = createAllSources({
|
|
@@ -34,7 +36,7 @@ export class KompassUnified {
|
|
|
34
36
|
const bridge = new ProtocolBridge({
|
|
35
37
|
acpBackend: config?.acpBackend,
|
|
36
38
|
});
|
|
37
|
-
return new KompassUnified(adapters, bridge);
|
|
39
|
+
return new KompassUnified(adapters, bridge, config);
|
|
38
40
|
}
|
|
39
41
|
/**
|
|
40
42
|
* Search for agents across all registries.
|
package/dist/unified.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified.js","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAyC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAiD,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAoB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAiD,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAiC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"unified.js","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kompass-sdk",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Get any job done. Universal agent capability discovery + coordination across ACP, MCP, x402, A2A, skills, L402, and ERC-8004.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/src/bridge.ts
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { UnifiedAgent, AgentProtocol } from "./sources/types.js";
|
|
7
|
+
import type { KompassConfig } from "./types.js";
|
|
8
|
+
import { createJob, setBudget, fund, submit, complete, getJob } from "./escrow.js";
|
|
7
9
|
|
|
8
10
|
export interface BridgeHireOptions {
|
|
9
11
|
task: string;
|
|
@@ -24,10 +26,12 @@ export interface BridgeHireResult {
|
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
export class ProtocolBridge {
|
|
27
|
-
private acpBackend?: any;
|
|
29
|
+
private acpBackend?: any;
|
|
30
|
+
private kompassConfig?: KompassConfig;
|
|
28
31
|
|
|
29
|
-
constructor(options?: { acpBackend?: any }) {
|
|
32
|
+
constructor(options?: { acpBackend?: any; kompassConfig?: KompassConfig }) {
|
|
30
33
|
this.acpBackend = options?.acpBackend;
|
|
34
|
+
this.kompassConfig = options?.kompassConfig;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
async hire(agent: UnifiedAgent, options: BridgeHireOptions): Promise<BridgeHireResult> {
|
|
@@ -47,6 +51,8 @@ export class ProtocolBridge {
|
|
|
47
51
|
return await this.hireViaHttp(agent, options, start);
|
|
48
52
|
case "l402":
|
|
49
53
|
return await this.hireViaL402(agent, options, start);
|
|
54
|
+
case "onchain":
|
|
55
|
+
return await this.hireViaEscrow(agent, options, start);
|
|
50
56
|
default:
|
|
51
57
|
return {
|
|
52
58
|
success: false,
|
|
@@ -245,6 +251,64 @@ export class ProtocolBridge {
|
|
|
245
251
|
};
|
|
246
252
|
}
|
|
247
253
|
|
|
254
|
+
private async hireViaEscrow(
|
|
255
|
+
agent: UnifiedAgent,
|
|
256
|
+
options: BridgeHireOptions,
|
|
257
|
+
start: number
|
|
258
|
+
): Promise<BridgeHireResult> {
|
|
259
|
+
if (!this.kompassConfig?.walletClient) {
|
|
260
|
+
return {
|
|
261
|
+
success: false, protocol: "onchain", agent,
|
|
262
|
+
error: "Escrow requires a funded wallet. Set kompassConfig with walletClient.",
|
|
263
|
+
durationMs: Date.now() - start,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
try {
|
|
268
|
+
const providerAddress = (agent.endpoints.acp?.walletAddress ?? agent.nativeId) as `0x${string}`;
|
|
269
|
+
const evaluatorAddress = this.kompassConfig.walletClient.account?.address as `0x${string}`;
|
|
270
|
+
const hookAddress = this.kompassConfig.defaultHookAddress;
|
|
271
|
+
|
|
272
|
+
// Create ERC-8183 escrow job
|
|
273
|
+
const expiredAt = BigInt(Math.floor(Date.now() / 1000) + 3600);
|
|
274
|
+
const budget = options.budget ?? 500_000n; // $0.50 default
|
|
275
|
+
|
|
276
|
+
const jobResult = await createJob(this.kompassConfig, {
|
|
277
|
+
provider: providerAddress,
|
|
278
|
+
evaluator: evaluatorAddress,
|
|
279
|
+
budget,
|
|
280
|
+
expiredAt,
|
|
281
|
+
description: options.task,
|
|
282
|
+
hook: hookAddress,
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
// Set budget and fund
|
|
286
|
+
await setBudget(this.kompassConfig, jobResult.jobId, budget);
|
|
287
|
+
await fund(this.kompassConfig, jobResult.jobId);
|
|
288
|
+
|
|
289
|
+
return {
|
|
290
|
+
success: true,
|
|
291
|
+
protocol: "onchain",
|
|
292
|
+
agent,
|
|
293
|
+
jobId: jobResult.jobId.toString(),
|
|
294
|
+
txHash: jobResult.txHash,
|
|
295
|
+
deliverable: {
|
|
296
|
+
type: "erc-8183-escrow",
|
|
297
|
+
jobId: jobResult.jobId.toString(),
|
|
298
|
+
status: "funded",
|
|
299
|
+
message: "ERC-8183 escrow job created and funded. Waiting for provider to submit deliverable.",
|
|
300
|
+
},
|
|
301
|
+
durationMs: Date.now() - start,
|
|
302
|
+
};
|
|
303
|
+
} catch (err) {
|
|
304
|
+
return {
|
|
305
|
+
success: false, protocol: "onchain", agent,
|
|
306
|
+
error: err instanceof Error ? err.message : String(err),
|
|
307
|
+
durationMs: Date.now() - start,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
248
312
|
private async hireViaL402(
|
|
249
313
|
agent: UnifiedAgent,
|
|
250
314
|
options: BridgeHireOptions,
|
package/src/cli.ts
CHANGED
|
@@ -206,12 +206,15 @@ program
|
|
|
206
206
|
.option("-p, --protocol <protocol>", "prefer specific protocol (acp, x402, mcp, skill)")
|
|
207
207
|
.option("--dry-run", "show options without executing")
|
|
208
208
|
.option("--json", "output as JSON")
|
|
209
|
+
.option("--log <path>", "write structured agent_log.json to path")
|
|
210
|
+
.option("--manifest <path>", "write agent.json manifest to path")
|
|
209
211
|
.action(
|
|
210
212
|
async (
|
|
211
213
|
task: string,
|
|
212
|
-
opts: { budget: string; cost: string; protocol?: string; dryRun?: boolean; json?: boolean }
|
|
214
|
+
opts: { budget: string; cost: string; protocol?: string; dryRun?: boolean; json?: boolean; log?: string; manifest?: string }
|
|
213
215
|
) => {
|
|
214
216
|
const { KompassUnified } = await import("./unified.js");
|
|
217
|
+
const { writeFileSync } = await import("fs");
|
|
215
218
|
const kompass = await KompassUnified.create();
|
|
216
219
|
|
|
217
220
|
if (!opts.json) {
|
|
@@ -259,6 +262,67 @@ program
|
|
|
259
262
|
}
|
|
260
263
|
}
|
|
261
264
|
|
|
265
|
+
// Write agent_log.json if requested
|
|
266
|
+
if (opts.log) {
|
|
267
|
+
const log = {
|
|
268
|
+
agentName: "Kompass",
|
|
269
|
+
startTime: new Date(Date.now() - (result.discovery.queryTimeMs + (result.execution?.durationMs ?? 0))).toISOString(),
|
|
270
|
+
endTime: new Date().toISOString(),
|
|
271
|
+
intent: task,
|
|
272
|
+
entries: [
|
|
273
|
+
{ timestamp: new Date().toISOString(), phase: "discovery", action: "search-all-sources", decision: `Searched ${result.discovery.sourcesQueried} sources, found ${result.discovery.totalFound} options in ${result.discovery.queryTimeMs}ms` },
|
|
274
|
+
...result.options.slice(0, 5).map((o) => ({
|
|
275
|
+
timestamp: new Date().toISOString(),
|
|
276
|
+
phase: "ranking",
|
|
277
|
+
action: `evaluate:${o.agent.name}`,
|
|
278
|
+
decision: `${o.protocol} | $${o.estimatedCost ?? "unknown"} | ${o.why}`,
|
|
279
|
+
})),
|
|
280
|
+
...(result.selected ? [{
|
|
281
|
+
timestamp: new Date().toISOString(),
|
|
282
|
+
phase: "selection",
|
|
283
|
+
action: `selected:${result.selected.agent.name}`,
|
|
284
|
+
decision: result.reasoning,
|
|
285
|
+
}] : []),
|
|
286
|
+
...(result.execution ? [{
|
|
287
|
+
timestamp: new Date().toISOString(),
|
|
288
|
+
phase: "execution",
|
|
289
|
+
action: result.execution.success ? "success" : "failed",
|
|
290
|
+
decision: result.execution.error ?? "Execution completed",
|
|
291
|
+
txHash: result.execution.txHash,
|
|
292
|
+
durationMs: result.execution.durationMs,
|
|
293
|
+
}] : []),
|
|
294
|
+
],
|
|
295
|
+
summary: {
|
|
296
|
+
sourcesQueried: result.discovery.sourcesQueried,
|
|
297
|
+
optionsFound: result.options.length,
|
|
298
|
+
selected: result.selected?.agent.name ?? null,
|
|
299
|
+
protocol: result.selected?.protocol ?? null,
|
|
300
|
+
success: result.success,
|
|
301
|
+
costUSDC: result.selected?.estimatedCost ?? 0,
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
writeFileSync(opts.log, JSON.stringify(log, null, 2));
|
|
305
|
+
console.log(`agent_log.json written to ${opts.log}`);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Write agent.json manifest if requested
|
|
309
|
+
if (opts.manifest) {
|
|
310
|
+
const manifest = {
|
|
311
|
+
name: "Kompass",
|
|
312
|
+
version: "0.2.0",
|
|
313
|
+
description: "Universal capability discovery + coordination across ACP, MCP, x402, A2A, skills, ERC-8004, L402",
|
|
314
|
+
operatorWallet: process.env.KOMPASS_PRIVATE_KEY ? "configured" : "not-set",
|
|
315
|
+
supportedTools: ["kompass-find", "kompass-do", "kompass-serve", "kompass-coordinate"],
|
|
316
|
+
techStacks: ["typescript", "a2a", "mcp", "x402", "acp", "erc-8183", "erc-8004", "ens"],
|
|
317
|
+
computeConstraints: { maxBudgetUSDC: parseFloat(opts.budget), timeoutSeconds: 300 },
|
|
318
|
+
taskCategories: ["discovery", "coordination", "defi", "data", "development"],
|
|
319
|
+
sourceCount: result.discovery.sourcesQueried,
|
|
320
|
+
registeredAt: new Date().toISOString(),
|
|
321
|
+
};
|
|
322
|
+
writeFileSync(opts.manifest, JSON.stringify(manifest, null, 2));
|
|
323
|
+
console.log(`agent.json written to ${opts.manifest}`);
|
|
324
|
+
}
|
|
325
|
+
|
|
262
326
|
console.log();
|
|
263
327
|
}
|
|
264
328
|
);
|
|
@@ -362,8 +426,10 @@ program
|
|
|
362
426
|
const rep = agent.reputation ? ` | rep: ${agent.reputation.score}/${agent.reputation.count}` : "";
|
|
363
427
|
const price = agent.pricing?.amount ? ` | $${agent.pricing.amount} ${agent.pricing.currency ?? ""}` : "";
|
|
364
428
|
const protocol = agent.protocol.toUpperCase();
|
|
429
|
+
const identity = agent.ensName ?? agent.name;
|
|
430
|
+
const ensTag = agent.ensName ? ` 🏷️ ${agent.ensName}` : "";
|
|
365
431
|
|
|
366
|
-
console.log(` [${protocol}] ${
|
|
432
|
+
console.log(` [${protocol}] ${identity} (${agent.source})${ensTag}`);
|
|
367
433
|
console.log(` ${agent.description.slice(0, 120)}`);
|
|
368
434
|
console.log(` Categories: ${agent.categories.join(", ")} | Score: ${score}${rep}${price}`);
|
|
369
435
|
if (agent.endpoints.x402) console.log(` x402: ${agent.endpoints.x402}`);
|
package/src/ens.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kompass ENS Resolution
|
|
3
|
+
* Resolves wallet addresses to ENS/Basename names
|
|
4
|
+
* Makes agents identifiable by name, not just address
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createPublicClient, http, type Address } from "viem";
|
|
8
|
+
import { baseSepolia, base } from "viem/chains";
|
|
9
|
+
import { normalize } from "viem/ens";
|
|
10
|
+
import type { UnifiedAgent } from "./sources/types.js";
|
|
11
|
+
|
|
12
|
+
// ENS L2 Resolver on Base Sepolia
|
|
13
|
+
const BASE_SEPOLIA_RESOLVER = "0x6533C94869D28fAA8dF77cc63f9e2b2D6Cf77eBA" as Address;
|
|
14
|
+
|
|
15
|
+
// Cache to avoid repeated lookups
|
|
16
|
+
const ensCache = new Map<string, string | null>();
|
|
17
|
+
|
|
18
|
+
const baseClient = createPublicClient({
|
|
19
|
+
chain: base,
|
|
20
|
+
transport: http("https://mainnet.base.org"),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const baseSepoliaClient = createPublicClient({
|
|
24
|
+
chain: baseSepolia,
|
|
25
|
+
transport: http("https://sepolia.base.org"),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Reverse-resolve an address to its ENS/Basename.
|
|
30
|
+
* Returns null if no name found.
|
|
31
|
+
*/
|
|
32
|
+
export async function resolveENSName(
|
|
33
|
+
address: Address,
|
|
34
|
+
network: "base" | "base-sepolia" = "base"
|
|
35
|
+
): Promise<string | null> {
|
|
36
|
+
const cacheKey = `${network}:${address.toLowerCase()}`;
|
|
37
|
+
if (ensCache.has(cacheKey)) return ensCache.get(cacheKey)!;
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
const client = network === "base" ? baseClient : baseSepoliaClient;
|
|
41
|
+
const name = await client.getEnsName({ address });
|
|
42
|
+
ensCache.set(cacheKey, name);
|
|
43
|
+
return name;
|
|
44
|
+
} catch {
|
|
45
|
+
ensCache.set(cacheKey, null);
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Resolve an ENS name to an address.
|
|
52
|
+
*/
|
|
53
|
+
export async function resolveENSAddress(
|
|
54
|
+
name: string,
|
|
55
|
+
network: "base" | "base-sepolia" = "base"
|
|
56
|
+
): Promise<Address | null> {
|
|
57
|
+
try {
|
|
58
|
+
const client = network === "base" ? baseClient : baseSepoliaClient;
|
|
59
|
+
const address = await client.getEnsAddress({ name: normalize(name) });
|
|
60
|
+
return address;
|
|
61
|
+
} catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Enrich UnifiedAgent array with ENS names where possible.
|
|
68
|
+
* Batch resolves addresses to avoid sequential lookups.
|
|
69
|
+
*/
|
|
70
|
+
export async function enrichWithENS(
|
|
71
|
+
agents: UnifiedAgent[],
|
|
72
|
+
network: "base" | "base-sepolia" = "base"
|
|
73
|
+
): Promise<UnifiedAgent[]> {
|
|
74
|
+
const agentsNeedingResolution = agents.filter(
|
|
75
|
+
(a) => !a.ensName && a.endpoints.acp?.walletAddress
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
// Resolve in parallel (limit concurrency)
|
|
79
|
+
const BATCH_SIZE = 5;
|
|
80
|
+
for (let i = 0; i < agentsNeedingResolution.length; i += BATCH_SIZE) {
|
|
81
|
+
const batch = agentsNeedingResolution.slice(i, i + BATCH_SIZE);
|
|
82
|
+
await Promise.allSettled(
|
|
83
|
+
batch.map(async (agent) => {
|
|
84
|
+
const address = agent.endpoints.acp?.walletAddress as Address;
|
|
85
|
+
if (address) {
|
|
86
|
+
const name = await resolveENSName(address, network);
|
|
87
|
+
if (name) agent.ensName = name;
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return agents;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Format an agent's identity — prefer ENS name over address.
|
|
98
|
+
*/
|
|
99
|
+
export function formatAgentIdentity(agent: UnifiedAgent): string {
|
|
100
|
+
if (agent.ensName) return agent.ensName;
|
|
101
|
+
const addr = agent.endpoints.acp?.walletAddress ?? agent.nativeId;
|
|
102
|
+
if (addr && addr.startsWith("0x")) return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
|
|
103
|
+
return agent.name;
|
|
104
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kompass Reputation Writer
|
|
3
|
+
* Writes ERC-8004 feedback on-chain after every capability execution.
|
|
4
|
+
* Makes agents accountable — good work builds reputation, bad work damages it.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { type Address, type Hex, zeroHash, createPublicClient, createWalletClient, http } from "viem";
|
|
8
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
9
|
+
import { baseSepolia } from "viem/chains";
|
|
10
|
+
|
|
11
|
+
// ERC-8004 Reputation Registry ABI (giveFeedback function)
|
|
12
|
+
const REPUTATION_ABI = [
|
|
13
|
+
{
|
|
14
|
+
type: "function",
|
|
15
|
+
name: "giveFeedback",
|
|
16
|
+
inputs: [
|
|
17
|
+
{ name: "agentId", type: "uint256" },
|
|
18
|
+
{ name: "value", type: "int128" },
|
|
19
|
+
{ name: "valueDecimals", type: "uint8" },
|
|
20
|
+
{ name: "tag1", type: "string" },
|
|
21
|
+
{ name: "tag2", type: "string" },
|
|
22
|
+
{ name: "endpoint", type: "string" },
|
|
23
|
+
{ name: "feedbackURI", type: "string" },
|
|
24
|
+
{ name: "feedbackHash", type: "bytes32" },
|
|
25
|
+
],
|
|
26
|
+
outputs: [],
|
|
27
|
+
stateMutability: "nonpayable",
|
|
28
|
+
},
|
|
29
|
+
] as const;
|
|
30
|
+
|
|
31
|
+
export interface ReputationWriterConfig {
|
|
32
|
+
/** ERC-8004 Reputation Registry address */
|
|
33
|
+
reputationRegistryAddress: Address;
|
|
34
|
+
/** Private key for signing feedback transactions */
|
|
35
|
+
privateKey: string;
|
|
36
|
+
/** RPC URL */
|
|
37
|
+
rpcUrl?: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export class ReputationWriter {
|
|
41
|
+
private config: ReputationWriterConfig;
|
|
42
|
+
private walletClient: any;
|
|
43
|
+
private publicClient: any;
|
|
44
|
+
|
|
45
|
+
constructor(config: ReputationWriterConfig) {
|
|
46
|
+
this.config = config;
|
|
47
|
+
|
|
48
|
+
const account = privateKeyToAccount(config.privateKey as Hex);
|
|
49
|
+
this.publicClient = createPublicClient({
|
|
50
|
+
chain: baseSepolia,
|
|
51
|
+
transport: http(config.rpcUrl ?? "https://sepolia.base.org"),
|
|
52
|
+
});
|
|
53
|
+
this.walletClient = createWalletClient({
|
|
54
|
+
account,
|
|
55
|
+
chain: baseSepolia,
|
|
56
|
+
transport: http(config.rpcUrl ?? "https://sepolia.base.org"),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Write positive feedback for an agent after successful execution.
|
|
62
|
+
*/
|
|
63
|
+
async writePositiveFeedback(
|
|
64
|
+
agentId: bigint,
|
|
65
|
+
taskCategory: string,
|
|
66
|
+
endpoint: string
|
|
67
|
+
): Promise<{ txHash: Hex } | null> {
|
|
68
|
+
return this.writeFeedback(agentId, 1n, "kompass-success", taskCategory, endpoint);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Write negative feedback for an agent after failed execution.
|
|
73
|
+
*/
|
|
74
|
+
async writeNegativeFeedback(
|
|
75
|
+
agentId: bigint,
|
|
76
|
+
taskCategory: string,
|
|
77
|
+
endpoint: string
|
|
78
|
+
): Promise<{ txHash: Hex } | null> {
|
|
79
|
+
return this.writeFeedback(agentId, -1n, "kompass-failure", taskCategory, endpoint);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private async writeFeedback(
|
|
83
|
+
agentId: bigint,
|
|
84
|
+
value: bigint,
|
|
85
|
+
tag1: string,
|
|
86
|
+
tag2: string,
|
|
87
|
+
endpoint: string
|
|
88
|
+
): Promise<{ txHash: Hex } | null> {
|
|
89
|
+
try {
|
|
90
|
+
const txHash = await this.walletClient.writeContract({
|
|
91
|
+
address: this.config.reputationRegistryAddress,
|
|
92
|
+
abi: REPUTATION_ABI,
|
|
93
|
+
functionName: "giveFeedback",
|
|
94
|
+
args: [
|
|
95
|
+
agentId,
|
|
96
|
+
value,
|
|
97
|
+
0, // valueDecimals
|
|
98
|
+
tag1,
|
|
99
|
+
tag2,
|
|
100
|
+
endpoint,
|
|
101
|
+
"", // feedbackURI
|
|
102
|
+
zeroHash as Hex, // feedbackHash
|
|
103
|
+
],
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
await this.publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
107
|
+
console.log(`[Kompass] ERC-8004 feedback written: ${value > 0 ? "+" : ""}${value} for agent #${agentId} | tx: ${txHash}`);
|
|
108
|
+
|
|
109
|
+
return { txHash };
|
|
110
|
+
} catch (err) {
|
|
111
|
+
console.error(`[Kompass] Failed to write ERC-8004 feedback:`, err instanceof Error ? err.message : err);
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
package/src/router.ts
CHANGED
|
@@ -15,6 +15,7 @@ import type { UnifiedAgent } from "./sources/types.js";
|
|
|
15
15
|
import { Aggregator } from "./aggregator.js";
|
|
16
16
|
import { rankAgents, parseIntent, type MatchResult } from "./matching.js";
|
|
17
17
|
import { ProtocolBridge, type BridgeHireResult } from "./bridge.js";
|
|
18
|
+
import { ReputationWriter, type ReputationWriterConfig } from "./reputation-writer.js";
|
|
18
19
|
|
|
19
20
|
export type CostPreference = "cheapest" | "balanced" | "best-quality";
|
|
20
21
|
|
|
@@ -69,10 +70,14 @@ export interface DoResult {
|
|
|
69
70
|
export class CapabilityRouter {
|
|
70
71
|
private aggregator: Aggregator;
|
|
71
72
|
private bridge: ProtocolBridge;
|
|
73
|
+
private reputationWriter?: ReputationWriter;
|
|
72
74
|
|
|
73
|
-
constructor(aggregator: Aggregator, bridge: ProtocolBridge) {
|
|
75
|
+
constructor(aggregator: Aggregator, bridge: ProtocolBridge, reputationConfig?: ReputationWriterConfig) {
|
|
74
76
|
this.aggregator = aggregator;
|
|
75
77
|
this.bridge = bridge;
|
|
78
|
+
if (reputationConfig) {
|
|
79
|
+
this.reputationWriter = new ReputationWriter(reputationConfig);
|
|
80
|
+
}
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
async do(options: DoOptions): Promise<DoResult> {
|
|
@@ -146,6 +151,20 @@ export class CapabilityRouter {
|
|
|
146
151
|
timeout: options.timeout,
|
|
147
152
|
payload: options.payload,
|
|
148
153
|
});
|
|
154
|
+
|
|
155
|
+
// 8. Write ERC-8004 reputation feedback on-chain
|
|
156
|
+
if (this.reputationWriter && selected.agent.reputation?.source === "erc8004") {
|
|
157
|
+
const agentId = BigInt(selected.agent.nativeId || "0");
|
|
158
|
+
if (agentId > 0n) {
|
|
159
|
+
const category = selected.agent.categories[0] ?? "general";
|
|
160
|
+
const endpoint = selected.agent.endpoints.x402 ?? selected.agent.endpoints.http ?? "";
|
|
161
|
+
if (execution?.success) {
|
|
162
|
+
await this.reputationWriter.writePositiveFeedback(agentId, category, endpoint);
|
|
163
|
+
} else {
|
|
164
|
+
await this.reputationWriter.writeNegativeFeedback(agentId, category, endpoint);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
149
168
|
}
|
|
150
169
|
|
|
151
170
|
const reasoning = this.explainChoice(selected, reranked, options);
|