hive-intelligence 1.7.1 → 1.7.2

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 (31) hide show
  1. package/README.md +1 -1
  2. package/agent-skills/packs/hive/SKILL.md +45 -23
  3. package/agent-skills/packs/hive/evals/triggers.json +32 -8
  4. package/agent-skills/packs/hive-query/SKILL.md +2 -1
  5. package/build/{api-client-UGNFUZ2L.js → api-client-POBN6Y5S.js} +2 -2
  6. package/build/{auth-5TLYP2DC.js → auth-6XVL5CE3.js} +1 -1
  7. package/build/{call-args-NVOYX6DL.js → call-args-BUB6YNHW.js} +2 -2
  8. package/build/{chunk-POPAEM4E.js → chunk-APBLB62S.js} +1 -1
  9. package/build/{chunk-XT6RURQV.js → chunk-AZFOTKS2.js} +1 -1
  10. package/build/{chunk-UPWYFTTJ.js → chunk-KQVPKTEO.js} +2 -2
  11. package/build/{chunk-3SQPLZW6.js → chunk-LP7PDQCO.js} +18008 -17820
  12. package/build/{chunk-TWYGJEVN.js → chunk-RNVZIPNY.js} +1 -1
  13. package/build/{chunk-WII7MTYZ.js → chunk-YLHNUAFT.js} +2 -2
  14. package/build/{chunk-2C5FBG7B.js → chunk-ZBMMJ6LE.js} +1 -1
  15. package/build/{chunk-3Z5VR53Z.js → chunk-ZSPPJW4G.js} +9 -1
  16. package/build/cli.js +27 -27
  17. package/build/{doctor-44WSVNGJ.js → doctor-KPYW2U7D.js} +4 -4
  18. package/build/{errors-W3GXQN34.js → errors-YQAVCXXO.js} +3 -1
  19. package/build/{feedback-FRRLZDAF.js → feedback-G2DFCCI6.js} +2 -2
  20. package/build/{init-all-LYRFE2YQ.js → init-all-JXLG7LOX.js} +1 -1
  21. package/build/{mcpServer-43LTLURB.js → mcpServer-SUDGFNIF.js} +1 -1
  22. package/build/monitor-worker.js +2 -2
  23. package/build/release.json +4 -4
  24. package/build/{routing-CP43PP5F.js → routing-4VKAVRYR.js} +2 -2
  25. package/build/{serve-LTMDRKXS.js → serve-BYC3LRLN.js} +1 -1
  26. package/build/server.js +27 -5
  27. package/build/stdio.js +1 -1
  28. package/build/{tools-VA7JXD3K.js → tools-NJQPIJ53.js} +5 -5
  29. package/build/{uninstall-3KJLHTNM.js → uninstall-4TJ4SZLU.js} +2 -2
  30. package/build/{watch-HJOTI32P.js → watch-BUSEPVDM.js} +3 -3
  31. package/package.json +1 -1
package/README.md CHANGED
@@ -112,7 +112,7 @@ Expected output shape:
112
112
  "source": "live",
113
113
  "receipt_id": "00000000-0000-4000-8000-000000000000",
114
114
  "receipt_version": "1.0",
115
- "server_version": "1.7.1",
115
+ "server_version": "1.7.2",
116
116
  "build_sha": null,
117
117
  "digest_algorithm": "sha256",
118
118
  "input_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
@@ -6,15 +6,15 @@ metadata:
6
6
  package: "@hiveintelligence/agent-skills"
7
7
  category: "routing"
8
8
  requires_network: "true"
9
- version: 1.7.0
9
+ version: 1.7.1
10
10
  ---
11
11
 
12
12
  # Hive: one skill, all crypto intelligence
13
13
 
14
- Hive answers live crypto questions from 15 data providers through one MCP
15
- server and one CLI, and every answer carries a receipt: provider, fetch time,
16
- cache state, runtime status, and digests of the input and result. Three things
17
- Hive has that most crypto data tools do not:
14
+ Hive answers live crypto questions from more than a dozen data providers
15
+ through one MCP server and one CLI, and every answer carries a receipt:
16
+ provider, fetch time, cache state, runtime status, and digests of the input
17
+ and result. Three things Hive has that most crypto data tools do not:
18
18
 
19
19
  - **History that venues no longer serve.** Perp funding settlements, open
20
20
  interest, basis, long/short ratios, and liquidations for one coin across up
@@ -61,12 +61,12 @@ Version check, once per session on the CLI path:
61
61
  npx -y -p hive-intelligence@latest hive --version
62
62
  ```
63
63
 
64
- Compare the printed version with this skill's `metadata.version`. When the CLI
65
- is older, rerun the setup incantation; when the CLI is newer by a minor
64
+ Compare the printed version with this skill's frontmatter `version`. When the
65
+ CLI is older, rerun the setup incantation; when the CLI is newer by a minor
66
66
  version, refresh this skill:
67
67
 
68
68
  ```bash
69
- npx skills check hive-intel/hive-skills --skill hive
69
+ npx skills add hive-intel/hive-skills --skill hive
70
70
  ```
71
71
 
72
72
  ## First run: the routing block
@@ -79,7 +79,7 @@ CLAUDE.md; only the routing verb does.
79
79
  Ask once per project, with AskUserQuestion when available:
80
80
 
81
81
  > Add a short "Hive MCP Routing" block to this project's AGENTS.md (or
82
- > CLAUDE.md) so every turn reaches for live crypto data through Hive? About 40
82
+ > CLAUDE.md) so every turn reaches for live crypto data through Hive? About 50
83
83
  > lines, removable with `hive routing remove`.
84
84
  >
85
85
  > A) Add it (recommended)
@@ -153,7 +153,7 @@ Loop:
153
153
  have not called before. Read `operation`, required fields, and enums.
154
154
  3. `invoke_api_endpoint {"endpoint": "<tool>", "args": {...}}` with `limit`,
155
155
  `page`, `per_page`, or `offset` set. Stop at the route's stop condition or
156
- at four material calls.
156
+ at its `maxMaterialCalls`, which is 2, 3, or 4 depending on the route.
157
157
  4. Copy each material response's `_hive` block into the receipt, cite receipt
158
158
  ids from every material claim, and run `validate_task_result` before
159
159
  presenting a typed result.
@@ -186,14 +186,22 @@ Domain namespaces wrap the common tools: `market`, `defi`, `portfolio`,
186
186
  `archive` (`coverage`, `funding`, `oi`, `basis`, `long-short`,
187
187
  `liquidations`, all taking `--base-coin`). Run `hive <domain> --help`.
188
188
 
189
- Output is the envelope `{ok, data, meta}`; JSON is automatic when stdout is
190
- not a TTY and forced with `--json`. `--jq '<expr>'` filters `data` in place.
191
- `meta` carries `credit_cost`, `credits_used`, `credits_remaining`, and the
192
- `_hive` receipt fields. The human footer prints `credits: used N, remaining M`
193
- on keyed lanes and `free calls left today: N` keyless.
194
-
195
- Diagnostics: `hive doctor` (connectivity, auth, and today's keyless
196
- allowance, read without spending it) and `hive status` (plan and usage).
189
+ Output is the envelope `{ok, data, meta}`, where `error` replaces `data` on a
190
+ failure; JSON is automatic when stdout is not a TTY and forced with `--json`
191
+ (`--pretty` forces human output when piped). `--jq '<expr>'` filters `data` in
192
+ place, but it is a small built-in jq subset (`.field`, `.a.b`, `.[N]`,
193
+ `.[] | select(...)`), not the jq binary. `meta` carries `credit_cost`,
194
+ `credits_used`, `credits_remaining`, and the receipt fields flattened into
195
+ `meta` itself (`receipt_id`, `receipt_version`, `runtime_status`,
196
+ `fetched_at`, `observed_at`, `cache_age_ms`, `source`, `truncated`,
197
+ `warnings`); there is no `_hive` block on this lane. The human footer prints
198
+ `credits: used N, remaining M` on keyed lanes (`remaining unlimited` on an
199
+ unlimited plan) and, keyless, `free calls left today: N` followed by a
200
+ parenthetical pointing at `hive auth login`.
201
+
202
+ Diagnostics: `hive doctor` (connectivity, whether a key is set, and today's
203
+ keyless allowance, read without spending it), `hive status` (version, profile,
204
+ and API reachability), and `hive usage` (plan and usage).
197
205
 
198
206
  ## Domain guide
199
207
 
@@ -252,7 +260,9 @@ or `error.data.code` on a JSON-RPC cap error). Every error carries `cause`,
252
260
  | `ANON_QUOTA_EXCEEDED` | MCP, REST, CLI (exit 6) | this IP's 25 keyless calls are spent; resets 00:00 UTC | show the keyless-exhausted message; do not retry |
253
261
  | `ANON_GLOBAL_CAP_EXCEEDED` | MCP, REST, CLI (exit 6) | Hive's shared keyless allowance for today is spent | same message; a key is not subject to it |
254
262
  | `ANON_AUTH_REQUIRED` | MCP, REST, CLI (exit 6) | `hive_*` state tools need a signed-in account | say so; offer the setup command |
263
+ | `ANON_QUOTA_UNAVAILABLE` | MCP, REST | the keyless limiter is unreachable, so the lane fails closed; nothing was spent | retry once in a few seconds, then offer a key |
255
264
  | `QUOTA_EXCEEDED` | MCP, REST, CLI (exit 6) | the account's credits are spent for the period | show the top-up message; do not retry |
265
+ | `QUOTA_SERVICE_UNAVAILABLE` | MCP, REST | the billing service could not debit; nothing was debited | retry once in a few seconds |
256
266
  | `NO_WALLET` | MCP, REST, CLI (exit 4) | the account has no credit wallet yet | send the user to the dashboard billing page |
257
267
  | `RATE_LIMITED` | all | per-minute limit | wait the `retry_after` seconds, retry once |
258
268
  | `VALIDATION_ERROR` | all (exit 2) | an argument is wrong; the message names the field and accepted values | fix the args; `hive tools info <name>` has the table |
@@ -303,10 +313,16 @@ file.
303
313
  GeckoTerminal `network` id (`eth`, `base`, `solana`); Alchemy tools take a
304
314
  network slug (`eth-mainnet`, `base-mainnet`). Read the schema.
305
315
  - Address versus symbol: `get_token_price` takes `token` (id or ticker) or
306
- `chain` + `address`, never both. Ambiguous tickers resolve to the
307
- highest-cap coin; say which one you used.
308
- - Solana addresses are auto-detected; do not pass `chain: "eth"` with a
309
- base58 address.
316
+ `chain` + `address`. Pass one, never both: the schema does not reject the
317
+ pair, it silently takes `address` and drops `token`. A ticker is tried as a
318
+ CoinGecko id first and retried as a symbol only if that came back empty;
319
+ there is no market-cap tie-break, so on an ambiguous ticker say which coin
320
+ the receipt actually returned.
321
+ - Solana addresses are auto-detected by `check_token_safety` and
322
+ `get_wallet_portfolio` only, and only when `chain` is omitted; an explicit
323
+ `chain` always wins, so never pass `chain: "eth"` with a base58 address.
324
+ `get_token_price` does no detection at all: a bare mint defaults to
325
+ Ethereum, so pass `chain: "solana"` with it.
310
326
  - Retired names: `codex_*` and the old Codex-era tool names return
311
327
  `TOOL_RETIRED` with the replacement in copyable form. Prediction markets
312
328
  are the `polymarket_*` tools since 1.7.0.
@@ -344,7 +360,13 @@ On yes:
344
360
  hive feedback "<one line: what was asked, what came back>" --tool <tool-name>
345
361
  ```
346
362
 
347
- MCP: `report_feedback {"message": "...", "tool": "<tool-name>", "receipt_id": "<from _hive>"}`.
363
+ MCP: `report_feedback` is not one of the eight root tools, so send it the
364
+ same way as any other endpoint:
365
+
366
+ ```json
367
+ invoke_api_endpoint {"endpoint": "report_feedback", "args": {"message": "...", "tool": "<tool-name>", "receipt_id": "<from _hive>"}}
368
+ ```
369
+
348
370
  Free on every lane, ten per day, one line, no keys or wallet addresses in
349
371
  the message. The CLI attaches the last receipt automatically when `--receipt`
350
372
  is omitted.
@@ -1,15 +1,39 @@
1
1
  [
2
- { "query": "BTC funding history across exchanges since 2024", "should_trigger": true },
2
+ {
3
+ "query": "BTC funding history across exchanges since 2024",
4
+ "should_trigger": true
5
+ },
3
6
  { "query": "what is solana trading at right now", "should_trigger": true },
4
- { "query": "is this token a honeypot 0x6982508145454Ce325dDbE47a25d4ec3d2311933", "should_trigger": true },
5
- { "query": "compare basis between binance and hyperliquid for ETH over the last quarter", "should_trigger": true },
7
+ {
8
+ "query": "is this token a honeypot 0x6982508145454Ce325dDbE47a25d4ec3d2311933",
9
+ "should_trigger": true
10
+ },
11
+ {
12
+ "query": "compare basis between binance and hyperliquid for ETH over the last quarter",
13
+ "should_trigger": true
14
+ },
6
15
  { "query": "set up hive in this project", "should_trigger": true },
7
16
  { "query": "polymarket odds on the next fed cut", "should_trigger": true },
8
- { "query": "run the hive cli to get the top defi protocols by tvl", "should_trigger": true },
9
- { "query": "what does this wallet hold 0xd8dA6BF26964aF9D7eEd9e03E51415D37aA96045", "should_trigger": true },
10
- { "query": "explain how perpetual funding rates work in theory", "should_trigger": false },
11
- { "query": "write a python function that parses a csv", "should_trigger": false },
12
- { "query": "what was bitcoin's price at the 2017 peak", "should_trigger": false },
17
+ {
18
+ "query": "run the hive cli to get the top defi protocols by tvl",
19
+ "should_trigger": true
20
+ },
21
+ {
22
+ "query": "what does this wallet hold 0xd8dA6BF26964aF9D7eEd9e03E51415D37aA96045",
23
+ "should_trigger": true
24
+ },
25
+ {
26
+ "query": "explain how perpetual funding rates work in theory",
27
+ "should_trigger": false
28
+ },
29
+ {
30
+ "query": "write a python function that parses a csv",
31
+ "should_trigger": false
32
+ },
33
+ {
34
+ "query": "what was bitcoin's price at the 2017 peak",
35
+ "should_trigger": true
36
+ },
13
37
  { "query": "should I buy ethereum", "should_trigger": false },
14
38
  { "query": "summarize this whitepaper", "should_trigger": false }
15
39
  ]
@@ -30,7 +30,8 @@ data.
30
30
  5. Call reads through `invoke_api_endpoint`. For an explicitly approved
31
31
  Hive-native state change, use `invoke_stateful_endpoint`; never auto-approve
32
32
  that router.
33
- 6. Stop when the route's stop condition is met or four material calls are used.
33
+ 6. Stop when the route's stop condition is met or its `maxMaterialCalls` (2,
34
+ 3, or 4, depending on the route) is used.
34
35
  Copy server-returned `_hive` blocks into the task receipt and run
35
36
  `validate_task_result` with the selected `route_id` before presenting a structured result.
36
37
  7. Report source recency, provider/runtime status, and missing-data caveats.
@@ -8,8 +8,8 @@ import {
8
8
  getAnonQuota,
9
9
  getUsage,
10
10
  postFeedback
11
- } from "./chunk-TWYGJEVN.js";
12
- import "./chunk-3Z5VR53Z.js";
11
+ } from "./chunk-RNVZIPNY.js";
12
+ import "./chunk-ZSPPJW4G.js";
13
13
  import "./chunk-ZXKFJQDE.js";
14
14
  import "./chunk-6PC3HUAK.js";
15
15
  import "./chunk-OMO7XLC5.js";
@@ -12,7 +12,7 @@ import {
12
12
  runWhoami,
13
13
  saveProfile,
14
14
  switchProfile
15
- } from "./chunk-UPWYFTTJ.js";
15
+ } from "./chunk-KQVPKTEO.js";
16
16
  import "./chunk-6PC3HUAK.js";
17
17
  import "./chunk-OMO7XLC5.js";
18
18
  export {
@@ -10,8 +10,8 @@ import {
10
10
  parseFlagTokens,
11
11
  planToolCall,
12
12
  reservedOptionNames
13
- } from "./chunk-XT6RURQV.js";
14
- import "./chunk-3Z5VR53Z.js";
13
+ } from "./chunk-AZFOTKS2.js";
14
+ import "./chunk-ZSPPJW4G.js";
15
15
  import "./chunk-OMO7XLC5.js";
16
16
  export {
17
17
  ALWAYS_RESERVED_OPTIONS,
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module'; const require = createRequire(impor
2
2
  import {
3
3
  CliError,
4
4
  ExitCode
5
- } from "./chunk-3Z5VR53Z.js";
5
+ } from "./chunk-ZSPPJW4G.js";
6
6
  import {
7
7
  errorEnvelope,
8
8
  info,
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  CliError
4
- } from "./chunk-3Z5VR53Z.js";
4
+ } from "./chunk-ZSPPJW4G.js";
5
5
 
6
6
  // src/cli/call-args.ts
7
7
  var BOOLEAN_LITERALS = /* @__PURE__ */ new Set(["true", "false", "1", "0", "yes", "no"]);
@@ -294,11 +294,11 @@ async function runSwitch(name) {
294
294
  }
295
295
  }
296
296
  async function runUsage() {
297
- const { getUsage } = await import("./api-client-UGNFUZ2L.js");
297
+ const { getUsage } = await import("./api-client-POBN6Y5S.js");
298
298
  const result = await getUsage();
299
299
  if (!result.ok) {
300
300
  const { outputError } = await import("./output-BBHBJI32.js");
301
- const { CliError, classifyError } = await import("./errors-W3GXQN34.js");
301
+ const { CliError, classifyError } = await import("./errors-YQAVCXXO.js");
302
302
  const code = result.error?.code;
303
303
  const err = code === "AUTH_REQUIRED" || code === "INVALID_TOKEN" ? new CliError(
304
304
  "AUTH_REQUIRED",