hive-intelligence 1.4.0 → 1.5.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.
Files changed (28) hide show
  1. package/README.md +2 -2
  2. package/build/{auth-HRFQWQMZ.js → auth-Y4GXW376.js} +1 -1
  3. package/build/{browser-auth-KXIO5BHM.js → browser-auth-F62BMD7W.js} +1 -1
  4. package/build/{chunk-TNQ7GJ6Q.js → chunk-7VSK46QO.js} +73 -44
  5. package/build/{chunk-UFTNBCSA.js → chunk-AGM2CIRL.js} +86 -16
  6. package/build/{chunk-AQQAPAER.js → chunk-BDO27NIP.js} +2 -2
  7. package/build/{chunk-GHCYCBA3.js → chunk-GB4XMTDE.js} +2 -2
  8. package/build/{chunk-7DYHWY4Y.js → chunk-SFN772RL.js} +4 -4
  9. package/build/{chunk-AEU43ACS.js → chunk-TVBPCELA.js} +2 -2
  10. package/build/{chunk-TVQJY47C.js → chunk-WF34ZD5I.js} +6 -6
  11. package/build/{chunk-3OZFBWFK.js → chunk-XQPEFCSY.js} +1 -1
  12. package/build/cli.js +43 -29
  13. package/build/{completion-7KBW243H.js → completion-L3TDZ7ZK.js} +1 -1
  14. package/build/{doctor-GHUAUFS2.js → doctor-XG5IQCXK.js} +4 -4
  15. package/build/{init-UCTCUYFA.js → init-COHA3VZI.js} +3 -3
  16. package/build/{init-all-RG542NWG.js → init-all-YTQJLPLR.js} +14 -14
  17. package/build/{mcpServer-D7OXUDU5.js → mcpServer-XHIN5JER.js} +1 -1
  18. package/build/monitor-worker.js +2 -2
  19. package/build/{namespace-L5DGCY7K.js → namespace-XLMRFH5E.js} +1 -1
  20. package/build/release.json +4 -4
  21. package/build/{serve-K3IT7DS4.js → serve-PWMT5IRU.js} +1 -1
  22. package/build/server.js +22 -13
  23. package/build/stdio.js +1 -1
  24. package/build/{tools-D72ZH6P5.js → tools-SIOAOXW6.js} +1 -1
  25. package/build/{uninstall-SAOIPL6K.js → uninstall-TKDP6C4F.js} +7 -7
  26. package/build/{upgrade-4S5XT5JG.js → upgrade-ODPKMIDC.js} +1 -1
  27. package/build/{watch-IOSRSCFE.js → watch-MXJSNGL2.js} +1 -1
  28. package/package.json +1 -1
package/build/cli.js CHANGED
@@ -2,13 +2,13 @@
2
2
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
3
3
  import {
4
4
  executeTool
5
- } from "./chunk-7DYHWY4Y.js";
5
+ } from "./chunk-SFN772RL.js";
6
6
  import {
7
7
  ExitCode
8
8
  } from "./chunk-R6YZTFQL.js";
9
9
  import {
10
10
  NAMESPACE
11
- } from "./chunk-TNQ7GJ6Q.js";
11
+ } from "./chunk-7VSK46QO.js";
12
12
  import "./chunk-P7NLFSZQ.js";
13
13
  import "./chunk-RU6QOFHH.js";
14
14
  import {
@@ -3414,7 +3414,7 @@ process.on("SIGINT", () => process.exit(130));
3414
3414
  process.on("SIGTERM", () => process.exit(143));
3415
3415
  var program2 = new Command();
3416
3416
  program2.name("hive").version(SERVER_VERSION).description(
3417
- "Hive Intelligence \u2014 managed crypto market data, DeFi, wallets, security, DEX, NFTs, and prediction markets for AI agents and developers"
3417
+ "Hive Intelligence: managed crypto market data, DeFi, wallets, security, DEX, NFTs, and prediction markets for AI agents and developers"
3418
3418
  ).exitOverride().configureOutput({
3419
3419
  writeErr: (str) => process.stderr.write(str),
3420
3420
  outputError: (str, write) => {
@@ -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-K3IT7DS4.js");
3443
+ const { startStdio } = await import("./serve-PWMT5IRU.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-K3IT7DS4.js");
3456
+ const { startHttp } = await import("./serve-PWMT5IRU.js");
3457
3457
  await startHttp(port, program2.opts().envFile);
3458
3458
  } else {
3459
- const { startStdio } = await import("./serve-K3IT7DS4.js");
3459
+ const { startStdio } = await import("./serve-PWMT5IRU.js");
3460
3460
  await startStdio(program2.opts().envFile);
3461
3461
  }
3462
3462
  });
@@ -3474,10 +3474,10 @@ for (const domain of NAMESPACE) {
3474
3474
  }
3475
3475
  subCmd.option("--args <json>", "Pass all arguments as JSON");
3476
3476
  subCmd.action(async (opts) => {
3477
- let args = {};
3477
+ let args = { ...sub.fixedArgs ?? {} };
3478
3478
  if (opts.args) {
3479
3479
  try {
3480
- args = JSON.parse(opts.args);
3480
+ args = { ...args, ...JSON.parse(opts.args) };
3481
3481
  } catch {
3482
3482
  process.stderr.write("Error: Invalid JSON in --args\n");
3483
3483
  process.exit(ExitCode.INVALID_ARGS);
@@ -3487,7 +3487,19 @@ for (const domain of NAMESPACE) {
3487
3487
  for (const [paramName, argDef] of Object.entries(sub.args)) {
3488
3488
  const optKey = argDef.flag.replace(/^--/, "").split(/[\s<]/)[0].replace(/-([a-z])/g, (_, c) => c.toUpperCase());
3489
3489
  if (opts[optKey] !== void 0) {
3490
- args[paramName] = opts[optKey];
3490
+ if (argDef.type === "number") {
3491
+ const numeric = Number(opts[optKey]);
3492
+ if (Number.isNaN(numeric)) {
3493
+ process.stderr.write(
3494
+ `Error: ${argDef.flag.split(/[\s<]/)[0]} expects a number, got '${opts[optKey]}'
3495
+ `
3496
+ );
3497
+ process.exit(ExitCode.INVALID_ARGS);
3498
+ }
3499
+ args[paramName] = numeric;
3500
+ } else {
3501
+ args[paramName] = opts[optKey];
3502
+ }
3491
3503
  }
3492
3504
  }
3493
3505
  }
@@ -3505,7 +3517,9 @@ for (const domain of NAMESPACE) {
3505
3517
  const ask = (q) => new Promise((resolve) => rl.question(q, resolve));
3506
3518
  for (const [paramName, argDef] of missingRequired) {
3507
3519
  const answer = await ask(`${argDef.description || paramName}: `);
3508
- if (answer.trim()) args[paramName] = answer.trim();
3520
+ if (answer.trim()) {
3521
+ args[paramName] = argDef.type === "number" && !Number.isNaN(Number(answer)) ? Number(answer) : answer.trim();
3522
+ }
3509
3523
  }
3510
3524
  rl.close();
3511
3525
  }
@@ -3529,15 +3543,15 @@ for (const domain of NAMESPACE) {
3529
3543
  }
3530
3544
  var toolsCmd = program2.command("tools").description("Discover and execute tools");
3531
3545
  toolsCmd.command("list").description("List all registered tools").option("--category <name>", "Filter by category").option("--provider <name>", "Filter by provider prefix").option("--limit <n>", "Max tools to show", "50").option("--offset <n>", "Skip first N tools", "0").action(async (opts) => {
3532
- const { listTools } = await import("./tools-D72ZH6P5.js");
3546
+ const { listTools } = await import("./tools-SIOAOXW6.js");
3533
3547
  await listTools(opts);
3534
3548
  });
3535
3549
  toolsCmd.command("search <query>").description("Search tools by name or description").action(async (query) => {
3536
- const { searchTools } = await import("./tools-D72ZH6P5.js");
3550
+ const { searchTools } = await import("./tools-SIOAOXW6.js");
3537
3551
  await searchTools(query);
3538
3552
  });
3539
3553
  toolsCmd.command("info <name>").description("Show detailed tool schema and description").action(async (name) => {
3540
- const { toolInfo } = await import("./tools-D72ZH6P5.js");
3554
+ const { toolInfo } = await import("./tools-SIOAOXW6.js");
3541
3555
  await toolInfo(name);
3542
3556
  });
3543
3557
  toolsCmd.command("call <name>").description("Execute a tool by name").option("--args <json>", "Tool arguments as JSON (or pipe JSON via stdin)").action(async (name, opts) => {
@@ -3566,7 +3580,7 @@ toolsCmd.command("call <name>").description("Execute a tool by name").option("--
3566
3580
  await executeTool(name, args, timeout);
3567
3581
  });
3568
3582
  toolsCmd.command("refresh").description("Force-refresh the tool catalog cache").action(async () => {
3569
- const { refreshTools } = await import("./tools-D72ZH6P5.js");
3583
+ const { refreshTools } = await import("./tools-SIOAOXW6.js");
3570
3584
  await refreshTools();
3571
3585
  });
3572
3586
  var configCmd = program2.command("config").description("Generate configuration for MCP clients");
@@ -3616,7 +3630,7 @@ program2.command("init").description(
3616
3630
  "Override the Hive API URL (e.g. for staging or self-hosted)"
3617
3631
  ).action(async (opts) => {
3618
3632
  if (opts.minimal && !opts.all && !opts.browser) {
3619
- const { runInit } = await import("./init-UCTCUYFA.js");
3633
+ const { runInit } = await import("./init-COHA3VZI.js");
3620
3634
  await runInit(opts);
3621
3635
  return;
3622
3636
  }
@@ -3625,7 +3639,7 @@ program2.command("init").description(
3625
3639
  await runSetup();
3626
3640
  return;
3627
3641
  }
3628
- const { runInitAll } = await import("./init-all-RG542NWG.js");
3642
+ const { runInitAll } = await import("./init-all-YTQJLPLR.js");
3629
3643
  const exitCode = await runInitAll({
3630
3644
  all: Boolean(opts.all),
3631
3645
  browser: Boolean(opts.browser),
@@ -3643,7 +3657,7 @@ program2.command("uninstall").description(
3643
3657
  "--all",
3644
3658
  "Clean every known client (default; explicit flag for symmetry with `init --all`)"
3645
3659
  ).option("--dry-run", "Preview removals without changing anything").action(async (opts) => {
3646
- const { runUninstall } = await import("./uninstall-SAOIPL6K.js");
3660
+ const { runUninstall } = await import("./uninstall-TKDP6C4F.js");
3647
3661
  const exitCode = await runUninstall({
3648
3662
  all: opts.all !== false,
3649
3663
  dryRun: Boolean(opts.dryRun),
@@ -3652,19 +3666,19 @@ program2.command("uninstall").description(
3652
3666
  if (exitCode !== 0) process.exit(exitCode);
3653
3667
  });
3654
3668
  program2.command("doctor").description("Diagnose environment and server connectivity").option("--probe", "Run live API probes (slower)").action(async (opts) => {
3655
- const { runDoctor } = await import("./doctor-GHUAUFS2.js");
3669
+ const { runDoctor } = await import("./doctor-XG5IQCXK.js");
3656
3670
  await runDoctor(opts);
3657
3671
  });
3658
3672
  program2.command("upgrade").description("Update Hive to the latest published version").action(async () => {
3659
- const { runUpgrade } = await import("./upgrade-4S5XT5JG.js");
3673
+ const { runUpgrade } = await import("./upgrade-ODPKMIDC.js");
3660
3674
  await runUpgrade();
3661
3675
  });
3662
3676
  program2.command("completion <shell>").description("Generate shell completion script (bash, zsh, fish, powershell)").option("--install", "Auto-install to shell rc file").action(async (shell, opts) => {
3663
3677
  if (opts.install) {
3664
- const { installCompletion } = await import("./completion-7KBW243H.js");
3678
+ const { installCompletion } = await import("./completion-L3TDZ7ZK.js");
3665
3679
  await installCompletion(shell);
3666
3680
  } else {
3667
- const { generateCompletion } = await import("./completion-7KBW243H.js");
3681
+ const { generateCompletion } = await import("./completion-L3TDZ7ZK.js");
3668
3682
  await generateCompletion(shell);
3669
3683
  }
3670
3684
  });
@@ -3676,31 +3690,31 @@ program2.command("keys").description("Retired \u2014 manage API keys in the dash
3676
3690
  });
3677
3691
  var authCmd = program2.command("auth").description("Manage authentication profiles");
3678
3692
  authCmd.command("login").description("Log in via browser (or --manual to paste API key)").option("--profile <name>", "Profile name", "default").option("--manual", "Manually paste API key instead of browser login").action(async (opts) => {
3679
- const { runLogin } = await import("./auth-HRFQWQMZ.js");
3693
+ const { runLogin } = await import("./auth-Y4GXW376.js");
3680
3694
  await runLogin(opts);
3681
3695
  });
3682
3696
  authCmd.command("logout").description("Remove stored credentials").action(async () => {
3683
- const { runLogout } = await import("./auth-HRFQWQMZ.js");
3697
+ const { runLogout } = await import("./auth-Y4GXW376.js");
3684
3698
  await runLogout();
3685
3699
  });
3686
3700
  authCmd.command("whoami").description("Show current profile").action(async () => {
3687
- const { runWhoami } = await import("./auth-HRFQWQMZ.js");
3701
+ const { runWhoami } = await import("./auth-Y4GXW376.js");
3688
3702
  await runWhoami();
3689
3703
  });
3690
3704
  authCmd.command("profiles").description("List all profiles").action(async () => {
3691
- const { runProfiles } = await import("./auth-HRFQWQMZ.js");
3705
+ const { runProfiles } = await import("./auth-Y4GXW376.js");
3692
3706
  await runProfiles();
3693
3707
  });
3694
3708
  authCmd.command("switch <name>").description("Switch active profile").action(async (name) => {
3695
- const { runSwitch } = await import("./auth-HRFQWQMZ.js");
3709
+ const { runSwitch } = await import("./auth-Y4GXW376.js");
3696
3710
  await runSwitch(name);
3697
3711
  });
3698
3712
  program2.command("usage").description("Show your API usage and plan limits").action(async () => {
3699
- const { runUsage } = await import("./auth-HRFQWQMZ.js");
3713
+ const { runUsage } = await import("./auth-Y4GXW376.js");
3700
3714
  await runUsage();
3701
3715
  });
3702
3716
  program2.command("status").description("Quick health and version check").action(async () => {
3703
- const { runStatus } = await import("./doctor-GHUAUFS2.js");
3717
+ const { runStatus } = await import("./doctor-XG5IQCXK.js");
3704
3718
  await runStatus();
3705
3719
  });
3706
3720
  program2.command("open [target]").description("Open Hive dashboard, docs, status, or GitHub in browser").action(async (target) => {
@@ -3731,7 +3745,7 @@ program2.command("watch <domain> <command>").description("Poll a tool on interva
3731
3745
  }
3732
3746
  const interval = parseInt(opts.interval, 10);
3733
3747
  const timeout = parseInt(program2.opts().timeout, 10);
3734
- const { runWatch } = await import("./watch-IOSRSCFE.js");
3748
+ const { runWatch } = await import("./watch-MXJSNGL2.js");
3735
3749
  await runWatch(cmdDef.tool, args, interval, timeout);
3736
3750
  });
3737
3751
  var aliasCmd = program2.command("alias").description("Manage command aliases");
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  NAMESPACE
4
- } from "./chunk-TNQ7GJ6Q.js";
4
+ } from "./chunk-7VSK46QO.js";
5
5
  import "./chunk-ILVPOLA7.js";
6
6
 
7
7
  // src/cli/completion.ts
@@ -48,7 +48,7 @@ async function runDoctor(opts) {
48
48
  checks.push({
49
49
  check: "Server health",
50
50
  status: "PASS",
51
- detail: `${resp.status} \u2014 ${serverStatus}`
51
+ detail: `${resp.status}: ${serverStatus}`
52
52
  });
53
53
  } else {
54
54
  checks.push({
@@ -109,7 +109,7 @@ async function runDoctor(opts) {
109
109
  checks.push({
110
110
  check: "Updates",
111
111
  status: "WARN",
112
- detail: `v${SERVER_VERSION} -> v${latest} available \u2014 run: hive upgrade`
112
+ detail: `v${SERVER_VERSION} -> v${latest} available. Run: hive upgrade`
113
113
  });
114
114
  } else {
115
115
  checks.push({
@@ -204,9 +204,9 @@ ${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-D7OXUDU5.js");
207
+ const { SERVER_VERSION } = await import("./mcpServer-XHIN5JER.js");
208
208
  const { resolveApiKey, resolveApiUrl } = await import("./config-dir-5IH7MOOT.js");
209
- const { getActiveProfile, maskKey } = await import("./auth-HRFQWQMZ.js");
209
+ const { getActiveProfile, maskKey } = await import("./auth-Y4GXW376.js");
210
210
  const apiUrl = resolveApiUrl();
211
211
  const apiKey = resolveApiKey();
212
212
  const profile = getActiveProfile();
@@ -112,7 +112,7 @@ Validating API key against ${baseUrl}...`);
112
112
  console.log("API key validated successfully.\n");
113
113
  } else if (resp.status === 401 || resp.status === 403) {
114
114
  console.log(
115
- `Warning: Server returned ${resp.status} \u2014 key may be invalid.
115
+ `Warning: Server returned ${resp.status}; the key may be invalid.
116
116
  `
117
117
  );
118
118
  } else {
@@ -123,14 +123,14 @@ Validating API key against ${baseUrl}...`);
123
123
  }
124
124
  } catch {
125
125
  console.log(
126
- `Warning: Could not reach ${baseUrl} \u2014 check the URL and try again.
126
+ `Warning: Could not reach ${baseUrl}; check the URL and try again.
127
127
  `
128
128
  );
129
129
  }
130
130
  }
131
131
  const lines = Object.entries(existing).map(([k, v]) => `${k}=${v}`).join("\n");
132
132
  if (opts.dryRun) {
133
- console.log("Dry run \u2014 would write to .env:\n");
133
+ console.log("Dry run: would write to .env:\n");
134
134
  console.log(redactEnvForDisplay(lines));
135
135
  console.log("");
136
136
  return;
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module'; const require = createRequire(impor
2
2
  import {
3
3
  detectClients,
4
4
  installSkillsForClients
5
- } from "./chunk-AEU43ACS.js";
5
+ } from "./chunk-TVBPCELA.js";
6
6
  import {
7
7
  getClaudeDesktopInstructions,
8
8
  getCodexInstructions,
@@ -19,13 +19,13 @@ import {
19
19
  } from "./chunk-QDZ7MAVN.js";
20
20
  import {
21
21
  browserLogin
22
- } from "./chunk-AQQAPAER.js";
22
+ } from "./chunk-BDO27NIP.js";
23
23
  import {
24
24
  saveProfile
25
- } from "./chunk-TVQJY47C.js";
25
+ } from "./chunk-WF34ZD5I.js";
26
26
  import {
27
27
  detectInstallMode
28
- } from "./chunk-GHCYCBA3.js";
28
+ } from "./chunk-GB4XMTDE.js";
29
29
  import "./chunk-M6REON2I.js";
30
30
  import "./chunk-L326MQZP.js";
31
31
  import "./chunk-ZXKFJQDE.js";
@@ -205,7 +205,7 @@ async function verifyConnection(apiUrlOverride) {
205
205
  if (res.status === 401) {
206
206
  return {
207
207
  ok: true,
208
- detail: "Hosted MCP reachable \u2014 server answered with an auth challenge; finish sign-in inside each client."
208
+ detail: "Hosted MCP reachable: server answered with an auth challenge; finish sign-in inside each client."
209
209
  };
210
210
  }
211
211
  if (!res.ok) {
@@ -229,12 +229,12 @@ async function verifyConnection(apiUrlOverride) {
229
229
  const code = body.error.data?.code || "classified error";
230
230
  return {
231
231
  ok: true,
232
- detail: `Hosted MCP reachable \u2014 server answered with a classified response (${code})`
232
+ detail: `Hosted MCP reachable: server answered with a classified response (${code})`
233
233
  };
234
234
  }
235
235
  return {
236
236
  ok: true,
237
- detail: "Hosted MCP reachable \u2014 anonymous hero call answered"
237
+ detail: "Hosted MCP reachable: anonymous hero call answered"
238
238
  };
239
239
  } catch {
240
240
  return {
@@ -255,8 +255,8 @@ async function runInitAll(opts = {}) {
255
255
  dryRun: Boolean(opts.dryRun)
256
256
  };
257
257
  if (!opts.json) {
258
- w(bold("\nHive Intelligence \u2014 Init"));
259
- if (summary.dryRun) info("(dry-run \u2014 nothing will be written)");
258
+ w(bold("\nHive Intelligence: Init"));
259
+ if (summary.dryRun) info("(dry-run: nothing will be written)");
260
260
  }
261
261
  if (opts.browser) {
262
262
  step("Authenticating via browser");
@@ -304,7 +304,7 @@ async function runInitAll(opts = {}) {
304
304
  } else if (!opts.all) {
305
305
  continue;
306
306
  } else {
307
- info(`${c.name} \u2014 not detected (${c.hint || "skipped"})`);
307
+ info(`${c.name}: not detected (${c.hint || "skipped"})`);
308
308
  }
309
309
  }
310
310
  const browserOnly = Boolean(opts.browser && !opts.all);
@@ -327,10 +327,10 @@ async function runInitAll(opts = {}) {
327
327
  ok(`${result.name} ${dim("\u2192 " + result.path)}`);
328
328
  if (result.restartHint) info(result.restartHint);
329
329
  } else if (result.manual && result.steps) {
330
- warn(`${result.name} \u2014 manual setup required:`);
330
+ warn(`${result.name}: manual setup required:`);
331
331
  for (const stepText of result.steps) info(` \u2022 ${stepText}`);
332
332
  } else {
333
- bad(`${result.name} \u2014 ${result.error || "unknown error"}`);
333
+ bad(`${result.name}: ${result.error || "unknown error"}`);
334
334
  }
335
335
  }
336
336
  for (const manualId of ["chatgpt-desktop", "grok"]) {
@@ -347,7 +347,7 @@ async function runInitAll(opts = {}) {
347
347
  steps
348
348
  });
349
349
  info(
350
- `${client.name} \u2014 manual setup (${manualId === "grok" ? "grok.com/connectors" : "Settings \u2192 Apps"})`
350
+ `${client.name}: manual setup (${manualId === "grok" ? "grok.com/connectors" : "Settings \u2192 Apps"})`
351
351
  );
352
352
  }
353
353
  if (!opts.skipSkills && !browserOnly) {
@@ -377,7 +377,7 @@ async function runInitAll(opts = {}) {
377
377
  ok(verified.detail);
378
378
  } else {
379
379
  warn(
380
- `Could not verify (${verified.detail}) \u2014 run \`hive doctor\` for details (this can be a transient network issue)`
380
+ `Could not verify (${verified.detail}). Run \`hive doctor\` for details; this can be a transient network issue`
381
381
  );
382
382
  }
383
383
  }
@@ -9,7 +9,7 @@ import {
9
9
  getToolsForScope,
10
10
  memoizedJsonSchemaToZodInputSchema,
11
11
  memoizedJsonSchemaToZodOutputSchema
12
- } from "./chunk-UFTNBCSA.js";
12
+ } from "./chunk-AGM2CIRL.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-3OZFBWFK.js";
5
+ } from "./chunk-XQPEFCSY.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-UFTNBCSA.js";
18
+ } from "./chunk-AGM2CIRL.js";
19
19
  import "./chunk-L326MQZP.js";
20
20
  import "./chunk-EPF36Q3Z.js";
21
21
  import "./chunk-ZXKFJQDE.js";
@@ -3,7 +3,7 @@ import {
3
3
  NAMESPACE,
4
4
  getAllDomainCommands,
5
5
  resolveCommand
6
- } from "./chunk-TNQ7GJ6Q.js";
6
+ } from "./chunk-7VSK46QO.js";
7
7
  import "./chunk-ILVPOLA7.js";
8
8
  export {
9
9
  NAMESPACE,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "package": "hive-intelligence",
3
- "version": "1.4.0",
4
- "buildSha": "a414ce5540417c1851e0d99029dac69c8880801e",
5
- "imageDigest": "sha256:e19e3ce819accf7817c2b8bc2c79e040ae4f4c5f755991b8c4b0e5d474bc5aaf",
3
+ "version": "1.5.1",
4
+ "buildSha": "ab8276f834ef8b08bda9d320387e4390e9ab55b6",
5
+ "imageDigest": "sha256:9ef23428cc9d7da797e21152f4823f021ee8f0d3f3db94cf28410c8e1a72a124",
6
6
  "deployedUrl": "https://mcp.hiveintelligence.xyz",
7
- "manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.4.0/releases/v1.4.0.json"
7
+ "manifest": "https://raw.githubusercontent.com/hive-intel/hive-sdk/v1.5.1/releases/v1.5.1.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-D7OXUDU5.js");
10
+ const { createHiveMcpServer, SERVER_NAME, SERVER_VERSION } = await import("./mcpServer-XHIN5JER.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-3OZFBWFK.js";
9
+ } from "./chunk-XQPEFCSY.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-UFTNBCSA.js";
98
+ } from "./chunk-AGM2CIRL.js";
99
99
  import {
100
100
  HIVE_AGENT_SKILLS
101
101
  } from "./chunk-L326MQZP.js";
@@ -735,6 +735,15 @@ var require_ipaddr = __commonJS({
735
735
 
736
736
  // src/server.ts
737
737
  import dotenv from "dotenv";
738
+
739
+ // src/config/trustProxy.ts
740
+ var DEFAULT_TRUSTED_PROXY_ADDRESSES = "34.102.187.55";
741
+ function resolveTrustedProxies(raw = getEnvVar("TRUSTED_PROXY_ADDRESSES")) {
742
+ const addresses = (raw ?? DEFAULT_TRUSTED_PROXY_ADDRESSES).split(",").map((entry) => entry.trim()).filter(Boolean);
743
+ return [...addresses, "loopback", "uniquelocal", "169.254.0.0/16"];
744
+ }
745
+
746
+ // src/server.ts
738
747
  import { randomUUID as randomUUID4, timingSafeEqual as timingSafeEqual6 } from "crypto";
739
748
  import { resolve } from "path";
740
749
  import { fileURLToPath } from "url";
@@ -3185,7 +3194,7 @@ function replayResponse(res, cached) {
3185
3194
  error: {
3186
3195
  type: "invalid_request_error",
3187
3196
  code: "SECRET_ALREADY_ISSUED",
3188
- message: "This request was already completed and its one-time secret was returned only in the original response. It cannot be retrieved again \u2014 create a new key if you no longer have it."
3197
+ message: "This request was already completed and its one-time secret was returned only in the original response. It cannot be retrieved again; create a new key if you no longer have it."
3189
3198
  }
3190
3199
  });
3191
3200
  return;
@@ -3341,7 +3350,7 @@ router3.post(
3341
3350
  plan: planId,
3342
3351
  b2b_subjects_enabled: b2b_subjects_enabled ?? false,
3343
3352
  ...result.subjectSigningSecret ? { subject_signing_secret: result.subjectSigningSecret } : {},
3344
- warning: "Save this key \u2014 it will not be shown again."
3353
+ warning: "Save this key; it will not be shown again."
3345
3354
  }
3346
3355
  });
3347
3356
  } catch (err) {
@@ -4122,13 +4131,13 @@ async function releaseCheckoutLock(userId) {
4122
4131
  var CHECKOUT_RACE_LOST = apiError(
4123
4132
  "invalid_request_error",
4124
4133
  "CHECKOUT_IN_PROGRESS",
4125
- "Another checkout request for this account is still being created. Next action: wait a couple of seconds and retry \u2014 two simultaneous requests can only ever produce one charge."
4134
+ "Another checkout request for this account is still being created. Next action: wait a couple of seconds and retry; two simultaneous requests can only ever produce one charge."
4126
4135
  );
4127
4136
  function checkoutAlreadyOpen(chargeId) {
4128
4137
  return apiError(
4129
4138
  "invalid_request_error",
4130
4139
  "CHECKOUT_IN_PROGRESS",
4131
- `A payment page for this account is already open${chargeId ? ` (charge ${chargeId})` : ""}. Next action: finish that payment, or release the hold with POST /api/v1/billing/checkout/abandon if that page was abandoned \u2014 otherwise it clears on its own ${OPEN_CHARGE_WINDOW_MINUTES} minutes after the page was opened.`
4140
+ `A payment page for this account is already open${chargeId ? ` (charge ${chargeId})` : ""}. Next action: finish that payment, or release the hold with POST /api/v1/billing/checkout/abandon if that page was abandoned; otherwise it clears on its own ${OPEN_CHARGE_WINDOW_MINUTES} minutes after the page was opened.`
4132
4141
  );
4133
4142
  }
4134
4143
  function withCheckoutLock(req, res, next) {
@@ -5451,9 +5460,9 @@ import { LATEST_PROTOCOL_VERSION } from "@modelcontextprotocol/sdk/types.js";
5451
5460
  // src/services/anon-quota.ts
5452
5461
  import { createHash as createHash4 } from "crypto";
5453
5462
  import { z as z3 } from "zod";
5454
- var ANON_QUOTA_EXHAUSTED_MESSAGE = "Anonymous free quota reached (resets 00:00 UTC). For continued access set HIVE_API_KEY \u2014 create one free at https://hiveintelligence.xyz/dashboard/keys \u2014 or sign in via OAuth.";
5455
- var ANON_GLOBAL_CAP_MESSAGE = "Hive's shared anonymous allowance for today is spent (resets 00:00 UTC). This is a service-wide cap, not your personal one, and a key is not rate-limited by it: set HIVE_API_KEY \u2014 create one free at https://hiveintelligence.xyz/dashboard/keys \u2014 or sign in via OAuth.";
5456
- var ANON_QUOTA_UNAVAILABLE_MESSAGE = "Anonymous access is temporarily unavailable because the quota backend is unreachable. Retry in a moment, or set HIVE_API_KEY \u2014 create one free at https://hiveintelligence.xyz/dashboard/keys \u2014 for keyed access now.";
5463
+ var ANON_QUOTA_EXHAUSTED_MESSAGE = "Anonymous free quota reached (resets 00:00 UTC). For continued access set HIVE_API_KEY (create one free at https://hiveintelligence.xyz/dashboard/keys) or sign in via OAuth.";
5464
+ var ANON_GLOBAL_CAP_MESSAGE = "Hive's shared anonymous allowance for today is spent (resets 00:00 UTC). This is a service-wide cap, not your personal one, and a key is not rate-limited by it: set HIVE_API_KEY (create one free at https://hiveintelligence.xyz/dashboard/keys) or sign in via OAuth.";
5465
+ var ANON_QUOTA_UNAVAILABLE_MESSAGE = "Anonymous access is temporarily unavailable because the quota backend is unreachable. Retry in a moment, or set HIVE_API_KEY (create one free at https://hiveintelligence.xyz/dashboard/keys) for keyed access now.";
5457
5466
  var ANON_IP_HASH_DOMAIN = "hive-anon-lane-v1";
5458
5467
  var capSchema = z3.coerce.number().int().min(1).max(1e4);
5459
5468
  var globalCapSchema = z3.coerce.number().int().min(1).max(1e6);
@@ -5682,7 +5691,7 @@ function buildServerCard() {
5682
5691
  freeTier: {
5683
5692
  monthlyCredits: 1e4,
5684
5693
  requestsPerMinute: 30,
5685
- description: "Demo tier \u2014 no credit card required"
5694
+ description: "Demo tier, no credit card required"
5686
5695
  }
5687
5696
  },
5688
5697
  authCompatibility,
@@ -6596,7 +6605,7 @@ var port = getPort();
6596
6605
  function createHttpApp() {
6597
6606
  return app;
6598
6607
  }
6599
- app.set("trust proxy", 1);
6608
+ app.set("trust proxy", resolveTrustedProxies());
6600
6609
  app.use(requestIdMiddleware);
6601
6610
  app.use((_req, res, next) => {
6602
6611
  if (isShuttingDown) {
@@ -6925,7 +6934,7 @@ async function debitMcpCredits(args) {
6925
6934
  return {
6926
6935
  ok: false,
6927
6936
  noWallet: true,
6928
- error: "This account has no credit wallet provisioned. This is an account setup issue, not a quota limit \u2014 visit https://hiveintelligence.xyz/dashboard to initialize billing or contact support."
6937
+ error: "This account has no credit wallet provisioned. This is an account setup issue, not a quota limit. Visit https://hiveintelligence.xyz/dashboard to initialize billing or contact support."
6929
6938
  };
6930
6939
  }
6931
6940
  if (debit.code === "insufficient") {
@@ -7724,7 +7733,7 @@ function createStatelessMcpHandler(scope) {
7724
7733
  return {
7725
7734
  type: "authentication_error",
7726
7735
  code: "ANON_AUTH_REQUIRED",
7727
- message: "This tool requires authentication. Set HIVE_API_KEY \u2014 create one free at https://hiveintelligence.xyz/dashboard/keys \u2014 or sign in via OAuth.",
7736
+ message: "This tool requires authentication. Set HIVE_API_KEY (create one free at https://hiveintelligence.xyz/dashboard/keys) or sign in via OAuth.",
7728
7737
  runtimeStatus: "failing"
7729
7738
  };
7730
7739
  }
package/build/stdio.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  createHiveMcpServer,
8
8
  secureLogger
9
- } from "./chunk-UFTNBCSA.js";
9
+ } from "./chunk-AGM2CIRL.js";
10
10
  import "./chunk-L326MQZP.js";
11
11
  import "./chunk-EPF36Q3Z.js";
12
12
  import {
@@ -40,7 +40,7 @@ async function listTools(opts) {
40
40
  tools = tools.filter((t) => t.name.toLowerCase().startsWith(prefix + "_"));
41
41
  }
42
42
  if (opts.category) {
43
- const { NAMESPACE } = await import("./namespace-L5DGCY7K.js");
43
+ const { NAMESPACE } = await import("./namespace-XLMRFH5E.js");
44
44
  const cat = opts.category.toLowerCase();
45
45
  const ns = NAMESPACE.find(
46
46
  (d) => d.name === cat || d.description.toLowerCase().includes(cat)
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module'; const require = createRequire(impor
2
2
  import {
3
3
  detectClients,
4
4
  removeSkillsForClients
5
- } from "./chunk-AEU43ACS.js";
5
+ } from "./chunk-TVBPCELA.js";
6
6
  import {
7
7
  removeClaudeCodeUserConfig,
8
8
  removeClaudeDesktopConfig,
@@ -51,8 +51,8 @@ async function runUninstall(opts = {}) {
51
51
  dryRun: Boolean(opts.dryRun)
52
52
  };
53
53
  if (!opts.json) {
54
- w(bold("\nHive Intelligence \u2014 Uninstall"));
55
- if (summary.dryRun) info("(dry-run \u2014 nothing will be changed)");
54
+ w(bold("\nHive Intelligence: Uninstall"));
55
+ if (summary.dryRun) info("(dry-run: nothing will be changed)");
56
56
  }
57
57
  const clients = detectClients();
58
58
  if (!opts.json) w(bold("\nRemoving from client configs"));
@@ -60,7 +60,7 @@ async function runUninstall(opts = {}) {
60
60
  for (const c of clients) {
61
61
  if (c.id === "chatgpt-desktop" || c.id === "grok") {
62
62
  info(
63
- c.id === "grok" ? "Grok \u2014 remove Hive once at grok.com/connectors" : "OpenAI / ChatGPT apps \u2014 remove the Hive app connector manually"
63
+ c.id === "grok" ? "Grok: remove Hive once at grok.com/connectors" : "OpenAI / ChatGPT apps: remove the Hive app connector manually"
64
64
  );
65
65
  continue;
66
66
  }
@@ -81,14 +81,14 @@ async function runUninstall(opts = {}) {
81
81
  ...result.instructions && { instructions: result.instructions }
82
82
  });
83
83
  if (result.removed) ok(`${c.name} ${dim("(" + result.path + ")")}`);
84
- else if (!result.manual) info(`${c.name} \u2014 no Hive entry to remove`);
84
+ else if (!result.manual) info(`${c.name}: no Hive entry to remove`);
85
85
  if (result.manual && result.instructions) {
86
- warn(`${c.name} \u2014 finish in the app: ${result.instructions}`);
86
+ warn(`${c.name} (finish in the app): ${result.instructions}`);
87
87
  }
88
88
  clientIds.push(c.id);
89
89
  } catch (err) {
90
90
  warn(
91
- `${c.name} \u2014 failed: ${err instanceof Error ? err.message : err}`
91
+ `${c.name} failed: ${err instanceof Error ? err.message : err}`
92
92
  );
93
93
  }
94
94
  }
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module'; const require = createRequire(impor
2
2
  import {
3
3
  detectInstallMode,
4
4
  runUpgrade
5
- } from "./chunk-GHCYCBA3.js";
5
+ } from "./chunk-GB4XMTDE.js";
6
6
  import "./chunk-M6REON2I.js";
7
7
  import "./chunk-ZXKFJQDE.js";
8
8
  import "./chunk-725R3KLJ.js";
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  executeTool
4
- } from "./chunk-7DYHWY4Y.js";
4
+ } from "./chunk-SFN772RL.js";
5
5
  import "./chunk-P7NLFSZQ.js";
6
6
  import "./chunk-RU6QOFHH.js";
7
7
  import "./chunk-EPF36Q3Z.js";