hive-intelligence 1.1.2 → 1.1.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.
Files changed (163) hide show
  1. package/README.md +232 -379
  2. package/agent-skills/.claude-plugin/plugin.json +105 -0
  3. package/{LICENSE → agent-skills/LICENSE} +1 -1
  4. package/agent-skills/README.md +146 -0
  5. package/agent-skills/SKILL.md +68 -0
  6. package/agent-skills/evals/README.md +20 -0
  7. package/agent-skills/evals/trigger-queries.json +194 -0
  8. package/agent-skills/package.json +49 -0
  9. package/agent-skills/packs/hive-build/SKILL.md +327 -0
  10. package/agent-skills/packs/hive-build/evals/evals.json +28 -0
  11. package/agent-skills/packs/hive-build-onboarding/SKILL.md +137 -0
  12. package/agent-skills/packs/hive-build-onboarding/evals/evals.json +27 -0
  13. package/agent-skills/packs/hive-cli/SKILL.md +141 -0
  14. package/agent-skills/packs/hive-cli/evals/evals.json +27 -0
  15. package/agent-skills/packs/hive-defi-research/SKILL.md +42 -0
  16. package/agent-skills/packs/hive-defi-research/evals/evals.json +27 -0
  17. package/agent-skills/packs/hive-defi-research/references/workflow.md +41 -0
  18. package/agent-skills/packs/hive-dex-pool-analysis/SKILL.md +41 -0
  19. package/agent-skills/packs/hive-dex-pool-analysis/evals/evals.json +27 -0
  20. package/agent-skills/packs/hive-dex-pool-analysis/references/workflow.md +42 -0
  21. package/agent-skills/packs/hive-market-research/SKILL.md +45 -0
  22. package/agent-skills/packs/hive-market-research/evals/evals.json +27 -0
  23. package/agent-skills/packs/hive-market-research/references/workflow.md +47 -0
  24. package/agent-skills/packs/hive-mcp/SKILL.md +224 -0
  25. package/agent-skills/packs/hive-mcp/evals/evals.json +38 -0
  26. package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +83 -0
  27. package/agent-skills/packs/hive-network-infrastructure/SKILL.md +44 -0
  28. package/agent-skills/packs/hive-network-infrastructure/evals/evals.json +27 -0
  29. package/agent-skills/packs/hive-network-infrastructure/references/workflow.md +41 -0
  30. package/agent-skills/packs/hive-nft-research/SKILL.md +41 -0
  31. package/agent-skills/packs/hive-nft-research/evals/evals.json +27 -0
  32. package/agent-skills/packs/hive-nft-research/references/workflow.md +42 -0
  33. package/agent-skills/packs/hive-prediction-markets/SKILL.md +44 -0
  34. package/agent-skills/packs/hive-prediction-markets/evals/evals.json +27 -0
  35. package/agent-skills/packs/hive-prediction-markets/references/workflow.md +42 -0
  36. package/agent-skills/packs/hive-query/SKILL.md +98 -0
  37. package/agent-skills/packs/hive-query/evals/evals.json +38 -0
  38. package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +54 -0
  39. package/agent-skills/packs/hive-security-risk/SKILL.md +42 -0
  40. package/agent-skills/packs/hive-security-risk/evals/evals.json +27 -0
  41. package/agent-skills/packs/hive-security-risk/references/workflow.md +46 -0
  42. package/agent-skills/packs/hive-solana-analysis/SKILL.md +42 -0
  43. package/agent-skills/packs/hive-solana-analysis/evals/evals.json +27 -0
  44. package/agent-skills/packs/hive-solana-analysis/references/workflow.md +42 -0
  45. package/agent-skills/packs/hive-token-diligence/SKILL.md +44 -0
  46. package/agent-skills/packs/hive-token-diligence/evals/evals.json +27 -0
  47. package/agent-skills/packs/hive-token-diligence/references/workflow.md +45 -0
  48. package/agent-skills/packs/hive-tool-discovery/SKILL.md +49 -0
  49. package/agent-skills/packs/hive-tool-discovery/evals/evals.json +38 -0
  50. package/agent-skills/packs/hive-tool-discovery/references/discovery-surfaces.md +62 -0
  51. package/agent-skills/packs/hive-wallet-investigation/SKILL.md +42 -0
  52. package/agent-skills/packs/hive-wallet-investigation/evals/evals.json +27 -0
  53. package/agent-skills/packs/hive-wallet-investigation/references/workflow.md +45 -0
  54. package/agent-skills/references/agents-routing.md +49 -0
  55. package/agent-skills/scripts/validate-agent-skills-package.mjs +178 -0
  56. package/agent-skills/skills.sh.json +40 -0
  57. package/bin/hive-mcp.js +33 -0
  58. package/build/{alias-INGXWFCG.js → alias-CZ3DEYHF.js} +3 -3
  59. package/build/api-client-I23XLSHU.js +28 -0
  60. package/build/auth-KKINNBXT.js +40 -0
  61. package/build/browser-auth-EEFGRHWY.js +9 -0
  62. package/build/{cache-US4LSZPI.js → cache-EGNMENNA.js} +3 -3
  63. package/build/chunk-2MYMHMBF.js +340 -0
  64. package/build/chunk-2MYMHMBF.js.map +1 -0
  65. package/build/chunk-2X3U4DFK.js +77369 -0
  66. package/build/chunk-2X3U4DFK.js.map +1 -0
  67. package/build/chunk-B6G222LS.js +265 -0
  68. package/build/chunk-B6G222LS.js.map +1 -0
  69. package/build/{chunk-WKVZVQTG.js → chunk-DYJBTKNR.js} +4 -4
  70. package/build/chunk-DYJBTKNR.js.map +1 -0
  71. package/build/chunk-IDZD2NVG.js +247 -0
  72. package/build/chunk-IDZD2NVG.js.map +1 -0
  73. package/build/chunk-IZTN7WFH.js +250 -0
  74. package/build/chunk-IZTN7WFH.js.map +1 -0
  75. package/build/{chunk-QMRVH5ZP.js → chunk-KBVPIZS4.js} +10 -2
  76. package/build/chunk-KGYBTXIN.js +86 -0
  77. package/build/chunk-KGYBTXIN.js.map +1 -0
  78. package/build/{chunk-CGXVV6WR.js → chunk-MPIUUE3T.js} +87 -105
  79. package/build/chunk-MPIUUE3T.js.map +1 -0
  80. package/build/chunk-PGBVNMNZ.js +127 -0
  81. package/build/chunk-PGBVNMNZ.js.map +1 -0
  82. package/build/chunk-QNCI4DEB.js +88 -0
  83. package/build/chunk-QNCI4DEB.js.map +1 -0
  84. package/build/chunk-RKICZ6DZ.js +497 -0
  85. package/build/chunk-RKICZ6DZ.js.map +1 -0
  86. package/build/chunk-UKHZIVDT.js +44 -0
  87. package/build/chunk-UKHZIVDT.js.map +1 -0
  88. package/build/{chunk-XQJ6PB2L.js → chunk-V77LO4RO.js} +1 -1
  89. package/build/chunk-V77LO4RO.js.map +1 -0
  90. package/build/{chunk-CP3FXEQA.js → chunk-XYBEFFZ3.js} +5 -6
  91. package/build/chunk-XYBEFFZ3.js.map +1 -0
  92. package/build/cli.js +133 -122
  93. package/build/cli.js.map +1 -1
  94. package/build/{completion-J6HFY6PS.js → completion-BELZL7ND.js} +55 -50
  95. package/build/completion-BELZL7ND.js.map +1 -0
  96. package/build/config-TDX4VUGW.js +58 -0
  97. package/build/{config-dir-IEOID7Q6.js → config-dir-V43W2WIA.js} +3 -3
  98. package/build/{doctor-7WZMCQC7.js → doctor-5K5UWHNX.js} +13 -13
  99. package/build/doctor-5K5UWHNX.js.map +1 -0
  100. package/build/{errors-U6UZWVSD.js → errors-E6MVUBNA.js} +3 -3
  101. package/build/format-TSFSI2K7.js +43 -0
  102. package/build/format-TSFSI2K7.js.map +1 -0
  103. package/build/{init-CAVIFVSH.js → init-YQ5NBICF.js} +2 -2
  104. package/build/init-all-6OWEQALB.js +274 -0
  105. package/build/init-all-6OWEQALB.js.map +1 -0
  106. package/build/mcpServer-AEX3RQ4U.js +20 -0
  107. package/build/mcpServer-AEX3RQ4U.js.map +1 -0
  108. package/build/{namespace-7JWWBWBL.js → namespace-PVHBFDW2.js} +3 -3
  109. package/build/namespace-PVHBFDW2.js.map +1 -0
  110. package/build/{open-FUXYIHFO.js → open-YUIJP37F.js} +6 -6
  111. package/build/open-YUIJP37F.js.map +1 -0
  112. package/build/{output-7PGQWJY2.js → output-IYJBFCYK.js} +3 -3
  113. package/build/output-IYJBFCYK.js.map +1 -0
  114. package/build/serve-KWNJK6EY.js +44 -0
  115. package/build/serve-KWNJK6EY.js.map +1 -0
  116. package/build/server.js +4749 -14124
  117. package/build/server.js.map +1 -1
  118. package/build/setup-YTUKMPNP.js +136 -0
  119. package/build/setup-YTUKMPNP.js.map +1 -0
  120. package/build/stdio.js +31 -0
  121. package/build/stdio.js.map +1 -0
  122. package/build/{telemetry-KNWMQURH.js → telemetry-5IPRKZBL.js} +4 -4
  123. package/build/telemetry-5IPRKZBL.js.map +1 -0
  124. package/build/{tools-VRRMBCZQ.js → tools-PJHWFCAG.js} +15 -15
  125. package/build/uninstall-HWXEIP6K.js +115 -0
  126. package/build/uninstall-HWXEIP6K.js.map +1 -0
  127. package/build/{watch-A75SVIQ6.js → watch-KZ5EDZK3.js} +7 -7
  128. package/package.json +118 -52
  129. package/bin/hive.js +0 -25
  130. package/build/auth-77MKFFBQ.js +0 -233
  131. package/build/auth-77MKFFBQ.js.map +0 -1
  132. package/build/chunk-CGXVV6WR.js.map +0 -1
  133. package/build/chunk-CP3FXEQA.js.map +0 -1
  134. package/build/chunk-DTUDM6HX.js +0 -3108
  135. package/build/chunk-DTUDM6HX.js.map +0 -1
  136. package/build/chunk-LBTLYTZS.js +0 -115
  137. package/build/chunk-LBTLYTZS.js.map +0 -1
  138. package/build/chunk-OK3LSM73.js +0 -22
  139. package/build/chunk-OK3LSM73.js.map +0 -1
  140. package/build/chunk-RRI526CJ.js +0 -212
  141. package/build/chunk-RRI526CJ.js.map +0 -1
  142. package/build/chunk-WKVZVQTG.js.map +0 -1
  143. package/build/chunk-XQJ6PB2L.js.map +0 -1
  144. package/build/completion-J6HFY6PS.js.map +0 -1
  145. package/build/config-ANFERP7A.js +0 -99
  146. package/build/config-ANFERP7A.js.map +0 -1
  147. package/build/doctor-7WZMCQC7.js.map +0 -1
  148. package/build/format-CVLLK6GD.js +0 -75
  149. package/build/format-CVLLK6GD.js.map +0 -1
  150. package/build/open-FUXYIHFO.js.map +0 -1
  151. package/build/version-3TZ3U4IR.js +0 -9
  152. /package/build/{alias-INGXWFCG.js.map → alias-CZ3DEYHF.js.map} +0 -0
  153. /package/build/{chunk-QMRVH5ZP.js.map → api-client-I23XLSHU.js.map} +0 -0
  154. /package/build/{config-dir-IEOID7Q6.js.map → auth-KKINNBXT.js.map} +0 -0
  155. /package/build/{errors-U6UZWVSD.js.map → browser-auth-EEFGRHWY.js.map} +0 -0
  156. /package/build/{cache-US4LSZPI.js.map → cache-EGNMENNA.js.map} +0 -0
  157. /package/build/{namespace-7JWWBWBL.js.map → chunk-KBVPIZS4.js.map} +0 -0
  158. /package/build/{output-7PGQWJY2.js.map → config-TDX4VUGW.js.map} +0 -0
  159. /package/build/{telemetry-KNWMQURH.js.map → config-dir-V43W2WIA.js.map} +0 -0
  160. /package/build/{version-3TZ3U4IR.js.map → errors-E6MVUBNA.js.map} +0 -0
  161. /package/build/{init-CAVIFVSH.js.map → init-YQ5NBICF.js.map} +0 -0
  162. /package/build/{tools-VRRMBCZQ.js.map → tools-PJHWFCAG.js.map} +0 -0
  163. /package/build/{watch-A75SVIQ6.js.map → watch-KZ5EDZK3.js.map} +0 -0
@@ -87,18 +87,6 @@ var NAMESPACE = [
87
87
  description: "Quote currency (default: usd)"
88
88
  }
89
89
  }
90
- },
91
- {
92
- name: "gas",
93
- description: "Gas prices by chain",
94
- tool: "goldrush_get_gas_prices",
95
- args: {
96
- chainName: {
97
- flag: "--chain <name>",
98
- description: "Chain name",
99
- required: true
100
- }
101
- }
102
90
  }
103
91
  ]
104
92
  },
@@ -155,7 +143,7 @@ var NAMESPACE = [
155
143
  {
156
144
  name: "balance",
157
145
  description: "Wallet total balance",
158
- tool: "get_wallet_balances",
146
+ tool: "get_wallet_balance",
159
147
  args: {
160
148
  id: {
161
149
  flag: "--address <addr>",
@@ -167,7 +155,7 @@ var NAMESPACE = [
167
155
  {
168
156
  name: "tokens",
169
157
  description: "Token holdings",
170
- tool: "goldrush_get_token_balances",
158
+ tool: "get_wallet_token_balances",
171
159
  args: {
172
160
  id: {
173
161
  flag: "--address <addr>",
@@ -179,7 +167,7 @@ var NAMESPACE = [
179
167
  {
180
168
  name: "positions",
181
169
  description: "DeFi positions",
182
- tool: "moralis_get_wallet_defi_positions",
170
+ tool: "get_wallet_defi_positions",
183
171
  args: {
184
172
  id: {
185
173
  flag: "--address <addr>",
@@ -202,18 +190,13 @@ var NAMESPACE = [
202
190
  },
203
191
  {
204
192
  name: "history",
205
- description: "Portfolio value history",
206
- tool: "goldrush_get_portfolio_history",
193
+ description: "Wallet portfolio chart",
194
+ tool: "get_wallet_chart",
207
195
  args: {
208
196
  walletAddress: {
209
197
  flag: "--address <addr>",
210
198
  description: "Wallet address",
211
199
  required: true
212
- },
213
- chainName: {
214
- flag: "--chain <name>",
215
- description: "Chain name",
216
- required: true
217
200
  }
218
201
  }
219
202
  }
@@ -309,42 +292,61 @@ var NAMESPACE = [
309
292
  ]
310
293
  },
311
294
  {
312
- name: "prediction",
313
- description: "Prediction markets \u2014 events, traders, outcomes (Polymarket, Kalshi)",
295
+ name: "social",
296
+ description: "Social media analytics \u2014 sentiment, influencers, trending topics",
314
297
  commands: [
315
298
  {
316
- name: "categories",
317
- description: "Prediction market categories",
318
- tool: "codex_prediction_categories"
299
+ name: "trending",
300
+ description: "Trending topics",
301
+ tool: "get_trending_topics"
319
302
  },
320
303
  {
321
- name: "events",
322
- description: "Filter prediction events",
323
- tool: "codex_filter_prediction_events",
304
+ name: "metrics",
305
+ description: "Topic engagement metrics",
306
+ tool: "get_topic_metrics",
324
307
  args: {
325
- phrase: {
326
- flag: "--query <text>",
327
- description: "Search phrase",
328
- required: false
308
+ topic: {
309
+ flag: "--topic <name>",
310
+ description: "Topic or coin name",
311
+ required: true
329
312
  }
330
313
  }
331
314
  },
332
315
  {
333
- name: "markets",
334
- description: "Filter prediction markets",
335
- tool: "codex_filter_prediction_markets",
316
+ name: "creators",
317
+ description: "Top content creators",
318
+ tool: "get_topic_creators",
336
319
  args: {
337
- phrase: {
338
- flag: "--query <text>",
339
- description: "Search phrase",
340
- required: false
320
+ topic: {
321
+ flag: "--topic <name>",
322
+ description: "Topic or coin name",
323
+ required: true
341
324
  }
342
325
  }
343
326
  },
344
327
  {
345
- name: "traders",
346
- description: "Top prediction market traders",
347
- tool: "codex_filter_prediction_traders"
328
+ name: "posts",
329
+ description: "Social media posts",
330
+ tool: "get_topic_posts",
331
+ args: {
332
+ topic: {
333
+ flag: "--topic <name>",
334
+ description: "Topic or coin name",
335
+ required: true
336
+ }
337
+ }
338
+ },
339
+ {
340
+ name: "news",
341
+ description: "Topic news articles",
342
+ tool: "get_topic_news",
343
+ args: {
344
+ topic: {
345
+ flag: "--topic <name>",
346
+ description: "Topic or coin name",
347
+ required: true
348
+ }
349
+ }
348
350
  }
349
351
  ]
350
352
  },
@@ -491,73 +493,75 @@ var NAMESPACE = [
491
493
  commands: [
492
494
  {
493
495
  name: "balances",
494
- description: "Token balances across chains",
495
- tool: "goldrush_get_multichain_balances",
496
+ description: "Token balances",
497
+ tool: "alchemy_get_tokens_by_wallet",
496
498
  args: {
497
- walletAddress: {
499
+ address: {
498
500
  flag: "--address <addr>",
499
501
  description: "Wallet address",
500
502
  required: true
501
- }
503
+ },
504
+ network: { flag: "--network <name>", description: "Alchemy network" }
502
505
  }
503
506
  },
504
507
  {
505
508
  name: "transfers",
506
- description: "ERC-20 transfers",
507
- tool: "goldrush_get_erc20_transfers",
509
+ description: "Asset transfers",
510
+ tool: "alchemy_get_asset_transfers",
508
511
  args: {
509
- walletAddress: {
512
+ fromAddress: {
510
513
  flag: "--address <addr>",
511
- description: "Wallet address",
514
+ description: "Sender wallet address",
512
515
  required: true
513
516
  },
514
- chainName: {
515
- flag: "--chain <name>",
516
- description: "Chain name",
517
- required: true
518
- }
517
+ network: { flag: "--network <name>", description: "Alchemy network" }
519
518
  }
520
519
  },
521
520
  {
522
521
  name: "transactions",
523
522
  description: "Recent transactions",
524
- tool: "goldrush_get_transactions_latest",
523
+ tool: "moralis_get_wallet_history",
525
524
  args: {
526
- walletAddress: {
525
+ address: {
527
526
  flag: "--address <addr>",
528
527
  description: "Wallet address",
529
528
  required: true
530
529
  },
531
- chainName: {
532
- flag: "--chain <name>",
533
- description: "Chain name",
534
- required: true
535
- }
530
+ chain: { flag: "--chain <name>", description: "Chain name" }
536
531
  }
537
532
  },
538
533
  {
539
534
  name: "approvals",
540
535
  description: "Token approval audit",
541
- tool: "goldrush_get_token_approvals",
536
+ tool: "goplus_check_approval_security_v2",
542
537
  args: {
543
- walletAddress: {
538
+ address: {
544
539
  flag: "--address <addr>",
545
540
  description: "Wallet address",
546
541
  required: true
547
542
  },
548
- chainName: {
549
- flag: "--chain <name>",
550
- description: "Chain name",
551
- required: true
552
- }
543
+ chain_id: { flag: "--chain-id <id>", description: "EVM chain ID" }
553
544
  }
554
545
  }
555
546
  ]
556
547
  },
557
548
  {
558
549
  name: "nft",
559
- description: "NFT analytics \u2014 collections, markets, holders",
550
+ description: "NFT analytics \u2014 collections, markets, trends, holders",
560
551
  commands: [
552
+ {
553
+ name: "trending",
554
+ description: "Trending NFT collections",
555
+ tool: "get_nft_market_trends"
556
+ },
557
+ {
558
+ name: "collection",
559
+ description: "Collection details",
560
+ tool: "get_nft_collection",
561
+ args: {
562
+ slug: { flag: "--slug <name>", description: "Collection slug" }
563
+ }
564
+ },
561
565
  {
562
566
  name: "markets",
563
567
  description: "NFT marketplace data",
@@ -584,33 +588,16 @@ var NAMESPACE = [
584
588
  {
585
589
  name: "chains",
586
590
  description: "List supported chains",
587
- tool: "goldrush_get_chains"
588
- },
589
- {
590
- name: "gas",
591
- description: "Gas prices",
592
- tool: "goldrush_get_gas_prices",
593
- args: {
594
- chainName: {
595
- flag: "--chain <name>",
596
- description: "Chain name",
597
- required: true
598
- }
599
- }
591
+ tool: "get_networks_list"
600
592
  },
601
593
  {
602
- name: "block",
603
- description: "Block data",
604
- tool: "goldrush_get_block",
594
+ name: "block-number",
595
+ description: "Latest EVM block number",
596
+ tool: "tenderly_get_block_number",
605
597
  args: {
606
- chainName: {
607
- flag: "--chain <name>",
608
- description: "Chain name",
609
- required: true
610
- },
611
- blockHeight: {
612
- flag: "--height <n>",
613
- description: "Block height",
598
+ network_id: {
599
+ flag: "--network-id <id>",
600
+ description: "EVM chain ID",
614
601
  required: true
615
602
  }
616
603
  }
@@ -618,15 +605,10 @@ var NAMESPACE = [
618
605
  {
619
606
  name: "resolve",
620
607
  description: "Resolve ENS/DNS name",
621
- tool: "goldrush_resolve_address",
608
+ tool: "moralis_resolve_ens_domain",
622
609
  args: {
623
- chainName: {
624
- flag: "--chain <name>",
625
- description: "Chain name",
626
- required: true
627
- },
628
- walletAddress: {
629
- flag: "--address <addr>",
610
+ domain: {
611
+ flag: "--domain <name>",
630
612
  description: "Address or ENS name",
631
613
  required: true
632
614
  }
@@ -678,4 +660,4 @@ export {
678
660
  resolveCommand,
679
661
  getAllDomainCommands
680
662
  };
681
- //# sourceMappingURL=chunk-CGXVV6WR.js.map
663
+ //# sourceMappingURL=chunk-MPIUUE3T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/namespace.ts"],"sourcesContent":["interface SubCommand {\n name: string;\n description: string;\n tool: string;\n args?: Record<\n string,\n { flag: string; description: string; required?: boolean }\n >;\n}\n\ninterface DomainCommand {\n name: string;\n description: string;\n commands: SubCommand[];\n}\n\nexport type { SubCommand, DomainCommand };\n\nexport const NAMESPACE: DomainCommand[] = [\n {\n name: \"market\",\n description: \"Crypto market data — prices, charts, rankings, stablecoins\",\n commands: [\n {\n name: \"price\",\n description: \"Get token price\",\n tool: \"get_price\",\n args: {\n ids: {\n flag: \"--ids <tokens>\",\n description: \"Token IDs (comma-separated)\",\n required: true,\n },\n vs_currencies: {\n flag: \"--vs <currencies>\",\n description: \"Target currencies\",\n required: true,\n },\n },\n },\n {\n name: \"top\",\n description: \"Top coins by market cap\",\n tool: \"get_coins_market_data\",\n args: {\n vs_currency: {\n flag: \"--vs <currency>\",\n description: \"Quote currency\",\n required: true,\n },\n per_page: { flag: \"--limit <n>\", description: \"Number of results\" },\n },\n },\n { name: \"trending\", description: \"Trending coins\", tool: \"get_trending\" },\n {\n name: \"global\",\n description: \"Global market stats\",\n tool: \"get_global_stats\",\n },\n {\n name: \"ohlc\",\n description: \"OHLC candle data\",\n tool: \"get_coin_ohlc\",\n args: {\n id: { flag: \"--id <coin>\", description: \"Coin ID\", required: true },\n vs_currency: {\n flag: \"--vs <currency>\",\n description: \"Quote currency (default: usd)\",\n },\n days: { flag: \"--days <n>\", description: \"Number of days\" },\n },\n },\n {\n name: \"chart\",\n description: \"Price chart data\",\n tool: \"get_coin_market_chart_range\",\n args: {\n id: { flag: \"--id <coin>\", description: \"Coin ID\", required: true },\n vs_currency: {\n flag: \"--vs <currency>\",\n description: \"Quote currency (default: usd)\",\n },\n from: {\n flag: \"--from <timestamp>\",\n description: \"Start UNIX timestamp\",\n required: true,\n },\n to: {\n flag: \"--to <timestamp>\",\n description: \"End UNIX timestamp\",\n required: true,\n },\n },\n },\n {\n name: \"gainers\",\n description: \"Top gainers and losers\",\n tool: \"get_gainers_losers\",\n args: {\n vs_currency: {\n flag: \"--vs <currency>\",\n description: \"Quote currency (default: usd)\",\n },\n },\n },\n ],\n },\n {\n name: \"defi\",\n description: \"DeFi protocol analytics — TVL, fees, yields, bridges\",\n commands: [\n {\n name: \"tvl\",\n description: \"Protocol TVL\",\n tool: \"get_protocol_tvl\",\n args: {\n protocol: {\n flag: \"--protocol <name>\",\n description: \"Protocol slug\",\n required: true,\n },\n },\n },\n {\n name: \"protocols\",\n description: \"All DeFi protocols\",\n tool: \"get_defi_protocols\",\n },\n {\n name: \"fees\",\n description: \"Protocol fee data\",\n tool: \"get_protocol_fees\",\n args: {\n protocol: {\n flag: \"--protocol <name>\",\n description: \"Protocol slug\",\n required: true,\n },\n },\n },\n {\n name: \"yields\",\n description: \"Yield farming pools\",\n tool: \"get_yield_pools\",\n },\n { name: \"chains\", description: \"Chain TVL rankings\", tool: \"get_chains\" },\n {\n name: \"bridges\",\n description: \"Cross-chain bridges\",\n tool: \"defillama_get_bridges\",\n },\n ],\n },\n {\n name: \"portfolio\",\n description: \"Wallet portfolios — balances, DeFi positions, NFTs, history\",\n commands: [\n {\n name: \"balance\",\n description: \"Wallet total balance\",\n tool: \"get_wallet_balance\",\n args: {\n id: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n },\n },\n {\n name: \"tokens\",\n description: \"Token holdings\",\n tool: \"get_wallet_token_balances\",\n args: {\n id: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n },\n },\n {\n name: \"positions\",\n description: \"DeFi positions\",\n tool: \"get_wallet_defi_positions\",\n args: {\n id: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n },\n },\n {\n name: \"nfts\",\n description: \"NFT holdings\",\n tool: \"get_wallet_nft_collections\",\n args: {\n id: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n },\n },\n {\n name: \"history\",\n description: \"Wallet portfolio chart\",\n tool: \"get_wallet_chart\",\n args: {\n walletAddress: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n },\n },\n ],\n },\n {\n name: \"security\",\n description: \"Token and contract security — scans, approvals, simulations\",\n commands: [\n {\n name: \"scan\",\n description: \"Token security analysis\",\n tool: \"get_token_security\",\n args: {\n chain_id: {\n flag: \"--chain <id>\",\n description: \"Chain ID (1=ETH, 56=BSC)\",\n required: true,\n },\n contract_addresses: {\n flag: \"--address <addr>\",\n description: \"Token contract\",\n required: true,\n },\n },\n },\n {\n name: \"approve\",\n description: \"Audit token approvals\",\n tool: \"check_approval_security\",\n args: {\n chain_id: {\n flag: \"--chain <id>\",\n description: \"Chain ID\",\n required: true,\n },\n contract_addresses: {\n flag: \"--address <addr>\",\n description: \"Contract address\",\n required: true,\n },\n },\n },\n {\n name: \"simulate\",\n description: \"Simulate a transaction\",\n tool: \"simulate_evm_transaction\",\n args: {\n chain_id: {\n flag: \"--chain <id>\",\n description: \"Chain ID (1=ETH)\",\n required: true,\n },\n from: {\n flag: \"--from <addr>\",\n description: \"Sender address\",\n required: true,\n },\n to: {\n flag: \"--to <addr>\",\n description: \"Contract/recipient address\",\n required: true,\n },\n data: {\n flag: \"--data <hex>\",\n description: \"Transaction calldata (hex)\",\n },\n value: { flag: \"--value <wei>\", description: \"Value in wei\" },\n },\n },\n {\n name: \"rugpull\",\n description: \"Detect rug pull indicators\",\n tool: \"detect_rugpull\",\n args: {\n chain_id: {\n flag: \"--chain <id>\",\n description: \"Chain ID\",\n required: true,\n },\n contract_addresses: {\n flag: \"--address <addr>\",\n description: \"Contract\",\n required: true,\n },\n },\n },\n {\n name: \"hacks\",\n description: \"Recent DeFi hacks\",\n tool: \"defillama_get_hacks\",\n },\n ],\n },\n {\n name: \"social\",\n description:\n \"Social media analytics — sentiment, influencers, trending topics\",\n commands: [\n {\n name: \"trending\",\n description: \"Trending topics\",\n tool: \"get_trending_topics\",\n },\n {\n name: \"metrics\",\n description: \"Topic engagement metrics\",\n tool: \"get_topic_metrics\",\n args: {\n topic: {\n flag: \"--topic <name>\",\n description: \"Topic or coin name\",\n required: true,\n },\n },\n },\n {\n name: \"creators\",\n description: \"Top content creators\",\n tool: \"get_topic_creators\",\n args: {\n topic: {\n flag: \"--topic <name>\",\n description: \"Topic or coin name\",\n required: true,\n },\n },\n },\n {\n name: \"posts\",\n description: \"Social media posts\",\n tool: \"get_topic_posts\",\n args: {\n topic: {\n flag: \"--topic <name>\",\n description: \"Topic or coin name\",\n required: true,\n },\n },\n },\n {\n name: \"news\",\n description: \"Topic news articles\",\n tool: \"get_topic_news\",\n args: {\n topic: {\n flag: \"--topic <name>\",\n description: \"Topic or coin name\",\n required: true,\n },\n },\n },\n ],\n },\n {\n name: \"exchange\",\n description:\n \"Centralized exchange data — tickers, orderbooks, trades, funding\",\n commands: [\n {\n name: \"ticker\",\n description: \"Exchange ticker\",\n tool: \"get_ticker\",\n args: {\n exchange: {\n flag: \"--exchange <name>\",\n description: \"Exchange (binance, coinbase)\",\n required: true,\n },\n symbol: {\n flag: \"--symbol <pair>\",\n description: \"Trading pair (BTC/USDT)\",\n required: true,\n },\n },\n },\n {\n name: \"orderbook\",\n description: \"Order book depth\",\n tool: \"get_orderbook\",\n args: {\n exchange: {\n flag: \"--exchange <name>\",\n description: \"Exchange\",\n required: true,\n },\n symbol: {\n flag: \"--symbol <pair>\",\n description: \"Trading pair\",\n required: true,\n },\n },\n },\n {\n name: \"trades\",\n description: \"Recent trades\",\n tool: \"get_recent_trades\",\n args: {\n exchange: {\n flag: \"--exchange <name>\",\n description: \"Exchange\",\n required: true,\n },\n symbol: {\n flag: \"--symbol <pair>\",\n description: \"Trading pair\",\n required: true,\n },\n },\n },\n {\n name: \"funding\",\n description: \"Perpetual funding rates\",\n tool: \"get_funding_rate\",\n args: {\n exchange: {\n flag: \"--exchange <name>\",\n description: \"Exchange (binance, bybit)\",\n required: true,\n },\n symbol: {\n flag: \"--symbol <pair>\",\n description: \"Futures pair (e.g. BTC/USDT:USDT)\",\n required: true,\n },\n },\n },\n {\n name: \"list\",\n description: \"List all exchanges\",\n tool: \"get_exchanges\",\n },\n ],\n },\n {\n name: \"dex\",\n description: \"DEX analytics — pools, trending pairs, trades, volume\",\n commands: [\n {\n name: \"trending\",\n description: \"Trending DEX pools\",\n tool: \"get_trending_pools\",\n },\n {\n name: \"pools\",\n description: \"Pool search and filter\",\n tool: \"get_pools\",\n args: {\n network: {\n flag: \"--network <name>\",\n description: \"Network (eth, bsc, solana)\",\n required: true,\n },\n page: { flag: \"--page <n>\", description: \"Page number\" },\n },\n },\n {\n name: \"trades\",\n description: \"Token trading activity\",\n tool: \"get_token_trades\",\n args: {\n network: {\n flag: \"--network <name>\",\n description: \"Network (eth, bsc, solana)\",\n },\n pool_address: { flag: \"--pool <addr>\", description: \"Pool address\" },\n },\n },\n {\n name: \"volume\",\n description: \"DEX volume rankings\",\n tool: \"get_dex_volumes\",\n },\n {\n name: \"pairs\",\n description: \"Token trading pairs\",\n tool: \"get_token_pools\",\n args: {\n network: {\n flag: \"--network <name>\",\n description: \"Network\",\n required: true,\n },\n token_address: {\n flag: \"--token <addr>\",\n description: \"Token address\",\n required: true,\n },\n },\n },\n ],\n },\n {\n name: \"wallet\",\n description:\n \"On-chain wallet data — balances, transfers, transactions, approvals\",\n commands: [\n {\n name: \"balances\",\n description: \"Token balances\",\n tool: \"alchemy_get_tokens_by_wallet\",\n args: {\n address: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n network: { flag: \"--network <name>\", description: \"Alchemy network\" },\n },\n },\n {\n name: \"transfers\",\n description: \"Asset transfers\",\n tool: \"alchemy_get_asset_transfers\",\n args: {\n fromAddress: {\n flag: \"--address <addr>\",\n description: \"Sender wallet address\",\n required: true,\n },\n network: { flag: \"--network <name>\", description: \"Alchemy network\" },\n },\n },\n {\n name: \"transactions\",\n description: \"Recent transactions\",\n tool: \"moralis_get_wallet_history\",\n args: {\n address: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n chain: { flag: \"--chain <name>\", description: \"Chain name\" },\n },\n },\n {\n name: \"approvals\",\n description: \"Token approval audit\",\n tool: \"goplus_check_approval_security_v2\",\n args: {\n address: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n chain_id: { flag: \"--chain-id <id>\", description: \"EVM chain ID\" },\n },\n },\n ],\n },\n {\n name: \"nft\",\n description: \"NFT analytics — collections, markets, trends, holders\",\n commands: [\n {\n name: \"trending\",\n description: \"Trending NFT collections\",\n tool: \"get_nft_market_trends\",\n },\n {\n name: \"collection\",\n description: \"Collection details\",\n tool: \"get_nft_collection\",\n args: {\n slug: { flag: \"--slug <name>\", description: \"Collection slug\" },\n },\n },\n {\n name: \"markets\",\n description: \"NFT marketplace data\",\n tool: \"get_nft_markets\",\n },\n {\n name: \"search\",\n description: \"Search NFT collections\",\n tool: \"search_nfts\",\n args: {\n query: {\n flag: \"--query <text>\",\n description: \"Search term\",\n required: true,\n },\n },\n },\n ],\n },\n {\n name: \"network\",\n description:\n \"Blockchain infrastructure — chains, gas, blocks, transactions\",\n commands: [\n {\n name: \"chains\",\n description: \"List supported chains\",\n tool: \"get_networks_list\",\n },\n {\n name: \"block-number\",\n description: \"Latest EVM block number\",\n tool: \"tenderly_get_block_number\",\n args: {\n network_id: {\n flag: \"--network-id <id>\",\n description: \"EVM chain ID\",\n required: true,\n },\n },\n },\n {\n name: \"resolve\",\n description: \"Resolve ENS/DNS name\",\n tool: \"moralis_resolve_ens_domain\",\n args: {\n domain: {\n flag: \"--domain <name>\",\n description: \"Address or ENS name\",\n required: true,\n },\n },\n },\n ],\n },\n {\n name: \"search\",\n description: \"Search across all data\",\n commands: [\n {\n name: \"tokens\",\n description: \"Search tokens\",\n tool: \"search_all\",\n args: {\n query: {\n flag: \"--query <text>\",\n description: \"Search term\",\n required: true,\n },\n },\n },\n {\n name: \"pools\",\n description: \"Search DEX pools\",\n tool: \"search_pools\",\n args: {\n query: {\n flag: \"--query <text>\",\n description: \"Search term\",\n required: true,\n },\n },\n },\n ],\n },\n];\n\nexport function resolveCommand(\n domain: string,\n subcommand: string,\n): SubCommand | undefined {\n const d = NAMESPACE.find((n) => n.name === domain);\n return d?.commands.find((c) => c.name === subcommand);\n}\n\nexport function getAllDomainCommands(): DomainCommand[] {\n return NAMESPACE;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,127 @@
1
+ import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
+
3
+ // src/cli/browser-auth.ts
4
+ import { createServer } from "http";
5
+ import { randomBytes } from "crypto";
6
+ import { execFile } from "child_process";
7
+ import { platform } from "os";
8
+ function openBrowser(url) {
9
+ const plat = platform();
10
+ let cmd;
11
+ let args;
12
+ if (plat === "darwin") {
13
+ cmd = "open";
14
+ args = [url];
15
+ } else if (plat === "win32") {
16
+ cmd = "cmd";
17
+ args = ["/c", "start", "", url];
18
+ } else {
19
+ cmd = "xdg-open";
20
+ args = [url];
21
+ }
22
+ execFile(cmd, args, (err) => {
23
+ if (err) process.stderr.write(`
24
+ Open this URL manually:
25
+ ${url}
26
+
27
+ `);
28
+ });
29
+ }
30
+ async function browserLogin(opts) {
31
+ const baseUrl = opts.baseUrl || "https://hiveintelligence.xyz";
32
+ const timeout = opts.timeout || 3e5;
33
+ const state = randomBytes(16).toString("hex");
34
+ return new Promise((resolve, reject) => {
35
+ let settled = false;
36
+ const server = createServer((req, res) => {
37
+ const url = new URL(req.url || "/", `http://localhost`);
38
+ if (url.pathname !== "/callback") {
39
+ res.writeHead(404);
40
+ res.end("Not found");
41
+ return;
42
+ }
43
+ if (settled) {
44
+ res.writeHead(200);
45
+ res.end();
46
+ return;
47
+ }
48
+ const key = url.searchParams.get("key");
49
+ const email = url.searchParams.get("email");
50
+ const returnedState = url.searchParams.get("state");
51
+ if (returnedState !== state) {
52
+ res.writeHead(403);
53
+ res.end("State mismatch \u2014 possible CSRF attack. Please try again.");
54
+ return;
55
+ }
56
+ if (!key) {
57
+ res.writeHead(400);
58
+ res.end("Missing API key in callback");
59
+ return;
60
+ }
61
+ settled = true;
62
+ res.writeHead(200, { "Content-Type": "text/html" });
63
+ res.end(`<!DOCTYPE html>
64
+ <html>
65
+ <head><title>Hive CLI \u2014 Authenticated</title>
66
+ <style>
67
+ body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #0a0a0a; color: #fafafa; }
68
+ .card { text-align: center; padding: 2rem; }
69
+ h1 { font-size: 1.5rem; margin-bottom: 0.5rem; }
70
+ p { color: #888; }
71
+ </style>
72
+ </head>
73
+ <body>
74
+ <div class="card">
75
+ <h1>Authenticated</h1>
76
+ <p>You can close this tab and return to the terminal.</p>
77
+ </div>
78
+ </body>
79
+ </html>`);
80
+ clearTimeout(timer);
81
+ server.close();
82
+ resolve({ key, email: email || "", state: returnedState });
83
+ });
84
+ server.listen(0, "127.0.0.1", () => {
85
+ const addr = server.address();
86
+ if (!addr || typeof addr === "string") {
87
+ reject(new Error("Failed to start local server"));
88
+ return;
89
+ }
90
+ const port = addr.port;
91
+ const loginUrl = new URL("/auth/cli", baseUrl);
92
+ loginUrl.searchParams.set("callback_port", String(port));
93
+ loginUrl.searchParams.set("state", state);
94
+ process.stderr.write(`
95
+ Opening browser to sign in...
96
+ `);
97
+ process.stderr.write(
98
+ `If the browser doesn't open, visit:
99
+ ${loginUrl.toString()}
100
+
101
+ `
102
+ );
103
+ openBrowser(loginUrl.toString());
104
+ });
105
+ const timer = setTimeout(() => {
106
+ if (settled) return;
107
+ settled = true;
108
+ server.close();
109
+ reject(
110
+ new Error(
111
+ "Login timed out after 5 minutes. Run: hive auth login --manual"
112
+ )
113
+ );
114
+ }, timeout);
115
+ server.on("error", (err) => {
116
+ if (settled) return;
117
+ settled = true;
118
+ clearTimeout(timer);
119
+ reject(err);
120
+ });
121
+ });
122
+ }
123
+
124
+ export {
125
+ browserLogin
126
+ };
127
+ //# sourceMappingURL=chunk-PGBVNMNZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/browser-auth.ts"],"sourcesContent":["import { createServer } from \"node:http\";\nimport { randomBytes } from \"node:crypto\";\nimport { execFile } from \"node:child_process\";\nimport { platform } from \"node:os\";\n\ninterface AuthResult {\n key: string;\n email: string;\n state: string;\n}\n\n/** Open a URL in the default browser using execFile (no shell injection risk) */\nfunction openBrowser(url: string): void {\n const plat = platform();\n let cmd: string;\n let args: string[];\n\n if (plat === \"darwin\") {\n cmd = \"open\";\n args = [url];\n } else if (plat === \"win32\") {\n cmd = \"cmd\";\n args = [\"/c\", \"start\", \"\", url];\n } else {\n cmd = \"xdg-open\";\n args = [url];\n }\n\n execFile(cmd, args, (err) => {\n if (err) process.stderr.write(`\\nOpen this URL manually:\\n ${url}\\n\\n`);\n });\n}\n\n/** Start a temporary local HTTP server and wait for the auth callback */\nexport async function browserLogin(opts: {\n baseUrl?: string;\n timeout?: number;\n}): Promise<AuthResult> {\n const baseUrl = opts.baseUrl || \"https://hiveintelligence.xyz\";\n const timeout = opts.timeout || 300_000; // 5 minutes\n const state = randomBytes(16).toString(\"hex\");\n\n return new Promise((resolve, reject) => {\n let settled = false;\n\n const server = createServer((req, res) => {\n const url = new URL(req.url || \"/\", `http://localhost`);\n\n if (url.pathname !== \"/callback\") {\n res.writeHead(404);\n res.end(\"Not found\");\n return;\n }\n\n // Ignore duplicate requests (favicon probes, browser retries)\n if (settled) {\n res.writeHead(200);\n res.end();\n return;\n }\n\n const key = url.searchParams.get(\"key\");\n const email = url.searchParams.get(\"email\");\n const returnedState = url.searchParams.get(\"state\");\n\n if (returnedState !== state) {\n res.writeHead(403);\n res.end(\"State mismatch — possible CSRF attack. Please try again.\");\n return;\n }\n\n if (!key) {\n res.writeHead(400);\n res.end(\"Missing API key in callback\");\n return;\n }\n\n settled = true;\n\n // Send a success HTML page the user can close\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(`<!DOCTYPE html>\n<html>\n<head><title>Hive CLI — Authenticated</title>\n<style>\n body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #0a0a0a; color: #fafafa; }\n .card { text-align: center; padding: 2rem; }\n h1 { font-size: 1.5rem; margin-bottom: 0.5rem; }\n p { color: #888; }\n</style>\n</head>\n<body>\n <div class=\"card\">\n <h1>Authenticated</h1>\n <p>You can close this tab and return to the terminal.</p>\n </div>\n</body>\n</html>`);\n\n clearTimeout(timer);\n server.close();\n resolve({ key, email: email || \"\", state: returnedState });\n });\n\n // Listen on a random available port\n server.listen(0, \"127.0.0.1\", () => {\n const addr = server.address();\n if (!addr || typeof addr === \"string\") {\n reject(new Error(\"Failed to start local server\"));\n return;\n }\n const port = addr.port;\n const loginUrl = new URL(\"/auth/cli\", baseUrl);\n loginUrl.searchParams.set(\"callback_port\", String(port));\n loginUrl.searchParams.set(\"state\", state);\n\n process.stderr.write(`\\nOpening browser to sign in...\\n`);\n process.stderr.write(\n `If the browser doesn't open, visit:\\n ${loginUrl.toString()}\\n\\n`,\n );\n openBrowser(loginUrl.toString());\n });\n\n const timer = setTimeout(() => {\n if (settled) return;\n settled = true;\n server.close();\n reject(\n new Error(\n \"Login timed out after 5 minutes. Run: hive auth login --manual\",\n ),\n );\n }, timeout);\n\n server.on(\"error\", (err) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n reject(err);\n });\n });\n}\n"],"mappings":";;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AASzB,SAAS,YAAY,KAAmB;AACtC,QAAM,OAAO,SAAS;AACtB,MAAI;AACJ,MAAI;AAEJ,MAAI,SAAS,UAAU;AACrB,UAAM;AACN,WAAO,CAAC,GAAG;AAAA,EACb,WAAW,SAAS,SAAS;AAC3B,UAAM;AACN,WAAO,CAAC,MAAM,SAAS,IAAI,GAAG;AAAA,EAChC,OAAO;AACL,UAAM;AACN,WAAO,CAAC,GAAG;AAAA,EACb;AAEA,WAAS,KAAK,MAAM,CAAC,QAAQ;AAC3B,QAAI,IAAK,SAAQ,OAAO,MAAM;AAAA;AAAA,IAAgC,GAAG;AAAA;AAAA,CAAM;AAAA,EACzE,CAAC;AACH;AAGA,eAAsB,aAAa,MAGX;AACtB,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,QAAQ,YAAY,EAAE,EAAE,SAAS,KAAK;AAE5C,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,QAAI,UAAU;AAEd,UAAM,SAAS,aAAa,CAAC,KAAK,QAAQ;AACxC,YAAM,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK,kBAAkB;AAEtD,UAAI,IAAI,aAAa,aAAa;AAChC,YAAI,UAAU,GAAG;AACjB,YAAI,IAAI,WAAW;AACnB;AAAA,MACF;AAGA,UAAI,SAAS;AACX,YAAI,UAAU,GAAG;AACjB,YAAI,IAAI;AACR;AAAA,MACF;AAEA,YAAM,MAAM,IAAI,aAAa,IAAI,KAAK;AACtC,YAAM,QAAQ,IAAI,aAAa,IAAI,OAAO;AAC1C,YAAM,gBAAgB,IAAI,aAAa,IAAI,OAAO;AAElD,UAAI,kBAAkB,OAAO;AAC3B,YAAI,UAAU,GAAG;AACjB,YAAI,IAAI,+DAA0D;AAClE;AAAA,MACF;AAEA,UAAI,CAAC,KAAK;AACR,YAAI,UAAU,GAAG;AACjB,YAAI,IAAI,6BAA6B;AACrC;AAAA,MACF;AAEA,gBAAU;AAGV,UAAI,UAAU,KAAK,EAAE,gBAAgB,YAAY,CAAC;AAClD,UAAI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAgBN;AAEF,mBAAa,KAAK;AAClB,aAAO,MAAM;AACb,cAAQ,EAAE,KAAK,OAAO,SAAS,IAAI,OAAO,cAAc,CAAC;AAAA,IAC3D,CAAC;AAGD,WAAO,OAAO,GAAG,aAAa,MAAM;AAClC,YAAM,OAAO,OAAO,QAAQ;AAC5B,UAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,eAAO,IAAI,MAAM,8BAA8B,CAAC;AAChD;AAAA,MACF;AACA,YAAM,OAAO,KAAK;AAClB,YAAM,WAAW,IAAI,IAAI,aAAa,OAAO;AAC7C,eAAS,aAAa,IAAI,iBAAiB,OAAO,IAAI,CAAC;AACvD,eAAS,aAAa,IAAI,SAAS,KAAK;AAExC,cAAQ,OAAO,MAAM;AAAA;AAAA,CAAmC;AACxD,cAAQ,OAAO;AAAA,QACb;AAAA,IAA0C,SAAS,SAAS,CAAC;AAAA;AAAA;AAAA,MAC/D;AACA,kBAAY,SAAS,SAAS,CAAC;AAAA,IACjC,CAAC;AAED,UAAM,QAAQ,WAAW,MAAM;AAC7B,UAAI,QAAS;AACb,gBAAU;AACV,aAAO,MAAM;AACb;AAAA,QACE,IAAI;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,OAAO;AAEV,WAAO,GAAG,SAAS,CAAC,QAAQ;AAC1B,UAAI,QAAS;AACb,gBAAU;AACV,mBAAa,KAAK;AAClB,aAAO,GAAG;AAAA,IACZ,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}
@@ -0,0 +1,88 @@
1
+ import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ SERVER_VERSION
4
+ } from "./chunk-2X3U4DFK.js";
5
+ import {
6
+ ensureConfigDir,
7
+ getConfigDir,
8
+ readJsonFile,
9
+ writeJsonFile
10
+ } from "./chunk-V77LO4RO.js";
11
+
12
+ // src/cli/update-check.ts
13
+ import { join } from "path";
14
+ var CACHE_TTL_MS = 864e5;
15
+ var REGISTRY_PACKAGE = "hive-intelligence";
16
+ function getCachePath() {
17
+ return join(getConfigDir(), "cache", "update-check.json");
18
+ }
19
+ async function checkForUpdates() {
20
+ if (shouldSkipUpdateCheck(process.argv, process.env)) {
21
+ return;
22
+ }
23
+ const cached = readJsonFile(getCachePath());
24
+ if (cached?.checkedAt) {
25
+ const age = Date.now() - new Date(cached.checkedAt).getTime();
26
+ if (age < CACHE_TTL_MS) {
27
+ if (cached.latestVersion && isNewerVersion(cached.latestVersion, SERVER_VERSION)) {
28
+ showUpdateMessage(cached.latestVersion);
29
+ }
30
+ return;
31
+ }
32
+ }
33
+ try {
34
+ const controller = new AbortController();
35
+ const timeout = setTimeout(() => controller.abort(), 3e3);
36
+ const res = await fetch(
37
+ `https://registry.npmjs.org/${REGISTRY_PACKAGE}/latest`,
38
+ {
39
+ signal: controller.signal
40
+ }
41
+ );
42
+ clearTimeout(timeout);
43
+ if (!res.ok) return;
44
+ const data = await res.json();
45
+ ensureConfigDir();
46
+ writeJsonFile(getCachePath(), {
47
+ checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
48
+ latestVersion: data.version ?? null
49
+ });
50
+ if (!data.version || !isNewerVersion(data.version, SERVER_VERSION)) return;
51
+ showUpdateMessage(data.version);
52
+ } catch {
53
+ }
54
+ }
55
+ function shouldSkipUpdateCheck(argv = process.argv, env = process.env) {
56
+ if (env.CI || env.HIVE_NO_UPDATE_CHECK) return true;
57
+ if (env.NODE_ENV === "test" || env.VITEST || env.VITEST_WORKER_ID) {
58
+ return true;
59
+ }
60
+ return argv.some(
61
+ (arg) => ["--help", "-h", "--version", "-V"].includes(arg)
62
+ );
63
+ }
64
+ function isNewerVersion(candidate, current) {
65
+ const parse = (version) => version.replace(/^[^\d]*/, "").split(/[.-]/).slice(0, 3).map((part) => Number.parseInt(part, 10) || 0);
66
+ const a = parse(candidate);
67
+ const b = parse(current);
68
+ for (let i = 0; i < 3; i++) {
69
+ if (a[i] > b[i]) return true;
70
+ if (a[i] < b[i]) return false;
71
+ }
72
+ return false;
73
+ }
74
+ function showUpdateMessage(newVersion) {
75
+ process.stderr.write(
76
+ `
77
+ Update available: ${SERVER_VERSION} \u2192 ${newVersion}
78
+ npm: npm update -g hive-intelligence
79
+ npx: npx -y -p hive-intelligence@latest hive
80
+
81
+ `
82
+ );
83
+ }
84
+
85
+ export {
86
+ checkForUpdates
87
+ };
88
+ //# sourceMappingURL=chunk-QNCI4DEB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/update-check.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { SERVER_VERSION } from \"../mcpServer.js\";\nimport {\n getConfigDir,\n ensureConfigDir,\n readJsonFile,\n writeJsonFile,\n} from \"./config-dir.js\";\n\nconst CACHE_TTL_MS = 86_400_000; // 24 hours\nconst REGISTRY_PACKAGE = \"hive-intelligence\";\n\ninterface UpdateCache {\n checkedAt: string;\n latestVersion: string | null;\n}\n\nfunction getCachePath(): string {\n return join(getConfigDir(), \"cache\", \"update-check.json\");\n}\n\nexport async function checkForUpdates(): Promise<void> {\n if (shouldSkipUpdateCheck(process.argv, process.env)) {\n return;\n }\n\n const cached = readJsonFile<UpdateCache>(getCachePath());\n if (cached?.checkedAt) {\n const age = Date.now() - new Date(cached.checkedAt).getTime();\n if (age < CACHE_TTL_MS) {\n if (\n cached.latestVersion &&\n isNewerVersion(cached.latestVersion, SERVER_VERSION)\n ) {\n showUpdateMessage(cached.latestVersion);\n }\n return;\n }\n }\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 3000);\n\n const res = await fetch(\n `https://registry.npmjs.org/${REGISTRY_PACKAGE}/latest`,\n {\n signal: controller.signal,\n },\n );\n clearTimeout(timeout);\n\n if (!res.ok) return;\n const data = (await res.json()) as { version?: string };\n\n ensureConfigDir();\n writeJsonFile(getCachePath(), {\n checkedAt: new Date().toISOString(),\n latestVersion: data.version ?? null,\n });\n\n if (!data.version || !isNewerVersion(data.version, SERVER_VERSION)) return;\n showUpdateMessage(data.version);\n } catch {\n // Silently ignore — never block CLI on update check failures\n }\n}\n\nexport function shouldSkipUpdateCheck(\n argv: readonly string[] = process.argv,\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n if (env.CI || env.HIVE_NO_UPDATE_CHECK) return true;\n if (env.NODE_ENV === \"test\" || env.VITEST || env.VITEST_WORKER_ID) {\n return true;\n }\n\n return argv.some((arg) =>\n [\"--help\", \"-h\", \"--version\", \"-V\"].includes(arg),\n );\n}\n\nexport function isNewerVersion(candidate: string, current: string): boolean {\n const parse = (version: string) =>\n version\n .replace(/^[^\\d]*/, \"\")\n .split(/[.-]/)\n .slice(0, 3)\n .map((part) => Number.parseInt(part, 10) || 0);\n\n const a = parse(candidate);\n const b = parse(current);\n for (let i = 0; i < 3; i++) {\n if (a[i] > b[i]) return true;\n if (a[i] < b[i]) return false;\n }\n return false;\n}\n\nfunction showUpdateMessage(newVersion: string): void {\n process.stderr.write(\n `\\nUpdate available: ${SERVER_VERSION} → ${newVersion}\\n` +\n ` npm: npm update -g hive-intelligence\\n` +\n ` npx: npx -y -p hive-intelligence@latest hive\\n\\n`,\n );\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAAY;AASrB,IAAM,eAAe;AACrB,IAAM,mBAAmB;AAOzB,SAAS,eAAuB;AAC9B,SAAO,KAAK,aAAa,GAAG,SAAS,mBAAmB;AAC1D;AAEA,eAAsB,kBAAiC;AACrD,MAAI,sBAAsB,QAAQ,MAAM,QAAQ,GAAG,GAAG;AACpD;AAAA,EACF;AAEA,QAAM,SAAS,aAA0B,aAAa,CAAC;AACvD,MAAI,QAAQ,WAAW;AACrB,UAAM,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,SAAS,EAAE,QAAQ;AAC5D,QAAI,MAAM,cAAc;AACtB,UACE,OAAO,iBACP,eAAe,OAAO,eAAe,cAAc,GACnD;AACA,0BAAkB,OAAO,aAAa;AAAA,MACxC;AACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACF,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,GAAI;AAEzD,UAAM,MAAM,MAAM;AAAA,MAChB,8BAA8B,gBAAgB;AAAA,MAC9C;AAAA,QACE,QAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AACA,iBAAa,OAAO;AAEpB,QAAI,CAAC,IAAI,GAAI;AACb,UAAM,OAAQ,MAAM,IAAI,KAAK;AAE7B,oBAAgB;AAChB,kBAAc,aAAa,GAAG;AAAA,MAC5B,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,eAAe,KAAK,WAAW;AAAA,IACjC,CAAC;AAED,QAAI,CAAC,KAAK,WAAW,CAAC,eAAe,KAAK,SAAS,cAAc,EAAG;AACpE,sBAAkB,KAAK,OAAO;AAAA,EAChC,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,sBACd,OAA0B,QAAQ,MAClC,MAAyB,QAAQ,KACxB;AACT,MAAI,IAAI,MAAM,IAAI,qBAAsB,QAAO;AAC/C,MAAI,IAAI,aAAa,UAAU,IAAI,UAAU,IAAI,kBAAkB;AACjE,WAAO;AAAA,EACT;AAEA,SAAO,KAAK;AAAA,IAAK,CAAC,QAChB,CAAC,UAAU,MAAM,aAAa,IAAI,EAAE,SAAS,GAAG;AAAA,EAClD;AACF;AAEO,SAAS,eAAe,WAAmB,SAA0B;AAC1E,QAAM,QAAQ,CAAC,YACb,QACG,QAAQ,WAAW,EAAE,EACrB,MAAM,MAAM,EACZ,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,SAAS,OAAO,SAAS,MAAM,EAAE,KAAK,CAAC;AAEjD,QAAM,IAAI,MAAM,SAAS;AACzB,QAAM,IAAI,MAAM,OAAO;AACvB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,QAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAG,QAAO;AACxB,QAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAG,QAAO;AAAA,EAC1B;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,YAA0B;AACnD,UAAQ,OAAO;AAAA,IACb;AAAA,oBAAuB,cAAc,WAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAGvD;AACF;","names":[]}