feat: add track command group, split follow-wallet/kol/smartmoney from portfolio

- 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>
This commit is contained in:
gumponchain
2026-03-27 14:19:57 +08:00
committed by GMGN.AI
co-authored by Claude Sonnet 4.6
parent 58849a8c61
commit 28062887d8
12 changed files with 265 additions and 119 deletions
+5 -3
View File
@@ -148,17 +148,19 @@ export class OpenApiClient {
}
async getFollowWallet(chain: string, extra: Record<string, string | number | string[]> = {}): Promise<unknown> {
return this.normalRequest("GET", "/v1/trade/follow_wallet", { chain, ...extra });
return this.criticalRequest("GET", "/v1/trade/follow_wallet", { chain, ...extra }, null);
}
async getKol(limit?: number): Promise<unknown> {
async getKol(chain?: string, limit?: number): Promise<unknown> {
const query: Record<string, string | number> = {};
if (chain) query["chain"] = chain;
if (limit != null) query["limit"] = limit;
return this.normalRequest("GET", "/v1/user/kol", query);
}
async getSmartMoney(limit?: number): Promise<unknown> {
async getSmartMoney(chain?: string, limit?: number): Promise<unknown> {
const query: Record<string, string | number> = {};
if (chain) query["chain"] = chain;
if (limit != null) query["limit"] = limit;
return this.normalRequest("GET", "/v1/user/smartmoney", query);
}