feat(chains): support robinhood on kol, smartmoney, signal and cooking

- Remove the robinhood-rejection guards in kol, smartmoney, signal and
  cooking create-token so the CLI matches the backend, which now accepts
  robinhood on these endpoints
- Update --chain / --dex / --raised-token help text and error messages
- cooking: robinhood launchpad uses trench / pons DEXes, native raised
  token only
- Sync SKILL.md files, cli-usage.md and both Readmes with the new chain
  support

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
David Lau
2026-07-22 19:53:25 +08:00
co-authored by Claude Opus 4.8
parent 97df79b9f6
commit e68e889c3c
9 changed files with 29 additions and 42 deletions
+3 -7
View File
@@ -22,8 +22,8 @@ export function registerCookingCommands(program: Command): void {
cooking
.command("create")
.description("Create a token on a launchpad platform (requires private key)")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base")
.requiredOption("--dex <dex>", "Launchpad: pump / bonk / bags (sol) / fourmeme / flap (bsc) / klik / clanker (base)")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base / robinhood")
.requiredOption("--dex <dex>", "Launchpad: pump / bonk / bags (sol) / fourmeme / flap (bsc) / klik / clanker (base) / trench / pons (robinhood)")
.requiredOption("--from <address>", "Wallet address (must match API Key binding)")
.requiredOption("--name <name>", "Token name")
.requiredOption("--symbol <symbol>", "Token symbol")
@@ -44,7 +44,7 @@ export function registerCookingCommands(program: Command): void {
.option("--max-priority-fee-per-gas <amount>", "Max priority fee per gas in wei (EVM only)")
.option("--anti-mev", "Enable anti-MEV protection (SOL only)")
.option("--anti-mev-mode <mode>", "Anti-MEV mode: off / normal / secure (SOL only)")
.option("--raised-token <symbol>", "Raise token symbol: pump→USDC; bonk→USD1; fourmeme→USDT/USD1; leave empty for native")
.option("--raised-token <symbol>", "Raise token symbol: pump→USDC; bonk→USD1; fourmeme→USDT/USD1; base/robinhood→native only; leave empty for native")
.option("--dev-wallet-bps <n>", "Dev wallet fee in basis points (100 = 1%)", parseInt)
.option("--dev-gas <amount>", "Dev gas amount")
.option("--dev-priority <amount>", "Dev priority fee")
@@ -84,10 +84,6 @@ export function registerCookingCommands(program: Command): void {
process.exit(1);
}
validateChain(opts.chain);
if (opts.chain === "robinhood") {
console.error(`[gmgn-cli] cooking create does not support robinhood, got "${opts.chain}"`);
process.exit(1);
}
// Validate/clean all free-text and link metadata before publishing. This
// prevents the CLI from being used to mint tokens whose metadata carries a
// prompt-injection payload aimed at other users' AI agents.
+3 -3
View File
@@ -157,7 +157,7 @@ export function registerMarketCommands(program: Command): void {
market
.command("signal")
.description("Query token signals (price spikes, smart money buys, large buys, etc.) — max 50 results per group")
.requiredOption("--chain <chain>", "Chain: sol / bsc")
.requiredOption("--chain <chain>", "Chain: sol / bsc / robinhood")
.option("--signal-type <n...>", "Signal type(s), repeatable: 118 (default: all types)", (v: string, acc: number[]) => { acc.push(parseInt(v, 10)); return acc; }, [] as number[])
.option("--mc-min <usd>", "Min market cap at trigger time (USD)", parseFloat)
.option("--mc-max <usd>", "Max market cap at trigger time (USD)", parseFloat)
@@ -171,8 +171,8 @@ export function registerMarketCommands(program: Command): void {
.option("--raw", "Output raw JSON")
.action(async (opts: Record<string, unknown>) => {
validateChain(opts["chain"] as string);
if (!["sol", "bsc"].includes(opts["chain"] as string)) {
console.error(`[gmgn-cli] market signal only supports sol and bsc, got "${opts["chain"]}"`);
if (!["sol", "bsc", "robinhood"].includes(opts["chain"] as string)) {
console.error(`[gmgn-cli] market signal only supports sol, bsc and robinhood, got "${opts["chain"]}"`);
process.exit(1);
}
+2 -10
View File
@@ -76,16 +76,12 @@ export function registerTrackCommands(program: Command): void {
track
.command("kol")
.description("Get KOL trade records")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base / eth")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base / eth / robinhood")
.option("--limit <n>", "Page size (1200, default 100)", parseInt)
.option("--side <side>", "Filter by trade direction: buy / sell (client-side filter)")
.option("--raw", "Output raw JSON")
.action(async (opts) => {
if (opts.chain) validateChain(opts.chain);
if (opts.chain === "robinhood") {
console.error(`[gmgn-cli] track kol does not support robinhood, got "${opts.chain}"`);
process.exit(1);
}
const client = new OpenApiClient(getConfig());
const data = await client.getKol(opts.chain, opts.limit).catch(exitOnError) as { list?: { side: string }[] };
if (opts.side && data?.list) {
@@ -97,16 +93,12 @@ export function registerTrackCommands(program: Command): void {
track
.command("smartmoney")
.description("Get Smart Money trade records")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base / eth")
.requiredOption("--chain <chain>", "Chain: sol / bsc / base / eth / robinhood")
.option("--limit <n>", "Page size (1200, default 100)", parseInt)
.option("--side <side>", "Filter by trade direction: buy / sell (client-side filter)")
.option("--raw", "Output raw JSON")
.action(async (opts) => {
if (opts.chain) validateChain(opts.chain);
if (opts.chain === "robinhood") {
console.error(`[gmgn-cli] track smartmoney does not support robinhood, got "${opts.chain}"`);
process.exit(1);
}
const client = new OpenApiClient(getConfig());
const data = await client.getSmartMoney(opts.chain, opts.limit).catch(exitOnError) as { list?: { side: string }[] };
if (opts.side && data?.list) {