hive-intelligence 1.1.2 → 1.1.4
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/LICENSE +12 -10
- package/README.md +325 -351
- package/agent-skills/.claude-plugin/plugin.json +111 -0
- package/agent-skills/.mcp.json +11 -0
- package/agent-skills/AGENTS.md +37 -0
- package/agent-skills/LICENSE +21 -0
- package/agent-skills/README.md +145 -0
- package/agent-skills/SKILL.md +80 -0
- package/agent-skills/evals/README.md +20 -0
- package/agent-skills/evals/trigger-queries.json +464 -0
- package/agent-skills/package.json +49 -0
- package/agent-skills/packs/hive-build/SKILL.md +328 -0
- package/agent-skills/packs/hive-build/evals/evals.json +28 -0
- package/agent-skills/packs/hive-build-onboarding/SKILL.md +137 -0
- package/agent-skills/packs/hive-build-onboarding/evals/evals.json +27 -0
- package/agent-skills/packs/hive-cli/SKILL.md +141 -0
- package/agent-skills/packs/hive-cli/evals/evals.json +27 -0
- package/agent-skills/packs/hive-defi-research/SKILL.md +42 -0
- package/agent-skills/packs/hive-defi-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-defi-research/references/workflow.md +41 -0
- package/agent-skills/packs/hive-dex-pool-analysis/SKILL.md +41 -0
- package/agent-skills/packs/hive-dex-pool-analysis/evals/evals.json +27 -0
- package/agent-skills/packs/hive-dex-pool-analysis/references/workflow.md +42 -0
- package/agent-skills/packs/hive-market-research/SKILL.md +45 -0
- package/agent-skills/packs/hive-market-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-market-research/references/workflow.md +47 -0
- package/agent-skills/packs/hive-mcp/SKILL.md +147 -0
- package/agent-skills/packs/hive-mcp/evals/evals.json +38 -0
- package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +83 -0
- package/agent-skills/packs/hive-mcp/references/clients.md +141 -0
- package/agent-skills/packs/hive-network-infrastructure/SKILL.md +44 -0
- package/agent-skills/packs/hive-network-infrastructure/evals/evals.json +27 -0
- package/agent-skills/packs/hive-network-infrastructure/references/workflow.md +41 -0
- package/agent-skills/packs/hive-nft-research/SKILL.md +41 -0
- package/agent-skills/packs/hive-nft-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-nft-research/references/workflow.md +42 -0
- package/agent-skills/packs/hive-prediction-markets/SKILL.md +44 -0
- package/agent-skills/packs/hive-prediction-markets/evals/evals.json +27 -0
- package/agent-skills/packs/hive-prediction-markets/references/workflow.md +42 -0
- package/agent-skills/packs/hive-query/SKILL.md +99 -0
- package/agent-skills/packs/hive-query/evals/evals.json +38 -0
- package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +54 -0
- package/agent-skills/packs/hive-security-risk/SKILL.md +42 -0
- package/agent-skills/packs/hive-security-risk/evals/evals.json +27 -0
- package/agent-skills/packs/hive-security-risk/references/workflow.md +46 -0
- package/agent-skills/packs/hive-solana-analysis/SKILL.md +42 -0
- package/agent-skills/packs/hive-solana-analysis/evals/evals.json +27 -0
- package/agent-skills/packs/hive-solana-analysis/references/workflow.md +42 -0
- package/agent-skills/packs/hive-stateful-monitoring/SKILL.md +75 -0
- package/agent-skills/packs/hive-stateful-monitoring/evals/evals.json +49 -0
- package/agent-skills/packs/hive-token-diligence/SKILL.md +44 -0
- package/agent-skills/packs/hive-token-diligence/evals/evals.json +27 -0
- package/agent-skills/packs/hive-token-diligence/references/workflow.md +45 -0
- package/agent-skills/packs/hive-tool-discovery/SKILL.md +49 -0
- package/agent-skills/packs/hive-tool-discovery/evals/evals.json +38 -0
- package/agent-skills/packs/hive-tool-discovery/references/discovery-surfaces.md +62 -0
- package/agent-skills/packs/hive-wallet-investigation/SKILL.md +42 -0
- package/agent-skills/packs/hive-wallet-investigation/evals/evals.json +27 -0
- package/agent-skills/packs/hive-wallet-investigation/references/workflow.md +45 -0
- package/agent-skills/references/agents-routing.md +51 -0
- package/agent-skills/scripts/validate-agent-skills-package.mjs +216 -0
- package/agent-skills/skills.sh.json +41 -0
- package/bin/hive-mcp.js +33 -0
- package/build/{alias-INGXWFCG.js → alias-3OPMQF4X.js} +2 -3
- package/build/api-client-EPF6FD7A.js +28 -0
- package/build/auth-Q5Q24IRI.js +39 -0
- package/build/browser-auth-VPF5LZMZ.js +8 -0
- package/build/{cache-US4LSZPI.js → cache-T6KC5YEY.js} +2 -3
- package/build/{chunk-QMRVH5ZP.js → chunk-3WYWXTNN.js} +9 -2
- package/build/chunk-4F5CI6LX.js +340 -0
- package/build/chunk-5XXI25JE.js +496 -0
- package/build/chunk-7JWXBKEJ.js +252 -0
- package/build/chunk-CEWCB5YS.js +71 -0
- package/build/{chunk-CGXVV6WR.js → chunk-FH3YGSY5.js} +86 -105
- package/build/chunk-FRXMGRZQ.js +102 -0
- package/build/chunk-GZPDEXO4.js +126 -0
- package/build/chunk-IZPAMRHP.js +43 -0
- package/build/chunk-JTUKQWIO.js +79720 -0
- package/build/{chunk-CP3FXEQA.js → chunk-NP6NSOG2.js} +4 -6
- package/build/{chunk-XQJ6PB2L.js → chunk-POT2MBEK.js} +0 -1
- package/build/chunk-VBOKVQ74.js +280 -0
- package/build/{chunk-WKVZVQTG.js → chunk-YZ2PXBJK.js} +6 -4
- package/build/chunk-ZCU7XQKF.js +14 -0
- package/build/chunk-ZTJVOWDQ.js +85 -0
- package/build/chunk-ZXB53E7H.js +246 -0
- package/build/cli.js +138 -125
- package/build/{completion-J6HFY6PS.js → completion-46K674EL.js} +54 -50
- package/build/config-XE6Q5P4I.js +57 -0
- package/build/{config-dir-IEOID7Q6.js → config-dir-MAWX5AUF.js} +2 -3
- package/build/{doctor-7WZMCQC7.js → doctor-HGMQE6IN.js} +37 -13
- package/build/{errors-U6UZWVSD.js → errors-J2PH3NLJ.js} +2 -3
- package/build/format-5X2HIVDT.js +42 -0
- package/build/{init-CAVIFVSH.js → init-JMDNM7ZZ.js} +1 -2
- package/build/init-all-5SKNV75X.js +273 -0
- package/build/mcpServer-5TKKSKJM.js +21 -0
- package/build/monitor-worker.js +1140 -0
- package/build/{namespace-7JWWBWBL.js → namespace-FSX2G3NM.js} +2 -3
- package/build/{open-FUXYIHFO.js → open-5A6ZQMGC.js} +5 -6
- package/build/{output-7PGQWJY2.js → output-V3D4YZ6U.js} +2 -3
- package/build/serve-AGCOXXFM.js +49 -0
- package/build/server.js +5042 -14125
- package/build/setup-RMETGJWK.js +135 -0
- package/build/stdio.js +32 -0
- package/build/{telemetry-KNWMQURH.js → telemetry-WCME5XEU.js} +4 -4
- package/build/{tools-VRRMBCZQ.js → tools-KAB6QBZC.js} +15 -15
- package/build/uninstall-FLJMBBSC.js +114 -0
- package/build/update-check-LNZQK3XA.js +18 -0
- package/build/upgrade-DTUIHVPS.js +171 -0
- package/build/version-I6HDAF4L.js +14 -0
- package/build/{watch-A75SVIQ6.js → watch-YNN255QX.js} +7 -7
- package/package.json +124 -53
- package/bin/hive.js +0 -25
- package/build/alias-INGXWFCG.js.map +0 -1
- package/build/auth-77MKFFBQ.js +0 -233
- package/build/auth-77MKFFBQ.js.map +0 -1
- package/build/cache-US4LSZPI.js.map +0 -1
- package/build/chunk-CGXVV6WR.js.map +0 -1
- package/build/chunk-CP3FXEQA.js.map +0 -1
- package/build/chunk-DTUDM6HX.js +0 -3108
- package/build/chunk-DTUDM6HX.js.map +0 -1
- package/build/chunk-LBTLYTZS.js +0 -115
- package/build/chunk-LBTLYTZS.js.map +0 -1
- package/build/chunk-OK3LSM73.js +0 -22
- package/build/chunk-OK3LSM73.js.map +0 -1
- package/build/chunk-QMRVH5ZP.js.map +0 -1
- package/build/chunk-RRI526CJ.js +0 -212
- package/build/chunk-RRI526CJ.js.map +0 -1
- package/build/chunk-WKVZVQTG.js.map +0 -1
- package/build/chunk-XQJ6PB2L.js.map +0 -1
- package/build/cli.js.map +0 -1
- package/build/completion-J6HFY6PS.js.map +0 -1
- package/build/config-ANFERP7A.js +0 -99
- package/build/config-ANFERP7A.js.map +0 -1
- package/build/config-dir-IEOID7Q6.js.map +0 -1
- package/build/doctor-7WZMCQC7.js.map +0 -1
- package/build/errors-U6UZWVSD.js.map +0 -1
- package/build/format-CVLLK6GD.js +0 -75
- package/build/format-CVLLK6GD.js.map +0 -1
- package/build/init-CAVIFVSH.js.map +0 -1
- package/build/namespace-7JWWBWBL.js.map +0 -1
- package/build/open-FUXYIHFO.js.map +0 -1
- package/build/output-7PGQWJY2.js.map +0 -1
- package/build/server.js.map +0 -1
- package/build/telemetry-KNWMQURH.js.map +0 -1
- package/build/tools-VRRMBCZQ.js.map +0 -1
- package/build/version-3TZ3U4IR.js +0 -9
- package/build/version-3TZ3U4IR.js.map +0 -1
- package/build/watch-A75SVIQ6.js.map +0 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
SERVER_VERSION
|
|
4
|
+
} from "./chunk-ZCU7XQKF.js";
|
|
5
|
+
import {
|
|
6
|
+
getNoRetry,
|
|
7
|
+
resolveApiKey,
|
|
8
|
+
resolveApiUrl
|
|
9
|
+
} from "./chunk-POT2MBEK.js";
|
|
10
|
+
|
|
11
|
+
// src/cli/api-client.ts
|
|
12
|
+
var MAX_RETRIES = 3;
|
|
13
|
+
var BASE_DELAY_MS = 500;
|
|
14
|
+
var MAX_DELAY_MS = 5e3;
|
|
15
|
+
var TOOL_CATALOG_PAGE_LIMIT = 250;
|
|
16
|
+
var TOOL_CATALOG_MAX_PAGES = 100;
|
|
17
|
+
function isRetryable(status) {
|
|
18
|
+
return status >= 500 || status === 429;
|
|
19
|
+
}
|
|
20
|
+
function isRetryableError(err) {
|
|
21
|
+
if (!(err instanceof Error)) return false;
|
|
22
|
+
const msg = err.message.toLowerCase();
|
|
23
|
+
return err.name === "AbortError" || msg.includes("econnreset") || msg.includes("econnrefused") || msg.includes("etimedout") || msg.includes("fetch failed");
|
|
24
|
+
}
|
|
25
|
+
function delay(ms) {
|
|
26
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
27
|
+
}
|
|
28
|
+
function computeDelay(attempt, retryAfterHeader) {
|
|
29
|
+
if (retryAfterHeader) {
|
|
30
|
+
const seconds = parseInt(retryAfterHeader, 10);
|
|
31
|
+
if (!isNaN(seconds) && seconds > 0)
|
|
32
|
+
return Math.min(seconds * 1e3, MAX_DELAY_MS);
|
|
33
|
+
}
|
|
34
|
+
const exponential = BASE_DELAY_MS * Math.pow(2, attempt);
|
|
35
|
+
const jitter = exponential * (0.75 + Math.random() * 0.5);
|
|
36
|
+
return Math.min(jitter, MAX_DELAY_MS);
|
|
37
|
+
}
|
|
38
|
+
async function fetchWithRetry(url, init, fetchFn = fetch) {
|
|
39
|
+
const maxRetries = getNoRetry() ? 0 : MAX_RETRIES;
|
|
40
|
+
let lastResponse;
|
|
41
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
42
|
+
try {
|
|
43
|
+
const response = await fetchFn(url, init);
|
|
44
|
+
if (response.ok || !isRetryable(response.status) || attempt === maxRetries) {
|
|
45
|
+
return response;
|
|
46
|
+
}
|
|
47
|
+
lastResponse = response;
|
|
48
|
+
const retryAfter = response.headers?.get?.("retry-after") ?? null;
|
|
49
|
+
const waitMs = computeDelay(attempt, retryAfter);
|
|
50
|
+
await delay(waitMs);
|
|
51
|
+
} catch (err) {
|
|
52
|
+
if (!isRetryableError(err) || attempt === maxRetries) throw err;
|
|
53
|
+
const waitMs = computeDelay(attempt);
|
|
54
|
+
await delay(waitMs);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return lastResponse;
|
|
58
|
+
}
|
|
59
|
+
function getHeaders(apiKey) {
|
|
60
|
+
const headers = {
|
|
61
|
+
"Content-Type": "application/json",
|
|
62
|
+
"User-Agent": `hive-cli/${process.env.npm_package_version ?? SERVER_VERSION}`
|
|
63
|
+
};
|
|
64
|
+
if (apiKey) headers.Authorization = `Bearer ${apiKey}`;
|
|
65
|
+
return headers;
|
|
66
|
+
}
|
|
67
|
+
function buildApiUrl(path, query = {}) {
|
|
68
|
+
const base = resolveApiUrl().replace(/\/+$/, "");
|
|
69
|
+
const url = new URL(`${base}${path}`);
|
|
70
|
+
for (const [key, value] of Object.entries(query)) {
|
|
71
|
+
if (value !== void 0) {
|
|
72
|
+
url.searchParams.set(key, String(value));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return url.toString();
|
|
76
|
+
}
|
|
77
|
+
async function executeRemoteTool(toolName, args, timeoutMs = 3e4) {
|
|
78
|
+
const url = buildApiUrl("/api/v1/execute");
|
|
79
|
+
const apiKey = resolveApiKey();
|
|
80
|
+
const controller = new AbortController();
|
|
81
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
82
|
+
try {
|
|
83
|
+
const response = await fetchWithRetry(url, {
|
|
84
|
+
method: "POST",
|
|
85
|
+
headers: getHeaders(apiKey),
|
|
86
|
+
body: JSON.stringify({ tool: toolName, args }),
|
|
87
|
+
signal: controller.signal
|
|
88
|
+
});
|
|
89
|
+
const data = await response.json();
|
|
90
|
+
return data;
|
|
91
|
+
} catch (error) {
|
|
92
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
error: {
|
|
96
|
+
code: "TIMEOUT",
|
|
97
|
+
message: `Request timed out after ${timeoutMs}ms`,
|
|
98
|
+
suggestion: "Increase with --timeout <ms>"
|
|
99
|
+
},
|
|
100
|
+
meta: { tool: toolName }
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
error: {
|
|
107
|
+
code: "API_ERROR",
|
|
108
|
+
message: `Connection failed: ${msg}`,
|
|
109
|
+
suggestion: `Check HIVE_API_URL (${resolveApiUrl()})`
|
|
110
|
+
},
|
|
111
|
+
meta: { tool: toolName }
|
|
112
|
+
};
|
|
113
|
+
} finally {
|
|
114
|
+
clearTimeout(timer);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function fetchToolCatalog() {
|
|
118
|
+
const apiKey = resolveApiKey();
|
|
119
|
+
const tools = [];
|
|
120
|
+
let cursor;
|
|
121
|
+
let lastPage = null;
|
|
122
|
+
for (let page = 0; page < TOOL_CATALOG_MAX_PAGES; page++) {
|
|
123
|
+
const response = await fetchWithRetry(
|
|
124
|
+
buildApiUrl("/api/v1/tools", {
|
|
125
|
+
limit: TOOL_CATALOG_PAGE_LIMIT,
|
|
126
|
+
cursor
|
|
127
|
+
}),
|
|
128
|
+
{
|
|
129
|
+
headers: getHeaders(apiKey)
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
const parsed = await response.json();
|
|
133
|
+
lastPage = parsed;
|
|
134
|
+
if (!parsed.ok) return parsed;
|
|
135
|
+
if (!Array.isArray(parsed.data)) {
|
|
136
|
+
return parsed;
|
|
137
|
+
}
|
|
138
|
+
tools.push(...parsed.data);
|
|
139
|
+
if (!parsed.has_more) {
|
|
140
|
+
return {
|
|
141
|
+
...parsed,
|
|
142
|
+
data: tools,
|
|
143
|
+
has_more: false,
|
|
144
|
+
next_cursor: void 0,
|
|
145
|
+
meta: {
|
|
146
|
+
...parsed.meta,
|
|
147
|
+
returned: tools.length,
|
|
148
|
+
pages: page + 1
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (!parsed.next_cursor) {
|
|
153
|
+
return {
|
|
154
|
+
ok: false,
|
|
155
|
+
error: {
|
|
156
|
+
code: "CATALOG_PAGINATION_ERROR",
|
|
157
|
+
message: "Tool catalog page reported more results but did not include next_cursor.",
|
|
158
|
+
suggestion: "Run hive doctor or retry with --no-cache."
|
|
159
|
+
},
|
|
160
|
+
meta: { returned: tools.length, pages: page + 1 }
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
cursor = parsed.next_cursor;
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
ok: false,
|
|
167
|
+
error: {
|
|
168
|
+
code: "CATALOG_PAGINATION_ERROR",
|
|
169
|
+
message: `Tool catalog pagination did not finish after ${TOOL_CATALOG_MAX_PAGES} pages.`,
|
|
170
|
+
suggestion: "Run hive doctor or contact support if this persists."
|
|
171
|
+
},
|
|
172
|
+
meta: {
|
|
173
|
+
returned: tools.length,
|
|
174
|
+
pages: TOOL_CATALOG_MAX_PAGES,
|
|
175
|
+
last_cursor: cursor,
|
|
176
|
+
last_page_returned: lastPage?.meta?.returned
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
async function authSignup(email, password) {
|
|
181
|
+
const url = buildApiUrl("/auth/signup");
|
|
182
|
+
const response = await fetchWithRetry(url, {
|
|
183
|
+
method: "POST",
|
|
184
|
+
headers: { "Content-Type": "application/json" },
|
|
185
|
+
body: JSON.stringify({ email, password })
|
|
186
|
+
});
|
|
187
|
+
return response.json();
|
|
188
|
+
}
|
|
189
|
+
async function authLogin(email, password) {
|
|
190
|
+
const url = buildApiUrl("/auth/login");
|
|
191
|
+
const response = await fetchWithRetry(url, {
|
|
192
|
+
method: "POST",
|
|
193
|
+
headers: { "Content-Type": "application/json" },
|
|
194
|
+
body: JSON.stringify({ email, password })
|
|
195
|
+
});
|
|
196
|
+
return response.json();
|
|
197
|
+
}
|
|
198
|
+
async function authMe(jwt) {
|
|
199
|
+
const url = buildApiUrl("/auth/me");
|
|
200
|
+
const response = await fetchWithRetry(url, {
|
|
201
|
+
headers: { Authorization: `Bearer ${jwt}` }
|
|
202
|
+
});
|
|
203
|
+
return response.json();
|
|
204
|
+
}
|
|
205
|
+
async function createKey(jwt, name) {
|
|
206
|
+
const url = buildApiUrl("/api/v1/keys");
|
|
207
|
+
const response = await fetchWithRetry(url, {
|
|
208
|
+
method: "POST",
|
|
209
|
+
headers: {
|
|
210
|
+
"Content-Type": "application/json",
|
|
211
|
+
Authorization: `Bearer ${jwt}`
|
|
212
|
+
},
|
|
213
|
+
body: JSON.stringify({ name })
|
|
214
|
+
});
|
|
215
|
+
return response.json();
|
|
216
|
+
}
|
|
217
|
+
async function listKeysApi(jwt) {
|
|
218
|
+
const url = buildApiUrl("/api/v1/keys");
|
|
219
|
+
const response = await fetchWithRetry(url, {
|
|
220
|
+
headers: { Authorization: `Bearer ${jwt}` }
|
|
221
|
+
});
|
|
222
|
+
return response.json();
|
|
223
|
+
}
|
|
224
|
+
async function revokeKeyApi(jwt, keyId) {
|
|
225
|
+
const url = buildApiUrl(`/api/v1/keys/${keyId}`);
|
|
226
|
+
const response = await fetchWithRetry(url, {
|
|
227
|
+
method: "DELETE",
|
|
228
|
+
headers: { Authorization: `Bearer ${jwt}` }
|
|
229
|
+
});
|
|
230
|
+
return response.json();
|
|
231
|
+
}
|
|
232
|
+
async function getUsage() {
|
|
233
|
+
const url = buildApiUrl("/api/v1/usage");
|
|
234
|
+
const apiKey = resolveApiKey();
|
|
235
|
+
const response = await fetchWithRetry(url, {
|
|
236
|
+
headers: getHeaders(apiKey)
|
|
237
|
+
});
|
|
238
|
+
return response.json();
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export {
|
|
242
|
+
fetchWithRetry,
|
|
243
|
+
executeRemoteTool,
|
|
244
|
+
fetchToolCatalog,
|
|
245
|
+
authSignup,
|
|
246
|
+
authLogin,
|
|
247
|
+
authMe,
|
|
248
|
+
createKey,
|
|
249
|
+
listKeysApi,
|
|
250
|
+
revokeKeyApi,
|
|
251
|
+
getUsage
|
|
252
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
createToolNotFoundResult,
|
|
4
|
+
executeEndpoint,
|
|
5
|
+
getAllWrappedEndpoints,
|
|
6
|
+
getSharedClients,
|
|
7
|
+
resolveEndpoint,
|
|
8
|
+
secureLogger
|
|
9
|
+
} from "./chunk-JTUKQWIO.js";
|
|
10
|
+
|
|
11
|
+
// src/services/tool-execution.ts
|
|
12
|
+
async function executeToolByName(toolName, args) {
|
|
13
|
+
const allEndpoints = getAllWrappedEndpoints();
|
|
14
|
+
const lookup = resolveEndpoint(allEndpoints, toolName);
|
|
15
|
+
if (!lookup.ok) {
|
|
16
|
+
const result2 = createToolNotFoundResult(toolName);
|
|
17
|
+
secureLogger.toolCall(toolName, false, result2.durationMs, {
|
|
18
|
+
transport: "rest",
|
|
19
|
+
runtimeStatus: "failing",
|
|
20
|
+
errorClass: "not_found"
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
error: result2.error,
|
|
25
|
+
durationMs: result2.durationMs,
|
|
26
|
+
meta: result2.hive
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const result = await executeEndpoint(lookup.endpoint, args, {
|
|
30
|
+
transport: "rest",
|
|
31
|
+
clients: getSharedClients()
|
|
32
|
+
});
|
|
33
|
+
if (result.validationErrors) {
|
|
34
|
+
return {
|
|
35
|
+
ok: false,
|
|
36
|
+
error: result.error,
|
|
37
|
+
validationErrors: result.validationErrors,
|
|
38
|
+
durationMs: result.durationMs,
|
|
39
|
+
meta: result.hive
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (result.ok) {
|
|
43
|
+
return {
|
|
44
|
+
ok: true,
|
|
45
|
+
data: result.data,
|
|
46
|
+
durationMs: result.durationMs,
|
|
47
|
+
meta: result.hive
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (result.error?.code === "PROVIDER_UNAVAILABLE") {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
error: result.error,
|
|
54
|
+
durationMs: result.durationMs,
|
|
55
|
+
meta: result.hive
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (result.error?.code === "INTERNAL_ERROR") {
|
|
59
|
+
secureLogger.error(`[tool-execution] ${toolName} threw`, result.error, {});
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
ok: false,
|
|
63
|
+
error: result.error,
|
|
64
|
+
durationMs: result.durationMs,
|
|
65
|
+
meta: result.hive
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export {
|
|
70
|
+
executeToolByName
|
|
71
|
+
};
|
|
@@ -87,18 +87,6 @@ var NAMESPACE = [
|
|
|
87
87
|
description: "Quote currency (default: usd)"
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
name: "gas",
|
|
93
|
-
description: "Gas prices by chain",
|
|
94
|
-
tool: "goldrush_get_gas_prices",
|
|
95
|
-
args: {
|
|
96
|
-
chainName: {
|
|
97
|
-
flag: "--chain <name>",
|
|
98
|
-
description: "Chain name",
|
|
99
|
-
required: true
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
90
|
}
|
|
103
91
|
]
|
|
104
92
|
},
|
|
@@ -155,7 +143,7 @@ var NAMESPACE = [
|
|
|
155
143
|
{
|
|
156
144
|
name: "balance",
|
|
157
145
|
description: "Wallet total balance",
|
|
158
|
-
tool: "
|
|
146
|
+
tool: "get_wallet_balance",
|
|
159
147
|
args: {
|
|
160
148
|
id: {
|
|
161
149
|
flag: "--address <addr>",
|
|
@@ -167,7 +155,7 @@ var NAMESPACE = [
|
|
|
167
155
|
{
|
|
168
156
|
name: "tokens",
|
|
169
157
|
description: "Token holdings",
|
|
170
|
-
tool: "
|
|
158
|
+
tool: "get_wallet_token_balances",
|
|
171
159
|
args: {
|
|
172
160
|
id: {
|
|
173
161
|
flag: "--address <addr>",
|
|
@@ -179,7 +167,7 @@ var NAMESPACE = [
|
|
|
179
167
|
{
|
|
180
168
|
name: "positions",
|
|
181
169
|
description: "DeFi positions",
|
|
182
|
-
tool: "
|
|
170
|
+
tool: "get_wallet_defi_positions",
|
|
183
171
|
args: {
|
|
184
172
|
id: {
|
|
185
173
|
flag: "--address <addr>",
|
|
@@ -202,18 +190,13 @@ var NAMESPACE = [
|
|
|
202
190
|
},
|
|
203
191
|
{
|
|
204
192
|
name: "history",
|
|
205
|
-
description: "
|
|
206
|
-
tool: "
|
|
193
|
+
description: "Wallet portfolio chart",
|
|
194
|
+
tool: "get_wallet_chart",
|
|
207
195
|
args: {
|
|
208
196
|
walletAddress: {
|
|
209
197
|
flag: "--address <addr>",
|
|
210
198
|
description: "Wallet address",
|
|
211
199
|
required: true
|
|
212
|
-
},
|
|
213
|
-
chainName: {
|
|
214
|
-
flag: "--chain <name>",
|
|
215
|
-
description: "Chain name",
|
|
216
|
-
required: true
|
|
217
200
|
}
|
|
218
201
|
}
|
|
219
202
|
}
|
|
@@ -309,42 +292,61 @@ var NAMESPACE = [
|
|
|
309
292
|
]
|
|
310
293
|
},
|
|
311
294
|
{
|
|
312
|
-
name: "
|
|
313
|
-
description: "
|
|
295
|
+
name: "social",
|
|
296
|
+
description: "Social media analytics \u2014 sentiment, influencers, trending topics",
|
|
314
297
|
commands: [
|
|
315
298
|
{
|
|
316
|
-
name: "
|
|
317
|
-
description: "
|
|
318
|
-
tool: "
|
|
299
|
+
name: "trending",
|
|
300
|
+
description: "Trending topics",
|
|
301
|
+
tool: "get_trending_topics"
|
|
319
302
|
},
|
|
320
303
|
{
|
|
321
|
-
name: "
|
|
322
|
-
description: "
|
|
323
|
-
tool: "
|
|
304
|
+
name: "metrics",
|
|
305
|
+
description: "Topic engagement metrics",
|
|
306
|
+
tool: "get_topic_metrics",
|
|
324
307
|
args: {
|
|
325
|
-
|
|
326
|
-
flag: "--
|
|
327
|
-
description: "
|
|
328
|
-
required:
|
|
308
|
+
topic: {
|
|
309
|
+
flag: "--topic <name>",
|
|
310
|
+
description: "Topic or coin name",
|
|
311
|
+
required: true
|
|
329
312
|
}
|
|
330
313
|
}
|
|
331
314
|
},
|
|
332
315
|
{
|
|
333
|
-
name: "
|
|
334
|
-
description: "
|
|
335
|
-
tool: "
|
|
316
|
+
name: "creators",
|
|
317
|
+
description: "Top content creators",
|
|
318
|
+
tool: "get_topic_creators",
|
|
336
319
|
args: {
|
|
337
|
-
|
|
338
|
-
flag: "--
|
|
339
|
-
description: "
|
|
340
|
-
required:
|
|
320
|
+
topic: {
|
|
321
|
+
flag: "--topic <name>",
|
|
322
|
+
description: "Topic or coin name",
|
|
323
|
+
required: true
|
|
341
324
|
}
|
|
342
325
|
}
|
|
343
326
|
},
|
|
344
327
|
{
|
|
345
|
-
name: "
|
|
346
|
-
description: "
|
|
347
|
-
tool: "
|
|
328
|
+
name: "posts",
|
|
329
|
+
description: "Social media posts",
|
|
330
|
+
tool: "get_topic_posts",
|
|
331
|
+
args: {
|
|
332
|
+
topic: {
|
|
333
|
+
flag: "--topic <name>",
|
|
334
|
+
description: "Topic or coin name",
|
|
335
|
+
required: true
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: "news",
|
|
341
|
+
description: "Topic news articles",
|
|
342
|
+
tool: "get_topic_news",
|
|
343
|
+
args: {
|
|
344
|
+
topic: {
|
|
345
|
+
flag: "--topic <name>",
|
|
346
|
+
description: "Topic or coin name",
|
|
347
|
+
required: true
|
|
348
|
+
}
|
|
349
|
+
}
|
|
348
350
|
}
|
|
349
351
|
]
|
|
350
352
|
},
|
|
@@ -491,73 +493,75 @@ var NAMESPACE = [
|
|
|
491
493
|
commands: [
|
|
492
494
|
{
|
|
493
495
|
name: "balances",
|
|
494
|
-
description: "Token balances
|
|
495
|
-
tool: "
|
|
496
|
+
description: "Token balances",
|
|
497
|
+
tool: "alchemy_get_tokens_by_wallet",
|
|
496
498
|
args: {
|
|
497
|
-
|
|
499
|
+
address: {
|
|
498
500
|
flag: "--address <addr>",
|
|
499
501
|
description: "Wallet address",
|
|
500
502
|
required: true
|
|
501
|
-
}
|
|
503
|
+
},
|
|
504
|
+
network: { flag: "--network <name>", description: "Alchemy network" }
|
|
502
505
|
}
|
|
503
506
|
},
|
|
504
507
|
{
|
|
505
508
|
name: "transfers",
|
|
506
|
-
description: "
|
|
507
|
-
tool: "
|
|
509
|
+
description: "Asset transfers",
|
|
510
|
+
tool: "alchemy_get_asset_transfers",
|
|
508
511
|
args: {
|
|
509
|
-
|
|
512
|
+
fromAddress: {
|
|
510
513
|
flag: "--address <addr>",
|
|
511
|
-
description: "
|
|
514
|
+
description: "Sender wallet address",
|
|
512
515
|
required: true
|
|
513
516
|
},
|
|
514
|
-
|
|
515
|
-
flag: "--chain <name>",
|
|
516
|
-
description: "Chain name",
|
|
517
|
-
required: true
|
|
518
|
-
}
|
|
517
|
+
network: { flag: "--network <name>", description: "Alchemy network" }
|
|
519
518
|
}
|
|
520
519
|
},
|
|
521
520
|
{
|
|
522
521
|
name: "transactions",
|
|
523
522
|
description: "Recent transactions",
|
|
524
|
-
tool: "
|
|
523
|
+
tool: "moralis_get_wallet_history",
|
|
525
524
|
args: {
|
|
526
|
-
|
|
525
|
+
address: {
|
|
527
526
|
flag: "--address <addr>",
|
|
528
527
|
description: "Wallet address",
|
|
529
528
|
required: true
|
|
530
529
|
},
|
|
531
|
-
|
|
532
|
-
flag: "--chain <name>",
|
|
533
|
-
description: "Chain name",
|
|
534
|
-
required: true
|
|
535
|
-
}
|
|
530
|
+
chain: { flag: "--chain <name>", description: "Chain name" }
|
|
536
531
|
}
|
|
537
532
|
},
|
|
538
533
|
{
|
|
539
534
|
name: "approvals",
|
|
540
535
|
description: "Token approval audit",
|
|
541
|
-
tool: "
|
|
536
|
+
tool: "goplus_check_approval_security_v2",
|
|
542
537
|
args: {
|
|
543
|
-
|
|
538
|
+
address: {
|
|
544
539
|
flag: "--address <addr>",
|
|
545
540
|
description: "Wallet address",
|
|
546
541
|
required: true
|
|
547
542
|
},
|
|
548
|
-
|
|
549
|
-
flag: "--chain <name>",
|
|
550
|
-
description: "Chain name",
|
|
551
|
-
required: true
|
|
552
|
-
}
|
|
543
|
+
chain_id: { flag: "--chain-id <id>", description: "EVM chain ID" }
|
|
553
544
|
}
|
|
554
545
|
}
|
|
555
546
|
]
|
|
556
547
|
},
|
|
557
548
|
{
|
|
558
549
|
name: "nft",
|
|
559
|
-
description: "NFT analytics \u2014 collections, markets, holders",
|
|
550
|
+
description: "NFT analytics \u2014 collections, markets, trends, holders",
|
|
560
551
|
commands: [
|
|
552
|
+
{
|
|
553
|
+
name: "trending",
|
|
554
|
+
description: "Trending NFT collections",
|
|
555
|
+
tool: "get_nft_market_trends"
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
name: "collection",
|
|
559
|
+
description: "Collection details",
|
|
560
|
+
tool: "get_nft_collection",
|
|
561
|
+
args: {
|
|
562
|
+
slug: { flag: "--slug <name>", description: "Collection slug" }
|
|
563
|
+
}
|
|
564
|
+
},
|
|
561
565
|
{
|
|
562
566
|
name: "markets",
|
|
563
567
|
description: "NFT marketplace data",
|
|
@@ -584,33 +588,16 @@ var NAMESPACE = [
|
|
|
584
588
|
{
|
|
585
589
|
name: "chains",
|
|
586
590
|
description: "List supported chains",
|
|
587
|
-
tool: "
|
|
588
|
-
},
|
|
589
|
-
{
|
|
590
|
-
name: "gas",
|
|
591
|
-
description: "Gas prices",
|
|
592
|
-
tool: "goldrush_get_gas_prices",
|
|
593
|
-
args: {
|
|
594
|
-
chainName: {
|
|
595
|
-
flag: "--chain <name>",
|
|
596
|
-
description: "Chain name",
|
|
597
|
-
required: true
|
|
598
|
-
}
|
|
599
|
-
}
|
|
591
|
+
tool: "get_networks_list"
|
|
600
592
|
},
|
|
601
593
|
{
|
|
602
|
-
name: "block",
|
|
603
|
-
description: "
|
|
604
|
-
tool: "
|
|
594
|
+
name: "block-number",
|
|
595
|
+
description: "Latest EVM block number",
|
|
596
|
+
tool: "tenderly_get_block_number",
|
|
605
597
|
args: {
|
|
606
|
-
|
|
607
|
-
flag: "--
|
|
608
|
-
description: "
|
|
609
|
-
required: true
|
|
610
|
-
},
|
|
611
|
-
blockHeight: {
|
|
612
|
-
flag: "--height <n>",
|
|
613
|
-
description: "Block height",
|
|
598
|
+
network_id: {
|
|
599
|
+
flag: "--network-id <id>",
|
|
600
|
+
description: "EVM chain ID",
|
|
614
601
|
required: true
|
|
615
602
|
}
|
|
616
603
|
}
|
|
@@ -618,15 +605,10 @@ var NAMESPACE = [
|
|
|
618
605
|
{
|
|
619
606
|
name: "resolve",
|
|
620
607
|
description: "Resolve ENS/DNS name",
|
|
621
|
-
tool: "
|
|
608
|
+
tool: "moralis_resolve_ens_domain",
|
|
622
609
|
args: {
|
|
623
|
-
|
|
624
|
-
flag: "--
|
|
625
|
-
description: "Chain name",
|
|
626
|
-
required: true
|
|
627
|
-
},
|
|
628
|
-
walletAddress: {
|
|
629
|
-
flag: "--address <addr>",
|
|
610
|
+
domain: {
|
|
611
|
+
flag: "--domain <name>",
|
|
630
612
|
description: "Address or ENS name",
|
|
631
613
|
required: true
|
|
632
614
|
}
|
|
@@ -678,4 +660,3 @@ export {
|
|
|
678
660
|
resolveCommand,
|
|
679
661
|
getAllDomainCommands
|
|
680
662
|
};
|
|
681
|
-
//# sourceMappingURL=chunk-CGXVV6WR.js.map
|