hive-intelligence 1.1.3 → 1.3.0

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 (174) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +315 -85
  3. package/agent-skills/.claude-plugin/plugin.json +10 -4
  4. package/agent-skills/.mcp.json +8 -0
  5. package/agent-skills/AGENTS.md +37 -0
  6. package/agent-skills/README.md +28 -23
  7. package/agent-skills/SKILL.md +40 -10
  8. package/agent-skills/evals/trigger-queries.json +270 -0
  9. package/agent-skills/package.json +4 -4
  10. package/agent-skills/packs/hive-build/SKILL.md +54 -25
  11. package/agent-skills/packs/hive-build/evals/evals.json +16 -3
  12. package/agent-skills/packs/hive-build/evals/triggers.json +50 -0
  13. package/agent-skills/packs/hive-build-onboarding/SKILL.md +27 -34
  14. package/agent-skills/packs/hive-build-onboarding/evals/evals.json +1 -1
  15. package/agent-skills/packs/hive-build-onboarding/evals/triggers.json +50 -0
  16. package/agent-skills/packs/hive-cli/SKILL.md +33 -35
  17. package/agent-skills/packs/hive-cli/evals/evals.json +1 -1
  18. package/agent-skills/packs/hive-cli/evals/triggers.json +50 -0
  19. package/agent-skills/packs/hive-defi-research/SKILL.md +105 -19
  20. package/agent-skills/packs/hive-defi-research/evals/evals.json +6 -3
  21. package/agent-skills/packs/hive-defi-research/evals/triggers.json +50 -0
  22. package/agent-skills/packs/hive-dex-pool-analysis/SKILL.md +106 -16
  23. package/agent-skills/packs/hive-dex-pool-analysis/evals/evals.json +5 -3
  24. package/agent-skills/packs/hive-dex-pool-analysis/evals/triggers.json +50 -0
  25. package/agent-skills/packs/hive-market-research/SKILL.md +130 -21
  26. package/agent-skills/packs/hive-market-research/evals/evals.json +15 -2
  27. package/agent-skills/packs/hive-market-research/evals/triggers.json +50 -0
  28. package/agent-skills/packs/hive-mcp/SKILL.md +98 -153
  29. package/agent-skills/packs/hive-mcp/evals/evals.json +4 -3
  30. package/agent-skills/packs/hive-mcp/evals/triggers.json +50 -0
  31. package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +62 -35
  32. package/agent-skills/packs/hive-mcp/references/clients.md +154 -0
  33. package/agent-skills/packs/hive-network-infrastructure/SKILL.md +105 -20
  34. package/agent-skills/packs/hive-network-infrastructure/evals/evals.json +4 -2
  35. package/agent-skills/packs/hive-network-infrastructure/evals/triggers.json +50 -0
  36. package/agent-skills/packs/hive-nft-research/SKILL.md +105 -18
  37. package/agent-skills/packs/hive-nft-research/evals/evals.json +4 -2
  38. package/agent-skills/packs/hive-nft-research/evals/triggers.json +50 -0
  39. package/agent-skills/packs/hive-prediction-markets/SKILL.md +108 -21
  40. package/agent-skills/packs/hive-prediction-markets/evals/evals.json +4 -2
  41. package/agent-skills/packs/hive-prediction-markets/evals/triggers.json +50 -0
  42. package/agent-skills/packs/hive-query/SKILL.md +80 -33
  43. package/agent-skills/packs/hive-query/evals/evals.json +7 -5
  44. package/agent-skills/packs/hive-query/evals/triggers.json +50 -0
  45. package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +39 -18
  46. package/agent-skills/packs/hive-security-risk/SKILL.md +110 -19
  47. package/agent-skills/packs/hive-security-risk/evals/evals.json +4 -2
  48. package/agent-skills/packs/hive-security-risk/evals/triggers.json +50 -0
  49. package/agent-skills/packs/hive-solana-analysis/SKILL.md +115 -19
  50. package/agent-skills/packs/hive-solana-analysis/evals/evals.json +4 -2
  51. package/agent-skills/packs/hive-solana-analysis/evals/triggers.json +50 -0
  52. package/agent-skills/packs/hive-stateful-monitoring/SKILL.md +120 -0
  53. package/agent-skills/packs/hive-stateful-monitoring/evals/evals.json +54 -0
  54. package/agent-skills/packs/hive-stateful-monitoring/evals/triggers.json +50 -0
  55. package/agent-skills/packs/hive-stateful-monitoring/references/b2b-subject-context.md +53 -0
  56. package/agent-skills/packs/hive-token-diligence/SKILL.md +119 -21
  57. package/agent-skills/packs/hive-token-diligence/evals/evals.json +6 -4
  58. package/agent-skills/packs/hive-token-diligence/evals/triggers.json +50 -0
  59. package/agent-skills/packs/hive-tool-discovery/SKILL.md +48 -19
  60. package/agent-skills/packs/hive-tool-discovery/evals/evals.json +17 -3
  61. package/agent-skills/packs/hive-tool-discovery/evals/triggers.json +50 -0
  62. package/agent-skills/packs/hive-tool-discovery/references/discovery-surfaces.md +31 -6
  63. package/agent-skills/packs/hive-wallet-investigation/SKILL.md +111 -18
  64. package/agent-skills/packs/hive-wallet-investigation/evals/evals.json +5 -3
  65. package/agent-skills/packs/hive-wallet-investigation/evals/triggers.json +50 -0
  66. package/agent-skills/references/agents-routing.md +19 -7
  67. package/agent-skills/scripts/validate-agent-skills-package.mjs +116 -18
  68. package/agent-skills/skills.sh.json +3 -2
  69. package/bin/hive-mcp.js +5 -5
  70. package/build/{alias-CZ3DEYHF.js → alias-BKAVOYQV.js} +2 -3
  71. package/build/{api-client-I23XLSHU.js → api-client-FTVDFW5V.js} +4 -4
  72. package/build/{auth-KKINNBXT.js → auth-EZFJ5RYB.js} +3 -4
  73. package/build/{browser-auth-EEFGRHWY.js → browser-auth-OJSUNFBI.js} +2 -3
  74. package/build/{cache-EGNMENNA.js → cache-TBDQ7QBU.js} +2 -3
  75. package/build/{chunk-V77LO4RO.js → chunk-6PC3HUAK.js} +10 -4
  76. package/build/{chunk-XYBEFFZ3.js → chunk-725R3KLJ.js} +26 -4
  77. package/build/{chunk-PGBVNMNZ.js → chunk-7GD2MFYI.js} +57 -7
  78. package/build/{chunk-IDZD2NVG.js → chunk-AEU43ACS.js} +33 -10
  79. package/build/chunk-EPF36Q3Z.js +71 -0
  80. package/build/chunk-I5Z6FZRL.js +178 -0
  81. package/build/{chunk-KBVPIZS4.js → chunk-ILVPOLA7.js} +12 -4
  82. package/build/{chunk-B6G222LS.js → chunk-L326MQZP.js} +22 -6
  83. package/build/{chunk-QNCI4DEB.js → chunk-M6REON2I.js} +35 -21
  84. package/build/chunk-N32UIHBU.js +125 -0
  85. package/build/{chunk-IZTN7WFH.js → chunk-Q7VBYLX7.js} +12 -3
  86. package/build/chunk-QDZ7MAVN.js +447 -0
  87. package/build/{chunk-KGYBTXIN.js → chunk-R6YZTFQL.js} +2 -1
  88. package/build/{chunk-DYJBTKNR.js → chunk-RU6QOFHH.js} +9 -10
  89. package/build/{chunk-RKICZ6DZ.js → chunk-RUHO24SX.js} +16 -10
  90. package/build/{chunk-MPIUUE3T.js → chunk-TNQ7GJ6Q.js} +0 -60
  91. package/build/{chunk-2X3U4DFK.js → chunk-W2QL7LYI.js} +43586 -21498
  92. package/build/chunk-ZXKFJQDE.js +20 -0
  93. package/build/cli.js +3342 -3410
  94. package/build/{completion-BELZL7ND.js → completion-7KBW243H.js} +4 -5
  95. package/build/{config-TDX4VUGW.js → config-KAEUX6RM.js} +23 -4
  96. package/build/{config-dir-V43W2WIA.js → config-dir-5IH7MOOT.js} +2 -3
  97. package/build/{doctor-5K5UWHNX.js → doctor-ORDOCGLM.js} +34 -10
  98. package/build/{errors-E6MVUBNA.js → errors-HGHUF575.js} +2 -3
  99. package/build/{format-TSFSI2K7.js → format-H7FOQSYY.js} +1 -2
  100. package/build/{init-YQ5NBICF.js → init-UCTCUYFA.js} +52 -9
  101. package/build/init-all-BVWW3JVK.js +408 -0
  102. package/build/mcpServer-RUEOTTF7.js +34 -0
  103. package/build/monitor-worker.js +1396 -0
  104. package/build/{namespace-PVHBFDW2.js → namespace-L5DGCY7K.js} +2 -3
  105. package/build/{open-YUIJP37F.js → open-V2RNA3QT.js} +2 -3
  106. package/build/{output-IYJBFCYK.js → output-ITGLBKIG.js} +2 -3
  107. package/build/release.json +8 -0
  108. package/build/{serve-KWNJK6EY.js → serve-DKLR2WQH.js} +9 -4
  109. package/build/server.js +5399 -2945
  110. package/build/{setup-YTUKMPNP.js → setup-PTYFMTK5.js} +60 -56
  111. package/build/stdio.js +10 -8
  112. package/build/{telemetry-5IPRKZBL.js → telemetry-HPLDYR7U.js} +5 -4
  113. package/build/{tools-PJHWFCAG.js → tools-I7GLWTV6.js} +15 -15
  114. package/build/{uninstall-HWXEIP6K.js → uninstall-SAOIPL6K.js} +19 -11
  115. package/build/update-check-IEXPOYYR.js +18 -0
  116. package/build/upgrade-J4HIGCKE.js +171 -0
  117. package/build/version-Z4HJL4VV.js +16 -0
  118. package/build/{watch-KZ5EDZK3.js → watch-WVR4CGCD.js} +8 -7
  119. package/package.json +82 -41
  120. package/agent-skills/packs/hive-defi-research/references/workflow.md +0 -41
  121. package/agent-skills/packs/hive-dex-pool-analysis/references/workflow.md +0 -42
  122. package/agent-skills/packs/hive-market-research/references/workflow.md +0 -47
  123. package/agent-skills/packs/hive-network-infrastructure/references/workflow.md +0 -41
  124. package/agent-skills/packs/hive-nft-research/references/workflow.md +0 -42
  125. package/agent-skills/packs/hive-prediction-markets/references/workflow.md +0 -42
  126. package/agent-skills/packs/hive-security-risk/references/workflow.md +0 -46
  127. package/agent-skills/packs/hive-solana-analysis/references/workflow.md +0 -42
  128. package/agent-skills/packs/hive-token-diligence/references/workflow.md +0 -45
  129. package/agent-skills/packs/hive-wallet-investigation/references/workflow.md +0 -45
  130. package/build/alias-CZ3DEYHF.js.map +0 -1
  131. package/build/api-client-I23XLSHU.js.map +0 -1
  132. package/build/auth-KKINNBXT.js.map +0 -1
  133. package/build/browser-auth-EEFGRHWY.js.map +0 -1
  134. package/build/cache-EGNMENNA.js.map +0 -1
  135. package/build/chunk-2MYMHMBF.js +0 -340
  136. package/build/chunk-2MYMHMBF.js.map +0 -1
  137. package/build/chunk-2X3U4DFK.js.map +0 -1
  138. package/build/chunk-B6G222LS.js.map +0 -1
  139. package/build/chunk-DYJBTKNR.js.map +0 -1
  140. package/build/chunk-IDZD2NVG.js.map +0 -1
  141. package/build/chunk-IZTN7WFH.js.map +0 -1
  142. package/build/chunk-KBVPIZS4.js.map +0 -1
  143. package/build/chunk-KGYBTXIN.js.map +0 -1
  144. package/build/chunk-MPIUUE3T.js.map +0 -1
  145. package/build/chunk-PGBVNMNZ.js.map +0 -1
  146. package/build/chunk-QNCI4DEB.js.map +0 -1
  147. package/build/chunk-RKICZ6DZ.js.map +0 -1
  148. package/build/chunk-UKHZIVDT.js +0 -44
  149. package/build/chunk-UKHZIVDT.js.map +0 -1
  150. package/build/chunk-V77LO4RO.js.map +0 -1
  151. package/build/chunk-XYBEFFZ3.js.map +0 -1
  152. package/build/cli.js.map +0 -1
  153. package/build/completion-BELZL7ND.js.map +0 -1
  154. package/build/config-TDX4VUGW.js.map +0 -1
  155. package/build/config-dir-V43W2WIA.js.map +0 -1
  156. package/build/doctor-5K5UWHNX.js.map +0 -1
  157. package/build/errors-E6MVUBNA.js.map +0 -1
  158. package/build/format-TSFSI2K7.js.map +0 -1
  159. package/build/init-YQ5NBICF.js.map +0 -1
  160. package/build/init-all-6OWEQALB.js +0 -274
  161. package/build/init-all-6OWEQALB.js.map +0 -1
  162. package/build/mcpServer-AEX3RQ4U.js +0 -20
  163. package/build/mcpServer-AEX3RQ4U.js.map +0 -1
  164. package/build/namespace-PVHBFDW2.js.map +0 -1
  165. package/build/open-YUIJP37F.js.map +0 -1
  166. package/build/output-IYJBFCYK.js.map +0 -1
  167. package/build/serve-KWNJK6EY.js.map +0 -1
  168. package/build/server.js.map +0 -1
  169. package/build/setup-YTUKMPNP.js.map +0 -1
  170. package/build/stdio.js.map +0 -1
  171. package/build/telemetry-5IPRKZBL.js.map +0 -1
  172. package/build/tools-PJHWFCAG.js.map +0 -1
  173. package/build/uninstall-HWXEIP6K.js.map +0 -1
  174. package/build/watch-KZ5EDZK3.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/setup.ts"],"sourcesContent":["import { createInterface } from \"node:readline\";\nimport { resolveApiKey } from \"./config-dir.js\";\n\nconst CLIENTS = [\n { name: \"Claude Desktop\", value: \"claude-desktop\" },\n { name: \"Claude Code\", value: \"claude-code\" },\n { name: \"Cursor\", value: \"cursor\" },\n { name: \"VS Code\", value: \"vscode\" },\n] as const;\n\ntype ClientValue = (typeof CLIENTS)[number][\"value\"];\n\nexport async function runSetup(client?: string): Promise<void> {\n // Step 1: Check if logged in\n const apiKey = resolveApiKey();\n if (!apiKey) {\n process.stderr.write(\"\\nNo API key found. Let's log in first.\\n\");\n const { runLogin } = await import(\"./auth.js\");\n await runLogin({ manual: false });\n }\n\n // Step 2: Determine which client to configure\n let selectedClient: ClientValue;\n\n if (client && CLIENTS.some((c) => c.value === client)) {\n selectedClient = client as ClientValue;\n } else {\n if (!process.stdin.isTTY) {\n process.stderr.write(\n \"Error: specify a client (claude-desktop, claude-code, cursor, vscode)\\n\",\n );\n process.exit(1);\n }\n\n process.stderr.write(\"\\nWhich client do you want to configure?\\n\\n\");\n for (let i = 0; i < CLIENTS.length; i++) {\n process.stderr.write(` ${i + 1}. ${CLIENTS[i].name}\\n`);\n }\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stderr,\n });\n const answer = await new Promise<string>((resolve) =>\n rl.question(\"\\nChoice (1-4): \", resolve),\n );\n rl.close();\n\n const idx = parseInt(answer.trim(), 10) - 1;\n if (isNaN(idx) || idx < 0 || idx >= CLIENTS.length) {\n process.stderr.write(\"Invalid choice.\\n\");\n process.exit(1);\n }\n selectedClient = CLIENTS[idx].value;\n }\n\n // Step 3: Write config for the selected client\n const {\n writeClaudeDesktopConfig,\n writeCursorConfig,\n writeVscodeConfig,\n writeClaudeCodeConfig,\n } = await import(\"./config.js\");\n\n switch (selectedClient) {\n case \"claude-desktop\": {\n const result = writeClaudeDesktopConfig();\n if (result.written) {\n process.stderr.write(`\\n Config written to ${result.path}\\n`);\n process.stderr.write(` Restart Claude Desktop to connect.\\n\\n`);\n } else {\n process.stderr.write(\n `\\n No API key available. Run 'hive auth login' first.\\n`,\n );\n }\n break;\n }\n case \"cursor\": {\n const result = writeCursorConfig();\n if (result.written) {\n process.stderr.write(`\\n Config written to ${result.path}\\n`);\n process.stderr.write(` Restart Cursor to connect.\\n\\n`);\n } else {\n process.stderr.write(\n `\\n No API key available. Run 'hive auth login' first.\\n`,\n );\n }\n break;\n }\n case \"vscode\": {\n const result = writeVscodeConfig();\n if (result.written) {\n process.stderr.write(`\\n Config written to ${result.path}\\n`);\n process.stderr.write(` Reload VS Code to connect.\\n\\n`);\n } else {\n process.stderr.write(\n `\\n No API key available. Run 'hive auth login' first.\\n`,\n );\n }\n break;\n }\n case \"claude-code\": {\n const currentKey = resolveApiKey();\n if (!currentKey) {\n process.stderr.write(\n `\\n No API key available. Run 'hive auth login' first.\\n`,\n );\n } else {\n const result = writeClaudeCodeConfig();\n process.stderr.write(`\\n Run this command:\\n ${result.command}\\n\\n`);\n }\n break;\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/stdio.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { createHiveMcpServer, SERVER_NAME, SERVER_VERSION } from \"./mcpServer\";\nimport { secureLogger } from \"./utils/secureLogger\";\nimport { checkForUpdates } from \"./cli/update-check.js\";\n\nasync function main() {\n const transport = new StdioServerTransport();\n const server = createHiveMcpServer({ kind: \"root\" }).getServer();\n\n await server.connect(transport);\n // Use stderr to avoid corrupting the JSON-RPC stream on stdout\n console.error(\n `Hive MCP stdio server connected: ${SERVER_NAME} v${SERVER_VERSION}`,\n );\n\n // Non-blocking update check — logs to stderr (visible in MCP client logs)\n checkForUpdates();\n}\n\nmain().catch((error) => {\n secureLogger.error(\"Failed to start Hive MCP stdio server\", error);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;;;;;;;;AACA,SAAS,4BAA4B;AAKrC,eAAe,OAAO;AACpB,QAAM,YAAY,IAAI,qBAAqB;AAC3C,QAAM,SAAS,oBAAoB,EAAE,MAAM,OAAO,CAAC,EAAE,UAAU;AAE/D,QAAM,OAAO,QAAQ,SAAS;AAE9B,UAAQ;AAAA,IACN,oCAAoC,WAAW,KAAK,cAAc;AAAA,EACpE;AAGA,kBAAgB;AAClB;AAEA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,eAAa,MAAM,yCAAyC,KAAK;AACjE,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/tools.ts"],"sourcesContent":["import {\n shouldOutputJson,\n writeOutput,\n successEnvelope,\n info,\n} from \"./output.js\";\nimport { fetchToolCatalog } from \"./api-client.js\";\n\ninterface ToolEntry {\n name: string;\n title?: string;\n description?: string;\n inputSchema?: unknown;\n annotations?: Record<string, unknown>;\n provider?: string;\n}\n\nasync function loadToolCatalog(): Promise<ToolEntry[]> {\n const { getCachedTools, setCachedTools } = await import(\"./cache.js\");\n const cached = getCachedTools();\n if (cached) return cached as ToolEntry[];\n\n const response = await fetchToolCatalog();\n if (!response.ok) {\n const msg =\n response.error &&\n typeof response.error === \"object\" &&\n \"message\" in response.error\n ? String(response.error.message)\n : \"Failed to fetch tool catalog\";\n const { CliError } = await import(\"./errors.js\");\n const { outputError } = await import(\"./output.js\");\n await outputError(\n new CliError(\"API_ERROR\", msg, \"Check: hive doctor\"),\n {},\n );\n return [];\n }\n const data = response.data as\n | { totalCount?: number; tools?: ToolEntry[] }\n | ToolEntry[];\n const tools = Array.isArray(data)\n ? data\n : data &&\n typeof data === \"object\" &&\n \"tools\" in data &&\n Array.isArray(data.tools)\n ? data.tools\n : [];\n\n setCachedTools(tools);\n return tools;\n}\n\nexport async function listTools(opts: {\n category?: string;\n provider?: string;\n limit?: string;\n offset?: string;\n}): Promise<void> {\n let tools = await loadToolCatalog();\n\n if (opts.provider) {\n const prefix = opts.provider.toLowerCase();\n tools = tools.filter((t) => t.name.toLowerCase().startsWith(prefix + \"_\"));\n }\n\n if (opts.category) {\n const { NAMESPACE } = await import(\"./namespace.js\");\n const cat = opts.category.toLowerCase();\n const ns = NAMESPACE.find(\n (d) => d.name === cat || d.description.toLowerCase().includes(cat),\n );\n if (ns) {\n const categoryTools = new Set(ns.commands.map((cmd) => cmd.tool));\n tools = tools.filter((t) => categoryTools.has(t.name));\n } else {\n // Fallback: substring match on name/provider for unknown categories\n tools = tools.filter(\n (t) =>\n (t.provider ?? \"\").toLowerCase().includes(cat) ||\n (t.name ?? \"\").toLowerCase().includes(cat),\n );\n }\n }\n\n const totalFiltered = tools.length;\n const limit = Math.max(1, parseInt(opts.limit ?? \"50\", 10) || 50);\n const offset = Math.max(0, parseInt(opts.offset ?? \"0\", 10) || 0);\n tools = tools.slice(offset, offset + limit);\n\n const items = tools.map((t) => ({\n name: t.name,\n title: t.title,\n description:\n t.description && t.description.length > 120\n ? t.description.slice(0, 117) + \"...\"\n : t.description,\n }));\n\n const data = {\n totalCount: totalFiltered,\n offset,\n limit,\n showing: items.length,\n tools: items,\n };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, {}));\n return;\n }\n\n const { table } = await import(\"./format.js\");\n const rangeStart = totalFiltered === 0 ? 0 : offset + 1;\n const rangeEnd = offset + items.length;\n info(`\\nShowing ${rangeStart}-${rangeEnd} of ${totalFiltered} tools\\n`);\n info(\n table(\n [\"Name\", \"Title\"],\n items.map((t) => [t.name, t.title ?? \"\"]),\n ),\n );\n}\n\nexport async function searchTools(query: string): Promise<void> {\n const allTools = await loadToolCatalog();\n const q = query.toLowerCase();\n\n const matches = allTools.filter(\n (t) =>\n t.name.toLowerCase().includes(q) ||\n (t.description ?? \"\").toLowerCase().includes(q) ||\n (t.title ?? \"\").toLowerCase().includes(q),\n );\n\n const items = matches.map((t) => ({\n name: t.name,\n title: t.title,\n description:\n t.description && t.description.length > 120\n ? t.description.slice(0, 117) + \"...\"\n : t.description,\n }));\n\n const data = { totalCount: items.length, query, tools: items };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, {}));\n return;\n }\n\n const { table } = await import(\"./format.js\");\n info(`\\n${matches.length} matches for \"${query}\"\\n`);\n if (matches.length === 0) {\n info(\"No tools found. Try a broader search term.\\n\");\n return;\n }\n info(\n table(\n [\"Name\", \"Title\"],\n matches.map((t) => [t.name, t.title ?? \"\"]),\n ),\n );\n}\n\nexport async function toolInfo(name: string): Promise<void> {\n const allTools = await loadToolCatalog();\n const tool = allTools.find((t) => t.name === name);\n\n if (!tool) {\n const { CliError, suggestSimilarTools } = await import(\"./errors.js\");\n const { outputError } = await import(\"./output.js\");\n const similar = suggestSimilarTools(\n name,\n allTools.map((t) => t.name),\n );\n const suggestion =\n similar.length > 0\n ? `Did you mean: ${similar.join(\", \")}?`\n : `Run: hive tools search \"${name}\"`;\n await outputError(\n new CliError(\"TOOL_NOT_FOUND\", `Tool \"${name}\" not found`, suggestion),\n { tool: name },\n );\n }\n\n // After outputError (which calls process.exit), this is unreachable,\n // but TypeScript doesn't know that. The non-null assertion is safe.\n const t = tool!;\n\n const data = {\n name: t.name,\n title: t.title,\n provider: t.provider ?? null,\n readOnly: t.annotations?.readOnlyHint ?? null,\n description: t.description,\n inputSchema: t.inputSchema,\n };\n\n if (shouldOutputJson()) {\n await writeOutput(successEnvelope(data, { tool: name }));\n return;\n }\n\n info(`\\n${t.title ?? t.name}`);\n info(`Name: ${t.name}`);\n if (t.provider) info(`Provider: ${t.provider}`);\n info(`Read-only: ${t.annotations?.readOnlyHint ?? \"unknown\"}`);\n info(`\\nDescription:\\n${t.description}\\n`);\n if (t.inputSchema) {\n info(\"Input Schema:\");\n info(JSON.stringify(t.inputSchema, null, 2));\n }\n}\n\nexport async function refreshTools(): Promise<void> {\n const { clearCache } = await import(\"./cache.js\");\n const { info: printInfo } = await import(\"./output.js\");\n clearCache();\n printInfo(\"Cache cleared. Fetching fresh tool catalog...\\n\");\n const tools = await loadToolCatalog();\n printInfo(`${tools.length} tools loaded.\\n`);\n}\n"],"mappings":"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","names":["t"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/uninstall.ts"],"sourcesContent":["/**\n * `hive uninstall` — reverse the install. Strip Hive's MCP entry from\n * every client config we know about, remove skill packs, optionally\n * revoke the active key. Safe and idempotent.\n *\n * Doesn't uninstall the npm package itself — that's `npm uninstall -g\n * hive-intelligence`. We just clean up everything the CLI wrote into\n * external client configs and the user's home directory.\n */\n\nimport {\n removeClaudeCodeUserConfig,\n removeClaudeDesktopConfig,\n removeCursorConfig,\n removeGeminiCliConfig,\n removeVscodeConfig,\n removeWindsurfConfig,\n} from \"./config.js\";\nimport { detectClients, type ClientId } from \"./detect-clients.js\";\nimport { removeSkillsForClients } from \"./skills.js\";\nimport { bold, dim, green, yellow } from \"./output.js\";\n\nexport interface UninstallOptions {\n /** Clean every client config Hive knows about. */\n all?: boolean;\n /** Print plan; don't change anything. */\n dryRun?: boolean;\n /** JSON output for scripting. */\n json?: boolean;\n}\n\ninterface UninstallSummary {\n cleaned: { client: ClientId; path: string; removed: boolean }[];\n skills: { client: ClientId; removed: string[]; destination: string | null }[];\n dryRun: boolean;\n}\n\nfunction w(line: string): void {\n process.stderr.write(line + \"\\n\");\n}\n\nfunction ok(line: string): void {\n w(` ${green(\"✓\")} ${line}`);\n}\n\nfunction info(line: string): void {\n w(` ${dim(line)}`);\n}\n\nfunction warn(line: string): void {\n w(` ${yellow(\"!\")} ${line}`);\n}\n\nconst REMOVERS: Record<\n Exclude<ClientId, \"chatgpt-desktop\">,\n () => { removed: boolean; path: string }\n> = {\n \"claude-code\": removeClaudeCodeUserConfig,\n \"claude-desktop\": removeClaudeDesktopConfig,\n cursor: removeCursorConfig,\n vscode: removeVscodeConfig,\n windsurf: removeWindsurfConfig,\n \"gemini-cli\": removeGeminiCliConfig,\n};\n\nexport async function runUninstall(\n opts: UninstallOptions = {},\n): Promise<number> {\n const summary: UninstallSummary = {\n cleaned: [],\n skills: [],\n dryRun: Boolean(opts.dryRun),\n };\n\n if (!opts.json) {\n w(bold(\"\\nHive Intelligence — Uninstall\"));\n if (summary.dryRun) info(\"(dry-run — nothing will be changed)\");\n }\n\n const clients = detectClients();\n\n // Strip Hive entry from every config we manage. We try every client\n // even if not \"detected\" — the config could still have a stale Hive\n // entry from a prior install on a different machine config.\n if (!opts.json) w(bold(\"\\nRemoving from client configs\"));\n const clientIds: ClientId[] = [];\n for (const c of clients) {\n if (c.id === \"chatgpt-desktop\") {\n info(\"ChatGPT Desktop — remove manually via Settings → Connectors\");\n continue;\n }\n if (summary.dryRun) {\n info(`Would clean ${c.configPath}`);\n summary.cleaned.push({ client: c.id, path: c.configPath, removed: false });\n clientIds.push(c.id);\n continue;\n }\n const remove = REMOVERS[c.id as Exclude<ClientId, \"chatgpt-desktop\">];\n try {\n const result = remove();\n summary.cleaned.push({\n client: c.id,\n path: result.path,\n removed: result.removed,\n });\n if (result.removed) ok(`${c.name} ${dim(\"(\" + result.path + \")\")}`);\n else info(`${c.name} — no Hive entry to remove`);\n clientIds.push(c.id);\n } catch (err) {\n warn(\n `${c.name} — failed: ${err instanceof Error ? err.message : err}`,\n );\n }\n }\n\n // Remove skill packs.\n if (!opts.json) w(bold(\"\\nRemoving skill packs\"));\n if (summary.dryRun) {\n info(\"Would remove Hive packs from per-client skills dirs\");\n } else {\n summary.skills = removeSkillsForClients(clientIds);\n for (const r of summary.skills) {\n if (r.removed.length > 0) {\n ok(\n `${r.client}: ${r.removed.length} pack${\n r.removed.length === 1 ? \"\" : \"s\"\n } removed`,\n );\n }\n }\n }\n\n if (opts.json) {\n process.stdout.write(JSON.stringify(summary, null, 2) + \"\\n\");\n } else {\n w(\"\");\n w(bold(\"Done\"));\n info(\n \"Saved credentials at ~/.config/hive/ are kept. To remove, delete that directory or run `hive auth logout`.\",\n );\n info(\"To remove the CLI itself: npm uninstall -g hive-intelligence\");\n w(\"\");\n }\n\n return 0;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqCA,SAAS,EAAE,MAAoB;AAC7B,UAAQ,OAAO,MAAM,OAAO,IAAI;AAClC;AAEA,SAAS,GAAG,MAAoB;AAC9B,IAAE,KAAK,MAAM,QAAG,CAAC,IAAI,IAAI,EAAE;AAC7B;AAEA,SAAS,KAAK,MAAoB;AAChC,IAAE,KAAK,IAAI,IAAI,CAAC,EAAE;AACpB;AAEA,SAAS,KAAK,MAAoB;AAChC,IAAE,KAAK,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE;AAC9B;AAEA,IAAM,WAGF;AAAA,EACF,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,cAAc;AAChB;AAEA,eAAsB,aACpB,OAAyB,CAAC,GACT;AACjB,QAAM,UAA4B;AAAA,IAChC,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA,IACT,QAAQ,QAAQ,KAAK,MAAM;AAAA,EAC7B;AAEA,MAAI,CAAC,KAAK,MAAM;AACd,MAAE,KAAK,sCAAiC,CAAC;AACzC,QAAI,QAAQ,OAAQ,MAAK,0CAAqC;AAAA,EAChE;AAEA,QAAM,UAAU,cAAc;AAK9B,MAAI,CAAC,KAAK,KAAM,GAAE,KAAK,gCAAgC,CAAC;AACxD,QAAM,YAAwB,CAAC;AAC/B,aAAW,KAAK,SAAS;AACvB,QAAI,EAAE,OAAO,mBAAmB;AAC9B,WAAK,uEAA6D;AAClE;AAAA,IACF;AACA,QAAI,QAAQ,QAAQ;AAClB,WAAK,eAAe,EAAE,UAAU,EAAE;AAClC,cAAQ,QAAQ,KAAK,EAAE,QAAQ,EAAE,IAAI,MAAM,EAAE,YAAY,SAAS,MAAM,CAAC;AACzE,gBAAU,KAAK,EAAE,EAAE;AACnB;AAAA,IACF;AACA,UAAM,SAAS,SAAS,EAAE,EAA0C;AACpE,QAAI;AACF,YAAM,SAAS,OAAO;AACtB,cAAQ,QAAQ,KAAK;AAAA,QACnB,QAAQ,EAAE;AAAA,QACV,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,MAClB,CAAC;AACD,UAAI,OAAO,QAAS,IAAG,GAAG,EAAE,IAAI,IAAI,IAAI,MAAM,OAAO,OAAO,GAAG,CAAC,EAAE;AAAA,UAC7D,MAAK,GAAG,EAAE,IAAI,iCAA4B;AAC/C,gBAAU,KAAK,EAAE,EAAE;AAAA,IACrB,SAAS,KAAK;AACZ;AAAA,QACE,GAAG,EAAE,IAAI,mBAAc,eAAe,QAAQ,IAAI,UAAU,GAAG;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAAC,KAAK,KAAM,GAAE,KAAK,wBAAwB,CAAC;AAChD,MAAI,QAAQ,QAAQ;AAClB,SAAK,qDAAqD;AAAA,EAC5D,OAAO;AACL,YAAQ,SAAS,uBAAuB,SAAS;AACjD,eAAW,KAAK,QAAQ,QAAQ;AAC9B,UAAI,EAAE,QAAQ,SAAS,GAAG;AACxB;AAAA,UACE,GAAG,EAAE,MAAM,KAAK,EAAE,QAAQ,MAAM,QAC9B,EAAE,QAAQ,WAAW,IAAI,KAAK,GAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,MAAM;AACb,YAAQ,OAAO,MAAM,KAAK,UAAU,SAAS,MAAM,CAAC,IAAI,IAAI;AAAA,EAC9D,OAAO;AACL,MAAE,EAAE;AACJ,MAAE,KAAK,MAAM,CAAC;AACd;AAAA,MACE;AAAA,IACF;AACA,SAAK,8DAA8D;AACnE,MAAE,EAAE;AAAA,EACN;AAEA,SAAO;AACT;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/watch.ts"],"sourcesContent":["import { executeTool } from \"./execute.js\";\n\nconst MAX_CONSECUTIVE_FAILURES = 10;\n\nexport async function runWatch(\n toolName: string,\n args: Record<string, unknown>,\n intervalSec: number,\n timeoutMs: number,\n): Promise<void> {\n process.stderr.write(\n `Watching ${toolName} every ${intervalSec}s (Ctrl+C to stop)\\n\\n`,\n );\n\n let consecutiveFailures = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const run = async () => {\n const timestamp = new Date().toISOString().replace(\"T\", \" \").slice(0, 19);\n process.stderr.write(`── ${timestamp} ──\\n`);\n try {\n await executeTool(toolName, args, timeoutMs);\n consecutiveFailures = 0;\n } catch (err) {\n consecutiveFailures++;\n const msg = err instanceof Error ? err.message : String(err);\n process.stderr.write(\n ` Error (${consecutiveFailures}/${MAX_CONSECUTIVE_FAILURES}): ${msg}\\n`,\n );\n\n if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {\n process.stderr.write(\n `\\nAborting watch: ${MAX_CONSECUTIVE_FAILURES} consecutive failures.\\n`,\n );\n process.exit(4);\n }\n }\n process.stderr.write(\"\\n\");\n\n // Exponential backoff on consecutive failures: double interval per failure, cap at 5x\n const backoffMultiplier = Math.min(Math.pow(2, consecutiveFailures), 5);\n const nextInterval =\n consecutiveFailures > 0 ? intervalSec * backoffMultiplier : intervalSec;\n\n if (consecutiveFailures > 0) {\n process.stderr.write(` Backing off: next poll in ${nextInterval}s\\n`);\n }\n\n timer = setTimeout(run, nextInterval * 1000);\n };\n\n await run();\n\n const cleanup = () => {\n if (timer) clearTimeout(timer);\n process.stderr.write(\"\\nWatch stopped.\\n\");\n process.exit(0);\n };\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n await new Promise(() => {});\n}\n"],"mappings":";;;;;;;;;;;AAEA,IAAM,2BAA2B;AAEjC,eAAsB,SACpB,UACA,MACA,aACA,WACe;AACf,UAAQ,OAAO;AAAA,IACb,YAAY,QAAQ,UAAU,WAAW;AAAA;AAAA;AAAA,EAC3C;AAEA,MAAI,sBAAsB;AAC1B,MAAI,QAA8C;AAElD,QAAM,MAAM,YAAY;AACtB,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE;AACxE,YAAQ,OAAO,MAAM,gBAAM,SAAS;AAAA,CAAO;AAC3C,QAAI;AACF,YAAM,YAAY,UAAU,MAAM,SAAS;AAC3C,4BAAsB;AAAA,IACxB,SAAS,KAAK;AACZ;AACA,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,cAAQ,OAAO;AAAA,QACb,YAAY,mBAAmB,IAAI,wBAAwB,MAAM,GAAG;AAAA;AAAA,MACtE;AAEA,UAAI,uBAAuB,0BAA0B;AACnD,gBAAQ,OAAO;AAAA,UACb;AAAA,kBAAqB,wBAAwB;AAAA;AAAA,QAC/C;AACA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AACA,YAAQ,OAAO,MAAM,IAAI;AAGzB,UAAM,oBAAoB,KAAK,IAAI,KAAK,IAAI,GAAG,mBAAmB,GAAG,CAAC;AACtE,UAAM,eACJ,sBAAsB,IAAI,cAAc,oBAAoB;AAE9D,QAAI,sBAAsB,GAAG;AAC3B,cAAQ,OAAO,MAAM,+BAA+B,YAAY;AAAA,CAAK;AAAA,IACvE;AAEA,YAAQ,WAAW,KAAK,eAAe,GAAI;AAAA,EAC7C;AAEA,QAAM,IAAI;AAEV,QAAM,UAAU,MAAM;AACpB,QAAI,MAAO,cAAa,KAAK;AAC7B,YAAQ,OAAO,MAAM,oBAAoB;AACzC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,UAAQ,GAAG,UAAU,OAAO;AAC5B,UAAQ,GAAG,WAAW,OAAO;AAE7B,QAAM,IAAI,QAAQ,MAAM;AAAA,EAAC,CAAC;AAC5B;","names":[]}