kompass-sdk 0.15.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.
@@ -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,aAwCxB,CAAC"}
@@ -1,17 +1,29 @@
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
+ const url = new URL(ACP_API);
14
+ if (query)
15
+ url.searchParams.set("q", query);
16
+ url.searchParams.set("limit", String(limit));
17
+ const res = await fetch(url.toString(), {
18
+ signal: AbortSignal.timeout(timeout),
19
+ });
20
+ if (!res.ok)
21
+ return [];
22
+ const json = await res.json();
23
+ const agents = json.data ?? json.results ?? json;
24
+ if (!Array.isArray(agents))
25
+ return [];
26
+ return agents.slice(0, limit).map(mapAcpAgent);
15
27
  }
16
28
  catch {
17
29
  return [];
@@ -19,11 +31,10 @@ export const acpAdapter = {
19
31
  },
20
32
  async ping() {
21
33
  try {
22
- execSync(`cd ${ACP_CLI_PATH} && npx acp whoami --json 2>/dev/null`, {
23
- timeout: 10000,
24
- encoding: "utf-8",
34
+ const res = await fetch(`${ACP_API}?limit=1`, {
35
+ signal: AbortSignal.timeout(5000),
25
36
  });
26
- return true;
37
+ return res.ok;
27
38
  }
28
39
  catch {
29
40
  return false;
@@ -31,7 +42,7 @@ export const acpAdapter = {
31
42
  },
32
43
  };
33
44
  function mapAcpAgent(agent) {
34
- const offerings = agent.jobs ?? agent.jobOfferings ?? [];
45
+ const offerings = agent.jobs ?? agent.jobOfferings ?? agent.offerings ?? [];
35
46
  const topOffering = offerings[0];
36
47
  return {
37
48
  id: `acp:${agent.id ?? agent.walletAddress}`,
@@ -49,18 +60,17 @@ function mapAcpAgent(agent) {
49
60
  },
50
61
  },
51
62
  reputation: agent.metrics ? {
52
- score: agent.metrics.successRate ?? 0,
53
- count: agent.metrics.completedJobs ?? agent.metrics.successfulJobCount ?? 0,
63
+ score: agent.metrics.successRate ?? agent.successRate ?? 0,
64
+ count: agent.metrics.successfulJobCount ?? agent.successfulJobCount ?? 0,
54
65
  source: "acp",
55
66
  } : undefined,
56
- // Surface online status — skip offline agents in ranking
57
67
  lastSeen: agent.metrics?.isOnline ? Date.now() : (agent.metrics?.minsFromLastOnlineTime ? Date.now() - agent.metrics.minsFromLastOnlineTime * 60000 : undefined),
58
68
  pricing: topOffering ? {
59
69
  model: "escrow",
60
- amount: String(topOffering.price ?? "0"),
70
+ amount: String(topOffering.price ?? topOffering.priceUsd ?? "0"),
61
71
  currency: "USDC",
62
72
  } : undefined,
63
- verified: true, // ACP agents are registered
73
+ verified: true,
64
74
  raw: agent,
65
75
  };
66
76
  }
@@ -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":"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"}
@@ -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"}
@@ -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,CAiJvE"}
@@ -73,14 +73,13 @@ export async function handleLocusPayment(wallet, agent, task) {
73
73
  // We need to figure out the best endpoint for the task
74
74
  const provider = rawData.provider;
75
75
  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";
76
+ // Pick the best endpoint and build the right params for each provider
77
+ const { endpoint, params } = buildLocusRequest(provider, availableEndpoints, task);
79
78
  const callUrl = `${LOCUS_API}/wrapped/${provider}/${endpoint}`;
80
79
  const callRes = await fetch(callUrl, {
81
80
  method: "POST",
82
81
  headers,
83
- body: JSON.stringify({ query: task, prompt: task, q: task }),
82
+ body: JSON.stringify(params),
84
83
  signal: AbortSignal.timeout(30000),
85
84
  });
86
85
  if (!callRes.ok) {
@@ -141,4 +140,81 @@ export async function handleLocusPayment(wallet, agent, task) {
141
140
  };
142
141
  }
143
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
+ }
144
220
  //# 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":"AAAA;;;;;;;;;;;;GAYG;AAKH,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,KAAmB,EACnB,IAAY;IAEZ,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAEvC,IAAI,CAAC;QACH,sCAAsC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,WAAW,EAAE;gBACvD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,cAAc,EAAE,aAAa;oBAC7B,UAAU,EAAE,eAAe;iBAC5B,CAAC;gBACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE;wBACX,KAAK,EAAE,8BAA8B,WAAW,CAAC,MAAM,EAAE;wBACzD,OAAO,EAAE,OAAO;wBAChB,IAAI,EAAE,sEAAsE;qBAC7E;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;YAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE,EAAE,KAAK,EAAE,8CAA8C,EAAE;iBACvE,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,SAAS,EAAE;oBACnD,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE;oBAChD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;iBAClC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAErB,IAAI,SAAS,EAAE,EAAE,EAAE,CAAC;oBAClB,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC1C,IAAI,UAAU,CAAC,IAAI,EAAE,YAAY,KAAK,UAAU;wBAAE,MAAM;gBAC1D,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,MAAM,EAAE;SACpC,CAAC;QAEF,sEAAsE;QACtE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAU,CAAC;QACjC,MAAM,YAAY,GAAG,OAAO,EAAE,IAAI,KAAK,mBAAmB,CAAC;QAE3D,IAAI,YAAY,EAAE,CAAC;YACjB,gCAAgC;YAChC,+DAA+D;YAC/D,uDAAuD;YACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAqB,IAAI,EAAE,CAAC;YAE/D,sEAAsE;YACtE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAEnF,MAAM,OAAO,GAAG,GAAG,SAAS,YAAY,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAE/D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;gBACnC,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC5B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,WAAW,EAAE;wBACX,KAAK,EAAE,kCAAkC,OAAO,CAAC,MAAM,EAAE;wBACzD,QAAQ;wBACR,QAAQ;wBACR,OAAO,EAAE,OAAO;qBACjB;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,MAAM;aACpB,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;QAE/C,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,EAAE,KAAK,EAAE,2CAA2C,EAAE;aACpE,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,WAAW,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;gBAC1B,IAAI,EAAE,iBAAiB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aAC5C,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,EAAE,KAAK,EAAE,yBAAyB,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;aACpF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAEtC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,QAAQ;YACrB,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,cAAc;SAChE,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;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,QAAgB,EAChB,SAAmB,EACnB,IAAY;IAEZ,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,QAAQ,QAAQ,EAAE,CAAC;QACjB,4CAA4C;QAC5C,KAAK,WAAW;YACd,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1F,KAAK,uBAAuB;YAC1B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9D,KAAK,SAAS;YACZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC/D,KAAK,QAAQ;YACX,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QAEnG,+CAA+C;QAC/C,KAAK,OAAO;YACV,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACzD,KAAK,KAAK;YACR,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACzD,KAAK,YAAY;YACf,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAE7F,mBAAmB;QACnB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,8BAA8B;YAC9B,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;YAC3E,MAAM,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;QACrF,CAAC;QACD,KAAK,cAAc;YACjB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAElG,8CAA8C;QAC9C,KAAK,QAAQ,CAAC;QACd,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAEvF,yBAAyB;QACzB,KAAK,KAAK;YACR,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5D,KAAK,cAAc;YACjB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACjE,KAAK,WAAW;YACd,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxE,KAAK,MAAM;YACT,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAElE,iBAAiB;QACjB,KAAK,QAAQ;YACX,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,kBAAkB;QAEzG,aAAa;QACb,KAAK,eAAe;YAClB,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAEvE,SAAS;QACT,KAAK,GAAG;YACN,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QAEvE,YAAY;QACZ,KAAK,cAAc;YACjB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QAE/D,WAAW;QACX,KAAK,YAAY;YACf,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAEhH,mCAAmC;QACnC;YACE,OAAO;gBACL,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,QAAQ;gBACtE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;aAC5D,CAAC;IACN,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.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",
@@ -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 {
@@ -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
  }
@@ -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
 
@@ -91,16 +91,15 @@ export async function handleLocusPayment(
91
91
  const provider = rawData.provider;
92
92
  const availableEndpoints = rawData.endpoints as string[] || [];
93
93
 
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";
94
+ // Pick the best endpoint and build the right params for each provider
95
+ const { endpoint, params } = buildLocusRequest(provider, availableEndpoints, task);
97
96
 
98
97
  const callUrl = `${LOCUS_API}/wrapped/${provider}/${endpoint}`;
99
98
 
100
99
  const callRes = await fetch(callUrl, {
101
100
  method: "POST",
102
101
  headers,
103
- body: JSON.stringify({ query: task, prompt: task, q: task }),
102
+ body: JSON.stringify(params),
104
103
  signal: AbortSignal.timeout(30000),
105
104
  });
106
105
 
@@ -168,3 +167,96 @@ export async function handleLocusPayment(
168
167
  };
169
168
  }
170
169
  }
170
+
171
+ /**
172
+ * Build the right endpoint and params for each Locus wrapped API provider.
173
+ * Each provider has different input formats — this maps the natural language task
174
+ * to the correct API call based on the provider's docs.
175
+ */
176
+ function buildLocusRequest(
177
+ provider: string,
178
+ endpoints: string[],
179
+ task: string,
180
+ ): { endpoint: string; params: Record<string, unknown> } {
181
+ // Extract URLs from task
182
+ const urlMatch = task.match(/https?:\/\/[^\s"']+/);
183
+ const url = urlMatch?.[0];
184
+
185
+ switch (provider) {
186
+ // Web scraping providers — need "url" param
187
+ case "firecrawl":
188
+ return { endpoint: url ? "scrape" : "search", params: url ? { url } : { query: task } };
189
+ case "abstract-web-scraping":
190
+ return { endpoint: "scrape", params: { url: url || task } };
191
+ case "diffbot":
192
+ return { endpoint: "analyze", params: { url: url || task } };
193
+ case "tavily":
194
+ return { endpoint: url ? "extract" : "search", params: url ? { urls: [url] } : { query: task } };
195
+
196
+ // Search providers — need "query" or "q" param
197
+ case "brave":
198
+ return { endpoint: "web-search", params: { q: task } };
199
+ case "exa":
200
+ return { endpoint: "search", params: { query: task } };
201
+ case "perplexity":
202
+ return { endpoint: "sonar-chat", params: { messages: [{ role: "user", content: task }] } };
203
+
204
+ // Crypto / Finance
205
+ case "coingecko": {
206
+ // Extract coin name from task
207
+ const coins = ["bitcoin", "ethereum", "solana", "base", "usdc"];
208
+ const coin = coins.find(c => task.toLowerCase().includes(c)) || "ethereum";
209
+ const coinId = coin === "eth" ? "ethereum" : coin;
210
+ return { endpoint: "simple-price", params: { ids: coinId, vs_currencies: "usd" } };
211
+ }
212
+ case "alphavantage":
213
+ return { endpoint: "global-quote", params: { symbol: task.match(/[A-Z]{1,5}/)?.[0] || "ETH" } };
214
+
215
+ // LLM providers — need "messages" or "prompt"
216
+ case "openai":
217
+ case "anthropic":
218
+ case "gemini":
219
+ case "deepseek":
220
+ case "grok":
221
+ case "groq":
222
+ case "mistral":
223
+ return { endpoint: "chat", params: { messages: [{ role: "user", content: task }] } };
224
+
225
+ // Image/Media generation
226
+ case "fal":
227
+ return { endpoint: "generate", params: { prompt: task } };
228
+ case "stability-ai":
229
+ return { endpoint: "generate-core", params: { prompt: task } };
230
+ case "replicate":
231
+ return { endpoint: "run-model", params: { input: { prompt: task } } };
232
+ case "suno":
233
+ return { endpoint: "generate-music", params: { prompt: task } };
234
+
235
+ // Code execution
236
+ case "judge0":
237
+ return { endpoint: "execute-code", params: { source_code: task, language_id: 63 } }; // 63 = JavaScript
238
+
239
+ // Screenshot
240
+ case "screenshotone":
241
+ return { endpoint: "take-screenshot", params: { url: url || task } };
242
+
243
+ // Social
244
+ case "x":
245
+ return { endpoint: "search-recent-tweets", params: { query: task } };
246
+
247
+ // Knowledge
248
+ case "wolframalpha":
249
+ return { endpoint: "short-answer", params: { input: task } };
250
+
251
+ // Security
252
+ case "virustotal":
253
+ return { endpoint: url ? "url-report" : "domain-report", params: url ? { resource: url } : { domain: task } };
254
+
255
+ // Default — try common param names
256
+ default:
257
+ return {
258
+ endpoint: endpoints[0]?.toLowerCase().replace(/\s+/g, "-") || "search",
259
+ params: { query: task, prompt: task, q: task, input: task },
260
+ };
261
+ }
262
+ }