kompass-sdk 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ens.d.ts +3 -3
- package/dist/ens.d.ts.map +1 -1
- package/dist/ens.js +14 -19
- package/dist/ens.js.map +1 -1
- package/dist/matching.d.ts +1 -1
- package/dist/matching.d.ts.map +1 -1
- package/dist/matching.js +67 -14
- package/dist/matching.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +5 -3
- package/dist/router.js.map +1 -1
- package/dist/sources/bankr.d.ts +5 -2
- package/dist/sources/bankr.d.ts.map +1 -1
- package/dist/sources/bankr.js +40 -44
- package/dist/sources/bankr.js.map +1 -1
- package/dist/wallet/handlers/olas.d.ts +12 -0
- package/dist/wallet/handlers/olas.d.ts.map +1 -0
- package/dist/wallet/handlers/olas.js +31 -0
- package/dist/wallet/handlers/olas.js.map +1 -0
- package/dist/wallet/payment-router.d.ts.map +1 -1
- package/dist/wallet/payment-router.js +6 -0
- package/dist/wallet/payment-router.js.map +1 -1
- package/package.json +1 -1
- package/src/ens.ts +11 -21
- package/src/matching.ts +64 -14
- package/src/router.ts +8 -3
- package/src/sources/bankr.ts +40 -45
- package/src/wallet/handlers/olas.ts +43 -0
- package/src/wallet/payment-router.ts +7 -0
package/dist/ens.d.ts
CHANGED
|
@@ -9,16 +9,16 @@ import type { UnifiedAgent } from "./sources/types.js";
|
|
|
9
9
|
* Reverse-resolve an address to its ENS/Basename.
|
|
10
10
|
* Returns null if no name found.
|
|
11
11
|
*/
|
|
12
|
-
export declare function resolveENSName(address: Address
|
|
12
|
+
export declare function resolveENSName(address: Address): Promise<string | null>;
|
|
13
13
|
/**
|
|
14
14
|
* Resolve an ENS name to an address.
|
|
15
15
|
*/
|
|
16
|
-
export declare function resolveENSAddress(name: string
|
|
16
|
+
export declare function resolveENSAddress(name: string): Promise<Address | null>;
|
|
17
17
|
/**
|
|
18
18
|
* Enrich UnifiedAgent array with ENS names where possible.
|
|
19
19
|
* Batch resolves addresses to avoid sequential lookups.
|
|
20
20
|
*/
|
|
21
|
-
export declare function enrichWithENS(agents: UnifiedAgent[]
|
|
21
|
+
export declare function enrichWithENS(agents: UnifiedAgent[]): Promise<UnifiedAgent[]>;
|
|
22
22
|
/**
|
|
23
23
|
* Format an agent's identity — prefer ENS name over address.
|
|
24
24
|
*/
|
package/dist/ens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAavD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAOzB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EAAE,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC,CAqBzB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAK/D"}
|
package/dist/ens.js
CHANGED
|
@@ -4,31 +4,27 @@
|
|
|
4
4
|
* Makes agents identifiable by name, not just address
|
|
5
5
|
*/
|
|
6
6
|
import { createPublicClient, http } from "viem";
|
|
7
|
-
import {
|
|
7
|
+
import { mainnet } from "viem/chains";
|
|
8
8
|
import { normalize } from "viem/ens";
|
|
9
|
-
// ENS L2 Resolver on Base Sepolia
|
|
10
|
-
const BASE_SEPOLIA_RESOLVER = "0x6533C94869D28fAA8dF77cc63f9e2b2D6Cf77eBA";
|
|
11
9
|
// Cache to avoid repeated lookups
|
|
12
10
|
const ensCache = new Map();
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
transport: http("https://sepolia.base.org"),
|
|
11
|
+
// ENS resolution must happen on Ethereum mainnet (where the ENS registry lives).
|
|
12
|
+
// CCIP-Read (ERC-3668) allows the mainnet universal resolver to transparently
|
|
13
|
+
// resolve L2 names (Basenames, etc.) via off-chain lookups.
|
|
14
|
+
const ensClient = createPublicClient({
|
|
15
|
+
chain: mainnet,
|
|
16
|
+
transport: http(),
|
|
20
17
|
});
|
|
21
18
|
/**
|
|
22
19
|
* Reverse-resolve an address to its ENS/Basename.
|
|
23
20
|
* Returns null if no name found.
|
|
24
21
|
*/
|
|
25
|
-
export async function resolveENSName(address
|
|
26
|
-
const cacheKey =
|
|
22
|
+
export async function resolveENSName(address) {
|
|
23
|
+
const cacheKey = address.toLowerCase();
|
|
27
24
|
if (ensCache.has(cacheKey))
|
|
28
25
|
return ensCache.get(cacheKey);
|
|
29
26
|
try {
|
|
30
|
-
const
|
|
31
|
-
const name = await client.getEnsName({ address });
|
|
27
|
+
const name = await ensClient.getEnsName({ address });
|
|
32
28
|
ensCache.set(cacheKey, name);
|
|
33
29
|
return name;
|
|
34
30
|
}
|
|
@@ -40,10 +36,9 @@ export async function resolveENSName(address, network = "base") {
|
|
|
40
36
|
/**
|
|
41
37
|
* Resolve an ENS name to an address.
|
|
42
38
|
*/
|
|
43
|
-
export async function resolveENSAddress(name
|
|
39
|
+
export async function resolveENSAddress(name) {
|
|
44
40
|
try {
|
|
45
|
-
const
|
|
46
|
-
const address = await client.getEnsAddress({ name: normalize(name) });
|
|
41
|
+
const address = await ensClient.getEnsAddress({ name: normalize(name) });
|
|
47
42
|
return address;
|
|
48
43
|
}
|
|
49
44
|
catch {
|
|
@@ -54,7 +49,7 @@ export async function resolveENSAddress(name, network = "base") {
|
|
|
54
49
|
* Enrich UnifiedAgent array with ENS names where possible.
|
|
55
50
|
* Batch resolves addresses to avoid sequential lookups.
|
|
56
51
|
*/
|
|
57
|
-
export async function enrichWithENS(agents
|
|
52
|
+
export async function enrichWithENS(agents) {
|
|
58
53
|
const agentsNeedingResolution = agents.filter((a) => !a.ensName && a.endpoints.acp?.walletAddress);
|
|
59
54
|
// Resolve in parallel (limit concurrency)
|
|
60
55
|
const BATCH_SIZE = 5;
|
|
@@ -63,7 +58,7 @@ export async function enrichWithENS(agents, network = "base") {
|
|
|
63
58
|
await Promise.allSettled(batch.map(async (agent) => {
|
|
64
59
|
const address = agent.endpoints.acp?.walletAddress;
|
|
65
60
|
if (address) {
|
|
66
|
-
const name = await resolveENSName(address
|
|
61
|
+
const name = await resolveENSName(address);
|
|
67
62
|
if (name)
|
|
68
63
|
agent.ensName = name;
|
|
69
64
|
}
|
package/dist/ens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ens.js","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ens.js","sourceRoot":"","sources":["../src/ens.ts"],"names":[],"mappings":"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"}
|
package/dist/matching.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Layer A: Structured capability matching (ontology-style)
|
|
5
5
|
* Layer B: BM25 text relevance scoring
|
|
6
6
|
* Layer C: LLM re-ranking (optional, for top candidates)
|
|
7
|
-
* Layer D: Multi-criteria scoring (reputation, price, protocol, recency)
|
|
7
|
+
* Layer D: Multi-criteria scoring (reputation, price, protocol, recency, liveness)
|
|
8
8
|
*/
|
|
9
9
|
import type { UnifiedAgent } from "./sources/types.js";
|
|
10
10
|
interface ParsedIntent {
|
package/dist/matching.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAgCD,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CA0BhD;AAgJD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAiB/E;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
package/dist/matching.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Layer A: Structured capability matching (ontology-style)
|
|
5
5
|
* Layer B: BM25 text relevance scoring
|
|
6
6
|
* Layer C: LLM re-ranking (optional, for top candidates)
|
|
7
|
-
* Layer D: Multi-criteria scoring (reputation, price, protocol, recency)
|
|
7
|
+
* Layer D: Multi-criteria scoring (reputation, price, protocol, recency, liveness)
|
|
8
8
|
*/
|
|
9
9
|
const DOMAIN_KEYWORDS = {
|
|
10
10
|
defi: ["defi", "yield", "swap", "liquidity", "pool", "lending", "borrow", "stake", "vault", "farm"],
|
|
@@ -15,6 +15,8 @@ const DOMAIN_KEYWORDS = {
|
|
|
15
15
|
development: ["code", "develop", "build", "deploy", "smart contract", "solidity"],
|
|
16
16
|
ai: ["ai", "llm", "model", "inference", "embedding", "prompt"],
|
|
17
17
|
social: ["social", "twitter", "post", "tweet", "farcaster"],
|
|
18
|
+
scraping: ["scrape", "crawl", "extract", "web scraping", "firecrawl"],
|
|
19
|
+
crypto: ["crypto", "bitcoin", "ethereum", "eth", "btc", "sol", "token", "coin", "wallet", "chain", "gas"],
|
|
18
20
|
};
|
|
19
21
|
const PROTOCOL_KEYWORDS = {
|
|
20
22
|
x402: ["x402", "micropayment", "http 402", "pay per call"],
|
|
@@ -74,7 +76,7 @@ function structuredScore(agent, intent) {
|
|
|
74
76
|
if (price <= intent.priceMax)
|
|
75
77
|
score += 10;
|
|
76
78
|
else
|
|
77
|
-
score -= 10;
|
|
79
|
+
score -= 10;
|
|
78
80
|
}
|
|
79
81
|
return score;
|
|
80
82
|
}
|
|
@@ -83,46 +85,94 @@ function bm25Score(agent, queryTerms) {
|
|
|
83
85
|
const doc = `${agent.name} ${agent.description} ${agent.categories.join(" ")} ${agent.capabilities.join(" ")}`.toLowerCase();
|
|
84
86
|
const docTerms = doc.split(/\s+/);
|
|
85
87
|
const docLen = docTerms.length;
|
|
86
|
-
const avgDocLen = 50;
|
|
88
|
+
const avgDocLen = 50;
|
|
87
89
|
const k1 = 1.5;
|
|
88
90
|
const b = 0.75;
|
|
89
91
|
let score = 0;
|
|
92
|
+
let matchedTerms = 0;
|
|
90
93
|
for (const term of queryTerms) {
|
|
91
94
|
const tf = docTerms.filter((t) => t.includes(term)).length;
|
|
92
95
|
if (tf === 0)
|
|
93
96
|
continue;
|
|
97
|
+
matchedTerms++;
|
|
94
98
|
// Simplified BM25
|
|
95
99
|
const numerator = tf * (k1 + 1);
|
|
96
100
|
const denominator = tf + k1 * (1 - b + b * (docLen / avgDocLen));
|
|
97
101
|
score += numerator / denominator;
|
|
98
102
|
}
|
|
99
|
-
|
|
103
|
+
// Bonus for matching ALL query terms (full relevance)
|
|
104
|
+
if (queryTerms.length > 0 && matchedTerms === queryTerms.length) {
|
|
105
|
+
score *= 1.5;
|
|
106
|
+
}
|
|
107
|
+
// Penalty for very long descriptions that match generically
|
|
108
|
+
// Short, focused descriptions that match = better than long generic ones
|
|
109
|
+
if (docLen > 100) {
|
|
110
|
+
score *= 0.8; // 20% penalty for bloated descriptions
|
|
111
|
+
}
|
|
112
|
+
return score * 10;
|
|
100
113
|
}
|
|
101
114
|
// ── Layer D: Multi-Criteria Scoring ──────────────────────
|
|
102
115
|
function multiCriteriaScore(agent) {
|
|
103
116
|
let score = 0;
|
|
104
|
-
// Reputation
|
|
117
|
+
// Reputation — agents with real track record get boosted
|
|
105
118
|
if (agent.reputation) {
|
|
106
119
|
score += Math.min(agent.reputation.score * 0.2, 20);
|
|
107
120
|
score += Math.min(agent.reputation.count * 0.5, 10);
|
|
108
121
|
}
|
|
122
|
+
else {
|
|
123
|
+
// No reputation = untested = slight penalty
|
|
124
|
+
score -= 3;
|
|
125
|
+
}
|
|
109
126
|
// Verified identity
|
|
110
127
|
if (agent.verified)
|
|
111
128
|
score += 5;
|
|
112
129
|
// Pricing transparency
|
|
113
130
|
if (agent.pricing && agent.pricing.model !== "unknown")
|
|
114
131
|
score += 3;
|
|
115
|
-
//
|
|
116
|
-
const
|
|
132
|
+
// Liveness: agents with callable endpoints that we KNOW work
|
|
133
|
+
const hasHttp = !!agent.endpoints.http;
|
|
134
|
+
const hasMcp = !!agent.endpoints.mcp;
|
|
135
|
+
const hasX402 = !!agent.endpoints.x402;
|
|
136
|
+
const hasAcp = !!agent.endpoints.acp;
|
|
137
|
+
const endpointCount = [hasHttp, hasMcp, hasX402, hasAcp, !!agent.endpoints.a2a, !!agent.endpoints.l402].filter(Boolean).length;
|
|
117
138
|
score += endpointCount * 2;
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
|
|
139
|
+
// Source-specific liveness signals
|
|
140
|
+
// Agents from sources we KNOW are live gateways (not just registrations)
|
|
141
|
+
switch (agent.source) {
|
|
142
|
+
case "bankr":
|
|
143
|
+
score += 15; // Bankr is a live gateway, always responds
|
|
144
|
+
break;
|
|
145
|
+
case "locus":
|
|
146
|
+
score += 12; // Locus wrapped APIs are live
|
|
147
|
+
break;
|
|
148
|
+
case "x402-ecosystem":
|
|
149
|
+
score += 10; // 402index verifies health
|
|
150
|
+
break;
|
|
151
|
+
case "acp":
|
|
152
|
+
score += 8; // ACP agents are registered and active
|
|
153
|
+
break;
|
|
154
|
+
case "olas":
|
|
155
|
+
score += 8; // Olas mechs have on-chain delivery records
|
|
156
|
+
break;
|
|
157
|
+
case "mcp-registry":
|
|
158
|
+
// Only boost if it has a remote endpoint — many MCP servers are local-only
|
|
159
|
+
if (hasMcp)
|
|
160
|
+
score += 5;
|
|
161
|
+
else
|
|
162
|
+
score -= 5; // Penalize MCP without remote endpoint
|
|
163
|
+
break;
|
|
164
|
+
case "erc8004":
|
|
165
|
+
// ERC-8004 is a registry — agents may or may not be live
|
|
166
|
+
// Only boost if they have a callable endpoint
|
|
167
|
+
if (hasHttp || hasMcp || hasX402)
|
|
168
|
+
score += 3;
|
|
169
|
+
else
|
|
170
|
+
score -= 5; // Paper registration, no live endpoint
|
|
171
|
+
break;
|
|
172
|
+
case "skills-registry":
|
|
173
|
+
score -= 10; // Skills aren't hirable — heavy penalty if they slip through
|
|
174
|
+
break;
|
|
122
175
|
}
|
|
123
|
-
// Free tools get a small accessibility bonus (no wallet needed)
|
|
124
|
-
if (agent.pricing?.model === "free")
|
|
125
|
-
score += 3;
|
|
126
176
|
// Recency
|
|
127
177
|
if (agent.lastSeen) {
|
|
128
178
|
const hoursSince = (Date.now() - agent.lastSeen) / (1000 * 60 * 60);
|
|
@@ -133,6 +183,9 @@ function multiCriteriaScore(agent) {
|
|
|
133
183
|
else if (hoursSince < 168)
|
|
134
184
|
score += 1;
|
|
135
185
|
}
|
|
186
|
+
// Free tools get a small accessibility bonus
|
|
187
|
+
if (agent.pricing?.model === "free")
|
|
188
|
+
score += 2;
|
|
136
189
|
return score;
|
|
137
190
|
}
|
|
138
191
|
export function rankAgents(agents, query) {
|
package/dist/matching.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,MAAM,eAAe,GAA6B;IAChD,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACnG,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;IAClF,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC;IAC/E,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC;IACrE,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;IAC7E,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC;IACjF,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;IAC9D,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../src/matching.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,MAAM,eAAe,GAA6B;IAChD,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACnG,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;IAClF,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC;IAC/E,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC;IACrE,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC;IAC7E,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC;IACjF,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;IAC9D,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;IAC3D,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC;IACrE,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC;CAC1G,CAAC;AAEF,MAAM,iBAAiB,GAA6B;IAClD,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,CAAC;IAC1D,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC;IACjD,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC;IAC/C,GAAG,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC;CAC/C,CAAC;AAEF,MAAM,cAAc,GAA6B;IAC/C,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IAC1B,QAAQ,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC;IACxC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;IAC9B,QAAQ,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC;IAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAElC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,KAAK,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5D,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,GAAG,CAAC,CAAC;YACX,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;SAC5C,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;SAChD,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;SAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe,CAAC,KAAmB,EAAE,MAAoB;IAChE,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,eAAe;IACf,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,KAAK,IAAI,EAAE,CAAC;IAE3E,yBAAyB;IACzB,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IACnG,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,KAAK,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ;YAAE,KAAK,IAAI,EAAE,CAAC;;YACrC,KAAK,IAAI,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4DAA4D;AAE5D,SAAS,SAAS,CAAC,KAAmB,EAAE,UAAoB;IAC1D,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7H,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/B,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,EAAE,GAAG,GAAG,CAAC;IACf,MAAM,CAAC,GAAG,IAAI,CAAC;IAEf,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,IAAI,EAAE,KAAK,CAAC;YAAE,SAAS;QACvB,YAAY,EAAE,CAAC;QAEf,kBAAkB;QAClB,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;QACjE,KAAK,IAAI,SAAS,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,sDAAsD;IACtD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;QAChE,KAAK,IAAI,GAAG,CAAC;IACf,CAAC;IAED,4DAA4D;IAC5D,yEAAyE;IACzE,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,GAAG,CAAC,CAAC,uCAAuC;IACvD,CAAC;IAED,OAAO,KAAK,GAAG,EAAE,CAAC;AACpB,CAAC;AAED,4DAA4D;AAE5D,SAAS,kBAAkB,CAAC,KAAmB;IAC7C,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,yDAAyD;IACzD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QACpD,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,oBAAoB;IACpB,IAAI,KAAK,CAAC,QAAQ;QAAE,KAAK,IAAI,CAAC,CAAC;IAE/B,uBAAuB;IACvB,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,IAAI,CAAC,CAAC;IAEnE,6DAA6D;IAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IACvC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;IACrC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC/H,KAAK,IAAI,aAAa,GAAG,CAAC,CAAC;IAE3B,mCAAmC;IACnC,yEAAyE;IACzE,QAAQ,KAAK,CAAC,MAAgB,EAAE,CAAC;QAC/B,KAAK,OAAO;YACV,KAAK,IAAI,EAAE,CAAC,CAAC,2CAA2C;YACxD,MAAM;QACR,KAAK,OAAO;YACV,KAAK,IAAI,EAAE,CAAC,CAAC,8BAA8B;YAC3C,MAAM;QACR,KAAK,gBAAgB;YACnB,KAAK,IAAI,EAAE,CAAC,CAAC,2BAA2B;YACxC,MAAM;QACR,KAAK,KAAK;YACR,KAAK,IAAI,CAAC,CAAC,CAAC,uCAAuC;YACnD,MAAM;QACR,KAAK,MAAM;YACT,KAAK,IAAI,CAAC,CAAC,CAAC,4CAA4C;YACxD,MAAM;QACR,KAAK,cAAc;YACjB,2EAA2E;YAC3E,IAAI,MAAM;gBAAE,KAAK,IAAI,CAAC,CAAC;;gBAClB,KAAK,IAAI,CAAC,CAAC,CAAC,uCAAuC;YACxD,MAAM;QACR,KAAK,SAAS;YACZ,yDAAyD;YACzD,8CAA8C;YAC9C,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO;gBAAE,KAAK,IAAI,CAAC,CAAC;;gBACxC,KAAK,IAAI,CAAC,CAAC,CAAC,uCAAuC;YACxD,MAAM;QACR,KAAK,iBAAiB;YACpB,KAAK,IAAI,EAAE,CAAC,CAAC,6DAA6D;YAC1E,MAAM;IACV,CAAC;IAED,UAAU;IACV,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpE,IAAI,UAAU,GAAG,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;aAC1B,IAAI,UAAU,GAAG,EAAE;YAAE,KAAK,IAAI,CAAC,CAAC;aAChC,IAAI,UAAU,GAAG,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,MAAM;QAAE,KAAK,IAAI,CAAC,CAAC;IAEhD,OAAO,KAAK,CAAC;AACf,CAAC;AAcD,MAAM,UAAU,UAAU,CAAC,MAAsB,EAAE,KAAa;IAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEhF,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;QAExC,OAAO;YACL,KAAK;YACL,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;SAC1D,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,EAAE,WAAW,EAAqB,CAAC"}
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC;AAEtE,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yEAAyE;IACzE,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3E,gDAAgD;IAChD,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,gDAAgD;IAChD,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,yBAAyB;IACzB,SAAS,EAAE;QACT,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,MAAM,CAAC,CAAgB;gBAEnB,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,aAAa;IASvH,EAAE,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAoB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,cAAc,CAAC;AAEtE,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yEAAyE;IACzE,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3E,gDAAgD;IAChD,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,gDAAgD;IAChD,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,yBAAyB;IACzB,SAAS,EAAE;QACT,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,MAAM,CAAC,CAAgB;gBAEnB,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,aAAa;IASvH,EAAE,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyJ/C,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,gBAAgB;IAuDxB,OAAO,CAAC,aAAa;CA2BtB"}
|
package/dist/router.js
CHANGED
|
@@ -55,8 +55,10 @@ export class CapabilityRouter {
|
|
|
55
55
|
// 2. Separate skills from executable agents
|
|
56
56
|
const executableAgents = searchResult.agents.filter((a) => a.protocol !== "skill");
|
|
57
57
|
const skillSuggestions = searchResult.agents.filter((a) => a.protocol === "skill");
|
|
58
|
-
//
|
|
59
|
-
const
|
|
58
|
+
// 2b. Filter to only agents with at least one callable endpoint
|
|
59
|
+
const callableAgents = executableAgents.filter(a => a.endpoints.mcp || a.endpoints.x402 || a.endpoints.http || a.endpoints.a2a || a.endpoints.l402 || a.endpoints.acp);
|
|
60
|
+
// 3. Rank only callable agents; fall back to all executable if none have endpoints
|
|
61
|
+
const ranked = rankAgents(callableAgents.length > 0 ? callableAgents : executableAgents, task);
|
|
60
62
|
// 3b. Build options with cost estimates
|
|
61
63
|
const capabilityOptions = ranked.map((r) => this.buildOption(r, options));
|
|
62
64
|
// 4. Filter by budget
|
|
@@ -123,7 +125,7 @@ export class CapabilityRouter {
|
|
|
123
125
|
break;
|
|
124
126
|
}
|
|
125
127
|
// 8. Write ERC-8004 reputation feedback on-chain
|
|
126
|
-
if (this.reputationWriter && actualSelected.agent.
|
|
128
|
+
if (this.reputationWriter && actualSelected.agent.source === "erc8004") {
|
|
127
129
|
const agentId = BigInt(selected.agent.nativeId || "0");
|
|
128
130
|
if (agentId > 0n) {
|
|
129
131
|
const category = selected.agent.categories[0] ?? "general";
|
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;AAE1E,OAAO,EAAE,gBAAgB,EAA+B,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,YAAY,EAAsB,MAAM,4BAA4B,CAAC;AAyD9E,MAAM,OAAO,gBAAgB;IACnB,UAAU,CAAa;IACvB,MAAM,CAAiB;IACvB,gBAAgB,CAAoB;IACpC,MAAM,CAAiB;IAE/B,YAAY,UAAsB,EAAE,MAAsB,EAAE,gBAAyC,EAAE,MAAsB;QAC3H,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAAE,CAAC,OAAkB;QACzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QACnC,iDAAiD;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO;YAC1B,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,oCAAoC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;YACrF,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAEjB,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;YACtD,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;SAClC,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,IAAI;gBACJ,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE;oBACT,cAAc,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM;oBAC3C,UAAU,EAAE,CAAC;oBACb,WAAW,EAAE,YAAY,CAAC,WAAW;iBACtC;gBACD,SAAS,EAAE,0DAA0D;aACtE,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;QACnF,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;QAEnF,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/sources/bankr.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bankr Source Adapter
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Bankr is a single LLM-powered trading gateway — not a directory of agents.
|
|
4
|
+
* It returns itself as a discoverable agent when the query matches its capabilities:
|
|
5
|
+
* trading, prices, DeFi, swaps, portfolio, bridging, token analysis.
|
|
6
|
+
*
|
|
7
|
+
* API: https://api.bankr.bot
|
|
5
8
|
*/
|
|
6
9
|
import type { SourceAdapter } from "./types.js";
|
|
7
10
|
export declare const bankrAdapter: SourceAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bankr.d.ts","sourceRoot":"","sources":["../../src/sources/bankr.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bankr.d.ts","sourceRoot":"","sources":["../../src/sources/bankr.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAqC,MAAM,YAAY,CAAC;AAanF,eAAO,MAAM,YAAY,EAAE,aA4B1B,CAAC"}
|
package/dist/sources/bankr.js
CHANGED
|
@@ -1,42 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bankr Source Adapter
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Bankr is a single LLM-powered trading gateway — not a directory of agents.
|
|
4
|
+
* It returns itself as a discoverable agent when the query matches its capabilities:
|
|
5
|
+
* trading, prices, DeFi, swaps, portfolio, bridging, token analysis.
|
|
6
|
+
*
|
|
7
|
+
* API: https://api.bankr.bot
|
|
5
8
|
*/
|
|
6
9
|
const BANKR_API = "https://api.bankr.bot";
|
|
10
|
+
// What Bankr can actually do
|
|
11
|
+
const BANKR_CAPABILITIES = [
|
|
12
|
+
"trade", "swap", "price", "defi", "yield", "token", "portfolio",
|
|
13
|
+
"bridge", "lend", "borrow", "stake", "liquidity", "market",
|
|
14
|
+
"eth", "btc", "sol", "usdc", "crypto", "coin", "exchange",
|
|
15
|
+
"buy", "sell", "transfer", "balance", "wallet", "chain",
|
|
16
|
+
"arbitrage", "apy", "tvl", "gas", "fee",
|
|
17
|
+
];
|
|
7
18
|
export const bankrAdapter = {
|
|
8
19
|
name: "bankr",
|
|
9
20
|
displayName: "Bankr Trading Gateway",
|
|
10
21
|
async search(query, options) {
|
|
11
|
-
|
|
12
|
-
const timeout = options?.timeout ?? 10000;
|
|
13
|
-
try {
|
|
14
|
-
const apiKey = process.env.BANKR_API_KEY;
|
|
15
|
-
if (!apiKey)
|
|
16
|
-
return [];
|
|
17
|
-
const headers = {
|
|
18
|
-
"Content-Type": "application/json",
|
|
19
|
-
"X-API-Key": apiKey,
|
|
20
|
-
};
|
|
21
|
-
const url = new URL(`${BANKR_API}/agents`);
|
|
22
|
-
if (query)
|
|
23
|
-
url.searchParams.set("q", query);
|
|
24
|
-
url.searchParams.set("limit", String(limit));
|
|
25
|
-
const res = await fetch(url.toString(), {
|
|
26
|
-
headers,
|
|
27
|
-
signal: AbortSignal.timeout(timeout),
|
|
28
|
-
});
|
|
29
|
-
if (!res.ok)
|
|
30
|
-
return [];
|
|
31
|
-
const data = await res.json();
|
|
32
|
-
const agents = data.agents ?? data.data ?? data.results ?? data;
|
|
33
|
-
if (!Array.isArray(agents))
|
|
34
|
-
return [];
|
|
35
|
-
return agents.slice(0, limit).map(mapBankrAgent);
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
22
|
+
if (!process.env.BANKR_API_KEY)
|
|
38
23
|
return [];
|
|
39
|
-
|
|
24
|
+
const lower = query.toLowerCase();
|
|
25
|
+
const isRelevant = BANKR_CAPABILITIES.some(cap => lower.includes(cap));
|
|
26
|
+
if (!isRelevant && query.length > 0)
|
|
27
|
+
return [];
|
|
28
|
+
return [createBankrAgent()];
|
|
40
29
|
},
|
|
41
30
|
async ping() {
|
|
42
31
|
try {
|
|
@@ -46,7 +35,6 @@ export const bankrAdapter = {
|
|
|
46
35
|
body: JSON.stringify({ prompt: "ping" }),
|
|
47
36
|
signal: AbortSignal.timeout(5000),
|
|
48
37
|
});
|
|
49
|
-
// 401 means the API is alive, just needs auth
|
|
50
38
|
return res.status === 401 || res.ok;
|
|
51
39
|
}
|
|
52
40
|
catch {
|
|
@@ -54,26 +42,34 @@ export const bankrAdapter = {
|
|
|
54
42
|
}
|
|
55
43
|
},
|
|
56
44
|
};
|
|
57
|
-
function
|
|
45
|
+
function createBankrAgent() {
|
|
58
46
|
return {
|
|
59
|
-
id:
|
|
60
|
-
nativeId:
|
|
61
|
-
name:
|
|
62
|
-
description: agent.
|
|
63
|
-
categories:
|
|
64
|
-
capabilities:
|
|
47
|
+
id: "bankr:trading-gateway",
|
|
48
|
+
nativeId: "trading-gateway",
|
|
49
|
+
name: "Bankr Trading Agent",
|
|
50
|
+
description: "AI-powered trading and DeFi agent. Get real-time prices, execute swaps, bridge tokens, manage portfolios, and interact with DeFi protocols via natural language on Base.",
|
|
51
|
+
categories: ["defi", "trading", "data"],
|
|
52
|
+
capabilities: [
|
|
53
|
+
"Real-time token prices (ETH, BTC, SOL, any token)",
|
|
54
|
+
"Token swaps across DEXs on Base",
|
|
55
|
+
"Cross-chain bridging",
|
|
56
|
+
"Portfolio analysis and management",
|
|
57
|
+
"DeFi protocol interactions (lending, borrowing, staking)",
|
|
58
|
+
"Market sentiment analysis",
|
|
59
|
+
],
|
|
65
60
|
source: "bankr",
|
|
66
61
|
protocol: "http",
|
|
67
62
|
endpoints: {
|
|
68
|
-
http:
|
|
63
|
+
http: `${BANKR_API}/agent/prompt`,
|
|
69
64
|
},
|
|
70
65
|
pricing: {
|
|
71
|
-
model:
|
|
72
|
-
amount:
|
|
73
|
-
currency:
|
|
66
|
+
model: "free",
|
|
67
|
+
amount: "0",
|
|
68
|
+
currency: "USDC",
|
|
74
69
|
},
|
|
75
|
-
verified:
|
|
76
|
-
|
|
70
|
+
verified: true,
|
|
71
|
+
lastSeen: Date.now(),
|
|
72
|
+
raw: { type: "bankr-gateway", api: BANKR_API },
|
|
77
73
|
};
|
|
78
74
|
}
|
|
79
75
|
//# sourceMappingURL=bankr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bankr.js","sourceRoot":"","sources":["../../src/sources/bankr.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bankr.js","sourceRoot":"","sources":["../../src/sources/bankr.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAE1C,6BAA6B;AAC7B,MAAM,kBAAkB,GAAG;IACzB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW;IAC/D,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ;IAC1D,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU;IACzD,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;IACvD,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;CACxC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAkB;IACzC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,uBAAuB;IAEpC,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAA6B;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QAE1C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAE/C,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,eAAe,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACxC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,gBAAgB;IACvB,OAAO;QACL,EAAE,EAAE,uBAAuB;QAC3B,QAAQ,EAAE,iBAAiB;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,0KAA0K;QACvL,UAAU,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;QACvC,YAAY,EAAE;YACZ,mDAAmD;YACnD,iCAAiC;YACjC,sBAAsB;YACtB,mCAAmC;YACnC,0DAA0D;YAC1D,2BAA2B;SAC5B;QACD,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE;YACT,IAAI,EAAE,GAAG,SAAS,eAAe;SAClC;QACD,OAAO,EAAE;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,MAAM;SACjB;QACD,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;QACpB,GAAG,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,EAAE;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Olas Mech Handler
|
|
3
|
+
* Sends requests to Olas autonomous mechs via their HTTP endpoint
|
|
4
|
+
*/
|
|
5
|
+
import type { KompassWallet } from "../index.js";
|
|
6
|
+
import type { UnifiedAgent } from "../../sources/types.js";
|
|
7
|
+
export declare function handleOlasPayment(wallet: KompassWallet, agent: UnifiedAgent, task: string): Promise<{
|
|
8
|
+
success: boolean;
|
|
9
|
+
deliverable?: unknown;
|
|
10
|
+
jobId?: string;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=olas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"olas.d.ts","sourceRoot":"","sources":["../../../src/wallet/handlers/olas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+BtE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export async function handleOlasPayment(wallet, agent, task) {
|
|
2
|
+
const endpoint = agent.endpoints.http;
|
|
3
|
+
if (!endpoint) {
|
|
4
|
+
return { success: false, deliverable: { error: "No Olas mech endpoint" } };
|
|
5
|
+
}
|
|
6
|
+
try {
|
|
7
|
+
// Olas mechs accept POST requests with prompt
|
|
8
|
+
const res = await fetch(endpoint, {
|
|
9
|
+
method: "POST",
|
|
10
|
+
headers: { "Content-Type": "application/json" },
|
|
11
|
+
body: JSON.stringify({
|
|
12
|
+
prompt: task,
|
|
13
|
+
tool: "openai-gpt-4", // Default tool
|
|
14
|
+
}),
|
|
15
|
+
signal: AbortSignal.timeout(30000),
|
|
16
|
+
});
|
|
17
|
+
if (!res.ok) {
|
|
18
|
+
const err = await res.text().catch(() => "");
|
|
19
|
+
return { success: false, deliverable: { error: `Olas mech error: ${res.status}`, details: err } };
|
|
20
|
+
}
|
|
21
|
+
const data = await res.json();
|
|
22
|
+
return { success: true, deliverable: data };
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
deliverable: { error: err instanceof Error ? err.message : String(err) },
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=olas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"olas.js","sourceRoot":"","sources":["../../../src/wallet/handlers/olas.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAqB,EACrB,KAAmB,EACnB,IAAY;IAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC;QACH,8CAA8C;QAC9C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,cAAc,EAAE,eAAe;aACtC,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,oBAAoB,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QACpG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACzE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-router.d.ts","sourceRoot":"","sources":["../../src/wallet/payment-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"payment-router.d.ts","sourceRoot":"","sources":["../../src/wallet/payment-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAYvE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,aAAa,CAAC,CAiGxB"}
|
|
@@ -10,6 +10,7 @@ import { handleNanopayment } from "./handlers/nanopayments.js";
|
|
|
10
10
|
import { handleFreePayment } from "./handlers/free.js";
|
|
11
11
|
import { handleBankrPayment } from "./handlers/bankr.js";
|
|
12
12
|
import { handleLocusPayment } from "./handlers/locus.js";
|
|
13
|
+
import { handleOlasPayment } from "./handlers/olas.js";
|
|
13
14
|
import { ensureSufficientBalance } from "./bridge.js";
|
|
14
15
|
export async function routePayment(wallet, agent, task, options) {
|
|
15
16
|
const protocol = determinePaymentProtocol(agent);
|
|
@@ -57,6 +58,10 @@ export async function routePayment(wallet, agent, task, options) {
|
|
|
57
58
|
const result = await handleLocusPayment(wallet, agent, task);
|
|
58
59
|
return { ...result, protocol: "locus", costUSDC: parseFloat(agent.pricing?.amount ?? "0") };
|
|
59
60
|
}
|
|
61
|
+
case "olas": {
|
|
62
|
+
const result = await handleOlasPayment(wallet, agent, task);
|
|
63
|
+
return { ...result, protocol: "olas", costUSDC: parseFloat(agent.pricing?.amount ?? "0") };
|
|
64
|
+
}
|
|
60
65
|
case "free":
|
|
61
66
|
case "mcp": {
|
|
62
67
|
// MCP servers and free tools — try to execute directly
|
|
@@ -118,6 +123,7 @@ function determinePaymentProtocol(agent) {
|
|
|
118
123
|
case "skills-registry": return "free";
|
|
119
124
|
case "bankr": return "bankr";
|
|
120
125
|
case "locus": return "locus";
|
|
126
|
+
case "olas": return "olas";
|
|
121
127
|
default: return agent.protocol === "onchain" ? "acp" : "free";
|
|
122
128
|
}
|
|
123
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-router.js","sourceRoot":"","sources":["../../src/wallet/payment-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAYtD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAqB,EACrB,KAAmB,EACnB,IAAY,EACZ,OAA8C;IAE9C,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,8DAA8D;QAC9D,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,CAAC;YAClE,IAAI,CAAC;gBACH,MAAM,uBAAuB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ;oBACR,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;iBACjE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC5D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7F,CAAC;YAED,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC5E,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YACnG,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7E,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YACnD,CAAC;YAED,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YAClG,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC5D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5G,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YAC9F,CAAC;YAED,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;YAC9F,CAAC;YAED,KAAK,MAAM,CAAC;YACZ,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,uDAAuD;gBACvD,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;oBACxB,wCAAwC;oBACxC,IAAI,CAAC;wBACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;wBACxD,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;wBACpC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;wBACrD,OAAO;4BACL,OAAO,EAAE,SAAS,CAAC,OAAO;4BAC1B,QAAQ,EAAE,KAAK;4BACf,WAAW,EAAE,SAAS,CAAC,WAAW;4BAClC,KAAK,EAAE,SAAS,CAAC,KAAK;4BACtB,QAAQ,EAAE,CAAC;yBACZ,CAAC;oBACJ,CAAC;oBAAC,MAAM,CAAC;wBACP,+BAA+B;oBACjC,CAAC;gBACH,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpD,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACtD,CAAC;YAED;gBACE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,iCAAiC,QAAQ,EAAE;iBACnD,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAmB;IACnD,aAAa;IACb,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9F,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oCAAoC;IACpC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAEtC,oBAAoB;IACpB,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC;QACzB,KAAK,gBAAgB,CAAC,CAAC,OAAO,MAAM,CAAC;QACrC,KAAK,gBAAgB,CAAC,CAAC,OAAO,MAAM,CAAC;QACrC,KAAK,cAAc,CAAC,CAAC,OAAO,MAAM,CAAC;QACnC,KAAK,iBAAiB,CAAC,CAAC,OAAO,MAAM,CAAC;QACtC,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"payment-router.js","sourceRoot":"","sources":["../../src/wallet/payment-router.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.
|
|
3
|
+
"version": "0.20.0",
|
|
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/ens.ts
CHANGED
|
@@ -5,24 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { createPublicClient, http, type Address } from "viem";
|
|
8
|
-
import {
|
|
8
|
+
import { mainnet } from "viem/chains";
|
|
9
9
|
import { normalize } from "viem/ens";
|
|
10
10
|
import type { UnifiedAgent } from "./sources/types.js";
|
|
11
11
|
|
|
12
|
-
// ENS L2 Resolver on Base Sepolia
|
|
13
|
-
const BASE_SEPOLIA_RESOLVER = "0x6533C94869D28fAA8dF77cc63f9e2b2D6Cf77eBA" as Address;
|
|
14
|
-
|
|
15
12
|
// Cache to avoid repeated lookups
|
|
16
13
|
const ensCache = new Map<string, string | null>();
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
chain: baseSepolia,
|
|
25
|
-
transport: http("https://sepolia.base.org"),
|
|
15
|
+
// ENS resolution must happen on Ethereum mainnet (where the ENS registry lives).
|
|
16
|
+
// CCIP-Read (ERC-3668) allows the mainnet universal resolver to transparently
|
|
17
|
+
// resolve L2 names (Basenames, etc.) via off-chain lookups.
|
|
18
|
+
const ensClient = createPublicClient({
|
|
19
|
+
chain: mainnet,
|
|
20
|
+
transport: http(),
|
|
26
21
|
});
|
|
27
22
|
|
|
28
23
|
/**
|
|
@@ -31,14 +26,12 @@ const baseSepoliaClient = createPublicClient({
|
|
|
31
26
|
*/
|
|
32
27
|
export async function resolveENSName(
|
|
33
28
|
address: Address,
|
|
34
|
-
network: "base" | "base-sepolia" = "base"
|
|
35
29
|
): Promise<string | null> {
|
|
36
|
-
const cacheKey =
|
|
30
|
+
const cacheKey = address.toLowerCase();
|
|
37
31
|
if (ensCache.has(cacheKey)) return ensCache.get(cacheKey)!;
|
|
38
32
|
|
|
39
33
|
try {
|
|
40
|
-
const
|
|
41
|
-
const name = await client.getEnsName({ address });
|
|
34
|
+
const name = await ensClient.getEnsName({ address });
|
|
42
35
|
ensCache.set(cacheKey, name);
|
|
43
36
|
return name;
|
|
44
37
|
} catch {
|
|
@@ -52,11 +45,9 @@ export async function resolveENSName(
|
|
|
52
45
|
*/
|
|
53
46
|
export async function resolveENSAddress(
|
|
54
47
|
name: string,
|
|
55
|
-
network: "base" | "base-sepolia" = "base"
|
|
56
48
|
): Promise<Address | null> {
|
|
57
49
|
try {
|
|
58
|
-
const
|
|
59
|
-
const address = await client.getEnsAddress({ name: normalize(name) });
|
|
50
|
+
const address = await ensClient.getEnsAddress({ name: normalize(name) });
|
|
60
51
|
return address;
|
|
61
52
|
} catch {
|
|
62
53
|
return null;
|
|
@@ -69,7 +60,6 @@ export async function resolveENSAddress(
|
|
|
69
60
|
*/
|
|
70
61
|
export async function enrichWithENS(
|
|
71
62
|
agents: UnifiedAgent[],
|
|
72
|
-
network: "base" | "base-sepolia" = "base"
|
|
73
63
|
): Promise<UnifiedAgent[]> {
|
|
74
64
|
const agentsNeedingResolution = agents.filter(
|
|
75
65
|
(a) => !a.ensName && a.endpoints.acp?.walletAddress
|
|
@@ -83,7 +73,7 @@ export async function enrichWithENS(
|
|
|
83
73
|
batch.map(async (agent) => {
|
|
84
74
|
const address = agent.endpoints.acp?.walletAddress as Address;
|
|
85
75
|
if (address) {
|
|
86
|
-
const name = await resolveENSName(address
|
|
76
|
+
const name = await resolveENSName(address);
|
|
87
77
|
if (name) agent.ensName = name;
|
|
88
78
|
}
|
|
89
79
|
})
|
package/src/matching.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Layer A: Structured capability matching (ontology-style)
|
|
5
5
|
* Layer B: BM25 text relevance scoring
|
|
6
6
|
* Layer C: LLM re-ranking (optional, for top candidates)
|
|
7
|
-
* Layer D: Multi-criteria scoring (reputation, price, protocol, recency)
|
|
7
|
+
* Layer D: Multi-criteria scoring (reputation, price, protocol, recency, liveness)
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import type { UnifiedAgent } from "./sources/types.js";
|
|
@@ -28,6 +28,8 @@ const DOMAIN_KEYWORDS: Record<string, string[]> = {
|
|
|
28
28
|
development: ["code", "develop", "build", "deploy", "smart contract", "solidity"],
|
|
29
29
|
ai: ["ai", "llm", "model", "inference", "embedding", "prompt"],
|
|
30
30
|
social: ["social", "twitter", "post", "tweet", "farcaster"],
|
|
31
|
+
scraping: ["scrape", "crawl", "extract", "web scraping", "firecrawl"],
|
|
32
|
+
crypto: ["crypto", "bitcoin", "ethereum", "eth", "btc", "sol", "token", "coin", "wallet", "chain", "gas"],
|
|
31
33
|
};
|
|
32
34
|
|
|
33
35
|
const PROTOCOL_KEYWORDS: Record<string, string[]> = {
|
|
@@ -96,7 +98,7 @@ function structuredScore(agent: UnifiedAgent, intent: ParsedIntent): number {
|
|
|
96
98
|
if (intent.priceMax && agent.pricing?.amount) {
|
|
97
99
|
const price = parseFloat(agent.pricing.amount);
|
|
98
100
|
if (price <= intent.priceMax) score += 10;
|
|
99
|
-
else score -= 10;
|
|
101
|
+
else score -= 10;
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
return score;
|
|
@@ -108,14 +110,16 @@ function bm25Score(agent: UnifiedAgent, queryTerms: string[]): number {
|
|
|
108
110
|
const doc = `${agent.name} ${agent.description} ${agent.categories.join(" ")} ${agent.capabilities.join(" ")}`.toLowerCase();
|
|
109
111
|
const docTerms = doc.split(/\s+/);
|
|
110
112
|
const docLen = docTerms.length;
|
|
111
|
-
const avgDocLen = 50;
|
|
113
|
+
const avgDocLen = 50;
|
|
112
114
|
const k1 = 1.5;
|
|
113
115
|
const b = 0.75;
|
|
114
116
|
|
|
115
117
|
let score = 0;
|
|
118
|
+
let matchedTerms = 0;
|
|
116
119
|
for (const term of queryTerms) {
|
|
117
120
|
const tf = docTerms.filter((t) => t.includes(term)).length;
|
|
118
121
|
if (tf === 0) continue;
|
|
122
|
+
matchedTerms++;
|
|
119
123
|
|
|
120
124
|
// Simplified BM25
|
|
121
125
|
const numerator = tf * (k1 + 1);
|
|
@@ -123,7 +127,18 @@ function bm25Score(agent: UnifiedAgent, queryTerms: string[]): number {
|
|
|
123
127
|
score += numerator / denominator;
|
|
124
128
|
}
|
|
125
129
|
|
|
126
|
-
|
|
130
|
+
// Bonus for matching ALL query terms (full relevance)
|
|
131
|
+
if (queryTerms.length > 0 && matchedTerms === queryTerms.length) {
|
|
132
|
+
score *= 1.5;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Penalty for very long descriptions that match generically
|
|
136
|
+
// Short, focused descriptions that match = better than long generic ones
|
|
137
|
+
if (docLen > 100) {
|
|
138
|
+
score *= 0.8; // 20% penalty for bloated descriptions
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return score * 10;
|
|
127
142
|
}
|
|
128
143
|
|
|
129
144
|
// ── Layer D: Multi-Criteria Scoring ──────────────────────
|
|
@@ -131,10 +146,13 @@ function bm25Score(agent: UnifiedAgent, queryTerms: string[]): number {
|
|
|
131
146
|
function multiCriteriaScore(agent: UnifiedAgent): number {
|
|
132
147
|
let score = 0;
|
|
133
148
|
|
|
134
|
-
// Reputation
|
|
149
|
+
// Reputation — agents with real track record get boosted
|
|
135
150
|
if (agent.reputation) {
|
|
136
151
|
score += Math.min(agent.reputation.score * 0.2, 20);
|
|
137
152
|
score += Math.min(agent.reputation.count * 0.5, 10);
|
|
153
|
+
} else {
|
|
154
|
+
// No reputation = untested = slight penalty
|
|
155
|
+
score -= 3;
|
|
138
156
|
}
|
|
139
157
|
|
|
140
158
|
// Verified identity
|
|
@@ -143,19 +161,48 @@ function multiCriteriaScore(agent: UnifiedAgent): number {
|
|
|
143
161
|
// Pricing transparency
|
|
144
162
|
if (agent.pricing && agent.pricing.model !== "unknown") score += 3;
|
|
145
163
|
|
|
146
|
-
//
|
|
147
|
-
const
|
|
164
|
+
// Liveness: agents with callable endpoints that we KNOW work
|
|
165
|
+
const hasHttp = !!agent.endpoints.http;
|
|
166
|
+
const hasMcp = !!agent.endpoints.mcp;
|
|
167
|
+
const hasX402 = !!agent.endpoints.x402;
|
|
168
|
+
const hasAcp = !!agent.endpoints.acp;
|
|
169
|
+
const endpointCount = [hasHttp, hasMcp, hasX402, hasAcp, !!agent.endpoints.a2a, !!agent.endpoints.l402].filter(Boolean).length;
|
|
148
170
|
score += endpointCount * 2;
|
|
149
171
|
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
|
|
153
|
-
|
|
172
|
+
// Source-specific liveness signals
|
|
173
|
+
// Agents from sources we KNOW are live gateways (not just registrations)
|
|
174
|
+
switch (agent.source as string) {
|
|
175
|
+
case "bankr":
|
|
176
|
+
score += 15; // Bankr is a live gateway, always responds
|
|
177
|
+
break;
|
|
178
|
+
case "locus":
|
|
179
|
+
score += 12; // Locus wrapped APIs are live
|
|
180
|
+
break;
|
|
181
|
+
case "x402-ecosystem":
|
|
182
|
+
score += 10; // 402index verifies health
|
|
183
|
+
break;
|
|
184
|
+
case "acp":
|
|
185
|
+
score += 8; // ACP agents are registered and active
|
|
186
|
+
break;
|
|
187
|
+
case "olas":
|
|
188
|
+
score += 8; // Olas mechs have on-chain delivery records
|
|
189
|
+
break;
|
|
190
|
+
case "mcp-registry":
|
|
191
|
+
// Only boost if it has a remote endpoint — many MCP servers are local-only
|
|
192
|
+
if (hasMcp) score += 5;
|
|
193
|
+
else score -= 5; // Penalize MCP without remote endpoint
|
|
194
|
+
break;
|
|
195
|
+
case "erc8004":
|
|
196
|
+
// ERC-8004 is a registry — agents may or may not be live
|
|
197
|
+
// Only boost if they have a callable endpoint
|
|
198
|
+
if (hasHttp || hasMcp || hasX402) score += 3;
|
|
199
|
+
else score -= 5; // Paper registration, no live endpoint
|
|
200
|
+
break;
|
|
201
|
+
case "skills-registry":
|
|
202
|
+
score -= 10; // Skills aren't hirable — heavy penalty if they slip through
|
|
203
|
+
break;
|
|
154
204
|
}
|
|
155
205
|
|
|
156
|
-
// Free tools get a small accessibility bonus (no wallet needed)
|
|
157
|
-
if (agent.pricing?.model === "free") score += 3;
|
|
158
|
-
|
|
159
206
|
// Recency
|
|
160
207
|
if (agent.lastSeen) {
|
|
161
208
|
const hoursSince = (Date.now() - agent.lastSeen) / (1000 * 60 * 60);
|
|
@@ -164,6 +211,9 @@ function multiCriteriaScore(agent: UnifiedAgent): number {
|
|
|
164
211
|
else if (hoursSince < 168) score += 1;
|
|
165
212
|
}
|
|
166
213
|
|
|
214
|
+
// Free tools get a small accessibility bonus
|
|
215
|
+
if (agent.pricing?.model === "free") score += 2;
|
|
216
|
+
|
|
167
217
|
return score;
|
|
168
218
|
}
|
|
169
219
|
|
package/src/router.ts
CHANGED
|
@@ -121,8 +121,13 @@ export class CapabilityRouter {
|
|
|
121
121
|
const executableAgents = searchResult.agents.filter((a) => a.protocol !== "skill");
|
|
122
122
|
const skillSuggestions = searchResult.agents.filter((a) => a.protocol === "skill");
|
|
123
123
|
|
|
124
|
-
//
|
|
125
|
-
const
|
|
124
|
+
// 2b. Filter to only agents with at least one callable endpoint
|
|
125
|
+
const callableAgents = executableAgents.filter(a =>
|
|
126
|
+
a.endpoints.mcp || a.endpoints.x402 || a.endpoints.http || a.endpoints.a2a || a.endpoints.l402 || a.endpoints.acp
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
// 3. Rank only callable agents; fall back to all executable if none have endpoints
|
|
130
|
+
const ranked = rankAgents(callableAgents.length > 0 ? callableAgents : executableAgents, task);
|
|
126
131
|
|
|
127
132
|
// 3b. Build options with cost estimates
|
|
128
133
|
const capabilityOptions = ranked.map((r) => this.buildOption(r, options));
|
|
@@ -200,7 +205,7 @@ export class CapabilityRouter {
|
|
|
200
205
|
}
|
|
201
206
|
|
|
202
207
|
// 8. Write ERC-8004 reputation feedback on-chain
|
|
203
|
-
if (this.reputationWriter && actualSelected.agent.
|
|
208
|
+
if (this.reputationWriter && actualSelected.agent.source === "erc8004") {
|
|
204
209
|
const agentId = BigInt(selected.agent.nativeId || "0");
|
|
205
210
|
if (agentId > 0n) {
|
|
206
211
|
const category = selected.agent.categories[0] ?? "general";
|
package/src/sources/bankr.ts
CHANGED
|
@@ -1,50 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bankr Source Adapter
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Bankr is a single LLM-powered trading gateway — not a directory of agents.
|
|
4
|
+
* It returns itself as a discoverable agent when the query matches its capabilities:
|
|
5
|
+
* trading, prices, DeFi, swaps, portfolio, bridging, token analysis.
|
|
6
|
+
*
|
|
7
|
+
* API: https://api.bankr.bot
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
10
|
import type { SourceAdapter, UnifiedAgent, SourceSearchOptions } from "./types.js";
|
|
8
11
|
|
|
9
12
|
const BANKR_API = "https://api.bankr.bot";
|
|
10
13
|
|
|
14
|
+
// What Bankr can actually do
|
|
15
|
+
const BANKR_CAPABILITIES = [
|
|
16
|
+
"trade", "swap", "price", "defi", "yield", "token", "portfolio",
|
|
17
|
+
"bridge", "lend", "borrow", "stake", "liquidity", "market",
|
|
18
|
+
"eth", "btc", "sol", "usdc", "crypto", "coin", "exchange",
|
|
19
|
+
"buy", "sell", "transfer", "balance", "wallet", "chain",
|
|
20
|
+
"arbitrage", "apy", "tvl", "gas", "fee",
|
|
21
|
+
];
|
|
22
|
+
|
|
11
23
|
export const bankrAdapter: SourceAdapter = {
|
|
12
24
|
name: "bankr",
|
|
13
25
|
displayName: "Bankr Trading Gateway",
|
|
14
26
|
|
|
15
27
|
async search(query: string, options?: SourceSearchOptions): Promise<UnifiedAgent[]> {
|
|
16
|
-
|
|
17
|
-
const timeout = options?.timeout ?? 10000;
|
|
18
|
-
|
|
19
|
-
try {
|
|
20
|
-
const apiKey = process.env.BANKR_API_KEY;
|
|
21
|
-
if (!apiKey) return [];
|
|
22
|
-
|
|
23
|
-
const headers: Record<string, string> = {
|
|
24
|
-
"Content-Type": "application/json",
|
|
25
|
-
"X-API-Key": apiKey,
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const url = new URL(`${BANKR_API}/agents`);
|
|
29
|
-
if (query) url.searchParams.set("q", query);
|
|
30
|
-
url.searchParams.set("limit", String(limit));
|
|
28
|
+
if (!process.env.BANKR_API_KEY) return [];
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
signal: AbortSignal.timeout(timeout),
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
if (!res.ok) return [];
|
|
38
|
-
|
|
39
|
-
const data = await res.json();
|
|
40
|
-
const agents = data.agents ?? data.data ?? data.results ?? data;
|
|
30
|
+
const lower = query.toLowerCase();
|
|
31
|
+
const isRelevant = BANKR_CAPABILITIES.some(cap => lower.includes(cap));
|
|
41
32
|
|
|
42
|
-
|
|
33
|
+
if (!isRelevant && query.length > 0) return [];
|
|
43
34
|
|
|
44
|
-
|
|
45
|
-
} catch {
|
|
46
|
-
return [];
|
|
47
|
-
}
|
|
35
|
+
return [createBankrAgent()];
|
|
48
36
|
},
|
|
49
37
|
|
|
50
38
|
async ping(): Promise<boolean> {
|
|
@@ -55,7 +43,6 @@ export const bankrAdapter: SourceAdapter = {
|
|
|
55
43
|
body: JSON.stringify({ prompt: "ping" }),
|
|
56
44
|
signal: AbortSignal.timeout(5000),
|
|
57
45
|
});
|
|
58
|
-
// 401 means the API is alive, just needs auth
|
|
59
46
|
return res.status === 401 || res.ok;
|
|
60
47
|
} catch {
|
|
61
48
|
return false;
|
|
@@ -63,25 +50,33 @@ export const bankrAdapter: SourceAdapter = {
|
|
|
63
50
|
},
|
|
64
51
|
};
|
|
65
52
|
|
|
66
|
-
function
|
|
53
|
+
function createBankrAgent(): UnifiedAgent {
|
|
67
54
|
return {
|
|
68
|
-
id:
|
|
69
|
-
nativeId:
|
|
70
|
-
name:
|
|
71
|
-
description: agent.
|
|
72
|
-
categories:
|
|
73
|
-
capabilities:
|
|
55
|
+
id: "bankr:trading-gateway",
|
|
56
|
+
nativeId: "trading-gateway",
|
|
57
|
+
name: "Bankr Trading Agent",
|
|
58
|
+
description: "AI-powered trading and DeFi agent. Get real-time prices, execute swaps, bridge tokens, manage portfolios, and interact with DeFi protocols via natural language on Base.",
|
|
59
|
+
categories: ["defi", "trading", "data"],
|
|
60
|
+
capabilities: [
|
|
61
|
+
"Real-time token prices (ETH, BTC, SOL, any token)",
|
|
62
|
+
"Token swaps across DEXs on Base",
|
|
63
|
+
"Cross-chain bridging",
|
|
64
|
+
"Portfolio analysis and management",
|
|
65
|
+
"DeFi protocol interactions (lending, borrowing, staking)",
|
|
66
|
+
"Market sentiment analysis",
|
|
67
|
+
],
|
|
74
68
|
source: "bankr",
|
|
75
69
|
protocol: "http",
|
|
76
70
|
endpoints: {
|
|
77
|
-
http:
|
|
71
|
+
http: `${BANKR_API}/agent/prompt`,
|
|
78
72
|
},
|
|
79
73
|
pricing: {
|
|
80
|
-
model:
|
|
81
|
-
amount:
|
|
82
|
-
currency:
|
|
74
|
+
model: "free",
|
|
75
|
+
amount: "0",
|
|
76
|
+
currency: "USDC",
|
|
83
77
|
},
|
|
84
|
-
verified:
|
|
85
|
-
|
|
78
|
+
verified: true,
|
|
79
|
+
lastSeen: Date.now(),
|
|
80
|
+
raw: { type: "bankr-gateway", api: BANKR_API },
|
|
86
81
|
};
|
|
87
82
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Olas Mech Handler
|
|
3
|
+
* Sends requests to Olas autonomous mechs via their HTTP endpoint
|
|
4
|
+
*/
|
|
5
|
+
import type { KompassWallet } from "../index.js";
|
|
6
|
+
import type { UnifiedAgent } from "../../sources/types.js";
|
|
7
|
+
|
|
8
|
+
export async function handleOlasPayment(
|
|
9
|
+
wallet: KompassWallet,
|
|
10
|
+
agent: UnifiedAgent,
|
|
11
|
+
task: string,
|
|
12
|
+
): Promise<{ success: boolean; deliverable?: unknown; jobId?: string }> {
|
|
13
|
+
const endpoint = agent.endpoints.http;
|
|
14
|
+
if (!endpoint) {
|
|
15
|
+
return { success: false, deliverable: { error: "No Olas mech endpoint" } };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
// Olas mechs accept POST requests with prompt
|
|
20
|
+
const res = await fetch(endpoint, {
|
|
21
|
+
method: "POST",
|
|
22
|
+
headers: { "Content-Type": "application/json" },
|
|
23
|
+
body: JSON.stringify({
|
|
24
|
+
prompt: task,
|
|
25
|
+
tool: "openai-gpt-4", // Default tool
|
|
26
|
+
}),
|
|
27
|
+
signal: AbortSignal.timeout(30000),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
if (!res.ok) {
|
|
31
|
+
const err = await res.text().catch(() => "");
|
|
32
|
+
return { success: false, deliverable: { error: `Olas mech error: ${res.status}`, details: err } };
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const data = await res.json();
|
|
36
|
+
return { success: true, deliverable: data };
|
|
37
|
+
} catch (err) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
deliverable: { error: err instanceof Error ? err.message : String(err) },
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -13,6 +13,7 @@ import { handleNanopayment } from "./handlers/nanopayments.js";
|
|
|
13
13
|
import { handleFreePayment } from "./handlers/free.js";
|
|
14
14
|
import { handleBankrPayment } from "./handlers/bankr.js";
|
|
15
15
|
import { handleLocusPayment } from "./handlers/locus.js";
|
|
16
|
+
import { handleOlasPayment } from "./handlers/olas.js";
|
|
16
17
|
import { ensureSufficientBalance } from "./bridge.js";
|
|
17
18
|
|
|
18
19
|
export interface PaymentResult {
|
|
@@ -84,6 +85,11 @@ export async function routePayment(
|
|
|
84
85
|
return { ...result, protocol: "locus", costUSDC: parseFloat(agent.pricing?.amount ?? "0") };
|
|
85
86
|
}
|
|
86
87
|
|
|
88
|
+
case "olas": {
|
|
89
|
+
const result = await handleOlasPayment(wallet, agent, task);
|
|
90
|
+
return { ...result, protocol: "olas", costUSDC: parseFloat(agent.pricing?.amount ?? "0") };
|
|
91
|
+
}
|
|
92
|
+
|
|
87
93
|
case "free":
|
|
88
94
|
case "mcp": {
|
|
89
95
|
// MCP servers and free tools — try to execute directly
|
|
@@ -144,6 +150,7 @@ function determinePaymentProtocol(agent: UnifiedAgent): string {
|
|
|
144
150
|
case "skills-registry": return "free";
|
|
145
151
|
case "bankr": return "bankr";
|
|
146
152
|
case "locus": return "locus";
|
|
153
|
+
case "olas": return "olas";
|
|
147
154
|
default: return agent.protocol === "onchain" ? "acp" : "free";
|
|
148
155
|
}
|
|
149
156
|
}
|