hive-intelligence 1.1.2 → 1.1.4

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 (148) hide show
  1. package/LICENSE +12 -10
  2. package/README.md +325 -351
  3. package/agent-skills/.claude-plugin/plugin.json +111 -0
  4. package/agent-skills/.mcp.json +11 -0
  5. package/agent-skills/AGENTS.md +37 -0
  6. package/agent-skills/LICENSE +21 -0
  7. package/agent-skills/README.md +145 -0
  8. package/agent-skills/SKILL.md +80 -0
  9. package/agent-skills/evals/README.md +20 -0
  10. package/agent-skills/evals/trigger-queries.json +464 -0
  11. package/agent-skills/package.json +49 -0
  12. package/agent-skills/packs/hive-build/SKILL.md +328 -0
  13. package/agent-skills/packs/hive-build/evals/evals.json +28 -0
  14. package/agent-skills/packs/hive-build-onboarding/SKILL.md +137 -0
  15. package/agent-skills/packs/hive-build-onboarding/evals/evals.json +27 -0
  16. package/agent-skills/packs/hive-cli/SKILL.md +141 -0
  17. package/agent-skills/packs/hive-cli/evals/evals.json +27 -0
  18. package/agent-skills/packs/hive-defi-research/SKILL.md +42 -0
  19. package/agent-skills/packs/hive-defi-research/evals/evals.json +27 -0
  20. package/agent-skills/packs/hive-defi-research/references/workflow.md +41 -0
  21. package/agent-skills/packs/hive-dex-pool-analysis/SKILL.md +41 -0
  22. package/agent-skills/packs/hive-dex-pool-analysis/evals/evals.json +27 -0
  23. package/agent-skills/packs/hive-dex-pool-analysis/references/workflow.md +42 -0
  24. package/agent-skills/packs/hive-market-research/SKILL.md +45 -0
  25. package/agent-skills/packs/hive-market-research/evals/evals.json +27 -0
  26. package/agent-skills/packs/hive-market-research/references/workflow.md +47 -0
  27. package/agent-skills/packs/hive-mcp/SKILL.md +147 -0
  28. package/agent-skills/packs/hive-mcp/evals/evals.json +38 -0
  29. package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +83 -0
  30. package/agent-skills/packs/hive-mcp/references/clients.md +141 -0
  31. package/agent-skills/packs/hive-network-infrastructure/SKILL.md +44 -0
  32. package/agent-skills/packs/hive-network-infrastructure/evals/evals.json +27 -0
  33. package/agent-skills/packs/hive-network-infrastructure/references/workflow.md +41 -0
  34. package/agent-skills/packs/hive-nft-research/SKILL.md +41 -0
  35. package/agent-skills/packs/hive-nft-research/evals/evals.json +27 -0
  36. package/agent-skills/packs/hive-nft-research/references/workflow.md +42 -0
  37. package/agent-skills/packs/hive-prediction-markets/SKILL.md +44 -0
  38. package/agent-skills/packs/hive-prediction-markets/evals/evals.json +27 -0
  39. package/agent-skills/packs/hive-prediction-markets/references/workflow.md +42 -0
  40. package/agent-skills/packs/hive-query/SKILL.md +99 -0
  41. package/agent-skills/packs/hive-query/evals/evals.json +38 -0
  42. package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +54 -0
  43. package/agent-skills/packs/hive-security-risk/SKILL.md +42 -0
  44. package/agent-skills/packs/hive-security-risk/evals/evals.json +27 -0
  45. package/agent-skills/packs/hive-security-risk/references/workflow.md +46 -0
  46. package/agent-skills/packs/hive-solana-analysis/SKILL.md +42 -0
  47. package/agent-skills/packs/hive-solana-analysis/evals/evals.json +27 -0
  48. package/agent-skills/packs/hive-solana-analysis/references/workflow.md +42 -0
  49. package/agent-skills/packs/hive-stateful-monitoring/SKILL.md +75 -0
  50. package/agent-skills/packs/hive-stateful-monitoring/evals/evals.json +49 -0
  51. package/agent-skills/packs/hive-token-diligence/SKILL.md +44 -0
  52. package/agent-skills/packs/hive-token-diligence/evals/evals.json +27 -0
  53. package/agent-skills/packs/hive-token-diligence/references/workflow.md +45 -0
  54. package/agent-skills/packs/hive-tool-discovery/SKILL.md +49 -0
  55. package/agent-skills/packs/hive-tool-discovery/evals/evals.json +38 -0
  56. package/agent-skills/packs/hive-tool-discovery/references/discovery-surfaces.md +62 -0
  57. package/agent-skills/packs/hive-wallet-investigation/SKILL.md +42 -0
  58. package/agent-skills/packs/hive-wallet-investigation/evals/evals.json +27 -0
  59. package/agent-skills/packs/hive-wallet-investigation/references/workflow.md +45 -0
  60. package/agent-skills/references/agents-routing.md +51 -0
  61. package/agent-skills/scripts/validate-agent-skills-package.mjs +216 -0
  62. package/agent-skills/skills.sh.json +41 -0
  63. package/bin/hive-mcp.js +33 -0
  64. package/build/{alias-INGXWFCG.js → alias-3OPMQF4X.js} +2 -3
  65. package/build/api-client-EPF6FD7A.js +28 -0
  66. package/build/auth-Q5Q24IRI.js +39 -0
  67. package/build/browser-auth-VPF5LZMZ.js +8 -0
  68. package/build/{cache-US4LSZPI.js → cache-T6KC5YEY.js} +2 -3
  69. package/build/{chunk-QMRVH5ZP.js → chunk-3WYWXTNN.js} +9 -2
  70. package/build/chunk-4F5CI6LX.js +340 -0
  71. package/build/chunk-5XXI25JE.js +496 -0
  72. package/build/chunk-7JWXBKEJ.js +252 -0
  73. package/build/chunk-CEWCB5YS.js +71 -0
  74. package/build/{chunk-CGXVV6WR.js → chunk-FH3YGSY5.js} +86 -105
  75. package/build/chunk-FRXMGRZQ.js +102 -0
  76. package/build/chunk-GZPDEXO4.js +126 -0
  77. package/build/chunk-IZPAMRHP.js +43 -0
  78. package/build/chunk-JTUKQWIO.js +79720 -0
  79. package/build/{chunk-CP3FXEQA.js → chunk-NP6NSOG2.js} +4 -6
  80. package/build/{chunk-XQJ6PB2L.js → chunk-POT2MBEK.js} +0 -1
  81. package/build/chunk-VBOKVQ74.js +280 -0
  82. package/build/{chunk-WKVZVQTG.js → chunk-YZ2PXBJK.js} +6 -4
  83. package/build/chunk-ZCU7XQKF.js +14 -0
  84. package/build/chunk-ZTJVOWDQ.js +85 -0
  85. package/build/chunk-ZXB53E7H.js +246 -0
  86. package/build/cli.js +138 -125
  87. package/build/{completion-J6HFY6PS.js → completion-46K674EL.js} +54 -50
  88. package/build/config-XE6Q5P4I.js +57 -0
  89. package/build/{config-dir-IEOID7Q6.js → config-dir-MAWX5AUF.js} +2 -3
  90. package/build/{doctor-7WZMCQC7.js → doctor-HGMQE6IN.js} +37 -13
  91. package/build/{errors-U6UZWVSD.js → errors-J2PH3NLJ.js} +2 -3
  92. package/build/format-5X2HIVDT.js +42 -0
  93. package/build/{init-CAVIFVSH.js → init-JMDNM7ZZ.js} +1 -2
  94. package/build/init-all-5SKNV75X.js +273 -0
  95. package/build/mcpServer-5TKKSKJM.js +21 -0
  96. package/build/monitor-worker.js +1140 -0
  97. package/build/{namespace-7JWWBWBL.js → namespace-FSX2G3NM.js} +2 -3
  98. package/build/{open-FUXYIHFO.js → open-5A6ZQMGC.js} +5 -6
  99. package/build/{output-7PGQWJY2.js → output-V3D4YZ6U.js} +2 -3
  100. package/build/serve-AGCOXXFM.js +49 -0
  101. package/build/server.js +5042 -14125
  102. package/build/setup-RMETGJWK.js +135 -0
  103. package/build/stdio.js +32 -0
  104. package/build/{telemetry-KNWMQURH.js → telemetry-WCME5XEU.js} +4 -4
  105. package/build/{tools-VRRMBCZQ.js → tools-KAB6QBZC.js} +15 -15
  106. package/build/uninstall-FLJMBBSC.js +114 -0
  107. package/build/update-check-LNZQK3XA.js +18 -0
  108. package/build/upgrade-DTUIHVPS.js +171 -0
  109. package/build/version-I6HDAF4L.js +14 -0
  110. package/build/{watch-A75SVIQ6.js → watch-YNN255QX.js} +7 -7
  111. package/package.json +124 -53
  112. package/bin/hive.js +0 -25
  113. package/build/alias-INGXWFCG.js.map +0 -1
  114. package/build/auth-77MKFFBQ.js +0 -233
  115. package/build/auth-77MKFFBQ.js.map +0 -1
  116. package/build/cache-US4LSZPI.js.map +0 -1
  117. package/build/chunk-CGXVV6WR.js.map +0 -1
  118. package/build/chunk-CP3FXEQA.js.map +0 -1
  119. package/build/chunk-DTUDM6HX.js +0 -3108
  120. package/build/chunk-DTUDM6HX.js.map +0 -1
  121. package/build/chunk-LBTLYTZS.js +0 -115
  122. package/build/chunk-LBTLYTZS.js.map +0 -1
  123. package/build/chunk-OK3LSM73.js +0 -22
  124. package/build/chunk-OK3LSM73.js.map +0 -1
  125. package/build/chunk-QMRVH5ZP.js.map +0 -1
  126. package/build/chunk-RRI526CJ.js +0 -212
  127. package/build/chunk-RRI526CJ.js.map +0 -1
  128. package/build/chunk-WKVZVQTG.js.map +0 -1
  129. package/build/chunk-XQJ6PB2L.js.map +0 -1
  130. package/build/cli.js.map +0 -1
  131. package/build/completion-J6HFY6PS.js.map +0 -1
  132. package/build/config-ANFERP7A.js +0 -99
  133. package/build/config-ANFERP7A.js.map +0 -1
  134. package/build/config-dir-IEOID7Q6.js.map +0 -1
  135. package/build/doctor-7WZMCQC7.js.map +0 -1
  136. package/build/errors-U6UZWVSD.js.map +0 -1
  137. package/build/format-CVLLK6GD.js +0 -75
  138. package/build/format-CVLLK6GD.js.map +0 -1
  139. package/build/init-CAVIFVSH.js.map +0 -1
  140. package/build/namespace-7JWWBWBL.js.map +0 -1
  141. package/build/open-FUXYIHFO.js.map +0 -1
  142. package/build/output-7PGQWJY2.js.map +0 -1
  143. package/build/server.js.map +0 -1
  144. package/build/telemetry-KNWMQURH.js.map +0 -1
  145. package/build/tools-VRRMBCZQ.js.map +0 -1
  146. package/build/version-3TZ3U4IR.js +0 -9
  147. package/build/version-3TZ3U4IR.js.map +0 -1
  148. package/build/watch-A75SVIQ6.js.map +0 -1
@@ -0,0 +1,27 @@
1
+ {
2
+ "skill_name": "hive-wallet-investigation",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Investigate this Ethereum wallet's balances and recent transfers: 0x0000000000000000000000000000000000000000",
7
+ "expected_output": "Uses wallet_investigation, validates chain/address, starts with balances, adds bounded recent transfers, and reports source/freshness/runtime status.",
8
+ "files": [],
9
+ "assertions": [
10
+ "Chooses wallet_investigation.",
11
+ "Starts with balances/native balance.",
12
+ "Bounds transfer history."
13
+ ]
14
+ },
15
+ {
16
+ "id": 2,
17
+ "prompt": "This EVM wallet might be active on several chains. Can you inspect it?",
18
+ "expected_output": "Asks whether the user wants a specific chain or multi-chain scope, avoids silently mixing chains, and labels each provider/source.",
19
+ "files": [],
20
+ "assertions": [
21
+ "Asks for chain scope or states multi-chain plan.",
22
+ "Does not silently mix chain data.",
23
+ "Reports provider/runtime caveats."
24
+ ]
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,45 @@
1
+ # Wallet Investigation Workflow
2
+
3
+ Use this reference for wallet balances, transfers, PnL, NFTs, DeFi positions,
4
+ and notable activity.
5
+
6
+ ## Required identifiers
7
+
8
+ - Wallet address.
9
+ - Chain/network, unless the user explicitly asks for multi-chain.
10
+ - Optional: time window, asset filter, counterparty, protocol, or NFT
11
+ collection.
12
+
13
+ Ask for chain when an EVM address appears without context. For Solana wallets,
14
+ use the Solana skill when the request is Solana-specific.
15
+
16
+ ## Tool selection order
17
+
18
+ 1. Validate the identifier shape for the requested chain.
19
+ 2. Use `search_tools` for wallet balance, native balance, transfer, NFT, DeFi,
20
+ and PnL tools.
21
+ 3. Inspect schemas before endpoint invocation.
22
+ 4. Start with balances/native balance.
23
+ 5. Add transfers for activity questions.
24
+ 6. Add NFTs, DeFi positions, or PnL only when relevant.
25
+
26
+ ## Bounded calls
27
+
28
+ - Use explicit `limit`, `page`, `per_page`, or time filters for transfers.
29
+ - Do not fetch full history for a quick portfolio read.
30
+ - Avoid mixing chains unless the user requested multi-chain analysis.
31
+
32
+ ## Report template
33
+
34
+ - Summary: wallet posture and notable finding.
35
+ - Calls made: endpoints, chain, wallet, filters.
36
+ - Evidence: balances, transfers, exposure, provider/freshness/runtime status.
37
+ - Caveats: missing chains, truncated history, unavailable enrichment, degraded
38
+ providers.
39
+ - Next action: chain expansion, transfer drilldown, risk check, or PnL detail.
40
+
41
+ ## Gotchas
42
+
43
+ - Wallet labels and owner identity are not guaranteed.
44
+ - Token balances can include spam or illiquid assets.
45
+ - Absence of DeFi/NFT data may reflect provider coverage, not true absence.
@@ -0,0 +1,51 @@
1
+ # Hive AGENTS.md Routing Snippet
2
+
3
+ Use this compact routing block in `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, or a
4
+ client-specific always-loaded instruction file. It solves the common failure
5
+ mode where the skill exists but the agent answers from memory before loading it.
6
+
7
+ ```markdown
8
+ ## Hive MCP Routing
9
+
10
+ For live crypto intelligence, prefer Hive retrieval over model memory.
11
+
12
+ - User asks about live crypto data, prices, wallets, tokens, DeFi, NFTs,
13
+ Solana, security, DEX pools, network state, or prediction markets:
14
+ use `hive-query`.
15
+ - Exact Hive endpoint, provider, schema, or argument shape is unknown:
16
+ use `hive-tool-discovery`.
17
+ - Clear domain request:
18
+ - prices, liquidity, exchanges, OHLC, order books: `hive-market-research`
19
+ - token metadata, holders, liquidity, enrichment, risk:
20
+ `hive-token-diligence`
21
+ - wallet balances, transfers, PnL, NFTs, DeFi positions:
22
+ `hive-wallet-investigation`
23
+ - token, approval, contract, dApp, phishing, simulation risk:
24
+ `hive-security-risk`
25
+ - DEX pools, pairs, trades, liquidity, OHLCV: `hive-dex-pool-analysis`
26
+ - protocol TVL, fees, yields, stablecoins, bridges:
27
+ `hive-defi-research`
28
+ - NFT ownership, metadata, floors, sales, rarity: `hive-nft-research`
29
+ - Solana wallets, SPL accounts, DAS assets, priority fees:
30
+ `hive-solana-analysis`
31
+ - blocks, gas, receipts, logs, RPC diagnostics:
32
+ `hive-network-infrastructure`
33
+ - prediction markets, events, outcomes, traders:
34
+ `hive-prediction-markets`
35
+ - User asks Hive to remember, monitor, schedule, alert, or report crypto
36
+ intelligence across sessions: use `hive-stateful-monitoring`.
37
+ - Setup, API key, CLI, or app integration:
38
+ use `hive-mcp`, `hive-build-onboarding`, `hive-cli`, or `hive-build`.
39
+
40
+ Default execution loop:
41
+ 1. Read `hive://toolsets` or call `search_tools`.
42
+ 2. Select one task toolset or exact endpoint.
43
+ 3. Call `get_api_endpoint_schema`.
44
+ 4. Execute through `invoke_api_endpoint` with bounded args.
45
+ 5. Report provider, source/freshness, fallback/cache/degraded state, and
46
+ runtime status (`ok`, `missing_key`, `plan_required`, `rate_limited`,
47
+ `degraded`, or `failing`).
48
+ ```
49
+
50
+ Keep this snippet short. The skill files carry the detailed workflow and should
51
+ be loaded only after the routing layer selects the right Hive skill.
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+
6
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
7
+ const packsRoot = join(root, "packs");
8
+ const failures = [];
9
+
10
+ const workflowReferenceSkills = new Set([
11
+ "hive-market-research",
12
+ "hive-token-diligence",
13
+ "hive-wallet-investigation",
14
+ "hive-security-risk",
15
+ "hive-dex-pool-analysis",
16
+ "hive-defi-research",
17
+ "hive-nft-research",
18
+ "hive-solana-analysis",
19
+ "hive-network-infrastructure",
20
+ "hive-prediction-markets",
21
+ ]);
22
+
23
+ function fail(message) {
24
+ failures.push(message);
25
+ console.log(`- [FAIL] ${message}`);
26
+ }
27
+
28
+ function readJson(file) {
29
+ try {
30
+ return JSON.parse(readFileSync(file, "utf8"));
31
+ } catch (error) {
32
+ fail(`${file} is not valid JSON: ${error.message}`);
33
+ return null;
34
+ }
35
+ }
36
+
37
+ function frontmatter(body, file) {
38
+ const match = body.match(/^---\n([\s\S]*?)\n---/);
39
+ if (!match) {
40
+ fail(`${file} is missing YAML frontmatter.`);
41
+ return "";
42
+ }
43
+ return match[1];
44
+ }
45
+
46
+ function field(frontmatterBody, name) {
47
+ return frontmatterBody.match(new RegExp(`^${name}:\\s*(.*)$`, "m"))?.[1] ?? "";
48
+ }
49
+
50
+ console.log("# Hive Agent Skills Package Validation\n");
51
+
52
+ if (!existsSync(join(root, "LICENSE"))) fail("agent-skills/LICENSE is missing.");
53
+ if (!existsSync(join(root, "SKILL.md"))) fail("agent-skills/SKILL.md is missing.");
54
+ if (!existsSync(join(root, "skills.sh.json"))) fail("agent-skills/skills.sh.json is missing.");
55
+ if (!existsSync(join(root, "references", "agents-routing.md"))) {
56
+ fail("agent-skills/references/agents-routing.md is missing.");
57
+ }
58
+ if (!existsSync(join(root, "evals", "trigger-queries.json"))) {
59
+ fail("agent-skills/evals/trigger-queries.json is missing.");
60
+ }
61
+
62
+ const skillDirs = readdirSync(packsRoot, { withFileTypes: true })
63
+ .filter((entry) => entry.isDirectory())
64
+ .map((entry) => entry.name)
65
+ .sort();
66
+
67
+ for (const skillName of skillDirs) {
68
+ const skillDir = join(packsRoot, skillName);
69
+ const skillFile = join(skillDir, "SKILL.md");
70
+ console.log(`### ${skillName}`);
71
+
72
+ if (!existsSync(skillFile)) {
73
+ fail(`${skillName} is missing SKILL.md.`);
74
+ continue;
75
+ }
76
+
77
+ const body = readFileSync(skillFile, "utf8");
78
+ const fm = frontmatter(body, skillFile);
79
+ const name = field(fm, "name");
80
+ const description = field(fm, "description");
81
+
82
+ if (name !== skillName) fail(`${skillName} frontmatter name must match directory.`);
83
+ if (!description.startsWith("Use this skill")) {
84
+ fail(`${skillName} description must start with trigger language: "Use this skill".`);
85
+ }
86
+ if (description.includes(": ")) {
87
+ fail(`${skillName} description contains ': ', which breaks some YAML parsers unless quoted.`);
88
+ }
89
+ if (description.length > 1024) fail(`${skillName} description exceeds 1024 characters.`);
90
+ if (!field(fm, "license")) fail(`${skillName} is missing license frontmatter.`);
91
+ if (!fm.includes("metadata:\n")) fail(`${skillName} is missing metadata frontmatter.`);
92
+ if (!fm.includes('package: "@hiveintelligence/agent-skills"')) {
93
+ fail(`${skillName} metadata.package must identify @hiveintelligence/agent-skills.`);
94
+ }
95
+ if (!body.includes("## Runtime status handling")) {
96
+ fail(`${skillName} must document runtime status handling.`);
97
+ }
98
+
99
+ const evalFile = join(skillDir, "evals", "evals.json");
100
+ if (!existsSync(evalFile)) {
101
+ fail(`${skillName} is missing evals/evals.json.`);
102
+ } else {
103
+ const evals = readJson(evalFile);
104
+ if (evals?.skill_name !== skillName) fail(`${skillName} eval skill_name mismatch.`);
105
+ if (!Array.isArray(evals?.evals) || evals.evals.length < 2) {
106
+ fail(`${skillName} must define at least two eval prompts.`);
107
+ }
108
+ for (const entry of evals?.evals ?? []) {
109
+ if (!entry.prompt || !entry.expected_output) {
110
+ fail(`${skillName} eval ${entry.id ?? "unknown"} needs prompt and expected_output.`);
111
+ }
112
+ if (!Array.isArray(entry.assertions) || entry.assertions.length === 0) {
113
+ fail(`${skillName} eval ${entry.id ?? "unknown"} needs assertions.`);
114
+ }
115
+ }
116
+ }
117
+
118
+ if (workflowReferenceSkills.has(skillName)) {
119
+ const workflow = join(skillDir, "references", "workflow.md");
120
+ if (!existsSync(workflow)) fail(`${skillName} is missing references/workflow.md.`);
121
+ }
122
+
123
+ const referenceMatches = [...body.matchAll(/`(references\/[^`]+)`/g)];
124
+ for (const match of referenceMatches) {
125
+ const referenced = join(skillDir, match[1]);
126
+ if (!existsSync(referenced)) fail(`${skillName} references missing file ${match[1]}.`);
127
+ }
128
+ }
129
+
130
+ const directoryManifest = readJson(join(root, "skills.sh.json"));
131
+ if (directoryManifest) {
132
+ const groupedSkills = new Set();
133
+ for (const grouping of directoryManifest.groupings ?? []) {
134
+ for (const skill of grouping.skills ?? []) groupedSkills.add(skill);
135
+ }
136
+ for (const skillName of skillDirs) {
137
+ if (!groupedSkills.has(skillName)) fail(`${skillName} is missing from skills.sh.json groupings.`);
138
+ }
139
+ }
140
+
141
+ // Cross-manifest consistency: every pack on disk must also be installable via
142
+ // the Claude plugin manifest and routed in the top-level SKILL.md. This guards
143
+ // the drift mode where a pack ships with evals but is invisible to install and
144
+ // routing (e.g. a skill missing from plugin.json never loads via plugin install).
145
+ const pluginManifestPath = join(root, ".claude-plugin", "plugin.json");
146
+ if (!existsSync(pluginManifestPath)) {
147
+ fail("agent-skills/.claude-plugin/plugin.json is missing.");
148
+ } else {
149
+ const pluginManifest = readJson(pluginManifestPath);
150
+ if (pluginManifest) {
151
+ const pluginSkills = new Set((pluginManifest.skills ?? []).map((skill) => skill.name));
152
+ for (const skillName of skillDirs) {
153
+ if (!pluginSkills.has(skillName)) {
154
+ fail(`${skillName} is missing from .claude-plugin/plugin.json skills.`);
155
+ }
156
+ }
157
+ for (const entry of pluginManifest.skills ?? []) {
158
+ const referenced = entry.path ? join(root, ".claude-plugin", entry.path) : "";
159
+ if (!referenced || !existsSync(referenced)) {
160
+ fail(`plugin.json skill ${entry.name ?? "unknown"} path does not resolve: ${entry.path}`);
161
+ }
162
+ }
163
+ if (!pluginManifest.mcpServers) {
164
+ fail("plugin.json must declare mcpServers so installing the plugin also connects Hive MCP.");
165
+ } else if (typeof pluginManifest.mcpServers === "string") {
166
+ const mcpPath = join(root, pluginManifest.mcpServers);
167
+ if (!existsSync(mcpPath)) {
168
+ fail(`plugin.json mcpServers points to missing file ${pluginManifest.mcpServers}.`);
169
+ } else {
170
+ const mcp = readJson(mcpPath);
171
+ const hive = mcp?.mcpServers?.hive;
172
+ if (!hive?.url || !hive.url.includes("mcp.hiveintelligence.xyz")) {
173
+ fail(`${pluginManifest.mcpServers} must define mcpServers.hive.url for the hosted Hive endpoint.`);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
+ const rootSkillBody = existsSync(join(root, "SKILL.md"))
181
+ ? readFileSync(join(root, "SKILL.md"), "utf8")
182
+ : "";
183
+ for (const skillName of skillDirs) {
184
+ if (rootSkillBody && !rootSkillBody.includes(skillName)) {
185
+ fail(`${skillName} is not routed in the top-level SKILL.md.`);
186
+ }
187
+ }
188
+
189
+ const triggerQueries = readJson(join(root, "evals", "trigger-queries.json"));
190
+ if (triggerQueries) {
191
+ const triggerSkillNames = new Set();
192
+ for (const skill of triggerQueries.skills ?? []) {
193
+ triggerSkillNames.add(skill.skill_name);
194
+ if (!skillDirs.includes(skill.skill_name)) {
195
+ fail(`trigger-queries references unknown skill ${skill.skill_name}.`);
196
+ }
197
+ for (const split of ["train", "validation"]) {
198
+ for (const query of skill[split] ?? []) {
199
+ if (typeof query.query !== "string" || typeof query.should_trigger !== "boolean") {
200
+ fail(`trigger-queries ${skill.skill_name}.${split} entries need query and should_trigger.`);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ for (const skillName of skillDirs) {
206
+ if (!triggerSkillNames.has(skillName)) {
207
+ fail(`trigger-queries must include trigger coverage for ${skillName}.`);
208
+ }
209
+ }
210
+ }
211
+
212
+ console.log("\n## Summary");
213
+ console.log(`Skills: ${skillDirs.length}`);
214
+ console.log(`Failures: ${failures.length}`);
215
+
216
+ if (failures.length > 0) process.exit(1);
@@ -0,0 +1,41 @@
1
+ {
2
+ "$schema": "https://skills.sh/schemas/skills.sh.schema.json",
3
+ "notGrouped": "bottom",
4
+ "groupings": [
5
+ {
6
+ "title": "Setup and Build",
7
+ "description": "Skills for installing Hive MCP, getting API keys, using the Hive CLI, and integrating Hive into application code.",
8
+ "skills": [
9
+ "hive-mcp",
10
+ "hive-build-onboarding",
11
+ "hive-cli",
12
+ "hive-build"
13
+ ]
14
+ },
15
+ {
16
+ "title": "Discovery and Routing",
17
+ "description": "Skills that teach agents how to discover task toolsets, inspect schemas, and execute bounded Hive MCP calls.",
18
+ "skills": [
19
+ "hive-query",
20
+ "hive-tool-discovery"
21
+ ]
22
+ },
23
+ {
24
+ "title": "Crypto Research Workflows",
25
+ "description": "Focused workflows for market, token, wallet, security, DEX, DeFi, NFT, Solana, network, prediction-market, and stateful monitoring analysis.",
26
+ "skills": [
27
+ "hive-market-research",
28
+ "hive-token-diligence",
29
+ "hive-wallet-investigation",
30
+ "hive-security-risk",
31
+ "hive-dex-pool-analysis",
32
+ "hive-defi-research",
33
+ "hive-nft-research",
34
+ "hive-solana-analysis",
35
+ "hive-network-infrastructure",
36
+ "hive-prediction-markets",
37
+ "hive-stateful-monitoring"
38
+ ]
39
+ }
40
+ ]
41
+ }
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+
3
+ // CJS-style version check runs BEFORE ESM parsing.
4
+ // In an ESM file (type:module), static imports are parsed before execution,
5
+ // so a version check using `if (major < 20)` would never execute on old Node.
6
+ // However, since this file IS ESM and uses import statements, the check below
7
+ // is a best-effort guard for Node 20+ (which already supports ESM + TLA).
8
+ // For Node <16, this file fails at parse time with a SyntaxError — engines
9
+ // field in package.json is the primary enforcement mechanism.
10
+
11
+ const major = parseInt(process.versions.node.split(".")[0], 10);
12
+ if (major < 20) {
13
+ process.stderr.write(
14
+ `Error: hive requires Node.js 20 or later (found ${process.versions.node}).\n`,
15
+ );
16
+ process.exit(1);
17
+ }
18
+
19
+ import { dirname, join } from "node:path";
20
+ import { fileURLToPath } from "node:url";
21
+ import { existsSync } from "node:fs";
22
+
23
+ const __dirname = dirname(fileURLToPath(import.meta.url));
24
+ const cliPath = join(__dirname, "..", "build", "cli.js");
25
+
26
+ if (!existsSync(cliPath)) {
27
+ process.stderr.write(
28
+ "Error: build/cli.js not found. Run `npm run build` or `bun run build` first.\n",
29
+ );
30
+ process.exit(1);
31
+ }
32
+
33
+ await import(cliPath);
@@ -3,8 +3,8 @@ import {
3
3
  ensureConfigDir,
4
4
  getConfig,
5
5
  saveConfig
6
- } from "./chunk-XQJ6PB2L.js";
7
- import "./chunk-QMRVH5ZP.js";
6
+ } from "./chunk-POT2MBEK.js";
7
+ import "./chunk-3WYWXTNN.js";
8
8
 
9
9
  // src/cli/alias.ts
10
10
  function getAliases() {
@@ -38,4 +38,3 @@ export {
38
38
  removeAlias,
39
39
  setAlias
40
40
  };
41
- //# sourceMappingURL=alias-INGXWFCG.js.map
@@ -0,0 +1,28 @@
1
+ import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ authLogin,
4
+ authMe,
5
+ authSignup,
6
+ createKey,
7
+ executeRemoteTool,
8
+ fetchToolCatalog,
9
+ fetchWithRetry,
10
+ getUsage,
11
+ listKeysApi,
12
+ revokeKeyApi
13
+ } from "./chunk-7JWXBKEJ.js";
14
+ import "./chunk-ZCU7XQKF.js";
15
+ import "./chunk-POT2MBEK.js";
16
+ import "./chunk-3WYWXTNN.js";
17
+ export {
18
+ authLogin,
19
+ authMe,
20
+ authSignup,
21
+ createKey,
22
+ executeRemoteTool,
23
+ fetchToolCatalog,
24
+ fetchWithRetry,
25
+ getUsage,
26
+ listKeysApi,
27
+ revokeKeyApi
28
+ };
@@ -0,0 +1,39 @@
1
+ import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ getActiveProfile,
4
+ listProfiles,
5
+ maskKey,
6
+ removeProfile,
7
+ runKeysCreate,
8
+ runKeysList,
9
+ runKeysRevoke,
10
+ runLogin,
11
+ runLogout,
12
+ runProfiles,
13
+ runSignup,
14
+ runSwitch,
15
+ runUsage,
16
+ runWhoami,
17
+ saveProfile,
18
+ switchProfile
19
+ } from "./chunk-5XXI25JE.js";
20
+ import "./chunk-POT2MBEK.js";
21
+ import "./chunk-3WYWXTNN.js";
22
+ export {
23
+ getActiveProfile,
24
+ listProfiles,
25
+ maskKey,
26
+ removeProfile,
27
+ runKeysCreate,
28
+ runKeysList,
29
+ runKeysRevoke,
30
+ runLogin,
31
+ runLogout,
32
+ runProfiles,
33
+ runSignup,
34
+ runSwitch,
35
+ runUsage,
36
+ runWhoami,
37
+ saveProfile,
38
+ switchProfile
39
+ };
@@ -0,0 +1,8 @@
1
+ import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ browserLogin
4
+ } from "./chunk-GZPDEXO4.js";
5
+ import "./chunk-3WYWXTNN.js";
6
+ export {
7
+ browserLogin
8
+ };
@@ -4,8 +4,8 @@ import {
4
4
  getConfigDir,
5
5
  readJsonFile,
6
6
  writeJsonFile
7
- } from "./chunk-XQJ6PB2L.js";
8
- import "./chunk-QMRVH5ZP.js";
7
+ } from "./chunk-POT2MBEK.js";
8
+ import "./chunk-3WYWXTNN.js";
9
9
 
10
10
  // src/cli/cache.ts
11
11
  import { existsSync, unlinkSync } from "fs";
@@ -49,4 +49,3 @@ export {
49
49
  getCachedTools,
50
50
  setCachedTools
51
51
  };
52
- //# sourceMappingURL=cache-US4LSZPI.js.map
@@ -11,6 +11,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
11
11
  if (typeof require !== "undefined") return require.apply(this, arguments);
12
12
  throw Error('Dynamic require of "' + x + '" is not supported');
13
13
  });
14
+ var __esm = (fn, res) => function __init() {
15
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
16
+ };
14
17
  var __commonJS = (cb, mod) => function __require2() {
15
18
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
16
19
  };
@@ -26,6 +29,7 @@ var __copyProps = (to, from, except, desc) => {
26
29
  }
27
30
  return to;
28
31
  };
32
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
29
33
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
30
34
  // If the importer is in node compatibility mode or this is not an ESM
31
35
  // file that has been converted to a CommonJS file using a Babel-
@@ -34,11 +38,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
34
38
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
35
39
  mod
36
40
  ));
41
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
42
 
38
43
  export {
39
44
  __require,
45
+ __esm,
40
46
  __commonJS,
41
47
  __export,
42
- __toESM
48
+ __reExport,
49
+ __toESM,
50
+ __toCommonJS
43
51
  };
44
- //# sourceMappingURL=chunk-QMRVH5ZP.js.map