hive-intelligence 1.5.2 → 1.5.3
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-MWYPLBIN.js → chunk-VZBDTSWA.js} +2 -1
- package/build/{chunk-LFNLT3YW.js → chunk-Y5XA3SFY.js} +74 -18
- package/build/cli.js +5 -5
- package/build/{doctor-NLSZB27R.js → doctor-VRZYKQGL.js} +1 -1
- package/build/{mcpServer-IWKTX2ZQ.js → mcpServer-DARSGHUH.js} +1 -1
- package/build/monitor-worker.js +2 -2
- package/build/release.json +4 -4
- package/build/{serve-YFFG2432.js → serve-NCMFZSMB.js} +1 -1
- package/build/server.js +9 -2
- package/build/stdio.js +1 -1
- package/package.json +3 -3
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getSupabaseAdmin,
|
|
8
8
|
resolveEndpoint,
|
|
9
9
|
secureLogger
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Y5XA3SFY.js";
|
|
11
11
|
|
|
12
12
|
// src/services/wallet-service.ts
|
|
13
13
|
async function consumeCredits(args) {
|
|
@@ -133,6 +133,7 @@ async function executeToolByName(toolName, args, options) {
|
|
|
133
133
|
transport: "rest",
|
|
134
134
|
requestId: options?.requestId,
|
|
135
135
|
clients: getSharedClients(),
|
|
136
|
+
analytics: options?.analytics,
|
|
136
137
|
beforeExecution: options?.beforeExecution
|
|
137
138
|
});
|
|
138
139
|
if (result.validationErrors) {
|
|
@@ -62904,11 +62904,30 @@ function getCircuitBreaker(serviceName) {
|
|
|
62904
62904
|
state: "CLOSED" /* CLOSED */,
|
|
62905
62905
|
failures: 0,
|
|
62906
62906
|
lastFailureTime: 0,
|
|
62907
|
+
lastErrorMessage: null,
|
|
62907
62908
|
serviceName
|
|
62908
62909
|
});
|
|
62909
62910
|
}
|
|
62910
62911
|
return circuitBreakers.get(serviceName);
|
|
62911
62912
|
}
|
|
62913
|
+
function failureMessage(error) {
|
|
62914
|
+
let message = "";
|
|
62915
|
+
if (error instanceof AxiosError) {
|
|
62916
|
+
const data = error.response?.data;
|
|
62917
|
+
const fromBody = [
|
|
62918
|
+
data?.message,
|
|
62919
|
+
data?.error,
|
|
62920
|
+
data?.status?.error_message
|
|
62921
|
+
].find((value) => typeof value === "string" && value.trim());
|
|
62922
|
+
message = typeof fromBody === "string" ? fromBody : error.message;
|
|
62923
|
+
} else if (error instanceof Error) {
|
|
62924
|
+
message = error.message;
|
|
62925
|
+
} else if (error) {
|
|
62926
|
+
message = String(error);
|
|
62927
|
+
}
|
|
62928
|
+
const compact = message.replace(/\s+/g, " ").trim();
|
|
62929
|
+
return compact ? compact.slice(0, 240) : null;
|
|
62930
|
+
}
|
|
62912
62931
|
function isRetryableError(error) {
|
|
62913
62932
|
if (!error.response) {
|
|
62914
62933
|
const retryableCodes = [
|
|
@@ -63004,7 +63023,7 @@ var ResilientHttpClient = class {
|
|
|
63004
63023
|
);
|
|
63005
63024
|
} else {
|
|
63006
63025
|
throw new Error(
|
|
63007
|
-
`Circuit breaker OPEN for ${this.config.serviceName}. Service has failed ${breaker.failures} consecutive times. Will retry in ${Math.ceil((this.config.circuitBreakerResetTimeout - (now - breaker.lastFailureTime)) / 1e3)}s`
|
|
63026
|
+
`Circuit breaker OPEN for ${this.config.serviceName}. Service has failed ${breaker.failures} consecutive times. Will retry in ${Math.ceil((this.config.circuitBreakerResetTimeout - (now - breaker.lastFailureTime)) / 1e3)}s` + (breaker.lastErrorMessage ? `. Last error: ${breaker.lastErrorMessage}` : "")
|
|
63008
63027
|
);
|
|
63009
63028
|
}
|
|
63010
63029
|
break;
|
|
@@ -63034,11 +63053,13 @@ var ResilientHttpClient = class {
|
|
|
63034
63053
|
/**
|
|
63035
63054
|
* Record a failed request (may open circuit breaker)
|
|
63036
63055
|
*/
|
|
63037
|
-
recordFailure() {
|
|
63056
|
+
recordFailure(error) {
|
|
63038
63057
|
if (!this.config.enableCircuitBreaker) return;
|
|
63039
63058
|
const breaker = this.circuitBreaker;
|
|
63040
63059
|
breaker.failures++;
|
|
63041
63060
|
breaker.lastFailureTime = Date.now();
|
|
63061
|
+
const message = failureMessage(error);
|
|
63062
|
+
if (message) breaker.lastErrorMessage = message;
|
|
63042
63063
|
if (breaker.state === "HALF_OPEN" /* HALF_OPEN */) {
|
|
63043
63064
|
breaker.state = "OPEN" /* OPEN */;
|
|
63044
63065
|
secureLogger.warn(
|
|
@@ -63068,7 +63089,7 @@ var ResilientHttpClient = class {
|
|
|
63068
63089
|
} catch (error) {
|
|
63069
63090
|
lastError = error;
|
|
63070
63091
|
if (error instanceof AxiosError && isRetryableError(error)) {
|
|
63071
|
-
this.recordFailure();
|
|
63092
|
+
this.recordFailure(error);
|
|
63072
63093
|
if (attempt < maxRetries) {
|
|
63073
63094
|
const delay2 = calculateBackoffDelay(
|
|
63074
63095
|
attempt,
|
|
@@ -63091,7 +63112,7 @@ var ResilientHttpClient = class {
|
|
|
63091
63112
|
if (error instanceof AxiosError) {
|
|
63092
63113
|
const status = error.response?.status ?? 0;
|
|
63093
63114
|
if (!status || status >= 500 || status === 429) {
|
|
63094
|
-
this.recordFailure();
|
|
63115
|
+
this.recordFailure(error);
|
|
63095
63116
|
}
|
|
63096
63117
|
}
|
|
63097
63118
|
}
|
|
@@ -84857,7 +84878,8 @@ var ERROR_SUGGESTIONS = {
|
|
|
84857
84878
|
};
|
|
84858
84879
|
function createErrorResponse7(code, message, additionalContext) {
|
|
84859
84880
|
const suggestion = ERROR_SUGGESTIONS[code] || ERROR_SUGGESTIONS.API_ERROR;
|
|
84860
|
-
|
|
84881
|
+
const bareMessage = message.replace(/^(?:\s*\*\*Error:\*\*\s*)+/, "");
|
|
84882
|
+
let errorText = `**Error:** ${bareMessage}
|
|
84861
84883
|
|
|
84862
84884
|
**Code:** ${code}
|
|
84863
84885
|
|
|
@@ -86659,6 +86681,14 @@ function isSolanaChain(chain, address) {
|
|
|
86659
86681
|
if (chain) return SOLANA_CHAIN_NAMES.has(normalizeChain(chain));
|
|
86660
86682
|
return !address.trim().toLowerCase().startsWith("0x");
|
|
86661
86683
|
}
|
|
86684
|
+
function looksLikeNameService(address) {
|
|
86685
|
+
return /\.[a-z]{2,}$/i.test(address.trim());
|
|
86686
|
+
}
|
|
86687
|
+
function nameServiceError(address) {
|
|
86688
|
+
return errorResult3(
|
|
86689
|
+
`"${address}" looks like an ENS or name-service name, which isn't supported yet. Pass a 0x address (EVM) or a base58 address (Solana).`
|
|
86690
|
+
);
|
|
86691
|
+
}
|
|
86662
86692
|
function errorResult3(message) {
|
|
86663
86693
|
return {
|
|
86664
86694
|
content: [{ type: "text", text: JSON.stringify({ error: message }) }],
|
|
@@ -86749,7 +86779,12 @@ function heroTools(endpoints, options = {}) {
|
|
|
86749
86779
|
change_24h_percent: value[`${vsCurrency}_24h_change`] ?? null
|
|
86750
86780
|
};
|
|
86751
86781
|
}
|
|
86752
|
-
|
|
86782
|
+
const tokenExists = Object.keys(payload).some((key) => key !== "_hive");
|
|
86783
|
+
return {
|
|
86784
|
+
token: query,
|
|
86785
|
+
vs_currency: vsCurrency,
|
|
86786
|
+
note: tokenExists ? `No ${vsCurrency} price available for "${query}". The quote currency may be unsupported; try vs_currency "usd".` : `No price found for "${query}". Verify the CoinGecko id or symbol, or pass chain + address for a contract token.`
|
|
86787
|
+
};
|
|
86753
86788
|
};
|
|
86754
86789
|
const trimOnchainPrice = (address) => (payload) => {
|
|
86755
86790
|
const data = payload.data;
|
|
@@ -86765,7 +86800,10 @@ function heroTools(endpoints, options = {}) {
|
|
|
86765
86800
|
};
|
|
86766
86801
|
}
|
|
86767
86802
|
}
|
|
86768
|
-
return {
|
|
86803
|
+
return {
|
|
86804
|
+
address,
|
|
86805
|
+
note: `No onchain price found for ${address} on this network. Verify the contract address and chain.`
|
|
86806
|
+
};
|
|
86769
86807
|
};
|
|
86770
86808
|
const getTokenPrice = {
|
|
86771
86809
|
metadata: {
|
|
@@ -86792,6 +86830,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
86792
86830
|
const vsCurrency = (parsed.data.vs_currency ?? "usd").toLowerCase();
|
|
86793
86831
|
const format = parsed.data.response_format ?? "concise";
|
|
86794
86832
|
if (address) {
|
|
86833
|
+
if (looksLikeNameService(address)) return nameServiceError(address);
|
|
86795
86834
|
const network = GECKO_NETWORKS[normalizeChain(chain)] ?? normalizeChain(chain);
|
|
86796
86835
|
const result3 = await executeUnderlying("get_onchain_token_price", {
|
|
86797
86836
|
network,
|
|
@@ -86891,6 +86930,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
86891
86930
|
}
|
|
86892
86931
|
const { address, chain } = parsed.data;
|
|
86893
86932
|
const format = parsed.data.response_format ?? "concise";
|
|
86933
|
+
if (looksLikeNameService(address)) return nameServiceError(address);
|
|
86894
86934
|
if (isSolanaChain(chain, address)) {
|
|
86895
86935
|
const result3 = await executeUnderlying("get_solana_token_security", {
|
|
86896
86936
|
contract_address: address
|
|
@@ -87039,6 +87079,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
87039
87079
|
}
|
|
87040
87080
|
const { address, chain } = parsed.data;
|
|
87041
87081
|
const format = parsed.data.response_format ?? "concise";
|
|
87082
|
+
if (looksLikeNameService(address)) return nameServiceError(address);
|
|
87042
87083
|
if (isSolanaChain(chain, address)) {
|
|
87043
87084
|
const result3 = await executeUnderlying("helius_get_wallet_balances", {
|
|
87044
87085
|
wallet: address
|
|
@@ -97537,8 +97578,9 @@ var PROVIDER_AVAILABILITY_TTL_MS = 6e4;
|
|
|
97537
97578
|
var AVAILABILITY_SEVERITY = {
|
|
97538
97579
|
ok: 0,
|
|
97539
97580
|
degraded: 1,
|
|
97540
|
-
|
|
97541
|
-
|
|
97581
|
+
plan_required: 2,
|
|
97582
|
+
missing_key: 3,
|
|
97583
|
+
failing: 4
|
|
97542
97584
|
};
|
|
97543
97585
|
function availabilityFromRuntimeStatus(status) {
|
|
97544
97586
|
switch (status) {
|
|
@@ -97549,7 +97591,11 @@ function availabilityFromRuntimeStatus(status) {
|
|
|
97549
97591
|
return "ok";
|
|
97550
97592
|
case "missing_key":
|
|
97551
97593
|
return "missing_key";
|
|
97594
|
+
// A lapsed or exhausted upstream plan fails deterministically until the
|
|
97595
|
+
// account changes, unlike a transient rate limit or wobble, so it demotes
|
|
97596
|
+
// like a missing key instead of staying ranked as merely degraded.
|
|
97552
97597
|
case "plan_required":
|
|
97598
|
+
return "plan_required";
|
|
97553
97599
|
case "rate_limited":
|
|
97554
97600
|
case "degraded":
|
|
97555
97601
|
return "degraded";
|
|
@@ -97558,7 +97604,7 @@ function availabilityFromRuntimeStatus(status) {
|
|
|
97558
97604
|
}
|
|
97559
97605
|
}
|
|
97560
97606
|
function isUnavailable(availability) {
|
|
97561
|
-
return availability === "missing_key" || availability === "failing";
|
|
97607
|
+
return availability === "missing_key" || availability === "plan_required" || availability === "failing";
|
|
97562
97608
|
}
|
|
97563
97609
|
function worseOf(left, right) {
|
|
97564
97610
|
return AVAILABILITY_SEVERITY[right] > AVAILABILITY_SEVERITY[left] ? right : left;
|
|
@@ -98322,7 +98368,8 @@ function singularizeToken(token) {
|
|
|
98322
98368
|
return token;
|
|
98323
98369
|
}
|
|
98324
98370
|
function parseSearchTokens(query) {
|
|
98325
|
-
|
|
98371
|
+
const tokens = query.toLowerCase().replace(/0x[a-f0-9]{20,}/g, " ").replace(/[1-9A-HJ-NP-Za-km-z]{32,}/g, " ").replace(/https?:\/\/\S+/g, " ").replace(/[\?¿!¡"'`()\[\]{}:;|/\\]+/g, " ").replace(/[-_]+/g, " ").split(/[\s,]+/).map(normalizeSearchToken).filter((token) => token.length > 1).filter((token) => !SEARCH_STOPWORDS.has(token)).map(singularizeToken);
|
|
98372
|
+
return [...new Set(tokens)];
|
|
98326
98373
|
}
|
|
98327
98374
|
function searchTokenVariants(token) {
|
|
98328
98375
|
const normalized = singularizeToken(normalizeSearchToken(token));
|
|
@@ -98359,9 +98406,12 @@ function queryMatchScore(entry, query) {
|
|
|
98359
98406
|
entry.provider,
|
|
98360
98407
|
entry.summary
|
|
98361
98408
|
].join(" ").toLowerCase();
|
|
98409
|
+
const nameTitleTokenSet = new Set(parseSearchTokens(nameTitleText));
|
|
98410
|
+
const coreTextTokenSet = new Set(parseSearchTokens(coreText));
|
|
98362
98411
|
const score = tokens.reduce((total, token) => {
|
|
98363
|
-
|
|
98364
|
-
if (
|
|
98412
|
+
const exactToken = singularizeToken(normalizeSearchToken(token));
|
|
98413
|
+
if (nameTitleTokenSet.has(exactToken)) return total + 24;
|
|
98414
|
+
if (coreTextTokenSet.has(exactToken)) return total + 14;
|
|
98365
98415
|
if (textMatchesSearchToken(nameTitleText, token)) return total + 12;
|
|
98366
98416
|
if (textMatchesSearchToken(entry.summary, token)) return total + 6;
|
|
98367
98417
|
if (textMatchesSearchToken(coreText, token)) return total + 4;
|
|
@@ -98603,13 +98653,13 @@ function dynamicTools(endpoints, options = {}) {
|
|
|
98603
98653
|
(toolset) => toolsetCatalogEntry(toolset, providerByToolName)
|
|
98604
98654
|
);
|
|
98605
98655
|
const searchToolsSchema = z17.object({
|
|
98606
|
-
query: z17.string().optional().describe(
|
|
98656
|
+
query: z17.string().max(512).optional().describe(
|
|
98607
98657
|
"Search text matched against tool name, title, category, provider, and summary."
|
|
98608
98658
|
),
|
|
98609
|
-
provider: z17.string().optional().describe(
|
|
98659
|
+
provider: z17.string().max(128).optional().describe(
|
|
98610
98660
|
"Optional provider filter such as CoinGecko, Moralis, Tenderly, Helius, GoPlus, CCXT, Codex, Alchemy, DeFiLlama, Hyperliquid, or Open Data Fetch."
|
|
98611
98661
|
),
|
|
98612
|
-
category: z17.string().optional().describe("Optional category filter, for example Portfolio & Wallet."),
|
|
98662
|
+
category: z17.string().max(128).optional().describe("Optional category filter, for example Portfolio & Wallet."),
|
|
98613
98663
|
limit: z17.number().int().min(1).max(MAX_SEARCH_LIMIT).optional().describe(`Maximum tools to return. Default ${DEFAULT_SEARCH_LIMIT}.`),
|
|
98614
98664
|
cursor: z17.string().optional().describe("Pagination cursor from the previous response."),
|
|
98615
98665
|
toolset_id: z17.string().max(100).optional().describe(
|
|
@@ -99509,7 +99559,7 @@ function buildServerInstructions(scope) {
|
|
|
99509
99559
|
`Hive serves live crypto market data to AI agents over a compact ${ROOT_META_TOOL_COUNT}-tool root. Loop: search_tools -> get_api_endpoint_schema -> ${READ_ENDPOINT_INVOKER} for reads (${STATEFUL_WRITE_ENDPOINT_INVOKER} only after explicit user approval; validate_task_result before structured answers). Every material response carries a _hive receipt (provider, fetched_at, runtime_status, _hive.receipt_id); cite it when answering.`,
|
|
99510
99560
|
`For the three dominant intents call the hero tools directly: get_token_price, check_token_safety, get_wallet_portfolio (response_format "concise" default, "detailed" available).`,
|
|
99511
99561
|
`Degraded providers are reported, not hidden: search_tools marks each tool's availability, and unavailable tools return runtime_status with cause and next_action instead of data. Follow next_action; never retry an unchanged failing call in a loop.`,
|
|
99512
|
-
`Discovery is free and cheap: resources hive://toolsets, hive://providers, hive://tools; the ${UNDERLYING_TOOL_COUNT}-tool catalog stays reachable through search_tools or scoped category endpoints. Use limit/page/per_page to keep responses small; a material execution costs 1 credit on the hosted service.`
|
|
99562
|
+
`Discovery is free and cheap: resources hive://toolsets, hive://providers, hive://tools; the ${UNDERLYING_TOOL_COUNT}-tool catalog stays reachable through search_tools or scoped category endpoints. Use limit and cursor on search_tools, and limit/page/per_page/offset on data endpoints, to keep responses small; a material execution costs 1 credit on the hosted service.`
|
|
99513
99563
|
].join(" ");
|
|
99514
99564
|
}
|
|
99515
99565
|
function compactCanaryRun(run) {
|
|
@@ -99853,7 +99903,11 @@ var HiveMCPServer = class {
|
|
|
99853
99903
|
}
|
|
99854
99904
|
}
|
|
99855
99905
|
getProviderStatusCatalog() {
|
|
99856
|
-
|
|
99906
|
+
const snapshot = getProviderAvailabilitySnapshot();
|
|
99907
|
+
return getProviderStatusCatalog().map((provider) => {
|
|
99908
|
+
const observed = snapshot.byProviderName[provider.name];
|
|
99909
|
+
return provider.status === "ok" && observed && observed !== "ok" ? { ...provider, status: observed } : provider;
|
|
99910
|
+
});
|
|
99857
99911
|
}
|
|
99858
99912
|
setupHandlers() {
|
|
99859
99913
|
this.server.server.oninitialized = () => {
|
|
@@ -99964,6 +100018,8 @@ var HiveMCPServer = class {
|
|
|
99964
100018
|
note: `Root /mcp exposes ${ROOT_META_TOOL_COUNT} meta-tools optimized for LLM agents. Use category endpoints (/hive_*/mcp) only for specialized integrations requiring direct tool access.`,
|
|
99965
100019
|
runtimeStatuses: TASK_TOOLSET_RUNTIME_STATUSES,
|
|
99966
100020
|
runtimeStatusSemantics: RUNTIME_STATUS_SEMANTICS,
|
|
100021
|
+
availability_source: getProviderAvailabilitySnapshot().source,
|
|
100022
|
+
canary_observed_at: getProviderAvailabilitySnapshot().canaryObservedAt,
|
|
99967
100023
|
providers
|
|
99968
100024
|
},
|
|
99969
100025
|
null,
|
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-NCMFZSMB.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-NCMFZSMB.js");
|
|
3457
3457
|
await startHttp(port, program2.opts().envFile);
|
|
3458
3458
|
} else {
|
|
3459
|
-
const { startStdio } = await import("./serve-
|
|
3459
|
+
const { startStdio } = await import("./serve-NCMFZSMB.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-VRZYKQGL.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-VRZYKQGL.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-DARSGHUH.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-VZBDTSWA.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-Y5XA3SFY.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.3",
|
|
4
|
+
"buildSha": "0adb32f0c05315fa9381d143b9f2d0e89514ce63",
|
|
5
|
+
"imageDigest": "sha256:4ab4777877e1be050153bca1c1be9d72b5a7fe7d68e5439d7aabcccaa63c9806",
|
|
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.3/releases/v1.5.3.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-DARSGHUH.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-VZBDTSWA.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-Y5XA3SFY.js";
|
|
99
99
|
import {
|
|
100
100
|
HIVE_AGENT_SKILLS
|
|
101
101
|
} from "./chunk-L326MQZP.js";
|
|
@@ -8202,6 +8202,13 @@ app.post(
|
|
|
8202
8202
|
authReq.hiveSubjectContext,
|
|
8203
8203
|
() => executeToolByName(executionToolName, endpointArgs, {
|
|
8204
8204
|
requestId: req.requestId,
|
|
8205
|
+
// Same identity context the hero branch passes — without it every
|
|
8206
|
+
// non-hero keyed REST call wrote a NULL-principal analytics row.
|
|
8207
|
+
analytics: {
|
|
8208
|
+
principalRaw: authReq.userId,
|
|
8209
|
+
authLane: "api_key",
|
|
8210
|
+
isInternal: isMonitorSecretRequest(req)
|
|
8211
|
+
},
|
|
8205
8212
|
beforeExecution: keyedBeforeExecution
|
|
8206
8213
|
})
|
|
8207
8214
|
);
|
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.3",
|
|
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",
|
|
@@ -169,10 +169,10 @@
|
|
|
169
169
|
"express-rate-limit": "8.5.2"
|
|
170
170
|
},
|
|
171
171
|
"esbuild": "0.28.1",
|
|
172
|
-
"fast-uri": "3.1.
|
|
172
|
+
"fast-uri": "3.1.7",
|
|
173
173
|
"hono": "4.12.34",
|
|
174
174
|
"ip-address": "10.5.0",
|
|
175
|
-
"qs": "6.
|
|
175
|
+
"qs": "6.16.0"
|
|
176
176
|
},
|
|
177
177
|
"devDependencies": {
|
|
178
178
|
"@types/cors": "^2.8.19",
|