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.
- package/LICENSE +23 -0
- package/README.md +315 -85
- package/agent-skills/.claude-plugin/plugin.json +10 -4
- package/agent-skills/.mcp.json +8 -0
- package/agent-skills/AGENTS.md +37 -0
- package/agent-skills/README.md +28 -23
- package/agent-skills/SKILL.md +40 -10
- package/agent-skills/evals/trigger-queries.json +270 -0
- package/agent-skills/package.json +4 -4
- package/agent-skills/packs/hive-build/SKILL.md +54 -25
- package/agent-skills/packs/hive-build/evals/evals.json +16 -3
- package/agent-skills/packs/hive-build/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-build-onboarding/SKILL.md +27 -34
- package/agent-skills/packs/hive-build-onboarding/evals/evals.json +1 -1
- package/agent-skills/packs/hive-build-onboarding/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-cli/SKILL.md +33 -35
- package/agent-skills/packs/hive-cli/evals/evals.json +1 -1
- package/agent-skills/packs/hive-cli/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-defi-research/SKILL.md +105 -19
- package/agent-skills/packs/hive-defi-research/evals/evals.json +6 -3
- package/agent-skills/packs/hive-defi-research/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-dex-pool-analysis/SKILL.md +106 -16
- package/agent-skills/packs/hive-dex-pool-analysis/evals/evals.json +5 -3
- package/agent-skills/packs/hive-dex-pool-analysis/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-market-research/SKILL.md +130 -21
- package/agent-skills/packs/hive-market-research/evals/evals.json +15 -2
- package/agent-skills/packs/hive-market-research/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-mcp/SKILL.md +98 -153
- package/agent-skills/packs/hive-mcp/evals/evals.json +4 -3
- package/agent-skills/packs/hive-mcp/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +62 -35
- package/agent-skills/packs/hive-mcp/references/clients.md +154 -0
- package/agent-skills/packs/hive-network-infrastructure/SKILL.md +105 -20
- package/agent-skills/packs/hive-network-infrastructure/evals/evals.json +4 -2
- package/agent-skills/packs/hive-network-infrastructure/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-nft-research/SKILL.md +105 -18
- package/agent-skills/packs/hive-nft-research/evals/evals.json +4 -2
- package/agent-skills/packs/hive-nft-research/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-prediction-markets/SKILL.md +108 -21
- package/agent-skills/packs/hive-prediction-markets/evals/evals.json +4 -2
- package/agent-skills/packs/hive-prediction-markets/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-query/SKILL.md +80 -33
- package/agent-skills/packs/hive-query/evals/evals.json +7 -5
- package/agent-skills/packs/hive-query/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +39 -18
- package/agent-skills/packs/hive-security-risk/SKILL.md +110 -19
- package/agent-skills/packs/hive-security-risk/evals/evals.json +4 -2
- package/agent-skills/packs/hive-security-risk/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-solana-analysis/SKILL.md +115 -19
- package/agent-skills/packs/hive-solana-analysis/evals/evals.json +4 -2
- package/agent-skills/packs/hive-solana-analysis/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-stateful-monitoring/SKILL.md +120 -0
- package/agent-skills/packs/hive-stateful-monitoring/evals/evals.json +54 -0
- package/agent-skills/packs/hive-stateful-monitoring/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-stateful-monitoring/references/b2b-subject-context.md +53 -0
- package/agent-skills/packs/hive-token-diligence/SKILL.md +119 -21
- package/agent-skills/packs/hive-token-diligence/evals/evals.json +6 -4
- package/agent-skills/packs/hive-token-diligence/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-tool-discovery/SKILL.md +48 -19
- package/agent-skills/packs/hive-tool-discovery/evals/evals.json +17 -3
- package/agent-skills/packs/hive-tool-discovery/evals/triggers.json +50 -0
- package/agent-skills/packs/hive-tool-discovery/references/discovery-surfaces.md +31 -6
- package/agent-skills/packs/hive-wallet-investigation/SKILL.md +111 -18
- package/agent-skills/packs/hive-wallet-investigation/evals/evals.json +5 -3
- package/agent-skills/packs/hive-wallet-investigation/evals/triggers.json +50 -0
- package/agent-skills/references/agents-routing.md +19 -7
- package/agent-skills/scripts/validate-agent-skills-package.mjs +116 -18
- package/agent-skills/skills.sh.json +3 -2
- package/bin/hive-mcp.js +5 -5
- package/build/{alias-CZ3DEYHF.js → alias-BKAVOYQV.js} +2 -3
- package/build/{api-client-I23XLSHU.js → api-client-FTVDFW5V.js} +4 -4
- package/build/{auth-KKINNBXT.js → auth-EZFJ5RYB.js} +3 -4
- package/build/{browser-auth-EEFGRHWY.js → browser-auth-OJSUNFBI.js} +2 -3
- package/build/{cache-EGNMENNA.js → cache-TBDQ7QBU.js} +2 -3
- package/build/{chunk-V77LO4RO.js → chunk-6PC3HUAK.js} +10 -4
- package/build/{chunk-XYBEFFZ3.js → chunk-725R3KLJ.js} +26 -4
- package/build/{chunk-PGBVNMNZ.js → chunk-7GD2MFYI.js} +57 -7
- package/build/{chunk-IDZD2NVG.js → chunk-AEU43ACS.js} +33 -10
- package/build/chunk-EPF36Q3Z.js +71 -0
- package/build/chunk-I5Z6FZRL.js +178 -0
- package/build/{chunk-KBVPIZS4.js → chunk-ILVPOLA7.js} +12 -4
- package/build/{chunk-B6G222LS.js → chunk-L326MQZP.js} +22 -6
- package/build/{chunk-QNCI4DEB.js → chunk-M6REON2I.js} +35 -21
- package/build/chunk-N32UIHBU.js +125 -0
- package/build/{chunk-IZTN7WFH.js → chunk-Q7VBYLX7.js} +12 -3
- package/build/chunk-QDZ7MAVN.js +447 -0
- package/build/{chunk-KGYBTXIN.js → chunk-R6YZTFQL.js} +2 -1
- package/build/{chunk-DYJBTKNR.js → chunk-RU6QOFHH.js} +9 -10
- package/build/{chunk-RKICZ6DZ.js → chunk-RUHO24SX.js} +16 -10
- package/build/{chunk-MPIUUE3T.js → chunk-TNQ7GJ6Q.js} +0 -60
- package/build/{chunk-2X3U4DFK.js → chunk-W2QL7LYI.js} +43586 -21498
- package/build/chunk-ZXKFJQDE.js +20 -0
- package/build/cli.js +3342 -3410
- package/build/{completion-BELZL7ND.js → completion-7KBW243H.js} +4 -5
- package/build/{config-TDX4VUGW.js → config-KAEUX6RM.js} +23 -4
- package/build/{config-dir-V43W2WIA.js → config-dir-5IH7MOOT.js} +2 -3
- package/build/{doctor-5K5UWHNX.js → doctor-ORDOCGLM.js} +34 -10
- package/build/{errors-E6MVUBNA.js → errors-HGHUF575.js} +2 -3
- package/build/{format-TSFSI2K7.js → format-H7FOQSYY.js} +1 -2
- package/build/{init-YQ5NBICF.js → init-UCTCUYFA.js} +52 -9
- package/build/init-all-BVWW3JVK.js +408 -0
- package/build/mcpServer-RUEOTTF7.js +34 -0
- package/build/monitor-worker.js +1396 -0
- package/build/{namespace-PVHBFDW2.js → namespace-L5DGCY7K.js} +2 -3
- package/build/{open-YUIJP37F.js → open-V2RNA3QT.js} +2 -3
- package/build/{output-IYJBFCYK.js → output-ITGLBKIG.js} +2 -3
- package/build/release.json +8 -0
- package/build/{serve-KWNJK6EY.js → serve-DKLR2WQH.js} +9 -4
- package/build/server.js +5399 -2945
- package/build/{setup-YTUKMPNP.js → setup-PTYFMTK5.js} +60 -56
- package/build/stdio.js +10 -8
- package/build/{telemetry-5IPRKZBL.js → telemetry-HPLDYR7U.js} +5 -4
- package/build/{tools-PJHWFCAG.js → tools-I7GLWTV6.js} +15 -15
- package/build/{uninstall-HWXEIP6K.js → uninstall-SAOIPL6K.js} +19 -11
- package/build/update-check-IEXPOYYR.js +18 -0
- package/build/upgrade-J4HIGCKE.js +171 -0
- package/build/version-Z4HJL4VV.js +16 -0
- package/build/{watch-KZ5EDZK3.js → watch-WVR4CGCD.js} +8 -7
- package/package.json +82 -41
- package/agent-skills/packs/hive-defi-research/references/workflow.md +0 -41
- package/agent-skills/packs/hive-dex-pool-analysis/references/workflow.md +0 -42
- package/agent-skills/packs/hive-market-research/references/workflow.md +0 -47
- package/agent-skills/packs/hive-network-infrastructure/references/workflow.md +0 -41
- package/agent-skills/packs/hive-nft-research/references/workflow.md +0 -42
- package/agent-skills/packs/hive-prediction-markets/references/workflow.md +0 -42
- package/agent-skills/packs/hive-security-risk/references/workflow.md +0 -46
- package/agent-skills/packs/hive-solana-analysis/references/workflow.md +0 -42
- package/agent-skills/packs/hive-token-diligence/references/workflow.md +0 -45
- package/agent-skills/packs/hive-wallet-investigation/references/workflow.md +0 -45
- package/build/alias-CZ3DEYHF.js.map +0 -1
- package/build/api-client-I23XLSHU.js.map +0 -1
- package/build/auth-KKINNBXT.js.map +0 -1
- package/build/browser-auth-EEFGRHWY.js.map +0 -1
- package/build/cache-EGNMENNA.js.map +0 -1
- package/build/chunk-2MYMHMBF.js +0 -340
- package/build/chunk-2MYMHMBF.js.map +0 -1
- package/build/chunk-2X3U4DFK.js.map +0 -1
- package/build/chunk-B6G222LS.js.map +0 -1
- package/build/chunk-DYJBTKNR.js.map +0 -1
- package/build/chunk-IDZD2NVG.js.map +0 -1
- package/build/chunk-IZTN7WFH.js.map +0 -1
- package/build/chunk-KBVPIZS4.js.map +0 -1
- package/build/chunk-KGYBTXIN.js.map +0 -1
- package/build/chunk-MPIUUE3T.js.map +0 -1
- package/build/chunk-PGBVNMNZ.js.map +0 -1
- package/build/chunk-QNCI4DEB.js.map +0 -1
- package/build/chunk-RKICZ6DZ.js.map +0 -1
- package/build/chunk-UKHZIVDT.js +0 -44
- package/build/chunk-UKHZIVDT.js.map +0 -1
- package/build/chunk-V77LO4RO.js.map +0 -1
- package/build/chunk-XYBEFFZ3.js.map +0 -1
- package/build/cli.js.map +0 -1
- package/build/completion-BELZL7ND.js.map +0 -1
- package/build/config-TDX4VUGW.js.map +0 -1
- package/build/config-dir-V43W2WIA.js.map +0 -1
- package/build/doctor-5K5UWHNX.js.map +0 -1
- package/build/errors-E6MVUBNA.js.map +0 -1
- package/build/format-TSFSI2K7.js.map +0 -1
- package/build/init-YQ5NBICF.js.map +0 -1
- package/build/init-all-6OWEQALB.js +0 -274
- package/build/init-all-6OWEQALB.js.map +0 -1
- package/build/mcpServer-AEX3RQ4U.js +0 -20
- package/build/mcpServer-AEX3RQ4U.js.map +0 -1
- package/build/namespace-PVHBFDW2.js.map +0 -1
- package/build/open-YUIJP37F.js.map +0 -1
- package/build/output-IYJBFCYK.js.map +0 -1
- package/build/serve-KWNJK6EY.js.map +0 -1
- package/build/server.js.map +0 -1
- package/build/setup-YTUKMPNP.js.map +0 -1
- package/build/stdio.js.map +0 -1
- package/build/telemetry-5IPRKZBL.js.map +0 -1
- package/build/tools-PJHWFCAG.js.map +0 -1
- package/build/uninstall-HWXEIP6K.js.map +0 -1
- 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
|
|
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.
|
|
9
|
+
version: 1.3.0
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# hive-wallet-investigation — Wallet Investigation
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
##
|
|
76
|
+
## Calls made
|
|
77
|
+
- Toolset: wallet_investigation
|
|
78
|
+
- Endpoint(s): [exact endpoint names]
|
|
79
|
+
- Identifiers: [chain, wallet, filters]
|
|
34
80
|
|
|
35
|
-
|
|
36
|
-
|
|
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 `
|
|
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": "
|
|
7
|
-
"expected_output": "Uses wallet_investigation, validates chain/address, starts with balances, adds bounded recent transfers, and
|
|
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
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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
|
-
|
|
94
|
-
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
|
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,
|
|
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
|
|
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 =
|
|
12
|
-
if (major <
|
|
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
|
|
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`
|
|
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-
|
|
7
|
-
import "./chunk-
|
|
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-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
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-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
8
|
-
import "./chunk-
|
|
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 {
|
|
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
|