toLowerCase() breaks base58 Solana addresses which are case-sensitive.
Only apply lowercase normalization on EVM chains (bsc/base/eth).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ensures from_address and multi-swap accounts are lowercased at the CLI
boundary to prevent case-sensitivity issues on the API side.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Align CLI with server-side breaking change: GET /v1/user/wallet_holdings
was upgraded from authExistMW to authCriticalMW on the openapi-service.
- OpenApiClient: switch getWalletHoldings to authSignedRequest
- SKILL.md: split rate-limit table by auth level; update Notes section
- CLAUDE.md: move portfolio holdings from Normal to Critical auth row
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move `order gas-price` → `gmgn-cli gas-price` (top-level command)
- Expand chain support to include sol alongside eth / bsc / base
- Reorder commands in swap.ts to match SKILL.md: swap → multi-swap →
order quote/get → gas-price → order strategy create/list/cancel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Commander.js removes hyphens before digits (e.g. -24h → 24h) but does not
uppercase them. The previous regex only handled -[a-z] patterns, leaving
a residual hyphen: minVolume-24h instead of minVolume24h.
This caused all 24h-suffixed filter flags to be silently ignored:
--min-volume-24h, --max-volume-24h, --min-net-buy-24h, --min-swaps-24h,
--min-buys-24h, --min-sells-24h.
Fix: add .replace(/-(\d)/g, '$1') to strip hyphens before digit sequences.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add --gas-level (eth only), --auto-fee (eth only) to swap, multi-swap,
and strategy create commands
- Add order gas-price subcommand (GET /v1/trade/gas_price, normal auth)
- Add --max-fee-per-gas / --max-priority-fee-per-gas to strategy create
- Remove --auto-tip-fee and --max-auto-fee from swap and multi-swap
- Update token SKILL.md: price field is now a nested object (price.price),
add price window fields and fee_distribution object docs
- Update EIP-1559 chain coverage from Base-only to BSC/BASE/ETH
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add ETH chain support to all P0 commands across CLI and SKILL.md docs:
Commands with ETH support added:
- token info/security/pool/holders/traders
- market kline/trending
- portfolio info/holdings/activity/stats/token-balance
- track follow-wallet
- swap, order quote/get
P1/P2 commands remain sol/bsc/base only:
- track kol/smartmoney (P1)
- multi-swap, order strategy create/list/cancel (P1)
- portfolio created-tokens (P2)
Also adds ETH chain currencies, explorer links, and gas price bounds
to gmgn-swap SKILL.md.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- parseDuration: bare numbers now default to minutes (e.g. "5" → "5m") instead of hard error
- Print a warning to stderr so users know the implicit conversion is happening
- Update SKILL.md: document unit suffix recommendation and bare-number fallback behavior
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bare numbers like 0.5 were silently accepted but caused inconsistent
server-side filtering. This change:
- Adds a parseDuration() validator that rejects values without a unit
- Accepts seconds (e.g. 30s) and minutes (e.g. 0.5m / 1m / 5m)
- Prints a clear error message when a bare number is passed
- Updates desc strings to document the required unit format
- Adds a new TrenchesFieldType 'duration' to distinguish these fields
GET /v1/trade/follow_wallet requires X-Signature (critical auth) but was
called via normalRequest (API Key only), causing HTTP 401 AUTH_INVALID
with "missing signature".
- OpenApiClient: getFollowWallet now calls criticalRequest; criticalRequest
queryExtra type widened to accept string[] to support the --filter option
- signer: buildMessage handles string[] values as sorted repeated k=v pairs,
consistent with buildUrl / URLSearchParams serialization
- config: update PRIVATE_KEY_REQUIRED_MSG to include follow-wallet
- SKILL.md: prerequisites note GMGN_PRIVATE_KEY for follow-wallet; first-time
setup now saves private key to ~/.config/gmgn/.env and removes /tmp copy;
Notes section corrected to reflect split auth modes
- CLAUDE.md: Auth Modes table updated — follow-wallet moved to Critical row
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add POST /v1/market/token_signal client method and TokenSignalGroup interface
- Add market signal sub-command with individual flags for single-group queries
- Support --groups <json> override for multi-group parallel queries
- Document max 50 results per group limit
- Update SKILL.md, cli-usage.md, and README with signal types, response fields, and examples
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add POST /v1/trade/multi_swap support: new MultiSwapParams interface,
multiSwap() method, and multi-swap CLI command with full options
(accounts, input/output amounts, slippage, fees, condition-orders, etc.)
- Fix track follow-wallet: switch from criticalRequest to normalRequest;
--wallet is now optional (API Key's bound user resolves the follow list)
- Update SKILL.md, cli-usage.md, Readme.md, Readme.zh.md to reflect both changes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add drawdown_rate optional field to StrategyConditionOrder interface
- Make price_scale optional (required only for fixed-price types)
- Update --condition-orders help text with trace type example
- Document all 4 condition order types in SKILL.md with field requirements,
drawdown_rate semantics, and usage examples
- Sync order strategy create params: replace --side / auto-inference with
explicit --order-type and --sub-order-type required options
- Add --group-tag to order strategy list params
- Add --order-type to order strategy cancel params
- Fix --gas-price description: gwei (not wei); CLI converts internally
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove --open-price option from swap order strategy create command
- Remove open_price field from OpenApiClient StrategyCreateParams type
- Update skills/gmgn-swap/SKILL.md: drop open-price row and inference table, simplify examples to use --sub-order-type directly
- Update docs/cli-usage.md: remove --open-price from command signature and parameter table
- Add /gmgn-cooking skill to Skills tables in Readme.md and Readme.zh.md
- Add limit order and cooking CLI examples to section 8 of both readmes
- Update Cline install instructions to include /gmgn-cooking
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add --order-type and --sub-order-type as required flags to order strategy create
(server requires both; omitting them caused every create call to 400)
- Remove --side from strategy create (field no longer exists in the API)
- Make --open-price optional in strategy create (matches API spec)
- Fix --gas-price in strategy create to convert gwei→wei (consistent with swap)
- Add --condition-orders and --sell-ratio-type to swap command for
take-profit/stop-loss conditions attached after a successful swap
- Add --group-tag (LimitOrder/STMix) to order strategy list
- Add --order-type to order strategy cancel
- Add StrategyConditionOrder interface; extend SwapParams with condition_orders
and sell_ratio_type; add order_type/sub_order_type to StrategyCreateParams;
remove side; add order_type to StrategyCancelParams
- Update docs/cli-usage.md: fix strategy create table, add chain fee requirement
notes (SOL requires priority_fee+tip_fee; BSC requires gas_price), add
condition_orders example and strategy_order_id response field, add
TRADING_BOT_UNAVAILABLE error code
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- OpenApiClient: extend getTrenches/buildTrenchesBody to accept and spread
server-side filter fields into each category section of the request body
- SKILL.md: clarify entrapment_ratio description as Entrapment/Phishing
- workflow-early-project-screening: add filter-preset examples to Step 1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Validated all 31 min/max field pairs against the live API using extreme values.
Fields returning baseline count (80) on both min and max tests are silently
ignored by the server — confirmed not supported.
Removed fields (12 flags, 6 pairs):
- min/max_volume_24h
- min/max_net_buy_24h
- min/max_swaps_24h
- min/max_buys_24h
- min/max_sells_24h
- min/max_x_follower
Also removed min_volume_24h from the `strict` filter preset.
Remaining 50 filter flags (25 pairs) are confirmed to work.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Portfolio holdings to return empty results for wallets that only have closed positions (issue #21).
Changes:
- Convert --hide-closed, --hide-airdrop, --hide-abnormal to value options with explicit defaults (hide_closed=true, hide_airdrop=true, hide_abnormal=false), so defaults are enforced by the CLI and users can override with e.g. --hide-closed false
- Remove --sell-out and --show-small which are hard-coded in the service and were never forwarded to the upstream API
- Update SKILL.md to reflect new option signatures and defaults
Fixes#21
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove hardcoded "renowned" default from --tag in `token holders` command
- Remove hardcoded "renowned" default from --tag in `token traders` command
- Update skills/gmgn-token/SKILL.md to show --tag has no default (returns all wallets when omitted)
Fixes#14
- Add new `track` command group with three sub-commands:
- `track follow-wallet`: monitor trade activity of followed wallets (critical auth)
- `track kol`: KOL trade records with optional --chain and client-side --side filter
- `track smartmoney`: Smart Money trade records with optional --chain and client-side --side filter
- Remove follow-wallet, kol, smartmoney sub-commands from portfolio
- Add getKol/getSmartMoney optional chain param in OpenApiClient
- Switch getFollowWallet to criticalRequest (signature auth required)
- Align track follow-wallet options to actual API params (remove unsupported flags)
- Add skills/gmgn-track/SKILL.md with sub-command guide, options, response fields
- Add IMPORTANT notice to all SKILL.md files to prevent AI from scraping gmgn.ai
- Add CRITICAL RULE section to CLAUDE.md to enforce CLI-only data access
- Update Readme.md and Readme.zh.md: add gmgn-track skill, Track CLI section, user tip
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace raw --body JSON parameter with structured CLI flags for better AI agent readability.
Add full response key reference and SOL/BSC/Base examples to SKILL.md and docs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>