kompass-sdk 0.1.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/a2a/agent-card.d.ts +13 -0
- package/dist/a2a/agent-card.d.ts.map +1 -0
- package/dist/a2a/agent-card.js +52 -0
- package/dist/a2a/agent-card.js.map +1 -0
- package/dist/a2a/bridge.d.ts +52 -0
- package/dist/a2a/bridge.d.ts.map +1 -0
- package/dist/a2a/bridge.js +123 -0
- package/dist/a2a/bridge.js.map +1 -0
- package/dist/a2a/client.d.ts +34 -0
- package/dist/a2a/client.d.ts.map +1 -0
- package/dist/a2a/client.js +65 -0
- package/dist/a2a/client.js.map +1 -0
- package/dist/a2a/server.d.ts +17 -0
- package/dist/a2a/server.d.ts.map +1 -0
- package/dist/a2a/server.js +194 -0
- package/dist/a2a/server.js.map +1 -0
- package/dist/abi.d.ts +1068 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +1372 -0
- package/dist/abi.js.map +1 -0
- package/dist/adapters/agentkit.d.ts +41 -0
- package/dist/adapters/agentkit.d.ts.map +1 -0
- package/dist/adapters/agentkit.js +67 -0
- package/dist/adapters/agentkit.js.map +1 -0
- package/dist/adapters/generic.d.ts +35 -0
- package/dist/adapters/generic.d.ts.map +1 -0
- package/dist/adapters/generic.js +47 -0
- package/dist/adapters/generic.js.map +1 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/langchain.d.ts +26 -0
- package/dist/adapters/langchain.d.ts.map +1 -0
- package/dist/adapters/langchain.js +228 -0
- package/dist/adapters/langchain.js.map +1 -0
- package/dist/adapters/openclaw.d.ts +18 -0
- package/dist/adapters/openclaw.d.ts.map +1 -0
- package/dist/adapters/openclaw.js +168 -0
- package/dist/adapters/openclaw.js.map +1 -0
- package/dist/aggregator.d.ts +36 -0
- package/dist/aggregator.d.ts.map +1 -0
- package/dist/aggregator.js +168 -0
- package/dist/aggregator.js.map +1 -0
- package/dist/backends/acp.d.ts +29 -0
- package/dist/backends/acp.d.ts.map +1 -0
- package/dist/backends/acp.js +126 -0
- package/dist/backends/acp.js.map +1 -0
- package/dist/backends/types.d.ts +59 -0
- package/dist/backends/types.d.ts.map +1 -0
- package/dist/backends/types.js +2 -0
- package/dist/backends/types.js.map +1 -0
- package/dist/bridge.d.ts +35 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +192 -0
- package/dist/bridge.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +331 -0
- package/dist/cli.js.map +1 -0
- package/dist/discover.d.ts +15 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +163 -0
- package/dist/discover.js.map +1 -0
- package/dist/escrow.d.ts +45 -0
- package/dist/escrow.d.ts.map +1 -0
- package/dist/escrow.js +243 -0
- package/dist/escrow.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +145 -0
- package/dist/index.js.map +1 -0
- package/dist/intents.d.ts +28 -0
- package/dist/intents.d.ts.map +1 -0
- package/dist/intents.js +111 -0
- package/dist/intents.js.map +1 -0
- package/dist/matching.d.ts +29 -0
- package/dist/matching.d.ts.map +1 -0
- package/dist/matching.js +147 -0
- package/dist/matching.js.map +1 -0
- package/dist/pipelineAbi.d.ts +113 -0
- package/dist/pipelineAbi.d.ts.map +1 -0
- package/dist/pipelineAbi.js +74 -0
- package/dist/pipelineAbi.js.map +1 -0
- package/dist/pipelines.d.ts +42 -0
- package/dist/pipelines.d.ts.map +1 -0
- package/dist/pipelines.js +185 -0
- package/dist/pipelines.js.map +1 -0
- package/dist/registry.d.ts +36 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +187 -0
- package/dist/registry.js.map +1 -0
- package/dist/reputation.d.ts +10 -0
- package/dist/reputation.d.ts.map +1 -0
- package/dist/reputation.js +33 -0
- package/dist/reputation.js.map +1 -0
- package/dist/router.d.ts +72 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +190 -0
- package/dist/router.js.map +1 -0
- package/dist/simple.d.ts +160 -0
- package/dist/simple.d.ts.map +1 -0
- package/dist/simple.js +237 -0
- package/dist/simple.js.map +1 -0
- package/dist/sources/a2a-wellknown.d.ts +8 -0
- package/dist/sources/a2a-wellknown.d.ts.map +1 -0
- package/dist/sources/a2a-wellknown.js +104 -0
- package/dist/sources/a2a-wellknown.js.map +1 -0
- package/dist/sources/acp.d.ts +7 -0
- package/dist/sources/acp.d.ts.map +1 -0
- package/dist/sources/acp.js +86 -0
- package/dist/sources/acp.js.map +1 -0
- package/dist/sources/adp.d.ts +7 -0
- package/dist/sources/adp.d.ts.map +1 -0
- package/dist/sources/adp.js +59 -0
- package/dist/sources/adp.js.map +1 -0
- package/dist/sources/erc8004.d.ts +7 -0
- package/dist/sources/erc8004.d.ts.map +1 -0
- package/dist/sources/erc8004.js +150 -0
- package/dist/sources/erc8004.js.map +1 -0
- package/dist/sources/index.d.ts +17 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +35 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/kompass-registry.d.ts +8 -0
- package/dist/sources/kompass-registry.d.ts.map +1 -0
- package/dist/sources/kompass-registry.js +62 -0
- package/dist/sources/kompass-registry.js.map +1 -0
- package/dist/sources/l402-directory.d.ts +7 -0
- package/dist/sources/l402-directory.d.ts.map +1 -0
- package/dist/sources/l402-directory.js +42 -0
- package/dist/sources/l402-directory.js.map +1 -0
- package/dist/sources/mcp-registry.d.ts +8 -0
- package/dist/sources/mcp-registry.d.ts.map +1 -0
- package/dist/sources/mcp-registry.js +85 -0
- package/dist/sources/mcp-registry.js.map +1 -0
- package/dist/sources/skills.d.ts +8 -0
- package/dist/sources/skills.d.ts.map +1 -0
- package/dist/sources/skills.js +153 -0
- package/dist/sources/skills.js.map +1 -0
- package/dist/sources/types.d.ts +72 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +8 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/sources/x402-ecosystem.d.ts +7 -0
- package/dist/sources/x402-ecosystem.d.ts.map +1 -0
- package/dist/sources/x402-ecosystem.js +78 -0
- package/dist/sources/x402-ecosystem.js.map +1 -0
- package/dist/types.d.ts +133 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/unified.d.ts +90 -0
- package/dist/unified.d.ts.map +1 -0
- package/dist/unified.js +107 -0
- package/dist/unified.js.map +1 -0
- package/dist/x402.d.ts +30 -0
- package/dist/x402.d.ts.map +1 -0
- package/dist/x402.js +79 -0
- package/dist/x402.js.map +1 -0
- package/package.json +61 -0
- package/scripts/bootstrap-agents.mjs +246 -0
- package/src/.gitkeep +0 -0
- package/src/a2a/agent-card.ts +66 -0
- package/src/a2a/bridge.ts +168 -0
- package/src/a2a/client.ts +92 -0
- package/src/a2a/server.ts +234 -0
- package/src/abi.ts +1373 -0
- package/src/adapters/agentkit.ts +83 -0
- package/src/adapters/generic.ts +62 -0
- package/src/adapters/index.ts +4 -0
- package/src/adapters/langchain.ts +282 -0
- package/src/adapters/openclaw.ts +203 -0
- package/src/aggregator.ts +203 -0
- package/src/backends/acp.ts +199 -0
- package/src/backends/types.ts +78 -0
- package/src/bridge.ts +263 -0
- package/src/cli.ts +397 -0
- package/src/discover.ts +187 -0
- package/src/escrow.ts +284 -0
- package/src/index.ts +245 -0
- package/src/intents.ts +166 -0
- package/src/matching.ts +192 -0
- package/src/pipelineAbi.ts +74 -0
- package/src/pipelines.ts +253 -0
- package/src/registry.ts +232 -0
- package/src/reputation.ts +43 -0
- package/src/router.ts +279 -0
- package/src/simple.ts +366 -0
- package/src/sources/a2a-wellknown.ts +120 -0
- package/src/sources/acp.ts +91 -0
- package/src/sources/adp.ts +64 -0
- package/src/sources/erc8004.ts +166 -0
- package/src/sources/index.ts +52 -0
- package/src/sources/kompass-registry.ts +67 -0
- package/src/sources/l402-directory.ts +51 -0
- package/src/sources/mcp-registry.ts +104 -0
- package/src/sources/skills.ts +161 -0
- package/src/sources/types.ts +82 -0
- package/src/sources/x402-ecosystem.ts +86 -0
- package/src/types.ts +147 -0
- package/src/unified.ts +155 -0
- package/src/x402.ts +122 -0
- package/tests/pipelineFlow.test.ts +239 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
const bigintReplacer = (_k, v) => (typeof v === "bigint" ? v.toString() : v);
|
|
2
|
+
export const SKILL_MD = `---
|
|
3
|
+
name: kompass
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
description: Discover, hire, and pay AI agents via decentralized escrow on Base
|
|
6
|
+
author: Kompass Protocol
|
|
7
|
+
tags: [defi, agents, escrow, reputation, base]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Kompass Protocol
|
|
11
|
+
|
|
12
|
+
Interact with the Kompass agentic commerce protocol on Base.
|
|
13
|
+
Discover agents, create escrow jobs, check reputation, and route DeFi intents.
|
|
14
|
+
|
|
15
|
+
## Actions
|
|
16
|
+
|
|
17
|
+
### discover
|
|
18
|
+
Find agents by category and reputation.
|
|
19
|
+
- category (string, optional): Filter category (e.g. "defi", "data")
|
|
20
|
+
- agentType (string, optional): "provider" | "evaluator" | "both"
|
|
21
|
+
- verifiedOnly (boolean, optional): Only return identity-verified agents
|
|
22
|
+
|
|
23
|
+
### get_agent
|
|
24
|
+
Get a single agent's profile.
|
|
25
|
+
- address (string, required): Agent wallet address
|
|
26
|
+
|
|
27
|
+
### create_job
|
|
28
|
+
Create an escrow job with a provider and evaluator.
|
|
29
|
+
- provider (string, required): Provider address
|
|
30
|
+
- evaluator (string, required): Evaluator address
|
|
31
|
+
- budget (string, required): Budget in USDC base units
|
|
32
|
+
- expiredAt (string, required): Expiry unix timestamp
|
|
33
|
+
- description (string, required): Job description
|
|
34
|
+
|
|
35
|
+
### fund_job
|
|
36
|
+
Fund an existing job, locking USDC in escrow.
|
|
37
|
+
- jobId (string, required): Job ID
|
|
38
|
+
|
|
39
|
+
### submit
|
|
40
|
+
Submit a deliverable for evaluation.
|
|
41
|
+
- jobId (string, required): Job ID
|
|
42
|
+
- deliverable (string, required): Deliverable hash (bytes32)
|
|
43
|
+
|
|
44
|
+
### complete
|
|
45
|
+
Mark a job as complete, releasing payment (evaluator only).
|
|
46
|
+
- jobId (string, required): Job ID
|
|
47
|
+
- reason (string, optional): Attestation hash
|
|
48
|
+
|
|
49
|
+
### get_reputation
|
|
50
|
+
Check an agent's onchain ERC-8004 reputation.
|
|
51
|
+
- agentId (string, required): ERC-8004 agent ID
|
|
52
|
+
|
|
53
|
+
### route_yield_intent
|
|
54
|
+
Route a DeFi yield intent to specialist agents.
|
|
55
|
+
- amount (string, required): Capital in USDC base units
|
|
56
|
+
- riskTolerance (string, required): "conservative" | "balanced" | "aggressive"
|
|
57
|
+
|
|
58
|
+
### register
|
|
59
|
+
Register your agent on Kompass. Sets ENS text records and calls registerAgent().
|
|
60
|
+
- ensNode (string, required): ENS namehash of your Basename (bytes32)
|
|
61
|
+
- agentType (string, required): "provider" | "evaluator" | "both"
|
|
62
|
+
- categories (string, required): Comma-separated categories
|
|
63
|
+
- description (string, required): What your agent does
|
|
64
|
+
- paymentMode (string, optional): "escrow" | "x402" | "hybrid"
|
|
65
|
+
- pricingRate (string, optional): Price in USDC base units
|
|
66
|
+
|
|
67
|
+
### update_profile
|
|
68
|
+
Update your agent's profile. Only provided fields are changed.
|
|
69
|
+
- ensNode (string, required): Your ENS namehash
|
|
70
|
+
- categories (string, optional): Updated categories
|
|
71
|
+
- description (string, optional): Updated description
|
|
72
|
+
|
|
73
|
+
### deregister
|
|
74
|
+
Remove your agent from discovery.
|
|
75
|
+
|
|
76
|
+
### approve_usdc
|
|
77
|
+
Approve USDC spending for escrow. Required before fund_job.
|
|
78
|
+
- spender (string, required): Spender contract address
|
|
79
|
+
- amount (string, required): Amount in USDC base units
|
|
80
|
+
|
|
81
|
+
### get_balance
|
|
82
|
+
Get your agent's USDC and ETH balance.
|
|
83
|
+
`;
|
|
84
|
+
export async function handleSkill(kompass, action, params) {
|
|
85
|
+
switch (action) {
|
|
86
|
+
case "discover": {
|
|
87
|
+
const results = await kompass.discover({
|
|
88
|
+
category: params.category,
|
|
89
|
+
agentType: params.agentType,
|
|
90
|
+
verifiedOnly: params.verifiedOnly === "true",
|
|
91
|
+
});
|
|
92
|
+
return JSON.stringify(results, bigintReplacer);
|
|
93
|
+
}
|
|
94
|
+
case "get_agent": {
|
|
95
|
+
const agent = await kompass.getAgent(params.address);
|
|
96
|
+
return JSON.stringify(agent, bigintReplacer);
|
|
97
|
+
}
|
|
98
|
+
case "create_job": {
|
|
99
|
+
const result = await kompass.createJob({
|
|
100
|
+
provider: params.provider,
|
|
101
|
+
evaluator: params.evaluator,
|
|
102
|
+
budget: BigInt(params.budget),
|
|
103
|
+
expiredAt: BigInt(params.expiredAt),
|
|
104
|
+
description: params.description,
|
|
105
|
+
});
|
|
106
|
+
return JSON.stringify(result, bigintReplacer);
|
|
107
|
+
}
|
|
108
|
+
case "fund_job": {
|
|
109
|
+
const result = await kompass.fund(BigInt(params.jobId));
|
|
110
|
+
return JSON.stringify(result, bigintReplacer);
|
|
111
|
+
}
|
|
112
|
+
case "submit": {
|
|
113
|
+
const result = await kompass.submit(BigInt(params.jobId), params.deliverable);
|
|
114
|
+
return JSON.stringify(result, bigintReplacer);
|
|
115
|
+
}
|
|
116
|
+
case "complete": {
|
|
117
|
+
const result = await kompass.complete(BigInt(params.jobId), params.reason);
|
|
118
|
+
return JSON.stringify(result, bigintReplacer);
|
|
119
|
+
}
|
|
120
|
+
case "get_reputation": {
|
|
121
|
+
const result = await kompass.getReputation(BigInt(params.agentId));
|
|
122
|
+
return JSON.stringify(result, bigintReplacer);
|
|
123
|
+
}
|
|
124
|
+
case "route_yield_intent": {
|
|
125
|
+
const route = await kompass.routeYieldIntent({
|
|
126
|
+
amount: BigInt(params.amount),
|
|
127
|
+
riskTolerance: params.riskTolerance,
|
|
128
|
+
chain: "Base",
|
|
129
|
+
stablecoin: "USDC",
|
|
130
|
+
});
|
|
131
|
+
return JSON.stringify(route, bigintReplacer);
|
|
132
|
+
}
|
|
133
|
+
case "register": {
|
|
134
|
+
const result = await kompass.register({
|
|
135
|
+
ensNode: params.ensNode,
|
|
136
|
+
agentType: params.agentType,
|
|
137
|
+
categories: params.categories,
|
|
138
|
+
description: params.description,
|
|
139
|
+
paymentMode: params.paymentMode,
|
|
140
|
+
pricingRate: params.pricingRate,
|
|
141
|
+
});
|
|
142
|
+
return JSON.stringify(result, bigintReplacer);
|
|
143
|
+
}
|
|
144
|
+
case "update_profile": {
|
|
145
|
+
const { ensNode, ...updates } = params;
|
|
146
|
+
const result = await kompass.updateProfile(ensNode, updates);
|
|
147
|
+
return JSON.stringify(result, bigintReplacer);
|
|
148
|
+
}
|
|
149
|
+
case "deregister": {
|
|
150
|
+
const result = await kompass.deregister();
|
|
151
|
+
return JSON.stringify(result, bigintReplacer);
|
|
152
|
+
}
|
|
153
|
+
case "approve_usdc": {
|
|
154
|
+
const amount = params.amount === "max"
|
|
155
|
+
? BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
|
|
156
|
+
: BigInt(params.amount);
|
|
157
|
+
const result = await kompass.approveToken(params.spender, amount);
|
|
158
|
+
return JSON.stringify(result, bigintReplacer);
|
|
159
|
+
}
|
|
160
|
+
case "get_balance": {
|
|
161
|
+
const result = await kompass.getBalance();
|
|
162
|
+
return JSON.stringify(result, bigintReplacer);
|
|
163
|
+
}
|
|
164
|
+
default:
|
|
165
|
+
return JSON.stringify({ error: `Unknown action: ${action}` });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=openclaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kompass Aggregator
|
|
3
|
+
* Searches all source adapters in parallel, deduplicates, and ranks results.
|
|
4
|
+
*/
|
|
5
|
+
import type { SourceAdapter, UnifiedAgent, SourceSearchOptions } from "./sources/types.js";
|
|
6
|
+
export interface AggregatorOptions extends SourceSearchOptions {
|
|
7
|
+
/** Only search these sources (by name) */
|
|
8
|
+
sources?: string[];
|
|
9
|
+
/** Minimum relevance score to include (0-100) */
|
|
10
|
+
minScore?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface AggregatorResult {
|
|
13
|
+
agents: UnifiedAgent[];
|
|
14
|
+
sources: {
|
|
15
|
+
name: string;
|
|
16
|
+
count: number;
|
|
17
|
+
durationMs: number;
|
|
18
|
+
error?: string;
|
|
19
|
+
}[];
|
|
20
|
+
totalFound: number;
|
|
21
|
+
deduplicated: number;
|
|
22
|
+
queryTimeMs: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class Aggregator {
|
|
25
|
+
private adapters;
|
|
26
|
+
constructor(adapters: SourceAdapter[]);
|
|
27
|
+
search(query: string, options?: AggregatorOptions): Promise<AggregatorResult>;
|
|
28
|
+
healthCheck(): Promise<{
|
|
29
|
+
name: string;
|
|
30
|
+
displayName: string;
|
|
31
|
+
healthy: boolean;
|
|
32
|
+
}[]>;
|
|
33
|
+
private deduplicate;
|
|
34
|
+
private scoreAndRank;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=aggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE3F,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,QAAQ,EAAE,aAAa,EAAE;IAI/B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoE7E,WAAW,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAcvF,OAAO,CAAC,WAAW;IAiDnB,OAAO,CAAC,YAAY;CA0CrB"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kompass Aggregator
|
|
3
|
+
* Searches all source adapters in parallel, deduplicates, and ranks results.
|
|
4
|
+
*/
|
|
5
|
+
export class Aggregator {
|
|
6
|
+
adapters;
|
|
7
|
+
constructor(adapters) {
|
|
8
|
+
this.adapters = adapters;
|
|
9
|
+
}
|
|
10
|
+
async search(query, options) {
|
|
11
|
+
const startTime = Date.now();
|
|
12
|
+
const limit = options?.limit ?? 50;
|
|
13
|
+
const timeout = options?.timeout ?? 15000;
|
|
14
|
+
// Filter adapters by source name if specified
|
|
15
|
+
const activeAdapters = options?.sources
|
|
16
|
+
? this.adapters.filter((a) => options.sources.includes(a.name))
|
|
17
|
+
: this.adapters;
|
|
18
|
+
// Fan out to all sources in parallel
|
|
19
|
+
const promises = activeAdapters.map(async (adapter) => {
|
|
20
|
+
const adapterStart = Date.now();
|
|
21
|
+
try {
|
|
22
|
+
const results = await adapter.search(query, { limit, timeout });
|
|
23
|
+
return {
|
|
24
|
+
name: adapter.name,
|
|
25
|
+
displayName: adapter.displayName,
|
|
26
|
+
results,
|
|
27
|
+
durationMs: Date.now() - adapterStart,
|
|
28
|
+
error: undefined,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
return {
|
|
33
|
+
name: adapter.name,
|
|
34
|
+
displayName: adapter.displayName,
|
|
35
|
+
results: [],
|
|
36
|
+
durationMs: Date.now() - adapterStart,
|
|
37
|
+
error: err instanceof Error ? err.message : String(err),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
const settled = await Promise.allSettled(promises);
|
|
42
|
+
const sourceResults = settled.map((s) => s.status === "fulfilled" ? s.value : { name: "unknown", displayName: "Unknown", results: [], durationMs: 0, error: "Promise rejected" });
|
|
43
|
+
// Flatten all results
|
|
44
|
+
const allAgents = sourceResults.flatMap((s) => s.results);
|
|
45
|
+
const totalFound = allAgents.length;
|
|
46
|
+
// Deduplicate
|
|
47
|
+
const deduped = this.deduplicate(allAgents);
|
|
48
|
+
const deduplicated = totalFound - deduped.length;
|
|
49
|
+
// Score and rank
|
|
50
|
+
const scored = this.scoreAndRank(deduped, query);
|
|
51
|
+
// Apply minimum score filter
|
|
52
|
+
const filtered = options?.minScore
|
|
53
|
+
? scored.filter((a) => a._score >= options.minScore)
|
|
54
|
+
: scored;
|
|
55
|
+
return {
|
|
56
|
+
agents: filtered.slice(0, limit),
|
|
57
|
+
sources: sourceResults.map((s) => ({
|
|
58
|
+
name: s.name,
|
|
59
|
+
count: s.results.length,
|
|
60
|
+
durationMs: s.durationMs,
|
|
61
|
+
error: s.error,
|
|
62
|
+
})),
|
|
63
|
+
totalFound,
|
|
64
|
+
deduplicated,
|
|
65
|
+
queryTimeMs: Date.now() - startTime,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async healthCheck() {
|
|
69
|
+
const results = await Promise.allSettled(this.adapters.map(async (adapter) => ({
|
|
70
|
+
name: adapter.name,
|
|
71
|
+
displayName: adapter.displayName,
|
|
72
|
+
healthy: await adapter.ping(),
|
|
73
|
+
})));
|
|
74
|
+
return results.map((r) => r.status === "fulfilled" ? r.value : { name: "unknown", displayName: "Unknown", healthy: false });
|
|
75
|
+
}
|
|
76
|
+
deduplicate(agents) {
|
|
77
|
+
const seen = new Map();
|
|
78
|
+
for (const agent of agents) {
|
|
79
|
+
// Generate dedup keys from endpoints
|
|
80
|
+
const keys = [
|
|
81
|
+
agent.endpoints.mcp,
|
|
82
|
+
agent.endpoints.a2a,
|
|
83
|
+
agent.endpoints.x402,
|
|
84
|
+
agent.endpoints.http,
|
|
85
|
+
agent.endpoints.acp?.walletAddress,
|
|
86
|
+
].filter(Boolean);
|
|
87
|
+
let existingKey;
|
|
88
|
+
for (const key of keys) {
|
|
89
|
+
if (seen.has(key)) {
|
|
90
|
+
existingKey = key;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (existingKey) {
|
|
95
|
+
// Merge: keep richer data
|
|
96
|
+
const existing = seen.get(existingKey);
|
|
97
|
+
existing.categories = [...new Set([...existing.categories, ...agent.categories])];
|
|
98
|
+
existing.capabilities = [...new Set([...existing.capabilities, ...agent.capabilities])];
|
|
99
|
+
if (!existing.reputation && agent.reputation)
|
|
100
|
+
existing.reputation = agent.reputation;
|
|
101
|
+
if (!existing.pricing && agent.pricing)
|
|
102
|
+
existing.pricing = agent.pricing;
|
|
103
|
+
if (agent.description.length > existing.description.length)
|
|
104
|
+
existing.description = agent.description;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// New agent
|
|
108
|
+
for (const key of keys) {
|
|
109
|
+
if (key)
|
|
110
|
+
seen.set(key, agent);
|
|
111
|
+
}
|
|
112
|
+
// Also key by name for simple dedup
|
|
113
|
+
if (!seen.has(agent.name.toLowerCase())) {
|
|
114
|
+
seen.set(agent.name.toLowerCase(), agent);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Return unique agents
|
|
119
|
+
const uniqueAgents = new Map();
|
|
120
|
+
for (const agent of seen.values()) {
|
|
121
|
+
uniqueAgents.set(agent.id, agent);
|
|
122
|
+
}
|
|
123
|
+
return Array.from(uniqueAgents.values());
|
|
124
|
+
}
|
|
125
|
+
scoreAndRank(agents, query) {
|
|
126
|
+
const queryLower = query.toLowerCase();
|
|
127
|
+
const queryTerms = queryLower.split(/\s+/).filter((t) => t.length > 2);
|
|
128
|
+
return agents
|
|
129
|
+
.map((agent) => {
|
|
130
|
+
let score = 0;
|
|
131
|
+
const searchText = `${agent.name} ${agent.description} ${agent.categories.join(" ")} ${agent.capabilities.join(" ")}`.toLowerCase();
|
|
132
|
+
// Term matching (BM25-lite)
|
|
133
|
+
for (const term of queryTerms) {
|
|
134
|
+
if (agent.name.toLowerCase().includes(term))
|
|
135
|
+
score += 10;
|
|
136
|
+
if (agent.description.toLowerCase().includes(term))
|
|
137
|
+
score += 5;
|
|
138
|
+
if (agent.categories.some((c) => c.includes(term)))
|
|
139
|
+
score += 8;
|
|
140
|
+
if (agent.capabilities.some((c) => c.toLowerCase().includes(term)))
|
|
141
|
+
score += 3;
|
|
142
|
+
}
|
|
143
|
+
// Reputation bonus
|
|
144
|
+
if (agent.reputation) {
|
|
145
|
+
score += Math.min(agent.reputation.score * 2, 20);
|
|
146
|
+
score += Math.min(agent.reputation.count, 10);
|
|
147
|
+
}
|
|
148
|
+
// Verified bonus
|
|
149
|
+
if (agent.verified)
|
|
150
|
+
score += 5;
|
|
151
|
+
// Has pricing info bonus (transparency)
|
|
152
|
+
if (agent.pricing && agent.pricing.model !== "unknown")
|
|
153
|
+
score += 3;
|
|
154
|
+
// Has multiple endpoints bonus (more interoperable)
|
|
155
|
+
const endpointCount = Object.values(agent.endpoints).filter(Boolean).length;
|
|
156
|
+
score += endpointCount * 2;
|
|
157
|
+
// Protocol diversity bonus
|
|
158
|
+
if (agent.protocol === "mcp")
|
|
159
|
+
score += 2; // MCP is most interoperable
|
|
160
|
+
if (agent.protocol === "a2a")
|
|
161
|
+
score += 2;
|
|
162
|
+
agent._score = score;
|
|
163
|
+
return agent;
|
|
164
|
+
})
|
|
165
|
+
.sort((a, b) => (b._score ?? 0) - (a._score ?? 0));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=aggregator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../src/aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
import type { EscrowBackend, AgentSearchResult, JobResult, BrowseOptions, IncomingJob } from "./types.js";
|
|
3
|
+
export interface AcpBackendConfig {
|
|
4
|
+
/** Private key for the agent wallet (whitelisted on ACP) */
|
|
5
|
+
privateKey: string;
|
|
6
|
+
/** Agent's wallet address on ACP */
|
|
7
|
+
walletAddress: Address;
|
|
8
|
+
/** Entity/session key address from ACP registration */
|
|
9
|
+
entityAddress: Address;
|
|
10
|
+
/** Network: "base-sepolia" or "base" */
|
|
11
|
+
network?: "base-sepolia" | "base";
|
|
12
|
+
/** Custom RPC URL */
|
|
13
|
+
rpcUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class AcpEscrowBackend implements EscrowBackend {
|
|
16
|
+
private client;
|
|
17
|
+
private config;
|
|
18
|
+
private jobHandlers;
|
|
19
|
+
constructor(config: AcpBackendConfig);
|
|
20
|
+
name(): string;
|
|
21
|
+
init(): Promise<void>;
|
|
22
|
+
browseAgents(query: string, options?: BrowseOptions): Promise<AgentSearchResult[]>;
|
|
23
|
+
hireAgent(agent: AgentSearchResult, offeringId: string, requirements: Record<string, unknown>, _budget?: bigint): Promise<JobResult>;
|
|
24
|
+
waitForResult(jobId: string, timeoutMs?: number): Promise<JobResult>;
|
|
25
|
+
acceptJobs(capabilities: string[], handler: (job: IncomingJob) => Promise<unknown>): Promise<void>;
|
|
26
|
+
private handleIncomingJob;
|
|
27
|
+
private mapAcpAgent;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=acp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../../src/backends/acp.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAEjB,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,uDAAuD;IACvD,aAAa,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IAClC,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAA6D;gBAEpE,MAAM,EAAE,gBAAgB;IAIpC,IAAI,IAAI,MAAM;IAIR,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBrB,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAazB,SAAS,CACb,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,CAAC;IAef,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,SAAS,SAAU,GAClB,OAAO,CAAC,SAAS,CAAC;IA+Bf,UAAU,CACd,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC;YAQF,iBAAiB;IAyB/B,OAAO,CAAC,WAAW;CAyBpB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import AcpClient, { AcpContractClientV2, baseSepoliaAcpConfigV2, baseAcpConfigV2, } from "@virtuals-protocol/acp-node";
|
|
2
|
+
export class AcpEscrowBackend {
|
|
3
|
+
client;
|
|
4
|
+
config;
|
|
5
|
+
jobHandlers = new Map();
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
name() {
|
|
10
|
+
return "virtuals-acp";
|
|
11
|
+
}
|
|
12
|
+
async init() {
|
|
13
|
+
const acpConfig = this.config.network === "base"
|
|
14
|
+
? baseAcpConfigV2
|
|
15
|
+
: baseSepoliaAcpConfigV2;
|
|
16
|
+
const contractClient = await AcpContractClientV2.build(this.config.privateKey, this.config.entityAddress, this.config.walletAddress, this.config.rpcUrl, acpConfig);
|
|
17
|
+
this.client = new AcpClient({
|
|
18
|
+
acpContractClient: contractClient,
|
|
19
|
+
walletAddress: this.config.walletAddress,
|
|
20
|
+
entityAddress: this.config.entityAddress,
|
|
21
|
+
onNewTask: (job) => this.handleIncomingJob(job),
|
|
22
|
+
});
|
|
23
|
+
await this.client.init();
|
|
24
|
+
}
|
|
25
|
+
async browseAgents(query, options) {
|
|
26
|
+
const agents = await this.client.browseAgents({
|
|
27
|
+
keyword: query,
|
|
28
|
+
onlineStatus: options?.onlineOnly ? "online" : "all",
|
|
29
|
+
limit: options?.limit ?? 20,
|
|
30
|
+
sortBy: options?.sortBy === "successRate" ? "successRate" : undefined,
|
|
31
|
+
});
|
|
32
|
+
return (agents ?? []).map((agent) => this.mapAcpAgent(agent));
|
|
33
|
+
}
|
|
34
|
+
async hireAgent(agent, offeringId, requirements, _budget) {
|
|
35
|
+
const job = await this.client.initiateJob({
|
|
36
|
+
providerAddress: agent.address,
|
|
37
|
+
jobOfferingId: offeringId,
|
|
38
|
+
requirements,
|
|
39
|
+
skipEvaluation: true,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
jobId: job.id ?? String(job),
|
|
43
|
+
phase: "REQUEST",
|
|
44
|
+
deliverable: null,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async waitForResult(jobId, timeoutMs = 300_000) {
|
|
48
|
+
const start = Date.now();
|
|
49
|
+
const pollInterval = 5_000;
|
|
50
|
+
while (Date.now() - start < timeoutMs) {
|
|
51
|
+
const job = await this.client.getJobById(Number(jobId));
|
|
52
|
+
const phase = job?.phase ?? job?.status;
|
|
53
|
+
if (phase === "COMPLETED" || phase === "completed") {
|
|
54
|
+
return {
|
|
55
|
+
jobId,
|
|
56
|
+
phase: "COMPLETED",
|
|
57
|
+
deliverable: job?.deliverable ?? job?.result,
|
|
58
|
+
txHash: job?.txHash,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (phase === "CANCELLED" || phase === "REJECTED" || phase === "EXPIRED") {
|
|
62
|
+
return {
|
|
63
|
+
jobId,
|
|
64
|
+
phase,
|
|
65
|
+
deliverable: null,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
69
|
+
}
|
|
70
|
+
throw new Error(`Timeout waiting for job ${jobId} (${timeoutMs}ms)`);
|
|
71
|
+
}
|
|
72
|
+
async acceptJobs(capabilities, handler) {
|
|
73
|
+
for (const cap of capabilities) {
|
|
74
|
+
this.jobHandlers.set(cap, handler);
|
|
75
|
+
}
|
|
76
|
+
// The onNewTask callback set during init() will dispatch to handlers
|
|
77
|
+
console.log(`[ACP] Listening for jobs: ${capabilities.join(", ")}`);
|
|
78
|
+
}
|
|
79
|
+
async handleIncomingJob(acpJob) {
|
|
80
|
+
const job = {
|
|
81
|
+
jobId: acpJob.id,
|
|
82
|
+
description: acpJob.requirement?.description ?? "",
|
|
83
|
+
requirements: acpJob.requirement ?? {},
|
|
84
|
+
budget: BigInt(acpJob.price ?? 0),
|
|
85
|
+
clientAddress: acpJob.clientAddress,
|
|
86
|
+
};
|
|
87
|
+
// Find a matching handler
|
|
88
|
+
for (const [, handler] of this.jobHandlers) {
|
|
89
|
+
try {
|
|
90
|
+
const result = await handler(job);
|
|
91
|
+
// Deliver the result back through ACP
|
|
92
|
+
await acpJob.deliver?.({
|
|
93
|
+
content: typeof result === "string" ? result : JSON.stringify(result),
|
|
94
|
+
contentType: "application/json",
|
|
95
|
+
});
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.error(`[ACP] Handler failed for job ${job.jobId}:`, err);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
mapAcpAgent(agent) {
|
|
104
|
+
const offerings = (agent.jobOfferings ?? []).map((o) => ({
|
|
105
|
+
id: o.id,
|
|
106
|
+
name: o.name ?? o.title ?? "Service",
|
|
107
|
+
description: o.description ?? "",
|
|
108
|
+
price: BigInt(o.price ?? 0),
|
|
109
|
+
currency: "USDC",
|
|
110
|
+
}));
|
|
111
|
+
return {
|
|
112
|
+
id: agent.id ?? agent.walletAddress,
|
|
113
|
+
name: agent.name ?? "Unknown Agent",
|
|
114
|
+
address: (agent.walletAddress ?? agent.contractAddress),
|
|
115
|
+
description: agent.description ?? "",
|
|
116
|
+
categories: agent.tags ?? agent.categories ?? [],
|
|
117
|
+
offerings,
|
|
118
|
+
metrics: {
|
|
119
|
+
successRate: agent.metrics?.successRate,
|
|
120
|
+
completedJobs: agent.metrics?.completedJobs,
|
|
121
|
+
},
|
|
122
|
+
source: "acp",
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=acp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../../src/backends/acp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Abstraction over escrow backends (Kompass native or Virtuals ACP).
|
|
4
|
+
* The simplified SDK uses this interface so it can swap backends
|
|
5
|
+
* without changing any user-facing code.
|
|
6
|
+
*/
|
|
7
|
+
export interface AgentSearchResult {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
address: Address;
|
|
11
|
+
description: string;
|
|
12
|
+
categories: string[];
|
|
13
|
+
offerings: AgentOffering[];
|
|
14
|
+
metrics?: {
|
|
15
|
+
successRate?: number;
|
|
16
|
+
completedJobs?: number;
|
|
17
|
+
};
|
|
18
|
+
source: "acp" | "kompass";
|
|
19
|
+
}
|
|
20
|
+
export interface AgentOffering {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
price: bigint;
|
|
25
|
+
currency: string;
|
|
26
|
+
}
|
|
27
|
+
export interface JobResult {
|
|
28
|
+
jobId: string;
|
|
29
|
+
phase: string;
|
|
30
|
+
deliverable: unknown;
|
|
31
|
+
txHash?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface EscrowBackend {
|
|
34
|
+
/** Initialize the backend (auth, websocket connections, etc.) */
|
|
35
|
+
init(): Promise<void>;
|
|
36
|
+
/** Search for agents that can do a task */
|
|
37
|
+
browseAgents(query: string, options?: BrowseOptions): Promise<AgentSearchResult[]>;
|
|
38
|
+
/** Create and fund a job with an agent */
|
|
39
|
+
hireAgent(agent: AgentSearchResult, offeringId: string, requirements: Record<string, unknown>, budget?: bigint): Promise<JobResult>;
|
|
40
|
+
/** Poll/wait for a job to complete */
|
|
41
|
+
waitForResult(jobId: string, timeoutMs?: number): Promise<JobResult>;
|
|
42
|
+
/** Register as a seller and listen for incoming jobs */
|
|
43
|
+
acceptJobs(capabilities: string[], handler: (job: IncomingJob) => Promise<unknown>): Promise<void>;
|
|
44
|
+
/** Get the backend name */
|
|
45
|
+
name(): string;
|
|
46
|
+
}
|
|
47
|
+
export interface BrowseOptions {
|
|
48
|
+
limit?: number;
|
|
49
|
+
sortBy?: "successRate" | "completedJobs" | "recent";
|
|
50
|
+
onlineOnly?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface IncomingJob {
|
|
53
|
+
jobId: string;
|
|
54
|
+
description: string;
|
|
55
|
+
requirements: Record<string, unknown>;
|
|
56
|
+
budget: bigint;
|
|
57
|
+
clientAddress: Address;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/backends/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,MAAM,CAAC;AAEzC;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,2CAA2C;IAC3C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAEnF,0CAA0C;IAC1C,SAAS,CACP,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtB,sCAAsC;IACtC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAErE,wDAAwD;IACxD,UAAU,CACR,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,2BAA2B;IAC3B,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,GAAG,eAAe,GAAG,QAAQ,CAAC;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/backends/types.ts"],"names":[],"mappings":""}
|