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.
- package/dist/sources/acp.d.ts +1 -1
- package/dist/sources/acp.d.ts.map +1 -1
- package/dist/sources/acp.js +26 -16
- package/dist/sources/acp.js.map +1 -1
- package/dist/sources/index.d.ts.map +1 -1
- package/dist/sources/index.js +2 -0
- package/dist/sources/index.js.map +1 -1
- package/dist/sources/olas.d.ts +12 -0
- package/dist/sources/olas.d.ts.map +1 -0
- package/dist/sources/olas.js +143 -0
- package/dist/sources/olas.js.map +1 -0
- package/dist/sources/types.d.ts +1 -1
- package/dist/sources/types.d.ts.map +1 -1
- package/dist/wallet/handlers/locus.d.ts.map +1 -1
- package/dist/wallet/handlers/locus.js +80 -4
- package/dist/wallet/handlers/locus.js.map +1 -1
- package/package.json +1 -1
- package/src/sources/acp.ts +28 -19
- package/src/sources/index.ts +2 -0
- package/src/sources/olas.ts +171 -0
- package/src/sources/types.ts +2 -1
- package/src/wallet/handlers/locus.ts +96 -4
package/dist/sources/acp.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Virtuals ACP Source Adapter
|
|
3
|
-
* Searches the ACP marketplace via
|
|
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;
|
|
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"}
|
package/dist/sources/acp.js
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Virtuals ACP Source Adapter
|
|
3
|
-
* Searches the ACP marketplace via
|
|
3
|
+
* Searches the ACP marketplace via HTTP API at acpx.virtuals.gg
|
|
4
4
|
*/
|
|
5
|
-
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
encoding: "utf-8",
|
|
34
|
+
const res = await fetch(`${ACP_API}?limit=1`, {
|
|
35
|
+
signal: AbortSignal.timeout(5000),
|
|
25
36
|
});
|
|
26
|
-
return
|
|
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.
|
|
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,
|
|
73
|
+
verified: true,
|
|
64
74
|
raw: agent,
|
|
65
75
|
};
|
|
66
76
|
}
|
package/dist/sources/acp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/sources/acp.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
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;
|
|
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"}
|
package/dist/sources/index.js
CHANGED
|
@@ -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;
|
|
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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"}
|
package/dist/sources/types.d.ts
CHANGED
|
@@ -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;
|
|
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,
|
|
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
|
|
77
|
-
|
|
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(
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kompass-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "Get any job done. Universal agent capability discovery + coordination across ACP, MCP, x402, A2A, skills, L402, and ERC-8004.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/src/sources/acp.ts
CHANGED
|
@@ -1,26 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Virtuals ACP Source Adapter
|
|
3
|
-
* Searches the ACP marketplace via
|
|
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
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
encoding: "utf-8",
|
|
42
|
+
const res = await fetch(`${ACP_API}?limit=1`, {
|
|
43
|
+
signal: AbortSignal.timeout(5000),
|
|
34
44
|
});
|
|
35
|
-
return
|
|
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.
|
|
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,
|
|
82
|
+
verified: true,
|
|
74
83
|
raw: agent,
|
|
75
84
|
};
|
|
76
85
|
}
|
package/src/sources/index.ts
CHANGED
|
@@ -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
|
+
}
|
package/src/sources/types.ts
CHANGED
|
@@ -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
|
|
95
|
-
|
|
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(
|
|
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
|
+
}
|