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
package/package.json CHANGED
@@ -1,97 +1,163 @@
1
1
  {
2
2
  "name": "hive-intelligence",
3
- "version": "1.1.2",
4
- "description": "Institutional-grade crypto market infrastructure for AI agents 376+ tools across 10 categories from CoinGecko, DefiLlama, Moralis, GoldRush, Codex, GoPlus, Helius, Tenderly, and CCXT. MCP server + CLI for Claude Desktop, Cursor, ChatGPT, VS Code, Windsurf, and Gemini.",
3
+ "version": "1.1.3",
4
+ "description": "Crypto MCP server and CLI for AI agents: 351 tools for market data, wallets, DeFi, DEX, NFTs, token risk, Solana, and prediction markets.",
5
+ "mcpName": "io.github.sharpe-labs/hive-mcp",
5
6
  "type": "module",
7
+ "workspaces": [
8
+ "agent-skills",
9
+ "packages/*"
10
+ ],
6
11
  "scripts": {
7
- "build": "tsup && chmod 755 build/server.js build/cli.js",
12
+ "build": "tsup && chmod 755 build/server.js build/stdio.js build/cli.js",
13
+ "build:client": "npm --workspace @hiveintelligence/mcp-client run build",
14
+ "check": "npm run build && npm run typecheck && npm run env:render:check && npx tsx scripts/verify-tools.ts && npm run verify:toolsets && npm run verify:agent-skills && npm run measure-tokens -- --threshold=10000 && npm run test:unit && npm run test:mcp-compliance && npm run test:audit",
15
+ "typecheck": "tsc --noEmit",
8
16
  "prepare": "npm run build",
9
- "prepublishOnly": "npm run build",
10
- "inspector": "npx @modelcontextprotocol/inspector node build/server.js",
11
- "start": "node build/server.js"
17
+ "prepublishOnly": "npm run check",
18
+ "inspector": "npx @modelcontextprotocol/inspector --cli --config '{\"mcpServers\":{\"hive\":{\"url\":\"http://localhost:8080/mcp\"}}}'",
19
+ "start:http": "tsx src/server.ts",
20
+ "dev:http": "tsx src/server.ts",
21
+ "start": "cross-env SERVER_MODE=MCP tsx src/stdio.ts",
22
+ "dev": "cross-env SERVER_MODE=MCP tsx src/stdio.ts",
23
+ "test": "vitest run",
24
+ "test:client": "npm --workspace @hiveintelligence/mcp-client run test",
25
+ "test:watch": "vitest",
26
+ "test:coverage": "vitest run --coverage",
27
+ "test:unit": "vitest run tests/unit",
28
+ "test:all": "vitest run",
29
+ "test:api": "vitest run tests/api",
30
+ "test:mcp": "vitest run tests/mcp",
31
+ "test:audit": "vitest run tests/audit",
32
+ "test:e2e": "vitest run tests/e2e",
33
+ "test:e2e:defillama": "vitest run tests/e2e/defillama-e2e.test.ts",
34
+ "test:integration": "vitest run tests/integration",
35
+ "test:live": "vitest run tests/live",
36
+ "test:production": "npm run test:audit && npm run test:e2e && npm run test:integration",
37
+ "test:mcp-compliance": "vitest run tests/mcp-compliance",
38
+ "test:docker": "npm run test:docker:production",
39
+ "test:docker:unit": "docker compose -f tests/docker/docker-compose.test.yml run --rm hive-test npm run test:unit",
40
+ "test:docker:e2e": "docker compose -f tests/docker/docker-compose.e2e.yml up --build --abort-on-container-exit",
41
+ "test:production-readiness": "vitest run tests/docker/production-readiness.test.ts",
42
+ "test:full-e2e": "vitest run tests/docker/full-e2e.test.ts",
43
+ "test:docker:production": "sh tests/docker/run-production-readiness.sh",
44
+ "test:docker:full-e2e": "docker compose -f tests/docker/docker-compose.production.yml run --rm -e HIVE_SERVER_URL=http://hive-server:8080 hive-production-test npm run test:full-e2e",
45
+ "test:docker:live": "docker compose -f tests/docker/docker-compose.test.yml run --rm hive-test npm run test:live",
46
+ "test:docker:compliance": "docker compose -f tests/docker/docker-compose.test.yml run --rm hive-test npm run test:mcp-compliance",
47
+ "test:docker:down": "docker compose -f tests/docker/docker-compose.test.yml down -v && docker compose -f tests/docker/docker-compose.e2e.yml down -v",
48
+ "measure-tokens": "tsx scripts/measure-token-cost.ts",
49
+ "env:render": "tsx scripts/env-render.ts",
50
+ "env:render:check": "tsx scripts/env-render.ts --check",
51
+ "env:sync": "tsx scripts/env-sync.ts",
52
+ "env:flags": "tsx scripts/env-deploy-flags.ts",
53
+ "env:drift": "tsx scripts/env-drift-check.ts",
54
+ "env:migrate": "tsx scripts/env-migrate.ts",
55
+ "verify:toolsets": "tsx scripts/verify-toolsets.ts",
56
+ "verify:agent-skills": "tsx scripts/verify-agent-skills.ts && npm --workspace @hiveintelligence/agent-skills run validate",
57
+ "export:toolsets": "tsx scripts/export-task-toolsets.ts",
58
+ "canary:toolsets": "tsx scripts/run-task-canaries.ts",
59
+ "canary:discovery": "tsx scripts/check-public-discovery.ts"
12
60
  },
13
61
  "keywords": [
14
62
  "mcp",
15
- "model-context-protocol",
16
63
  "mcp-server",
17
- "ai-agents",
18
- "ai-tools",
19
- "claude",
20
- "claude-desktop",
21
- "claude-code",
22
- "cursor",
23
- "chatgpt",
24
- "anthropic",
25
- "openai",
64
+ "model-context-protocol",
26
65
  "crypto",
27
- "cryptocurrency",
28
- "blockchain",
66
+ "crypto-mcp",
29
67
  "defi",
30
- "web3",
31
- "on-chain",
32
- "wallet",
33
- "wallet-tracker",
34
- "nft",
35
- "dex",
36
- "dex-aggregator",
37
- "prediction-markets",
38
- "polymarket",
39
- "security",
40
- "rugpull-detection",
41
- "honeypot-detection",
68
+ "blockchain",
69
+ "ethereum",
70
+ "evm",
71
+ "solana",
42
72
  "coingecko",
43
73
  "defillama",
44
74
  "moralis",
45
- "goldrush",
46
75
  "helius",
47
76
  "goplus",
48
- "codex",
49
77
  "tenderly",
50
- "ccxt",
51
- "ethereum",
52
- "solana",
53
- "bitcoin",
54
- "cli"
78
+ "wallet",
79
+ "security",
80
+ "dex",
81
+ "nft",
82
+ "prediction-markets",
83
+ "ai-tools",
84
+ "ai-agents",
85
+ "llm",
86
+ "claude",
87
+ "cursor",
88
+ "chatgpt",
89
+ "codex",
90
+ "stdio",
91
+ "streamable-http",
92
+ "rest-api"
55
93
  ],
56
94
  "author": "Hive Intelligence",
57
95
  "license": "MIT",
58
96
  "repository": {
59
97
  "type": "git",
60
- "url": "https://github.com/hive-intel/hive-crypto-mcp"
98
+ "url": "git+https://github.com/sharpe-labs/hive-mcp2.git"
61
99
  },
62
100
  "homepage": "https://hiveintelligence.xyz",
63
101
  "bugs": {
64
- "url": "https://github.com/hive-intel/hive-crypto-mcp/issues"
102
+ "url": "https://github.com/sharpe-labs/hive-mcp2/issues"
65
103
  },
66
104
  "engines": {
67
105
  "node": ">=20.0.0"
68
106
  },
69
107
  "dependencies": {
70
108
  "@cloudflare/cabidela": "^0.2.4",
71
- "@modelcontextprotocol/sdk": "1.13.0",
109
+ "@codex-data/sdk": "2.3.2",
110
+ "@coingecko/coingecko-typescript": "3.1.6",
111
+ "@modelcontextprotocol/sdk": "1.29.0",
112
+ "@supabase/supabase-js": "^2.104.1",
113
+ "@types/compression": "^1.8.1",
114
+ "@unkey/api": "2.3.3",
115
+ "axios": "^1.15.2",
116
+ "ccxt": "4.5.50",
72
117
  "commander": "^14.0.3",
73
- "cors": "^2.8.5",
74
- "dotenv": "^16.5.0",
75
- "express": "^5.1.0",
118
+ "compression": "^1.8.1",
119
+ "cors": "2.8.6",
120
+ "dotenv": "17.4.2",
121
+ "express": "4.22.1",
122
+ "express-rate-limit": "7.5.1",
76
123
  "fastest-levenshtein": "^1.0.16",
77
- "ora": "8"
124
+ "graphql": "16.13.2",
125
+ "helmet": "^8.1.0",
126
+ "ioredis": "5.10.1",
127
+ "ora": "9.4.0",
128
+ "rate-limit-redis": "4.3.1",
129
+ "tsx": "4.21.0",
130
+ "winston": "3.19.0",
131
+ "zod": "^4.3.6"
132
+ },
133
+ "overrides": {
134
+ "@modelcontextprotocol/sdk": {
135
+ "express-rate-limit": "8.5.1"
136
+ },
137
+ "fast-uri": "3.1.2",
138
+ "hono": "4.12.18",
139
+ "ip-address": "10.2.0"
78
140
  },
79
141
  "devDependencies": {
80
142
  "@types/cors": "^2.8.17",
81
- "@types/express": "^5.0.3",
82
- "@types/node": "^20.0.0",
83
- "tsup": "^8.5.0",
84
- "tsx": "^4.0.0",
85
- "typescript": "^5.8.3",
86
- "winston": "^3.11.0"
143
+ "@types/express": "4.17.25",
144
+ "@types/node": "^22.0.0",
145
+ "@vitest/coverage-v8": "4.1.5",
146
+ "cross-env": "10.1.0",
147
+ "tsup": "8.5.1",
148
+ "typescript": "^5.9.3",
149
+ "vitest": "^4.1.5"
87
150
  },
88
151
  "bin": {
89
- "hive-intelligence": "./build/server.js",
90
- "hive": "./bin/hive.js"
152
+ "hive": "bin/hive-mcp.js",
153
+ "hive-intelligence": "bin/hive-mcp.js",
154
+ "hive-mcp": "bin/hive-mcp.js",
155
+ "hive-mcp-server": "bin/hive-mcp.js"
91
156
  },
92
157
  "files": [
93
158
  "bin/**/*",
94
159
  "build/**/*",
160
+ "agent-skills/**/*",
95
161
  "README.md",
96
162
  "LICENSE"
97
163
  ]
package/bin/hive.js DELETED
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const major = parseInt(process.versions.node.split(".")[0], 10);
4
- if (major < 20) {
5
- process.stderr.write(
6
- `Error: hive requires Node.js 20 or later (found ${process.versions.node}).\n`,
7
- );
8
- process.exit(1);
9
- }
10
-
11
- import { dirname, join } from "node:path";
12
- import { fileURLToPath } from "node:url";
13
- import { existsSync } from "node:fs";
14
-
15
- const __dirname = dirname(fileURLToPath(import.meta.url));
16
- const cliPath = join(__dirname, "..", "build", "cli.js");
17
-
18
- if (!existsSync(cliPath)) {
19
- process.stderr.write(
20
- "Error: build/cli.js not found. Run `npm run build` first.\n",
21
- );
22
- process.exit(1);
23
- }
24
-
25
- await import(cliPath);
@@ -1,233 +0,0 @@
1
- import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
- import {
3
- ensureConfigDir,
4
- getConfig,
5
- getCredentials,
6
- saveConfig,
7
- saveCredentials
8
- } from "./chunk-XQJ6PB2L.js";
9
- import "./chunk-QMRVH5ZP.js";
10
-
11
- // src/cli/auth.ts
12
- import { createInterface } from "readline";
13
- function maskKey(key) {
14
- if (!key) return "(empty)";
15
- const visible = Math.min(8, key.length - 1);
16
- return key.slice(0, visible) + "...";
17
- }
18
- function saveProfile(name, apiKey, apiUrl) {
19
- ensureConfigDir();
20
- const creds = getCredentials();
21
- creds.profiles[name] = {
22
- apiKey,
23
- apiUrl,
24
- createdAt: (/* @__PURE__ */ new Date()).toISOString()
25
- };
26
- saveCredentials(creds);
27
- const config = getConfig();
28
- config.activeProfile = name;
29
- saveConfig(config);
30
- }
31
- function removeProfile(name) {
32
- const creds = getCredentials();
33
- delete creds.profiles[name];
34
- saveCredentials(creds);
35
- const config = getConfig();
36
- if (config.activeProfile === name) {
37
- const remaining = Object.keys(creds.profiles);
38
- config.activeProfile = remaining[0] ?? "default";
39
- saveConfig(config);
40
- }
41
- }
42
- function getActiveProfile() {
43
- const config = getConfig();
44
- const creds = getCredentials();
45
- const profile = creds.profiles[config.activeProfile];
46
- if (!profile) return null;
47
- return { name: config.activeProfile, ...profile, isActive: true };
48
- }
49
- function listProfiles() {
50
- const config = getConfig();
51
- const creds = getCredentials();
52
- return Object.entries(creds.profiles).map(([name, p]) => ({
53
- name,
54
- ...p,
55
- isActive: name === config.activeProfile
56
- }));
57
- }
58
- function switchProfile(name) {
59
- const creds = getCredentials();
60
- if (!creds.profiles[name]) {
61
- throw new Error(`Profile "${name}" not found`);
62
- }
63
- const config = getConfig();
64
- config.activeProfile = name;
65
- saveConfig(config);
66
- }
67
- var ask = (rl, q) => new Promise((resolve) => rl.question(q, resolve));
68
- function askSecret(prompt) {
69
- if (!process.stdin.isTTY) {
70
- const rl = createInterface({
71
- input: process.stdin,
72
- output: process.stderr
73
- });
74
- return new Promise(
75
- (resolve) => rl.question(prompt, (ans) => {
76
- rl.close();
77
- resolve(ans);
78
- })
79
- );
80
- }
81
- return new Promise((resolve) => {
82
- process.stderr.write(prompt);
83
- const chunks = [];
84
- const stdin = process.stdin;
85
- const wasRaw = stdin.isRaw;
86
- if (typeof stdin.setRawMode === "function") {
87
- stdin.setRawMode(true);
88
- }
89
- stdin.resume();
90
- stdin.setEncoding("utf-8");
91
- const onData = (ch) => {
92
- const c = ch.toString();
93
- if (c === "\n" || c === "\r" || c === "") {
94
- stdin.removeListener("data", onData);
95
- if (typeof stdin.setRawMode === "function") {
96
- stdin.setRawMode(wasRaw ?? false);
97
- }
98
- stdin.pause();
99
- process.stderr.write("\n");
100
- resolve(chunks.join(""));
101
- } else if (c === "") {
102
- process.exit(130);
103
- } else if (c === "\x7F" || c === "\b") {
104
- if (chunks.length > 0) {
105
- chunks.pop();
106
- process.stderr.write("\b \b");
107
- }
108
- } else {
109
- chunks.push(c);
110
- process.stderr.write("*");
111
- }
112
- };
113
- stdin.on("data", onData);
114
- });
115
- }
116
- async function runLogin(opts) {
117
- const profileName = opts.profile ?? "default";
118
- process.stderr.write(`
119
- Hive CLI \u2014 Login (profile: ${profileName})
120
-
121
- `);
122
- const keyInput = await askSecret("API Key: ");
123
- const apiKey = keyInput.trim();
124
- if (!apiKey) {
125
- process.stderr.write("No API key provided. Aborting.\n");
126
- process.exit(1);
127
- }
128
- const rl = createInterface({ input: process.stdin, output: process.stderr });
129
- const urlInput = await ask(
130
- rl,
131
- `API URL [https://mcp.hiveintelligence.xyz]: `
132
- );
133
- rl.close();
134
- const apiUrl = urlInput.trim() || "https://mcp.hiveintelligence.xyz";
135
- process.stderr.write(`
136
- Validating against ${apiUrl}...
137
- `);
138
- try {
139
- const controller = new AbortController();
140
- const timer = setTimeout(() => controller.abort(), 1e4);
141
- const resp = await fetch(`${apiUrl}/ping`, {
142
- headers: { Authorization: `Bearer ${apiKey}` },
143
- signal: controller.signal
144
- });
145
- clearTimeout(timer);
146
- if (resp.ok) {
147
- process.stderr.write("Key validated successfully.\n");
148
- } else if (resp.status === 401 || resp.status === 403) {
149
- process.stderr.write(
150
- `Warning: Server returned ${resp.status} \u2014 key may be invalid.
151
- `
152
- );
153
- } else {
154
- process.stderr.write(`Warning: Server returned ${resp.status}.
155
- `);
156
- }
157
- } catch {
158
- process.stderr.write("Warning: Could not reach server \u2014 saving anyway.\n");
159
- }
160
- saveProfile(profileName, apiKey, apiUrl);
161
- process.stderr.write(
162
- `
163
- Profile "${profileName}" saved. Key: ${maskKey(apiKey)}
164
- `
165
- );
166
- }
167
- async function runLogout() {
168
- const config = getConfig();
169
- const profile = config.activeProfile;
170
- removeProfile(profile);
171
- process.stderr.write(`Logged out of profile "${profile}".
172
- `);
173
- }
174
- async function runWhoami() {
175
- const profile = getActiveProfile();
176
- if (!profile) {
177
- process.stderr.write("Not logged in. Run: hive auth login\n");
178
- return;
179
- }
180
- process.stderr.write(
181
- `
182
- Profile: ${profile.name}${profile.isActive ? " (active)" : ""}
183
- `
184
- );
185
- process.stderr.write(`API Key: ${maskKey(profile.apiKey)}
186
- `);
187
- process.stderr.write(`API URL: ${profile.apiUrl}
188
- `);
189
- process.stderr.write(`Created: ${profile.createdAt}
190
-
191
- `);
192
- }
193
- async function runProfiles() {
194
- const profiles = listProfiles();
195
- if (profiles.length === 0) {
196
- process.stderr.write("No profiles configured. Run: hive auth login\n");
197
- return;
198
- }
199
- for (const p of profiles) {
200
- const marker = p.isActive ? " *" : "";
201
- process.stderr.write(
202
- ` ${p.name}${marker} ${maskKey(p.apiKey)} ${p.apiUrl}
203
- `
204
- );
205
- }
206
- process.stderr.write("\n");
207
- }
208
- async function runSwitch(name) {
209
- try {
210
- switchProfile(name);
211
- process.stderr.write(`Switched to profile "${name}".
212
- `);
213
- } catch (err) {
214
- process.stderr.write(
215
- (err instanceof Error ? err.message : String(err)) + "\n"
216
- );
217
- process.exit(1);
218
- }
219
- }
220
- export {
221
- getActiveProfile,
222
- listProfiles,
223
- maskKey,
224
- removeProfile,
225
- runLogin,
226
- runLogout,
227
- runProfiles,
228
- runSwitch,
229
- runWhoami,
230
- saveProfile,
231
- switchProfile
232
- };
233
- //# sourceMappingURL=auth-77MKFFBQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/auth.ts"],"sourcesContent":["import { createInterface } from \"node:readline\";\nimport {\n ensureConfigDir,\n getConfig,\n saveConfig,\n getCredentials,\n saveCredentials,\n} from \"./config-dir.js\";\n\ninterface ProfileInfo {\n name: string;\n apiKey: string;\n apiUrl: string;\n createdAt: string;\n isActive: boolean;\n}\n\nexport function maskKey(key: string): string {\n if (!key) return \"(empty)\";\n const visible = Math.min(8, key.length - 1);\n return key.slice(0, visible) + \"...\";\n}\n\nexport function saveProfile(\n name: string,\n apiKey: string,\n apiUrl: string,\n): void {\n ensureConfigDir();\n const creds = getCredentials();\n creds.profiles[name] = {\n apiKey,\n apiUrl,\n createdAt: new Date().toISOString(),\n };\n saveCredentials(creds);\n const config = getConfig();\n config.activeProfile = name;\n saveConfig(config);\n}\n\nexport function removeProfile(name: string): void {\n const creds = getCredentials();\n delete creds.profiles[name];\n saveCredentials(creds);\n const config = getConfig();\n if (config.activeProfile === name) {\n const remaining = Object.keys(creds.profiles);\n config.activeProfile = remaining[0] ?? \"default\";\n saveConfig(config);\n }\n}\n\nexport function getActiveProfile(): ProfileInfo | null {\n const config = getConfig();\n const creds = getCredentials();\n const profile = creds.profiles[config.activeProfile];\n if (!profile) return null;\n return { name: config.activeProfile, ...profile, isActive: true };\n}\n\nexport function listProfiles(): ProfileInfo[] {\n const config = getConfig();\n const creds = getCredentials();\n return Object.entries(creds.profiles).map(([name, p]) => ({\n name,\n ...p,\n isActive: name === config.activeProfile,\n }));\n}\n\nexport function switchProfile(name: string): void {\n const creds = getCredentials();\n if (!creds.profiles[name]) {\n throw new Error(`Profile \"${name}\" not found`);\n }\n const config = getConfig();\n config.activeProfile = name;\n saveConfig(config);\n}\n\nconst ask = (\n rl: ReturnType<typeof createInterface>,\n q: string,\n): Promise<string> => new Promise((resolve) => rl.question(q, resolve));\n\n/** Prompt for sensitive input with echo suppressed (shows asterisks) */\nfunction askSecret(prompt: string): Promise<string> {\n // Non-TTY: fall back to regular readline (no masking possible)\n if (!process.stdin.isTTY) {\n const rl = createInterface({\n input: process.stdin,\n output: process.stderr,\n });\n return new Promise((resolve) =>\n rl.question(prompt, (ans) => {\n rl.close();\n resolve(ans);\n }),\n );\n }\n\n return new Promise((resolve) => {\n process.stderr.write(prompt);\n const chunks: string[] = [];\n const stdin = process.stdin;\n const wasRaw = stdin.isRaw;\n\n if (typeof stdin.setRawMode === \"function\") {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.setEncoding(\"utf-8\");\n\n const onData = (ch: string) => {\n const c = ch.toString();\n if (c === \"\\n\" || c === \"\\r\" || c === \"\\u0004\") {\n stdin.removeListener(\"data\", onData);\n if (typeof stdin.setRawMode === \"function\") {\n stdin.setRawMode(wasRaw ?? false);\n }\n stdin.pause();\n process.stderr.write(\"\\n\");\n resolve(chunks.join(\"\"));\n } else if (c === \"\\u0003\") {\n // Ctrl+C\n process.exit(130);\n } else if (c === \"\\u007f\" || c === \"\\b\") {\n // Backspace\n if (chunks.length > 0) {\n chunks.pop();\n process.stderr.write(\"\\b \\b\");\n }\n } else {\n chunks.push(c);\n process.stderr.write(\"*\");\n }\n };\n\n stdin.on(\"data\", onData);\n });\n}\n\nexport async function runLogin(opts: { profile?: string }): Promise<void> {\n const profileName = opts.profile ?? \"default\";\n process.stderr.write(`\\nHive CLI — Login (profile: ${profileName})\\n\\n`);\n\n const keyInput = await askSecret(\"API Key: \");\n const apiKey = keyInput.trim();\n if (!apiKey) {\n process.stderr.write(\"No API key provided. Aborting.\\n\");\n process.exit(1);\n }\n\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n const urlInput = await ask(\n rl,\n `API URL [https://mcp.hiveintelligence.xyz]: `,\n );\n rl.close();\n const apiUrl =\n urlInput.trim() ||\n \"https://mcp.hiveintelligence.xyz\";\n\n process.stderr.write(`\\nValidating against ${apiUrl}...\\n`);\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 10000);\n const resp = await fetch(`${apiUrl}/ping`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n signal: controller.signal,\n });\n clearTimeout(timer);\n if (resp.ok) {\n process.stderr.write(\"Key validated successfully.\\n\");\n } else if (resp.status === 401 || resp.status === 403) {\n process.stderr.write(\n `Warning: Server returned ${resp.status} — key may be invalid.\\n`,\n );\n } else {\n process.stderr.write(`Warning: Server returned ${resp.status}.\\n`);\n }\n } catch {\n process.stderr.write(\"Warning: Could not reach server — saving anyway.\\n\");\n }\n\n saveProfile(profileName, apiKey, apiUrl);\n process.stderr.write(\n `\\nProfile \"${profileName}\" saved. Key: ${maskKey(apiKey)}\\n`,\n );\n}\n\nexport async function runLogout(): Promise<void> {\n const config = getConfig();\n const profile = config.activeProfile;\n removeProfile(profile);\n process.stderr.write(`Logged out of profile \"${profile}\".\\n`);\n}\n\nexport async function runWhoami(): Promise<void> {\n const profile = getActiveProfile();\n if (!profile) {\n process.stderr.write(\"Not logged in. Run: hive auth login\\n\");\n return;\n }\n process.stderr.write(\n `\\nProfile: ${profile.name}${profile.isActive ? \" (active)\" : \"\"}\\n`,\n );\n process.stderr.write(`API Key: ${maskKey(profile.apiKey)}\\n`);\n process.stderr.write(`API URL: ${profile.apiUrl}\\n`);\n process.stderr.write(`Created: ${profile.createdAt}\\n\\n`);\n}\n\nexport async function runProfiles(): Promise<void> {\n const profiles = listProfiles();\n if (profiles.length === 0) {\n process.stderr.write(\"No profiles configured. Run: hive auth login\\n\");\n return;\n }\n for (const p of profiles) {\n const marker = p.isActive ? \" *\" : \"\";\n process.stderr.write(\n ` ${p.name}${marker} ${maskKey(p.apiKey)} ${p.apiUrl}\\n`,\n );\n }\n process.stderr.write(\"\\n\");\n}\n\nexport async function runSwitch(name: string): Promise<void> {\n try {\n switchProfile(name);\n process.stderr.write(`Switched to profile \"${name}\".\\n`);\n } catch (err) {\n process.stderr.write(\n (err instanceof Error ? err.message : String(err)) + \"\\n\",\n );\n process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
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 name: \"gas\",\n description: \"Gas prices by chain\",\n tool: \"goldrush_get_gas_prices\",\n args: {\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\n required: true,\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_balances\",\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: \"goldrush_get_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: \"moralis_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: \"Portfolio value history\",\n tool: \"goldrush_get_portfolio_history\",\n args: {\n walletAddress: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\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: \"prediction\",\n description:\n \"Prediction markets — events, traders, outcomes (Polymarket, Kalshi)\",\n commands: [\n {\n name: \"categories\",\n description: \"Prediction market categories\",\n tool: \"codex_prediction_categories\",\n },\n {\n name: \"events\",\n description: \"Filter prediction events\",\n tool: \"codex_filter_prediction_events\",\n args: {\n phrase: {\n flag: \"--query <text>\",\n description: \"Search phrase\",\n required: false,\n },\n },\n },\n {\n name: \"markets\",\n description: \"Filter prediction markets\",\n tool: \"codex_filter_prediction_markets\",\n args: {\n phrase: {\n flag: \"--query <text>\",\n description: \"Search phrase\",\n required: false,\n },\n },\n },\n {\n name: \"traders\",\n description: \"Top prediction market traders\",\n tool: \"codex_filter_prediction_traders\",\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 across chains\",\n tool: \"goldrush_get_multichain_balances\",\n args: {\n walletAddress: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n },\n },\n {\n name: \"transfers\",\n description: \"ERC-20 transfers\",\n tool: \"goldrush_get_erc20_transfers\",\n args: {\n walletAddress: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\n required: true,\n },\n },\n },\n {\n name: \"transactions\",\n description: \"Recent transactions\",\n tool: \"goldrush_get_transactions_latest\",\n args: {\n walletAddress: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\n required: true,\n },\n },\n },\n {\n name: \"approvals\",\n description: \"Token approval audit\",\n tool: \"goldrush_get_token_approvals\",\n args: {\n walletAddress: {\n flag: \"--address <addr>\",\n description: \"Wallet address\",\n required: true,\n },\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\n required: true,\n },\n },\n },\n ],\n },\n {\n name: \"nft\",\n description: \"NFT analytics — collections, markets, holders\",\n commands: [\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: \"goldrush_get_chains\",\n },\n {\n name: \"gas\",\n description: \"Gas prices\",\n tool: \"goldrush_get_gas_prices\",\n args: {\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\n required: true,\n },\n },\n },\n {\n name: \"block\",\n description: \"Block data\",\n tool: \"goldrush_get_block\",\n args: {\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\n required: true,\n },\n blockHeight: {\n flag: \"--height <n>\",\n description: \"Block height\",\n required: true,\n },\n },\n },\n {\n name: \"resolve\",\n description: \"Resolve ENS/DNS name\",\n tool: \"goldrush_resolve_address\",\n args: {\n chainName: {\n flag: \"--chain <name>\",\n description: \"Chain name\",\n required: true,\n },\n walletAddress: {\n flag: \"--address <addr>\",\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":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/jq.ts","../src/cli/output.ts"],"sourcesContent":["/**\n * Minimal jq-like evaluator for CLI --jq flag.\n * Supports: .field, .a.b, .[N], .[] | .field, .[] | select(.field op val)\n */\nexport function jqEval(data: unknown, expr: string): unknown {\n const trimmed = expr.trim();\n if (trimmed === \".\") return data;\n\n // Handle pipe: split on \" | \" and chain\n if (trimmed.includes(\" | \")) {\n const parts = trimmed.split(\" | \");\n let result = data;\n for (const part of parts) {\n result = jqEval(result, part.trim());\n }\n return result;\n }\n\n // Handle select(.field op value)\n const selectMatch = trimmed.match(\n /^select\\(\\.(\\w[\\w.]*)\\s*(>|<|>=|<=|==|!=)\\s*(.+)\\)$/,\n );\n if (selectMatch) {\n const [, field, op, rawVal] = selectMatch;\n if (!Array.isArray(data)) return data;\n const val = parseValue(rawVal);\n return data.filter((item) => {\n const fieldVal = extractPath(item, field);\n return compare(fieldVal, op, val);\n });\n }\n\n // If data is an array and expression is a plain field access, map over elements.\n // Exclude bracket expressions like .[1] or .[] to avoid false-positive mapping.\n if (\n Array.isArray(data) &&\n trimmed.startsWith(\".\") &&\n !trimmed.includes(\"[\")\n ) {\n const path = trimmed.slice(1);\n if (path && !path.includes(\" \")) {\n return data.map((item) => extractPath(item, path));\n }\n }\n\n // Handle .[] (iterate array)\n if (trimmed === \".[]\") {\n if (Array.isArray(data)) return data;\n if (typeof data === \"object\" && data !== null) return Object.values(data);\n return data;\n }\n\n // Handle .[N] (array index)\n const indexMatch = trimmed.match(/^\\.\\[(\\d+)\\]$/);\n if (indexMatch) {\n const idx = parseInt(indexMatch[1], 10);\n if (Array.isArray(data)) return data[idx];\n return undefined;\n }\n\n // Handle .field or .a.b.c — may include .[] in path\n if (trimmed.startsWith(\".\")) {\n const path = trimmed.slice(1);\n return extractPath(data, path);\n }\n\n return extractPath(data, trimmed);\n}\n\nfunction extractPath(data: unknown, path: string): unknown {\n if (!path) return data;\n\n const parts: string[] = [];\n let current = \"\";\n for (let i = 0; i < path.length; i++) {\n if (path[i] === \".\" && path[i + 1] === \"[\" && path[i + 2] === \"]\") {\n if (current) parts.push(current);\n parts.push(\"[]\");\n current = \"\";\n i += 2;\n } else if (path[i] === \".\" && current) {\n parts.push(current);\n current = \"\";\n } else if (path[i] !== \".\" || current) {\n current += path[i];\n }\n }\n if (current) parts.push(current);\n\n let result: unknown = data;\n for (const part of parts) {\n if (result == null) return undefined;\n if (part === \"[]\") {\n if (Array.isArray(result)) return result;\n return undefined;\n }\n if (typeof result === \"object\" && result !== null) {\n result = (result as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return result;\n}\n\nfunction parseValue(raw: string): string | number | boolean {\n const trimmed = raw.trim();\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (/^\".*\"$/.test(trimmed)) return trimmed.slice(1, -1);\n const num = Number(trimmed);\n if (!isNaN(num)) return num;\n return trimmed;\n}\n\nfunction compare(a: unknown, op: string, b: unknown): boolean {\n switch (op) {\n case \"==\":\n return a === b;\n case \"!=\":\n return a !== b;\n case \">\":\n return typeof a === \"number\" && typeof b === \"number\" && a > b;\n case \"<\":\n return typeof a === \"number\" && typeof b === \"number\" && a < b;\n case \">=\":\n return typeof a === \"number\" && typeof b === \"number\" && a >= b;\n case \"<=\":\n return typeof a === \"number\" && typeof b === \"number\" && a <= b;\n default:\n return false;\n }\n}\n","import { CliError, type ErrorCode } from \"./errors.js\";\nimport { jqEval } from \"./jq.js\";\n\n// SIGPIPE — clean exit when piping to `head`, `less`, etc.\nprocess.on(\"SIGPIPE\", () => process.exit(0));\n\n/** Global output options set from CLI flags. */\nexport interface OutputOptions {\n json?: boolean;\n pretty?: boolean;\n fields?: string;\n quiet?: boolean;\n verbose?: boolean;\n noColor?: boolean;\n jq?: string;\n csv?: boolean;\n}\n\nlet globalOpts: OutputOptions = {};\n\nexport function setOutputOptions(opts: OutputOptions): void {\n globalOpts = opts;\n}\n\n/** Whether to emit JSON (non-TTY default, or --json flag). */\nexport function shouldOutputJson(): boolean {\n if (globalOpts.json) return true;\n if (globalOpts.pretty) return false;\n return !process.stdout.isTTY;\n}\n\n/** Whether color is enabled. */\nexport function colorEnabled(): boolean {\n if (globalOpts.noColor) return false;\n if (process.env.NO_COLOR) return false;\n if (process.env.FORCE_COLOR) return true;\n return !!process.stdout.isTTY;\n}\n\n/** Apply ANSI color if enabled. */\nexport function red(s: string): string {\n return colorEnabled() ? `\\x1b[31m${s}\\x1b[0m` : s;\n}\nexport function green(s: string): string {\n return colorEnabled() ? `\\x1b[32m${s}\\x1b[0m` : s;\n}\nexport function yellow(s: string): string {\n return colorEnabled() ? `\\x1b[33m${s}\\x1b[0m` : s;\n}\nexport function dim(s: string): string {\n return colorEnabled() ? `\\x1b[2m${s}\\x1b[0m` : s;\n}\nexport function bold(s: string): string {\n return colorEnabled() ? `\\x1b[1m${s}\\x1b[0m` : s;\n}\n\n/** The standard envelope for all CLI output. */\nexport interface Envelope<T = unknown> {\n ok: boolean;\n data?: T;\n error?: {\n code: ErrorCode;\n message: string;\n suggestion?: string;\n };\n meta: {\n tool?: string;\n provider?: string;\n duration_ms?: number;\n };\n}\n\n/** Build a success envelope. */\nexport function successEnvelope<T>(\n data: T,\n meta: Envelope[\"meta\"],\n): Envelope<T> {\n return { ok: true, data, meta };\n}\n\n/** Build an error envelope. */\nexport function errorEnvelope(err: CliError, meta: Envelope[\"meta\"]): Envelope {\n return {\n ok: false,\n error: {\n code: err.code,\n message: err.message,\n ...(err.suggestion && { suggestion: err.suggestion }),\n },\n meta,\n };\n}\n\n/** Apply --fields filtering to data. */\nfunction applyFields<T>(data: T, fields: string | undefined): T {\n if (!fields) return data;\n const keys = fields.split(\",\").map((f) => f.trim());\n if (Array.isArray(data)) {\n return data.map((item) => pick(item, keys)) as T;\n }\n if (typeof data === \"object\" && data !== null) {\n return pick(data, keys) as T;\n }\n return data;\n}\n\nfunction pick(obj: unknown, keys: string[]): unknown {\n if (typeof obj !== \"object\" || obj === null) return obj;\n const result: Record<string, unknown> = {};\n for (const key of keys) {\n if (key in (obj as Record<string, unknown>)) {\n result[key] = (obj as Record<string, unknown>)[key];\n }\n }\n return result;\n}\n\n/** Write an envelope to stdout. Handles JSON vs human mode. */\nexport async function writeOutput(envelope: Envelope): Promise<void> {\n if (globalOpts.fields && envelope.data) {\n envelope = {\n ...envelope,\n data: applyFields(envelope.data, globalOpts.fields),\n };\n }\n\n // Apply --jq filter\n if (globalOpts.jq && envelope.data != null) {\n envelope = { ...envelope, data: jqEval(envelope.data, globalOpts.jq) };\n }\n\n // CSV output mode\n if (globalOpts.csv && envelope.ok && Array.isArray(envelope.data)) {\n process.stdout.write(\n (await formatCsv(envelope.data as Record<string, unknown>[])) + \"\\n\",\n );\n return;\n }\n\n if (shouldOutputJson()) {\n const output = JSON.stringify(envelope, null, 2);\n process.stdout.write(output + \"\\n\");\n return;\n }\n\n // Human-readable mode\n if (!globalOpts.quiet && envelope.meta.tool) {\n const status = envelope.ok\n ? green(`✓ ${envelope.meta.tool}`)\n : red(`✗ ${envelope.meta.tool}`);\n const provider = envelope.meta.provider\n ? dim(` (${envelope.meta.provider})`)\n : \"\";\n const timing =\n envelope.meta.duration_ms != null\n ? dim(` ${envelope.meta.duration_ms}ms`)\n : \"\";\n process.stderr.write(`${status}${provider}${timing}\\n\\n`);\n }\n\n if (envelope.ok && envelope.data != null) {\n // Auto-table: array of objects renders as a fixed-width table\n if (\n Array.isArray(envelope.data) &&\n envelope.data.length > 0 &&\n typeof envelope.data[0] === \"object\" &&\n envelope.data[0] !== null\n ) {\n const { formatTable } = await import(\"./format.js\");\n process.stdout.write(\n formatTable(envelope.data as Record<string, unknown>[]) + \"\\n\",\n );\n return;\n }\n\n const text =\n typeof envelope.data === \"string\"\n ? envelope.data\n : JSON.stringify(envelope.data, null, 2);\n process.stdout.write(text + \"\\n\");\n }\n\n if (!envelope.ok && envelope.error) {\n process.stderr.write(red(`Error: ${envelope.error.message}\\n`));\n if (envelope.error.suggestion) {\n process.stderr.write(\n yellow(` Suggestion: ${envelope.error.suggestion}\\n`),\n );\n }\n }\n}\n\n/** Write a data envelope and exit. */\nexport async function outputSuccess<T>(\n data: T,\n meta: Envelope[\"meta\"],\n): Promise<void> {\n await writeOutput(successEnvelope(data, meta));\n}\n\n/** Write an error envelope and exit with the appropriate code. */\nexport async function outputError(\n err: CliError,\n meta: Envelope[\"meta\"],\n): Promise<never> {\n await writeOutput(errorEnvelope(err, meta));\n process.exit(err.exitCode);\n}\n\n/** Log to stderr (only when not --quiet). */\nexport function info(msg: string): void {\n if (!globalOpts.quiet) {\n process.stderr.write(msg + \"\\n\");\n }\n}\n\n/** Log to stderr (only when --verbose). */\nexport function debug(msg: string): void {\n if (globalOpts.verbose) {\n process.stderr.write(dim(`[debug] ${msg}`) + \"\\n\");\n }\n}\n\n/** Detect CI environment. */\nexport function isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.JENKINS_URL ||\n process.env.HIVE_CI\n );\n}\n\n/** Format array of objects as RFC 4180 CSV. */\nexport async function formatCsv(\n data: Record<string, unknown>[],\n): Promise<string> {\n if (data.length === 0) return \"\";\n const { formatCell } = await import(\"./format.js\");\n const keys = [...new Set(data.flatMap((row) => Object.keys(row)))];\n const escape = (val: unknown): string => {\n const str = formatCell(val);\n return str.includes(\",\") || str.includes('\"') || str.includes(\"\\n\")\n ? `\"${str.replace(/\"/g, '\"\"')}\"`\n : str;\n };\n const header = keys.join(\",\");\n const rows = data.map((row) => keys.map((k) => escape(row[k])).join(\",\"));\n return [header, ...rows].join(\"\\n\");\n}\n"],"mappings":"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","names":[]}