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
@@ -0,0 +1 @@
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 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 function formatCsv(data: Record<string, unknown>[]): string {\n if (data.length === 0) return \"\";\n const keys = [...new Set(data.flatMap((row) => Object.keys(row)))];\n const escape = (val: unknown): string => {\n const str = val == null ? \"\" : String(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":[]}
package/build/cli.js CHANGED
@@ -2,34 +2,34 @@
2
2
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
3
3
  import {
4
4
  executeTool
5
- } from "./chunk-DTUDM6HX.js";
6
- import "./chunk-WKVZVQTG.js";
7
- import "./chunk-LBTLYTZS.js";
5
+ } from "./chunk-UKHZIVDT.js";
8
6
  import {
9
- CLI_VERSION
10
- } from "./chunk-OK3LSM73.js";
7
+ NAMESPACE
8
+ } from "./chunk-MPIUUE3T.js";
9
+ import "./chunk-DYJBTKNR.js";
10
+ import "./chunk-IZTN7WFH.js";
11
+ import {
12
+ checkForUpdates
13
+ } from "./chunk-QNCI4DEB.js";
14
+ import {
15
+ SERVER_VERSION
16
+ } from "./chunk-2X3U4DFK.js";
17
+ import "./chunk-B6G222LS.js";
11
18
  import {
12
19
  red,
13
20
  setOutputOptions
14
- } from "./chunk-CP3FXEQA.js";
21
+ } from "./chunk-XYBEFFZ3.js";
15
22
  import {
16
- ensureConfigDir,
17
- getConfigDir,
18
- readJsonFile,
19
- setCliFlags,
20
- writeJsonFile
21
- } from "./chunk-XQJ6PB2L.js";
23
+ setCliFlags
24
+ } from "./chunk-V77LO4RO.js";
22
25
  import {
23
26
  ExitCode
24
- } from "./chunk-RRI526CJ.js";
25
- import {
26
- NAMESPACE
27
- } from "./chunk-CGXVV6WR.js";
27
+ } from "./chunk-KGYBTXIN.js";
28
28
  import {
29
29
  __commonJS,
30
30
  __require,
31
31
  __toESM
32
- } from "./chunk-QMRVH5ZP.js";
32
+ } from "./chunk-KBVPIZS4.js";
33
33
 
34
34
  // node_modules/commander/lib/error.js
35
35
  var require_error = __commonJS({
@@ -3481,75 +3481,6 @@ var {
3481
3481
  Help
3482
3482
  } = import_index.default;
3483
3483
 
3484
- // src/cli/update-check.ts
3485
- import { join } from "path";
3486
- var CACHE_TTL_MS = 864e5;
3487
- function getCachePath() {
3488
- return join(getConfigDir(), "cache", "update-check.json");
3489
- }
3490
- async function checkForUpdates() {
3491
- if (process.env.CI || process.env.HIVE_NO_UPDATE_CHECK || !process.stderr.isTTY) {
3492
- return;
3493
- }
3494
- const cached = readJsonFile(getCachePath());
3495
- if (cached?.checkedAt && cached.cliVersion === CLI_VERSION) {
3496
- const age = Date.now() - new Date(cached.checkedAt).getTime();
3497
- if (age < CACHE_TTL_MS) {
3498
- if (cached.latestVersion && isNewer(cached.latestVersion, CLI_VERSION)) {
3499
- showUpdateMessage(cached.latestVersion);
3500
- }
3501
- return;
3502
- }
3503
- }
3504
- try {
3505
- const controller = new AbortController();
3506
- const timeout = setTimeout(() => controller.abort(), 3e3);
3507
- const res = await fetch("https://registry.npmjs.org/hive-intelligence/latest", {
3508
- signal: controller.signal
3509
- });
3510
- clearTimeout(timeout);
3511
- if (!res.ok) return;
3512
- const data = await res.json();
3513
- ensureConfigDir();
3514
- writeJsonFile(getCachePath(), {
3515
- checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
3516
- latestVersion: data.version ?? null,
3517
- cliVersion: CLI_VERSION
3518
- });
3519
- if (!data.version || !isNewer(data.version, CLI_VERSION)) return;
3520
- showUpdateMessage(data.version);
3521
- } catch {
3522
- }
3523
- }
3524
- function isNewer(latest, current) {
3525
- const parse = (v) => {
3526
- const [main, pre = ""] = v.split("-", 2);
3527
- const parts = main.split(".").map((n) => parseInt(n, 10) || 0);
3528
- return { parts, pre };
3529
- };
3530
- const a = parse(latest);
3531
- const b = parse(current);
3532
- for (let i = 0; i < 3; i++) {
3533
- const ai = a.parts[i] ?? 0;
3534
- const bi = b.parts[i] ?? 0;
3535
- if (ai !== bi) return ai > bi;
3536
- }
3537
- if (a.pre === b.pre) return false;
3538
- if (!a.pre) return true;
3539
- if (!b.pre) return false;
3540
- return a.pre > b.pre;
3541
- }
3542
- function showUpdateMessage(newVersion) {
3543
- process.stderr.write(
3544
- `
3545
- Update available: ${CLI_VERSION} \u2192 ${newVersion}
3546
- npm: npm update -g hive-intelligence
3547
- bun: bun update -g hive-intelligence
3548
-
3549
- `
3550
- );
3551
- }
3552
-
3553
3484
  // src/cli.ts
3554
3485
  process.on("unhandledRejection", (err) => {
3555
3486
  const msg = err instanceof Error ? process.env.DEBUG ? err.stack : err.message : String(err);
@@ -3567,8 +3498,8 @@ process.on("uncaughtException", (err) => {
3567
3498
  process.on("SIGINT", () => process.exit(130));
3568
3499
  process.on("SIGTERM", () => process.exit(143));
3569
3500
  var program2 = new Command();
3570
- program2.name("hive").version(CLI_VERSION).description(
3571
- "Hive Intelligence CLI \u2014 institutional-grade crypto market data, DeFi, wallets, security, DEX, NFTs, and prediction markets for AI agents"
3501
+ program2.name("hive").version(SERVER_VERSION).description(
3502
+ "Hive Intelligence \u2014 institutional-grade crypto market data, DeFi, wallets, security, DEX, NFTs, and prediction markets for AI agents and developers"
3572
3503
  ).exitOverride().configureOutput({
3573
3504
  writeErr: (str) => process.stderr.write(str),
3574
3505
  outputError: (str, write) => {
@@ -3592,8 +3523,26 @@ program2.hook("preAction", (thisCommand) => {
3592
3523
  }
3593
3524
  setCliFlags({ apiKey: opts.apiKey, noRetry: opts.retry === false });
3594
3525
  });
3595
- program2.action(() => {
3596
- program2.help();
3526
+ program2.action(async () => {
3527
+ const { startStdio } = await import("./serve-KWNJK6EY.js");
3528
+ await startStdio(program2.opts().envFile);
3529
+ });
3530
+ program2.command("serve").description("Start the MCP server").option("--http", "Start HTTP server instead of stdio").option("--port <number>", "HTTP server port", "8080").action(async (opts) => {
3531
+ if (opts.http) {
3532
+ const port = parseInt(opts.port, 10);
3533
+ if (isNaN(port) || port < 1 || port > 65535) {
3534
+ process.stderr.write(
3535
+ `Error: invalid port "${opts.port}" (must be 1-65535)
3536
+ `
3537
+ );
3538
+ process.exit(ExitCode.INVALID_ARGS);
3539
+ }
3540
+ const { startHttp } = await import("./serve-KWNJK6EY.js");
3541
+ await startHttp(port, program2.opts().envFile);
3542
+ } else {
3543
+ const { startStdio } = await import("./serve-KWNJK6EY.js");
3544
+ await startStdio(program2.opts().envFile);
3545
+ }
3597
3546
  });
3598
3547
  for (const domain of NAMESPACE) {
3599
3548
  const domainCmd = program2.command(domain.name).description(domain.description);
@@ -3664,15 +3613,15 @@ for (const domain of NAMESPACE) {
3664
3613
  }
3665
3614
  var toolsCmd = program2.command("tools").description("Discover and execute tools");
3666
3615
  toolsCmd.command("list").description("List all registered tools").option("--category <name>", "Filter by category").option("--provider <name>", "Filter by provider prefix").option("--limit <n>", "Max tools to show", "50").option("--offset <n>", "Skip first N tools", "0").action(async (opts) => {
3667
- const { listTools } = await import("./tools-VRRMBCZQ.js");
3616
+ const { listTools } = await import("./tools-PJHWFCAG.js");
3668
3617
  await listTools(opts);
3669
3618
  });
3670
3619
  toolsCmd.command("search <query>").description("Search tools by name or description").action(async (query) => {
3671
- const { searchTools } = await import("./tools-VRRMBCZQ.js");
3620
+ const { searchTools } = await import("./tools-PJHWFCAG.js");
3672
3621
  await searchTools(query);
3673
3622
  });
3674
3623
  toolsCmd.command("info <name>").description("Show detailed tool schema and description").action(async (name) => {
3675
- const { toolInfo } = await import("./tools-VRRMBCZQ.js");
3624
+ const { toolInfo } = await import("./tools-PJHWFCAG.js");
3676
3625
  await toolInfo(name);
3677
3626
  });
3678
3627
  toolsCmd.command("call <name>").description("Execute a tool by name").option("--args <json>", "Tool arguments as JSON (or pipe JSON via stdin)").action(async (name, opts) => {
@@ -3701,76 +3650,139 @@ toolsCmd.command("call <name>").description("Execute a tool by name").option("--
3701
3650
  await executeTool(name, args, timeout);
3702
3651
  });
3703
3652
  toolsCmd.command("refresh").description("Force-refresh the tool catalog cache").action(async () => {
3704
- const { refreshTools } = await import("./tools-VRRMBCZQ.js");
3653
+ const { refreshTools } = await import("./tools-PJHWFCAG.js");
3705
3654
  await refreshTools();
3706
3655
  });
3707
3656
  var configCmd = program2.command("config").description("Generate configuration for MCP clients");
3708
3657
  configCmd.command("claude-desktop").description("Print Claude Desktop config JSON").action(async () => {
3709
- const { configClaudeDesktop } = await import("./config-ANFERP7A.js");
3658
+ const { configClaudeDesktop } = await import("./config-TDX4VUGW.js");
3710
3659
  configClaudeDesktop();
3711
3660
  });
3712
3661
  configCmd.command("cursor").description("Print Cursor config JSON").action(async () => {
3713
- const { configCursor } = await import("./config-ANFERP7A.js");
3662
+ const { configCursor } = await import("./config-TDX4VUGW.js");
3714
3663
  configCursor();
3715
3664
  });
3716
3665
  configCmd.command("vscode").description("Print VS Code mcp.json config").action(async () => {
3717
- const { configVscode } = await import("./config-ANFERP7A.js");
3666
+ const { configVscode } = await import("./config-TDX4VUGW.js");
3718
3667
  configVscode();
3719
3668
  });
3720
3669
  configCmd.command("claude-code").description("Print claude mcp add command").action(async () => {
3721
- const { configClaudeCode } = await import("./config-ANFERP7A.js");
3670
+ const { configClaudeCode } = await import("./config-TDX4VUGW.js");
3722
3671
  configClaudeCode();
3723
3672
  });
3724
3673
  configCmd.command("http [url]").description("Print remote HTTP connection instructions").action(async (url) => {
3725
- const { configHttpUrl } = await import("./config-ANFERP7A.js");
3674
+ const { configHttpUrl } = await import("./config-TDX4VUGW.js");
3726
3675
  configHttpUrl(
3727
3676
  url || process.env.HIVE_DEFAULT_URL || "https://mcp.hiveintelligence.xyz"
3728
3677
  );
3729
3678
  });
3730
- program2.command("init").description("Interactive setup wizard for Hive API key").option("--minimal", "Write defaults without interactive prompts").option("--dry-run", "Preview changes without writing").action(async (opts) => {
3731
- const { runInit } = await import("./init-CAVIFVSH.js");
3732
- await runInit(opts);
3679
+ program2.command("setup [client]").description(
3680
+ "Interactive setup wizard \u2014 log in and configure your AI client (claude-desktop, claude-code, cursor, vscode)"
3681
+ ).action(async (client) => {
3682
+ const { runSetup } = await import("./setup-YTUKMPNP.js");
3683
+ await runSetup(client);
3684
+ });
3685
+ program2.command("init").description(
3686
+ "One-command setup. --all installs across every detected client; --browser runs PKCE browser auth."
3687
+ ).option("--all", "Configure every detected MCP client + install skill packs").option("--browser", "Authenticate via PKCE browser flow").option("--skip-skills", "Don't copy skill packs into client skills dirs").option("--skip-verify", "Skip the post-install connectivity check").option("--dry-run", "Preview changes without writing").option(
3688
+ "--minimal",
3689
+ "Legacy mode: write a .env file only, no client install (kept for backwards compat)"
3690
+ ).option(
3691
+ "--api-url <url>",
3692
+ "Override the Hive API URL (e.g. for staging or self-hosted)"
3693
+ ).action(async (opts) => {
3694
+ if (opts.minimal && !opts.all && !opts.browser) {
3695
+ const { runInit } = await import("./init-YQ5NBICF.js");
3696
+ await runInit(opts);
3697
+ return;
3698
+ }
3699
+ const { runInitAll } = await import("./init-all-6OWEQALB.js");
3700
+ const exitCode = await runInitAll({
3701
+ all: Boolean(opts.all),
3702
+ browser: Boolean(opts.browser),
3703
+ skipSkills: Boolean(opts.skipSkills),
3704
+ skipVerify: Boolean(opts.skipVerify),
3705
+ dryRun: Boolean(opts.dryRun),
3706
+ json: Boolean(program2.opts().json),
3707
+ apiUrl: opts.apiUrl
3708
+ });
3709
+ if (exitCode !== 0) process.exit(exitCode);
3710
+ });
3711
+ program2.command("uninstall").description(
3712
+ "Remove Hive's MCP entry from every client config + delete copied skill packs"
3713
+ ).option(
3714
+ "--all",
3715
+ "Clean every known client (default; explicit flag for symmetry with `init --all`)"
3716
+ ).option("--dry-run", "Preview removals without changing anything").action(async (opts) => {
3717
+ const { runUninstall } = await import("./uninstall-HWXEIP6K.js");
3718
+ const exitCode = await runUninstall({
3719
+ all: opts.all !== false,
3720
+ dryRun: Boolean(opts.dryRun),
3721
+ json: Boolean(program2.opts().json)
3722
+ });
3723
+ if (exitCode !== 0) process.exit(exitCode);
3733
3724
  });
3734
3725
  program2.command("doctor").description("Diagnose environment and server connectivity").option("--probe", "Run live API probes (slower)").action(async (opts) => {
3735
- const { runDoctor } = await import("./doctor-7WZMCQC7.js");
3726
+ const { runDoctor } = await import("./doctor-5K5UWHNX.js");
3736
3727
  await runDoctor(opts);
3737
3728
  });
3738
3729
  program2.command("completion <shell>").description("Generate shell completion script (bash, zsh, fish, powershell)").option("--install", "Auto-install to shell rc file").action(async (shell, opts) => {
3739
3730
  if (opts.install) {
3740
- const { installCompletion } = await import("./completion-J6HFY6PS.js");
3731
+ const { installCompletion } = await import("./completion-BELZL7ND.js");
3741
3732
  await installCompletion(shell);
3742
3733
  } else {
3743
- const { generateCompletion } = await import("./completion-J6HFY6PS.js");
3734
+ const { generateCompletion } = await import("./completion-BELZL7ND.js");
3744
3735
  await generateCompletion(shell);
3745
3736
  }
3746
3737
  });
3747
3738
  var authCmd = program2.command("auth").description("Manage authentication profiles");
3748
- authCmd.command("login").description("Log in with your Hive API key").option("--profile <name>", "Profile name", "default").action(async (opts) => {
3749
- const { runLogin } = await import("./auth-77MKFFBQ.js");
3739
+ authCmd.command("signup").description("Create a new Hive account and get your API key").option("--profile <name>", "Profile name", "default").action(async (opts) => {
3740
+ const { runSignup } = await import("./auth-KKINNBXT.js");
3741
+ await runSignup(opts);
3742
+ });
3743
+ authCmd.command("login").description("Log in via browser (or --manual to paste API key)").option("--profile <name>", "Profile name", "default").option("--manual", "Manually paste API key instead of browser login").action(async (opts) => {
3744
+ const { runLogin } = await import("./auth-KKINNBXT.js");
3750
3745
  await runLogin(opts);
3751
3746
  });
3752
3747
  authCmd.command("logout").description("Remove stored credentials").action(async () => {
3753
- const { runLogout } = await import("./auth-77MKFFBQ.js");
3748
+ const { runLogout } = await import("./auth-KKINNBXT.js");
3754
3749
  await runLogout();
3755
3750
  });
3756
3751
  authCmd.command("whoami").description("Show current profile").action(async () => {
3757
- const { runWhoami } = await import("./auth-77MKFFBQ.js");
3752
+ const { runWhoami } = await import("./auth-KKINNBXT.js");
3758
3753
  await runWhoami();
3759
3754
  });
3760
3755
  authCmd.command("profiles").description("List all profiles").action(async () => {
3761
- const { runProfiles } = await import("./auth-77MKFFBQ.js");
3756
+ const { runProfiles } = await import("./auth-KKINNBXT.js");
3762
3757
  await runProfiles();
3763
3758
  });
3764
3759
  authCmd.command("switch <name>").description("Switch active profile").action(async (name) => {
3765
- const { runSwitch } = await import("./auth-77MKFFBQ.js");
3760
+ const { runSwitch } = await import("./auth-KKINNBXT.js");
3766
3761
  await runSwitch(name);
3767
3762
  });
3763
+ var keysCmd = program2.command("keys").description("Manage your Hive API keys");
3764
+ keysCmd.command("list").description("List your API keys").action(async () => {
3765
+ const { runKeysList } = await import("./auth-KKINNBXT.js");
3766
+ await runKeysList();
3767
+ });
3768
+ keysCmd.command("create").description("Create a new API key").option("--name <name>", "Key name", "CLI Key").action(async (opts) => {
3769
+ const { runKeysCreate } = await import("./auth-KKINNBXT.js");
3770
+ await runKeysCreate(opts);
3771
+ });
3772
+ keysCmd.command("revoke <id>").description("Revoke an API key").action(async (id) => {
3773
+ const { runKeysRevoke } = await import("./auth-KKINNBXT.js");
3774
+ await runKeysRevoke(id);
3775
+ });
3776
+ program2.command("usage").description("Show your API usage and plan limits").action(async () => {
3777
+ const { runUsage } = await import("./auth-KKINNBXT.js");
3778
+ await runUsage();
3779
+ });
3768
3780
  program2.command("status").description("Quick health and version check").action(async () => {
3769
- const { runStatus } = await import("./doctor-7WZMCQC7.js");
3781
+ const { runStatus } = await import("./doctor-5K5UWHNX.js");
3770
3782
  await runStatus();
3771
3783
  });
3772
3784
  program2.command("open [target]").description("Open Hive dashboard, docs, status, or GitHub in browser").action(async (target) => {
3773
- const { runOpen } = await import("./open-FUXYIHFO.js");
3785
+ const { runOpen } = await import("./open-YUIJP37F.js");
3774
3786
  runOpen(target);
3775
3787
  });
3776
3788
  program2.command("watch <domain> <command>").description("Poll a tool on interval").option("--interval <seconds>", "Poll interval in seconds", "30").option("--args <json>", "Tool arguments as JSON").action(async (domain, command, opts) => {
@@ -3797,18 +3809,18 @@ program2.command("watch <domain> <command>").description("Poll a tool on interva
3797
3809
  }
3798
3810
  const interval = parseInt(opts.interval, 10);
3799
3811
  const timeout = parseInt(program2.opts().timeout, 10);
3800
- const { runWatch } = await import("./watch-A75SVIQ6.js");
3812
+ const { runWatch } = await import("./watch-KZ5EDZK3.js");
3801
3813
  await runWatch(cmdDef.tool, args, interval, timeout);
3802
3814
  });
3803
3815
  var aliasCmd = program2.command("alias").description("Manage command aliases");
3804
3816
  aliasCmd.command("set <name> <command>").description("Create an alias").action(async (name, command) => {
3805
- const { setAlias } = await import("./alias-INGXWFCG.js");
3817
+ const { setAlias } = await import("./alias-CZ3DEYHF.js");
3806
3818
  setAlias(name, command);
3807
3819
  process.stderr.write(`Alias "${name}" set.
3808
3820
  `);
3809
3821
  });
3810
3822
  aliasCmd.command("list").description("Show all aliases").action(async () => {
3811
- const { getAliases } = await import("./alias-INGXWFCG.js");
3823
+ const { getAliases } = await import("./alias-CZ3DEYHF.js");
3812
3824
  const aliases = getAliases();
3813
3825
  const entries = Object.entries(aliases);
3814
3826
  if (entries.length === 0) {
@@ -3822,22 +3834,22 @@ aliasCmd.command("list").description("Show all aliases").action(async () => {
3822
3834
  process.stderr.write("\n");
3823
3835
  });
3824
3836
  aliasCmd.command("remove <name>").description("Remove an alias").action(async (name) => {
3825
- const { removeAlias } = await import("./alias-INGXWFCG.js");
3837
+ const { removeAlias } = await import("./alias-CZ3DEYHF.js");
3826
3838
  removeAlias(name);
3827
3839
  process.stderr.write(`Alias "${name}" removed.
3828
3840
  `);
3829
3841
  });
3830
3842
  var telemetryCmd = program2.command("telemetry").description("Control anonymous usage telemetry");
3831
3843
  telemetryCmd.command("enable").description("Enable telemetry").action(async () => {
3832
- const { enableTelemetry } = await import("./telemetry-KNWMQURH.js");
3844
+ const { enableTelemetry } = await import("./telemetry-5IPRKZBL.js");
3833
3845
  enableTelemetry();
3834
3846
  });
3835
3847
  telemetryCmd.command("disable").description("Disable telemetry").action(async () => {
3836
- const { disableTelemetry } = await import("./telemetry-KNWMQURH.js");
3848
+ const { disableTelemetry } = await import("./telemetry-5IPRKZBL.js");
3837
3849
  disableTelemetry();
3838
3850
  });
3839
3851
  telemetryCmd.command("status").description("Show telemetry status").action(async () => {
3840
- const { telemetryStatus } = await import("./telemetry-KNWMQURH.js");
3852
+ const { telemetryStatus } = await import("./telemetry-5IPRKZBL.js");
3841
3853
  telemetryStatus();
3842
3854
  });
3843
3855
  program2.addHelpText(
@@ -3848,7 +3860,6 @@ Examples:
3848
3860
  $ hive market price --ids bitcoin --vs usd
3849
3861
  $ hive defi tvl --protocol aave
3850
3862
  $ hive security scan --token 0x...
3851
- $ hive portfolio balance --address 0x...
3852
3863
  $ hive tools search "price" --jq ".[] | .name"
3853
3864
  $ hive status
3854
3865
  $ hive alias set btc 'market price --ids bitcoin --vs usd'
@@ -3858,7 +3869,7 @@ Examples:
3858
3869
  );
3859
3870
  checkForUpdates();
3860
3871
  {
3861
- const { expandAlias } = await import("./alias-INGXWFCG.js");
3872
+ const { expandAlias } = await import("./alias-CZ3DEYHF.js");
3862
3873
  const expanded = expandAlias(process.argv);
3863
3874
  if (expanded !== process.argv) {
3864
3875
  process.argv = expanded;