hive-intelligence 1.17.0 → 1.17.1

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.
@@ -7,7 +7,7 @@ import {
7
7
  getSupabaseAdmin,
8
8
  resolveEndpoint,
9
9
  secureLogger
10
- } from "./chunk-ZLLD7AXP.js";
10
+ } from "./chunk-UP47NKED.js";
11
11
 
12
12
  // src/services/wallet-service.ts
13
13
  async function consumeCredits(args) {
@@ -53870,7 +53870,7 @@ function heroTools(endpoints, options = {}) {
53870
53870
  'Chain name, for example "eth", "base", "arbitrum", or "solana". Defaults to eth for 0x addresses; Solana is auto-detected.'
53871
53871
  ),
53872
53872
  include_spam: z.boolean().optional().describe(
53873
- "Show likely spam airdrops (tokens with a URL or claim lure in the name, and on EVM chains tokens with no market price). Default false; the response says how many were hidden."
53873
+ "Show likely spam airdrops (tokens with a URL or claim lure in the name, and on EVM chains tokens with no market price or not listed on CoinGecko). Default false; the response says how many were hidden."
53874
53874
  ),
53875
53875
  response_format: RESPONSE_FORMAT
53876
53876
  });
@@ -53956,15 +53956,21 @@ function heroTools(endpoints, options = {}) {
53956
53956
  address: tokenAddress,
53957
53957
  balance,
53958
53958
  usd_value: token.totalValueUsd ?? token.valueUsd ?? token.usd_value ?? (typeof token.totalValueUsdCents === "number" ? token.totalValueUsdCents / 100 : usdFromPrices(token, balance)),
53959
- ...token.h24_change_pct != null ? { h24_change_pct: token.h24_change_pct } : {}
53959
+ ...token.h24_change_pct != null ? { h24_change_pct: token.h24_change_pct } : {},
53960
+ ...token.coingecko_listed === false ? { coingecko_listed: false } : {}
53960
53961
  };
53961
53962
  });
53962
53963
  const nonZero = summarized.filter(
53963
53964
  (token) => !isRecord3(token) || token.balance !== "0"
53964
53965
  );
53965
- const isSpam = (token) => isRecord3(token) && token.address != null && (SPAM_LURE.test(`${token.name ?? ""} ${token.symbol ?? ""}`) || priced && token.usd_value == null);
53966
+ const isSpam = (token) => isRecord3(token) && token.address != null && (SPAM_LURE.test(`${token.name ?? ""} ${token.symbol ?? ""}`) || priced && token.usd_value == null || token.coingecko_listed === false);
53966
53967
  const held = includeSpam ? nonZero : nonZero.filter((t) => !isSpam(t));
53967
53968
  const hidden = nonZero.length - held.length;
53969
+ const total = payload.total_value_usd;
53970
+ const hiddenUsd = nonZero.filter((t) => !held.includes(t)).reduce(
53971
+ (sum, t) => sum + (isRecord3(t) && typeof t.usd_value === "number" ? t.usd_value : 0),
53972
+ 0
53973
+ );
53968
53974
  return {
53969
53975
  address,
53970
53976
  chain: chainLabel,
@@ -53972,7 +53978,7 @@ function heroTools(endpoints, options = {}) {
53972
53978
  ...hidden > 0 ? {
53973
53979
  spam_hidden: {
53974
53980
  count: hidden,
53975
- reason: priced ? "no market price, or a URL/claim lure in the name" : "a URL/claim lure in the name",
53981
+ reason: priced ? "no market price, not listed on CoinGecko, or a URL/claim lure in the name" : "a URL/claim lure in the name",
53976
53982
  note: "Likely spam airdrops; pass include_spam=true to show them."
53977
53983
  }
53978
53984
  } : {},
@@ -53981,7 +53987,8 @@ function heroTools(endpoints, options = {}) {
53981
53987
  note: `Showing the first ${MAX_CONCISE_TOKENS} of ${held.length} held tokens (zero balances omitted). Use response_format=detailed for the full provider payload.`
53982
53988
  } : summarized.length > nonZero.length ? {
53983
53989
  note: `${summarized.length - nonZero.length} zero-balance tokens omitted. Use response_format=detailed for the full provider payload.`
53984
- } : {}
53990
+ } : {},
53991
+ ...typeof total === "number" ? { total_value_usd: Math.round((total - hiddenUsd) * 100) / 100 } : {}
53985
53992
  };
53986
53993
  };
53987
53994
  const coingeckoBalances = (payload) => {
@@ -53997,7 +54004,9 @@ function heroTools(endpoints, options = {}) {
53997
54004
  balance: row.balance ?? null,
53998
54005
  decimals: 0,
53999
54006
  usd_value: toNumber(row.value_usd),
54000
- h24_change_pct: toNumber(row.h24_price_change_percentage)
54007
+ h24_change_pct: toNumber(row.h24_price_change_percentage),
54008
+ // Only an explicit null means unlisted; a missing field fails open.
54009
+ coingecko_listed: row.coingecko_coin_id !== null
54001
54010
  }))
54002
54011
  };
54003
54012
  };
@@ -54050,13 +54059,13 @@ function heroTools(endpoints, options = {}) {
54050
54059
  per_page: 100
54051
54060
  }, "get_wallet_portfolio");
54052
54061
  if (!network || "hive" in result3 && result3.ok) {
54053
- return respond(result3, format, (payload) => {
54054
- const balances = coingeckoBalances(payload);
54055
- return {
54056
- ...trimWalletPortfolio(address, normalized, includeSpam, true)(balances),
54057
- total_value_usd: balances.total_value_usd
54058
- };
54059
- });
54062
+ return respond(
54063
+ result3,
54064
+ format,
54065
+ (payload) => trimWalletPortfolio(address, normalized, includeSpam, true)(
54066
+ coingeckoBalances(payload)
54067
+ )
54068
+ );
54060
54069
  }
54061
54070
  fallbackNote = "CoinGecko wallet balances failed for this call; served from Alchemy.";
54062
54071
  }
package/build/cli.js CHANGED
@@ -3455,7 +3455,7 @@ program2.hook("preAction", (thisCommand) => {
3455
3455
  setCliFlags({ apiKey: opts.apiKey, noRetry: opts.retry === false });
3456
3456
  });
3457
3457
  program2.action(async () => {
3458
- const { startStdio } = await import("./serve-4YDJSCKE.js");
3458
+ const { startStdio } = await import("./serve-R6GMEH2G.js");
3459
3459
  await startStdio(program2.opts().envFile);
3460
3460
  });
3461
3461
  program2.command("serve").description(
@@ -3473,10 +3473,10 @@ program2.command("serve").description(
3473
3473
  );
3474
3474
  process.exit(ExitCode.INVALID_ARGS);
3475
3475
  }
3476
- const { startHttp } = await import("./serve-4YDJSCKE.js");
3476
+ const { startHttp } = await import("./serve-R6GMEH2G.js");
3477
3477
  await startHttp(port, program2.opts().envFile);
3478
3478
  } else {
3479
- const { startStdio } = await import("./serve-4YDJSCKE.js");
3479
+ const { startStdio } = await import("./serve-R6GMEH2G.js");
3480
3480
  await startStdio(program2.opts().envFile, { local: opts.local });
3481
3481
  }
3482
3482
  });
@@ -3744,7 +3744,7 @@ program2.command("doctor").description("Diagnose environment and server connecti
3744
3744
  "--fix",
3745
3745
  "Rewrite stale Hive entries in MCP client configs (backs each file up first)"
3746
3746
  ).action(async (opts) => {
3747
- const { runDoctor } = await import("./doctor-U5UEI7JX.js");
3747
+ const { runDoctor } = await import("./doctor-PAVENKK7.js");
3748
3748
  await runDoctor(opts);
3749
3749
  });
3750
3750
  program2.command("upgrade").description("Update Hive to the latest published version").action(async () => {
@@ -3792,7 +3792,7 @@ program2.command("usage").description("Show your API usage and plan limits").act
3792
3792
  await runUsage();
3793
3793
  });
3794
3794
  program2.command("status").description("Quick health and version check").action(async () => {
3795
- const { runStatus } = await import("./doctor-U5UEI7JX.js");
3795
+ const { runStatus } = await import("./doctor-PAVENKK7.js");
3796
3796
  await runStatus();
3797
3797
  });
3798
3798
  program2.command("open [target]").description("Open Hive dashboard, docs, status, or GitHub in browser").action(async (target) => {
@@ -296,7 +296,7 @@ ${fails === 0 ? "All checks passed" : `${fails} issues found`}${warns ? ` (${war
296
296
  if (fails > 0) process.exit(1);
297
297
  }
298
298
  async function runStatus() {
299
- const { SERVER_VERSION } = await import("./mcpServer-SE5ESJZX.js");
299
+ const { SERVER_VERSION } = await import("./mcpServer-TJEF6MZ6.js");
300
300
  const { resolveApiKey, resolveApiUrl } = await import("./config-dir-2QLA5PXD.js");
301
301
  const { getActiveProfile, maskKey } = await import("./auth-TZQC54EJ.js");
302
302
  const apiUrl = resolveApiUrl();
@@ -9,7 +9,7 @@ import {
9
9
  getToolsForScope,
10
10
  memoizedJsonSchemaToZodInputSchema,
11
11
  memoizedJsonSchemaToZodOutputSchema
12
- } from "./chunk-ZLLD7AXP.js";
12
+ } from "./chunk-UP47NKED.js";
13
13
  import "./chunk-QYK3EWTE.js";
14
14
  import "./chunk-EPF36Q3Z.js";
15
15
  import "./chunk-MYSS5SBE.js";
@@ -4,7 +4,7 @@ import {
4
4
  executeToolByName,
5
5
  refundCredits,
6
6
  refundSettled
7
- } from "./chunk-DAYJPXIW.js";
7
+ } from "./chunk-TLADUAUA.js";
8
8
  import {
9
9
  MIN_MONITOR_CADENCE_MS,
10
10
  closeRedisClient,
@@ -14,7 +14,7 @@ import {
14
14
  monitorCadenceIntervalMs,
15
15
  runScheduledHealthCanaries,
16
16
  secureLogger
17
- } from "./chunk-ZLLD7AXP.js";
17
+ } from "./chunk-UP47NKED.js";
18
18
  import "./chunk-QYK3EWTE.js";
19
19
  import "./chunk-EPF36Q3Z.js";
20
20
  import "./chunk-MYSS5SBE.js";
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "package": "hive-intelligence",
3
- "version": "1.17.0",
4
- "buildSha": "deae0b70bb3ac1ffafc8ab33d2120588544fdc6c",
5
- "imageDigest": "sha256:380dea4386e5dc969f36a5090f2e53d409640f6a77f960ea4d9f7d1100f8fc48",
3
+ "version": "1.17.1",
4
+ "buildSha": "1535eb707c7c6f42d80b00c33be4527ace6a4d2b",
5
+ "imageDigest": "sha256:2c337b75ce7d0a3214a66deeadbbab951c684393cc16bb6d3dbcb73cddcd8d24",
6
6
  "deployedUrl": "https://mcp.hiveintelligence.xyz",
7
- "manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.17.0/releases/v1.17.0.json"
7
+ "manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.17.1/releases/v1.17.1.json"
8
8
  }
@@ -51,7 +51,7 @@ async function startStdio(envFile, opts = {}) {
51
51
  console.log = (...args) => console.error("[LOG]", ...args);
52
52
  if (resolveStdioMode(opts) === "proxy") return startStdioProxy();
53
53
  const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
54
- const { createHiveMcpServer, SERVER_NAME, SERVER_VERSION } = await import("./mcpServer-SE5ESJZX.js");
54
+ const { createHiveMcpServer, SERVER_NAME, SERVER_VERSION } = await import("./mcpServer-TJEF6MZ6.js");
55
55
  const { getPendingUpdateVersion } = await import("./update-check-36QU6PKA.js");
56
56
  const transport = new StdioServerTransport();
57
57
  const pendingUpdate = getPendingUpdateVersion();
package/build/server.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  getWalletStatus,
9
9
  refundCredits,
10
10
  refundSettled
11
- } from "./chunk-DAYJPXIW.js";
11
+ } from "./chunk-TLADUAUA.js";
12
12
  import {
13
13
  CategoryEndpoints,
14
14
  HERO_TOOL_NAMES,
@@ -97,7 +97,7 @@ import {
97
97
  validateEndpointArgs,
98
98
  verifyApiKey,
99
99
  waitForRedisAvailability
100
- } from "./chunk-ZLLD7AXP.js";
100
+ } from "./chunk-UP47NKED.js";
101
101
  import {
102
102
  HIVE_AGENT_SKILLS
103
103
  } from "./chunk-QYK3EWTE.js";
package/build/stdio.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  createHiveMcpServer,
8
8
  secureLogger
9
- } from "./chunk-ZLLD7AXP.js";
9
+ } from "./chunk-UP47NKED.js";
10
10
  import "./chunk-QYK3EWTE.js";
11
11
  import "./chunk-EPF36Q3Z.js";
12
12
  import "./chunk-MYSS5SBE.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hive-intelligence",
3
- "version": "1.17.0",
3
+ "version": "1.17.1",
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",