hive-intelligence 1.6.2 → 1.6.7
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/README.md +1 -1
- package/build/{chunk-XZXLLPF5.js → chunk-G23ZAW36.js} +2 -2
- package/build/{chunk-YDX4SHSC.js → chunk-J2PXISXW.js} +180 -26
- package/build/cli.js +5 -5
- package/build/{doctor-LRDKXJYD.js → doctor-AM6QST7Z.js} +1 -1
- package/build/{mcpServer-NWKN7FWC.js → mcpServer-NWOKFR7Q.js} +1 -1
- package/build/monitor-worker.js +2 -2
- package/build/release.json +4 -4
- package/build/{serve-2XXMJPIH.js → serve-XRNMHIJX.js} +1 -1
- package/build/server.js +2 -2
- package/build/stdio.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -109,7 +109,7 @@ Expected output shape:
|
|
|
109
109
|
"source": "live",
|
|
110
110
|
"receipt_id": "00000000-0000-4000-8000-000000000000",
|
|
111
111
|
"receipt_version": "1.0",
|
|
112
|
-
"server_version": "1.6.
|
|
112
|
+
"server_version": "1.6.7",
|
|
113
113
|
"build_sha": null,
|
|
114
114
|
"digest_algorithm": "sha256",
|
|
115
115
|
"input_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getSupabaseAdmin,
|
|
8
8
|
resolveEndpoint,
|
|
9
9
|
secureLogger
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-J2PXISXW.js";
|
|
11
11
|
|
|
12
12
|
// src/services/wallet-service.ts
|
|
13
13
|
async function consumeCredits(args) {
|
|
@@ -112,7 +112,7 @@ async function executeToolByName(toolName, args, options) {
|
|
|
112
112
|
const result2 = createToolNotFoundResult(toolName);
|
|
113
113
|
secureLogger.toolCall(toolName, false, result2.durationMs, {
|
|
114
114
|
transport: "rest",
|
|
115
|
-
runtimeStatus:
|
|
115
|
+
runtimeStatus: result2.runtimeStatus,
|
|
116
116
|
errorClass: "not_found",
|
|
117
117
|
receiptId: result2.hive.receipt_id,
|
|
118
118
|
receiptVersion: result2.hive.receipt_version,
|
|
@@ -3472,6 +3472,8 @@ Args:
|
|
|
3472
3472
|
- "dex": Include DEX information
|
|
3473
3473
|
- "network": Include network information
|
|
3474
3474
|
- page (number, optional): Page number for pagination. Default: 1.
|
|
3475
|
+
- network (string, optional): GeckoTerminal network id to scope the results to one network.
|
|
3476
|
+
- duration (string, optional): accepted for parity with the trending-pools tool; ignored.
|
|
3475
3477
|
|
|
3476
3478
|
Returns:
|
|
3477
3479
|
JSON object with new pool data from all networks:
|
|
@@ -3521,6 +3523,14 @@ Error Handling:
|
|
|
3521
3523
|
inputSchema: {
|
|
3522
3524
|
type: "object",
|
|
3523
3525
|
properties: {
|
|
3526
|
+
network: {
|
|
3527
|
+
type: "string",
|
|
3528
|
+
description: 'Optional GeckoTerminal network id ("eth", "base", "solana", ...). When set, returns the newest pools on that network only (same data as coingecko_get_onchain_network_new_pools).'
|
|
3529
|
+
},
|
|
3530
|
+
duration: {
|
|
3531
|
+
type: "string",
|
|
3532
|
+
description: "Accepted for parity with coingecko_get_onchain_trending_pools and ignored: new pools are always ordered by creation time, newest first."
|
|
3533
|
+
},
|
|
3524
3534
|
include: {
|
|
3525
3535
|
type: "string",
|
|
3526
3536
|
description: "Additional data to include: base_token, quote_token, dex, network. Comma-separated."
|
|
@@ -3536,7 +3546,11 @@ Error Handling:
|
|
|
3536
3546
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
3537
3547
|
};
|
|
3538
3548
|
var handler33 = async (client2, args) => {
|
|
3539
|
-
const body = args;
|
|
3549
|
+
const { network, duration: _duration, ...body } = args ?? {};
|
|
3550
|
+
void _duration;
|
|
3551
|
+
if (typeof network === "string" && network.trim()) {
|
|
3552
|
+
return asTextContentResult(await client2.onchain.networks.newPools.getNetwork(network.trim(), body));
|
|
3553
|
+
}
|
|
3540
3554
|
return asTextContentResult(await client2.onchain.networks.newPools.get(body));
|
|
3541
3555
|
};
|
|
3542
3556
|
var get_networks_onchain_new_pools_default = { metadata: metadata33, tool: tool33, handler: handler33 };
|
|
@@ -7805,7 +7819,21 @@ Error Handling:
|
|
|
7805
7819
|
};
|
|
7806
7820
|
var handler79 = async (client2, args) => {
|
|
7807
7821
|
const { address, network, ...body } = args;
|
|
7808
|
-
|
|
7822
|
+
try {
|
|
7823
|
+
return asTextContentResult(await client2.onchain.networks.tokens.topTraders.get(address, { network_id: network, ...body }));
|
|
7824
|
+
} catch (error) {
|
|
7825
|
+
if (error?.status === 404) {
|
|
7826
|
+
return asTextContentResult(
|
|
7827
|
+
{
|
|
7828
|
+
error: `Invalid arguments: trader tracking is not available for ${address} on network "${network}" on the CoinGecko tier this account is on (404). Use coingecko_get_onchain_token_top_holders or get_token_top_holders for this token; traders are served on networks such as base.`,
|
|
7829
|
+
code: "VALIDATION_ERROR",
|
|
7830
|
+
suggestion: "Call coingecko_get_onchain_token_top_holders with the same network and address."
|
|
7831
|
+
},
|
|
7832
|
+
true
|
|
7833
|
+
);
|
|
7834
|
+
}
|
|
7835
|
+
throw error;
|
|
7836
|
+
}
|
|
7809
7837
|
};
|
|
7810
7838
|
var get_tokens_networks_onchain_top_traders_default = { metadata: metadata79, tool: tool79, handler: handler79 };
|
|
7811
7839
|
|
|
@@ -14802,10 +14830,18 @@ var wrapper = {
|
|
|
14802
14830
|
{
|
|
14803
14831
|
tool: {
|
|
14804
14832
|
name: "get_new_pools",
|
|
14805
|
-
description: "This endpoint allows you to **query all the latest pools across all networks on HIVE_DATASOURCE_ONE_CONSOLE
|
|
14833
|
+
description: "This endpoint allows you to **query all the latest pools across all networks on HIVE_DATASOURCE_ONE_CONSOLE**. Pass `network` to scope the list to one network.",
|
|
14806
14834
|
inputSchema: {
|
|
14807
14835
|
type: "object",
|
|
14808
14836
|
properties: {
|
|
14837
|
+
network: {
|
|
14838
|
+
type: "string",
|
|
14839
|
+
description: 'Optional GeckoTerminal network id ("eth", "base", "solana", ...). When set, returns the newest pools on that network only.'
|
|
14840
|
+
},
|
|
14841
|
+
duration: {
|
|
14842
|
+
type: "string",
|
|
14843
|
+
description: "Accepted for parity with get_trending_pools and ignored: new pools are always ordered by creation time, newest first."
|
|
14844
|
+
},
|
|
14809
14845
|
include: {
|
|
14810
14846
|
type: "string",
|
|
14811
14847
|
description: "attributes to include, comma-separated if more than one to include <br> Available values: `base_token`, `quote_token`, `dex`, `network`"
|
|
@@ -26449,6 +26485,12 @@ function runtimeStatusForConfiguredKey(hasKey) {
|
|
|
26449
26485
|
function classifyRuntimeStatusFromError(error) {
|
|
26450
26486
|
const normalized = (error ?? "").toLowerCase();
|
|
26451
26487
|
if (!normalized) return "failing";
|
|
26488
|
+
if (normalized.includes("was retired") || normalized.includes("tool_retired") || normalized.includes("tool_not_found") || normalized.includes("does not resolve to a hive endpoint") || // Hive's own caller-error convention. A message that starts this way may
|
|
26489
|
+
// go on to mention a plan, a tier, or an address (2026-09-16: "not
|
|
26490
|
+
// available ... on the current plan" was read as plan_required).
|
|
26491
|
+
normalized.includes("invalid arguments")) {
|
|
26492
|
+
return "invalid_input";
|
|
26493
|
+
}
|
|
26452
26494
|
if (normalized.includes("rate limit") || normalized.includes("rate_limited") || normalized.includes("429") || normalized.includes("too many requests")) {
|
|
26453
26495
|
return "rate_limited";
|
|
26454
26496
|
}
|
|
@@ -26466,7 +26508,10 @@ function classifyRuntimeStatusFromError(error) {
|
|
|
26466
26508
|
if (normalized.includes("is not supported") || normalized.includes("does not support") || normalized.includes("not supported yet") || normalized.includes("is required") || normalized.includes("must be one of") || normalized.includes("invalid symbol") || normalized.includes("bad symbol") || normalized.includes("badsymbol") || normalized.includes("badrequest") || normalized.includes("invalid parameter") || normalized.includes("invalid argument") || // Hero-tool caller mistakes and unknown/retired tool names (2026-09-14):
|
|
26467
26509
|
// a name that does not resolve is fixable by the caller, never a provider
|
|
26468
26510
|
// outage, so it must not read as "failing" (which automated callers retry).
|
|
26469
|
-
normalized.includes("unknown chain") ||
|
|
26511
|
+
normalized.includes("unknown chain") || // Provider-side rejections of a malformed identifier (GoPlus "Address
|
|
26512
|
+
// format error!", "invalid address", "not a valid address") are the
|
|
26513
|
+
// caller's to fix, not an outage (2026-09-16 audit).
|
|
26514
|
+
normalized.includes("address format") || normalized.includes("invalid address") || normalized.includes("not a valid address") || normalized.includes("malformed address")) {
|
|
26470
26515
|
return "invalid_input";
|
|
26471
26516
|
}
|
|
26472
26517
|
if (normalized.includes("timed out") || normalized.includes("timeout") || normalized.includes("temporarily") || normalized.includes("service unavailable") || normalized.includes("502") || normalized.includes("503") || normalized.includes("504")) {
|
|
@@ -26477,7 +26522,8 @@ function classifyRuntimeStatusFromError(error) {
|
|
|
26477
26522
|
function aggregateRuntimeStatus(statuses) {
|
|
26478
26523
|
if (statuses.length === 0) return "degraded";
|
|
26479
26524
|
if (statuses.some((status) => status === "failing")) return "failing";
|
|
26480
|
-
if (statuses.some((status) => status === "rate_limited"))
|
|
26525
|
+
if (statuses.some((status) => status === "rate_limited"))
|
|
26526
|
+
return "rate_limited";
|
|
26481
26527
|
if (statuses.some((status) => status === "degraded")) return "degraded";
|
|
26482
26528
|
if (statuses.some((status) => status === "plan_required")) {
|
|
26483
26529
|
return "plan_required";
|
|
@@ -51031,9 +51077,10 @@ function normalizeToolSchema(tool96) {
|
|
|
51031
51077
|
if (!isEndpointInvokerName(normalized.name) && schema.additionalProperties !== true) {
|
|
51032
51078
|
schema.additionalProperties = false;
|
|
51033
51079
|
}
|
|
51080
|
+
const properties = schema.properties ?? {};
|
|
51034
51081
|
schema.properties = {
|
|
51035
|
-
...
|
|
51036
|
-
response_format: RESPONSE_FORMAT_SCHEMA
|
|
51082
|
+
...properties,
|
|
51083
|
+
response_format: properties.response_format ?? RESPONSE_FORMAT_SCHEMA
|
|
51037
51084
|
};
|
|
51038
51085
|
}
|
|
51039
51086
|
return normalized;
|
|
@@ -51586,6 +51633,24 @@ function createSafeHandler(handler96, metadata100, toolName) {
|
|
|
51586
51633
|
} catch {
|
|
51587
51634
|
}
|
|
51588
51635
|
}
|
|
51636
|
+
if (result2.isError && text.trimStart().startsWith("{")) {
|
|
51637
|
+
try {
|
|
51638
|
+
const parsedObject = JSON.parse(text);
|
|
51639
|
+
if (parsedObject && typeof parsedObject === "object" && !Array.isArray(parsedObject) && typeof parsedObject.error === "string") {
|
|
51640
|
+
return asTextContentResult(
|
|
51641
|
+
{
|
|
51642
|
+
suggestion: "Check input parameters and try again.",
|
|
51643
|
+
alternatives: getAlternativeTools(toolName),
|
|
51644
|
+
documentation: `Use the category endpoint to discover related tools.`,
|
|
51645
|
+
tool: toolName,
|
|
51646
|
+
...parsedObject
|
|
51647
|
+
},
|
|
51648
|
+
true
|
|
51649
|
+
);
|
|
51650
|
+
}
|
|
51651
|
+
} catch {
|
|
51652
|
+
}
|
|
51653
|
+
}
|
|
51589
51654
|
if (result2.isError || /^(\*\*Error:\*\*|Error\b)/i.test(text.trim())) {
|
|
51590
51655
|
const normalizedError = text.replace(/\s+/g, " ").trim();
|
|
51591
51656
|
return asTextContentResult(
|
|
@@ -51651,7 +51716,11 @@ function createSafeHandler(handler96, metadata100, toolName) {
|
|
|
51651
51716
|
function getAlternativeTools(toolName) {
|
|
51652
51717
|
const name = toolName.toLowerCase();
|
|
51653
51718
|
if (name.includes("price") || name.includes("ticker"))
|
|
51654
|
-
return [
|
|
51719
|
+
return [
|
|
51720
|
+
"get_coins_market_data",
|
|
51721
|
+
"alchemy_get_token_prices_by_address",
|
|
51722
|
+
"get_price"
|
|
51723
|
+
];
|
|
51655
51724
|
if (name.includes("pool"))
|
|
51656
51725
|
return ["get_trending_pools", "get_pools_by_dex", "filter_pools"];
|
|
51657
51726
|
if (name.includes("token") || name.includes("coin"))
|
|
@@ -52793,7 +52862,8 @@ function normalizeErrorText(text, toolName, args) {
|
|
|
52793
52862
|
} catch {
|
|
52794
52863
|
}
|
|
52795
52864
|
if (errorMsg) {
|
|
52796
|
-
|
|
52865
|
+
const bareErrorMsg = errorMsg.replace(/^(?:\s*\*\*Error:\*\*\s*)+/, "");
|
|
52866
|
+
let normalized = `**Error:** ${bareErrorMsg}`;
|
|
52797
52867
|
normalized += `
|
|
52798
52868
|
|
|
52799
52869
|
**Code:** ${code || "API_ERROR"}`;
|
|
@@ -53683,9 +53753,9 @@ var RETIRED_TOOL_REPLACEMENTS = {
|
|
|
53683
53753
|
get_wallet_stats: "Use alchemy_get_token_balances_by_wallet, alchemy_get_asset_transfers, or moralis_get_wallet_profitability_summary for wallet balances, transfers, and PnL.",
|
|
53684
53754
|
get_wallet_token_events: "Use alchemy_get_token_balances_by_wallet, alchemy_get_asset_transfers, or moralis_get_wallet_profitability_summary for wallet balances, transfers, and PnL.",
|
|
53685
53755
|
// holders
|
|
53686
|
-
get_token_holders: "Use get_token_top_holders,
|
|
53687
|
-
get_token_top_traders: "Use get_token_top_holders,
|
|
53688
|
-
get_top_holders_percentage: "Use get_token_top_holders,
|
|
53756
|
+
get_token_holders: "Use get_token_top_holders for holders on any network, coingecko_get_onchain_token_top_traders for traders where CoinGecko serves them (base and similar; not Ethereum on the current plan), or moralis_get_token_holder_metrics for holder metrics.",
|
|
53757
|
+
get_token_top_traders: "Use get_token_top_holders for holders on any network, coingecko_get_onchain_token_top_traders for traders where CoinGecko serves them (base and similar; not Ethereum on the current plan), or moralis_get_token_holder_metrics for holder metrics.",
|
|
53758
|
+
get_top_holders_percentage: "Use get_token_top_holders for holders on any network, coingecko_get_onchain_token_top_traders for traders where CoinGecko serves them (base and similar; not Ethereum on the current plan), or moralis_get_token_holder_metrics for holder metrics.",
|
|
53689
53759
|
// pairs
|
|
53690
53760
|
codex_get_detailed_token_stats: "Use get_token_pools, get_pool_info, get_pools_by_address, moralis_get_pair_stats, or get_new_pools for pool and pair data.",
|
|
53691
53761
|
codex_get_windowed_pair_stats: "Use get_token_pools, get_pool_info, get_pools_by_address, moralis_get_pair_stats, or get_new_pools for pool and pair data.",
|
|
@@ -53959,16 +54029,91 @@ function attachStructuredContent(result2, hasOutputSchema = false) {
|
|
|
53959
54029
|
return result2;
|
|
53960
54030
|
}
|
|
53961
54031
|
function declaredErrorCode(rawErrorText) {
|
|
54032
|
+
const parsed = parseEmbeddedJsonObject(rawErrorText);
|
|
54033
|
+
if (typeof parsed?.code === "string") return parsed.code;
|
|
54034
|
+
const nested = typeof parsed?.error === "string" ? parseEmbeddedJsonObject(parsed.error) : void 0;
|
|
54035
|
+
return typeof nested?.code === "string" ? nested.code : void 0;
|
|
54036
|
+
}
|
|
54037
|
+
function parseEmbeddedJsonObject(text) {
|
|
54038
|
+
if (!text) return void 0;
|
|
54039
|
+
const start = text.indexOf("{");
|
|
54040
|
+
if (start < 0) return void 0;
|
|
54041
|
+
let depth = 0;
|
|
54042
|
+
let inString = false;
|
|
54043
|
+
for (let i = start; i < text.length; i += 1) {
|
|
54044
|
+
const ch = text[i];
|
|
54045
|
+
if (inString) {
|
|
54046
|
+
if (ch === "\\") i += 1;
|
|
54047
|
+
else if (ch === '"') inString = false;
|
|
54048
|
+
continue;
|
|
54049
|
+
}
|
|
54050
|
+
if (ch === '"') inString = true;
|
|
54051
|
+
else if (ch === "{") depth += 1;
|
|
54052
|
+
else if (ch === "}") {
|
|
54053
|
+
depth -= 1;
|
|
54054
|
+
if (depth === 0) {
|
|
54055
|
+
try {
|
|
54056
|
+
const parsed = JSON.parse(text.slice(start, i + 1));
|
|
54057
|
+
return parsed && typeof parsed === "object" ? parsed : void 0;
|
|
54058
|
+
} catch {
|
|
54059
|
+
return void 0;
|
|
54060
|
+
}
|
|
54061
|
+
}
|
|
54062
|
+
}
|
|
54063
|
+
}
|
|
54064
|
+
return void 0;
|
|
54065
|
+
}
|
|
54066
|
+
function handlerErrorCopy(payload) {
|
|
54067
|
+
if (!payload || typeof payload !== "object") return void 0;
|
|
54068
|
+
const top = payload;
|
|
54069
|
+
const inner = top._hive && typeof top._hive === "object" ? top._hive : {};
|
|
54070
|
+
const pick = (key) => typeof top[key] === "string" ? top[key] : typeof inner[key] === "string" ? inner[key] : void 0;
|
|
54071
|
+
const cause = pick("cause");
|
|
54072
|
+
const next_action = pick("next_action");
|
|
54073
|
+
return cause || next_action ? { cause, next_action } : void 0;
|
|
54074
|
+
}
|
|
54075
|
+
var PROVIDER_PREFIXES = [
|
|
54076
|
+
["moralis_", "Moralis"],
|
|
54077
|
+
["alchemy_", "Alchemy"],
|
|
54078
|
+
["helius_", "Helius"],
|
|
54079
|
+
["coingecko_", "CoinGecko"],
|
|
54080
|
+
["hyperliquid_", "Hyperliquid"],
|
|
54081
|
+
["tenderly_", "Tenderly"],
|
|
54082
|
+
["goplus_", "GoPlus"],
|
|
54083
|
+
["ccxt_", "CCXT"],
|
|
54084
|
+
["defillama_", "DeFiLlama"]
|
|
54085
|
+
];
|
|
54086
|
+
var replacementAvailability = null;
|
|
54087
|
+
function setRetiredReplacementAvailabilityProvider(provider) {
|
|
54088
|
+
replacementAvailability = provider;
|
|
54089
|
+
}
|
|
54090
|
+
function unavailableReplacementNote(guidance) {
|
|
54091
|
+
let snapshot = {};
|
|
53962
54092
|
try {
|
|
53963
|
-
|
|
53964
|
-
return typeof parsed?.code === "string" ? parsed.code : void 0;
|
|
54093
|
+
snapshot = replacementAvailability?.() ?? {};
|
|
53965
54094
|
} catch {
|
|
53966
|
-
return
|
|
54095
|
+
return "";
|
|
53967
54096
|
}
|
|
54097
|
+
const notes = /* @__PURE__ */ new Map();
|
|
54098
|
+
for (const name of guidance.match(/[a-z0-9]+_[a-z0-9_]+/g) ?? []) {
|
|
54099
|
+
for (const [prefix, provider] of PROVIDER_PREFIXES) {
|
|
54100
|
+
if (!name.startsWith(prefix)) continue;
|
|
54101
|
+
const status = snapshot[provider];
|
|
54102
|
+
if (!status || status === "ok") continue;
|
|
54103
|
+
const list = notes.get(provider) ?? [];
|
|
54104
|
+
if (!list.includes(name)) list.push(name);
|
|
54105
|
+
notes.set(provider, list);
|
|
54106
|
+
}
|
|
54107
|
+
}
|
|
54108
|
+
if (notes.size === 0) return "";
|
|
54109
|
+
return " " + [...notes].map(
|
|
54110
|
+
([provider, tools5]) => `${tools5.join(", ")} ${tools5.length > 1 ? "are" : "is"} unavailable right now (${provider}: ${snapshot[provider]}); start with the other replacement${tools5.length > 1 ? "s" : ""}.`
|
|
54111
|
+
).join(" ");
|
|
53968
54112
|
}
|
|
53969
54113
|
function createToolNotFoundResult(toolName, durationMs = 0) {
|
|
53970
54114
|
const retired = getRetiredToolReplacement(toolName);
|
|
53971
|
-
const
|
|
54115
|
+
const availabilityNote = retired ? unavailableReplacementNote(retired) : "";
|
|
54116
|
+
const message = retired ? `Tool '${toolName}' was retired on ${RETIRED_TOOLS_DATE}. ${retired}${availabilityNote}` : `Tool '${toolName}' not found.`;
|
|
53972
54117
|
const errorCode = retired ? "TOOL_RETIRED" : "TOOL_NOT_FOUND";
|
|
53973
54118
|
const mcpResult = createErrorResponse7(errorCode, message);
|
|
53974
54119
|
const hive = {
|
|
@@ -53997,7 +54142,7 @@ function createToolNotFoundResult(toolName, durationMs = 0) {
|
|
|
53997
54142
|
retired ? "Tool name was retired; the replacement is named in the message." : "Tool name did not resolve to a Hive endpoint."
|
|
53998
54143
|
],
|
|
53999
54144
|
cause: retired ? `Tool '${toolName}' was retired on ${RETIRED_TOOLS_DATE} when the Codex.io provider was removed; nothing was executed.` : `Tool '${toolName}' does not resolve to a Hive endpoint; nothing was executed.`,
|
|
54000
|
-
next_action: retired ? `${retired} Call search_tools with your task if that tool does not fit.` : "Call search_tools (or a category endpoint tools/list) to find the exact endpoint name, then retry with that name."
|
|
54145
|
+
next_action: retired ? `${retired}${availabilityNote} Call search_tools with your task if that tool does not fit.` : "Call search_tools (or a category endpoint tools/list) to find the exact endpoint name, then retry with that name."
|
|
54001
54146
|
};
|
|
54002
54147
|
const enrichedMcpResult = attachHiveMetadata(mcpResult, hive);
|
|
54003
54148
|
return {
|
|
@@ -54279,7 +54424,10 @@ async function executeEndpoint(endpoint, args, context) {
|
|
|
54279
54424
|
);
|
|
54280
54425
|
logToolCall(endpoint, context, result2.hive, false, durationMs, args, {
|
|
54281
54426
|
runtimeStatus: result2.runtimeStatus,
|
|
54282
|
-
errorClass: "validation"
|
|
54427
|
+
errorClass: "validation",
|
|
54428
|
+
// Field names only (never values): the 2026-09-16 audit could not tell
|
|
54429
|
+
// which argument an integrator was sending wrong for two weeks.
|
|
54430
|
+
validationFields: validationErrors.map((error) => error.field)
|
|
54283
54431
|
});
|
|
54284
54432
|
return result2;
|
|
54285
54433
|
}
|
|
@@ -54392,7 +54540,7 @@ async function executeEndpoint(endpoint, args, context) {
|
|
|
54392
54540
|
applyRouteFallbackAnnotation(hive, context.routeFallback);
|
|
54393
54541
|
}
|
|
54394
54542
|
if (normalized.isError) {
|
|
54395
|
-
applyAgentErrorCopy(hive);
|
|
54543
|
+
applyAgentErrorCopy(hive, handlerErrorCopy(unwrapMcpContent(rawResult)));
|
|
54396
54544
|
}
|
|
54397
54545
|
const enriched = attachHiveMetadata(bounded, hive);
|
|
54398
54546
|
const mcpResult = attachStructuredContent(
|
|
@@ -54496,9 +54644,12 @@ var HERO_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
|
54496
54644
|
"check_token_safety",
|
|
54497
54645
|
"get_wallet_portfolio"
|
|
54498
54646
|
]);
|
|
54499
|
-
var RESPONSE_FORMAT = z2.enum(["concise", "detailed"]).optional().describe(
|
|
54500
|
-
"concise (default) returns the trimmed essentials; detailed returns the full provider payload."
|
|
54647
|
+
var RESPONSE_FORMAT = z2.enum(["concise", "detailed", "json", "markdown"]).optional().describe(
|
|
54648
|
+
"concise (default) returns the trimmed essentials; detailed returns the full provider payload. json and markdown, the platform-wide values every other tool advertises, are accepted and treated as concise."
|
|
54501
54649
|
);
|
|
54650
|
+
function heroFormat(value) {
|
|
54651
|
+
return value === "detailed" ? "detailed" : "concise";
|
|
54652
|
+
}
|
|
54502
54653
|
var GOPLUS_CHAIN_IDS = {
|
|
54503
54654
|
eth: "1",
|
|
54504
54655
|
ethereum: "1",
|
|
@@ -54640,8 +54791,8 @@ function normalizeHeroArgs(toolName, raw) {
|
|
|
54640
54791
|
const unknownKeys = Object.keys(input).filter((key) => !consumed.has(key));
|
|
54641
54792
|
if (typeof args.chain === "number") args.chain = String(args.chain);
|
|
54642
54793
|
if (typeof args.chain === "string") {
|
|
54643
|
-
const
|
|
54644
|
-
args.chain = CHAIN_ID_NAMES[
|
|
54794
|
+
const bare = args.chain.trim().toLowerCase().replace(/[\s_-]*mainnet$/, "").replace(/\s+/g, "-");
|
|
54795
|
+
args.chain = CHAIN_ID_NAMES[bare] ?? bare;
|
|
54645
54796
|
}
|
|
54646
54797
|
if (toolName === "get_token_price" && typeof args.token === "string" && args.address === void 0 && looksLikeContractAddress(args.token)) {
|
|
54647
54798
|
args.address = args.token;
|
|
@@ -54823,7 +54974,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
54823
54974
|
}
|
|
54824
54975
|
const { token, chain, address } = parsed.data;
|
|
54825
54976
|
const vsCurrency = (parsed.data.vs_currency ?? "usd").toLowerCase();
|
|
54826
|
-
const format = parsed.data.response_format
|
|
54977
|
+
const format = heroFormat(parsed.data.response_format);
|
|
54827
54978
|
if (address) {
|
|
54828
54979
|
if (looksLikeNameService(address)) return nameServiceError(address);
|
|
54829
54980
|
const network = GECKO_NETWORKS[normalizeChain(chain)] ?? normalizeChain(chain);
|
|
@@ -54930,7 +55081,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
54930
55081
|
);
|
|
54931
55082
|
}
|
|
54932
55083
|
const { address, chain } = parsed.data;
|
|
54933
|
-
const format = parsed.data.response_format
|
|
55084
|
+
const format = heroFormat(parsed.data.response_format);
|
|
54934
55085
|
if (looksLikeNameService(address)) return nameServiceError(address);
|
|
54935
55086
|
if (isSolanaChain(chain, address)) {
|
|
54936
55087
|
const result3 = await executeUnderlying("get_solana_token_security", {
|
|
@@ -55083,7 +55234,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
55083
55234
|
);
|
|
55084
55235
|
}
|
|
55085
55236
|
const { address, chain } = parsed.data;
|
|
55086
|
-
const format = parsed.data.response_format
|
|
55237
|
+
const format = heroFormat(parsed.data.response_format);
|
|
55087
55238
|
if (looksLikeNameService(address)) return nameServiceError(address);
|
|
55088
55239
|
if (isSolanaChain(chain, address)) {
|
|
55089
55240
|
const result3 = await executeUnderlying("helius_get_wallet_balances", {
|
|
@@ -65081,6 +65232,9 @@ function getProviderAvailabilitySnapshot() {
|
|
|
65081
65232
|
}
|
|
65082
65233
|
|
|
65083
65234
|
// src/tools/dynamic-tools.ts
|
|
65235
|
+
setRetiredReplacementAvailabilityProvider(
|
|
65236
|
+
() => getProviderAvailabilitySnapshot().byProviderName
|
|
65237
|
+
);
|
|
65084
65238
|
var DEFAULT_SEARCH_LIMIT = 20;
|
|
65085
65239
|
var MAX_SEARCH_LIMIT = 50;
|
|
65086
65240
|
var DEFAULT_TOOLSET_LIMIT = 3;
|
package/build/cli.js
CHANGED
|
@@ -3440,7 +3440,7 @@ program2.hook("preAction", (thisCommand) => {
|
|
|
3440
3440
|
setCliFlags({ apiKey: opts.apiKey, noRetry: opts.retry === false });
|
|
3441
3441
|
});
|
|
3442
3442
|
program2.action(async () => {
|
|
3443
|
-
const { startStdio } = await import("./serve-
|
|
3443
|
+
const { startStdio } = await import("./serve-XRNMHIJX.js");
|
|
3444
3444
|
await startStdio(program2.opts().envFile);
|
|
3445
3445
|
});
|
|
3446
3446
|
program2.command("serve").description("Start the MCP server").option("--http", "Start HTTP server instead of stdio").option("--port <number>", "HTTP server port", "8080").action(async (opts) => {
|
|
@@ -3453,10 +3453,10 @@ program2.command("serve").description("Start the MCP server").option("--http", "
|
|
|
3453
3453
|
);
|
|
3454
3454
|
process.exit(ExitCode.INVALID_ARGS);
|
|
3455
3455
|
}
|
|
3456
|
-
const { startHttp } = await import("./serve-
|
|
3456
|
+
const { startHttp } = await import("./serve-XRNMHIJX.js");
|
|
3457
3457
|
await startHttp(port, program2.opts().envFile);
|
|
3458
3458
|
} else {
|
|
3459
|
-
const { startStdio } = await import("./serve-
|
|
3459
|
+
const { startStdio } = await import("./serve-XRNMHIJX.js");
|
|
3460
3460
|
await startStdio(program2.opts().envFile);
|
|
3461
3461
|
}
|
|
3462
3462
|
});
|
|
@@ -3666,7 +3666,7 @@ program2.command("uninstall").description(
|
|
|
3666
3666
|
if (exitCode !== 0) process.exit(exitCode);
|
|
3667
3667
|
});
|
|
3668
3668
|
program2.command("doctor").description("Diagnose environment and server connectivity").option("--probe", "Run live API probes (slower)").action(async (opts) => {
|
|
3669
|
-
const { runDoctor } = await import("./doctor-
|
|
3669
|
+
const { runDoctor } = await import("./doctor-AM6QST7Z.js");
|
|
3670
3670
|
await runDoctor(opts);
|
|
3671
3671
|
});
|
|
3672
3672
|
program2.command("upgrade").description("Update Hive to the latest published version").action(async () => {
|
|
@@ -3714,7 +3714,7 @@ program2.command("usage").description("Show your API usage and plan limits").act
|
|
|
3714
3714
|
await runUsage();
|
|
3715
3715
|
});
|
|
3716
3716
|
program2.command("status").description("Quick health and version check").action(async () => {
|
|
3717
|
-
const { runStatus } = await import("./doctor-
|
|
3717
|
+
const { runStatus } = await import("./doctor-AM6QST7Z.js");
|
|
3718
3718
|
await runStatus();
|
|
3719
3719
|
});
|
|
3720
3720
|
program2.command("open [target]").description("Open Hive dashboard, docs, status, or GitHub in browser").action(async (target) => {
|
|
@@ -204,7 +204,7 @@ ${fails === 0 ? "All checks passed" : `${fails} issues found`}${warns ? ` (${war
|
|
|
204
204
|
if (fails > 0) process.exit(1);
|
|
205
205
|
}
|
|
206
206
|
async function runStatus() {
|
|
207
|
-
const { SERVER_VERSION } = await import("./mcpServer-
|
|
207
|
+
const { SERVER_VERSION } = await import("./mcpServer-NWOKFR7Q.js");
|
|
208
208
|
const { resolveApiKey, resolveApiUrl } = await import("./config-dir-2QLA5PXD.js");
|
|
209
209
|
const { getActiveProfile, maskKey } = await import("./auth-4LPSQJXD.js");
|
|
210
210
|
const apiUrl = resolveApiUrl();
|
package/build/monitor-worker.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module'; const require = createRequire(impor
|
|
|
2
2
|
import {
|
|
3
3
|
consumeCredits,
|
|
4
4
|
executeToolByName
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-G23ZAW36.js";
|
|
6
6
|
import {
|
|
7
7
|
HyperliquidAPI,
|
|
8
8
|
MIN_MONITOR_CADENCE_MS,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
monitorCadenceIntervalMs,
|
|
16
16
|
runScheduledHealthCanaries,
|
|
17
17
|
secureLogger
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-J2PXISXW.js";
|
|
19
19
|
import "./chunk-GADPH72D.js";
|
|
20
20
|
import "./chunk-EPF36Q3Z.js";
|
|
21
21
|
import "./chunk-ZXKFJQDE.js";
|
package/build/release.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "hive-intelligence",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"buildSha": "
|
|
5
|
-
"imageDigest": "sha256:
|
|
3
|
+
"version": "1.6.7",
|
|
4
|
+
"buildSha": "4fddf62cb6f56b0b14c162c88632cb746c8affe5",
|
|
5
|
+
"imageDigest": "sha256:609f7a3dbed5ab6375db4d985a2a6729e55810fae71f69836aad5c62d55f7b84",
|
|
6
6
|
"deployedUrl": "https://mcp.hiveintelligence.xyz",
|
|
7
|
-
"manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.6.
|
|
7
|
+
"manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.6.7/releases/v1.6.7.json"
|
|
8
8
|
}
|
|
@@ -7,7 +7,7 @@ async function startStdio(envFile) {
|
|
|
7
7
|
dotenv.config({ path: envFile || ".env", quiet: true });
|
|
8
8
|
console.log = (...args) => console.error("[LOG]", ...args);
|
|
9
9
|
const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
|
|
10
|
-
const { createHiveMcpServer, SERVER_NAME, SERVER_VERSION } = await import("./mcpServer-
|
|
10
|
+
const { createHiveMcpServer, SERVER_NAME, SERVER_VERSION } = await import("./mcpServer-NWOKFR7Q.js");
|
|
11
11
|
const { getPendingUpdateVersion } = await import("./update-check-36QU6PKA.js");
|
|
12
12
|
const transport = new StdioServerTransport();
|
|
13
13
|
const pendingUpdate = getPendingUpdateVersion();
|
package/build/server.js
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
ensureWallet,
|
|
7
7
|
executeToolByName,
|
|
8
8
|
getWalletStatus
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-G23ZAW36.js";
|
|
10
10
|
import {
|
|
11
11
|
CategoryEndpoints,
|
|
12
12
|
HERO_TOOL_NAMES,
|
|
@@ -96,7 +96,7 @@ import {
|
|
|
96
96
|
validateEndpointArgs,
|
|
97
97
|
verifyApiKey,
|
|
98
98
|
waitForRedisAvailability
|
|
99
|
-
} from "./chunk-
|
|
99
|
+
} from "./chunk-J2PXISXW.js";
|
|
100
100
|
import {
|
|
101
101
|
HIVE_AGENT_SKILLS
|
|
102
102
|
} from "./chunk-GADPH72D.js";
|
package/build/stdio.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hive-intelligence",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.7",
|
|
4
4
|
"description": "Evidence-backed crypto due diligence for AI agents, with sources, freshness, and a runtime receipt on every call.",
|
|
5
5
|
"mcpName": "xyz.hiveintelligence/mcp",
|
|
6
6
|
"type": "module",
|