hive-intelligence 1.5.1 → 1.5.2

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.
@@ -20827,7 +20827,7 @@ var require_websocket = __commonJS({
20827
20827
  var http = __require("http");
20828
20828
  var net2 = __require("net");
20829
20829
  var tls = __require("tls");
20830
- var { randomBytes: randomBytes4, createHash: createHash8 } = __require("crypto");
20830
+ var { randomBytes: randomBytes4, createHash: createHash9 } = __require("crypto");
20831
20831
  var { Duplex, Readable } = __require("stream");
20832
20832
  var { URL: URL2 } = __require("url");
20833
20833
  var PerMessageDeflate = require_permessage_deflate();
@@ -21495,7 +21495,7 @@ var require_websocket = __commonJS({
21495
21495
  abortHandshake(websocket, socket, "Invalid Upgrade header");
21496
21496
  return;
21497
21497
  }
21498
- const digest2 = createHash8("sha1").update(key + GUID).digest("base64");
21498
+ const digest2 = createHash9("sha1").update(key + GUID).digest("base64");
21499
21499
  if (res.headers["sec-websocket-accept"] !== digest2) {
21500
21500
  abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
21501
21501
  return;
@@ -21864,7 +21864,7 @@ var require_websocket_server = __commonJS({
21864
21864
  var EventEmitter = __require("events");
21865
21865
  var http = __require("http");
21866
21866
  var { Duplex } = __require("stream");
21867
- var { createHash: createHash8 } = __require("crypto");
21867
+ var { createHash: createHash9 } = __require("crypto");
21868
21868
  var extension = require_extension();
21869
21869
  var PerMessageDeflate = require_permessage_deflate();
21870
21870
  var subprotocol = require_subprotocol();
@@ -22171,7 +22171,7 @@ var require_websocket_server = __commonJS({
22171
22171
  );
22172
22172
  }
22173
22173
  if (this._state > RUNNING) return abortHandshake(socket, 503);
22174
- const digest2 = createHash8("sha1").update(key + GUID).digest("base64");
22174
+ const digest2 = createHash9("sha1").update(key + GUID).digest("base64");
22175
22175
  const headers = [
22176
22176
  "HTTP/1.1 101 Switching Protocols",
22177
22177
  "Upgrade: websocket",
@@ -85678,6 +85678,147 @@ function getAnalyticsWriter() {
85678
85678
  return defaultWriter;
85679
85679
  }
85680
85680
 
85681
+ // src/services/posthog-sink.ts
85682
+ import { createHash as createHash5 } from "crypto";
85683
+ var POSTHOG_DISTINCT_ID_DOMAIN = "hive-posthog-principal-v1";
85684
+ var MAX_QUEUE_SIZE2 = 500;
85685
+ var FLUSH_INTERVAL_MS2 = 5e3;
85686
+ var FLUSH_BATCH_SIZE2 = 50;
85687
+ var DROP_LOG_INTERVAL_MS2 = 6e4;
85688
+ var CAPTURE_TIMEOUT_MS = 1e4;
85689
+ function posthogDistinctId(raw) {
85690
+ return createHash5("sha256").update(`${POSTHOG_DISTINCT_ID_DOMAIN}\0${raw}`).digest("hex");
85691
+ }
85692
+ async function defaultPostBatch(url, body) {
85693
+ const response = await fetch(url, {
85694
+ method: "POST",
85695
+ headers: { "Content-Type": "application/json" },
85696
+ body: JSON.stringify(body),
85697
+ signal: AbortSignal.timeout(CAPTURE_TIMEOUT_MS)
85698
+ });
85699
+ return { ok: response.ok, status: response.status };
85700
+ }
85701
+ function defaultDependencies2() {
85702
+ return {
85703
+ projectToken: () => getEnvVar("POSTHOG_PROJECT_TOKEN"),
85704
+ host: () => getEnvVar("POSTHOG_HOST"),
85705
+ postBatch: defaultPostBatch,
85706
+ maxQueueSize: MAX_QUEUE_SIZE2,
85707
+ flushIntervalMs: FLUSH_INTERVAL_MS2,
85708
+ flushBatchSize: FLUSH_BATCH_SIZE2
85709
+ };
85710
+ }
85711
+ function createPosthogSink(overrides = {}) {
85712
+ const deps = {
85713
+ ...defaultDependencies2(),
85714
+ ...overrides
85715
+ };
85716
+ const queue = [];
85717
+ let dropped = 0;
85718
+ let lastDropLoggedAt = 0;
85719
+ let timer = null;
85720
+ let flushing = null;
85721
+ function ensureTimer() {
85722
+ if (timer) return;
85723
+ timer = setInterval(() => {
85724
+ void flush();
85725
+ }, deps.flushIntervalMs);
85726
+ timer.unref?.();
85727
+ }
85728
+ async function drain() {
85729
+ const token = deps.projectToken();
85730
+ const host = deps.host();
85731
+ if (!token || !host) return;
85732
+ const batch = queue.splice(0, queue.length);
85733
+ if (batch.length === 0) return;
85734
+ try {
85735
+ const { ok, status } = await deps.postBatch(
85736
+ `${host.replace(/\/$/, "")}/batch/`,
85737
+ { api_key: token, batch }
85738
+ );
85739
+ if (!ok) {
85740
+ dropped += batch.length;
85741
+ secureLogger.warn("PostHog batch capture failed", {
85742
+ status,
85743
+ eventCount: batch.length,
85744
+ droppedTotal: dropped
85745
+ });
85746
+ }
85747
+ } catch (error) {
85748
+ dropped += batch.length;
85749
+ secureLogger.warn("PostHog batch capture threw", {
85750
+ eventCount: batch.length,
85751
+ droppedTotal: dropped,
85752
+ errorMessage: error instanceof Error ? error.message : "unknown"
85753
+ });
85754
+ }
85755
+ }
85756
+ function flush() {
85757
+ if (flushing) return flushing;
85758
+ flushing = drain().catch(() => void 0).finally(() => {
85759
+ flushing = null;
85760
+ });
85761
+ return flushing;
85762
+ }
85763
+ return {
85764
+ enqueueToolCall(event) {
85765
+ try {
85766
+ if (!deps.projectToken() || !deps.host()) return false;
85767
+ if (!event.isMaterial || event.isInternal) return false;
85768
+ if (!event.principalRaw || event.authLane === "anonymous") return false;
85769
+ if (queue.length >= deps.maxQueueSize) {
85770
+ dropped += 1;
85771
+ const now = Date.now();
85772
+ if (now - lastDropLoggedAt >= DROP_LOG_INTERVAL_MS2) {
85773
+ lastDropLoggedAt = now;
85774
+ secureLogger.warn(
85775
+ "PostHog queue is full \u2014 mirror events are being dropped",
85776
+ { queueSize: queue.length, droppedTotal: dropped }
85777
+ );
85778
+ }
85779
+ return false;
85780
+ }
85781
+ queue.push({
85782
+ event: "mcp_tool_call",
85783
+ distinct_id: posthogDistinctId(event.principalRaw),
85784
+ timestamp: event.ts ?? (/* @__PURE__ */ new Date()).toISOString(),
85785
+ properties: {
85786
+ source: "mcp",
85787
+ tool_name: event.toolName,
85788
+ success: event.success,
85789
+ duration_ms: Math.max(0, Math.round(event.durationMs)),
85790
+ transport: event.transport,
85791
+ provider: event.provider ?? null,
85792
+ category: event.category ?? null,
85793
+ auth_lane: event.authLane ?? null,
85794
+ client: event.clientProfile ?? null
85795
+ }
85796
+ });
85797
+ ensureTimer();
85798
+ if (queue.length >= deps.flushBatchSize) void flush();
85799
+ return true;
85800
+ } catch {
85801
+ return false;
85802
+ }
85803
+ },
85804
+ flush,
85805
+ stop() {
85806
+ if (timer) {
85807
+ clearInterval(timer);
85808
+ timer = null;
85809
+ }
85810
+ },
85811
+ getStats() {
85812
+ return { queued: queue.length, dropped };
85813
+ }
85814
+ };
85815
+ }
85816
+ var defaultSink = null;
85817
+ function getPosthogSink() {
85818
+ if (!defaultSink) defaultSink = createPosthogSink();
85819
+ return defaultSink;
85820
+ }
85821
+
85681
85822
  // src/services/client-profile.ts
85682
85823
  var MCP_REMOTE_PATTERN = /^(.*?) \(via mcp-remote ([\d.]+)\)$/;
85683
85824
  var MAX_NAME_LENGTH = 256;
@@ -86081,6 +86222,22 @@ function logToolCall(endpoint, context, hive, success, durationMs, args, extra =
86081
86222
  });
86082
86223
  } catch {
86083
86224
  }
86225
+ try {
86226
+ getPosthogSink().enqueueToolCall({
86227
+ toolName: endpoint.tool.name,
86228
+ success,
86229
+ durationMs,
86230
+ transport: context.transport,
86231
+ provider: getProviderNameForTool(endpoint),
86232
+ category: getCategoryNameForTool(endpoint.tool.name),
86233
+ principalRaw: context.analytics?.principalRaw ?? null,
86234
+ authLane: context.analytics?.authLane ?? null,
86235
+ clientProfile: clientProfileFromName(context.analytics?.clientName),
86236
+ isMaterial: getMcpCreditCost(endpoint.tool.name) > 0,
86237
+ isInternal: context.analytics?.isInternal === true || context.transport === "health"
86238
+ });
86239
+ } catch {
86240
+ }
86084
86241
  }
86085
86242
  function validationErrorResult(endpoint, validationErrors, durationMs, args) {
86086
86243
  const errorCopy = agentErrorCopy("invalid_input", {
@@ -91138,7 +91295,7 @@ async function runMcpProtocolHealth(options = {}) {
91138
91295
  }
91139
91296
 
91140
91297
  // src/health/oauthLifecycle.ts
91141
- import { createHash as createHash6, randomBytes as randomBytes3 } from "crypto";
91298
+ import { createHash as createHash7, randomBytes as randomBytes3 } from "crypto";
91142
91299
 
91143
91300
  // src/auth/oauth/provider.ts
91144
91301
  import { randomBytes as randomBytes2 } from "crypto";
@@ -91514,10 +91671,10 @@ function isHiveOAuthAccessToken(token) {
91514
91671
  }
91515
91672
 
91516
91673
  // src/auth/oauth/store.ts
91517
- import { createHash as createHash5 } from "crypto";
91674
+ import { createHash as createHash6 } from "crypto";
91518
91675
  var REVOKED_FAMILY_TTL_SECONDS = 7776e3;
91519
91676
  function digest(value) {
91520
- return createHash5("sha256").update(value).digest("hex");
91677
+ return createHash6("sha256").update(value).digest("hex");
91521
91678
  }
91522
91679
  function parseJson(raw) {
91523
91680
  if (!raw) return void 0;
@@ -91969,7 +92126,7 @@ async function operationRejects(operation) {
91969
92126
  }
91970
92127
  async function issueCanaryFamily(args) {
91971
92128
  const verifier = randomBytes3(48).toString("base64url");
91972
- const challenge = createHash6("sha256").update(verifier).digest("base64url");
92129
+ const challenge = createHash7("sha256").update(verifier).digest("base64url");
91973
92130
  let consentLocation;
91974
92131
  const response = {
91975
92132
  redirect(status, location) {
@@ -92281,7 +92438,7 @@ async function runOAuthLifecycleHealth(overrides = {}) {
92281
92438
  import Coingecko2 from "@coingecko/coingecko-typescript";
92282
92439
 
92283
92440
  // src/tools/goplus/goplusClient.ts
92284
- import { createHash as createHash7 } from "crypto";
92441
+ import { createHash as createHash8 } from "crypto";
92285
92442
  function parsePositiveInteger(value, fallback) {
92286
92443
  const parsed = Number.parseInt(value || "", 10);
92287
92444
  return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
@@ -92375,7 +92532,7 @@ var GoPlusClient = class {
92375
92532
  const time = Math.floor(Date.now() / 1e3);
92376
92533
  const timeStr = time.toString();
92377
92534
  const signInput = this.appKey + timeStr + this.appSecret;
92378
- const sign = createHash7("sha1").update(signInput).digest("hex");
92535
+ const sign = createHash8("sha1").update(signInput).digest("hex");
92379
92536
  secureLogger.info("GoPlus: requesting access token", {
92380
92537
  appKeyLength: this.appKey.length,
92381
92538
  appSecretLength: this.appSecret.length,
@@ -7,7 +7,7 @@ import {
7
7
  getSupabaseAdmin,
8
8
  resolveEndpoint,
9
9
  secureLogger
10
- } from "./chunk-AGM2CIRL.js";
10
+ } from "./chunk-LFNLT3YW.js";
11
11
 
12
12
  // src/services/wallet-service.ts
13
13
  async function consumeCredits(args) {
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-PWMT5IRU.js");
3443
+ const { startStdio } = await import("./serve-YFFG2432.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-PWMT5IRU.js");
3456
+ const { startHttp } = await import("./serve-YFFG2432.js");
3457
3457
  await startHttp(port, program2.opts().envFile);
3458
3458
  } else {
3459
- const { startStdio } = await import("./serve-PWMT5IRU.js");
3459
+ const { startStdio } = await import("./serve-YFFG2432.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-XG5IQCXK.js");
3669
+ const { runDoctor } = await import("./doctor-NLSZB27R.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-XG5IQCXK.js");
3717
+ const { runStatus } = await import("./doctor-NLSZB27R.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-XHIN5JER.js");
207
+ const { SERVER_VERSION } = await import("./mcpServer-IWKTX2ZQ.js");
208
208
  const { resolveApiKey, resolveApiUrl } = await import("./config-dir-5IH7MOOT.js");
209
209
  const { getActiveProfile, maskKey } = await import("./auth-Y4GXW376.js");
210
210
  const apiUrl = resolveApiUrl();
@@ -9,7 +9,7 @@ import {
9
9
  getToolsForScope,
10
10
  memoizedJsonSchemaToZodInputSchema,
11
11
  memoizedJsonSchemaToZodOutputSchema
12
- } from "./chunk-AGM2CIRL.js";
12
+ } from "./chunk-LFNLT3YW.js";
13
13
  import "./chunk-L326MQZP.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-XQPEFCSY.js";
5
+ } from "./chunk-MWYPLBIN.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-AGM2CIRL.js";
18
+ } from "./chunk-LFNLT3YW.js";
19
19
  import "./chunk-L326MQZP.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.5.1",
4
- "buildSha": "ab8276f834ef8b08bda9d320387e4390e9ab55b6",
5
- "imageDigest": "sha256:9ef23428cc9d7da797e21152f4823f021ee8f0d3f3db94cf28410c8e1a72a124",
3
+ "version": "1.5.2",
4
+ "buildSha": "d978faa93aff11daff471ee34773a8354535bb32",
5
+ "imageDigest": "sha256:89a2aef7b9ac0a804f08f46c264c4487d2c3a02c9cce27613afb478a24fc81a1",
6
6
  "deployedUrl": "https://mcp.hiveintelligence.xyz",
7
- "manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.5.1/releases/v1.5.1.json"
7
+ "manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.5.2/releases/v1.5.2.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-XHIN5JER.js");
10
+ const { createHiveMcpServer, SERVER_NAME, SERVER_VERSION } = await import("./mcpServer-IWKTX2ZQ.js");
11
11
  const { getPendingUpdateVersion } = await import("./update-check-IEXPOYYR.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-XQPEFCSY.js";
9
+ } from "./chunk-MWYPLBIN.js";
10
10
  import {
11
11
  CategoryEndpoints,
12
12
  HERO_TOOL_NAMES,
@@ -95,7 +95,7 @@ import {
95
95
  validateEndpointArgs,
96
96
  verifyApiKey,
97
97
  waitForRedisAvailability
98
- } from "./chunk-AGM2CIRL.js";
98
+ } from "./chunk-LFNLT3YW.js";
99
99
  import {
100
100
  HIVE_AGENT_SKILLS
101
101
  } from "./chunk-L326MQZP.js";
package/build/stdio.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  createHiveMcpServer,
8
8
  secureLogger
9
- } from "./chunk-AGM2CIRL.js";
9
+ } from "./chunk-LFNLT3YW.js";
10
10
  import "./chunk-L326MQZP.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.5.1",
3
+ "version": "1.5.2",
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",