kompass-sdk 0.4.0 → 0.6.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/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/router.d.ts +3 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +49 -18
- package/dist/router.js.map +1 -1
- package/dist/sources/l402-directory.d.ts +3 -2
- package/dist/sources/l402-directory.d.ts.map +1 -1
- package/dist/sources/l402-directory.js +57 -32
- package/dist/sources/l402-directory.js.map +1 -1
- package/dist/sources/skills.d.ts +5 -2
- package/dist/sources/skills.d.ts.map +1 -1
- package/dist/sources/skills.js +82 -105
- package/dist/sources/skills.js.map +1 -1
- package/dist/sources/x402-ecosystem.d.ts +3 -2
- package/dist/sources/x402-ecosystem.d.ts.map +1 -1
- package/dist/sources/x402-ecosystem.js +69 -55
- package/dist/sources/x402-ecosystem.js.map +1 -1
- package/dist/unified.d.ts +2 -0
- package/dist/unified.d.ts.map +1 -1
- package/dist/unified.js +1 -1
- package/dist/unified.js.map +1 -1
- package/dist/wallet/handlers/acp.d.ts.map +1 -1
- package/dist/wallet/handlers/acp.js +41 -6
- package/dist/wallet/handlers/acp.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +12 -2
- package/src/router.ts +52 -19
- package/src/sources/l402-directory.ts +56 -36
- package/src/sources/skills.ts +82 -111
- package/src/sources/x402-ecosystem.ts +75 -58
- package/src/unified.ts +3 -1
- package/src/wallet/handlers/acp.ts +51 -6
package/dist/sources/skills.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skills Source Adapter
|
|
3
|
-
* Searches
|
|
4
|
-
*
|
|
3
|
+
* Searches REAL APIs:
|
|
4
|
+
* - skills.sh (Vercel) — /api/search?q=
|
|
5
|
+
* - ClawHub (OpenClaw) — /api/search?q= (vector search)
|
|
6
|
+
*
|
|
7
|
+
* No hardcoded seed lists. All real data.
|
|
5
8
|
*/
|
|
6
|
-
const SKILLS_SH_API = "https://skills.sh";
|
|
7
|
-
const CLAWHUB_API = "https://clawhub.ai";
|
|
9
|
+
const SKILLS_SH_API = "https://skills.sh/api/search";
|
|
10
|
+
const CLAWHUB_API = "https://clawhub.ai/api/search";
|
|
8
11
|
export const skillsAdapter = {
|
|
9
12
|
name: "skills-registry",
|
|
10
13
|
displayName: "Skills Registry (skills.sh + ClawHub)",
|
|
@@ -13,134 +16,106 @@ export const skillsAdapter = {
|
|
|
13
16
|
const timeout = options?.timeout ?? 10000;
|
|
14
17
|
const results = [];
|
|
15
18
|
// Search skills.sh
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
const clawHubResults = await searchClawHub(query, Math.ceil(limit / 2), timeout);
|
|
26
|
-
results.push(...clawHubResults);
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
// ClawHub might be rate-limited
|
|
30
|
-
}
|
|
31
|
-
// If both APIs fail, return from seed list
|
|
32
|
-
if (results.length === 0) {
|
|
33
|
-
return searchSeedList(query, limit);
|
|
34
|
-
}
|
|
19
|
+
const [skillsShResults, clawHubResults] = await Promise.allSettled([
|
|
20
|
+
searchSkillsSh(query, Math.ceil(limit / 2), timeout),
|
|
21
|
+
searchClawHub(query, Math.ceil(limit / 2), timeout),
|
|
22
|
+
]);
|
|
23
|
+
if (skillsShResults.status === "fulfilled")
|
|
24
|
+
results.push(...skillsShResults.value);
|
|
25
|
+
if (clawHubResults.status === "fulfilled")
|
|
26
|
+
results.push(...clawHubResults.value);
|
|
35
27
|
return results.slice(0, limit);
|
|
36
28
|
},
|
|
37
29
|
async ping() {
|
|
38
30
|
try {
|
|
39
|
-
const res = await fetch(SKILLS_SH_API
|
|
31
|
+
const res = await fetch(`${SKILLS_SH_API}?q=test`, { signal: AbortSignal.timeout(3000) });
|
|
40
32
|
return res.ok;
|
|
41
33
|
}
|
|
42
34
|
catch {
|
|
43
|
-
return
|
|
35
|
+
return false;
|
|
44
36
|
}
|
|
45
37
|
},
|
|
46
38
|
};
|
|
47
39
|
async function searchSkillsSh(query, limit, timeout) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
signal: AbortSignal.timeout(timeout),
|
|
51
|
-
});
|
|
52
|
-
if (!res.ok) {
|
|
53
|
-
// Try the leaderboard endpoint
|
|
54
|
-
const lbRes = await fetch(`${SKILLS_SH_API}/api/leaderboard?limit=${limit}`, {
|
|
40
|
+
try {
|
|
41
|
+
const res = await fetch(`${SKILLS_SH_API}?q=${encodeURIComponent(query)}`, {
|
|
55
42
|
signal: AbortSignal.timeout(timeout),
|
|
56
43
|
});
|
|
57
|
-
if (!
|
|
44
|
+
if (!res.ok)
|
|
58
45
|
return [];
|
|
59
|
-
const data = await
|
|
60
|
-
const skills =
|
|
61
|
-
return skills
|
|
62
|
-
.
|
|
63
|
-
.
|
|
46
|
+
const data = await res.json();
|
|
47
|
+
const skills = data.skills ?? [];
|
|
48
|
+
return skills.slice(0, limit).map((s) => ({
|
|
49
|
+
id: `skills-registry:skills-sh:${s.id ?? s.skillId}`,
|
|
50
|
+
nativeId: s.id ?? s.skillId,
|
|
51
|
+
name: s.name ?? s.skillId ?? "Unknown Skill",
|
|
52
|
+
description: s.description ?? "",
|
|
53
|
+
categories: extractSkillCategories(s.name ?? "", s.description ?? ""),
|
|
54
|
+
capabilities: [s.name, s.description].filter(Boolean),
|
|
55
|
+
source: "skills-registry",
|
|
56
|
+
protocol: "skill",
|
|
57
|
+
endpoints: {
|
|
58
|
+
http: `https://skills.sh/${s.source ?? s.id}`,
|
|
59
|
+
},
|
|
60
|
+
pricing: { model: "free" },
|
|
61
|
+
verified: (s.installs ?? 0) > 100,
|
|
62
|
+
reputation: s.installs ? {
|
|
63
|
+
score: Math.min(s.installs / 100, 100),
|
|
64
|
+
count: s.installs,
|
|
65
|
+
source: "skills-sh-installs",
|
|
66
|
+
} : undefined,
|
|
67
|
+
raw: { ...s, registry: "skills-sh" },
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
64
72
|
}
|
|
65
|
-
const data = await res.json();
|
|
66
|
-
const skills = Array.isArray(data) ? data : data.skills ?? data.results ?? [];
|
|
67
|
-
return skills.map((s) => mapSkill(s, "skills-sh"));
|
|
68
73
|
}
|
|
69
74
|
async function searchClawHub(query, limit, timeout) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
try {
|
|
76
|
+
const res = await fetch(`${CLAWHUB_API}?q=${encodeURIComponent(query)}`, {
|
|
77
|
+
signal: AbortSignal.timeout(timeout),
|
|
78
|
+
});
|
|
79
|
+
if (!res.ok)
|
|
80
|
+
return [];
|
|
81
|
+
const data = await res.json();
|
|
82
|
+
const skills = data.results ?? [];
|
|
83
|
+
return skills.slice(0, limit).map((s) => ({
|
|
84
|
+
id: `skills-registry:clawhub:${s.slug}`,
|
|
85
|
+
nativeId: s.slug,
|
|
86
|
+
name: s.displayName ?? s.slug ?? "Unknown Skill",
|
|
87
|
+
description: s.summary ?? "",
|
|
88
|
+
categories: extractSkillCategories(s.displayName ?? "", s.summary ?? ""),
|
|
89
|
+
capabilities: [s.summary ?? s.displayName ?? ""],
|
|
90
|
+
source: "skills-registry",
|
|
91
|
+
protocol: "skill",
|
|
92
|
+
endpoints: {
|
|
93
|
+
http: `https://clawhub.ai/${s.slug}`,
|
|
94
|
+
},
|
|
95
|
+
pricing: { model: "free" },
|
|
96
|
+
verified: true,
|
|
97
|
+
reputation: s.score ? {
|
|
98
|
+
score: Math.round(s.score * 25),
|
|
99
|
+
count: 0,
|
|
100
|
+
source: "clawhub-relevance",
|
|
101
|
+
} : undefined,
|
|
102
|
+
raw: { ...s, registry: "clawhub" },
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
74
106
|
return [];
|
|
75
|
-
|
|
76
|
-
const skills = Array.isArray(data) ? data : data.skills ?? data.results ?? [];
|
|
77
|
-
return skills.map((s) => mapSkill(s, "clawhub"));
|
|
78
|
-
}
|
|
79
|
-
function mapSkill(skill, registry) {
|
|
80
|
-
const name = skill.name ?? skill.slug ?? skill.title ?? "Unknown Skill";
|
|
81
|
-
const description = skill.description ?? "";
|
|
82
|
-
const repo = skill.repo ?? skill.repository ?? skill.url ?? "";
|
|
83
|
-
const installs = skill.installs ?? skill.downloads ?? 0;
|
|
84
|
-
return {
|
|
85
|
-
id: `skills-registry:${registry}:${name.toLowerCase().replace(/\s+/g, "-")}`,
|
|
86
|
-
nativeId: skill.id ?? name,
|
|
87
|
-
name,
|
|
88
|
-
description,
|
|
89
|
-
categories: extractSkillCategories(name, description),
|
|
90
|
-
capabilities: [description, ...(skill.tags ?? [])],
|
|
91
|
-
source: "skills-registry",
|
|
92
|
-
protocol: "skill",
|
|
93
|
-
endpoints: {
|
|
94
|
-
http: repo || `https://skills.sh/${name}`,
|
|
95
|
-
},
|
|
96
|
-
pricing: { model: "free" },
|
|
97
|
-
verified: installs > 100,
|
|
98
|
-
lastSeen: Date.now(),
|
|
99
|
-
raw: { ...skill, registry },
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
// Seed list of well-known skills for when APIs are unavailable
|
|
103
|
-
const KNOWN_SKILLS = [
|
|
104
|
-
{ name: "remotion-best-practices", description: "Video creation in React with Remotion", categories: ["media", "development"], registry: "skills-sh", installs: 145000 },
|
|
105
|
-
{ name: "web-design-guidelines", description: "UI/UX design best practices for web development", categories: ["design", "development"], registry: "skills-sh", installs: 89000 },
|
|
106
|
-
{ name: "react-best-practices", description: "React and Next.js performance optimization from Vercel", categories: ["development"], registry: "skills-sh", installs: 120000 },
|
|
107
|
-
{ name: "solana-dev", description: "End-to-end Solana development playbook", categories: ["development", "defi"], registry: "skills-sh", installs: 50000 },
|
|
108
|
-
{ name: "cairo-contracts", description: "Write Cairo smart contracts on Starknet", categories: ["development", "defi"], registry: "skills-sh", installs: 30000 },
|
|
109
|
-
{ name: "x402-skill", description: "x402 HTTP payment protocol for monetizing APIs", categories: ["payments", "development"], registry: "skills-sh", installs: 25000 },
|
|
110
|
-
{ name: "agent-browser", description: "Automate browser interactions, screenshots, form filling", categories: ["tools", "automation"], registry: "skills-sh", installs: 70000 },
|
|
111
|
-
{ name: "implement-design", description: "Translate Figma designs into production-ready code", categories: ["design", "development"], registry: "skills-sh", installs: 60000 },
|
|
112
|
-
{ name: "find-skills", description: "Discover and install new agent skills", categories: ["tools", "discovery"], registry: "skills-sh", installs: 200000 },
|
|
113
|
-
{ name: "tailwind-v4-shadcn", description: "Set up Tailwind v4 with shadcn/ui", categories: ["development", "design"], registry: "skills-sh", installs: 45000 },
|
|
114
|
-
{ name: "ethskills", description: "Learn Ethereum, Solidity, smart contracts, web3 development", categories: ["development", "defi"], registry: "skills-sh", installs: 8000 },
|
|
115
|
-
{ name: "soul-markets", description: "Agent skill marketplace — monetize agent capabilities", categories: ["marketplace", "commerce"], registry: "clawhub", installs: 5000 },
|
|
116
|
-
{ name: "a2a-market", description: "Buy and sell agent skills using USDC on Base via A2A", categories: ["marketplace", "commerce"], registry: "clawhub", installs: 3000 },
|
|
117
|
-
{ name: "skillzmarket", description: "Discover and install skills from community marketplace", categories: ["marketplace", "discovery"], registry: "clawhub", installs: 4000 },
|
|
118
|
-
{ name: "x402-agent-marketplace", description: "x402 agent marketplace for paid AI capabilities", categories: ["marketplace", "payments"], registry: "clawhub", installs: 2000 },
|
|
119
|
-
];
|
|
120
|
-
function searchSeedList(query, limit) {
|
|
121
|
-
const lower = query.toLowerCase();
|
|
122
|
-
return KNOWN_SKILLS
|
|
123
|
-
.filter((s) => matchesQuery(s, query))
|
|
124
|
-
.slice(0, limit)
|
|
125
|
-
.map((s) => mapSkill({ ...s, installs: s.installs }, s.registry));
|
|
126
|
-
}
|
|
127
|
-
function matchesQuery(skill, query) {
|
|
128
|
-
if (!query)
|
|
129
|
-
return true;
|
|
130
|
-
const lower = query.toLowerCase();
|
|
131
|
-
const text = `${skill.name ?? ""} ${skill.description ?? ""} ${(skill.tags ?? []).join(" ")} ${(skill.categories ?? []).join(" ")}`.toLowerCase();
|
|
132
|
-
return lower.split(/\s+/).some((term) => text.includes(term));
|
|
107
|
+
}
|
|
133
108
|
}
|
|
134
109
|
function extractSkillCategories(name, description) {
|
|
135
110
|
const text = `${name} ${description}`.toLowerCase();
|
|
136
111
|
const cats = [];
|
|
137
112
|
if (text.match(/react|next|vue|svelte|frontend|css|tailwind|design/))
|
|
138
113
|
cats.push("development");
|
|
139
|
-
if (text.match(/defi|yield|swap|solidity|ethereum|solana|contract/))
|
|
114
|
+
if (text.match(/defi|yield|swap|solidity|ethereum|solana|contract|crypto/))
|
|
140
115
|
cats.push("defi");
|
|
141
116
|
if (text.match(/image|video|audio|media|remotion|figma/))
|
|
142
117
|
cats.push("media");
|
|
143
|
-
if (text.match(/data|analytics|research|search/))
|
|
118
|
+
if (text.match(/data|analytics|research|search|scrape/))
|
|
144
119
|
cats.push("data");
|
|
145
120
|
if (text.match(/browser|automat|tool|file/))
|
|
146
121
|
cats.push("tools");
|
|
@@ -148,6 +123,8 @@ function extractSkillCategories(name, description) {
|
|
|
148
123
|
cats.push("commerce");
|
|
149
124
|
if (text.match(/security|audit|test/))
|
|
150
125
|
cats.push("security");
|
|
126
|
+
if (text.match(/ai|llm|model|agent/))
|
|
127
|
+
cats.push("ai");
|
|
151
128
|
return cats.length > 0 ? cats : ["general"];
|
|
152
129
|
}
|
|
153
130
|
//# sourceMappingURL=skills.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/sources/skills.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/sources/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* x402 Ecosystem Source Adapter
|
|
3
|
-
*
|
|
2
|
+
* x402/L402/MPP Ecosystem Source Adapter
|
|
3
|
+
* Searches 402index.io — protocol-agnostic directory of 15,000+ paid API endpoints
|
|
4
|
+
* Covers x402, L402, and MPP endpoints
|
|
4
5
|
*/
|
|
5
6
|
import type { SourceAdapter } from "./types.js";
|
|
6
7
|
export declare const x402EcosystemAdapter: SourceAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402-ecosystem.d.ts","sourceRoot":"","sources":["../../src/sources/x402-ecosystem.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"x402-ecosystem.d.ts","sourceRoot":"","sources":["../../src/sources/x402-ecosystem.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAqC,MAAM,YAAY,CAAC;AAInF,eAAO,MAAM,oBAAoB,EAAE,aA0ClC,CAAC"}
|
|
@@ -1,78 +1,92 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* x402 Ecosystem Source Adapter
|
|
3
|
-
*
|
|
2
|
+
* x402/L402/MPP Ecosystem Source Adapter
|
|
3
|
+
* Searches 402index.io — protocol-agnostic directory of 15,000+ paid API endpoints
|
|
4
|
+
* Covers x402, L402, and MPP endpoints
|
|
4
5
|
*/
|
|
5
|
-
|
|
6
|
-
const KNOWN_X402_SERVICES = [
|
|
7
|
-
{ name: "OpenRouter", url: "https://openrouter.ai", description: "LLM API access with USDC payments", categories: ["ai", "llm"] },
|
|
8
|
-
{ name: "Dexter AI", url: "https://dexterai.com", description: "x402 facilitator on Solana. 38M+ settlements", categories: ["defi", "trading"] },
|
|
9
|
-
{ name: "AgentCash", url: "https://agentcash.dev", description: "One balance, every paid API. Multi-protocol agent wallet", categories: ["payments", "tools"] },
|
|
10
|
-
{ name: "Allium", url: "https://allium.so", description: "Blockchain data APIs with x402 payments", categories: ["data", "analytics"] },
|
|
11
|
-
{ name: "Kompass Data Provider", url: "http://localhost:4021", description: "DeFi yield data, token prices, risk scores via x402", categories: ["defi", "data"] },
|
|
12
|
-
{ name: "Wurk", url: "https://wurk.fun", description: "Agent job board with x402 integration", categories: ["jobs", "tools"] },
|
|
13
|
-
{ name: "Tavily", url: "https://tavily.com", description: "AI-powered web search API", categories: ["search", "data"] },
|
|
14
|
-
{ name: "ASSAY", url: "https://assayaudit.com", description: "Agent evaluation and auditing service", categories: ["audit", "trust"] },
|
|
15
|
-
{ name: "Zentiece", url: "https://zentiece.com", description: "Agent with x402 payments + ORBIT burns", categories: ["defi", "trading"] },
|
|
16
|
-
{ name: "AlgoVoi", url: "https://algovoi.com", description: "x402 integration on Algorand", categories: ["defi", "tools"] },
|
|
17
|
-
{ name: "LibertAI", url: "https://libertai.io", description: "Autonomous agents on Aleph Cloud with x402", categories: ["ai", "compute"] },
|
|
18
|
-
{ name: "Handshake_58", url: "https://handshake58.com", description: "Streaming AI agent payment channels", categories: ["payments"] },
|
|
19
|
-
];
|
|
6
|
+
const INDEX_API = "https://402index.io/api/v1/services";
|
|
20
7
|
export const x402EcosystemAdapter = {
|
|
21
8
|
name: "x402-ecosystem",
|
|
22
|
-
displayName: "x402
|
|
9
|
+
displayName: "402 Index (x402 + L402 + MPP)",
|
|
23
10
|
async search(query, options) {
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
const limit = options?.limit ?? 20;
|
|
12
|
+
const timeout = options?.timeout ?? 10000;
|
|
26
13
|
try {
|
|
27
|
-
const
|
|
28
|
-
|
|
14
|
+
const url = new URL(INDEX_API);
|
|
15
|
+
if (query)
|
|
16
|
+
url.searchParams.set("q", query);
|
|
17
|
+
url.searchParams.set("limit", String(limit));
|
|
18
|
+
url.searchParams.set("health", "healthy");
|
|
19
|
+
url.searchParams.set("sort", "reliability");
|
|
20
|
+
const res = await fetch(url.toString(), {
|
|
21
|
+
signal: AbortSignal.timeout(timeout),
|
|
29
22
|
});
|
|
30
|
-
if (res.ok)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
23
|
+
if (!res.ok)
|
|
24
|
+
return [];
|
|
25
|
+
const data = await res.json();
|
|
26
|
+
const services = data.services ?? data.data ?? data;
|
|
27
|
+
if (!Array.isArray(services))
|
|
28
|
+
return [];
|
|
29
|
+
return services.slice(0, limit).map(mapService);
|
|
38
30
|
}
|
|
39
31
|
catch {
|
|
40
|
-
|
|
32
|
+
return [];
|
|
41
33
|
}
|
|
42
|
-
const allServices = [...KNOWN_X402_SERVICES, ...dynamicServices];
|
|
43
|
-
const lower = query.toLowerCase();
|
|
44
|
-
return allServices
|
|
45
|
-
.filter((s) => {
|
|
46
|
-
if (!query)
|
|
47
|
-
return true;
|
|
48
|
-
return (s.name.toLowerCase().includes(lower) ||
|
|
49
|
-
s.description.toLowerCase().includes(lower) ||
|
|
50
|
-
s.categories.some((c) => lower.includes(c)));
|
|
51
|
-
})
|
|
52
|
-
.slice(0, options?.limit ?? 50)
|
|
53
|
-
.map(mapX402Service);
|
|
54
34
|
},
|
|
55
35
|
async ping() {
|
|
56
|
-
|
|
36
|
+
try {
|
|
37
|
+
const res = await fetch(`${INDEX_API}?limit=1`, {
|
|
38
|
+
signal: AbortSignal.timeout(5000),
|
|
39
|
+
});
|
|
40
|
+
return res.ok;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
57
45
|
},
|
|
58
46
|
};
|
|
59
|
-
function
|
|
47
|
+
function mapService(service) {
|
|
48
|
+
const protocol = mapProtocol(service.protocol);
|
|
60
49
|
return {
|
|
61
|
-
id: `x402-ecosystem:${service.
|
|
62
|
-
nativeId: service.name,
|
|
63
|
-
name: service.name,
|
|
64
|
-
description: service.description,
|
|
65
|
-
categories: service.
|
|
66
|
-
capabilities: [service.description],
|
|
50
|
+
id: `x402-ecosystem:${service.id ?? service.url}`,
|
|
51
|
+
nativeId: service.id ?? service.name,
|
|
52
|
+
name: cleanName(service.name ?? "Unknown Service"),
|
|
53
|
+
description: cleanDescription(service.description ?? ""),
|
|
54
|
+
categories: service.category ? service.category.split("/").map((c) => c.trim()) : ["general"],
|
|
55
|
+
capabilities: [service.description ?? service.name ?? ""].filter(Boolean),
|
|
67
56
|
source: "x402-ecosystem",
|
|
68
|
-
protocol
|
|
57
|
+
protocol,
|
|
69
58
|
endpoints: {
|
|
70
|
-
x402: service.url,
|
|
59
|
+
x402: protocol === "x402" ? service.url : undefined,
|
|
60
|
+
l402: protocol === "l402" ? service.url : undefined,
|
|
71
61
|
http: service.url,
|
|
72
62
|
},
|
|
73
|
-
pricing: {
|
|
74
|
-
|
|
63
|
+
pricing: {
|
|
64
|
+
model: "per-call",
|
|
65
|
+
amount: service.price_usd ? String(service.price_usd) : service.price_sats ? `${service.price_sats} sats` : undefined,
|
|
66
|
+
currency: service.payment_asset ?? (protocol === "l402" ? "sats" : "USDC"),
|
|
67
|
+
},
|
|
68
|
+
reputation: service.reliability_score ? {
|
|
69
|
+
score: service.reliability_score,
|
|
70
|
+
count: service.uptime_30d ? Math.round(service.uptime_30d * 100) : 0,
|
|
71
|
+
source: "402index",
|
|
72
|
+
} : undefined,
|
|
73
|
+
verified: service.x402_payment_valid === 1 || service.health_status === "healthy",
|
|
74
|
+
lastSeen: service.last_checked ? new Date(service.last_checked).getTime() : undefined,
|
|
75
75
|
raw: service,
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
|
+
function mapProtocol(protocol) {
|
|
79
|
+
switch (protocol?.toLowerCase()) {
|
|
80
|
+
case "x402": return "x402";
|
|
81
|
+
case "l402": return "l402";
|
|
82
|
+
case "mpp": return "x402"; // MPP uses same HTTP 402 pattern
|
|
83
|
+
default: return "x402";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function cleanName(name) {
|
|
87
|
+
return name.replace(/^\s+|\s+$/g, "").split("\n")[0].trim().slice(0, 100);
|
|
88
|
+
}
|
|
89
|
+
function cleanDescription(desc) {
|
|
90
|
+
return desc.replace(/^\s+|\s+$/g, "").replace(/\s+/g, " ").slice(0, 300);
|
|
91
|
+
}
|
|
78
92
|
//# sourceMappingURL=x402-ecosystem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402-ecosystem.js","sourceRoot":"","sources":["../../src/sources/x402-ecosystem.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"x402-ecosystem.js","sourceRoot":"","sources":["../../src/sources/x402-ecosystem.ts"],"names":[],"mappings":"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"}
|
package/dist/unified.d.ts
CHANGED
|
@@ -26,6 +26,8 @@ export interface UnifiedConfig {
|
|
|
26
26
|
kompassConfig?: any;
|
|
27
27
|
/** ERC-8004 reputation writer config (writes feedback after executions) */
|
|
28
28
|
reputationWriter?: ReputationWriterConfig;
|
|
29
|
+
/** Kompass wallet for payments */
|
|
30
|
+
wallet?: any;
|
|
29
31
|
}
|
|
30
32
|
export interface FindOptions {
|
|
31
33
|
/** Max results */
|
package/dist/unified.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified.d.ts","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAClC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gDAAgD;IAChD,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,uDAAuD;IACvD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"unified.d.ts","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAwC,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAkB,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAClC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gDAAgD;IAChD,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,uDAAuD;IACvD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,kCAAkC;IAClC,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,+CAA+C;IAC/C,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,MAAM,CAAC,CAAgB;IAE/B,OAAO;WAQM,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAcpE;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBrE;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI9G;;;OAGG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,GACjD,OAAO,CAAC;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAa7D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAInF;;;;;;;;;OASG;IACG,EAAE,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI/C;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
|
package/dist/unified.js
CHANGED
|
@@ -25,7 +25,7 @@ export class KompassUnified {
|
|
|
25
25
|
this.config = config;
|
|
26
26
|
this.aggregator = new Aggregator(adapters);
|
|
27
27
|
this.bridge = bridge;
|
|
28
|
-
this.router = new CapabilityRouter(this.aggregator, this.bridge, config?.reputationWriter);
|
|
28
|
+
this.router = new CapabilityRouter(this.aggregator, this.bridge, config?.reputationWriter, config?.wallet);
|
|
29
29
|
}
|
|
30
30
|
static async create(config) {
|
|
31
31
|
const adapters = createAllSources({
|
package/dist/unified.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified.js","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAyC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAiD,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAoB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAiD,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAiC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"unified.js","sourceRoot":"","sources":["../src/unified.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../../src/wallet/handlers/acp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAS3D,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../../src/wallet/handlers/acp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAS3D,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqHvF"}
|
|
@@ -37,7 +37,7 @@ export async function handleACPPayment(wallet, agent, task, budget) {
|
|
|
37
37
|
const { stdout } = await execFileAsync("npx", [
|
|
38
38
|
"acp", "job", "create",
|
|
39
39
|
walletAddress,
|
|
40
|
-
String(offering.id),
|
|
40
|
+
String(offering.name ?? offering.id),
|
|
41
41
|
"--requirements", requirements,
|
|
42
42
|
"--isAutomated", "true",
|
|
43
43
|
"--json",
|
|
@@ -47,18 +47,53 @@ export async function handleACPPayment(wallet, agent, task, budget) {
|
|
|
47
47
|
env: { ...process.env, NODE_NO_WARNINGS: "1" },
|
|
48
48
|
});
|
|
49
49
|
const jobData = JSON.parse(stdout.trim());
|
|
50
|
+
const jobId = jobData.data?.jobId ?? jobData.jobId ?? jobData.id;
|
|
51
|
+
console.log(`[Kompass] ACP job #${jobId} created with ${agent.name}. Polling for completion...`);
|
|
52
|
+
// Poll for completion (max 2 minutes)
|
|
53
|
+
const maxWait = 120_000;
|
|
54
|
+
const pollInterval = 10_000;
|
|
55
|
+
const start = Date.now();
|
|
56
|
+
let finalPhase = "created";
|
|
57
|
+
let deliverable = null;
|
|
58
|
+
while (Date.now() - start < maxWait) {
|
|
59
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
60
|
+
try {
|
|
61
|
+
const { stdout: statusOut } = await execFileAsync("npx", ["acp", "job", "status", String(jobId), "--json"], { cwd: "/tmp/openclaw-acp", timeout: 15000, env: { ...process.env, NODE_NO_WARNINGS: "1" } });
|
|
62
|
+
const statusData = JSON.parse(statusOut.trim());
|
|
63
|
+
finalPhase = statusData.phase ?? "unknown";
|
|
64
|
+
console.log(`[Kompass] Job #${jobId} phase: ${finalPhase}`);
|
|
65
|
+
if (finalPhase === "COMPLETED") {
|
|
66
|
+
deliverable = statusData.deliverable;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
if (finalPhase === "REJECTED" || finalPhase === "EXPIRED" || finalPhase === "CANCELLED") {
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Status check failed, keep polling
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (finalPhase === "COMPLETED" && deliverable) {
|
|
78
|
+
return {
|
|
79
|
+
success: true,
|
|
80
|
+
deliverable,
|
|
81
|
+
jobId: String(jobId),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
50
84
|
return {
|
|
51
|
-
success:
|
|
85
|
+
success: finalPhase === "COMPLETED",
|
|
52
86
|
deliverable: {
|
|
53
87
|
type: "acp-escrow",
|
|
54
|
-
jobId:
|
|
55
|
-
|
|
56
|
-
message: "
|
|
88
|
+
jobId: String(jobId),
|
|
89
|
+
phase: finalPhase,
|
|
90
|
+
message: finalPhase === "COMPLETED" ? "Job completed" : `Job ended with phase: ${finalPhase}`,
|
|
57
91
|
offering: offering.name,
|
|
58
92
|
price: offering.price,
|
|
59
93
|
agent: agent.name,
|
|
94
|
+
deliverable,
|
|
60
95
|
},
|
|
61
|
-
jobId: String(
|
|
96
|
+
jobId: String(jobId),
|
|
62
97
|
};
|
|
63
98
|
}
|
|
64
99
|
catch (err) {
|