solana-agent-kit-plugin-madeonsol 1.16.2 → 1.18.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/README.md CHANGED
@@ -9,8 +9,12 @@
9
9
 
10
10
  [Solana Agent Kit](https://github.com/sendaifun/solana-agent-kit) plugin for [MadeOnSol](https://madeonsol.com) — Solana KOL intelligence, deployer analytics, bundle-cohort held-% signals, and wallet tracking.
11
11
 
12
- > Real-time Solana trading intelligence: track 1,069 KOL wallets with <3s latency, score 23,000+ Pump.fun deployers, surface deshred deploy signals ~500ms before on-chain confirmation, detect multi-KOL coordination, and stream every DEX trade. Free tier: 200 requests/day, every endpoint — no signup payment. Get a key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
12
+ > Real-time Solana trading intelligence: track 1,069 KOL wallets with <3s latency, score 23,000+ Pump.fun deployers, verify any wallet's CURRENT on-chain holdings straight from its token accounts, surface deshred deploy signals ~500ms before on-chain confirmation, detect multi-KOL coordination, and stream every DEX trade. Free tier: 200 requests/day, every endpoint — no signup payment. Get a key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
13
13
 
14
+ > **New in 1.18.0** — **Wallet batch classify + token trade tape.** New tool `walletClassify()` + action `MADEONSOL_WALLET_CLASSIFY_ACTION` — bulk reputation flags for 1–100 wallets in one call (`POST /wallet/batch/classify`): per wallet `is_sniper`, `is_bundler` (lifetime flag), `is_dumper` (rolling 42-day window), `is_kol` + `kol_name`, `bot_confidence` (string enum `"none"`/`"low"`/`"medium"`/`"high"` | null — never a number), and `dump_cluster` cohort stats (`dump_cohorts`, `runner_cohorts`, `total_cohorts`, `as_of`). Flags are pump.fun-pipeline scoped — `false` = not observed, NOT verified clean. New tool `tokenTrades()` + action `MADEONSOL_TOKEN_TRADES_ACTION` — the mint-scoped trade tape (`GET /tokens/{mint}/trades`): cursor-paginated raw trades with `price_sol`/`price_usd`, `early_buyer_rank`, and `slot`, filterable by `action`/`wallet`/`since`/`until`; the default window is the **full history** (tape starts 2026-04-12; the response `coverage` block carries `history_start` + `scope`). `walletStats` `flags` gain the same `is_sniper`/`is_bundler`/`is_dumper` + `dump_cluster` fields, and `flags.bot_confidence` is confirmed as a string enum (the old numeric reading never matched a real value — the API returned `null` unconditionally due to a bug, now fixed server-side). Both PRO/ULTRA only.
15
+ >
16
+ > **New in 1.17.0** — **Verified on-chain wallet holdings.** New tool `walletHoldings()` + action `MADEONSOL_WALLET_HOLDINGS_ACTION` — the wallet's CURRENT holdings read straight from chain: its actual SPL + Token-2022 token accounts and SOL balance, each enriched with `price_usd` / `value_usd` / `market_cap_usd` / `name` / `symbol` / `is_bonded`, plus `transfer_delta` (on-chain amount − trade-derived net position — exposes non-swap flows like airdrops, insider funding, wallet-hopping). Distinct from `walletPositions()` (trade-derived FIFO): this is what the wallet *actually* holds right now. Params: `limit` (1–500, default 200), `min_value_usd` (default 0). Returns `{ address, sol_balance, holdings[], summary, verified_at, trade_window_days, cache_hit, ttl_seconds }`. ULTRA only.
17
+ >
14
18
  > **New in 1.16.2** — **Per-venue liquidity map + deployer reputation history.** New tool `tokenPools()` + action `MADEONSOL_TOKEN_POOLS_ACTION` — every DEX pool a token trades in (live vs parked), with fragmentation and top-pool share. Returns a `pools[]` list (`pool_address`, `dex`, `quote_mint`, `liquidity_usd`, `last_price_sol`, `last_swap_at`, `amm_id`, `is_active`) and a `summary` (`pool_count`, `active_pool_count`, `dex_count`, `dexes`, `total_liquidity_usd`, `primary_pool`, `primary_dex`, `top_pool_share_pct`). New tool `deployerHistory()` + action `MADEONSOL_DEPLOYER_HISTORY_ACTION` — a deployer's daily reputation time-series to backtest "was this deployer elite when it launched token X?" without look-ahead bias. Returns `{ is_deployer, wallet, snapshots[] }` where each snapshot has `date`, `tier`, `is_tracked`, `total_deployed`, `total_bonded`, `bonding_rate`, `recent_bond_rate`, `avg_peak_mc`, `best_token_peak_mc` (`limit` = 1–365 days, default 90). Both PRO/ULTRA only.
15
19
  >
16
20
  > **New in 1.16.0** — **Bundle-cohort holdings.** New tool `tokenBundle()` + action `MADEONSOL_TOKEN_BUNDLE_ACTION` — which same-slot "bundle" wallets (≥3 buying in one slot) bought a token and how much of supply they STILL hold, from confirmed on-chain data. Returns a `bundle` summary (`wallet_count`, `bundle_kind` [`atomic_tx`/`same_slot`/`none`], `held_ratio`, **`held_pct_of_supply`** [the headline rug/insider signal], `fully_exited`, `buy_volume`, `tokens_held`) plus a `wallets[]` list (`rank`, `wallet`, `held_ratio`, `has_sold`, `atomic`, `is_kol`). BASIC get the `bundle` block only (`wallets: []`); PRO gets top-10 flags-only; ULTRA adds full holdings + wallet identity (`kol_name`, `win_rate`, `bot_confidence`, `tokens_held`). PRO/ULTRA only.
@@ -114,6 +118,7 @@ const events = await agent.methods.walletTrackerTrades(agent, { limit: 50 });
114
118
  | `MADEONSOL_WALLET_STATS_ACTION` | **New 1.8** · "wallet stats", "wallet info", "check wallet" — aggregate 90d stats + cross-product flags (KOL/alpha/deployer) for any Solana wallet (PRO+) |
115
119
  | `MADEONSOL_WALLET_PNL_ACTION` | **New 1.8** · "wallet pnl", "wallet profit", "wallet performance" — FIFO cost-basis PnL with profit factor, drawdown, daily curve, closed + open positions (PRO+) |
116
120
  | `MADEONSOL_WALLET_POSITIONS_ACTION` | **New 1.8** · "wallet positions", "wallet bags", "open positions" — open lots with live unrealized SOL (PRO+) |
121
+ | `MADEONSOL_WALLET_HOLDINGS_ACTION` | **New 1.17** · "wallet holdings", "current holdings", "what does wallet actually hold" — verified CURRENT on-chain holdings (real SPL + Token-2022 accounts + SOL) enriched with price/MC/name, plus `transfer_delta` vs trade-derived position (ULTRA only) |
117
122
  | `MADEONSOL_WALLET_TRADES_ACTION` | **New 1.8** · "wallet trades", "wallet history" — cursor-paginated raw trades with filters (PRO+) |
118
123
  | `MADEONSOL_TOKEN_FLOW_ACTION` | **New 1.13** · "token flow", "net flow", "buy/sell pressure" — net buy/sell flow over a 1h/24h window (PRO+) |
119
124
  | `MADEONSOL_TOKEN_RISK_BATCH_ACTION` | **New 1.15** · "batch token risk", "bulk rug risk", "score many tokens" — rug-risk scoring for 1–50 mints in one call; untracked mints don't fail the batch (PRO+) |
@@ -121,6 +126,8 @@ const events = await agent.methods.walletTrackerTrades(agent, { limit: 50 });
121
126
  | `MADEONSOL_STREAM_SESSION_KILL_ACTION` | **New 1.15** · "kill stream session", "evict session", "free a connection slot" — evict a live streaming session by id (PRO+) |
122
127
  | `MADEONSOL_TOKEN_POOLS_ACTION` | **New 1.16.2** · "token pools", "liquidity map", "which dex pools", "pool fragmentation" — per-venue liquidity map (live vs parked pools) + top-pool share (PRO+) |
123
128
  | `MADEONSOL_DEPLOYER_HISTORY_ACTION` | **New 1.16.2** · "deployer history", "deployer reputation over time", "was this deployer elite" — a deployer's daily reputation time-series, backtest without look-ahead bias (PRO+) |
129
+ | `MADEONSOL_TOKEN_TRADES_ACTION` | **New 1.18** · "token trades", "trade tape", "who bought this token" — cursor-paginated raw trade tape with price + early-buyer rank, full history (starts 2026-04-12, pump.fun-pipeline scoped) (PRO+) |
130
+ | `MADEONSOL_WALLET_CLASSIFY_ACTION` | **New 1.18** · "classify wallets", "check wallets for snipers", "are these wallets bots" — bulk reputation flags (sniper/bundler lifetime/dumper 42d/KOL/bot confidence/dump cluster) for 1–100 wallets; false = not observed, NOT verified clean (PRO+) |
124
131
 
125
132
  ## Additional methods (v1.0+)
126
133
 
@@ -147,6 +154,8 @@ await agent.methods.tokenBundle(agent, { mint: "MINT" }); // PRO+
147
154
  await agent.methods.tokenPools(agent, { mint: "MINT" }); // PRO+ per-venue liquidity map: live vs parked pools, fragmentation, top-pool share
148
155
  await agent.methods.tokenCandles(agent, { mint: "MINT", tf: "1h" }); // PRO+ OHLCV candles (1m–1d); ULTRA=+net flow, liquidity, full history
149
156
  await agent.methods.tokenFlow(agent, { mint: "MINT", window: "24h" }); // PRO+ net buy/sell flow (1h/24h): unique wallets, buy/sell/net SOL, trades-per-wallet
157
+ await agent.methods.tokenTrades(agent, { mint: "MINT", action: "buy", limit: 100 }); // PRO+ mint-scoped trade tape (full history from 2026-04-12, pump.fun-pipeline scoped); cursor-paginated
158
+ await agent.methods.walletClassify(agent, { wallets: ["W1", "W2"] }); // PRO+ bulk reputation flags for 1–100 wallets: sniper/bundler(lifetime)/dumper(42d)/KOL/bot_confidence/dump_cluster
150
159
  await agent.methods.almostBonded(agent, { min_progress: 90, sort: "eta_asc" }); // PRO+ pre-bond pump.fun tokens by velocity: progress, ETA, stalled, deployer tier
151
160
  await agent.methods.deployerHistory(agent, { wallet: "WALLET", limit: 90 }); // PRO+ deployer daily reputation time-series (1–365d): tier, bonding_rate, peak MC — no look-ahead
152
161
  ```
@@ -310,6 +319,8 @@ console.log(lastRateLimit); // { limit: "10000", remaining: "9999", reset: "..."
310
319
 
311
320
  Free tier returns the full REST response shape on every endpoint — real wallets, TX signatures, full precision. Paid tiers unlock webhooks, WebSockets, rule engines, and ULTRA-only data depth. Get a key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
312
321
 
322
+ New customers get a 5-day free trial of Pro or Ultra when you pay by card — full access, nothing charged during the trial, cancel anytime. Start at https://madeonsol.com/pricing
323
+
313
324
  ## Also Available
314
325
 
315
326
  | Platform | Package |
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ export declare const tokenTradesAction: {
3
+ name: string;
4
+ similes: string[];
5
+ description: string;
6
+ examples: {
7
+ input: {
8
+ mint: string;
9
+ limit: number;
10
+ action: string;
11
+ };
12
+ output: {
13
+ status: string;
14
+ };
15
+ explanation: string;
16
+ }[][];
17
+ schema: z.ZodObject<{
18
+ mint: z.ZodString;
19
+ limit: z.ZodOptional<z.ZodNumber>;
20
+ cursor: z.ZodOptional<z.ZodString>;
21
+ action: z.ZodOptional<z.ZodEnum<["buy", "sell"]>>;
22
+ wallet: z.ZodOptional<z.ZodString>;
23
+ since: z.ZodOptional<z.ZodNumber>;
24
+ until: z.ZodOptional<z.ZodNumber>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ mint: string;
27
+ limit?: number | undefined;
28
+ wallet?: string | undefined;
29
+ action?: "buy" | "sell" | undefined;
30
+ cursor?: string | undefined;
31
+ since?: number | undefined;
32
+ until?: number | undefined;
33
+ }, {
34
+ mint: string;
35
+ limit?: number | undefined;
36
+ wallet?: string | undefined;
37
+ action?: "buy" | "sell" | undefined;
38
+ cursor?: string | undefined;
39
+ since?: number | undefined;
40
+ until?: number | undefined;
41
+ }>;
42
+ handler: (agent: unknown, input: {
43
+ mint: string;
44
+ limit?: number;
45
+ cursor?: string;
46
+ action?: "buy" | "sell";
47
+ wallet?: string;
48
+ since?: number;
49
+ until?: number;
50
+ }) => Promise<{
51
+ status: string;
52
+ result: any;
53
+ message?: undefined;
54
+ } | {
55
+ status: string;
56
+ message: string;
57
+ result?: undefined;
58
+ }>;
59
+ };
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { tokenTrades } from "../tools/index.js";
3
+ export const tokenTradesAction = {
4
+ name: "MADEONSOL_TOKEN_TRADES_ACTION",
5
+ similes: ["token trades", "trade tape", "trade history for token", "who bought this token", "who sold this token", "token transactions"],
6
+ description: "Get the raw trade tape for a Solana token — every captured trade, cursor-paginated newest first. Each trade carries tx_signature, wallet_address, action (buy/sell), sol_amount, token_amount, price_sol/price_usd, early_buyer_rank, slot, block_time. Filter by action, wallet, and since/until (unix seconds); the default window is the FULL history. Coverage honesty: the tape starts 2026-04-12 and is pump.fun-pipeline scoped (see the response coverage block) — trades outside that pipeline are not on the tape. PRO/ULTRA only — BASIC receives HTTP 403.",
7
+ examples: [
8
+ [
9
+ {
10
+ input: { mint: "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU", limit: 100, action: "buy" },
11
+ output: { status: "success" },
12
+ explanation: "Fetch the most recent 100 buys on a token's trade tape",
13
+ },
14
+ ],
15
+ ],
16
+ schema: z.object({
17
+ mint: z.string().describe("Token mint address (base58)"),
18
+ limit: z.number().min(1).max(500).optional().describe("Trades per page (1-500, default 100)"),
19
+ cursor: z.string().optional().describe("Opaque cursor from next_cursor of a previous page"),
20
+ action: z.enum(["buy", "sell"]).optional().describe("Filter by trade direction"),
21
+ wallet: z.string().optional().describe("Filter to a single wallet address"),
22
+ since: z.number().optional().describe("Unix epoch seconds lower bound (default: full history)"),
23
+ until: z.number().optional().describe("Unix epoch seconds upper bound (default: now)"),
24
+ }),
25
+ handler: async (agent, input) => {
26
+ try {
27
+ const data = await tokenTrades(agent, input);
28
+ return { status: "success", result: data };
29
+ }
30
+ catch (err) {
31
+ return { status: "error", message: err.message };
32
+ }
33
+ },
34
+ };
@@ -95,6 +95,48 @@ export declare const walletPositionsAction: {
95
95
  result?: undefined;
96
96
  }>;
97
97
  };
98
+ export declare const walletHoldingsAction: {
99
+ name: string;
100
+ similes: string[];
101
+ description: string;
102
+ examples: {
103
+ input: {
104
+ address: string;
105
+ limit: number;
106
+ min_value_usd: number;
107
+ };
108
+ output: {
109
+ status: string;
110
+ };
111
+ explanation: string;
112
+ }[][];
113
+ schema: z.ZodObject<{
114
+ address: z.ZodString;
115
+ limit: z.ZodOptional<z.ZodNumber>;
116
+ min_value_usd: z.ZodOptional<z.ZodNumber>;
117
+ }, "strip", z.ZodTypeAny, {
118
+ address: string;
119
+ limit?: number | undefined;
120
+ min_value_usd?: number | undefined;
121
+ }, {
122
+ address: string;
123
+ limit?: number | undefined;
124
+ min_value_usd?: number | undefined;
125
+ }>;
126
+ handler: (agent: unknown, input: {
127
+ address: string;
128
+ limit?: number;
129
+ min_value_usd?: number;
130
+ }) => Promise<{
131
+ status: string;
132
+ result: any;
133
+ message?: undefined;
134
+ } | {
135
+ status: string;
136
+ message: string;
137
+ result?: undefined;
138
+ }>;
139
+ };
98
140
  export declare const walletTradesAction: {
99
141
  name: string;
100
142
  similes: string[];
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { walletStats, walletPnl, walletPositions, walletTrades } from "../tools/index.js";
2
+ import { walletStats, walletPnl, walletPositions, walletHoldings, walletTrades } from "../tools/index.js";
3
3
  export const walletStatsAction = {
4
4
  name: "MADEONSOL_WALLET_STATS_ACTION",
5
5
  similes: [
@@ -100,6 +100,41 @@ export const walletPositionsAction = {
100
100
  }
101
101
  },
102
102
  };
103
+ export const walletHoldingsAction = {
104
+ name: "MADEONSOL_WALLET_HOLDINGS_ACTION",
105
+ similes: [
106
+ "wallet holdings",
107
+ "current holdings",
108
+ "on-chain holdings",
109
+ "what does wallet actually hold",
110
+ "verified holdings",
111
+ "wallet token balances",
112
+ ],
113
+ description: "Verified CURRENT on-chain holdings for any Solana wallet — the wallet's actual SPL + Token-2022 token accounts and SOL balance read straight from chain, enriched with price_usd, value_usd, market_cap_usd, name, symbol, is_bonded, plus transfer_delta (on-chain amount − trade-derived net position, which exposes non-swap flows: airdrops, insider funding, wallet-hopping). Distinct from MADEONSOL_WALLET_POSITIONS_ACTION (trade-derived FIFO) — this is what the wallet actually holds right now. Returns { address, sol_balance, holdings[], summary, verified_at, trade_window_days, cache_hit, ttl_seconds }. ULTRA only.",
114
+ examples: [
115
+ [
116
+ {
117
+ input: { address: "ASVzakePP6GNg9r95d4LPZHJDMXun6L6E4um4pu5ybJk", limit: 50, min_value_usd: 10 },
118
+ output: { status: "success" },
119
+ explanation: "List the wallet's verified on-chain holdings worth at least $10",
120
+ },
121
+ ],
122
+ ],
123
+ schema: z.object({
124
+ address: z.string().describe("Solana wallet address"),
125
+ limit: z.number().min(1).max(500).optional().describe("Max holdings to return (1-500, default 200)"),
126
+ min_value_usd: z.number().min(0).optional().describe("Only return holdings worth at least this many USD (default 0)"),
127
+ }),
128
+ handler: async (agent, input) => {
129
+ try {
130
+ const data = await walletHoldings(agent, input);
131
+ return { status: "success", result: data };
132
+ }
133
+ catch (err) {
134
+ return { status: "error", message: err.message };
135
+ }
136
+ },
137
+ };
103
138
  export const walletTradesAction = {
104
139
  name: "MADEONSOL_WALLET_TRADES_ACTION",
105
140
  similes: [
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ export declare const walletClassifyAction: {
3
+ name: string;
4
+ similes: string[];
5
+ description: string;
6
+ examples: {
7
+ input: {
8
+ wallets: string[];
9
+ };
10
+ output: {
11
+ status: string;
12
+ };
13
+ explanation: string;
14
+ }[][];
15
+ schema: z.ZodObject<{
16
+ wallets: z.ZodArray<z.ZodString, "many">;
17
+ }, "strip", z.ZodTypeAny, {
18
+ wallets: string[];
19
+ }, {
20
+ wallets: string[];
21
+ }>;
22
+ handler: (agent: unknown, input: {
23
+ wallets: string[];
24
+ }) => Promise<{
25
+ status: string;
26
+ result: any;
27
+ message?: undefined;
28
+ } | {
29
+ status: string;
30
+ message: string;
31
+ result?: undefined;
32
+ }>;
33
+ };
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import { walletClassify } from "../tools/index.js";
3
+ export const walletClassifyAction = {
4
+ name: "MADEONSOL_WALLET_CLASSIFY_ACTION",
5
+ similes: ["classify wallets", "batch wallet flags", "check wallets for snipers", "are these wallets bots", "wallet reputation batch", "screen wallet list"],
6
+ description: "Bulk wallet reputation flags for 1-100 Solana wallet addresses in one call. Per wallet: is_sniper, is_bundler (lifetime flag), is_dumper (rolling 42-day window), is_kol + kol_name, bot_confidence (\"none\"|\"low\"|\"medium\"|\"high\"|null), and dump_cluster cohort stats. Flags are pump.fun-pipeline scoped — false means \"not observed by our pipeline\", NOT verified clean. Returns { wallets, count, as_of }. PRO/ULTRA only — BASIC receives HTTP 403.",
7
+ examples: [
8
+ [
9
+ {
10
+ input: { wallets: ["ASVzakePP6GNg9r95d4LPZHJDMXun6L6E4um4pu5ybJk", "7dExkKzy4K3rC4YCVXQrPXtvmBBTnf3AjEHUUE4Kkzy8"] },
11
+ output: { status: "success" },
12
+ explanation: "Screen a list of wallets for sniper/bundler/dumper/KOL/bot reputation flags",
13
+ },
14
+ ],
15
+ ],
16
+ schema: z.object({
17
+ wallets: z.array(z.string()).min(1).max(100).describe("1-100 wallet addresses (base58)"),
18
+ }),
19
+ handler: async (agent, input) => {
20
+ try {
21
+ const data = await walletClassify(agent, input);
22
+ return { status: "success", result: data };
23
+ }
24
+ catch (err) {
25
+ return { status: "error", message: err.message };
26
+ }
27
+ },
28
+ };
package/dist/index.d.ts CHANGED
@@ -19,9 +19,11 @@ import { deployerHistoryAction } from "./actions/deployerHistory.js";
19
19
  import { tokenCandlesAction } from "./actions/tokenCandles.js";
20
20
  import { tokenFlowAction } from "./actions/tokenFlow.js";
21
21
  import { tokenRiskBatchAction } from "./actions/tokenRiskBatch.js";
22
+ import { tokenTradesAction } from "./actions/tokenTrades.js";
23
+ import { walletClassifyAction } from "./actions/walletClassify.js";
22
24
  import { streamSessionsAction, streamSessionKillAction } from "./actions/streamSessions.js";
23
- import { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletTrades, me, tokensList, almostBonded } from "./tools/index.js";
24
- import { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction } from "./actions/wallet.js";
25
+ import { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, tokenTrades, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletHoldings, walletTrades, walletClassify, me, tokensList, almostBonded } from "./tools/index.js";
26
+ import { walletStatsAction, walletPnlAction, walletPositionsAction, walletHoldingsAction, walletTradesAction } from "./actions/wallet.js";
25
27
  declare const MadeOnSolPlugin: {
26
28
  name: string;
27
29
  methods: {
@@ -57,6 +59,7 @@ declare const MadeOnSolPlugin: {
57
59
  tokenPools: typeof tokenPools;
58
60
  tokenCandles: typeof tokenCandles;
59
61
  tokenFlow: typeof tokenFlow;
62
+ tokenTrades: typeof tokenTrades;
60
63
  deployerHistory: typeof deployerHistory;
61
64
  copyTradeList: typeof copyTradeList;
62
65
  copyTradeCreate: typeof copyTradeCreate;
@@ -91,7 +94,9 @@ declare const MadeOnSolPlugin: {
91
94
  walletStats: typeof walletStats;
92
95
  walletPnl: typeof walletPnl;
93
96
  walletPositions: typeof walletPositions;
97
+ walletHoldings: typeof walletHoldings;
94
98
  walletTrades: typeof walletTrades;
99
+ walletClassify: typeof walletClassify;
95
100
  };
96
101
  actions: ({
97
102
  name: string;
@@ -1041,6 +1046,63 @@ declare const MadeOnSolPlugin: {
1041
1046
  message: string;
1042
1047
  result?: undefined;
1043
1048
  }>;
1049
+ } | {
1050
+ name: string;
1051
+ similes: string[];
1052
+ description: string;
1053
+ examples: {
1054
+ input: {
1055
+ mint: string;
1056
+ limit: number;
1057
+ action: string;
1058
+ };
1059
+ output: {
1060
+ status: string;
1061
+ };
1062
+ explanation: string;
1063
+ }[][];
1064
+ schema: import("zod").ZodObject<{
1065
+ mint: import("zod").ZodString;
1066
+ limit: import("zod").ZodOptional<import("zod").ZodNumber>;
1067
+ cursor: import("zod").ZodOptional<import("zod").ZodString>;
1068
+ action: import("zod").ZodOptional<import("zod").ZodEnum<["buy", "sell"]>>;
1069
+ wallet: import("zod").ZodOptional<import("zod").ZodString>;
1070
+ since: import("zod").ZodOptional<import("zod").ZodNumber>;
1071
+ until: import("zod").ZodOptional<import("zod").ZodNumber>;
1072
+ }, "strip", import("zod").ZodTypeAny, {
1073
+ mint: string;
1074
+ limit?: number | undefined;
1075
+ wallet?: string | undefined;
1076
+ action?: "buy" | "sell" | undefined;
1077
+ cursor?: string | undefined;
1078
+ since?: number | undefined;
1079
+ until?: number | undefined;
1080
+ }, {
1081
+ mint: string;
1082
+ limit?: number | undefined;
1083
+ wallet?: string | undefined;
1084
+ action?: "buy" | "sell" | undefined;
1085
+ cursor?: string | undefined;
1086
+ since?: number | undefined;
1087
+ until?: number | undefined;
1088
+ }>;
1089
+ handler: (agent: unknown, input: {
1090
+ mint: string;
1091
+ limit?: number;
1092
+ cursor?: string;
1093
+ action?: "buy" | "sell";
1094
+ wallet?: string;
1095
+ since?: number;
1096
+ until?: number;
1097
+ }) => Promise<{
1098
+ status: string;
1099
+ result: any;
1100
+ message?: undefined;
1101
+ } | {
1102
+ status: string;
1103
+ message: string;
1104
+ result?: undefined;
1105
+ }>;
1044
1106
  } | {
1045
1107
  name: string;
1046
1108
  similes: string[];
@@ -1103,6 +1165,47 @@ declare const MadeOnSolPlugin: {
1103
1165
  message: string;
1104
1166
  result?: undefined;
1105
1167
  }>;
1168
+ } | {
1169
+ name: string;
1170
+ similes: string[];
1171
+ description: string;
1172
+ examples: {
1173
+ input: {
1174
+ address: string;
1175
+ limit: number;
1176
+ min_value_usd: number;
1177
+ };
1178
+ output: {
1179
+ status: string;
1180
+ };
1181
+ explanation: string;
1182
+ }[][];
1183
+ schema: import("zod").ZodObject<{
1184
+ address: import("zod").ZodString;
1185
+ limit: import("zod").ZodOptional<import("zod").ZodNumber>;
1186
+ min_value_usd: import("zod").ZodOptional<import("zod").ZodNumber>;
1187
+ }, "strip", import("zod").ZodTypeAny, {
1188
+ address: string;
1189
+ limit?: number | undefined;
1190
+ min_value_usd?: number | undefined;
1191
+ }, {
1192
+ address: string;
1193
+ limit?: number | undefined;
1194
+ min_value_usd?: number | undefined;
1195
+ }>;
1196
+ handler: (agent: unknown, input: {
1197
+ address: string;
1198
+ limit?: number;
1199
+ min_value_usd?: number;
1200
+ }) => Promise<{
1201
+ status: string;
1202
+ result: any;
1203
+ message?: undefined;
1204
+ } | {
1205
+ status: string;
1206
+ message: string;
1207
+ result?: undefined;
1208
+ }>;
1106
1209
  } | {
1107
1210
  name: string;
1108
1211
  similes: string[];
@@ -1164,8 +1267,8 @@ declare const MadeOnSolPlugin: {
1164
1267
  initialize(_agent: unknown): void;
1165
1268
  };
1166
1269
  export default MadeOnSolPlugin;
1167
- export { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletTrades, me, tokensList, almostBonded, };
1270
+ export { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, tokenTrades, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletHoldings, walletTrades, walletClassify, me, tokensList, almostBonded, };
1168
1271
  export { kolFeedAction, kolCoordinationAction, kolLeaderboardAction, deployerAlertsAction, kolPnlAction, kolTrendingTokensAction, kolTokenEntryOrderAction, kolCompareAction, kolAlertsRecentAction, kolFirstTouchesAction };
1169
1272
  export { walletTrackerWatchlistAction, walletTrackerAddAction, walletTrackerRemoveAction, walletTrackerTradesAction, walletTrackerSummaryAction };
1170
- export { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction };
1171
- export { meAction, tokensListAction, almostBondedAction, tokenRiskAction, tokenRiskBatchAction, tokenBundleAction, tokenPoolsAction, deployerHistoryAction, tokenCandlesAction, tokenFlowAction, streamSessionsAction, streamSessionKillAction };
1273
+ export { walletStatsAction, walletPnlAction, walletPositionsAction, walletHoldingsAction, walletTradesAction };
1274
+ export { meAction, tokensListAction, almostBondedAction, tokenRiskAction, tokenRiskBatchAction, tokenBundleAction, tokenPoolsAction, deployerHistoryAction, tokenCandlesAction, tokenFlowAction, tokenTradesAction, walletClassifyAction, streamSessionsAction, streamSessionKillAction };
package/dist/index.js CHANGED
@@ -19,9 +19,11 @@ import { deployerHistoryAction } from "./actions/deployerHistory.js";
19
19
  import { tokenCandlesAction } from "./actions/tokenCandles.js";
20
20
  import { tokenFlowAction } from "./actions/tokenFlow.js";
21
21
  import { tokenRiskBatchAction } from "./actions/tokenRiskBatch.js";
22
+ import { tokenTradesAction } from "./actions/tokenTrades.js";
23
+ import { walletClassifyAction } from "./actions/walletClassify.js";
22
24
  import { streamSessionsAction, streamSessionKillAction } from "./actions/streamSessions.js";
23
- import { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletTrades, me, tokensList, almostBonded, } from "./tools/index.js";
24
- import { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction } from "./actions/wallet.js";
25
+ import { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, tokenTrades, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletHoldings, walletTrades, walletClassify, me, tokensList, almostBonded, } from "./tools/index.js";
26
+ import { walletStatsAction, walletPnlAction, walletPositionsAction, walletHoldingsAction, walletTradesAction } from "./actions/wallet.js";
25
27
  const MadeOnSolPlugin = {
26
28
  name: "madeonsol",
27
29
  methods: {
@@ -57,6 +59,7 @@ const MadeOnSolPlugin = {
57
59
  tokenPools,
58
60
  tokenCandles,
59
61
  tokenFlow,
62
+ tokenTrades,
60
63
  deployerHistory,
61
64
  copyTradeList,
62
65
  copyTradeCreate,
@@ -91,7 +94,9 @@ const MadeOnSolPlugin = {
91
94
  walletStats,
92
95
  walletPnl,
93
96
  walletPositions,
97
+ walletHoldings,
94
98
  walletTrades,
99
+ walletClassify,
95
100
  },
96
101
  actions: [
97
102
  kolFeedAction,
@@ -119,11 +124,14 @@ const MadeOnSolPlugin = {
119
124
  deployerHistoryAction,
120
125
  tokenCandlesAction,
121
126
  tokenFlowAction,
127
+ tokenTradesAction,
128
+ walletClassifyAction,
122
129
  streamSessionsAction,
123
130
  streamSessionKillAction,
124
131
  walletStatsAction,
125
132
  walletPnlAction,
126
133
  walletPositionsAction,
134
+ walletHoldingsAction,
127
135
  walletTradesAction,
128
136
  ],
129
137
  initialize(_agent) {
@@ -131,8 +139,8 @@ const MadeOnSolPlugin = {
131
139
  },
132
140
  };
133
141
  export default MadeOnSolPlugin;
134
- export { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletTrades, me, tokensList, almostBonded, };
142
+ export { kolFeed, kolCoordination, kolLeaderboard, deployerAlerts, kolPnl, kolTrendingTokens, kolTokenEntryOrder, kolCompare, kolAlertsRecent, createWebhook, listWebhooks, deleteWebhook, testWebhook, getStreamToken, streamSessions, streamSessionKill, walletTrackerWatchlist, walletTrackerAdd, walletTrackerRemove, walletTrackerTrades, walletTrackerSummary, alphaLeaderboard, alphaWallet, alphaLinked, tokenCapTable, tokenBuyerQuality, tokenRisk, tokenRiskBatch, tokenBundle, tokenPools, tokenCandles, tokenFlow, tokenTrades, deployerHistory, copyTradeList, copyTradeCreate, copyTradeGet, copyTradeUpdate, copyTradeDelete, copyTradeSignals, coordinationAlertsList, coordinationAlertsCreate, coordinationAlertsGet, coordinationAlertsUpdate, coordinationAlertsDelete, kolFirstTouches, firstTouchSubscriptionsList, firstTouchSubscriptionsCreate, firstTouchSubscriptionsGet, firstTouchSubscriptionsUpdate, firstTouchSubscriptionsDelete, priceAlertsList, priceAlertsCreate, priceAlertsGet, priceAlertsUpdate, priceAlertsDelete, priceAlertsEvents, scoutLeaderboard, coordinationHistory, kolConsensus, peakHistory, walletStats, walletPnl, walletPositions, walletHoldings, walletTrades, walletClassify, me, tokensList, almostBonded, };
135
143
  export { kolFeedAction, kolCoordinationAction, kolLeaderboardAction, deployerAlertsAction, kolPnlAction, kolTrendingTokensAction, kolTokenEntryOrderAction, kolCompareAction, kolAlertsRecentAction, kolFirstTouchesAction };
136
144
  export { walletTrackerWatchlistAction, walletTrackerAddAction, walletTrackerRemoveAction, walletTrackerTradesAction, walletTrackerSummaryAction };
137
- export { walletStatsAction, walletPnlAction, walletPositionsAction, walletTradesAction };
138
- export { meAction, tokensListAction, almostBondedAction, tokenRiskAction, tokenRiskBatchAction, tokenBundleAction, tokenPoolsAction, deployerHistoryAction, tokenCandlesAction, tokenFlowAction, streamSessionsAction, streamSessionKillAction };
145
+ export { walletStatsAction, walletPnlAction, walletPositionsAction, walletHoldingsAction, walletTradesAction };
146
+ export { meAction, tokensListAction, almostBondedAction, tokenRiskAction, tokenRiskBatchAction, tokenBundleAction, tokenPoolsAction, deployerHistoryAction, tokenCandlesAction, tokenFlowAction, tokenTradesAction, walletClassifyAction, streamSessionsAction, streamSessionKillAction };
@@ -164,6 +164,19 @@ export declare function walletPnl(agent: Agent, params: {
164
164
  export declare function walletPositions(agent: Agent, params: {
165
165
  address: string;
166
166
  }): Promise<any>;
167
+ /**
168
+ * Verified CURRENT on-chain holdings for any wallet — the wallet's actual SPL + Token-2022 token
169
+ * accounts and SOL balance read straight from chain, enriched with price/MC/name/symbol, plus
170
+ * `transfer_delta` (on-chain amount − trade-derived net position, exposing non-swap flows like
171
+ * airdrops, insider funding, wallet-hopping). Distinct from `walletPositions` (trade-derived FIFO):
172
+ * holdings = what the wallet actually holds right now. `limit` 1–500 (default 200); `min_value_usd`
173
+ * ≥0 (default 0). ULTRA only.
174
+ */
175
+ export declare function walletHoldings(agent: Agent, params: {
176
+ address: string;
177
+ limit?: number;
178
+ min_value_usd?: number;
179
+ }): Promise<any>;
167
180
  export declare function walletTrades(agent: Agent, params: {
168
181
  address: string;
169
182
  limit?: number;
@@ -173,6 +186,17 @@ export declare function walletTrades(agent: Agent, params: {
173
186
  since?: number;
174
187
  until?: number;
175
188
  }): Promise<any>;
189
+ /**
190
+ * Bulk wallet reputation flags for 1–100 addresses in one request (POST /wallet/batch/classify).
191
+ * Each entry matches the `flags` block of walletStats(): `is_sniper`, `is_bundler` (lifetime flag),
192
+ * `is_dumper` (rolling 42-day window), `is_kol` + `kol_name`, `bot_confidence` (STRING enum
193
+ * "none"/"low"/"medium"/"high" | null — never a number), and `dump_cluster` cohort stats
194
+ * ({ dump_cohorts, runner_cohorts, total_cohorts, as_of } | null). Flags are pump.fun-pipeline
195
+ * scoped — `false` means "not observed", NOT verified clean. PRO/ULTRA only.
196
+ */
197
+ export declare function walletClassify(agent: Agent, params: {
198
+ wallets: string[];
199
+ }): Promise<any>;
176
200
  export declare function alphaLeaderboard(agent: Agent, params?: {
177
201
  limit?: number;
178
202
  min_tokens?: number;
@@ -218,6 +242,23 @@ export declare function tokenFlow(agent: Agent, params: {
218
242
  mint: string;
219
243
  window?: "1h" | "24h";
220
244
  }): Promise<any>;
245
+ /**
246
+ * Mint-scoped trade tape — every captured trade for a token, cursor-paginated newest first
247
+ * (GET /tokens/{mint}/trades). Each trade: tx_signature, wallet_address, action, sol_amount,
248
+ * token_amount, price_sol/price_usd, early_buyer_rank, slot, block_time, traded_at. Filter by
249
+ * `action`, `wallet`, `since`/`until` (unix sec); unlike walletTrades (90d default) the default
250
+ * window is the FULL history. Coverage honesty: the tape starts 2026-04-12 and is
251
+ * pump.fun-pipeline scoped — see the response `coverage` block (history_start, scope). PRO/ULTRA only.
252
+ */
253
+ export declare function tokenTrades(agent: Agent, params: {
254
+ mint: string;
255
+ limit?: number;
256
+ cursor?: string;
257
+ action?: "buy" | "sell";
258
+ wallet?: string;
259
+ since?: number;
260
+ until?: number;
261
+ }): Promise<any>;
221
262
  /** Bulk buyer-quality scoring for up to 50 mints. Shares the 5-min LRU cache with the single-mint endpoint. */
222
263
  export declare function tokenBuyerQualityBatch(agent: Agent, params: {
223
264
  mints: string[];
@@ -246,6 +246,23 @@ export async function walletPnl(agent, params) {
246
246
  export async function walletPositions(agent, params) {
247
247
  return restQuery(agent, "GET", `/wallet/${encodeURIComponent(params.address)}/positions`);
248
248
  }
249
+ /**
250
+ * Verified CURRENT on-chain holdings for any wallet — the wallet's actual SPL + Token-2022 token
251
+ * accounts and SOL balance read straight from chain, enriched with price/MC/name/symbol, plus
252
+ * `transfer_delta` (on-chain amount − trade-derived net position, exposing non-swap flows like
253
+ * airdrops, insider funding, wallet-hopping). Distinct from `walletPositions` (trade-derived FIFO):
254
+ * holdings = what the wallet actually holds right now. `limit` 1–500 (default 200); `min_value_usd`
255
+ * ≥0 (default 0). ULTRA only.
256
+ */
257
+ export async function walletHoldings(agent, params) {
258
+ const qs = new URLSearchParams();
259
+ if (params.limit !== undefined)
260
+ qs.set("limit", String(params.limit));
261
+ if (params.min_value_usd !== undefined)
262
+ qs.set("min_value_usd", String(params.min_value_usd));
263
+ const query = qs.toString() ? `?${qs.toString()}` : "";
264
+ return restQuery(agent, "GET", `/wallet/${encodeURIComponent(params.address)}/holdings${query}`);
265
+ }
249
266
  export async function walletTrades(agent, params) {
250
267
  const qs = new URLSearchParams();
251
268
  if (params.limit !== undefined)
@@ -263,6 +280,17 @@ export async function walletTrades(agent, params) {
263
280
  const query = qs.toString() ? `?${qs.toString()}` : "";
264
281
  return restQuery(agent, "GET", `/wallet/${encodeURIComponent(params.address)}/trades${query}`);
265
282
  }
283
+ /**
284
+ * Bulk wallet reputation flags for 1–100 addresses in one request (POST /wallet/batch/classify).
285
+ * Each entry matches the `flags` block of walletStats(): `is_sniper`, `is_bundler` (lifetime flag),
286
+ * `is_dumper` (rolling 42-day window), `is_kol` + `kol_name`, `bot_confidence` (STRING enum
287
+ * "none"/"low"/"medium"/"high" | null — never a number), and `dump_cluster` cohort stats
288
+ * ({ dump_cohorts, runner_cohorts, total_cohorts, as_of } | null). Flags are pump.fun-pipeline
289
+ * scoped — `false` means "not observed", NOT verified clean. PRO/ULTRA only.
290
+ */
291
+ export async function walletClassify(agent, params) {
292
+ return restQuery(agent, "POST", "/wallet/batch/classify", { wallets: params.wallets });
293
+ }
266
294
  // ── Alpha Wallet Intelligence ──
267
295
  export async function alphaLeaderboard(agent, params = {}) {
268
296
  const qs = new URLSearchParams();
@@ -320,6 +348,31 @@ export async function tokenFlow(agent, params) {
320
348
  const qs = params.window !== undefined ? `?window=${params.window}` : "";
321
349
  return restQuery(agent, "GET", `/tokens/${encodeURIComponent(params.mint)}/flow${qs}`);
322
350
  }
351
+ /**
352
+ * Mint-scoped trade tape — every captured trade for a token, cursor-paginated newest first
353
+ * (GET /tokens/{mint}/trades). Each trade: tx_signature, wallet_address, action, sol_amount,
354
+ * token_amount, price_sol/price_usd, early_buyer_rank, slot, block_time, traded_at. Filter by
355
+ * `action`, `wallet`, `since`/`until` (unix sec); unlike walletTrades (90d default) the default
356
+ * window is the FULL history. Coverage honesty: the tape starts 2026-04-12 and is
357
+ * pump.fun-pipeline scoped — see the response `coverage` block (history_start, scope). PRO/ULTRA only.
358
+ */
359
+ export async function tokenTrades(agent, params) {
360
+ const qs = new URLSearchParams();
361
+ if (params.limit !== undefined)
362
+ qs.set("limit", String(params.limit));
363
+ if (params.cursor)
364
+ qs.set("cursor", params.cursor);
365
+ if (params.action)
366
+ qs.set("action", params.action);
367
+ if (params.wallet)
368
+ qs.set("wallet", params.wallet);
369
+ if (params.since !== undefined)
370
+ qs.set("since", String(params.since));
371
+ if (params.until !== undefined)
372
+ qs.set("until", String(params.until));
373
+ const query = qs.toString() ? `?${qs.toString()}` : "";
374
+ return restQuery(agent, "GET", `/tokens/${encodeURIComponent(params.mint)}/trades${query}`);
375
+ }
323
376
  /** Bulk buyer-quality scoring for up to 50 mints. Shares the 5-min LRU cache with the single-mint endpoint. */
324
377
  export async function tokenBuyerQualityBatch(agent, params) {
325
378
  return restQuery(agent, "POST", "/tokens/batch/buyer-quality", { mints: params.mints });
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "1.16.2";
1
+ export declare const VERSION = "1.18.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // AUTO-GENERATED by ../gen-version.mjs (npm prebuild) from package.json. Do not edit.
2
- export const VERSION = "1.16.2";
2
+ export const VERSION = "1.18.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solana-agent-kit-plugin-madeonsol",
3
- "version": "1.16.2",
3
+ "version": "1.18.0",
4
4
  "description": "Solana Agent Kit plugin for MadeOnSol — KOL intelligence and deployer analytics via x402 micropayments",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",