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.
- package/README.md +232 -379
- package/agent-skills/.claude-plugin/plugin.json +105 -0
- package/{LICENSE → agent-skills/LICENSE} +1 -1
- package/agent-skills/README.md +146 -0
- package/agent-skills/SKILL.md +68 -0
- package/agent-skills/evals/README.md +20 -0
- package/agent-skills/evals/trigger-queries.json +194 -0
- package/agent-skills/package.json +49 -0
- package/agent-skills/packs/hive-build/SKILL.md +327 -0
- package/agent-skills/packs/hive-build/evals/evals.json +28 -0
- package/agent-skills/packs/hive-build-onboarding/SKILL.md +137 -0
- package/agent-skills/packs/hive-build-onboarding/evals/evals.json +27 -0
- package/agent-skills/packs/hive-cli/SKILL.md +141 -0
- package/agent-skills/packs/hive-cli/evals/evals.json +27 -0
- package/agent-skills/packs/hive-defi-research/SKILL.md +42 -0
- package/agent-skills/packs/hive-defi-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-defi-research/references/workflow.md +41 -0
- package/agent-skills/packs/hive-dex-pool-analysis/SKILL.md +41 -0
- package/agent-skills/packs/hive-dex-pool-analysis/evals/evals.json +27 -0
- package/agent-skills/packs/hive-dex-pool-analysis/references/workflow.md +42 -0
- package/agent-skills/packs/hive-market-research/SKILL.md +45 -0
- package/agent-skills/packs/hive-market-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-market-research/references/workflow.md +47 -0
- package/agent-skills/packs/hive-mcp/SKILL.md +224 -0
- package/agent-skills/packs/hive-mcp/evals/evals.json +38 -0
- package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +83 -0
- package/agent-skills/packs/hive-network-infrastructure/SKILL.md +44 -0
- package/agent-skills/packs/hive-network-infrastructure/evals/evals.json +27 -0
- package/agent-skills/packs/hive-network-infrastructure/references/workflow.md +41 -0
- package/agent-skills/packs/hive-nft-research/SKILL.md +41 -0
- package/agent-skills/packs/hive-nft-research/evals/evals.json +27 -0
- package/agent-skills/packs/hive-nft-research/references/workflow.md +42 -0
- package/agent-skills/packs/hive-prediction-markets/SKILL.md +44 -0
- package/agent-skills/packs/hive-prediction-markets/evals/evals.json +27 -0
- package/agent-skills/packs/hive-prediction-markets/references/workflow.md +42 -0
- package/agent-skills/packs/hive-query/SKILL.md +98 -0
- package/agent-skills/packs/hive-query/evals/evals.json +38 -0
- package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +54 -0
- package/agent-skills/packs/hive-security-risk/SKILL.md +42 -0
- package/agent-skills/packs/hive-security-risk/evals/evals.json +27 -0
- package/agent-skills/packs/hive-security-risk/references/workflow.md +46 -0
- package/agent-skills/packs/hive-solana-analysis/SKILL.md +42 -0
- package/agent-skills/packs/hive-solana-analysis/evals/evals.json +27 -0
- package/agent-skills/packs/hive-solana-analysis/references/workflow.md +42 -0
- package/agent-skills/packs/hive-token-diligence/SKILL.md +44 -0
- package/agent-skills/packs/hive-token-diligence/evals/evals.json +27 -0
- package/agent-skills/packs/hive-token-diligence/references/workflow.md +45 -0
- package/agent-skills/packs/hive-tool-discovery/SKILL.md +49 -0
- package/agent-skills/packs/hive-tool-discovery/evals/evals.json +38 -0
- package/agent-skills/packs/hive-tool-discovery/references/discovery-surfaces.md +62 -0
- package/agent-skills/packs/hive-wallet-investigation/SKILL.md +42 -0
- package/agent-skills/packs/hive-wallet-investigation/evals/evals.json +27 -0
- package/agent-skills/packs/hive-wallet-investigation/references/workflow.md +45 -0
- package/agent-skills/references/agents-routing.md +49 -0
- package/agent-skills/scripts/validate-agent-skills-package.mjs +178 -0
- package/agent-skills/skills.sh.json +40 -0
- package/bin/hive-mcp.js +33 -0
- package/build/{alias-INGXWFCG.js → alias-CZ3DEYHF.js} +3 -3
- package/build/api-client-I23XLSHU.js +28 -0
- package/build/auth-KKINNBXT.js +40 -0
- package/build/browser-auth-EEFGRHWY.js +9 -0
- package/build/{cache-US4LSZPI.js → cache-EGNMENNA.js} +3 -3
- package/build/chunk-2MYMHMBF.js +340 -0
- package/build/chunk-2MYMHMBF.js.map +1 -0
- package/build/chunk-2X3U4DFK.js +77369 -0
- package/build/chunk-2X3U4DFK.js.map +1 -0
- package/build/chunk-B6G222LS.js +265 -0
- package/build/chunk-B6G222LS.js.map +1 -0
- package/build/{chunk-WKVZVQTG.js → chunk-DYJBTKNR.js} +4 -4
- package/build/chunk-DYJBTKNR.js.map +1 -0
- package/build/chunk-IDZD2NVG.js +247 -0
- package/build/chunk-IDZD2NVG.js.map +1 -0
- package/build/chunk-IZTN7WFH.js +250 -0
- package/build/chunk-IZTN7WFH.js.map +1 -0
- package/build/{chunk-QMRVH5ZP.js → chunk-KBVPIZS4.js} +10 -2
- package/build/chunk-KGYBTXIN.js +86 -0
- package/build/chunk-KGYBTXIN.js.map +1 -0
- package/build/{chunk-CGXVV6WR.js → chunk-MPIUUE3T.js} +87 -105
- package/build/chunk-MPIUUE3T.js.map +1 -0
- package/build/chunk-PGBVNMNZ.js +127 -0
- package/build/chunk-PGBVNMNZ.js.map +1 -0
- package/build/chunk-QNCI4DEB.js +88 -0
- package/build/chunk-QNCI4DEB.js.map +1 -0
- package/build/chunk-RKICZ6DZ.js +497 -0
- package/build/chunk-RKICZ6DZ.js.map +1 -0
- package/build/chunk-UKHZIVDT.js +44 -0
- package/build/chunk-UKHZIVDT.js.map +1 -0
- package/build/{chunk-XQJ6PB2L.js → chunk-V77LO4RO.js} +1 -1
- package/build/chunk-V77LO4RO.js.map +1 -0
- package/build/{chunk-CP3FXEQA.js → chunk-XYBEFFZ3.js} +5 -6
- package/build/chunk-XYBEFFZ3.js.map +1 -0
- package/build/cli.js +133 -122
- package/build/cli.js.map +1 -1
- package/build/{completion-J6HFY6PS.js → completion-BELZL7ND.js} +55 -50
- package/build/completion-BELZL7ND.js.map +1 -0
- package/build/config-TDX4VUGW.js +58 -0
- package/build/{config-dir-IEOID7Q6.js → config-dir-V43W2WIA.js} +3 -3
- package/build/{doctor-7WZMCQC7.js → doctor-5K5UWHNX.js} +13 -13
- package/build/doctor-5K5UWHNX.js.map +1 -0
- package/build/{errors-U6UZWVSD.js → errors-E6MVUBNA.js} +3 -3
- package/build/format-TSFSI2K7.js +43 -0
- package/build/format-TSFSI2K7.js.map +1 -0
- package/build/{init-CAVIFVSH.js → init-YQ5NBICF.js} +2 -2
- package/build/init-all-6OWEQALB.js +274 -0
- package/build/init-all-6OWEQALB.js.map +1 -0
- package/build/mcpServer-AEX3RQ4U.js +20 -0
- package/build/mcpServer-AEX3RQ4U.js.map +1 -0
- package/build/{namespace-7JWWBWBL.js → namespace-PVHBFDW2.js} +3 -3
- package/build/namespace-PVHBFDW2.js.map +1 -0
- package/build/{open-FUXYIHFO.js → open-YUIJP37F.js} +6 -6
- package/build/open-YUIJP37F.js.map +1 -0
- package/build/{output-7PGQWJY2.js → output-IYJBFCYK.js} +3 -3
- package/build/output-IYJBFCYK.js.map +1 -0
- package/build/serve-KWNJK6EY.js +44 -0
- package/build/serve-KWNJK6EY.js.map +1 -0
- package/build/server.js +4749 -14124
- package/build/server.js.map +1 -1
- package/build/setup-YTUKMPNP.js +136 -0
- package/build/setup-YTUKMPNP.js.map +1 -0
- package/build/stdio.js +31 -0
- package/build/stdio.js.map +1 -0
- package/build/{telemetry-KNWMQURH.js → telemetry-5IPRKZBL.js} +4 -4
- package/build/telemetry-5IPRKZBL.js.map +1 -0
- package/build/{tools-VRRMBCZQ.js → tools-PJHWFCAG.js} +15 -15
- package/build/uninstall-HWXEIP6K.js +115 -0
- package/build/uninstall-HWXEIP6K.js.map +1 -0
- package/build/{watch-A75SVIQ6.js → watch-KZ5EDZK3.js} +7 -7
- package/package.json +118 -52
- package/bin/hive.js +0 -25
- package/build/auth-77MKFFBQ.js +0 -233
- package/build/auth-77MKFFBQ.js.map +0 -1
- package/build/chunk-CGXVV6WR.js.map +0 -1
- package/build/chunk-CP3FXEQA.js.map +0 -1
- package/build/chunk-DTUDM6HX.js +0 -3108
- package/build/chunk-DTUDM6HX.js.map +0 -1
- package/build/chunk-LBTLYTZS.js +0 -115
- package/build/chunk-LBTLYTZS.js.map +0 -1
- package/build/chunk-OK3LSM73.js +0 -22
- package/build/chunk-OK3LSM73.js.map +0 -1
- package/build/chunk-RRI526CJ.js +0 -212
- package/build/chunk-RRI526CJ.js.map +0 -1
- package/build/chunk-WKVZVQTG.js.map +0 -1
- package/build/chunk-XQJ6PB2L.js.map +0 -1
- package/build/completion-J6HFY6PS.js.map +0 -1
- package/build/config-ANFERP7A.js +0 -99
- package/build/config-ANFERP7A.js.map +0 -1
- package/build/doctor-7WZMCQC7.js.map +0 -1
- package/build/format-CVLLK6GD.js +0 -75
- package/build/format-CVLLK6GD.js.map +0 -1
- package/build/open-FUXYIHFO.js.map +0 -1
- package/build/version-3TZ3U4IR.js +0 -9
- /package/build/{alias-INGXWFCG.js.map → alias-CZ3DEYHF.js.map} +0 -0
- /package/build/{chunk-QMRVH5ZP.js.map → api-client-I23XLSHU.js.map} +0 -0
- /package/build/{config-dir-IEOID7Q6.js.map → auth-KKINNBXT.js.map} +0 -0
- /package/build/{errors-U6UZWVSD.js.map → browser-auth-EEFGRHWY.js.map} +0 -0
- /package/build/{cache-US4LSZPI.js.map → cache-EGNMENNA.js.map} +0 -0
- /package/build/{namespace-7JWWBWBL.js.map → chunk-KBVPIZS4.js.map} +0 -0
- /package/build/{output-7PGQWJY2.js.map → config-TDX4VUGW.js.map} +0 -0
- /package/build/{telemetry-KNWMQURH.js.map → config-dir-V43W2WIA.js.map} +0 -0
- /package/build/{version-3TZ3U4IR.js.map → errors-E6MVUBNA.js.map} +0 -0
- /package/build/{init-CAVIFVSH.js.map → init-YQ5NBICF.js.map} +0 -0
- /package/build/{tools-VRRMBCZQ.js.map → tools-PJHWFCAG.js.map} +0 -0
- /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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
206
|
-
tool: "
|
|
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: "
|
|
313
|
-
description: "
|
|
295
|
+
name: "social",
|
|
296
|
+
description: "Social media analytics \u2014 sentiment, influencers, trending topics",
|
|
314
297
|
commands: [
|
|
315
298
|
{
|
|
316
|
-
name: "
|
|
317
|
-
description: "
|
|
318
|
-
tool: "
|
|
299
|
+
name: "trending",
|
|
300
|
+
description: "Trending topics",
|
|
301
|
+
tool: "get_trending_topics"
|
|
319
302
|
},
|
|
320
303
|
{
|
|
321
|
-
name: "
|
|
322
|
-
description: "
|
|
323
|
-
tool: "
|
|
304
|
+
name: "metrics",
|
|
305
|
+
description: "Topic engagement metrics",
|
|
306
|
+
tool: "get_topic_metrics",
|
|
324
307
|
args: {
|
|
325
|
-
|
|
326
|
-
flag: "--
|
|
327
|
-
description: "
|
|
328
|
-
required:
|
|
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: "
|
|
334
|
-
description: "
|
|
335
|
-
tool: "
|
|
316
|
+
name: "creators",
|
|
317
|
+
description: "Top content creators",
|
|
318
|
+
tool: "get_topic_creators",
|
|
336
319
|
args: {
|
|
337
|
-
|
|
338
|
-
flag: "--
|
|
339
|
-
description: "
|
|
340
|
-
required:
|
|
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: "
|
|
346
|
-
description: "
|
|
347
|
-
tool: "
|
|
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
|
|
495
|
-
tool: "
|
|
496
|
+
description: "Token balances",
|
|
497
|
+
tool: "alchemy_get_tokens_by_wallet",
|
|
496
498
|
args: {
|
|
497
|
-
|
|
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: "
|
|
507
|
-
tool: "
|
|
509
|
+
description: "Asset transfers",
|
|
510
|
+
tool: "alchemy_get_asset_transfers",
|
|
508
511
|
args: {
|
|
509
|
-
|
|
512
|
+
fromAddress: {
|
|
510
513
|
flag: "--address <addr>",
|
|
511
|
-
description: "
|
|
514
|
+
description: "Sender wallet address",
|
|
512
515
|
required: true
|
|
513
516
|
},
|
|
514
|
-
|
|
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: "
|
|
523
|
+
tool: "moralis_get_wallet_history",
|
|
525
524
|
args: {
|
|
526
|
-
|
|
525
|
+
address: {
|
|
527
526
|
flag: "--address <addr>",
|
|
528
527
|
description: "Wallet address",
|
|
529
528
|
required: true
|
|
530
529
|
},
|
|
531
|
-
|
|
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: "
|
|
536
|
+
tool: "goplus_check_approval_security_v2",
|
|
542
537
|
args: {
|
|
543
|
-
|
|
538
|
+
address: {
|
|
544
539
|
flag: "--address <addr>",
|
|
545
540
|
description: "Wallet address",
|
|
546
541
|
required: true
|
|
547
542
|
},
|
|
548
|
-
|
|
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: "
|
|
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: "
|
|
604
|
-
tool: "
|
|
594
|
+
name: "block-number",
|
|
595
|
+
description: "Latest EVM block number",
|
|
596
|
+
tool: "tenderly_get_block_number",
|
|
605
597
|
args: {
|
|
606
|
-
|
|
607
|
-
flag: "--
|
|
608
|
-
description: "
|
|
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: "
|
|
608
|
+
tool: "moralis_resolve_ens_domain",
|
|
622
609
|
args: {
|
|
623
|
-
|
|
624
|
-
flag: "--
|
|
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-
|
|
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":[]}
|