kompass-sdk 0.14.0 → 0.16.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.
Files changed (60) hide show
  1. package/dist/cli.js +0 -0
  2. package/dist/matching.d.ts.map +1 -1
  3. package/dist/matching.js +8 -0
  4. package/dist/matching.js.map +1 -1
  5. package/dist/sources/acp.d.ts +1 -1
  6. package/dist/sources/acp.d.ts.map +1 -1
  7. package/dist/sources/acp.js +27 -17
  8. package/dist/sources/acp.js.map +1 -1
  9. package/dist/sources/bankr.d.ts +8 -0
  10. package/dist/sources/bankr.d.ts.map +1 -0
  11. package/dist/sources/bankr.js +79 -0
  12. package/dist/sources/bankr.js.map +1 -0
  13. package/dist/sources/index.d.ts.map +1 -1
  14. package/dist/sources/index.js +6 -0
  15. package/dist/sources/index.js.map +1 -1
  16. package/dist/sources/locus.d.ts +12 -0
  17. package/dist/sources/locus.d.ts.map +1 -0
  18. package/dist/sources/locus.js +134 -0
  19. package/dist/sources/locus.js.map +1 -0
  20. package/dist/sources/olas.d.ts +12 -0
  21. package/dist/sources/olas.d.ts.map +1 -0
  22. package/dist/sources/olas.js +143 -0
  23. package/dist/sources/olas.js.map +1 -0
  24. package/dist/sources/openserv.d.ts +8 -0
  25. package/dist/sources/openserv.d.ts.map +1 -0
  26. package/dist/sources/openserv.js +76 -0
  27. package/dist/sources/openserv.js.map +1 -0
  28. package/dist/sources/types.d.ts +1 -1
  29. package/dist/sources/types.d.ts.map +1 -1
  30. package/dist/wallet/bridge.d.ts +1 -0
  31. package/dist/wallet/bridge.d.ts.map +1 -1
  32. package/dist/wallet/bridge.js +31 -5
  33. package/dist/wallet/bridge.js.map +1 -1
  34. package/dist/wallet/handlers/acp.d.ts.map +1 -1
  35. package/dist/wallet/handlers/acp.js +59 -3
  36. package/dist/wallet/handlers/acp.js.map +1 -1
  37. package/dist/wallet/handlers/bankr.d.ts +13 -0
  38. package/dist/wallet/handlers/bankr.d.ts.map +1 -0
  39. package/dist/wallet/handlers/bankr.js +88 -0
  40. package/dist/wallet/handlers/bankr.js.map +1 -0
  41. package/dist/wallet/handlers/locus.d.ts +21 -0
  42. package/dist/wallet/handlers/locus.d.ts.map +1 -0
  43. package/dist/wallet/handlers/locus.js +220 -0
  44. package/dist/wallet/handlers/locus.js.map +1 -0
  45. package/dist/wallet/payment-router.d.ts.map +1 -1
  46. package/dist/wallet/payment-router.js +12 -0
  47. package/dist/wallet/payment-router.js.map +1 -1
  48. package/package.json +1 -1
  49. package/src/matching.ts +9 -0
  50. package/src/sources/acp.ts +29 -20
  51. package/src/sources/bankr.ts +87 -0
  52. package/src/sources/index.ts +6 -0
  53. package/src/sources/locus.ts +156 -0
  54. package/src/sources/olas.ts +171 -0
  55. package/src/sources/types.ts +4 -1
  56. package/src/wallet/bridge.ts +33 -6
  57. package/src/wallet/handlers/acp.ts +69 -3
  58. package/src/wallet/handlers/bankr.ts +108 -0
  59. package/src/wallet/handlers/locus.ts +262 -0
  60. package/src/wallet/payment-router.ts +14 -0
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Locus Payment Handler
3
+ * Calls Locus wrapped APIs — pay-per-use via USDC on Base.
4
+ * No upstream API keys needed — Locus proxies the call and charges the wallet.
5
+ *
6
+ * Flow:
7
+ * 1. Get or create Locus API key (self-register if needed)
8
+ * 2. Wait for wallet deployment
9
+ * 3. Call the wrapped API endpoint
10
+ * 4. Locus charges USDC from wallet, returns response
11
+ *
12
+ * Docs: https://beta.paywithlocus.com/skill.md
13
+ */
14
+ const LOCUS_API = "https://beta-api.paywithlocus.com/api";
15
+ export async function handleLocusPayment(wallet, agent, task) {
16
+ let apiKey = process.env.LOCUS_API_KEY;
17
+ try {
18
+ // Step 1: Self-register if no API key
19
+ if (!apiKey) {
20
+ const walletAddress = wallet.getAddress();
21
+ const registerRes = await fetch(`${LOCUS_API}/register`, {
22
+ method: "POST",
23
+ headers: { "Content-Type": "application/json" },
24
+ body: JSON.stringify({
25
+ wallet_address: walletAddress,
26
+ agent_name: "kompass-agent",
27
+ }),
28
+ signal: AbortSignal.timeout(15000),
29
+ });
30
+ if (!registerRes.ok) {
31
+ const errBody = await registerRes.text().catch(() => "");
32
+ return {
33
+ success: false,
34
+ deliverable: {
35
+ error: `Locus registration failed: ${registerRes.status}`,
36
+ details: errBody,
37
+ hint: "Set LOCUS_API_KEY env var or fund a Locus wallet at paywithlocus.com",
38
+ },
39
+ };
40
+ }
41
+ const registerData = await registerRes.json();
42
+ apiKey = registerData.data?.apiKey;
43
+ if (!apiKey) {
44
+ return {
45
+ success: false,
46
+ deliverable: { error: "Locus registration did not return an API key" },
47
+ };
48
+ }
49
+ // Wait for wallet deployment
50
+ for (let i = 0; i < 10; i++) {
51
+ const statusRes = await fetch(`${LOCUS_API}/status`, {
52
+ headers: { "Authorization": `Bearer ${apiKey}` },
53
+ signal: AbortSignal.timeout(5000),
54
+ }).catch(() => null);
55
+ if (statusRes?.ok) {
56
+ const statusData = await statusRes.json();
57
+ if (statusData.data?.walletStatus === "deployed")
58
+ break;
59
+ }
60
+ await new Promise((r) => setTimeout(r, 3000));
61
+ }
62
+ }
63
+ const headers = {
64
+ "Content-Type": "application/json",
65
+ "Authorization": `Bearer ${apiKey}`,
66
+ };
67
+ // Step 2: Determine if this is a wrapped API call or a direct payment
68
+ const rawData = agent.raw;
69
+ const isWrappedApi = rawData?.type === "locus-wrapped-api";
70
+ if (isWrappedApi) {
71
+ // Call the wrapped API directly
72
+ // The endpoint URL is like: /api/wrapped/{provider}/{endpoint}
73
+ // We need to figure out the best endpoint for the task
74
+ const provider = rawData.provider;
75
+ const availableEndpoints = rawData.endpoints || [];
76
+ // Pick the best endpoint and build the right params for each provider
77
+ const { endpoint, params } = buildLocusRequest(provider, availableEndpoints, task);
78
+ const callUrl = `${LOCUS_API}/wrapped/${provider}/${endpoint}`;
79
+ const callRes = await fetch(callUrl, {
80
+ method: "POST",
81
+ headers,
82
+ body: JSON.stringify(params),
83
+ signal: AbortSignal.timeout(30000),
84
+ });
85
+ if (!callRes.ok) {
86
+ const errBody = await callRes.text().catch(() => "");
87
+ return {
88
+ success: false,
89
+ deliverable: {
90
+ error: `Locus wrapped API call failed: ${callRes.status}`,
91
+ provider,
92
+ endpoint,
93
+ details: errBody,
94
+ },
95
+ };
96
+ }
97
+ const result = await callRes.json();
98
+ return {
99
+ success: true,
100
+ deliverable: result,
101
+ };
102
+ }
103
+ // Step 3: Direct USDC payment to agent address
104
+ const toAddress = agent.endpoints.acp?.walletAddress ?? agent.endpoints.http;
105
+ const amount = agent.pricing?.amount ?? "0.01";
106
+ if (!toAddress || !toAddress.startsWith("0x")) {
107
+ return {
108
+ success: false,
109
+ deliverable: { error: "No valid target address for Locus payment" },
110
+ };
111
+ }
112
+ const sendRes = await fetch(`${LOCUS_API}/pay/send`, {
113
+ method: "POST",
114
+ headers,
115
+ body: JSON.stringify({
116
+ to_address: toAddress,
117
+ amount: parseFloat(amount),
118
+ memo: `Kompass task: ${task.slice(0, 100)}`,
119
+ }),
120
+ signal: AbortSignal.timeout(30000),
121
+ });
122
+ if (!sendRes.ok) {
123
+ const errBody = await sendRes.text().catch(() => "");
124
+ return {
125
+ success: false,
126
+ deliverable: { error: `Locus payment failed: ${sendRes.status}`, details: errBody },
127
+ };
128
+ }
129
+ const sendData = await sendRes.json();
130
+ return {
131
+ success: true,
132
+ deliverable: sendData,
133
+ txHash: sendData.data?.tx_hash ?? sendData.data?.transaction_id,
134
+ };
135
+ }
136
+ catch (err) {
137
+ return {
138
+ success: false,
139
+ deliverable: { error: err instanceof Error ? err.message : String(err) },
140
+ };
141
+ }
142
+ }
143
+ /**
144
+ * Build the right endpoint and params for each Locus wrapped API provider.
145
+ * Each provider has different input formats — this maps the natural language task
146
+ * to the correct API call based on the provider's docs.
147
+ */
148
+ function buildLocusRequest(provider, endpoints, task) {
149
+ // Extract URLs from task
150
+ const urlMatch = task.match(/https?:\/\/[^\s"']+/);
151
+ const url = urlMatch?.[0];
152
+ switch (provider) {
153
+ // Web scraping providers — need "url" param
154
+ case "firecrawl":
155
+ return { endpoint: url ? "scrape" : "search", params: url ? { url } : { query: task } };
156
+ case "abstract-web-scraping":
157
+ return { endpoint: "scrape", params: { url: url || task } };
158
+ case "diffbot":
159
+ return { endpoint: "analyze", params: { url: url || task } };
160
+ case "tavily":
161
+ return { endpoint: url ? "extract" : "search", params: url ? { urls: [url] } : { query: task } };
162
+ // Search providers — need "query" or "q" param
163
+ case "brave":
164
+ return { endpoint: "web-search", params: { q: task } };
165
+ case "exa":
166
+ return { endpoint: "search", params: { query: task } };
167
+ case "perplexity":
168
+ return { endpoint: "sonar-chat", params: { messages: [{ role: "user", content: task }] } };
169
+ // Crypto / Finance
170
+ case "coingecko": {
171
+ // Extract coin name from task
172
+ const coins = ["bitcoin", "ethereum", "solana", "base", "usdc"];
173
+ const coin = coins.find(c => task.toLowerCase().includes(c)) || "ethereum";
174
+ const coinId = coin === "eth" ? "ethereum" : coin;
175
+ return { endpoint: "simple-price", params: { ids: coinId, vs_currencies: "usd" } };
176
+ }
177
+ case "alphavantage":
178
+ return { endpoint: "global-quote", params: { symbol: task.match(/[A-Z]{1,5}/)?.[0] || "ETH" } };
179
+ // LLM providers — need "messages" or "prompt"
180
+ case "openai":
181
+ case "anthropic":
182
+ case "gemini":
183
+ case "deepseek":
184
+ case "grok":
185
+ case "groq":
186
+ case "mistral":
187
+ return { endpoint: "chat", params: { messages: [{ role: "user", content: task }] } };
188
+ // Image/Media generation
189
+ case "fal":
190
+ return { endpoint: "generate", params: { prompt: task } };
191
+ case "stability-ai":
192
+ return { endpoint: "generate-core", params: { prompt: task } };
193
+ case "replicate":
194
+ return { endpoint: "run-model", params: { input: { prompt: task } } };
195
+ case "suno":
196
+ return { endpoint: "generate-music", params: { prompt: task } };
197
+ // Code execution
198
+ case "judge0":
199
+ return { endpoint: "execute-code", params: { source_code: task, language_id: 63 } }; // 63 = JavaScript
200
+ // Screenshot
201
+ case "screenshotone":
202
+ return { endpoint: "take-screenshot", params: { url: url || task } };
203
+ // Social
204
+ case "x":
205
+ return { endpoint: "search-recent-tweets", params: { query: task } };
206
+ // Knowledge
207
+ case "wolframalpha":
208
+ return { endpoint: "short-answer", params: { input: task } };
209
+ // Security
210
+ case "virustotal":
211
+ return { endpoint: url ? "url-report" : "domain-report", params: url ? { resource: url } : { domain: task } };
212
+ // Default — try common param names
213
+ default:
214
+ return {
215
+ endpoint: endpoints[0]?.toLowerCase().replace(/\s+/g, "-") || "search",
216
+ params: { query: task, prompt: task, q: task, input: task },
217
+ };
218
+ }
219
+ }
220
+ //# sourceMappingURL=locus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locus.js","sourceRoot":"","sources":["../../../src/wallet/handlers/locus.ts"],"names":[],"mappings":"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"}
@@ -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;AASvE,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,CAkFxB"}
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;AAWvE,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,CA4FxB"}
@@ -8,6 +8,8 @@ import { handleL402Payment } from "./handlers/l402.js";
8
8
  import { handleMPPPayment } from "./handlers/mpp.js";
9
9
  import { handleNanopayment } from "./handlers/nanopayments.js";
10
10
  import { handleFreePayment } from "./handlers/free.js";
11
+ import { handleBankrPayment } from "./handlers/bankr.js";
12
+ import { handleLocusPayment } from "./handlers/locus.js";
11
13
  import { ensureSufficientBalance } from "./bridge.js";
12
14
  export async function routePayment(wallet, agent, task, options) {
13
15
  const protocol = determinePaymentProtocol(agent);
@@ -47,6 +49,14 @@ export async function routePayment(wallet, agent, task, options) {
47
49
  const result = await handleNanopayment(wallet, agent, task);
48
50
  return { ...result, protocol: "circle-nanopayments", costUSDC: parseFloat(agent.pricing?.amount ?? "0") };
49
51
  }
52
+ case "bankr": {
53
+ const result = await handleBankrPayment(wallet, agent, task);
54
+ return { ...result, protocol: "bankr", costUSDC: parseFloat(agent.pricing?.amount ?? "0") };
55
+ }
56
+ case "locus": {
57
+ const result = await handleLocusPayment(wallet, agent, task);
58
+ return { ...result, protocol: "locus", costUSDC: parseFloat(agent.pricing?.amount ?? "0") };
59
+ }
50
60
  case "free":
51
61
  case "mcp": {
52
62
  // MCP servers and free tools — try to execute directly
@@ -106,6 +116,8 @@ function determinePaymentProtocol(agent) {
106
116
  case "l402-directory": return "l402";
107
117
  case "mcp-registry": return "free";
108
118
  case "skills-registry": return "free";
119
+ case "bankr": return "bankr";
120
+ case "locus": return "locus";
109
121
  default: return agent.protocol === "onchain" ? "acp" : "free";
110
122
  }
111
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"payment-router.js","sourceRoot":"","sources":["../../src/wallet/payment-router.ts"],"names":[],"mappings":"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"}
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.14.0",
3
+ "version": "0.16.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/matching.ts CHANGED
@@ -147,6 +147,15 @@ function multiCriteriaScore(agent: UnifiedAgent): number {
147
147
  const endpointCount = Object.values(agent.endpoints).filter(Boolean).length;
148
148
  score += endpointCount * 2;
149
149
 
150
+ // MCP servers with remote endpoints are directly callable — boost them
151
+ // They don't have reputation data so they'd otherwise rank too low
152
+ if (agent.protocol === "mcp" && agent.endpoints.mcp) {
153
+ score += 8; // Callable remote MCP server bonus
154
+ }
155
+
156
+ // Free tools get a small accessibility bonus (no wallet needed)
157
+ if (agent.pricing?.model === "free") score += 3;
158
+
150
159
  // Recency
151
160
  if (agent.lastSeen) {
152
161
  const hoursSince = (Date.now() - agent.lastSeen) / (1000 * 60 * 60);
@@ -1,26 +1,37 @@
1
1
  /**
2
2
  * Virtuals ACP Source Adapter
3
- * Searches the ACP marketplace via CLI (most reliable method)
3
+ * Searches the ACP marketplace via HTTP API at acpx.virtuals.gg
4
4
  */
5
5
 
6
- import { execSync } from "child_process";
7
6
  import type { SourceAdapter, UnifiedAgent, SourceSearchOptions } from "./types.js";
8
7
 
9
- const ACP_CLI_PATH = "/tmp/openclaw-acp";
8
+ const ACP_API = "https://acpx.virtuals.gg/api/agents";
10
9
 
11
10
  export const acpAdapter: SourceAdapter = {
12
11
  name: "acp",
13
12
  displayName: "Virtuals ACP Marketplace",
14
13
 
15
14
  async search(query: string, options?: SourceSearchOptions): Promise<UnifiedAgent[]> {
15
+ const limit = options?.limit ?? 20;
16
+ const timeout = options?.timeout ?? 15000;
17
+
16
18
  try {
17
- const result = execSync(
18
- `cd ${ACP_CLI_PATH} && npx acp browse "${query}" --json 2>/dev/null`,
19
- { timeout: options?.timeout ?? 30000, encoding: "utf-8" }
20
- );
19
+ const url = new URL(ACP_API);
20
+ if (query) url.searchParams.set("q", query);
21
+ url.searchParams.set("limit", String(limit));
22
+
23
+ const res = await fetch(url.toString(), {
24
+ signal: AbortSignal.timeout(timeout),
25
+ });
26
+
27
+ if (!res.ok) return [];
28
+
29
+ const json = await res.json();
30
+ const agents = json.data ?? json.results ?? json;
31
+
32
+ if (!Array.isArray(agents)) return [];
21
33
 
22
- const agents: any[] = JSON.parse(result);
23
- return agents.slice(0, options?.limit ?? 50).map(mapAcpAgent);
34
+ return agents.slice(0, limit).map(mapAcpAgent);
24
35
  } catch {
25
36
  return [];
26
37
  }
@@ -28,11 +39,10 @@ export const acpAdapter: SourceAdapter = {
28
39
 
29
40
  async ping(): Promise<boolean> {
30
41
  try {
31
- execSync(`cd ${ACP_CLI_PATH} && npx acp whoami --json 2>/dev/null`, {
32
- timeout: 10000,
33
- encoding: "utf-8",
42
+ const res = await fetch(`${ACP_API}?limit=1`, {
43
+ signal: AbortSignal.timeout(5000),
34
44
  });
35
- return true;
45
+ return res.ok;
36
46
  } catch {
37
47
  return false;
38
48
  }
@@ -40,7 +50,7 @@ export const acpAdapter: SourceAdapter = {
40
50
  };
41
51
 
42
52
  function mapAcpAgent(agent: any): UnifiedAgent {
43
- const offerings = agent.jobs ?? agent.jobOfferings ?? [];
53
+ const offerings = agent.jobs ?? agent.jobOfferings ?? agent.offerings ?? [];
44
54
  const topOffering = offerings[0];
45
55
 
46
56
  return {
@@ -49,7 +59,7 @@ function mapAcpAgent(agent: any): UnifiedAgent {
49
59
  name: agent.name ?? "Unknown ACP Agent",
50
60
  description: agent.description ?? offerings.map((o: any) => o.description).join(". ") ?? "",
51
61
  categories: extractAcpCategories(agent, offerings),
52
- capabilities: offerings.map((o: any) => `${o.name}: ${o.description ?? ""}`),
62
+ capabilities: offerings.map((o: any) => `${o.name}: ${o.description ?? ""}${o.requirement ? ` [expects: ${typeof o.requirement === 'object' ? Object.keys(o.requirement).join(', ') : o.requirement}]` : ""}`),
53
63
  source: "acp",
54
64
  protocol: "acp",
55
65
  endpoints: {
@@ -59,18 +69,17 @@ function mapAcpAgent(agent: any): UnifiedAgent {
59
69
  },
60
70
  },
61
71
  reputation: agent.metrics ? {
62
- score: agent.metrics.successRate ?? 0,
63
- count: agent.metrics.completedJobs ?? agent.metrics.successfulJobCount ?? 0,
72
+ score: agent.metrics.successRate ?? agent.successRate ?? 0,
73
+ count: agent.metrics.successfulJobCount ?? agent.successfulJobCount ?? 0,
64
74
  source: "acp",
65
75
  } : undefined,
66
- // Surface online status — skip offline agents in ranking
67
76
  lastSeen: agent.metrics?.isOnline ? Date.now() : (agent.metrics?.minsFromLastOnlineTime ? Date.now() - agent.metrics.minsFromLastOnlineTime * 60000 : undefined),
68
77
  pricing: topOffering ? {
69
78
  model: "escrow",
70
- amount: String(topOffering.price ?? "0"),
79
+ amount: String(topOffering.price ?? topOffering.priceUsd ?? "0"),
71
80
  currency: "USDC",
72
81
  } : undefined,
73
- verified: true, // ACP agents are registered
82
+ verified: true,
74
83
  raw: agent,
75
84
  };
76
85
  }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Bankr Source Adapter
3
+ * Searches Bankr LLM Gateway for trading/DeFi agent services
4
+ * API at https://api.bankr.bot
5
+ */
6
+
7
+ import type { SourceAdapter, UnifiedAgent, SourceSearchOptions } from "./types.js";
8
+
9
+ const BANKR_API = "https://api.bankr.bot";
10
+
11
+ export const bankrAdapter: SourceAdapter = {
12
+ name: "bankr",
13
+ displayName: "Bankr Trading Gateway",
14
+
15
+ async search(query: string, options?: SourceSearchOptions): Promise<UnifiedAgent[]> {
16
+ const limit = options?.limit ?? 20;
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));
31
+
32
+ const res = await fetch(url.toString(), {
33
+ headers,
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;
41
+
42
+ if (!Array.isArray(agents)) return [];
43
+
44
+ return agents.slice(0, limit).map(mapBankrAgent);
45
+ } catch {
46
+ return [];
47
+ }
48
+ },
49
+
50
+ async ping(): Promise<boolean> {
51
+ try {
52
+ const res = await fetch(`${BANKR_API}/agent/prompt`, {
53
+ method: "POST",
54
+ headers: { "Content-Type": "application/json" },
55
+ body: JSON.stringify({ prompt: "ping" }),
56
+ signal: AbortSignal.timeout(5000),
57
+ });
58
+ // 401 means the API is alive, just needs auth
59
+ return res.status === 401 || res.ok;
60
+ } catch {
61
+ return false;
62
+ }
63
+ },
64
+ };
65
+
66
+ function mapBankrAgent(agent: any): UnifiedAgent {
67
+ return {
68
+ id: `bankr:${agent.id ?? agent.name ?? agent.slug}`,
69
+ nativeId: agent.id ?? agent.slug ?? "",
70
+ name: agent.name ?? "Bankr Agent",
71
+ description: agent.description ?? "",
72
+ categories: agent.categories ?? ["defi", "trading"],
73
+ capabilities: agent.capabilities ?? [agent.description ?? ""].filter(Boolean),
74
+ source: "bankr",
75
+ protocol: "http",
76
+ endpoints: {
77
+ http: agent.endpoint ?? `${BANKR_API}/agent/prompt`,
78
+ },
79
+ pricing: {
80
+ model: agent.pricing?.model ?? "per-call",
81
+ amount: agent.pricing?.amount ?? "0.01",
82
+ currency: agent.pricing?.currency ?? "USDC",
83
+ },
84
+ verified: agent.verified ?? true,
85
+ raw: agent,
86
+ };
87
+ }
@@ -14,6 +14,9 @@ import { a2aWellknownAdapter } from "./a2a-wellknown.js";
14
14
  import { l402DirectoryAdapter } from "./l402-directory.js";
15
15
  import { adpAdapter } from "./adp.js";
16
16
  import { skillsAdapter } from "./skills.js";
17
+ import { bankrAdapter } from "./bankr.js";
18
+ import { locusAdapter } from "./locus.js";
19
+ import { olasAdapter } from "./olas.js";
17
20
 
18
21
  export interface SourceRegistryConfig {
19
22
  /** Kompass SDK config (for kompass-registry adapter) */
@@ -34,6 +37,9 @@ export function createAllSources(config?: SourceRegistryConfig): SourceAdapter[]
34
37
  l402DirectoryAdapter,
35
38
  adpAdapter,
36
39
  skillsAdapter,
40
+ bankrAdapter,
41
+ locusAdapter,
42
+ olasAdapter,
37
43
  ];
38
44
 
39
45
  // Add Kompass registry if config provided