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 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.2",
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-YDX4SHSC.js";
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: "failing",
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
- return asTextContentResult(await client2.onchain.networks.tokens.topTraders.get(address, { network_id: network, ...body }));
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") || normalized.includes("was retired") || normalized.includes("tool_retired") || normalized.includes("tool_not_found") || normalized.includes("does not resolve to a hive endpoint")) {
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")) return "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
- ...schema.properties ?? {},
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 ["get_coins_market_data", "alchemy_get_token_prices_by_address", "get_price"];
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
- let normalized = `**Error:** ${errorMsg}`;
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, moralis_get_token_holder_metrics, or coingecko_get_onchain_token_top_traders for holder and trader reads.",
53687
- get_token_top_traders: "Use get_token_top_holders, moralis_get_token_holder_metrics, or coingecko_get_onchain_token_top_traders for holder and trader reads.",
53688
- get_top_holders_percentage: "Use get_token_top_holders, moralis_get_token_holder_metrics, or coingecko_get_onchain_token_top_traders for holder and trader reads.",
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
- const parsed = JSON.parse(rawErrorText ?? "");
53964
- return typeof parsed?.code === "string" ? parsed.code : void 0;
54093
+ snapshot = replacementAvailability?.() ?? {};
53965
54094
  } catch {
53966
- return void 0;
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 message = retired ? `Tool '${toolName}' was retired on ${RETIRED_TOOLS_DATE}. ${retired}` : `Tool '${toolName}' not found.`;
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 trimmed = args.chain.trim().toLowerCase();
54644
- args.chain = CHAIN_ID_NAMES[trimmed] ?? args.chain;
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 ?? "concise";
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 ?? "concise";
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 ?? "concise";
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-2XXMJPIH.js");
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-2XXMJPIH.js");
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-2XXMJPIH.js");
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-LRDKXJYD.js");
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-LRDKXJYD.js");
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-NWKN7FWC.js");
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();
@@ -9,7 +9,7 @@ import {
9
9
  getToolsForScope,
10
10
  memoizedJsonSchemaToZodInputSchema,
11
11
  memoizedJsonSchemaToZodOutputSchema
12
- } from "./chunk-YDX4SHSC.js";
12
+ } from "./chunk-J2PXISXW.js";
13
13
  import "./chunk-GADPH72D.js";
14
14
  import "./chunk-EPF36Q3Z.js";
15
15
  import {
@@ -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-XZXLLPF5.js";
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-YDX4SHSC.js";
18
+ } from "./chunk-J2PXISXW.js";
19
19
  import "./chunk-GADPH72D.js";
20
20
  import "./chunk-EPF36Q3Z.js";
21
21
  import "./chunk-ZXKFJQDE.js";
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "package": "hive-intelligence",
3
- "version": "1.6.2",
4
- "buildSha": "31b6c1881c32943ad54a1382f8edd172c9fdfc61",
5
- "imageDigest": "sha256:5eb3488df2a3f56cf225b7c4cd9afb43a7e14fa87a3c3446676b265a9144b69b",
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.2/releases/v1.6.2.json"
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-NWKN7FWC.js");
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-XZXLLPF5.js";
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-YDX4SHSC.js";
99
+ } from "./chunk-J2PXISXW.js";
100
100
  import {
101
101
  HIVE_AGENT_SKILLS
102
102
  } from "./chunk-GADPH72D.js";
package/build/stdio.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  createHiveMcpServer,
8
8
  secureLogger
9
- } from "./chunk-YDX4SHSC.js";
9
+ } from "./chunk-J2PXISXW.js";
10
10
  import "./chunk-GADPH72D.js";
11
11
  import "./chunk-EPF36Q3Z.js";
12
12
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hive-intelligence",
3
- "version": "1.6.2",
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",