hive-intelligence 1.1.3 → 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 (112) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +175 -54
  3. package/agent-skills/.claude-plugin/plugin.json +6 -0
  4. package/agent-skills/.mcp.json +11 -0
  5. package/agent-skills/AGENTS.md +37 -0
  6. package/agent-skills/README.md +13 -14
  7. package/agent-skills/SKILL.md +16 -4
  8. package/agent-skills/evals/trigger-queries.json +270 -0
  9. package/agent-skills/package.json +3 -3
  10. package/agent-skills/packs/hive-build/SKILL.md +11 -10
  11. package/agent-skills/packs/hive-build/evals/evals.json +2 -2
  12. package/agent-skills/packs/hive-mcp/SKILL.md +44 -121
  13. package/agent-skills/packs/hive-mcp/evals/evals.json +1 -1
  14. package/agent-skills/packs/hive-mcp/references/client-install-matrix.md +1 -1
  15. package/agent-skills/packs/hive-mcp/references/clients.md +141 -0
  16. package/agent-skills/packs/hive-query/SKILL.md +3 -2
  17. package/agent-skills/packs/hive-query/references/root-mcp-workflow.md +1 -1
  18. package/agent-skills/packs/hive-stateful-monitoring/SKILL.md +75 -0
  19. package/agent-skills/packs/hive-stateful-monitoring/evals/evals.json +49 -0
  20. package/agent-skills/packs/hive-tool-discovery/SKILL.md +1 -1
  21. package/agent-skills/references/agents-routing.md +2 -0
  22. package/agent-skills/scripts/validate-agent-skills-package.mjs +49 -11
  23. package/agent-skills/skills.sh.json +3 -2
  24. package/build/{alias-CZ3DEYHF.js → alias-3OPMQF4X.js} +2 -3
  25. package/build/{api-client-I23XLSHU.js → api-client-EPF6FD7A.js} +4 -4
  26. package/build/{auth-KKINNBXT.js → auth-Q5Q24IRI.js} +3 -4
  27. package/build/{browser-auth-EEFGRHWY.js → browser-auth-VPF5LZMZ.js} +2 -3
  28. package/build/{cache-EGNMENNA.js → cache-T6KC5YEY.js} +2 -3
  29. package/build/{chunk-KBVPIZS4.js → chunk-3WYWXTNN.js} +0 -1
  30. package/build/{chunk-2MYMHMBF.js → chunk-4F5CI6LX.js} +6 -6
  31. package/build/{chunk-RKICZ6DZ.js → chunk-5XXI25JE.js} +7 -8
  32. package/build/{chunk-IZTN7WFH.js → chunk-7JWXBKEJ.js} +5 -3
  33. package/build/chunk-CEWCB5YS.js +71 -0
  34. package/build/{chunk-MPIUUE3T.js → chunk-FH3YGSY5.js} +0 -1
  35. package/build/{chunk-QNCI4DEB.js → chunk-FRXMGRZQ.js} +35 -21
  36. package/build/{chunk-PGBVNMNZ.js → chunk-GZPDEXO4.js} +0 -1
  37. package/build/{chunk-UKHZIVDT.js → chunk-IZPAMRHP.js} +5 -6
  38. package/build/{chunk-2X3U4DFK.js → chunk-JTUKQWIO.js} +3267 -916
  39. package/build/{chunk-XYBEFFZ3.js → chunk-NP6NSOG2.js} +1 -2
  40. package/build/{chunk-V77LO4RO.js → chunk-POT2MBEK.js} +0 -1
  41. package/build/{chunk-B6G222LS.js → chunk-VBOKVQ74.js} +18 -3
  42. package/build/{chunk-DYJBTKNR.js → chunk-YZ2PXBJK.js} +5 -3
  43. package/build/chunk-ZCU7XQKF.js +14 -0
  44. package/build/{chunk-KGYBTXIN.js → chunk-ZTJVOWDQ.js} +0 -1
  45. package/build/{chunk-IDZD2NVG.js → chunk-ZXB53E7H.js} +5 -6
  46. package/build/cli.js +56 -54
  47. package/build/{completion-BELZL7ND.js → completion-46K674EL.js} +2 -3
  48. package/build/{config-TDX4VUGW.js → config-XE6Q5P4I.js} +3 -4
  49. package/build/{config-dir-V43W2WIA.js → config-dir-MAWX5AUF.js} +2 -3
  50. package/build/{doctor-5K5UWHNX.js → doctor-HGMQE6IN.js} +33 -9
  51. package/build/{errors-E6MVUBNA.js → errors-J2PH3NLJ.js} +2 -3
  52. package/build/{format-TSFSI2K7.js → format-5X2HIVDT.js} +1 -2
  53. package/build/{init-YQ5NBICF.js → init-JMDNM7ZZ.js} +1 -2
  54. package/build/{init-all-6OWEQALB.js → init-all-5SKNV75X.js} +10 -11
  55. package/build/{mcpServer-AEX3RQ4U.js → mcpServer-5TKKSKJM.js} +7 -6
  56. package/build/monitor-worker.js +1140 -0
  57. package/build/{namespace-PVHBFDW2.js → namespace-FSX2G3NM.js} +2 -3
  58. package/build/{open-YUIJP37F.js → open-5A6ZQMGC.js} +2 -3
  59. package/build/{output-IYJBFCYK.js → output-V3D4YZ6U.js} +2 -3
  60. package/build/{serve-KWNJK6EY.js → serve-AGCOXXFM.js} +9 -4
  61. package/build/server.js +437 -145
  62. package/build/{setup-YTUKMPNP.js → setup-RMETGJWK.js} +4 -5
  63. package/build/stdio.js +9 -8
  64. package/build/{telemetry-5IPRKZBL.js → telemetry-WCME5XEU.js} +4 -4
  65. package/build/{tools-PJHWFCAG.js → tools-KAB6QBZC.js} +15 -15
  66. package/build/{uninstall-HWXEIP6K.js → uninstall-FLJMBBSC.js} +7 -8
  67. package/build/update-check-LNZQK3XA.js +18 -0
  68. package/build/upgrade-DTUIHVPS.js +171 -0
  69. package/build/version-I6HDAF4L.js +14 -0
  70. package/build/{watch-KZ5EDZK3.js → watch-YNN255QX.js} +7 -7
  71. package/package.json +14 -9
  72. package/build/alias-CZ3DEYHF.js.map +0 -1
  73. package/build/api-client-I23XLSHU.js.map +0 -1
  74. package/build/auth-KKINNBXT.js.map +0 -1
  75. package/build/browser-auth-EEFGRHWY.js.map +0 -1
  76. package/build/cache-EGNMENNA.js.map +0 -1
  77. package/build/chunk-2MYMHMBF.js.map +0 -1
  78. package/build/chunk-2X3U4DFK.js.map +0 -1
  79. package/build/chunk-B6G222LS.js.map +0 -1
  80. package/build/chunk-DYJBTKNR.js.map +0 -1
  81. package/build/chunk-IDZD2NVG.js.map +0 -1
  82. package/build/chunk-IZTN7WFH.js.map +0 -1
  83. package/build/chunk-KBVPIZS4.js.map +0 -1
  84. package/build/chunk-KGYBTXIN.js.map +0 -1
  85. package/build/chunk-MPIUUE3T.js.map +0 -1
  86. package/build/chunk-PGBVNMNZ.js.map +0 -1
  87. package/build/chunk-QNCI4DEB.js.map +0 -1
  88. package/build/chunk-RKICZ6DZ.js.map +0 -1
  89. package/build/chunk-UKHZIVDT.js.map +0 -1
  90. package/build/chunk-V77LO4RO.js.map +0 -1
  91. package/build/chunk-XYBEFFZ3.js.map +0 -1
  92. package/build/cli.js.map +0 -1
  93. package/build/completion-BELZL7ND.js.map +0 -1
  94. package/build/config-TDX4VUGW.js.map +0 -1
  95. package/build/config-dir-V43W2WIA.js.map +0 -1
  96. package/build/doctor-5K5UWHNX.js.map +0 -1
  97. package/build/errors-E6MVUBNA.js.map +0 -1
  98. package/build/format-TSFSI2K7.js.map +0 -1
  99. package/build/init-YQ5NBICF.js.map +0 -1
  100. package/build/init-all-6OWEQALB.js.map +0 -1
  101. package/build/mcpServer-AEX3RQ4U.js.map +0 -1
  102. package/build/namespace-PVHBFDW2.js.map +0 -1
  103. package/build/open-YUIJP37F.js.map +0 -1
  104. package/build/output-IYJBFCYK.js.map +0 -1
  105. package/build/serve-KWNJK6EY.js.map +0 -1
  106. package/build/server.js.map +0 -1
  107. package/build/setup-YTUKMPNP.js.map +0 -1
  108. package/build/stdio.js.map +0 -1
  109. package/build/telemetry-5IPRKZBL.js.map +0 -1
  110. package/build/tools-PJHWFCAG.js.map +0 -1
  111. package/build/uninstall-HWXEIP6K.js.map +0 -1
  112. package/build/watch-KZ5EDZK3.js.map +0 -1
@@ -0,0 +1,141 @@
1
+ # Per-client install instructions
2
+
3
+ The MCP endpoint is the same everywhere — `https://mcp.hiveintelligence.xyz/mcp`
4
+ with `Authorization: Bearer <HIVE_API_KEY>`. Only the config file path and JSON
5
+ shape vary. Read the block for the user's specific client.
6
+
7
+ ## Claude Code
8
+
9
+ ```bash
10
+ claude mcp add --transport http hive https://mcp.hiveintelligence.xyz/mcp \
11
+ --header "Authorization: Bearer $HIVE_API_KEY"
12
+ ```
13
+
14
+ Add `--scope user` to install globally, or `--scope project` to commit to the
15
+ repo's `.mcp.json`. Default scope is local. Restart isn't required — tools
16
+ appear in the next chat session.
17
+
18
+ ## Cursor
19
+
20
+ Edit `~/.cursor/mcp.json`. Add the `hive` server block:
21
+
22
+ ```json
23
+ {
24
+ "mcpServers": {
25
+ "hive": {
26
+ "url": "https://mcp.hiveintelligence.xyz/mcp",
27
+ "headers": {
28
+ "Authorization": "Bearer YOUR_HIVE_API_KEY"
29
+ }
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ Reload the MCP server list from Cursor's command palette (`Cmd+Shift+P` → "MCP:
36
+ Reload Servers"). Or use the deeplink:
37
+
38
+ ```
39
+ cursor://anysphere.cursor-deeplink/mcp/install?name=hive&config=<base64-encoded-config>
40
+ ```
41
+
42
+ ## Claude Desktop
43
+
44
+ Settings → Developer → Edit Config. The file opens in your default editor. Same
45
+ shape as Cursor:
46
+
47
+ ```json
48
+ {
49
+ "mcpServers": {
50
+ "hive": {
51
+ "url": "https://mcp.hiveintelligence.xyz/mcp",
52
+ "headers": {
53
+ "Authorization": "Bearer YOUR_HIVE_API_KEY"
54
+ }
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ Quit Claude Desktop fully (⌘Q on macOS — the menu bar icon must disappear) and
61
+ reopen. Tools become available on next chat.
62
+
63
+ ## VS Code (GitHub Copilot Chat)
64
+
65
+ Requires VS Code 1.101 or newer. Create `.vscode/mcp.json` in the project root
66
+ (or use User Settings for a global install):
67
+
68
+ ```json
69
+ {
70
+ "servers": {
71
+ "hive": {
72
+ "type": "http",
73
+ "url": "https://mcp.hiveintelligence.xyz/mcp",
74
+ "headers": {
75
+ "Authorization": "Bearer YOUR_HIVE_API_KEY"
76
+ }
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ Reload the window. Note the `type: "http"` field — this is required in VS Code's
83
+ schema and differs from Cursor / Claude Desktop.
84
+
85
+ ## Windsurf
86
+
87
+ Edit `~/.codeium/windsurf/mcp_config.json`:
88
+
89
+ ```json
90
+ {
91
+ "mcpServers": {
92
+ "hive": {
93
+ "url": "https://mcp.hiveintelligence.xyz/mcp",
94
+ "headers": {
95
+ "Authorization": "Bearer YOUR_HIVE_API_KEY"
96
+ }
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ Reload Windsurf.
103
+
104
+ ## OpenAI Responses API
105
+
106
+ Use Hive as a server-side remote MCP tool from your application code. Keep the
107
+ Hive API key on your server and pass it in the remote MCP tool headers.
108
+
109
+ Direct ChatGPT app connector setup is beta and auth-dependent; do not promise a
110
+ verified bearer-token ChatGPT app connector unless Hive has shipped the auth
111
+ shape that workspace requires.
112
+
113
+ ## Codex CLI
114
+
115
+ Edit `~/.codex/config.toml`:
116
+
117
+ ```toml
118
+ [mcp_servers.hive]
119
+ url = "https://mcp.hiveintelligence.xyz/mcp"
120
+ bearer_token_env_var = "HIVE_API_KEY"
121
+ ```
122
+
123
+ Set `HIVE_API_KEY` in the shell that launches Codex, then verify with `codex
124
+ /mcp` after restart.
125
+
126
+ ## Gemini CLI
127
+
128
+ Edit `~/.gemini/settings.json`:
129
+
130
+ ```json
131
+ {
132
+ "mcpServers": {
133
+ "hive": {
134
+ "url": "https://mcp.hiveintelligence.xyz/mcp",
135
+ "headers": {
136
+ "Authorization": "Bearer YOUR_HIVE_API_KEY"
137
+ }
138
+ }
139
+ }
140
+ }
141
+ ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: hive-query
3
- description: Use this skill for any live crypto intelligence question before answering from memory. Route wallet, token, DeFi, NFT, Solana, security, market, DEX, network, or prediction-market requests through Hive task toolsets, schema lookup, and bounded endpoint invocation.
3
+ description: Use this skill as the default entry point for any live crypto intelligence question before answering from memory. Route wallet, token, DeFi, NFT, Solana, security, market, DEX, network, or prediction-market requests through Hive task toolsets and bounded endpoint invocation. If routing does not surface the exact tool or schema, hand off to hive-tool-discovery.
4
4
  license: MIT
5
5
  metadata:
6
6
  package: "@hiveintelligence/agent-skills"
@@ -41,6 +41,7 @@ endpoint without loading the full provider catalog into context.
41
41
  | Blocks, gas, logs, receipts, RPC diagnostics | `network_infrastructure` |
42
42
  | Solana wallets, SPL accounts, DAS assets, priority fees | `solana_analysis` |
43
43
  | Events, markets, outcomes, traders, holders | `prediction_markets` |
44
+ | Durable monitors, alerts, scheduled reports, agent memory | `stateful_monitoring` |
44
45
  | Ambiguous request or schema lookup | `search_discovery` |
45
46
 
46
47
  ## Example
@@ -72,7 +73,7 @@ Use this structure for Hive-backed answers:
72
73
 
73
74
  ## Evidence
74
75
  - Provider/source: [provider names]
75
- - Freshness: [timestamp, block/slot, or fetched_at when available]
76
+ - Freshness: [Hive execution fetched_at plus provider timestamp, block, or slot when relevant]
76
77
  - Runtime status: [ok/missing_key/plan_required/rate_limited/degraded/failing]
77
78
 
78
79
  ## Caveats
@@ -14,7 +14,7 @@ flowchart LR
14
14
  Root --> MetaTools["Meta tools: search_tools, get_api_endpoint_schema, invoke_api_endpoint"]
15
15
  Root --> Toolsets["Task toolsets"]
16
16
  MetaTools --> Registry["Provider endpoint registry"]
17
- Registry --> Providers["CoinGecko, DeFiLlama, GoPlus, Codex, CCXT, Tenderly, Moralis, Helius, Alchemy, Polymarket"]
17
+ Registry --> Providers["CoinGecko, DeFiLlama, GoPlus, Codex (Polymarket/Kalshi), CCXT, Tenderly, Moralis, Helius, Alchemy"]
18
18
  Agent --> Answer["Answer with provenance, freshness, runtime status"]
19
19
  ```
20
20
 
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: hive-stateful-monitoring
3
+ description: Use this skill when a user asks Hive to remember, monitor, schedule, alert, or report on crypto intelligence across sessions. Creates durable monitor intent through Hive's stateful monitoring tools.
4
+ license: MIT
5
+ metadata:
6
+ package: "@hiveintelligence/agent-skills"
7
+ category: "stateful-monitoring"
8
+ requires_network: "true"
9
+ version: 1.0.0
10
+ ---
11
+
12
+ # hive-stateful-monitoring - Stateful Monitoring
13
+
14
+ Use this skill when the user wants Hive to remember a wallet, token, protocol,
15
+ market, prediction market, watchlist digest, token discovery risk workflow, or
16
+ risk watch workflow and keep reporting on it later.
17
+
18
+ ## Task toolset
19
+
20
+ Use `stateful_monitoring`.
21
+
22
+ Required identifiers: monitor kind and target object.
23
+
24
+ For B2B adapter mode, Hive state is isolated by server-injected subject context:
25
+ `partner API key -> Hive owner user_id -> tenant_id -> end_user_id -> subject_id`.
26
+ The adapter must sign `METHOD + "\n" + PATH + "\n" + TENANT_ID + "\n" +
27
+ END_USER_ID + "\n" + TIMESTAMP` with HMAC-SHA256 and send the
28
+ `X-Hive-Tenant-Id`, `X-Hive-End-User-Id`, `X-Hive-Subject-Timestamp`, and
29
+ `X-Hive-Subject-Signature` headers. Never ask the model or end user to provide
30
+ `__hive_user_id` or `__hive_subject_id`; those are hidden server-injected args.
31
+ In TypeScript backends with controlled source or release-tarball access, use
32
+ `hive-mcp-client` with `subjectSigningSecret` and per-call
33
+ `subject`/`withSubject(...)` context instead of hand-building these headers.
34
+
35
+ ## Procedure
36
+
37
+ 1. Convert the user's durable intent into a monitor `kind`, `target`, `rules`,
38
+ and `cadence`.
39
+ 2. Use `hive_create_monitor` for new watch requests.
40
+ 3. Use `hive_list_monitors` before creating a duplicate monitor.
41
+ 4. Use `hive_update_monitor` to change cadence, rules, target, metadata, or
42
+ status.
43
+ 5. Use `hive_archive_monitor` when the user asks Hive to stop watching.
44
+ 6. Use `hive_get_monitor_runs`, `hive_list_observations`,
45
+ `hive_list_alerts`, `hive_get_latest_snapshot`, or
46
+ `hive_generate_monitor_report` when the user asks what changed, what is
47
+ alerting, or what Hive remembers from previous runs.
48
+ 7. Use `hive_update_alert_status` when the user acknowledges, reopens, or
49
+ resolves an alert.
50
+ 8. Use `hive_remember_fact`, `hive_list_memory_facts`, and
51
+ `hive_forget_memory_fact` for durable user-scoped facts that should appear
52
+ in future monitor reports.
53
+ 9. Use `hive_list_subjects`, `hive_get_subject`, `hive_archive_subject`, and
54
+ `hive_list_subject_audit_events` only when operating or auditing a B2B
55
+ adapter's downstream state boundaries.
56
+ 10. Explain that monitor execution is handled by Hive workers, not by the
57
+ current chat session. Worker-supported monitor kinds are wallet, token,
58
+ protocol, market, prediction_market, watchlist_digest,
59
+ token_discovery_risk, and risk_watch.
60
+
61
+ ## Example
62
+
63
+ For "Watch this Ethereum wallet and tell me when it moves more than $100k",
64
+ create a wallet monitor with an Ethereum address target, a large-transfer rule,
65
+ and the requested cadence or default cadence.
66
+
67
+ For "Send every customer a daily crypto watchlist brief", create a
68
+ `watchlist_digest` monitor per B2B subject with saved wallets, tokens,
69
+ protocols, markets, and optional prediction markets in the target.
70
+
71
+ ## Runtime status handling
72
+
73
+ If stateful tools return `missing_key` or an auth-required error, explain that
74
+ hosted MCP authentication or the Hive persistence backend must be configured
75
+ before durable monitoring can be used. Do not pretend the monitor was saved.
@@ -0,0 +1,49 @@
1
+ {
2
+ "skill_name": "hive-stateful-monitoring",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Watch this Ethereum wallet and alert me when it transfers more than $100k.",
7
+ "expected_output": "Uses stateful_monitoring, creates or updates a wallet monitor with an Ethereum address target, a large-transfer rule, and a durable cadence.",
8
+ "files": [],
9
+ "assertions": [
10
+ "Chooses stateful_monitoring.",
11
+ "Maps the request to a wallet monitor target.",
12
+ "States that Hive workers execute the monitor later."
13
+ ]
14
+ },
15
+ {
16
+ "id": 2,
17
+ "prompt": "Show me the crypto monitors Hive already remembers and pause the one watching PEPE.",
18
+ "expected_output": "Lists existing monitors before mutation, identifies the relevant token monitor, and updates its status to paused instead of creating a duplicate.",
19
+ "files": [],
20
+ "assertions": [
21
+ "Calls hive_list_monitors before updating.",
22
+ "Uses hive_update_monitor for pause behavior.",
23
+ "Does not claim success if auth or persistence is unavailable."
24
+ ]
25
+ },
26
+ {
27
+ "id": 3,
28
+ "prompt": "Summarize what changed on my ETH whale wallet monitor and show open alerts.",
29
+ "expected_output": "Uses the stateful monitoring report/read tools to fetch monitor runs, observations, alerts, and latest snapshot before summarizing changed state.",
30
+ "files": [],
31
+ "assertions": [
32
+ "Chooses stateful_monitoring.",
33
+ "Uses hive_generate_monitor_report or the read tools for observations, alerts, runs, and latest snapshot.",
34
+ "Does not invent monitor history if the persistence backend is unavailable."
35
+ ]
36
+ },
37
+ {
38
+ "id": 4,
39
+ "prompt": "Remember that I care most about protocol revenue growth, then include that context in future Aave monitor reports.",
40
+ "expected_output": "Persists the preference with hive_remember_fact in the protocol or default namespace and uses monitor reports for future summaries.",
41
+ "files": [],
42
+ "assertions": [
43
+ "Uses hive_remember_fact for durable user-scoped memory.",
44
+ "Does not encode the preference only in the chat transcript.",
45
+ "Uses hive_generate_monitor_report when asked for future monitor context."
46
+ ]
47
+ }
48
+ ]
49
+ }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: hive-tool-discovery
3
- description: Use this skill when the exact Hive MCP tool, task toolset, provider, endpoint name, schema, or argument shape is unknown. Discover first with Hive resources and search_tools, then inspect schema before any invoke_api_endpoint call.
3
+ description: Use this skill only when the exact Hive MCP tool, task toolset, provider, endpoint name, schema, or argument shape is unknown and hive-query routing was not enough. Discover first with Hive resources and search_tools, then inspect schema before any invoke_api_endpoint call.
4
4
  license: MIT
5
5
  metadata:
6
6
  package: "@hiveintelligence/agent-skills"
@@ -32,6 +32,8 @@ 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
 
@@ -20,16 +20,6 @@ const workflowReferenceSkills = new Set([
20
20
  "hive-prediction-markets",
21
21
  ]);
22
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",
31
- ]);
32
-
33
23
  function fail(message) {
34
24
  failures.push(message);
35
25
  console.log(`- [FAIL] ${message}`);
@@ -148,6 +138,54 @@ if (directoryManifest) {
148
138
  }
149
139
  }
150
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
+
151
189
  const triggerQueries = readJson(join(root, "evals", "trigger-queries.json"));
152
190
  if (triggerQueries) {
153
191
  const triggerSkillNames = new Set();
@@ -164,7 +202,7 @@ if (triggerQueries) {
164
202
  }
165
203
  }
166
204
  }
167
- for (const skillName of requiredTriggerCoverage) {
205
+ for (const skillName of skillDirs) {
168
206
  if (!triggerSkillNames.has(skillName)) {
169
207
  fail(`trigger-queries must include trigger coverage for ${skillName}.`);
170
208
  }
@@ -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
  ]
@@ -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-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-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-7JWXBKEJ.js";
14
+ import "./chunk-ZCU7XQKF.js";
15
+ import "./chunk-POT2MBEK.js";
16
+ import "./chunk-3WYWXTNN.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-5XXI25JE.js";
20
+ import "./chunk-POT2MBEK.js";
21
+ import "./chunk-3WYWXTNN.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-GZPDEXO4.js";
5
+ import "./chunk-3WYWXTNN.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-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-EGNMENNA.js.map
@@ -49,4 +49,3 @@ export {
49
49
  __toESM,
50
50
  __toCommonJS
51
51
  };
52
- //# sourceMappingURL=chunk-KBVPIZS4.js.map
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module'; const require = createRequire(impor
2
2
  import {
3
3
  resolveApiKey,
4
4
  resolveApiUrl
5
- } from "./chunk-V77LO4RO.js";
5
+ } from "./chunk-POT2MBEK.js";
6
6
 
7
7
  // src/cli/config.ts
8
8
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -270,10 +270,11 @@ function printChatGptDesktopInstructions() {
270
270
  return {
271
271
  manual: true,
272
272
  steps: [
273
- "Open ChatGPT Desktop",
274
- "Settings \u2192 Connectors \u2192 Add MCP server",
275
- `URL: ${url}/mcp`,
276
- `Auth header: Authorization: Bearer ${keyLabel}`
273
+ "Recommended: use OpenAI Responses API with a remote MCP tool",
274
+ `server_url: ${url}/mcp`,
275
+ `authorization: ${keyLabel}`,
276
+ "Direct ChatGPT app connectors may require OAuth/CIMD; Hive has not shipped OAuth yet.",
277
+ "For ChatGPT app testing, put an OAuth-compatible proxy in front of Hive and inject the Hive key server-side."
277
278
  ]
278
279
  };
279
280
  }
@@ -337,4 +338,3 @@ export {
337
338
  removeWindsurfConfig,
338
339
  removeGeminiCliConfig
339
340
  };
340
- //# sourceMappingURL=chunk-2MYMHMBF.js.map
@@ -5,7 +5,7 @@ import {
5
5
  getCredentials,
6
6
  saveConfig,
7
7
  saveCredentials
8
- } from "./chunk-V77LO4RO.js";
8
+ } from "./chunk-POT2MBEK.js";
9
9
 
10
10
  // src/cli/auth.ts
11
11
  import { createInterface } from "readline";
@@ -204,7 +204,7 @@ Profile "${profileName}" saved. Key: ${maskKey(apiKey)}
204
204
  Hive CLI \u2014 Login (profile: ${profileName})
205
205
  `);
206
206
  try {
207
- const { browserLogin } = await import("./browser-auth-EEFGRHWY.js");
207
+ const { browserLogin } = await import("./browser-auth-VPF5LZMZ.js");
208
208
  const apiUrl = process.env.HIVE_API_URL || "https://mcp.hiveintelligence.xyz";
209
209
  const websiteUrl = process.env.HIVE_WEBSITE_URL || "https://hiveintelligence.xyz";
210
210
  const result = await browserLogin({ baseUrl: websiteUrl });
@@ -294,7 +294,7 @@ async function runSwitch(name) {
294
294
  }
295
295
  }
296
296
  async function runSignup(opts) {
297
- const { authSignup } = await import("./api-client-I23XLSHU.js");
297
+ const { authSignup } = await import("./api-client-EPF6FD7A.js");
298
298
  const profileName = opts.profile ?? "default";
299
299
  process.stderr.write(`
300
300
  Hive CLI \u2014 Signup (profile: ${profileName})
@@ -352,7 +352,7 @@ Account created but no API key was generated.
352
352
  }
353
353
  }
354
354
  async function runKeysList() {
355
- const { listKeysApi } = await import("./api-client-I23XLSHU.js");
355
+ const { listKeysApi } = await import("./api-client-EPF6FD7A.js");
356
356
  const creds = getCredentials();
357
357
  const config = getConfig();
358
358
  const jwt = creds.profiles[config.activeProfile]?.jwt;
@@ -391,7 +391,7 @@ async function runKeysList() {
391
391
  process.stderr.write("\n");
392
392
  }
393
393
  async function runKeysCreate(opts) {
394
- const { createKey } = await import("./api-client-I23XLSHU.js");
394
+ const { createKey } = await import("./api-client-EPF6FD7A.js");
395
395
  const creds = getCredentials();
396
396
  const config = getConfig();
397
397
  const jwt = creds.profiles[config.activeProfile]?.jwt;
@@ -424,7 +424,7 @@ API Key: ${data.key}
424
424
  );
425
425
  }
426
426
  async function runKeysRevoke(keyId) {
427
- const { revokeKeyApi } = await import("./api-client-I23XLSHU.js");
427
+ const { revokeKeyApi } = await import("./api-client-EPF6FD7A.js");
428
428
  const creds = getCredentials();
429
429
  const config = getConfig();
430
430
  const jwt = creds.profiles[config.activeProfile]?.jwt;
@@ -445,7 +445,7 @@ async function runKeysRevoke(keyId) {
445
445
  }
446
446
  }
447
447
  async function runUsage() {
448
- const { getUsage } = await import("./api-client-I23XLSHU.js");
448
+ const { getUsage } = await import("./api-client-EPF6FD7A.js");
449
449
  const result = await getUsage();
450
450
  if (!result.ok) {
451
451
  process.stderr.write("Failed to fetch usage. Check your API key.\n");
@@ -494,4 +494,3 @@ export {
494
494
  runKeysRevoke,
495
495
  runUsage
496
496
  };
497
- //# sourceMappingURL=chunk-RKICZ6DZ.js.map
@@ -1,9 +1,12 @@
1
1
  import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);
2
+ import {
3
+ SERVER_VERSION
4
+ } from "./chunk-ZCU7XQKF.js";
2
5
  import {
3
6
  getNoRetry,
4
7
  resolveApiKey,
5
8
  resolveApiUrl
6
- } from "./chunk-V77LO4RO.js";
9
+ } from "./chunk-POT2MBEK.js";
7
10
 
8
11
  // src/cli/api-client.ts
9
12
  var MAX_RETRIES = 3;
@@ -56,7 +59,7 @@ async function fetchWithRetry(url, init, fetchFn = fetch) {
56
59
  function getHeaders(apiKey) {
57
60
  const headers = {
58
61
  "Content-Type": "application/json",
59
- "User-Agent": `hive-cli/${process.env.npm_package_version ?? "1.1.3"}`
62
+ "User-Agent": `hive-cli/${process.env.npm_package_version ?? SERVER_VERSION}`
60
63
  };
61
64
  if (apiKey) headers.Authorization = `Bearer ${apiKey}`;
62
65
  return headers;
@@ -247,4 +250,3 @@ export {
247
250
  revokeKeyApi,
248
251
  getUsage
249
252
  };
250
- //# sourceMappingURL=chunk-IZTN7WFH.js.map