kompass-sdk 0.15.0 → 0.17.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.
@@ -1,6 +1,6 @@
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
  import type { SourceAdapter } from "./types.js";
6
6
  export declare const acpAdapter: SourceAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/sources/acp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAqC,MAAM,YAAY,CAAC;AAInF,eAAO,MAAM,UAAU,EAAE,aA6BxB,CAAC"}
1
+ {"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/sources/acp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAqC,MAAM,YAAY,CAAC;AAInF,eAAO,MAAM,UAAU,EAAE,aA2DxB,CAAC"}
@@ -1,17 +1,46 @@
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
- import { execSync } from "child_process";
6
- const ACP_CLI_PATH = "/tmp/openclaw-acp";
5
+ const ACP_API = "https://acpx.virtuals.gg/api/agents";
7
6
  export const acpAdapter = {
8
7
  name: "acp",
9
8
  displayName: "Virtuals ACP Marketplace",
10
9
  async search(query, options) {
10
+ const limit = options?.limit ?? 20;
11
+ const timeout = options?.timeout ?? 15000;
11
12
  try {
12
- const result = execSync(`cd ${ACP_CLI_PATH} && npx acp browse "${query}" --json 2>/dev/null`, { timeout: options?.timeout ?? 30000, encoding: "utf-8" });
13
- const agents = JSON.parse(result);
14
- return agents.slice(0, options?.limit ?? 50).map(mapAcpAgent);
13
+ // ACP API doesn't support search fetch all and filter client-side
14
+ const url = new URL(ACP_API);
15
+ url.searchParams.set("limit", "100");
16
+ const res = await fetch(url.toString(), {
17
+ signal: AbortSignal.timeout(timeout),
18
+ });
19
+ if (!res.ok)
20
+ return [];
21
+ const json = await res.json();
22
+ const agents = json.data ?? json.results ?? json;
23
+ if (!Array.isArray(agents))
24
+ return [];
25
+ // Only return agents with offerings (can actually be hired)
26
+ const withOfferings = agents.filter((a) => {
27
+ const offerings = a.jobs ?? a.jobOfferings ?? a.offerings ?? [];
28
+ return offerings.length > 0;
29
+ });
30
+ // Client-side text matching if query provided
31
+ let filtered = withOfferings;
32
+ if (query) {
33
+ const lower = query.toLowerCase();
34
+ const terms = lower.split(/\s+/).filter(t => t.length > 2);
35
+ filtered = withOfferings.filter((a) => {
36
+ const text = `${a.name} ${a.description ?? ""} ${(a.jobs ?? a.offerings ?? []).map((o) => `${o.name} ${o.description ?? ""}`).join(" ")}`.toLowerCase();
37
+ return terms.some(t => text.includes(t));
38
+ });
39
+ // If no matches, return all agents with offerings
40
+ if (filtered.length === 0)
41
+ filtered = withOfferings;
42
+ }
43
+ return filtered.slice(0, limit).map(mapAcpAgent);
15
44
  }
16
45
  catch {
17
46
  return [];
@@ -19,11 +48,10 @@ export const acpAdapter = {
19
48
  },
20
49
  async ping() {
21
50
  try {
22
- execSync(`cd ${ACP_CLI_PATH} && npx acp whoami --json 2>/dev/null`, {
23
- timeout: 10000,
24
- encoding: "utf-8",
51
+ const res = await fetch(`${ACP_API}?limit=1`, {
52
+ signal: AbortSignal.timeout(5000),
25
53
  });
26
- return true;
54
+ return res.ok;
27
55
  }
28
56
  catch {
29
57
  return false;
@@ -31,7 +59,7 @@ export const acpAdapter = {
31
59
  },
32
60
  };
33
61
  function mapAcpAgent(agent) {
34
- const offerings = agent.jobs ?? agent.jobOfferings ?? [];
62
+ const offerings = agent.jobs ?? agent.jobOfferings ?? agent.offerings ?? [];
35
63
  const topOffering = offerings[0];
36
64
  return {
37
65
  id: `acp:${agent.id ?? agent.walletAddress}`,
@@ -49,18 +77,17 @@ function mapAcpAgent(agent) {
49
77
  },
50
78
  },
51
79
  reputation: agent.metrics ? {
52
- score: agent.metrics.successRate ?? 0,
53
- count: agent.metrics.completedJobs ?? agent.metrics.successfulJobCount ?? 0,
80
+ score: agent.metrics.successRate ?? agent.successRate ?? 0,
81
+ count: agent.metrics.successfulJobCount ?? agent.successfulJobCount ?? 0,
54
82
  source: "acp",
55
83
  } : undefined,
56
- // Surface online status — skip offline agents in ranking
57
84
  lastSeen: agent.metrics?.isOnline ? Date.now() : (agent.metrics?.minsFromLastOnlineTime ? Date.now() - agent.metrics.minsFromLastOnlineTime * 60000 : undefined),
58
85
  pricing: topOffering ? {
59
86
  model: "escrow",
60
- amount: String(topOffering.price ?? "0"),
87
+ amount: String(topOffering.price ?? topOffering.priceUsd ?? "0"),
61
88
  currency: "USDC",
62
89
  } : undefined,
63
- verified: true, // ACP agents are registered
90
+ verified: true,
64
91
  raw: agent,
65
92
  };
66
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/sources/acp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/sources/acp.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAajD,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IACzC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,aAAa,EAAE,CAyB/E;AAED,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAcjD,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IACzC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,aAAa,EAAE,CA0B/E;AAED,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -13,6 +13,7 @@ import { adpAdapter } from "./adp.js";
13
13
  import { skillsAdapter } from "./skills.js";
14
14
  import { bankrAdapter } from "./bankr.js";
15
15
  import { locusAdapter } from "./locus.js";
16
+ import { olasAdapter } from "./olas.js";
16
17
  export function createAllSources(config) {
17
18
  const sources = [
18
19
  mcpRegistryAdapter,
@@ -25,6 +26,7 @@ export function createAllSources(config) {
25
26
  skillsAdapter,
26
27
  bankrAdapter,
27
28
  locusAdapter,
29
+ olasAdapter,
28
30
  ];
29
31
  // Add Kompass registry if config provided
30
32
  if (config?.kompassConfig) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAW1C,MAAM,UAAU,gBAAgB,CAAC,MAA6B;IAC5D,MAAM,OAAO,GAAoB;QAC/B,kBAAkB;QAClB,UAAU;QACV,oBAAoB;QACpB,oBAAoB,CAAC,MAAM,EAAE,cAAc,IAAI,cAAc,CAAC;QAC9D,mBAAmB;QACnB,oBAAoB;QACpB,UAAU;QACV,aAAa;QACb,YAAY;QACZ,YAAY;KACb,CAAC;IAEF,0CAA0C;IAC1C,IAAI,MAAM,EAAE,aAAa,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,EAAE,cAAc,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,cAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAWxC,MAAM,UAAU,gBAAgB,CAAC,MAA6B;IAC5D,MAAM,OAAO,GAAoB;QAC/B,kBAAkB;QAClB,UAAU;QACV,oBAAoB;QACpB,oBAAoB,CAAC,MAAM,EAAE,cAAc,IAAI,cAAc,CAAC;QAC9D,mBAAmB;QACnB,oBAAoB;QACpB,UAAU;QACV,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,WAAW;KACZ,CAAC;IAEF,0CAA0C;IAC1C,IAAI,MAAM,EAAE,aAAa,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,EAAE,cAAc,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,cAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Olas Mech Marketplace Source Adapter
3
+ * Queries the Olas marketplace subgraph (The Graph) to discover AI agent mechs.
4
+ * Mechs are autonomous agents that accept prompts and return deliverables.
5
+ * Supports Gnosis, Base, Polygon, Optimism chains.
6
+ *
7
+ * Subgraph: https://api.subgraph.autonolas.tech/api/proxy/marketplace-{chain}
8
+ * Docs: https://docs.olas.network
9
+ */
10
+ import type { SourceAdapter } from "./types.js";
11
+ export declare const olasAdapter: SourceAdapter;
12
+ //# sourceMappingURL=olas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"olas.d.ts","sourceRoot":"","sources":["../../src/sources/olas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAqC,MAAM,YAAY,CAAC;AA4EnF,eAAO,MAAM,WAAW,EAAE,aA4CzB,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Olas Mech Marketplace Source Adapter
3
+ * Queries the Olas marketplace subgraph (The Graph) to discover AI agent mechs.
4
+ * Mechs are autonomous agents that accept prompts and return deliverables.
5
+ * Supports Gnosis, Base, Polygon, Optimism chains.
6
+ *
7
+ * Subgraph: https://api.subgraph.autonolas.tech/api/proxy/marketplace-{chain}
8
+ * Docs: https://docs.olas.network
9
+ */
10
+ const SUBGRAPH_URLS = {
11
+ gnosis: "https://api.subgraph.autonolas.tech/api/proxy/marketplace-gnosis",
12
+ base: "https://api.subgraph.autonolas.tech/api/proxy/marketplace-base",
13
+ };
14
+ const MECH_AGENTS_QUERY = `{
15
+ mechAgents(first: 50, orderBy: totalTransactions, orderDirection: desc) {
16
+ id
17
+ address
18
+ agentHash
19
+ totalTransactions
20
+ service {
21
+ serviceId
22
+ totalRequests
23
+ totalDeliveries
24
+ }
25
+ }
26
+ }`;
27
+ // Cache mechs — refresh every 10 minutes
28
+ let mechCache = null;
29
+ let cacheTime = 0;
30
+ const CACHE_TTL = 10 * 60 * 1000;
31
+ async function fetchMechs(timeout) {
32
+ if (mechCache && Date.now() - cacheTime < CACHE_TTL) {
33
+ return mechCache;
34
+ }
35
+ const allMechs = [];
36
+ // Query both Gnosis and Base subgraphs
37
+ for (const [chain, url] of Object.entries(SUBGRAPH_URLS)) {
38
+ try {
39
+ const res = await fetch(url, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json" },
42
+ body: JSON.stringify({ query: MECH_AGENTS_QUERY }),
43
+ signal: AbortSignal.timeout(timeout),
44
+ });
45
+ if (!res.ok)
46
+ continue;
47
+ const json = await res.json();
48
+ const agents = json.data?.mechAgents ?? [];
49
+ for (const agent of agents) {
50
+ allMechs.push({ ...agent, _chain: chain });
51
+ }
52
+ }
53
+ catch {
54
+ // Chain subgraph unavailable, continue with others
55
+ }
56
+ }
57
+ if (allMechs.length > 0) {
58
+ mechCache = allMechs;
59
+ cacheTime = Date.now();
60
+ }
61
+ return mechCache ?? [];
62
+ }
63
+ export const olasAdapter = {
64
+ name: "olas",
65
+ displayName: "Olas Mech Marketplace",
66
+ async search(query, options) {
67
+ const limit = options?.limit ?? 20;
68
+ const timeout = options?.timeout ?? 10000;
69
+ try {
70
+ const mechs = await fetchMechs(timeout);
71
+ if (!query)
72
+ return mechs.slice(0, limit).map(mapMech);
73
+ // Score mechs by transaction volume and filter by relevance
74
+ // Since mechs don't have descriptions, match against known tool categories
75
+ const lower = query.toLowerCase();
76
+ const relevant = mechs.filter(() => {
77
+ // Olas mechs handle: predictions, research, analysis, trading signals
78
+ const olasKeywords = ["predict", "research", "analyze", "trade", "ai", "agent", "mech", "autonomous", "forecast", "oracle", "data"];
79
+ return olasKeywords.some(k => lower.includes(k)) || true; // Return all if query is general
80
+ });
81
+ return relevant
82
+ .sort((a, b) => parseInt(b.totalTransactions) - parseInt(a.totalTransactions))
83
+ .slice(0, limit)
84
+ .map(mapMech);
85
+ }
86
+ catch {
87
+ return [];
88
+ }
89
+ },
90
+ async ping() {
91
+ try {
92
+ const res = await fetch(SUBGRAPH_URLS.gnosis, {
93
+ method: "POST",
94
+ headers: { "Content-Type": "application/json" },
95
+ body: JSON.stringify({ query: "{ global(id: \"global\") { totalMechs } }" }),
96
+ signal: AbortSignal.timeout(5000),
97
+ });
98
+ return res.ok;
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ },
104
+ };
105
+ function mapMech(mech) {
106
+ const chain = mech._chain || "gnosis";
107
+ const txCount = parseInt(mech.totalTransactions) || 0;
108
+ const deliveries = parseInt(mech.service?.totalDeliveries || "0");
109
+ const requests = parseInt(mech.service?.totalRequests || "0");
110
+ const successRate = requests > 0 ? Math.round((deliveries / requests) * 100) : 0;
111
+ return {
112
+ id: `olas:${chain}:${mech.address}`,
113
+ nativeId: mech.address,
114
+ name: `Olas Mech ${mech.address.slice(0, 8)}...${mech.address.slice(-4)}`,
115
+ description: `Autonomous AI agent on Olas Marketplace (${chain}). ${txCount} transactions, ${deliveries} deliveries. Accepts prompts and returns AI-powered results via on-chain requests.`,
116
+ categories: ["ai", "autonomous", "prediction"],
117
+ capabilities: [
118
+ "AI prompt execution",
119
+ "Prediction markets",
120
+ "Research and analysis",
121
+ "On-chain autonomous operation",
122
+ ],
123
+ source: "olas",
124
+ protocol: "http",
125
+ endpoints: {
126
+ http: `https://mech.tech/mech/${mech.address}`,
127
+ },
128
+ reputation: {
129
+ score: successRate,
130
+ count: deliveries,
131
+ source: `olas-${chain}`,
132
+ },
133
+ pricing: {
134
+ model: "per-call",
135
+ amount: "0.01",
136
+ currency: "OLAS",
137
+ },
138
+ verified: txCount > 10,
139
+ lastSeen: txCount > 0 ? Date.now() : undefined,
140
+ raw: mech,
141
+ };
142
+ }
143
+ //# sourceMappingURL=olas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"olas.js","sourceRoot":"","sources":["../../src/sources/olas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,aAAa,GAA2B;IAC5C,MAAM,EAAE,kEAAkE;IAC1E,IAAI,EAAE,gEAAgE;CACvE,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;;;;;;;EAYxB,CAAC;AAcH,yCAAyC;AACzC,IAAI,SAAS,GAAuB,IAAI,CAAC;AACzC,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjC,KAAK,UAAU,UAAU,CAAC,OAAe;IACvC,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAgB,EAAE,CAAC;IAEjC,uCAAuC;IACvC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;gBAClD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;aACrC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,SAAS;YAEtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC;YAE3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAS,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,SAAS,GAAG,QAAQ,CAAC;QACrB,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,SAAS,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,IAAI,EAAE,MAAa;IACnB,WAAW,EAAE,uBAAuB;IAEpC,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAA6B;QACvD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEtD,4DAA4D;YAC5D,2EAA2E;YAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;gBACjC,sEAAsE;gBACtE,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACpI,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,iCAAiC;YAC7F,CAAC,CAAC,CAAC;YAEH,OAAO,QAAQ;iBACZ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;iBAC7E,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;iBACf,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;gBAC5C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;gBAC5E,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC;AAEF,SAAS,OAAO,CAAC,IAAe;IAC9B,MAAM,KAAK,GAAI,IAAY,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,IAAI,GAAG,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjF,OAAO;QACL,EAAE,EAAE,QAAQ,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;QACnC,QAAQ,EAAE,IAAI,CAAC,OAAO;QACtB,IAAI,EAAE,aAAa,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACzE,WAAW,EAAE,4CAA4C,KAAK,MAAM,OAAO,kBAAkB,UAAU,oFAAoF;QAC3L,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC;QAC9C,YAAY,EAAE;YACZ,qBAAqB;YACrB,oBAAoB;YACpB,uBAAuB;YACvB,+BAA+B;SAChC;QACD,MAAM,EAAE,MAAa;QACrB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE;YACT,IAAI,EAAE,0BAA0B,IAAI,CAAC,OAAO,EAAE;SAC/C;QACD,UAAU,EAAE;YACV,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,QAAQ,KAAK,EAAE;SACxB;QACD,OAAO,EAAE;YACP,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,MAAM;SACjB;QACD,QAAQ,EAAE,OAAO,GAAG,EAAE;QACtB,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9C,GAAG,EAAE,IAAI;KACV,CAAC;AACJ,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * UnifiedAgent is the normalized representation of an agent
5
5
  * from ANY source (ACP, MCP, ERC-8004, x402, A2A, L402, etc.)
6
6
  */
7
- export type AgentSource = "kompass-registry" | "acp" | "mcp-registry" | "x402-ecosystem" | "erc8004" | "adp" | "a2a-wellknown" | "l402-directory" | "skills-registry" | "bankr" | "locus";
7
+ export type AgentSource = "kompass-registry" | "acp" | "mcp-registry" | "x402-ecosystem" | "erc8004" | "adp" | "a2a-wellknown" | "l402-directory" | "skills-registry" | "bankr" | "locus" | "olas";
8
8
  export type AgentProtocol = "acp" | "mcp" | "x402" | "a2a" | "http" | "l402" | "onchain" | "skill";
9
9
  export interface UnifiedAgent {
10
10
  /** Globally unique ID: "${source}:${nativeId}" */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,KAAK,GACL,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,KAAK,GACL,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2CAA2C;IAC3C,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,SAAS,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACzD,CAAC;IACF,+BAA+B;IAC/B,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mBAAmB;IACnB,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;QACnE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9E,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,KAAK,GACL,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,KAAK,GACL,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,OAAO,GACP,OAAO,GACP,MAAM,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnG,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2CAA2C;IAC3C,MAAM,EAAE,WAAW,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,SAAS,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACzD,CAAC;IACF,+BAA+B;IAC/B,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mBAAmB;IACnB,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;QACnE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9E,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B"}
@@ -44,8 +44,8 @@ export async function handleBankrPayment(wallet, agent, task) {
44
44
  };
45
45
  }
46
46
  // Step 2: Poll for result
47
- const maxAttempts = 30;
48
- const pollInterval = 2000;
47
+ const maxAttempts = 60;
48
+ const pollInterval = 3000;
49
49
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
50
50
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
51
51
  const pollRes = await fetch(`${BANKR_API}/agent/job/${jobId}`, {
@@ -1 +1 @@
1
- {"version":3,"file":"locus.d.ts","sourceRoot":"","sources":["../../../src/wallet/handlers/locus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,wBAAsB,kBAAkB,CACtC,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,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkJvE"}
1
+ {"version":3,"file":"locus.d.ts","sourceRoot":"","sources":["../../../src/wallet/handlers/locus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D,wBAAsB,kBAAkB,CACtC,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,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwJvE"}
@@ -15,9 +15,10 @@ const LOCUS_API = "https://beta-api.paywithlocus.com/api";
15
15
  export async function handleLocusPayment(wallet, agent, task) {
16
16
  let apiKey = process.env.LOCUS_API_KEY;
17
17
  try {
18
- // Step 1: Self-register if no API key
18
+ // Step 1: Get or create Locus API key + fund from Kompass wallet
19
19
  if (!apiKey) {
20
20
  const walletAddress = wallet.getAddress();
21
+ // Self-register with Locus
21
22
  const registerRes = await fetch(`${LOCUS_API}/register`, {
22
23
  method: "POST",
23
24
  headers: { "Content-Type": "application/json" },
@@ -28,25 +29,18 @@ export async function handleLocusPayment(wallet, agent, task) {
28
29
  signal: AbortSignal.timeout(15000),
29
30
  });
30
31
  if (!registerRes.ok) {
31
- const errBody = await registerRes.text().catch(() => "");
32
32
  return {
33
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
- },
34
+ deliverable: { error: "Locus registration failed. Set LOCUS_API_KEY env var." },
39
35
  };
40
36
  }
41
37
  const registerData = await registerRes.json();
42
38
  apiKey = registerData.data?.apiKey;
39
+ const locusWalletAddress = registerData.data?.ownerAddress;
43
40
  if (!apiKey) {
44
- return {
45
- success: false,
46
- deliverable: { error: "Locus registration did not return an API key" },
47
- };
41
+ return { success: false, deliverable: { error: "Locus registration did not return an API key" } };
48
42
  }
49
- // Wait for wallet deployment
43
+ // Wait for Locus wallet deployment
50
44
  for (let i = 0; i < 10; i++) {
51
45
  const statusRes = await fetch(`${LOCUS_API}/status`, {
52
46
  headers: { "Authorization": `Bearer ${apiKey}` },
@@ -54,8 +48,21 @@ export async function handleLocusPayment(wallet, agent, task) {
54
48
  }).catch(() => null);
55
49
  if (statusRes?.ok) {
56
50
  const statusData = await statusRes.json();
57
- if (statusData.data?.walletStatus === "deployed")
51
+ if (statusData.data?.walletStatus === "deployed") {
52
+ // Fund Locus wallet from Kompass wallet (just-in-time)
53
+ const locusAddr = statusData.data?.walletAddress;
54
+ if (locusAddr) {
55
+ try {
56
+ const { topupACPWallet } = await import("../bridge.js");
57
+ await topupACPWallet(wallet, locusAddr, 0.10); // Fund $0.10
58
+ console.log(`[Kompass] Funded Locus wallet ${locusAddr.slice(0, 10)}... with $0.10 USDC`);
59
+ }
60
+ catch (fundErr) {
61
+ console.log(`[Kompass] Locus funding failed: ${fundErr instanceof Error ? fundErr.message : fundErr}`);
62
+ }
63
+ }
58
64
  break;
65
+ }
59
66
  }
60
67
  await new Promise((r) => setTimeout(r, 3000));
61
68
  }
@@ -73,14 +80,13 @@ export async function handleLocusPayment(wallet, agent, task) {
73
80
  // We need to figure out the best endpoint for the task
74
81
  const provider = rawData.provider;
75
82
  const availableEndpoints = rawData.endpoints || [];
76
- // Pick the first/most relevant endpoint
77
- // For now use the first endpoint — the provider slug is already in the URL
78
- const endpoint = availableEndpoints[0]?.toLowerCase().replace(/\s+/g, "-") || "search";
83
+ // Pick the best endpoint and build the right params for each provider
84
+ const { endpoint, params } = buildLocusRequest(provider, availableEndpoints, task);
79
85
  const callUrl = `${LOCUS_API}/wrapped/${provider}/${endpoint}`;
80
86
  const callRes = await fetch(callUrl, {
81
87
  method: "POST",
82
88
  headers,
83
- body: JSON.stringify({ query: task, prompt: task, q: task }),
89
+ body: JSON.stringify(params),
84
90
  signal: AbortSignal.timeout(30000),
85
91
  });
86
92
  if (!callRes.ok) {
@@ -141,4 +147,81 @@ export async function handleLocusPayment(wallet, agent, task) {
141
147
  };
142
148
  }
143
149
  }
150
+ /**
151
+ * Build the right endpoint and params for each Locus wrapped API provider.
152
+ * Each provider has different input formats — this maps the natural language task
153
+ * to the correct API call based on the provider's docs.
154
+ */
155
+ function buildLocusRequest(provider, endpoints, task) {
156
+ // Extract URLs from task
157
+ const urlMatch = task.match(/https?:\/\/[^\s"']+/);
158
+ const url = urlMatch?.[0];
159
+ switch (provider) {
160
+ // Web scraping providers — need "url" param
161
+ case "firecrawl":
162
+ return { endpoint: url ? "scrape" : "search", params: url ? { url } : { query: task } };
163
+ case "abstract-web-scraping":
164
+ return { endpoint: "scrape", params: { url: url || task } };
165
+ case "diffbot":
166
+ return { endpoint: "analyze", params: { url: url || task } };
167
+ case "tavily":
168
+ return { endpoint: url ? "extract" : "search", params: url ? { urls: [url] } : { query: task } };
169
+ // Search providers — need "query" or "q" param
170
+ case "brave":
171
+ return { endpoint: "web-search", params: { q: task } };
172
+ case "exa":
173
+ return { endpoint: "search", params: { query: task } };
174
+ case "perplexity":
175
+ return { endpoint: "sonar-chat", params: { messages: [{ role: "user", content: task }] } };
176
+ // Crypto / Finance
177
+ case "coingecko": {
178
+ // Extract coin name from task
179
+ const coins = ["bitcoin", "ethereum", "solana", "base", "usdc"];
180
+ const coin = coins.find(c => task.toLowerCase().includes(c)) || "ethereum";
181
+ const coinId = coin === "eth" ? "ethereum" : coin;
182
+ return { endpoint: "simple-price", params: { ids: coinId, vs_currencies: "usd" } };
183
+ }
184
+ case "alphavantage":
185
+ return { endpoint: "global-quote", params: { symbol: task.match(/[A-Z]{1,5}/)?.[0] || "ETH" } };
186
+ // LLM providers — need "messages" or "prompt"
187
+ case "openai":
188
+ case "anthropic":
189
+ case "gemini":
190
+ case "deepseek":
191
+ case "grok":
192
+ case "groq":
193
+ case "mistral":
194
+ return { endpoint: "chat", params: { messages: [{ role: "user", content: task }] } };
195
+ // Image/Media generation
196
+ case "fal":
197
+ return { endpoint: "generate", params: { prompt: task } };
198
+ case "stability-ai":
199
+ return { endpoint: "generate-core", params: { prompt: task } };
200
+ case "replicate":
201
+ return { endpoint: "run-model", params: { input: { prompt: task } } };
202
+ case "suno":
203
+ return { endpoint: "generate-music", params: { prompt: task } };
204
+ // Code execution
205
+ case "judge0":
206
+ return { endpoint: "execute-code", params: { source_code: task, language_id: 63 } }; // 63 = JavaScript
207
+ // Screenshot
208
+ case "screenshotone":
209
+ return { endpoint: "take-screenshot", params: { url: url || task } };
210
+ // Social
211
+ case "x":
212
+ return { endpoint: "search-recent-tweets", params: { query: task } };
213
+ // Knowledge
214
+ case "wolframalpha":
215
+ return { endpoint: "short-answer", params: { input: task } };
216
+ // Security
217
+ case "virustotal":
218
+ return { endpoint: url ? "url-report" : "domain-report", params: url ? { resource: url } : { domain: task } };
219
+ // Default — try common param names
220
+ default:
221
+ return {
222
+ endpoint: endpoints[0]?.toLowerCase().replace(/\s+/g, "-") || "search",
223
+ params: { query: task, prompt: task, q: task, input: task },
224
+ };
225
+ }
226
+ }
144
227
  //# sourceMappingURL=locus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locus.js","sourceRoot":"","sources":["../../../src/wallet/handlers/locus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locus.js","sourceRoot":"","sources":["../../../src/wallet/handlers/locus.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * x402 Payment Handler
3
3
  * HTTP 402 + ERC-3009 transferWithAuthorization
4
- * Uses @x402/fetch (wrapFetchWithPaymentFromConfig) + @x402/evm (ExactEvmScheme)
4
+ * Uses x402Client with registerExactEvmScheme for v1+v2 support
5
5
  */
6
6
  import type { KompassWallet } from "../index.js";
7
7
  import type { UnifiedAgent } from "../../sources/types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../../../src/wallet/handlers/x402.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,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,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiCvE"}
1
+ {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../../../src/wallet/handlers/x402.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,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,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCvE"}
@@ -1,26 +1,32 @@
1
1
  /**
2
2
  * x402 Payment Handler
3
3
  * HTTP 402 + ERC-3009 transferWithAuthorization
4
- * Uses @x402/fetch (wrapFetchWithPaymentFromConfig) + @x402/evm (ExactEvmScheme)
4
+ * Uses x402Client with registerExactEvmScheme for v1+v2 support
5
5
  */
6
- import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
7
- import { ExactEvmScheme, toClientEvmSigner } from "@x402/evm";
6
+ import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
7
+ import { registerExactEvmScheme } from "@x402/evm/exact/client";
8
8
  export async function handleX402Payment(wallet, agent, task) {
9
9
  const endpoint = agent.endpoints.x402 ?? agent.endpoints.http;
10
10
  if (!endpoint) {
11
11
  return { success: false, deliverable: { error: "No x402 endpoint" } };
12
12
  }
13
- const signer = toClientEvmSigner(wallet.getAccount());
14
- const paidFetch = wrapFetchWithPaymentFromConfig(fetch, {
15
- schemes: [{ network: "eip155:*", client: new ExactEvmScheme(signer) }],
16
- });
17
13
  try {
18
- const res = await paidFetch(endpoint, {
19
- method: "POST",
20
- headers: { "Content-Type": "application/json" },
21
- body: JSON.stringify({ task }),
14
+ const account = wallet.getAccount();
15
+ const client = new x402Client();
16
+ registerExactEvmScheme(client, { signer: account });
17
+ const paidFetch = wrapFetchWithPayment(fetch, client);
18
+ // Try GET first (most x402 endpoints are GET), fall back to POST
19
+ let res = await paidFetch(endpoint, {
22
20
  signal: AbortSignal.timeout(30000),
23
21
  });
22
+ if (res.status === 404 || res.status === 405) {
23
+ res = await paidFetch(endpoint, {
24
+ method: "POST",
25
+ headers: { "Content-Type": "application/json" },
26
+ body: JSON.stringify({ task }),
27
+ signal: AbortSignal.timeout(30000),
28
+ });
29
+ }
24
30
  const paymentHeader = res.headers.get("PAYMENT-RESPONSE") ?? res.headers.get("payment-response");
25
31
  const data = await res.json().catch(() => null);
26
32
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"x402.js","sourceRoot":"","sources":["../../../src/wallet/handlers/x402.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAI9D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAqB,EACrB,KAAmB,EACnB,IAAY;IAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,8BAA8B,CAAC,KAAK,EAAE;QACtD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;KACvE,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;YAC9B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACjG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,EAAE;YACf,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC;IACJ,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;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"x402.js","sourceRoot":"","sources":["../../../src/wallet/handlers/x402.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAqB,EACrB,KAAmB,EACnB,IAAY;IAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,sBAAsB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEtD,iEAAiE;QACjE,IAAI,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;YAClC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;gBAC9B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACjG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,EAAE;YACf,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC;IACJ,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;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kompass-sdk",
3
- "version": "0.15.0",
3
+ "version": "0.17.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",
@@ -1,26 +1,56 @@
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
+ // ACP API doesn't support search — fetch all and filter client-side
20
+ const url = new URL(ACP_API);
21
+ url.searchParams.set("limit", "100");
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 [];
33
+
34
+ // Only return agents with offerings (can actually be hired)
35
+ const withOfferings = agents.filter((a: any) => {
36
+ const offerings = a.jobs ?? a.jobOfferings ?? a.offerings ?? [];
37
+ return offerings.length > 0;
38
+ });
39
+
40
+ // Client-side text matching if query provided
41
+ let filtered = withOfferings;
42
+ if (query) {
43
+ const lower = query.toLowerCase();
44
+ const terms = lower.split(/\s+/).filter(t => t.length > 2);
45
+ filtered = withOfferings.filter((a: any) => {
46
+ const text = `${a.name} ${a.description ?? ""} ${(a.jobs ?? a.offerings ?? []).map((o: any) => `${o.name} ${o.description ?? ""}`).join(" ")}`.toLowerCase();
47
+ return terms.some(t => text.includes(t));
48
+ });
49
+ // If no matches, return all agents with offerings
50
+ if (filtered.length === 0) filtered = withOfferings;
51
+ }
21
52
 
22
- const agents: any[] = JSON.parse(result);
23
- return agents.slice(0, options?.limit ?? 50).map(mapAcpAgent);
53
+ return filtered.slice(0, limit).map(mapAcpAgent);
24
54
  } catch {
25
55
  return [];
26
56
  }
@@ -28,11 +58,10 @@ export const acpAdapter: SourceAdapter = {
28
58
 
29
59
  async ping(): Promise<boolean> {
30
60
  try {
31
- execSync(`cd ${ACP_CLI_PATH} && npx acp whoami --json 2>/dev/null`, {
32
- timeout: 10000,
33
- encoding: "utf-8",
61
+ const res = await fetch(`${ACP_API}?limit=1`, {
62
+ signal: AbortSignal.timeout(5000),
34
63
  });
35
- return true;
64
+ return res.ok;
36
65
  } catch {
37
66
  return false;
38
67
  }
@@ -40,7 +69,7 @@ export const acpAdapter: SourceAdapter = {
40
69
  };
41
70
 
42
71
  function mapAcpAgent(agent: any): UnifiedAgent {
43
- const offerings = agent.jobs ?? agent.jobOfferings ?? [];
72
+ const offerings = agent.jobs ?? agent.jobOfferings ?? agent.offerings ?? [];
44
73
  const topOffering = offerings[0];
45
74
 
46
75
  return {
@@ -59,18 +88,17 @@ function mapAcpAgent(agent: any): UnifiedAgent {
59
88
  },
60
89
  },
61
90
  reputation: agent.metrics ? {
62
- score: agent.metrics.successRate ?? 0,
63
- count: agent.metrics.completedJobs ?? agent.metrics.successfulJobCount ?? 0,
91
+ score: agent.metrics.successRate ?? agent.successRate ?? 0,
92
+ count: agent.metrics.successfulJobCount ?? agent.successfulJobCount ?? 0,
64
93
  source: "acp",
65
94
  } : undefined,
66
- // Surface online status — skip offline agents in ranking
67
95
  lastSeen: agent.metrics?.isOnline ? Date.now() : (agent.metrics?.minsFromLastOnlineTime ? Date.now() - agent.metrics.minsFromLastOnlineTime * 60000 : undefined),
68
96
  pricing: topOffering ? {
69
97
  model: "escrow",
70
- amount: String(topOffering.price ?? "0"),
98
+ amount: String(topOffering.price ?? topOffering.priceUsd ?? "0"),
71
99
  currency: "USDC",
72
100
  } : undefined,
73
- verified: true, // ACP agents are registered
101
+ verified: true,
74
102
  raw: agent,
75
103
  };
76
104
  }
@@ -16,6 +16,7 @@ import { adpAdapter } from "./adp.js";
16
16
  import { skillsAdapter } from "./skills.js";
17
17
  import { bankrAdapter } from "./bankr.js";
18
18
  import { locusAdapter } from "./locus.js";
19
+ import { olasAdapter } from "./olas.js";
19
20
 
20
21
  export interface SourceRegistryConfig {
21
22
  /** Kompass SDK config (for kompass-registry adapter) */
@@ -38,6 +39,7 @@ export function createAllSources(config?: SourceRegistryConfig): SourceAdapter[]
38
39
  skillsAdapter,
39
40
  bankrAdapter,
40
41
  locusAdapter,
42
+ olasAdapter,
41
43
  ];
42
44
 
43
45
  // Add Kompass registry if config provided
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Olas Mech Marketplace Source Adapter
3
+ * Queries the Olas marketplace subgraph (The Graph) to discover AI agent mechs.
4
+ * Mechs are autonomous agents that accept prompts and return deliverables.
5
+ * Supports Gnosis, Base, Polygon, Optimism chains.
6
+ *
7
+ * Subgraph: https://api.subgraph.autonolas.tech/api/proxy/marketplace-{chain}
8
+ * Docs: https://docs.olas.network
9
+ */
10
+
11
+ import type { SourceAdapter, UnifiedAgent, SourceSearchOptions } from "./types.js";
12
+
13
+ const SUBGRAPH_URLS: Record<string, string> = {
14
+ gnosis: "https://api.subgraph.autonolas.tech/api/proxy/marketplace-gnosis",
15
+ base: "https://api.subgraph.autonolas.tech/api/proxy/marketplace-base",
16
+ };
17
+
18
+ const MECH_AGENTS_QUERY = `{
19
+ mechAgents(first: 50, orderBy: totalTransactions, orderDirection: desc) {
20
+ id
21
+ address
22
+ agentHash
23
+ totalTransactions
24
+ service {
25
+ serviceId
26
+ totalRequests
27
+ totalDeliveries
28
+ }
29
+ }
30
+ }`;
31
+
32
+ interface MechAgent {
33
+ id: string;
34
+ address: string;
35
+ agentHash: string;
36
+ totalTransactions: string;
37
+ service?: {
38
+ serviceId: string;
39
+ totalRequests: string;
40
+ totalDeliveries: string;
41
+ };
42
+ }
43
+
44
+ // Cache mechs — refresh every 10 minutes
45
+ let mechCache: MechAgent[] | null = null;
46
+ let cacheTime = 0;
47
+ const CACHE_TTL = 10 * 60 * 1000;
48
+
49
+ async function fetchMechs(timeout: number): Promise<MechAgent[]> {
50
+ if (mechCache && Date.now() - cacheTime < CACHE_TTL) {
51
+ return mechCache;
52
+ }
53
+
54
+ const allMechs: MechAgent[] = [];
55
+
56
+ // Query both Gnosis and Base subgraphs
57
+ for (const [chain, url] of Object.entries(SUBGRAPH_URLS)) {
58
+ try {
59
+ const res = await fetch(url, {
60
+ method: "POST",
61
+ headers: { "Content-Type": "application/json" },
62
+ body: JSON.stringify({ query: MECH_AGENTS_QUERY }),
63
+ signal: AbortSignal.timeout(timeout),
64
+ });
65
+
66
+ if (!res.ok) continue;
67
+
68
+ const json = await res.json();
69
+ const agents = json.data?.mechAgents ?? [];
70
+
71
+ for (const agent of agents) {
72
+ allMechs.push({ ...agent, _chain: chain } as any);
73
+ }
74
+ } catch {
75
+ // Chain subgraph unavailable, continue with others
76
+ }
77
+ }
78
+
79
+ if (allMechs.length > 0) {
80
+ mechCache = allMechs;
81
+ cacheTime = Date.now();
82
+ }
83
+
84
+ return mechCache ?? [];
85
+ }
86
+
87
+ export const olasAdapter: SourceAdapter = {
88
+ name: "olas" as any,
89
+ displayName: "Olas Mech Marketplace",
90
+
91
+ async search(query: string, options?: SourceSearchOptions): Promise<UnifiedAgent[]> {
92
+ const limit = options?.limit ?? 20;
93
+ const timeout = options?.timeout ?? 10000;
94
+
95
+ try {
96
+ const mechs = await fetchMechs(timeout);
97
+
98
+ if (!query) return mechs.slice(0, limit).map(mapMech);
99
+
100
+ // Score mechs by transaction volume and filter by relevance
101
+ // Since mechs don't have descriptions, match against known tool categories
102
+ const lower = query.toLowerCase();
103
+ const relevant = mechs.filter(() => {
104
+ // Olas mechs handle: predictions, research, analysis, trading signals
105
+ const olasKeywords = ["predict", "research", "analyze", "trade", "ai", "agent", "mech", "autonomous", "forecast", "oracle", "data"];
106
+ return olasKeywords.some(k => lower.includes(k)) || true; // Return all if query is general
107
+ });
108
+
109
+ return relevant
110
+ .sort((a, b) => parseInt(b.totalTransactions) - parseInt(a.totalTransactions))
111
+ .slice(0, limit)
112
+ .map(mapMech);
113
+ } catch {
114
+ return [];
115
+ }
116
+ },
117
+
118
+ async ping(): Promise<boolean> {
119
+ try {
120
+ const res = await fetch(SUBGRAPH_URLS.gnosis, {
121
+ method: "POST",
122
+ headers: { "Content-Type": "application/json" },
123
+ body: JSON.stringify({ query: "{ global(id: \"global\") { totalMechs } }" }),
124
+ signal: AbortSignal.timeout(5000),
125
+ });
126
+ return res.ok;
127
+ } catch {
128
+ return false;
129
+ }
130
+ },
131
+ };
132
+
133
+ function mapMech(mech: MechAgent): UnifiedAgent {
134
+ const chain = (mech as any)._chain || "gnosis";
135
+ const txCount = parseInt(mech.totalTransactions) || 0;
136
+ const deliveries = parseInt(mech.service?.totalDeliveries || "0");
137
+ const requests = parseInt(mech.service?.totalRequests || "0");
138
+ const successRate = requests > 0 ? Math.round((deliveries / requests) * 100) : 0;
139
+
140
+ return {
141
+ id: `olas:${chain}:${mech.address}`,
142
+ nativeId: mech.address,
143
+ name: `Olas Mech ${mech.address.slice(0, 8)}...${mech.address.slice(-4)}`,
144
+ description: `Autonomous AI agent on Olas Marketplace (${chain}). ${txCount} transactions, ${deliveries} deliveries. Accepts prompts and returns AI-powered results via on-chain requests.`,
145
+ categories: ["ai", "autonomous", "prediction"],
146
+ capabilities: [
147
+ "AI prompt execution",
148
+ "Prediction markets",
149
+ "Research and analysis",
150
+ "On-chain autonomous operation",
151
+ ],
152
+ source: "olas" as any,
153
+ protocol: "http",
154
+ endpoints: {
155
+ http: `https://mech.tech/mech/${mech.address}`,
156
+ },
157
+ reputation: {
158
+ score: successRate,
159
+ count: deliveries,
160
+ source: `olas-${chain}`,
161
+ },
162
+ pricing: {
163
+ model: "per-call",
164
+ amount: "0.01",
165
+ currency: "OLAS",
166
+ },
167
+ verified: txCount > 10,
168
+ lastSeen: txCount > 0 ? Date.now() : undefined,
169
+ raw: mech,
170
+ };
171
+ }
@@ -16,7 +16,8 @@ export type AgentSource =
16
16
  | "l402-directory"
17
17
  | "skills-registry"
18
18
  | "bankr"
19
- | "locus";
19
+ | "locus"
20
+ | "olas";
20
21
 
21
22
  export type AgentProtocol = "acp" | "mcp" | "x402" | "a2a" | "http" | "l402" | "onchain" | "skill";
22
23
 
@@ -59,8 +59,8 @@ export async function handleBankrPayment(
59
59
  }
60
60
 
61
61
  // Step 2: Poll for result
62
- const maxAttempts = 30;
63
- const pollInterval = 2000;
62
+ const maxAttempts = 60;
63
+ const pollInterval = 3000;
64
64
 
65
65
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
66
66
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
@@ -25,9 +25,11 @@ export async function handleLocusPayment(
25
25
  let apiKey = process.env.LOCUS_API_KEY;
26
26
 
27
27
  try {
28
- // Step 1: Self-register if no API key
28
+ // Step 1: Get or create Locus API key + fund from Kompass wallet
29
29
  if (!apiKey) {
30
30
  const walletAddress = wallet.getAddress();
31
+
32
+ // Self-register with Locus
31
33
  const registerRes = await fetch(`${LOCUS_API}/register`, {
32
34
  method: "POST",
33
35
  headers: { "Content-Type": "application/json" },
@@ -39,37 +41,42 @@ export async function handleLocusPayment(
39
41
  });
40
42
 
41
43
  if (!registerRes.ok) {
42
- const errBody = await registerRes.text().catch(() => "");
43
44
  return {
44
45
  success: false,
45
- deliverable: {
46
- error: `Locus registration failed: ${registerRes.status}`,
47
- details: errBody,
48
- hint: "Set LOCUS_API_KEY env var or fund a Locus wallet at paywithlocus.com",
49
- },
46
+ deliverable: { error: "Locus registration failed. Set LOCUS_API_KEY env var." },
50
47
  };
51
48
  }
52
49
 
53
50
  const registerData = await registerRes.json();
54
51
  apiKey = registerData.data?.apiKey;
52
+ const locusWalletAddress = registerData.data?.ownerAddress;
55
53
 
56
54
  if (!apiKey) {
57
- return {
58
- success: false,
59
- deliverable: { error: "Locus registration did not return an API key" },
60
- };
55
+ return { success: false, deliverable: { error: "Locus registration did not return an API key" } };
61
56
  }
62
57
 
63
- // Wait for wallet deployment
58
+ // Wait for Locus wallet deployment
64
59
  for (let i = 0; i < 10; i++) {
65
60
  const statusRes = await fetch(`${LOCUS_API}/status`, {
66
61
  headers: { "Authorization": `Bearer ${apiKey}` },
67
62
  signal: AbortSignal.timeout(5000),
68
63
  }).catch(() => null);
69
-
70
64
  if (statusRes?.ok) {
71
65
  const statusData = await statusRes.json();
72
- if (statusData.data?.walletStatus === "deployed") break;
66
+ if (statusData.data?.walletStatus === "deployed") {
67
+ // Fund Locus wallet from Kompass wallet (just-in-time)
68
+ const locusAddr = statusData.data?.walletAddress;
69
+ if (locusAddr) {
70
+ try {
71
+ const { topupACPWallet } = await import("../bridge.js");
72
+ await topupACPWallet(wallet, locusAddr as any, 0.10); // Fund $0.10
73
+ console.log(`[Kompass] Funded Locus wallet ${locusAddr.slice(0, 10)}... with $0.10 USDC`);
74
+ } catch (fundErr) {
75
+ console.log(`[Kompass] Locus funding failed: ${fundErr instanceof Error ? fundErr.message : fundErr}`);
76
+ }
77
+ }
78
+ break;
79
+ }
73
80
  }
74
81
  await new Promise((r) => setTimeout(r, 3000));
75
82
  }
@@ -91,16 +98,15 @@ export async function handleLocusPayment(
91
98
  const provider = rawData.provider;
92
99
  const availableEndpoints = rawData.endpoints as string[] || [];
93
100
 
94
- // Pick the first/most relevant endpoint
95
- // For now use the first endpoint — the provider slug is already in the URL
96
- const endpoint = availableEndpoints[0]?.toLowerCase().replace(/\s+/g, "-") || "search";
101
+ // Pick the best endpoint and build the right params for each provider
102
+ const { endpoint, params } = buildLocusRequest(provider, availableEndpoints, task);
97
103
 
98
104
  const callUrl = `${LOCUS_API}/wrapped/${provider}/${endpoint}`;
99
105
 
100
106
  const callRes = await fetch(callUrl, {
101
107
  method: "POST",
102
108
  headers,
103
- body: JSON.stringify({ query: task, prompt: task, q: task }),
109
+ body: JSON.stringify(params),
104
110
  signal: AbortSignal.timeout(30000),
105
111
  });
106
112
 
@@ -168,3 +174,96 @@ export async function handleLocusPayment(
168
174
  };
169
175
  }
170
176
  }
177
+
178
+ /**
179
+ * Build the right endpoint and params for each Locus wrapped API provider.
180
+ * Each provider has different input formats — this maps the natural language task
181
+ * to the correct API call based on the provider's docs.
182
+ */
183
+ function buildLocusRequest(
184
+ provider: string,
185
+ endpoints: string[],
186
+ task: string,
187
+ ): { endpoint: string; params: Record<string, unknown> } {
188
+ // Extract URLs from task
189
+ const urlMatch = task.match(/https?:\/\/[^\s"']+/);
190
+ const url = urlMatch?.[0];
191
+
192
+ switch (provider) {
193
+ // Web scraping providers — need "url" param
194
+ case "firecrawl":
195
+ return { endpoint: url ? "scrape" : "search", params: url ? { url } : { query: task } };
196
+ case "abstract-web-scraping":
197
+ return { endpoint: "scrape", params: { url: url || task } };
198
+ case "diffbot":
199
+ return { endpoint: "analyze", params: { url: url || task } };
200
+ case "tavily":
201
+ return { endpoint: url ? "extract" : "search", params: url ? { urls: [url] } : { query: task } };
202
+
203
+ // Search providers — need "query" or "q" param
204
+ case "brave":
205
+ return { endpoint: "web-search", params: { q: task } };
206
+ case "exa":
207
+ return { endpoint: "search", params: { query: task } };
208
+ case "perplexity":
209
+ return { endpoint: "sonar-chat", params: { messages: [{ role: "user", content: task }] } };
210
+
211
+ // Crypto / Finance
212
+ case "coingecko": {
213
+ // Extract coin name from task
214
+ const coins = ["bitcoin", "ethereum", "solana", "base", "usdc"];
215
+ const coin = coins.find(c => task.toLowerCase().includes(c)) || "ethereum";
216
+ const coinId = coin === "eth" ? "ethereum" : coin;
217
+ return { endpoint: "simple-price", params: { ids: coinId, vs_currencies: "usd" } };
218
+ }
219
+ case "alphavantage":
220
+ return { endpoint: "global-quote", params: { symbol: task.match(/[A-Z]{1,5}/)?.[0] || "ETH" } };
221
+
222
+ // LLM providers — need "messages" or "prompt"
223
+ case "openai":
224
+ case "anthropic":
225
+ case "gemini":
226
+ case "deepseek":
227
+ case "grok":
228
+ case "groq":
229
+ case "mistral":
230
+ return { endpoint: "chat", params: { messages: [{ role: "user", content: task }] } };
231
+
232
+ // Image/Media generation
233
+ case "fal":
234
+ return { endpoint: "generate", params: { prompt: task } };
235
+ case "stability-ai":
236
+ return { endpoint: "generate-core", params: { prompt: task } };
237
+ case "replicate":
238
+ return { endpoint: "run-model", params: { input: { prompt: task } } };
239
+ case "suno":
240
+ return { endpoint: "generate-music", params: { prompt: task } };
241
+
242
+ // Code execution
243
+ case "judge0":
244
+ return { endpoint: "execute-code", params: { source_code: task, language_id: 63 } }; // 63 = JavaScript
245
+
246
+ // Screenshot
247
+ case "screenshotone":
248
+ return { endpoint: "take-screenshot", params: { url: url || task } };
249
+
250
+ // Social
251
+ case "x":
252
+ return { endpoint: "search-recent-tweets", params: { query: task } };
253
+
254
+ // Knowledge
255
+ case "wolframalpha":
256
+ return { endpoint: "short-answer", params: { input: task } };
257
+
258
+ // Security
259
+ case "virustotal":
260
+ return { endpoint: url ? "url-report" : "domain-report", params: url ? { resource: url } : { domain: task } };
261
+
262
+ // Default — try common param names
263
+ default:
264
+ return {
265
+ endpoint: endpoints[0]?.toLowerCase().replace(/\s+/g, "-") || "search",
266
+ params: { query: task, prompt: task, q: task, input: task },
267
+ };
268
+ }
269
+ }
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * x402 Payment Handler
3
3
  * HTTP 402 + ERC-3009 transferWithAuthorization
4
- * Uses @x402/fetch (wrapFetchWithPaymentFromConfig) + @x402/evm (ExactEvmScheme)
4
+ * Uses x402Client with registerExactEvmScheme for v1+v2 support
5
5
  */
6
6
 
7
- import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
8
- import { ExactEvmScheme, toClientEvmSigner } from "@x402/evm";
7
+ import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
8
+ import { registerExactEvmScheme } from "@x402/evm/exact/client";
9
9
  import type { KompassWallet } from "../index.js";
10
10
  import type { UnifiedAgent } from "../../sources/types.js";
11
11
 
@@ -19,19 +19,27 @@ export async function handleX402Payment(
19
19
  return { success: false, deliverable: { error: "No x402 endpoint" } };
20
20
  }
21
21
 
22
- const signer = toClientEvmSigner(wallet.getAccount());
23
- const paidFetch = wrapFetchWithPaymentFromConfig(fetch, {
24
- schemes: [{ network: "eip155:*", client: new ExactEvmScheme(signer) }],
25
- });
26
-
27
22
  try {
28
- const res = await paidFetch(endpoint, {
29
- method: "POST",
30
- headers: { "Content-Type": "application/json" },
31
- body: JSON.stringify({ task }),
23
+ const account = wallet.getAccount();
24
+ const client = new x402Client();
25
+ registerExactEvmScheme(client, { signer: account });
26
+
27
+ const paidFetch = wrapFetchWithPayment(fetch, client);
28
+
29
+ // Try GET first (most x402 endpoints are GET), fall back to POST
30
+ let res = await paidFetch(endpoint, {
32
31
  signal: AbortSignal.timeout(30000),
33
32
  });
34
33
 
34
+ if (res.status === 404 || res.status === 405) {
35
+ res = await paidFetch(endpoint, {
36
+ method: "POST",
37
+ headers: { "Content-Type": "application/json" },
38
+ body: JSON.stringify({ task }),
39
+ signal: AbortSignal.timeout(30000),
40
+ });
41
+ }
42
+
35
43
  const paymentHeader = res.headers.get("PAYMENT-RESPONSE") ?? res.headers.get("payment-response");
36
44
  const data = await res.json().catch(() => null);
37
45