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.
- package/build/{chunk-AGM2CIRL.js → chunk-LFNLT3YW.js} +167 -10
- package/build/{chunk-XQPEFCSY.js → chunk-MWYPLBIN.js} +1 -1
- package/build/cli.js +5 -5
- package/build/{doctor-XG5IQCXK.js → doctor-NLSZB27R.js} +1 -1
- package/build/{mcpServer-XHIN5JER.js → mcpServer-IWKTX2ZQ.js} +1 -1
- package/build/monitor-worker.js +2 -2
- package/build/release.json +4 -4
- package/build/{serve-PWMT5IRU.js → serve-YFFG2432.js} +1 -1
- package/build/server.js +2 -2
- package/build/stdio.js +1 -1
- package/package.json +1 -1
|
@@ -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:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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
|
|
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
|
|
91674
|
+
import { createHash as createHash6 } from "crypto";
|
|
91518
91675
|
var REVOKED_FAMILY_TTL_SECONDS = 7776e3;
|
|
91519
91676
|
function digest(value) {
|
|
91520
|
-
return
|
|
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 =
|
|
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
|
|
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 =
|
|
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,
|
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-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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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();
|
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-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-
|
|
18
|
+
} from "./chunk-LFNLT3YW.js";
|
|
19
19
|
import "./chunk-L326MQZP.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.5.
|
|
4
|
-
"buildSha": "
|
|
5
|
-
"imageDigest": "sha256:
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
98
|
+
} from "./chunk-LFNLT3YW.js";
|
|
99
99
|
import {
|
|
100
100
|
HIVE_AGENT_SKILLS
|
|
101
101
|
} from "./chunk-L326MQZP.js";
|
package/build/stdio.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hive-intelligence",
|
|
3
|
-
"version": "1.5.
|
|
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",
|