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,42 +1,135 @@
1
1
  ---
2
2
  name: hive-wallet-investigation
3
- description: Use this skill for wallet, portfolio, holder, whale, transfer, PnL, NFT exposure, DeFi position, or notable on-chain activity investigations. Require wallet address and chain before executing Hive wallet tools.
3
+ description: Use this skill whenever the user wants to look inside a wallet or address — portfolio, holdings, balances, transfers, PnL, NFT exposure, DeFi positions, whale moves, "what does this address hold", "trace this wallet's activity" — even if they just paste an address. Requires wallet address and chain before executing Hive wallet tools. For Solana wallets use hive-solana-analysis; for "is this address malicious" risk checks use hive-security-risk.
4
4
  license: MIT
5
5
  metadata:
6
6
  package: "@hiveintelligence/agent-skills"
7
7
  category: "wallet"
8
8
  requires_network: "true"
9
- version: 1.0.0
9
+ version: 1.3.0
10
10
  ---
11
11
 
12
12
  # hive-wallet-investigation — Wallet Investigation
13
13
 
14
- Use this skill when the user asks to investigate a wallet, portfolio, holdings,
15
- transfers, PnL, NFT exposure, or DeFi positions.
14
+ Investigate a wallet's balances, transfers, PnL, NFT exposure, DeFi positions,
15
+ and notable activity with live Hive data, scoped to exactly what the user
16
+ asked.
16
17
 
17
- ## Task toolset
18
+ ## Task toolset and identifiers
18
19
 
19
- Use `wallet_investigation`.
20
+ Toolset: `wallet_investigation`. Read
21
+ `hive://toolsets/wallet_investigation` before execution; it is authoritative
22
+ for the current output schema, material-call budget, phases, fallback
23
+ condition, and stop conditions.
20
24
 
21
- Required identifiers: wallet address and chain.
25
+ - Required: wallet address and chain/network — unless the user explicitly asks
26
+ for multi-chain.
27
+ - Optional: time window, asset filter, counterparty, protocol, NFT collection.
22
28
 
23
- ## Procedure
29
+ Ask for the chain when an EVM address appears without context: the same
30
+ address exists on every EVM chain with different state, so guessing the chain
31
+ silently changes the answer. For Solana wallets, hand off to
32
+ `hive-solana-analysis`.
33
+
34
+ Before choosing endpoints, select exactly one matching entry from the exact
35
+ workflow's routes[]. Follow its ordered steps, use a fallback only under that
36
+ step's published condition, stop at four material calls, and preserve the
37
+ selected route_id in the typed result. The broad coverageCatalog is discovery
38
+ coverage, not an execution plan.
24
39
 
25
- Read `references/workflow.md` when the request needs multi-chain handling,
26
- activity triage, risk caveats, or a structured wallet investigation report.
40
+ ## Procedure
27
41
 
28
42
  1. Validate the address format for the requested chain.
29
- 2. Start with balances and native balance.
30
- 3. Add transfers, NFT holdings, DeFi positions, or PnL only when relevant.
31
- 4. Summarize exposure, concentration, notable activity, and missing data.
43
+ 2. Call `search_tools` for wallet balance, native balance, transfer, NFT,
44
+ DeFi-position, and PnL capabilities as the question requires.
45
+ 3. Call `get_api_endpoint_schema` for each endpoint before calling it.
46
+ 4. Call `invoke_api_endpoint` with schema-valid, bounded arguments.
47
+ 5. Start with balances and native balance. Add transfers for activity
48
+ questions; add NFTs, DeFi positions, or PnL only when relevant.
49
+ 6. Summarize exposure, concentration, notable activity, and missing data.
50
+
51
+ ## Bounded calls
52
+
53
+ - Use explicit `limit`, `page`, `per_page`, or time filters for transfers.
54
+ - Do not fetch full history for a quick portfolio read.
55
+ - Avoid mixing chains unless the user requested multi-chain analysis.
56
+
57
+ ## Worked example
58
+
59
+ User: "What does 0x28C6c06298d514Db089934071355E5743bf21d60 hold on Ethereum,
60
+ and did anything big move this week?"
61
+
62
+ 1. `search_tools` → `{"query": "wallet token balances native balance transfers ethereum", "limit": 5}`
63
+ 2. `get_api_endpoint_schema` for the balance and transfer endpoints returned.
64
+ 3. `invoke_api_endpoint` for balances first, then transfers with a 7-day
65
+ window and an explicit limit — argument names come from the schema, not
66
+ from memory.
67
+ 4. Answer with the report template, flagging spam tokens and truncated
68
+ history.
69
+
70
+ ## Report template
71
+
72
+ ```markdown
73
+ ## Summary
74
+ [Wallet posture and the most notable finding.]
32
75
 
33
- ## Example
76
+ ## Calls made
77
+ - Toolset: wallet_investigation
78
+ - Endpoint(s): [exact endpoint names]
79
+ - Identifiers: [chain, wallet, filters]
34
80
 
35
- If the user provides an EVM wallet but no chain, ask whether they want Ethereum,
36
- Base, Arbitrum, Polygon, or a multi-chain investigation.
81
+ ## Evidence
82
+ - Balances: [native + top token holdings]
83
+ - Activity: [transfers in window, counterparties]
84
+ - Exposure: [NFTs, DeFi positions, PnL if requested]
85
+ - Provenance: [provider, fetched_at, observed_at/cache_age_ms, runtime status per call]
86
+
87
+ ## Caveats
88
+ [Missing chains, truncated history, unavailable enrichment, degraded providers.]
89
+
90
+ ## Next action
91
+ [Chain expansion, transfer drilldown, risk check, or PnL detail — only if needed.]
92
+ ```
93
+
94
+ ## Gotchas
95
+
96
+ - Wallet labels and owner identity are not guaranteed.
97
+ - Token balances can include spam or illiquid assets — say so rather than
98
+ inflating portfolio value.
99
+ - Absence of DeFi/NFT data may reflect provider coverage, not true absence.
100
+
101
+ ## Evidence receipt (required)
102
+
103
+ End every Hive-backed answer with a compact receipt built from the `_hive`
104
+ object on each material tool response:
105
+
106
+ - `provider`, `tool`, `fetched_at`, `observed_at`, `cache_age_ms`, and `runtime_status`
107
+ - `receipt_id`, `receipt_version`, server/build version, and SHA-256 input/result
108
+ digests when present (self-checks, not signatures)
109
+ - `source`, `cache_status`, `truncated`, and any warnings
110
+ - canonical chain/entity identifiers plus block, slot, transaction, or query ids
111
+ present in provider data
112
+ - material provider disagreements and how they were handled
113
+ - checks that were unavailable, gated, stale, truncated, or intentionally not run
114
+ - a `claims[]` citation from each material statement to exact receipt IDs
115
+ - one `coverage[]` entry for every canonical evidence phase, with each gap explained
116
+
117
+ Never turn missing evidence into a clean result, silently merge conflicting
118
+ provider values, or omit a degraded/fallback call from the receipt.
119
+ `observed_at` is Hive's first-observation/original cache-population time, and
120
+ `cache_age_ms: 0` only means newly retrieved by Hive. Use provider time, block,
121
+ slot, transaction, or candle close for source recency; if absent, mark it
122
+ unknown. Run `validate_task_result` before presenting the typed workflow result;
123
+ it checks structure but cannot authenticate an invented receipt.
37
124
 
38
125
  ## Runtime status handling
39
126
 
40
- Classify provider failures as `missing_key`, `plan_required`, `rate_limited`,
41
- `degraded`, or `failing`. A single blocked enrichment tool should not suppress
127
+ Classify provider failures as `invalid_input`, `missing_key`, `plan_required`,
128
+ `rate_limited`, `degraded`, or `failing`. A single blocked enrichment tool should not suppress
42
129
  balances or transfers that did succeed.
130
+
131
+ ## Hand-offs
132
+
133
+ - Solana wallet (base58 address) → `hive-solana-analysis`.
134
+ - "Is this address dangerous / phishing / sanctioned" → `hive-security-risk`.
135
+ - Token-specific deep dive on one holding → `hive-token-diligence`.
@@ -3,13 +3,15 @@
3
3
  "evals": [
4
4
  {
5
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.",
6
+ "prompt": "What does 0x28C6c06298d514Db089934071355E5743bf21d60 hold on Ethereum, and did anything big move in the last week?",
7
+ "expected_output": "Uses wallet_investigation, validates chain/address, starts with balances, adds bounded recent transfers, and ends with a source/freshness/runtime receipt.",
8
8
  "files": [],
9
9
  "assertions": [
10
10
  "Chooses wallet_investigation.",
11
+ "Selects the matching portfolio_snapshot or recent_activity route and follows its ordered calls.",
11
12
  "Starts with balances/native balance.",
12
- "Bounds transfer history."
13
+ "Bounds transfer history.",
14
+ "Includes receipt ids and missing evidence."
13
15
  ]
14
16
  },
15
17
  {
@@ -0,0 +1,50 @@
1
+ [
2
+ {
3
+ "query": "what does 0x28C6c06298d514Db089934071355E5743bf21d60 hold on ethereum",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "trace where this wallet's funds came from, it just sent me 2 eth",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "did this whale wallet dump any LINK this week? 0x… on mainnet",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "show me this address's defi positions and nft exposure",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "whats the realized pnl of this trader address",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "this EVM address might be active on several chains, can you inspect it",
24
+ "should_trigger": true
25
+ },
26
+ {
27
+ "query": "is this address that dm'd me flagged as a scammer or phishing",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "analyze this solana wallet 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "alert me whenever this wallet moves more than $50k",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "how do hd wallets derive addresses from a seed phrase",
40
+ "should_trigger": false
41
+ },
42
+ {
43
+ "query": "whats gas on mainnet right now",
44
+ "should_trigger": false
45
+ },
46
+ {
47
+ "query": "what tokens should i buy this week",
48
+ "should_trigger": false
49
+ }
50
+ ]
@@ -32,17 +32,29 @@ For live crypto intelligence, prefer Hive retrieval over model memory.
32
32
  `hive-network-infrastructure`
33
33
  - prediction markets, events, outcomes, traders:
34
34
  `hive-prediction-markets`
35
+ - User asks Hive to remember, monitor, schedule, alert, or report crypto
36
+ intelligence across sessions: use `hive-stateful-monitoring`.
35
37
  - Setup, API key, CLI, or app integration:
36
38
  use `hive-mcp`, `hive-build-onboarding`, `hive-cli`, or `hive-build`.
37
39
 
38
40
  Default execution loop:
39
- 1. Read `hive://toolsets` or call `search_tools`.
40
- 2. Select one task toolset or exact endpoint.
41
- 3. Call `get_api_endpoint_schema`.
42
- 4. Execute through `invoke_api_endpoint` with bounded args.
43
- 5. Report provider, source/freshness, fallback/cache/degraded state, and
44
- runtime status (`ok`, `missing_key`, `plan_required`, `rate_limited`,
45
- `degraded`, or `failing`).
41
+ 1. Read the compact `hive://toolsets` index or call `search_tools`.
42
+ 2. Select one task toolset and its best matching compact `routes[]` entry.
43
+ Preserve `route_id`; follow the ordered calls, conditional per-call
44
+ fallbacks, four-call cap, and stop condition. Use `coverageCatalog` only
45
+ for long-tail discovery.
46
+ 3. Call `get_api_endpoint_schema` and inspect `operation`/`callPattern`.
47
+ 4. Execute reads through `invoke_api_endpoint` with bounded args. Explain any
48
+ Hive state change, obtain explicit approval, then use
49
+ `invoke_stateful_endpoint`; never auto-approve it.
50
+ 5. Copy exact server-returned `_hive` blocks into the task receipt, cite exact
51
+ receipt IDs from `claims[]`, account for every canonical `coverage[]`
52
+ phase, include `route_id`, and call `validate_task_result` before presenting a structured
53
+ result.
54
+ 6. Report provider, source recency, fallback/cache/degraded state, and runtime
55
+ status (`ok`, `invalid_input`, `missing_key`, `plan_required`,
56
+ `rate_limited`, `degraded`, or `failing`). `observed_at` is Hive
57
+ first-observation/original cache time, not necessarily upstream event time.
46
58
  ```
47
59
 
48
60
  Keep this snippet short. The skill files carry the detailed workflow and should
@@ -6,8 +6,8 @@ import { fileURLToPath } from "node:url";
6
6
  const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
7
7
  const packsRoot = join(root, "packs");
8
8
  const failures = [];
9
-
10
- const workflowReferenceSkills = new Set([
9
+ const receiptSkills = new Set([
10
+ "hive-query",
11
11
  "hive-market-research",
12
12
  "hive-token-diligence",
13
13
  "hive-wallet-investigation",
@@ -18,16 +18,7 @@ const workflowReferenceSkills = new Set([
18
18
  "hive-solana-analysis",
19
19
  "hive-network-infrastructure",
20
20
  "hive-prediction-markets",
21
- ]);
22
-
23
- const requiredTriggerCoverage = new Set([
24
- "hive-query",
25
- "hive-tool-discovery",
26
- "hive-mcp",
27
- "hive-build",
28
- "hive-build-onboarding",
29
- "hive-cli",
30
- "hive-token-diligence",
21
+ "hive-stateful-monitoring",
31
22
  ]);
32
23
 
33
24
  function fail(message) {
@@ -90,8 +81,11 @@ for (const skillName of skillDirs) {
90
81
  const description = field(fm, "description");
91
82
 
92
83
  if (name !== skillName) fail(`${skillName} frontmatter name must match directory.`);
93
- if (!description.startsWith("Use this skill")) {
94
- fail(`${skillName} description must start with trigger language: "Use this skill".`);
84
+ const hasTriggerLanguage =
85
+ description.startsWith("Use this skill") ||
86
+ (skillName === "hive-query" && description.startsWith("Default entry point"));
87
+ if (!hasTriggerLanguage) {
88
+ fail(`${skillName} description must start with explicit trigger language.`);
95
89
  }
96
90
  if (description.includes(": ")) {
97
91
  fail(`${skillName} description contains ': ', which breaks some YAML parsers unless quoted.`);
@@ -105,6 +99,13 @@ for (const skillName of skillDirs) {
105
99
  if (!body.includes("## Runtime status handling")) {
106
100
  fail(`${skillName} must document runtime status handling.`);
107
101
  }
102
+ if (
103
+ receiptSkills.has(skillName) &&
104
+ (!body.includes("## Evidence receipt (required)") ||
105
+ !body.includes("`receipt_id`"))
106
+ ) {
107
+ fail(`${skillName} must require Hive evidence receipts.`);
108
+ }
108
109
 
109
110
  const evalFile = join(skillDir, "evals", "evals.json");
110
111
  if (!existsSync(evalFile)) {
@@ -123,11 +124,42 @@ for (const skillName of skillDirs) {
123
124
  fail(`${skillName} eval ${entry.id ?? "unknown"} needs assertions.`);
124
125
  }
125
126
  }
127
+ if (
128
+ receiptSkills.has(skillName) &&
129
+ !(evals?.evals ?? []).some((entry) =>
130
+ `${entry.expected_output ?? ""} ${(entry.assertions ?? []).join(" ")}`
131
+ .toLowerCase()
132
+ .includes("receipt"),
133
+ )
134
+ ) {
135
+ fail(`${skillName} evals must cover the evidence receipt contract.`);
136
+ }
126
137
  }
127
138
 
128
- if (workflowReferenceSkills.has(skillName)) {
129
- const workflow = join(skillDir, "references", "workflow.md");
130
- if (!existsSync(workflow)) fail(`${skillName} is missing references/workflow.md.`);
139
+ const triggerFile = join(skillDir, "evals", "triggers.json");
140
+ if (!existsSync(triggerFile)) {
141
+ fail(`${skillName} is missing evals/triggers.json.`);
142
+ } else {
143
+ const triggers = readJson(triggerFile);
144
+ if (!Array.isArray(triggers) || triggers.length < 4) {
145
+ fail(`${skillName} must define at least four trigger evals.`);
146
+ } else {
147
+ if (!triggers.some((entry) => entry?.should_trigger === true)) {
148
+ fail(`${skillName} trigger evals need a positive example.`);
149
+ }
150
+ if (!triggers.some((entry) => entry?.should_trigger === false)) {
151
+ fail(`${skillName} trigger evals need a negative example.`);
152
+ }
153
+ for (const entry of triggers) {
154
+ if (
155
+ typeof entry?.query !== "string" ||
156
+ !entry.query.trim() ||
157
+ typeof entry?.should_trigger !== "boolean"
158
+ ) {
159
+ fail(`${skillName} has an invalid trigger eval entry.`);
160
+ }
161
+ }
162
+ }
131
163
  }
132
164
 
133
165
  const referenceMatches = [...body.matchAll(/`(references\/[^`]+)`/g)];
@@ -148,6 +180,72 @@ if (directoryManifest) {
148
180
  }
149
181
  }
150
182
 
183
+ // Cross-manifest consistency: every pack on disk must also be installable via
184
+ // the Claude plugin manifest and routed in the top-level SKILL.md. This guards
185
+ // the drift mode where a pack ships with evals but is invisible to install and
186
+ // routing (e.g. a skill missing from plugin.json never loads via plugin install).
187
+ const pluginManifestPath = join(root, ".claude-plugin", "plugin.json");
188
+ const packageManifest = readJson(join(root, "package.json"));
189
+ if (!existsSync(pluginManifestPath)) {
190
+ fail("agent-skills/.claude-plugin/plugin.json is missing.");
191
+ } else {
192
+ const pluginManifest = readJson(pluginManifestPath);
193
+ if (pluginManifest) {
194
+ if (packageManifest && pluginManifest.version !== packageManifest.version) {
195
+ fail(
196
+ `.claude-plugin/plugin.json version ${pluginManifest.version} must match package.json ${packageManifest.version}.`,
197
+ );
198
+ }
199
+ const pluginSkills = new Set((pluginManifest.skills ?? []).map((skill) => skill.name));
200
+ for (const skillName of skillDirs) {
201
+ if (!pluginSkills.has(skillName)) {
202
+ fail(`${skillName} is missing from .claude-plugin/plugin.json skills.`);
203
+ }
204
+ }
205
+ for (const entry of pluginManifest.skills ?? []) {
206
+ const referenced = entry.path ? join(root, ".claude-plugin", entry.path) : "";
207
+ if (!referenced || !existsSync(referenced)) {
208
+ fail(`plugin.json skill ${entry.name ?? "unknown"} path does not resolve: ${entry.path}`);
209
+ }
210
+ }
211
+ if (!pluginManifest.mcpServers) {
212
+ fail("plugin.json must declare mcpServers so installing the plugin also connects Hive MCP.");
213
+ } else if (typeof pluginManifest.mcpServers === "string") {
214
+ const mcpPath = join(root, pluginManifest.mcpServers);
215
+ if (!existsSync(mcpPath)) {
216
+ fail(`plugin.json mcpServers points to missing file ${pluginManifest.mcpServers}.`);
217
+ } else {
218
+ const mcp = readJson(mcpPath);
219
+ const hive = mcp?.mcpServers?.hive;
220
+ if (hive?.url !== "https://mcp.hiveintelligence.xyz/mcp") {
221
+ fail(`${pluginManifest.mcpServers} must define mcpServers.hive.url for the hosted Hive endpoint.`);
222
+ }
223
+ if (
224
+ JSON.stringify(hive) !==
225
+ JSON.stringify({
226
+ type: "http",
227
+ url: "https://mcp.hiveintelligence.xyz/mcp",
228
+ })
229
+ ) {
230
+ fail(`${pluginManifest.mcpServers} must be an exact URL-only interactive OAuth config.`);
231
+ }
232
+ if (/authorization|bearer|api.?key|token|secret|\$\{/i.test(JSON.stringify(hive))) {
233
+ fail(`${pluginManifest.mcpServers} must not contain credentials or placeholders.`);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ }
239
+
240
+ const rootSkillBody = existsSync(join(root, "SKILL.md"))
241
+ ? readFileSync(join(root, "SKILL.md"), "utf8")
242
+ : "";
243
+ for (const skillName of skillDirs) {
244
+ if (rootSkillBody && !rootSkillBody.includes(skillName)) {
245
+ fail(`${skillName} is not routed in the top-level SKILL.md.`);
246
+ }
247
+ }
248
+
151
249
  const triggerQueries = readJson(join(root, "evals", "trigger-queries.json"));
152
250
  if (triggerQueries) {
153
251
  const triggerSkillNames = new Set();
@@ -164,7 +262,7 @@ if (triggerQueries) {
164
262
  }
165
263
  }
166
264
  }
167
- for (const skillName of requiredTriggerCoverage) {
265
+ for (const skillName of skillDirs) {
168
266
  if (!triggerSkillNames.has(skillName)) {
169
267
  fail(`trigger-queries must include trigger coverage for ${skillName}.`);
170
268
  }
@@ -22,7 +22,7 @@
22
22
  },
23
23
  {
24
24
  "title": "Crypto Research Workflows",
25
- "description": "Focused workflows for market, token, wallet, security, DEX, DeFi, NFT, Solana, network, and prediction-market analysis.",
25
+ "description": "Focused workflows for market, token, wallet, security, DEX, DeFi, NFT, Solana, network, prediction-market, and stateful monitoring analysis.",
26
26
  "skills": [
27
27
  "hive-market-research",
28
28
  "hive-token-diligence",
@@ -33,7 +33,8 @@
33
33
  "hive-nft-research",
34
34
  "hive-solana-analysis",
35
35
  "hive-network-infrastructure",
36
- "hive-prediction-markets"
36
+ "hive-prediction-markets",
37
+ "hive-stateful-monitoring"
37
38
  ]
38
39
  }
39
40
  ]
package/bin/hive-mcp.js CHANGED
@@ -4,14 +4,14 @@
4
4
  // In an ESM file (type:module), static imports are parsed before execution,
5
5
  // so a version check using `if (major < 20)` would never execute on old Node.
6
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).
7
+ // is a best-effort guard for Node 22.12+ (which supports the package runtime).
8
8
  // For Node <16, this file fails at parse time with a SyntaxError — engines
9
9
  // field in package.json is the primary enforcement mechanism.
10
10
 
11
- const major = parseInt(process.versions.node.split(".")[0], 10);
12
- if (major < 20) {
11
+ const [major, minor] = process.versions.node.split(".").map(Number);
12
+ if (major < 22 || (major === 22 && minor < 12)) {
13
13
  process.stderr.write(
14
- `Error: hive requires Node.js 20 or later (found ${process.versions.node}).\n`,
14
+ `Error: hive requires Node.js 22.12 or later (found ${process.versions.node}).\n`,
15
15
  );
16
16
  process.exit(1);
17
17
  }
@@ -25,7 +25,7 @@ const cliPath = join(__dirname, "..", "build", "cli.js");
25
25
 
26
26
  if (!existsSync(cliPath)) {
27
27
  process.stderr.write(
28
- "Error: build/cli.js not found. Run `npm run build` or `bun run build` first.\n",
28
+ "Error: build/cli.js not found. Run `npm run build` first.\n",
29
29
  );
30
30
  process.exit(1);
31
31
  }
@@ -3,8 +3,8 @@ import {
3
3
  ensureConfigDir,
4
4
  getConfig,
5
5
  saveConfig
6
- } from "./chunk-V77LO4RO.js";
7
- import "./chunk-KBVPIZS4.js";
6
+ } from "./chunk-6PC3HUAK.js";
7
+ import "./chunk-ILVPOLA7.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-CZ3DEYHF.js.map
@@ -10,9 +10,10 @@ import {
10
10
  getUsage,
11
11
  listKeysApi,
12
12
  revokeKeyApi
13
- } from "./chunk-IZTN7WFH.js";
14
- import "./chunk-V77LO4RO.js";
15
- import "./chunk-KBVPIZS4.js";
13
+ } from "./chunk-Q7VBYLX7.js";
14
+ import "./chunk-ZXKFJQDE.js";
15
+ import "./chunk-6PC3HUAK.js";
16
+ import "./chunk-ILVPOLA7.js";
16
17
  export {
17
18
  authLogin,
18
19
  authMe,
@@ -25,4 +26,3 @@ export {
25
26
  listKeysApi,
26
27
  revokeKeyApi
27
28
  };
28
- //# sourceMappingURL=api-client-I23XLSHU.js.map
@@ -16,9 +16,9 @@ import {
16
16
  runWhoami,
17
17
  saveProfile,
18
18
  switchProfile
19
- } from "./chunk-RKICZ6DZ.js";
20
- import "./chunk-V77LO4RO.js";
21
- import "./chunk-KBVPIZS4.js";
19
+ } from "./chunk-RUHO24SX.js";
20
+ import "./chunk-6PC3HUAK.js";
21
+ import "./chunk-ILVPOLA7.js";
22
22
  export {
23
23
  getActiveProfile,
24
24
  listProfiles,
@@ -37,4 +37,3 @@ export {
37
37
  saveProfile,
38
38
  switchProfile
39
39
  };
40
- //# sourceMappingURL=auth-KKINNBXT.js.map
@@ -1,9 +1,8 @@
1
1
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  browserLogin
4
- } from "./chunk-PGBVNMNZ.js";
5
- import "./chunk-KBVPIZS4.js";
4
+ } from "./chunk-7GD2MFYI.js";
5
+ import "./chunk-ILVPOLA7.js";
6
6
  export {
7
7
  browserLogin
8
8
  };
9
- //# sourceMappingURL=browser-auth-EEFGRHWY.js.map
@@ -4,8 +4,8 @@ import {
4
4
  getConfigDir,
5
5
  readJsonFile,
6
6
  writeJsonFile
7
- } from "./chunk-V77LO4RO.js";
8
- import "./chunk-KBVPIZS4.js";
7
+ } from "./chunk-6PC3HUAK.js";
8
+ import "./chunk-ILVPOLA7.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-EGNMENNA.js.map
@@ -1,7 +1,13 @@
1
1
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
2
 
3
3
  // src/cli/config-dir.ts
4
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
4
+ import {
5
+ chmodSync,
6
+ existsSync,
7
+ mkdirSync,
8
+ readFileSync,
9
+ writeFileSync
10
+ } from "fs";
5
11
  import { join } from "path";
6
12
  import { homedir } from "os";
7
13
  var DEFAULT_CONFIG = {
@@ -24,9 +30,9 @@ function getConfigDir() {
24
30
  }
25
31
  function ensureConfigDir() {
26
32
  const dir = getConfigDir();
27
- if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
33
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 448 });
28
34
  const cacheDir = join(dir, "cache");
29
- if (!existsSync(cacheDir)) mkdirSync(cacheDir, { recursive: true });
35
+ if (!existsSync(cacheDir)) mkdirSync(cacheDir, { recursive: true, mode: 448 });
30
36
  }
31
37
  function readJsonFile(filePath) {
32
38
  try {
@@ -41,6 +47,7 @@ function writeJsonFile(filePath, data) {
41
47
  encoding: "utf-8",
42
48
  mode: 384
43
49
  });
50
+ chmodSync(filePath, 384);
44
51
  }
45
52
  function getConfig() {
46
53
  const filePath = join(getConfigDir(), "config.json");
@@ -92,4 +99,3 @@ export {
92
99
  resolveApiKey,
93
100
  resolveApiUrl
94
101
  };
95
- //# sourceMappingURL=chunk-V77LO4RO.js.map